test_basic.py (23371B)
1 # standard imports 2 import os 3 import unittest 4 import json 5 import logging 6 7 # external imports 8 from chainlib.eth.unittest.ethtester import EthTesterCase 9 from chainlib.connection import RPCConnection 10 from chainlib.eth.nonce import RPCNonceOracle 11 from chainlib.eth.address import to_checksum_address 12 from chainlib.eth.tx import ( 13 receipt, 14 transaction, 15 TxFormat, 16 ) 17 from chainlib.eth.contract import ( 18 abi_decode_single, 19 ABIContractType, 20 ) 21 from chainlib.eth.address import is_same_address 22 from chainlib.error import JSONRPCException 23 from chainlib.eth.constant import ZERO_ADDRESS 24 from hexathon import ( 25 add_0x, 26 strip_0x, 27 ) 28 from chainlib.eth.tx import TxFormat 29 from chainlib.eth.contract import ABIContractEncoder 30 from eth_interface.unittest import TestERC165 31 32 33 # local imports 34 from craft_nft import CraftNFT 35 from craft_nft.unittest import TestCraftNFT 36 from craft_nft.error import InvalidBatchError 37 from craft_nft.eth import ABIContractType 38 from craft_nft.nft import to_batch_key 39 40 logging.basicConfig(level=logging.DEBUG) 41 logg = logging.getLogger() 42 43 testdir = os.path.dirname(__file__) 44 45 hash_of_foo = '2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae' 46 hash_of_bar = 'fcde2b2edba56bf408601fb721fe9b5c338d10ee429ea04fae5511b68fbf8fb9' 47 48 49 class Test(TestCraftNFT, TestERC165): 50 51 def setUp(self): 52 super(Test, self).setUp() 53 self.flush_interface_check() 54 for ifc in [ 55 'ed75b333', 56 'abe1f1f5', 57 'f0440c0f', 58 '449a52f8', 59 '982ab05d', 60 #'150b7a02', 61 'dd9d2087', 62 'd283ef1d', 63 'c22876c3', 64 ]: 65 self.add_interface_check(ifc) 66 67 def test_allocate(self): 68 nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc) 69 c = CraftNFT(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) 70 (tx_hash_hex, o) = c.allocate(self.address, self.accounts[0], hash_of_foo, amount=0) 71 self.rpc.do(o) 72 o = receipt(tx_hash_hex) 73 r = self.conn.do(o) 74 self.assertEqual(r['status'], 1) 75 76 77 def test_allocate_batch(self): 78 nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc) 79 c = CraftNFT(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) 80 (tx_hash_hex, o) = c.allocate(self.address, self.accounts[0], hash_of_foo, amount=10) 81 self.rpc.do(o) 82 o = receipt(tx_hash_hex) 83 r = self.conn.do(o) 84 self.assertEqual(r['status'], 1) 85 86 87 def test_batch_of(self): 88 nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc) 89 c = CraftNFT(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) 90 (tx_hash_hex, o) = c.allocate(self.address, self.accounts[0], hash_of_foo, amount=10) 91 self.rpc.do(o) 92 93 (tx_hash_hex, o) = c.allocate(self.address, self.accounts[0], hash_of_foo, amount=20) 94 self.rpc.do(o) 95 o = receipt(tx_hash_hex) 96 r = self.conn.do(o) 97 self.assertEqual(r['status'], 1) 98 99 r = c.batch_of(self.rpc, self.address, hash_of_foo, 9, sender_address=self.accounts[0]) 100 self.assertEqual(r, 0) 101 102 r = c.batch_of(self.rpc, self.address, hash_of_foo, 10, sender_address=self.accounts[0]) 103 self.assertEqual(r, 1) 104 105 r = c.batch_of(self.rpc, self.address, hash_of_foo, 29, sender_address=self.accounts[0]) 106 self.assertEqual(r, 1) 107 108 with self.assertRaises(ValueError): 109 c.batch_of(self.rpc, self.address, hash_of_foo, 30, sender_address=self.accounts[0]) 110 111 112 def test_mint_to(self): 113 nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc) 114 c = CraftNFT(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) 115 116 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1], hash_of_foo, 0) 117 self.rpc.do(o) 118 o = receipt(tx_hash_hex) 119 r = self.conn.do(o) 120 self.assertEqual(r['status'], 0) 121 122 (tx_hash_hex, o) = c.allocate(self.address, self.accounts[0], hash_of_foo, amount=20) 123 self.rpc.do(o) 124 o = receipt(tx_hash_hex) 125 r = self.conn.do(o) 126 self.assertEqual(r['status'], 1) 127 128 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1], hash_of_foo, 0) 129 self.rpc.do(o) 130 o = receipt(tx_hash_hex) 131 r = self.conn.do(o) 132 self.assertEqual(r['status'], 1) 133 134 135 def test_mint_to_limit(self): 136 nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc) 137 c = CraftNFT(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) 138 (tx_hash_hex, o) = c.allocate(self.address, self.accounts[0], hash_of_foo, amount=10) 139 self.rpc.do(o) 140 o = receipt(tx_hash_hex) 141 r = self.conn.do(o) 142 self.assertEqual(r['status'], 1) 143 144 for i in range(10): 145 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[(i%8)+i], hash_of_foo, 0) 146 self.rpc.do(o) 147 o = receipt(tx_hash_hex) 148 r = self.conn.do(o) 149 self.assertEqual(r['status'], 1) 150 151 152 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[9], hash_of_foo, 0) 153 self.rpc.do(o) 154 o = receipt(tx_hash_hex) 155 r = self.conn.do(o) 156 self.assertEqual(r['status'], 0) 157 158 159 160 def test_mint_to_single(self): 161 nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc) 162 c = CraftNFT(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) 163 164 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1], hash_of_foo, 0) 165 self.rpc.do(o) 166 o = receipt(tx_hash_hex) 167 r = self.conn.do(o) 168 self.assertEqual(r['status'], 0) 169 170 (tx_hash_hex, o) = c.allocate(self.address, self.accounts[0], hash_of_foo, amount=0) 171 self.rpc.do(o) 172 o = receipt(tx_hash_hex) 173 r = self.conn.do(o) 174 self.assertEqual(r['status'], 1) 175 176 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1], hash_of_foo, 1) 177 self.rpc.do(o) 178 o = receipt(tx_hash_hex) 179 r = self.conn.do(o) 180 self.assertEqual(r['status'], 0) 181 182 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1], hash_of_foo, 0) 183 self.rpc.do(o) 184 o = receipt(tx_hash_hex) 185 r = self.conn.do(o) 186 self.assertEqual(r['status'], 1) 187 188 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1], hash_of_foo, 0) 189 self.rpc.do(o) 190 o = receipt(tx_hash_hex) 191 r = self.conn.do(o) 192 self.assertEqual(r['status'], 0) 193 194 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1], hash_of_foo, 1) 195 self.rpc.do(o) 196 o = receipt(tx_hash_hex) 197 r = self.conn.do(o) 198 self.assertEqual(r['status'], 0) 199 200 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[2], hash_of_foo, 0) 201 self.rpc.do(o) 202 o = receipt(tx_hash_hex) 203 r = self.conn.do(o) 204 self.assertEqual(r['status'], 0) 205 206 int_of_foo = int(hash_of_foo, 16) 207 o = c.owner_of(self.address, int_of_foo, sender_address=self.accounts[0]) 208 r = self.rpc.do(o) 209 owner = strip_0x(r) 210 self.assertTrue(is_same_address(owner[24:], self.accounts[1])) 211 212 213 214 def test_mint_to_batch(self): 215 nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc) 216 c = CraftNFT(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) 217 218 (tx_hash_hex, o) = c.allocate(self.address, self.accounts[0], hash_of_foo, amount=10) 219 self.rpc.do(o) 220 221 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1], hash_of_foo, 0) 222 self.rpc.do(o) 223 o = receipt(tx_hash_hex) 224 r = self.conn.do(o) 225 self.assertEqual(r['status'], 1) 226 227 expected_id = hash_of_foo[:64-16] + '0000000000000000' 228 o = c.get_token(self.address, expected_id, sender_address=self.accounts[0]) 229 r = self.rpc.do(o) 230 o = receipt(tx_hash_hex) 231 r = self.conn.do(o) 232 self.assertEqual(r['status'], 1) 233 234 o = c.owner_of(self.address, int(expected_id, 16), sender_address=self.accounts[0]) 235 r = self.rpc.do(o) 236 owner = strip_0x(r) 237 self.assertTrue(is_same_address(owner[24:], self.accounts[1])) 238 239 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[2], hash_of_foo, 0) 240 self.rpc.do(o) 241 o = receipt(tx_hash_hex) 242 r = self.conn.do(o) 243 self.assertEqual(r['status'], 1) 244 245 expected_id = hash_of_foo[:64-16] + '0000000000000001' 246 o = c.get_token(self.address, expected_id, sender_address=self.accounts[0]) 247 r = self.rpc.do(o) 248 249 o = c.owner_of(self.address, int(expected_id, 16), sender_address=self.accounts[0]) 250 r = self.rpc.do(o) 251 owner = strip_0x(r) 252 self.assertTrue(is_same_address(owner[24:], self.accounts[2])) 253 254 255 def test_mint_to_dup(self): 256 nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc) 257 c = CraftNFT(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) 258 259 (tx_hash_hex, o) = c.allocate(self.address, self.accounts[0], hash_of_foo, amount=10) 260 self.rpc.do(o) 261 262 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1], hash_of_foo, 0) 263 self.rpc.do(o) 264 o = receipt(tx_hash_hex) 265 r = self.conn.do(o) 266 self.assertEqual(r['status'], 1) 267 268 enc = ABIContractEncoder() 269 enc.method('mintTo') 270 enc.typ(ABIContractType.ADDRESS) 271 enc.typ(ABIContractType.BYTES32) 272 enc.typ(ABIContractType.UINT256) 273 enc.address(self.accounts[1]) 274 enc.bytes32(hash_of_foo) 275 enc.uint256(0) 276 data = enc.get() 277 tx = c.template(self.accounts[0], self.address, use_nonce=True) 278 tx = c.set_code(tx, data) 279 (tx_hash_hex, o) = c.finalize(tx, TxFormat.JSONRPC) 280 r = self.rpc.do(o) 281 o = receipt(tx_hash_hex) 282 r = self.conn.do(o) 283 self.assertEqual(r['status'], 0) 284 285 286 def test_transfer(self): 287 nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc) 288 c = CraftNFT(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) 289 290 (tx_hash_hex, o) = c.allocate(self.address, self.accounts[0], hash_of_foo, amount=0) 291 self.rpc.do(o) 292 293 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1], hash_of_foo, 0) 294 self.rpc.do(o) 295 296 int_of_foo = int(hash_of_foo, 16) 297 nonce_oracle = RPCNonceOracle(self.accounts[1], self.rpc) 298 c = CraftNFT(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) 299 (tx_hash, o) = c.transfer_from(self.address, self.accounts[1], self.accounts[1], self.accounts[2], int_of_foo) 300 self.rpc.do(o) 301 o = receipt(tx_hash_hex) 302 r = self.conn.do(o) 303 self.assertEqual(r['status'], 1) 304 305 o = c.owner_of(self.address, int_of_foo, sender_address=self.accounts[0]) 306 r = self.rpc.do(o) 307 owner = strip_0x(r) 308 self.assertTrue(is_same_address(owner[24:], self.accounts[2])) 309 310 311 def test_transfer_batched(self): 312 nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc) 313 c = CraftNFT(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) 314 315 (tx_hash_hex, o) = c.allocate(self.address, self.accounts[0], hash_of_foo, amount=10) 316 self.rpc.do(o) 317 318 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1], hash_of_foo, 0) 319 self.rpc.do(o) 320 321 expected_id = hash_of_foo[:64-16] + '0000000000000000' 322 int_of_foo = int(expected_id, 16) 323 324 nonce_oracle = RPCNonceOracle(self.accounts[1], self.rpc) 325 c = CraftNFT(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) 326 (tx_hash, o) = c.transfer_from(self.address, self.accounts[1], self.accounts[1], self.accounts[2], int_of_foo) 327 self.rpc.do(o) 328 o = receipt(tx_hash_hex) 329 r = self.conn.do(o) 330 self.assertEqual(r['status'], 1) 331 332 333 def test_fill_batches(self): 334 nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc) 335 c = CraftNFT(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) 336 (tx_hash_hex, o) = c.allocate(self.address, self.accounts[0], hash_of_foo, amount=6) 337 self.rpc.do(o) 338 339 (tx_hash_hex, o) = c.allocate(self.address, self.accounts[0], hash_of_foo, amount=8) 340 self.rpc.do(o) 341 342 (tx_hash_hex, o) = c.allocate(self.address, self.accounts[0], hash_of_foo, amount=4) 343 self.rpc.do(o) 344 345 for i in range(6+8+4): 346 batch = c.batch_of(self.rpc, self.address, hash_of_foo, i, sender_address=self.accounts[0]) 347 348 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[(i%7)+1], hash_of_foo, batch) 349 r = self.rpc.do(o) 350 o = receipt(tx_hash_hex) 351 r = self.conn.do(o) 352 self.assertEqual(r['status'], 1) 353 354 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[9], hash_of_foo, 2) 355 r = self.rpc.do(o) 356 o = receipt(tx_hash_hex) 357 r = self.conn.do(o) 358 self.assertEqual(r['status'], 0) 359 360 361 def test_digest_single(self): 362 nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc) 363 c = CraftNFT(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) 364 (tx_hash_hex, o) = c.allocate(self.address, self.accounts[0], hash_of_foo) 365 self.rpc.do(o) 366 367 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1], hash_of_foo, 0) 368 self.rpc.do(o) 369 370 o = c.get_token_spec(self.address, hash_of_foo, 0, sender_address=self.accounts[0]) 371 r = self.rpc.do(o) 372 373 o = c.get_token(self.address, hash_of_foo, sender_address=self.accounts[0]) 374 r = self.rpc.do(o) 375 376 o = c.get_digest(self.address, hash_of_foo, sender_address=self.accounts[0]) 377 r = self.rpc.do(o) 378 self.assertEqual(strip_0x(r), hash_of_foo) 379 380 381 382 def test_digest_batch(self): 383 nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc) 384 c = CraftNFT(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) 385 (tx_hash_hex, o) = c.allocate(self.address, self.accounts[0], hash_of_foo, amount=2) 386 self.rpc.do(o) 387 388 (tx_hash_hex, o) = c.allocate(self.address, self.accounts[0], hash_of_foo, amount=3) 389 self.rpc.do(o) 390 391 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1], hash_of_foo, 0) 392 self.conn.do(o) 393 394 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1], hash_of_foo, 1) 395 self.rpc.do(o) 396 397 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1], hash_of_foo, 1) 398 self.rpc.do(o) 399 400 expected_id = hash_of_foo[:64-16] + '0000000000000000' 401 o = c.get_digest(self.address, expected_id, sender_address=self.accounts[0]) 402 r = self.rpc.do(o) 403 self.assertEqual(strip_0x(r), hash_of_foo) 404 405 expected_id = hash_of_foo[:64-16] + '0001000000000000' 406 o = c.get_token(self.address, expected_id, sender_address=self.accounts[0]) 407 self.rpc.do(o) 408 409 o = c.get_digest(self.address, expected_id, sender_address=self.accounts[0]) 410 r = self.rpc.do(o) 411 self.assertEqual(strip_0x(r), hash_of_foo) 412 413 expected_id = hash_of_foo[:64-16] + '0001000000000001' 414 o = c.get_digest(self.address, expected_id, sender_address=self.accounts[0]) 415 r = self.rpc.do(o) 416 self.assertEqual(strip_0x(r), hash_of_foo) 417 418 419 def test_multi(self): 420 nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc) 421 c = CraftNFT(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) 422 423 (tx_hash_hex, o) = c.allocate(self.address, self.accounts[0], hash_of_foo, amount=2) 424 self.rpc.do(o) 425 426 (tx_hash_hex, o) = c.allocate(self.address, self.accounts[0], hash_of_foo, amount=3) 427 self.rpc.do(o) 428 429 (tx_hash_hex, o) = c.allocate(self.address, self.accounts[0], hash_of_bar) 430 self.rpc.do(o) 431 o = receipt(tx_hash_hex) 432 r = self.conn.do(o) 433 self.assertEqual(r['status'], 1) 434 435 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1], hash_of_bar, 0) 436 self.rpc.do(o) 437 o = receipt(tx_hash_hex) 438 r = self.conn.do(o) 439 self.assertEqual(r['status'], 1) 440 441 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1], hash_of_foo, 0) 442 self.rpc.do(o) 443 o = receipt(tx_hash_hex) 444 r = self.conn.do(o) 445 self.assertEqual(r['status'], 1) 446 447 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1], hash_of_bar, 0) 448 self.rpc.do(o) 449 o = receipt(tx_hash_hex) 450 r = self.conn.do(o) 451 self.assertEqual(r['status'], 0) 452 453 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1], hash_of_foo, 0) 454 self.rpc.do(o) 455 o = receipt(tx_hash_hex) 456 r = self.conn.do(o) 457 self.assertEqual(r['status'], 1) 458 459 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1], hash_of_foo, 0) 460 self.rpc.do(o) 461 o = receipt(tx_hash_hex) 462 r = self.conn.do(o) 463 self.assertEqual(r['status'], 0) 464 465 expected_id = hash_of_foo[:64-16] + '0000000000000000' 466 o = c.get_digest(self.address, expected_id, sender_address=self.accounts[0]) 467 r = self.rpc.do(o) 468 self.assertEqual(strip_0x(r), hash_of_foo) 469 470 o = c.get_digest(self.address, hash_of_bar, sender_address=self.accounts[0]) 471 r = self.rpc.do(o) 472 self.assertEqual(strip_0x(r), hash_of_bar) 473 474 475 def test_balance(self): 476 nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc) 477 c = CraftNFT(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) 478 479 (tx_hash_hex, o) = c.allocate(self.address, self.accounts[0], hash_of_foo, amount=3) 480 self.rpc.do(o) 481 482 (tx_hash_hex, o) = c.allocate(self.address, self.accounts[0], hash_of_bar, amount=0) 483 self.rpc.do(o) 484 485 o = c.balance(self.address, self.accounts[1], sender_address=self.accounts[0]) 486 r = self.rpc.do(o) 487 balance = c.parse_balance(r) 488 self.assertEqual(balance, 0) 489 490 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1], hash_of_foo, 0) 491 self.rpc.do(o) 492 493 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1], hash_of_foo, 0) 494 self.rpc.do(o) 495 496 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1], hash_of_bar, 0) 497 self.rpc.do(o) 498 499 o = c.balance(self.address, self.accounts[1], sender_address=self.accounts[0]) 500 r = self.rpc.do(o) 501 balance = c.parse_balance(r) 502 self.assertEqual(balance, 3) 503 504 nonce_oracle = RPCNonceOracle(self.accounts[1], self.rpc) 505 c = CraftNFT(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) 506 expected_id = to_batch_key(hash_of_foo, 0, 1) 507 (tx_hash_hex, o) = c.transfer_from(self.address, self.accounts[1], self.accounts[1], self.accounts[2], int(expected_id, 16)) 508 self.rpc.do(o) 509 o = receipt(tx_hash_hex) 510 r = self.conn.do(o) 511 self.assertEqual(r['status'], 1) 512 513 o = c.balance(self.address, self.accounts[1], sender_address=self.accounts[0]) 514 r = self.rpc.do(o) 515 balance = c.parse_balance(r) 516 self.assertEqual(balance, 2) 517 518 o = c.balance(self.address, self.accounts[2], sender_address=self.accounts[0]) 519 r = self.rpc.do(o) 520 balance = c.parse_balance(r) 521 self.assertEqual(balance, 1) 522 523 (tx_hash_hex, o) = c.transfer_from(self.address, self.accounts[1], self.accounts[1], self.accounts[3], int(hash_of_bar, 16)) 524 self.rpc.do(o) 525 o = receipt(tx_hash_hex) 526 r = self.conn.do(o) 527 self.assertEqual(r['status'], 1) 528 529 o = c.balance(self.address, self.accounts[1], sender_address=self.accounts[0]) 530 r = self.rpc.do(o) 531 balance = c.parse_balance(r) 532 self.assertEqual(balance, 1) 533 534 o = c.balance(self.address, self.accounts[3], sender_address=self.accounts[0]) 535 r = self.rpc.do(o) 536 balance = c.parse_balance(r) 537 self.assertEqual(balance, 1) 538 539 540 def test_mint_uncapped(self): 541 nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc) 542 c = CraftNFT(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) 543 544 (tx_hash_hex, o) = c.allocate(self.address, self.accounts[0], hash_of_foo, amount=-1) 545 self.rpc.do(o) 546 o = receipt(tx_hash_hex) 547 r = self.conn.do(o) 548 self.assertEqual(r['status'], 1) 549 550 for i in range(5): 551 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1+i], hash_of_foo, 0) 552 self.rpc.do(o) 553 o = receipt(tx_hash_hex) 554 r = self.conn.do(o) 555 self.assertEqual(r['status'], 1) 556 557 (tx_hash_hex, o) = c.set_cap(self.address, self.accounts[0], hash_of_foo, 0, 4) 558 self.rpc.do(o) 559 o = receipt(tx_hash_hex) 560 r = self.conn.do(o) 561 self.assertEqual(r['status'], 0) 562 563 (tx_hash_hex, o) = c.set_cap(self.address, self.accounts[0], hash_of_foo, 0, 6) 564 self.rpc.do(o) 565 o = receipt(tx_hash_hex) 566 r = self.conn.do(o) 567 self.assertEqual(r['status'], 1) 568 569 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1+i], hash_of_foo, 0) 570 self.rpc.do(o) 571 o = receipt(tx_hash_hex) 572 r = self.conn.do(o) 573 self.assertEqual(r['status'], 1) 574 575 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[2], hash_of_foo, 0) 576 self.rpc.do(o) 577 o = receipt(tx_hash_hex) 578 r = self.conn.do(o) 579 self.assertEqual(r['status'], 0) 580 581 582 def test_mint_cap_immediate(self): 583 nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc) 584 c = CraftNFT(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) 585 586 (tx_hash_hex, o) = c.allocate(self.address, self.accounts[0], hash_of_foo, amount=-1) 587 self.rpc.do(o) 588 o = receipt(tx_hash_hex) 589 r = self.conn.do(o) 590 self.assertEqual(r['status'], 1) 591 592 for i in range(3): 593 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1+i], hash_of_foo, 0) 594 self.rpc.do(o) 595 o = receipt(tx_hash_hex) 596 r = self.conn.do(o) 597 self.assertEqual(r['status'], 1) 598 599 (tx_hash_hex, o) = c.set_cap(self.address, self.accounts[0], hash_of_foo, 0, 0) 600 self.rpc.do(o) 601 o = receipt(tx_hash_hex) 602 r = self.conn.do(o) 603 self.assertEqual(r['status'], 1) 604 605 (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[2], hash_of_foo, 0) 606 self.rpc.do(o) 607 o = receipt(tx_hash_hex) 608 r = self.conn.do(o) 609 self.assertEqual(r['status'], 0) 610 611 612 if __name__ == '__main__': 613 unittest.main()