Settable sink address
This commit is contained in:
parent
276b346e52
commit
f75caede0f
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,6 +1,6 @@
|
|||||||
[metadata]
|
[metadata]
|
||||||
name = erc20-demurrage-token
|
name = erc20-demurrage-token
|
||||||
version = 0.0.9
|
version = 0.0.10
|
||||||
description = ERC20 token with redistributed continual demurrage
|
description = ERC20 token with redistributed continual demurrage
|
||||||
author = Louis Holbrook
|
author = Louis Holbrook
|
||||||
author_email = dev@holbrook.no
|
author_email = dev@holbrook.no
|
||||||
|
@ -80,7 +80,6 @@ class TestBasic(TestDemurrageDefault):
|
|||||||
self.assertEqual(modifier, demurrage_amount)
|
self.assertEqual(modifier, demurrage_amount)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def test_apply_demurrage(self):
|
def test_apply_demurrage(self):
|
||||||
modifier = (10 ** 28)
|
modifier = (10 ** 28)
|
||||||
|
|
||||||
|
@ -7,7 +7,15 @@ import logging
|
|||||||
# external imports
|
# external imports
|
||||||
from chainlib.eth.constant import ZERO_ADDRESS
|
from chainlib.eth.constant import ZERO_ADDRESS
|
||||||
from chainlib.eth.nonce import RPCNonceOracle
|
from chainlib.eth.nonce import RPCNonceOracle
|
||||||
from chainlib.eth.tx import receipt
|
from chainlib.eth.tx import (
|
||||||
|
receipt,
|
||||||
|
TxFactory,
|
||||||
|
TxFormat,
|
||||||
|
)
|
||||||
|
from chainlib.eth.contract import (
|
||||||
|
ABIContractEncoder,
|
||||||
|
ABIContractType,
|
||||||
|
)
|
||||||
|
|
||||||
# local imports
|
# local imports
|
||||||
from erc20_demurrage_token import DemurrageToken
|
from erc20_demurrage_token import DemurrageToken
|
||||||
@ -103,5 +111,76 @@ class TestPeriod(TestDemurrageDefault):
|
|||||||
self.assertEqual(modifier, period)
|
self.assertEqual(modifier, period)
|
||||||
|
|
||||||
|
|
||||||
|
def test_change_sink(self):
|
||||||
|
nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc)
|
||||||
|
c = DemurrageToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
|
||||||
|
|
||||||
|
o = c.balance_of(self.address, ZERO_ADDRESS, sender_address=self.accounts[0])
|
||||||
|
r = self.rpc.do(o)
|
||||||
|
balance = c.parse_balance_of(r)
|
||||||
|
self.assertEqual(balance, 0)
|
||||||
|
|
||||||
|
(tx_hash, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1], 102400000000)
|
||||||
|
r = self.rpc.do(o)
|
||||||
|
o = receipt(tx_hash)
|
||||||
|
r = self.rpc.do(o)
|
||||||
|
self.assertEqual(r['status'], 1)
|
||||||
|
|
||||||
|
self.backend.time_travel(self.start_time + self.period_seconds + 1)
|
||||||
|
|
||||||
|
c = DemurrageToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
|
||||||
|
(tx_hash, o) = c.change_period(self.address, self.accounts[0])
|
||||||
|
r = self.rpc.do(o)
|
||||||
|
o = receipt(tx_hash)
|
||||||
|
r = self.rpc.do(o)
|
||||||
|
self.assertEqual(r['status'], 1)
|
||||||
|
|
||||||
|
o = c.balance_of(self.address, ZERO_ADDRESS, sender_address=self.accounts[0])
|
||||||
|
r = self.rpc.do(o)
|
||||||
|
balance = c.parse_balance_of(r)
|
||||||
|
self.assertGreater(balance, 0)
|
||||||
|
old_sink_balance = balance
|
||||||
|
|
||||||
|
o = c.balance_of(self.address, self.accounts[3], sender_address=self.accounts[0])
|
||||||
|
r = self.rpc.do(o)
|
||||||
|
balance = c.parse_balance_of(r)
|
||||||
|
self.assertEqual(balance, 0)
|
||||||
|
|
||||||
|
nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc)
|
||||||
|
c = TxFactory(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
|
||||||
|
enc = ABIContractEncoder()
|
||||||
|
enc.method('setSinkAddress')
|
||||||
|
enc.typ(ABIContractType.ADDRESS)
|
||||||
|
enc.address(self.accounts[3])
|
||||||
|
data = enc.get()
|
||||||
|
o = c.template(self.accounts[0], self.address, use_nonce=True)
|
||||||
|
o = c.set_code(o, data)
|
||||||
|
(tx_hash, o) = c.finalize(o, TxFormat.JSONRPC)
|
||||||
|
r = self.rpc.do(o)
|
||||||
|
|
||||||
|
o = receipt(tx_hash)
|
||||||
|
r = self.rpc.do(o)
|
||||||
|
self.assertEqual(r['status'], 1)
|
||||||
|
|
||||||
|
self.backend.time_travel(self.start_time + (self.period_seconds * 2) + 1)
|
||||||
|
|
||||||
|
c = DemurrageToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
|
||||||
|
(tx_hash, o) = c.change_period(self.address, self.accounts[0])
|
||||||
|
r = self.rpc.do(o)
|
||||||
|
o = receipt(tx_hash)
|
||||||
|
r = self.rpc.do(o)
|
||||||
|
self.assertEqual(r['status'], 1)
|
||||||
|
|
||||||
|
o = c.balance_of(self.address, ZERO_ADDRESS, sender_address=self.accounts[0])
|
||||||
|
r = self.rpc.do(o)
|
||||||
|
balance = c.parse_balance_of(r)
|
||||||
|
self.assertLess(balance, old_sink_balance)
|
||||||
|
|
||||||
|
o = c.balance_of(self.address, self.accounts[3], sender_address=self.accounts[0])
|
||||||
|
r = self.rpc.do(o)
|
||||||
|
balance = c.parse_balance_of(r)
|
||||||
|
self.assertGreater(balance, 0)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
@ -128,6 +128,12 @@ contract DemurrageTokenSingleCap {
|
|||||||
minimumParticipantSpend = 10 ** uint256(_decimals);
|
minimumParticipantSpend = 10 ** uint256(_decimals);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Change sink address for redistribution
|
||||||
|
function setSinkAddress(address _sinkAddress) public {
|
||||||
|
require(msg.sender == owner);
|
||||||
|
sinkAddress = _sinkAddress;
|
||||||
|
}
|
||||||
|
|
||||||
// Given address will be allowed to call the mintTo() function
|
// Given address will be allowed to call the mintTo() function
|
||||||
function addMinter(address _minter) public returns (bool) {
|
function addMinter(address _minter) public returns (bool) {
|
||||||
require(msg.sender == owner);
|
require(msg.sender == owner);
|
||||||
|
@ -124,6 +124,13 @@ contract DemurrageTokenSingleCap {
|
|||||||
minimumParticipantSpend = 10 ** uint256(_decimals);
|
minimumParticipantSpend = 10 ** uint256(_decimals);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Change sink address for redistribution
|
||||||
|
function setSinkAddress(address _sinkAddress) public {
|
||||||
|
require(msg.sender == owner);
|
||||||
|
sinkAddress = _sinkAddress;
|
||||||
|
}
|
||||||
|
|
||||||
// Given address will be allowed to call the mintTo() function
|
// Given address will be allowed to call the mintTo() function
|
||||||
function addMinter(address _minter) public returns (bool) {
|
function addMinter(address _minter) public returns (bool) {
|
||||||
require(msg.sender == owner);
|
require(msg.sender == owner);
|
||||||
|
Reference in New Issue
Block a user