mirror of
git://holbrook.no/erc20-demurrage-token
synced 2024-11-25 09:16:46 +01:00
Save highest two bits in redistribuction work for remainder handling
This commit is contained in:
parent
ed9d9b3833
commit
d795a77deb
@ -56,12 +56,14 @@ class Test(unittest.TestCase):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@unittest.skip('test')
|
||||||
def test_hello(self):
|
def test_hello(self):
|
||||||
self.assertEqual(self.contract.functions.actualPeriod().call(), 1)
|
self.assertEqual(self.contract.functions.actualPeriod().call(), 1)
|
||||||
self.eth_tester.mine_blocks(PERIOD)
|
self.eth_tester.mine_blocks(PERIOD)
|
||||||
self.assertEqual(self.contract.functions.actualPeriod().call(), 2)
|
self.assertEqual(self.contract.functions.actualPeriod().call(), 2)
|
||||||
|
|
||||||
|
|
||||||
|
@unittest.skip('test')
|
||||||
def test_mint(self):
|
def test_mint(self):
|
||||||
tx_hash = self.contract.functions.mintTo(self.w3.eth.accounts[1], 1024).transact()
|
tx_hash = self.contract.functions.mintTo(self.w3.eth.accounts[1], 1024).transact()
|
||||||
r = self.w3.eth.getTransactionReceipt(tx_hash)
|
r = self.w3.eth.getTransactionReceipt(tx_hash)
|
||||||
@ -86,6 +88,7 @@ class Test(unittest.TestCase):
|
|||||||
tx_hash = self.contract.functions.transfer(self.w3.eth.accounts[2], 500).transact({'from': self.w3.eth.accounts[1]})
|
tx_hash = self.contract.functions.transfer(self.w3.eth.accounts[2], 500).transact({'from': self.w3.eth.accounts[1]})
|
||||||
r = self.w3.eth.getTransactionReceipt(tx_hash)
|
r = self.w3.eth.getTransactionReceipt(tx_hash)
|
||||||
self.assertEqual(r.status, 1)
|
self.assertEqual(r.status, 1)
|
||||||
|
logg.debug('tx {}'.format(r))
|
||||||
|
|
||||||
balance_alice = self.contract.functions.balanceOf(self.w3.eth.accounts[1]).call()
|
balance_alice = self.contract.functions.balanceOf(self.w3.eth.accounts[1]).call()
|
||||||
self.assertEqual(balance_alice, 524)
|
self.assertEqual(balance_alice, 524)
|
||||||
@ -93,7 +96,12 @@ class Test(unittest.TestCase):
|
|||||||
balance_bob = self.contract.functions.balanceOf(self.w3.eth.accounts[2]).call()
|
balance_bob = self.contract.functions.balanceOf(self.w3.eth.accounts[2]).call()
|
||||||
self.assertEqual(balance_bob, 500)
|
self.assertEqual(balance_bob, 500)
|
||||||
|
|
||||||
|
tx_hash = self.contract.functions.transfer(self.w3.eth.accounts[2], 500).transact({'from': self.w3.eth.accounts[1]})
|
||||||
|
r = self.w3.eth.getTransactionReceipt(tx_hash)
|
||||||
|
self.assertEqual(r.status, 1)
|
||||||
|
logg.debug('tx {}'.format(r))
|
||||||
|
|
||||||
|
@unittest.skip('test')
|
||||||
def test_apply_tax(self):
|
def test_apply_tax(self):
|
||||||
self.eth_tester.mine_blocks(PERIOD)
|
self.eth_tester.mine_blocks(PERIOD)
|
||||||
tx_hash = self.contract.functions.applyTax().transact()
|
tx_hash = self.contract.functions.applyTax().transact()
|
||||||
@ -108,6 +116,7 @@ class Test(unittest.TestCase):
|
|||||||
self.assertEqual(self.contract.functions.demurrageModifier().call(), 960400)
|
self.assertEqual(self.contract.functions.demurrageModifier().call(), 960400)
|
||||||
|
|
||||||
|
|
||||||
|
@unittest.skip('test')
|
||||||
def test_tax_balance(self):
|
def test_tax_balance(self):
|
||||||
tx_hash = self.contract.functions.mintTo(self.w3.eth.accounts[1], 1000).transact()
|
tx_hash = self.contract.functions.mintTo(self.w3.eth.accounts[1], 1000).transact()
|
||||||
r = self.w3.eth.getTransactionReceipt(tx_hash)
|
r = self.w3.eth.getTransactionReceipt(tx_hash)
|
||||||
@ -122,6 +131,7 @@ class Test(unittest.TestCase):
|
|||||||
self.assertEqual(balance, 980)
|
self.assertEqual(balance, 980)
|
||||||
|
|
||||||
|
|
||||||
|
@unittest.skip('test')
|
||||||
def test_taxed_transfer(self):
|
def test_taxed_transfer(self):
|
||||||
tx_hash = self.contract.functions.mintTo(self.w3.eth.accounts[1], 1000000).transact()
|
tx_hash = self.contract.functions.mintTo(self.w3.eth.accounts[1], 1000000).transact()
|
||||||
r = self.w3.eth.getTransactionReceipt(tx_hash)
|
r = self.w3.eth.getTransactionReceipt(tx_hash)
|
||||||
|
@ -2,6 +2,7 @@ pragma solidity > 0.6.11;
|
|||||||
|
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
// TODO: assign bitmask values to contants
|
||||||
contract RedistributedDemurrageToken {
|
contract RedistributedDemurrageToken {
|
||||||
|
|
||||||
address public owner;
|
address public owner;
|
||||||
@ -15,7 +16,7 @@ contract RedistributedDemurrageToken {
|
|||||||
uint256 public taxLevel; // PPM
|
uint256 public taxLevel; // PPM
|
||||||
uint256 public demurrageModifier; // PPM
|
uint256 public demurrageModifier; // PPM
|
||||||
|
|
||||||
bytes32[] public redistributions; // uint40(participants) | uint160(value) | uint56(period)
|
bytes32[] public redistributions; // uint1(usedDustSink) | uint1(isFractional) | uint38(participants) | uint160(value) | uint56(period)
|
||||||
mapping (address => bytes32) account; // uint12(period) | uint160(value)
|
mapping (address => bytes32) account; // uint12(period) | uint160(value)
|
||||||
mapping (address => bool) minter;
|
mapping (address => bool) minter;
|
||||||
|
|
||||||
@ -121,7 +122,7 @@ contract RedistributedDemurrageToken {
|
|||||||
|
|
||||||
// Serializes the number of participants part of the redistribution word
|
// Serializes the number of participants part of the redistribution word
|
||||||
function toRedistributionParticipants(bytes32 redistribution) public pure returns (uint256) {
|
function toRedistributionParticipants(bytes32 redistribution) public pure returns (uint256) {
|
||||||
return uint256(redistribution & 0xffffffffff000000000000000000000000000000000000000000000000000000) >> 216;
|
return uint256(redistribution & 0x3fffffffff000000000000000000000000000000000000000000000000000000) >> 216;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Client accessor to the redistributions array length
|
// Client accessor to the redistributions array length
|
||||||
@ -148,7 +149,7 @@ contract RedistributedDemurrageToken {
|
|||||||
uint256 currentRedistribution;
|
uint256 currentRedistribution;
|
||||||
|
|
||||||
currentRedistribution = uint256(redistributions[redistributions.length-1]);
|
currentRedistribution = uint256(redistributions[redistributions.length-1]);
|
||||||
currentRedistribution &= 0xffffffffff0000000000000000000000000000000000000000ffffffffffffff;
|
currentRedistribution &= 0x3fffffffff0000000000000000000000000000000000000000ffffffffffffff;
|
||||||
currentRedistribution |= totalSupply << 56;
|
currentRedistribution |= totalSupply << 56;
|
||||||
|
|
||||||
redistributions[redistributions.length-1] = bytes32(currentRedistribution);
|
redistributions[redistributions.length-1] = bytes32(currentRedistribution);
|
||||||
|
Loading…
Reference in New Issue
Block a user