From 2f4f8bb7b93bd12d057d31151b197ea17287de99 Mon Sep 17 00:00:00 2001 From: lash Date: Mon, 5 Dec 2022 18:53:07 +0000 Subject: [PATCH] Add test for arbitrary account demurrage honoring burn amount --- python/tests/test_burn.py | 101 +++++++++++++++++++++++++------------- 1 file changed, 66 insertions(+), 35 deletions(-) diff --git a/python/tests/test_burn.py b/python/tests/test_burn.py index 01fe628..a7fe9d4 100644 --- a/python/tests/test_burn.py +++ b/python/tests/test_burn.py @@ -124,41 +124,72 @@ class TestBurn(TestDemurrageDefault): -# def test_burned_other_redistribution(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[0], 1024) -# r = self.rpc.do(o) -# -# (tx_hash, o) = c.burn(self.address, self.accounts[0], 500) -# r = self.rpc.do(o) -# -# (tx_hash, o) = c.transfer(self.address, self.accounts[0], self.accounts[1], 524) -# r = self.rpc.do(o) -# -# self.backend.time_travel(self.start_time + self.period_seconds) -# -# (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.total_supply(self.address, sender_address=self.accounts[0]) -# r = self.rpc.do(o) -# new_supply = c.parse_total_supply(r) -# self.assertEqual(new_supply, 524) -# -# o = c.balance(self.address, self.accounts[1], sender_address=self.accounts[0]) -# r = self.rpc.do(o) -# bal = c.parse_balance(r) -# self.assertEqual(bal, 524) -# -# o = c.balance(self.address, self.sink_address, sender_address=self.accounts[0]) -# r = self.rpc.do(o) -# bal = c.parse_balance(r) -# self.assertEqual(bal, 524) + def test_burned_other_redistribution(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[0], 1000000000) + r = self.rpc.do(o) + + (tx_hash, o) = c.burn(self.address, self.accounts[0], 500000000) + r = self.rpc.do(o) + + (tx_hash, o) = c.transfer(self.address, self.accounts[0], self.accounts[1], 500000000) + r = self.rpc.do(o) + + self.backend.time_travel(self.start_time + self.period_seconds) + + o = c.balance(self.address, self.accounts[1], sender_address=self.accounts[0]) + r = self.rpc.do(o) + bal = c.parse_balance(r) + self.assertEqual(bal, 416873881) # 9 periods demurrage + + (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.total_supply(self.address, sender_address=self.accounts[0]) + r = self.rpc.do(o) + new_supply = c.parse_total_supply(r) + self.assertEqual(new_supply, 500000000) + + o = c.balance(self.address, self.accounts[1], sender_address=self.accounts[0]) + r = self.rpc.do(o) + bal = c.parse_balance(r) + self.assertEqual(bal, 408536403) # 9 periods demurrage + + o = c.balance(self.address, self.sink_address, sender_address=self.accounts[0]) + r = self.rpc.do(o) + sink_bal = c.parse_balance(r) + self.assert_within_lower(sink_bal, 500000000 - 408536403, 0.09) # TODO is this ok variance, 1.0 is ppm? + + self.backend.time_travel(self.start_time + (self.period_seconds * 2)) + + (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.total_supply(self.address, sender_address=self.accounts[0]) + r = self.rpc.do(o) + new_supply = c.parse_total_supply(r) + self.assertEqual(new_supply, 500000000) + + o = c.balance(self.address, self.accounts[1], sender_address=self.accounts[0]) + r = self.rpc.do(o) + next_bal = c.parse_balance(r) + self.assertEqual(next_bal, 333803985) # 9 periods demurrage + + o = c.balance(self.address, self.sink_address, sender_address=self.accounts[0]) + r = self.rpc.do(o) + prev_sink_bal = sink_bal + bal = prev_sink_bal + (bal - next_bal) + sink_bal = c.parse_balance(r) + self.assert_within_lower(sink_bal, bal, 0.09) # TODO is this ok variance, 1.0 is ppm? + if __name__ == '__main__': unittest.main()