def test_contract_htdf_faucet_owner(conftest_args): with open('sol/htdf_faucet_sol_HtdfFaucet.abi', 'r') as abifile: # abi = abifile.readlines() abijson = abifile.read() # print(abijson) abi = json.loads(abijson) assert len(htdf_faucet_contract_address) > 0 contract_address = Address(htdf_faucet_contract_address[0]) htdfrpc = HtdfRPC(chaid_id=conftest_args['CHAINID'], rpc_host=conftest_args['RPC_HOST'], rpc_port=conftest_args['RPC_PORT']) hc = HtdfContract(rpc=htdfrpc, address=contract_address, abi=abi) owner = hc.call(hc.functions.owner()) print(type(owner)) # str print(owner) assert isinstance(owner, str) from_addr = Address(conftest_args['ADDRESS']) assert Address(Address.hexaddr_to_bech32(owner)) == from_addr pass
def test_deploy_contract(conftest_args, bytecode): """ test create hrc20 token contract which implement HRC20. # test contract AJC.sol """ gas_wanted = 5000000 gas_price = 100 tx_amount = 0 data = bytecode memo = 'test_deploy_contract' htdfrpc = HtdfRPC(chaid_id=conftest_args['CHAINID'], rpc_host=conftest_args['RPC_HOST'], rpc_port=conftest_args['RPC_PORT']) from_addr = Address(conftest_args['ADDRESS']) # new_to_addr = HtdfPrivateKey('').address private_key = HtdfPrivateKey(conftest_args['PRIVATE_KEY']) from_acc = htdfrpc.get_account_info(address=from_addr.address) assert from_acc is not None assert from_acc.balance_satoshi > gas_price * gas_wanted + tx_amount signed_tx = HtdfTxBuilder( from_address=from_addr, to_address='', amount_satoshi=tx_amount, sequence=from_acc.sequence, account_number=from_acc.account_number, chain_id=htdfrpc.chain_id, gas_price=gas_price, gas_wanted=gas_wanted, data=data, memo=memo).build_and_sign(private_key=private_key) tx_hash = htdfrpc.broadcast_tx(tx_hex=signed_tx) print('tx_hash: {}'.format(tx_hash)) tx = htdfrpc.get_tranaction_until_timeout(transaction_hash=tx_hash) pprint(tx) assert tx['logs'][0]['success'] == True # txlog = tx['logs'][0]['log'] # txlog = json.loads(txlog) assert tx['gas_wanted'] == str(gas_wanted) assert int(tx['gas_used']) <= gas_wanted tv = tx['tx']['value'] assert len(tv['msg']) == 1 assert tv['msg'][0]['type'] == 'htdfservice/send' assert int(tv['fee']['gas_wanted']) == gas_wanted assert int(tv['fee']['gas_price']) == gas_price assert tv['memo'] == memo mv = tv['msg'][0]['value'] assert mv['From'] == from_addr.address assert mv['To'] == '' # new_to_addr.address assert mv['Data'] == data assert int(mv['GasPrice']) == gas_price assert int(mv['GasWanted']) == gas_wanted assert 'satoshi' == mv['Amount'][0]['denom'] assert tx_amount == int(mv['Amount'][0]['amount']) pprint(tx) time.sleep(8) # wait for chain state update # to_acc = htdfrpc.get_account_info(address=new_to_addr.address) # assert to_acc is not None # assert to_acc.balance_satoshi == tx_amount from_acc_new = htdfrpc.get_account_info(address=from_addr.address) assert from_acc_new.address == from_acc.address assert from_acc_new.sequence == from_acc.sequence + 1 assert from_acc_new.account_number == from_acc.account_number assert from_acc_new.balance_satoshi == from_acc.balance_satoshi - ( gas_price * int(tx['gas_used'])) log = tx['logs'][0]['log'] conaddr = log[log.find("contract address:"):log.find(", output:")] contract_address = conaddr.replace('contract address:', '').strip() contract_address = Address.hexaddr_to_bech32(contract_address) print(contract_address) hrc20_contract_address.append(contract_address) pass