eth-address-index

signed metadata declarations for ethereum addresses
Log | Files | Refs

test_tokenendorser.py (2166B)


      1 import logging
      2 import os
      3 import json
      4 import hashlib
      5 
      6 import web3
      7 import eth_tester
      8 
      9 logging.basicConfig(level=logging.DEBUG)
     10 logg = logging.getLogger()
     11 
     12 
     13 eth_params = eth_tester.backends.pyevm.main.get_default_genesis_params({
     14     'gas_limit': 9000000,
     15     })
     16 backend = eth_tester.PyEVMBackend(eth_params)
     17 instance = eth_tester.EthereumTester(backend)
     18 provider = web3.Web3.EthereumTesterProvider(instance)
     19 w3 = web3.Web3(provider)
     20 
     21 
     22 f = open('TokenEndorser.bin', 'r')
     23 bytecode = f.read()
     24 f.close()
     25 
     26 f = open('TokenEndorser.json', 'r')
     27 abi = json.load(f)
     28 f.close()
     29 
     30 token_address = web3.Web3.toChecksumAddress('0x' + os.urandom(20).hex())
     31 
     32 c = w3.eth.contract(abi=abi, bytecode=bytecode)
     33 tx_hash = c.constructor().transact({'from': w3.eth.accounts[0]})
     34 r = w3.eth.getTransactionReceipt(tx_hash)
     35 logg.debug('contract {} initial token {}'.format(r.contractAddress, token_address))
     36 
     37 c = w3.eth.contract(abi=abi, address=r.contractAddress)
     38 d = '0x' + os.urandom(32).hex()
     39 
     40 # Initial token will fail in any case
     41 c.functions.add(token_address, d).transact({'from':w3.eth.accounts[0]})
     42 
     43 fail = False
     44 try:
     45     c.functions.add(token_address, d).transact({'from':w3.eth.accounts[0]})
     46 except:
     47     fail = True
     48     pass
     49 
     50 if not fail:
     51     raise RuntimeError('expected fail on register same token to same address')
     52 
     53 
     54 c.functions.add(token_address, d).transact({'from':w3.eth.accounts[1]})
     55 
     56 
     57 h = hashlib.new('sha256')
     58 h.update(bytes.fromhex(token_address[2:]))
     59 h.update(bytes.fromhex(w3.eth.accounts[0][2:]))
     60 z = h.digest()
     61 
     62 assert d[2:] == c.functions.endorsement(z.hex()).call().hex()
     63 
     64 
     65 another_token_address = web3.Web3.toChecksumAddress('0x' + os.urandom(20).hex())
     66 c.functions.add(another_token_address, d).transact({'from':w3.eth.accounts[0]})
     67 
     68 assert c.functions.endorsers(w3.eth.accounts[0], 0).call() == 1
     69 assert c.functions.endorsers(w3.eth.accounts[1], 0).call() == 1
     70 assert c.functions.endorsers(w3.eth.accounts[0], 1).call() == 2
     71 
     72 assert c.functions.tokens(1).call() == token_address
     73 assert c.functions.tokens(2).call() == another_token_address
     74 
     75 assert c.functions.tokenIndex(token_address).call() == 1
     76 assert c.functions.tokenIndex(another_token_address).call() == 2
     77 
     78