From 3b87961d13d0a198422c4d20b19cf03ac328e4a9 Mon Sep 17 00:00:00 2001 From: lash Date: Tue, 13 Dec 2022 13:26:27 +0000 Subject: [PATCH] WIP investigate apparent overflow problem --- python/erc20_demurrage_token/demurrage.py | 3 +- python/erc20_demurrage_token/unittest/base.py | 2 +- python/tests/test_demurrage.py | 88 +++++++++++++++++++ 3 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 python/tests/test_demurrage.py diff --git a/python/erc20_demurrage_token/demurrage.py b/python/erc20_demurrage_token/demurrage.py index 7941ee2..50bad93 100644 --- a/python/erc20_demurrage_token/demurrage.py +++ b/python/erc20_demurrage_token/demurrage.py @@ -9,8 +9,7 @@ from chainlib.eth.constant import ZERO_ADDRESS # local imports from .token import DemurrageToken -logging.basicConfig(level=logging.DEBUG) -logg = logging.getLogger() +logg = logging.getLogger(__name__) class DemurrageCalculator: diff --git a/python/erc20_demurrage_token/unittest/base.py b/python/erc20_demurrage_token/unittest/base.py index c7eda7c..232043c 100644 --- a/python/erc20_demurrage_token/unittest/base.py +++ b/python/erc20_demurrage_token/unittest/base.py @@ -20,7 +20,7 @@ from erc20_demurrage_token import ( DemurrageToken, ) -logg = logging.getLogger() +logg = logging.getLogger(__name__) #BLOCKTIME = 5 # seconds TAX_LEVEL = int(10000 * 2) # 2% diff --git a/python/tests/test_demurrage.py b/python/tests/test_demurrage.py new file mode 100644 index 0000000..cd101a9 --- /dev/null +++ b/python/tests/test_demurrage.py @@ -0,0 +1,88 @@ +# standard imports +import datetime +import unittest +import logging +import os + +# external imports +from chainlib.eth.nonce import RPCNonceOracle +from chainlib.eth.tx import receipt + +# local imports +from erc20_demurrage_token import DemurrageToken +from erc20_demurrage_token.demurrage import DemurrageCalculator + +# test imports +from erc20_demurrage_token.unittest.base import TestDemurrage + +logging.basicConfig(level=logging.INFO) +logg = logging.getLogger() + + +class TestDemurragePeriods(TestDemurrage): + + def setUp(self): + super(TestDemurragePeriods, self).setUp() + + nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc) + c = DemurrageToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) + + self.mode = os.environ.get('ERC20_DEMURRAGE_TOKEN_TEST_MODE') + if self.mode == None: + self.mode = 'MultiNocap' + logg.debug('executing test setup default mode {}'.format(self.mode)) + + self.deployer.settings.sink_address = self.accounts[9] + self.deployer.sink_address = self.accounts[9] + self.deploy(c, self.mode) + + logg.info('deployed with mode {}'.format(self.mode)) + + + def test_overtime(self): + nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc) + c = DemurrageToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) + + (tx_hash, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1], self.default_supply) + r = self.rpc.do(o) + + o = c.balance(self.address, self.accounts[1], sender_address=self.accounts[0]) + r = self.rpc.do(o) + bob_bal = c.parse_balance(r) + prev_bob_bal = bob_bal + + nonce_oracle = RPCNonceOracle(self.sink_address, self.rpc) + c = DemurrageToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) + + for i in range(1, 1001): + self.backend.time_travel(self.start_time + (self.period_seconds * i)) + + (tx_hash, o) = c.transfer(self.address, self.sink_address, self.accounts[1], prev_bob_bal - bob_bal) + r = self.rpc.do(o) + o = receipt(tx_hash) + r = self.rpc.do(o) + self.assertEqual(r['status'], 1) + + (tx_hash, o) = c.change_period(self.address, self.sink_address) + self.rpc.do(o) + o = receipt(tx_hash) + r = self.rpc.do(o) + self.assertEqual(r['status'], 1) + + o = c.balance(self.address, self.accounts[1], sender_address=self.accounts[0]) + r = self.rpc.do(o) + bob_bal = c.parse_balance(r) + + o = c.balance(self.address, self.sink_address, sender_address=self.accounts[0]) + r = self.rpc.do(o) + sink_bal = c.parse_balance(r) + + o = c.total_supply(self.address, sender_address=self.accounts[0]) + r = self.rpc.do(o) + new_supply = c.parse_total_supply(r) + + logg.info('round {} supply {} balance sink {} bob {}'.format(i, new_supply, sink_bal, bob_bal)) + + +if __name__ == '__main__': + unittest.main()