okota/python/tests/test_accounts_index.py
2021-11-13 07:13:27 +01:00

86 lines
3.0 KiB
Python
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# standard imports
import unittest
import logging
import hashlib
# external imports
from eth_accounts_index import AccountsIndex
from chainlib.eth.nonce import RPCNonceOracle
from giftable_erc20_token import GiftableToken
from chainlib.eth.tx import receipt
from chainlib.eth.contract import ABIContractEncoder
from eth_address_declarator import Declarator
from eth_address_declarator.unittest import TestAddressDeclaratorBase
# local imports
from okota.accounts_index import AccountsIndexAddressDeclarator
from eth_accounts_index.registry import AccountRegistry
# test imports
logging.basicConfig(level=logging.DEBUG)
logg = logging.getLogger()
class TestAccountsIndex(TestAddressDeclaratorBase):
def setUp(self):
super(TestAccountsIndex, self).setUp()
nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc)
c = AccountsIndexAddressDeclarator(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
(tx_hash_hex, o) = c.constructor(self.accounts[0], self.foo_token_address, self.address)
r = self.rpc.do(o)
o = receipt(tx_hash_hex)
r = self.rpc.do(o)
self.assertEqual(r['status'], 1)
self.accounts_index_address = r['contract_address']
logg.debug('accounts index deployed with address {}'.format(self.accounts_index_address))
c = AccountRegistry(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
(tx_hash_hex, o) = c.add_writer(self.accounts_index_address, self.accounts[0], self.accounts[0])
r = self.rpc.do(o)
o = receipt(tx_hash_hex)
r = self.rpc.do(o)
self.assertEqual(r['status'], 1)
def test_accounts_index_address_declarator(self):
nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc)
c = AccountsIndex(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
(tx_hash, o) = c.add(self.accounts_index_address, self.accounts[0], self.accounts[1])
r = self.rpc.do(o)
self.assertEqual(tx_hash, r)
self.helper.mine_block()
o = receipt(tx_hash)
rcpt = self.rpc.do(o)
self.assertEqual(rcpt['status'], 1)
for k in rcpt.keys():
logg.debug('>>> RCPT {} {}'.format(k, rcpt[k]))
o = c.have(self.accounts_index_address, self.accounts[1], sender_address=self.accounts[0])
r = self.rpc.do(o)
c = Declarator(self.chain_spec) #, signer=self.signer, nonce_oracle=nonce_oracle)
o = c.declaration(self.address, self.accounts[0], self.accounts[1], sender_address=self.accounts[0])
r = self.rpc.do(o)
proofs = c.parse_declaration(r)
enc = ABIContractEncoder()
enc.address(self.foo_token_address)
token_address_padded = enc.get()
logg.debug('proof {} {}'.format(proofs, token_address_padded))
h = hashlib.sha256()
h.update(bytes.fromhex(token_address_padded))
r = h.digest()
self.assertEqual(r.hex(), proofs[0])
if __name__ == '__main__':
unittest.main()