# standard imports import unittest import logging # external imports from chainlib.chain import ChainSpec # local imports from erc20_demurrage_token import DemurrageTokenSettings from erc20_demurrage_token.sim import DemurrageTokenSimulation logging.basicConfig(level=logging.INFO) logg = logging.getLogger() class TestSim(unittest.TestCase): def setUp(self): self.chain_spec = ChainSpec('evm', 'foochain', 42) self.cap = 0 settings = DemurrageTokenSettings() settings.name = 'Simulated Demurrage Token' settings.symbol = 'SIM' settings.decimals = 6 settings.demurrage_level = 5010590837337300000000000000000000 # equals approx 2% per month settings.period_minutes = 10800 # 1 week in minutes self.sim = DemurrageTokenSimulation(self.chain_spec, settings, redistribute=True, cap=self.cap, actors=10) def test_mint(self): self.sim.mint(self.sim.actors[0], 1024) self.sim.next() balance = self.sim.balance(self.sim.actors[0]) self.assertEqual(balance, 1023) def test_transfer(self): self.sim.mint(self.sim.actors[0], 1024) self.sim.transfer(self.sim.actors[0], self.sim.actors[1], 500) self.sim.next() balance = self.sim.balance(self.sim.actors[0]) self.assertEqual(balance, 523) balance = self.sim.balance(self.sim.actors[1]) self.assertEqual(balance, 499) def test_more_periods(self): self.sim.mint(self.sim.actors[0], 1024) self.sim.mint(self.sim.actors[1], 1024) self.sim.next() self.sim.mint(self.sim.actors[0], 1024) self.sim.next() balance = self.sim.balance(self.sim.actors[0]) self.assertEqual(balance, 2047) def test_demurrage(self): self.sim.mint(self.sim.actors[0], self.sim.from_units(100)) self.sim.mint(self.sim.actors[1], self.sim.from_units(100)) self.sim.transfer(self.sim.actors[0], self.sim.actors[2], self.sim.from_units(10)) self.sim.next() balance = self.sim.balance(self.sim.actors[0]) self.assertEqual(balance, 89995500) balance = self.sim.balance(self.sim.actors[1]) self.assertEqual(balance, 99995000) balance = self.sim.balance(self.sim.actors[1], base=True) self.assertEqual(balance, 100000000) if __name__ == '__main__': unittest.main()