test_seal.py (6518B)
1 # standard imports 2 import os 3 import unittest 4 import json 5 import logging 6 import datetime 7 8 # external imports 9 from chainlib.eth.constant import ZERO_ADDRESS 10 from chainlib.eth.nonce import RPCNonceOracle 11 from chainlib.eth.tx import receipt 12 from chainlib.eth.block import ( 13 block_latest, 14 block_by_number, 15 ) 16 17 # local imports 18 from erc20_demurrage_token import DemurrageToken 19 from erc20_demurrage_token.seal import ContractState 20 from erc20_demurrage_token.seal import CONTRACT_SEAL_STATE_MAX 21 22 # test imports 23 from erc20_demurrage_token.unittest import TestDemurrageDefault 24 25 logging.basicConfig(level=logging.DEBUG) 26 logg = logging.getLogger() 27 28 testdir = os.path.dirname(__file__) 29 30 31 32 class TestSeal(TestDemurrageDefault): 33 34 def test_seal_dup(self): 35 nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc) 36 c = DemurrageToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) 37 38 (tx_hash, o) = c.seal(self.address, self.accounts[0], 1) 39 r = self.rpc.do(o) 40 o = receipt(tx_hash) 41 r = self.rpc.do(o) 42 self.assertEqual(r['status'], 1) 43 44 (tx_hash, o) = c.seal(self.address, self.accounts[0], 1) 45 r = self.rpc.do(o) 46 o = receipt(tx_hash) 47 r = self.rpc.do(o) 48 self.assertEqual(r['status'], 0) 49 50 51 def test_seal_all(self): 52 nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc) 53 c = DemurrageToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) 54 55 (tx_hash, o) = c.seal(self.address, self.accounts[0], CONTRACT_SEAL_STATE_MAX) 56 r = self.rpc.do(o) 57 o = receipt(tx_hash) 58 r = self.rpc.do(o) 59 self.assertEqual(r['status'], 1) 60 61 o = c.is_sealed(self.address, 0, sender_address=self.accounts[0]) 62 r = self.rpc.do(o) 63 self.assertTrue(c.parse_is_sealed(r)) 64 65 66 def test_seal_minter(self): 67 nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc) 68 c = DemurrageToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) 69 70 (tx_hash, o) = c.add_minter(self.address, self.accounts[0], self.accounts[1]) 71 r = self.rpc.do(o) 72 o = receipt(tx_hash) 73 r = self.rpc.do(o) 74 self.assertEqual(r['status'], 1) 75 76 (tx_hash, o) = c.seal(self.address, self.accounts[0], ContractState.MINTER_STATE) 77 r = self.rpc.do(o) 78 o = receipt(tx_hash) 79 r = self.rpc.do(o) 80 self.assertEqual(r['status'], 1) 81 82 (tx_hash, o) = c.add_minter(self.address, self.accounts[0], self.accounts[2]) 83 r = self.rpc.do(o) 84 o = receipt(tx_hash) 85 r = self.rpc.do(o) 86 self.assertEqual(r['status'], 0) 87 88 o = c.is_sealed(self.address, ContractState.MINTER_STATE, sender_address=self.accounts[0]) 89 r = self.rpc.do(o) 90 self.assertTrue(c.parse_is_sealed(r)) 91 92 93 def test_seal_expiry(self): 94 nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc) 95 c = DemurrageToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) 96 97 (tx_hash, o) = c.set_expire_period(self.address, self.accounts[0], 10) 98 r = self.rpc.do(o) 99 o = receipt(tx_hash) 100 r = self.rpc.do(o) 101 self.assertEqual(r['status'], 1) 102 103 (tx_hash, o) = c.set_expire_period(self.address, self.accounts[0], 20) 104 r = self.rpc.do(o) 105 o = receipt(tx_hash) 106 r = self.rpc.do(o) 107 self.assertEqual(r['status'], 1) 108 109 (tx_hash, o) = c.seal(self.address, self.accounts[0], ContractState.EXPIRY_STATE) 110 r = self.rpc.do(o) 111 o = receipt(tx_hash) 112 r = self.rpc.do(o) 113 self.assertEqual(r['status'], 1) 114 115 (tx_hash, o) = c.set_expire_period(self.address, self.accounts[0], 21) 116 r = self.rpc.do(o) 117 o = receipt(tx_hash) 118 r = self.rpc.do(o) 119 self.assertEqual(r['status'], 0) 120 121 o = c.is_sealed(self.address, ContractState.EXPIRY_STATE, sender_address=self.accounts[0]) 122 r = self.rpc.do(o) 123 self.assertTrue(c.parse_is_sealed(r)) 124 125 126 def test_seal_set_sink_address(self): 127 nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc) 128 c = DemurrageToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) 129 130 (tx_hash, o) = c.set_sink_address(self.address, self.accounts[0], self.accounts[3]) 131 r = self.rpc.do(o) 132 o = receipt(tx_hash) 133 r = self.rpc.do(o) 134 self.assertEqual(r['status'], 1) 135 136 (tx_hash, o) = c.set_sink_address(self.address, self.accounts[0], self.accounts[4]) 137 r = self.rpc.do(o) 138 o = receipt(tx_hash) 139 r = self.rpc.do(o) 140 self.assertEqual(r['status'], 1) 141 142 (tx_hash, o) = c.seal(self.address, self.accounts[0], ContractState.SINK_STATE) 143 r = self.rpc.do(o) 144 o = receipt(tx_hash) 145 r = self.rpc.do(o) 146 self.assertEqual(r['status'], 1) 147 148 (tx_hash, o) = c.set_sink_address(self.address, self.accounts[0], self.accounts[5]) 149 r = self.rpc.do(o) 150 o = receipt(tx_hash) 151 r = self.rpc.do(o) 152 self.assertEqual(r['status'], 0) 153 154 o = c.is_sealed(self.address, ContractState.SINK_STATE, sender_address=self.accounts[0]) 155 r = self.rpc.do(o) 156 self.assertTrue(c.parse_is_sealed(r)) 157 158 159 def test_seal_cap(self): 160 nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc) 161 c = DemurrageToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) 162 163 (tx_hash, o) = c.set_max_supply(self.address, self.accounts[0], 100) 164 r = self.rpc.do(o) 165 o = receipt(tx_hash) 166 r = self.rpc.do(o) 167 self.assertEqual(r['status'], 1) 168 169 (tx_hash, o) = c.set_max_supply(self.address, self.accounts[0], 200) 170 r = self.rpc.do(o) 171 o = receipt(tx_hash) 172 r = self.rpc.do(o) 173 self.assertEqual(r['status'], 1) 174 175 (tx_hash, o) = c.seal(self.address, self.accounts[0], ContractState.CAP_STATE) 176 r = self.rpc.do(o) 177 o = receipt(tx_hash) 178 r = self.rpc.do(o) 179 self.assertEqual(r['status'], 1) 180 181 (tx_hash, o) = c.set_max_supply(self.address, self.accounts[0], 300) 182 r = self.rpc.do(o) 183 o = receipt(tx_hash) 184 r = self.rpc.do(o) 185 self.assertEqual(r['status'], 0) 186 187 o = c.is_sealed(self.address, ContractState.CAP_STATE, sender_address=self.accounts[0]) 188 r = self.rpc.do(o) 189 self.assertTrue(c.parse_is_sealed(r)) 190 191 192 if __name__ == '__main__': 193 unittest.main() 194 195