def test_sign_offline(cluster): """ check simple transfer tx success - send 1cro from community to reserve """ # 1. first create two hd new wallet seed = "dune car envelope chuckle elbow slight proud fury remove candy uphold \ puzzle call select sibling sport gadget please want vault glance verb damage gown" wallet_1 = Wallet(seed) address_1 = wallet_1.address wallet_2 = Wallet.new() address_2 = wallet_2.address sender_addr = cluster.address("signer1") sender_balance = cluster.balance(sender_addr) assert sender_balance > 100 * 10**8 balance_1 = cluster.balance(wallet_1.address) assert balance_1 == 0 balance_2 = cluster.balance(wallet_2.address) assert balance_2 == 0 # 2. transfer some coin to wallet_1 cluster.transfer(sender_addr, address_1, "100cro") wait_for_new_blocks(cluster, 2) assert cluster.balance(sender_addr) == sender_balance - 100 * 10**8 assert cluster.balance(address_1) == 100 * 10**8 # 3. get the send's account info port = ports.api_port(cluster.base_port(0)) api = ApiUtil(port) amount = 1 * 10**8 # make transaction without/with fee for fee in [0, 600000]: sender_account_info = api.account_info(address_1) balance_1_before = api.balance(address_1) balance_2_before = api.balance(address_2) tx = Transaction( wallet=wallet_1, account_num=sender_account_info["account_num"], sequence=sender_account_info["sequence"], chain_id=cluster.chain_id, fee=fee, ) tx.add_transfer(to_address=address_2, amount=amount, base_denom="basecro") signed_tx = tx.get_pushable() assert isinstance(signed_tx, dict) api.broadcast_tx(signed_tx) wait_for_new_blocks(cluster, 3) balance_1_after = api.balance(address_1) balance_2_after = api.balance(address_2) assert balance_2_after == balance_2_before + amount assert balance_1_after == balance_1_before - amount - fee
def main(): seed = "dune car envelope chuckle elbow slight proud fury remove candy uphold puzzle call select sibling sport gadget please want vault glance verb damage gown" wallet_1 = Wallet(seed) address_1 = wallet_1.address print(address_1) wallet_2 = Wallet.new() address_2 = wallet_2.address print(address_2) # the api port setted in ${home_dir of chain-maind}/config/app.toml, the default is ~/.chain-maind/config/app.toml base_url = "http://127.0.0.1:1317" url_tx = f"{base_url}/txs" url_account = f"{base_url}/cosmos/auth/v1beta1/accounts/{address_1}" url_balance = f"{base_url}/cosmos/bank/v1beta1/balances/{address_1}" # get the balance of address_1 response = requests.get(url_balance) balance_1 = int(response.json()["balances"][0]["amount"]) print(f"balance of address 1: {balance_1}") # get the account info response = requests.get(url_account) account_info = response.json()["account"] account_num = int(account_info["account_number"]) sequence = int(account_info["sequence"]) # make transaction tx = Transaction( wallet=wallet_1, account_num=account_num, sequence=sequence, chain_id="test", fee=100000, gas=300000, ) amount = 1 * 10 ** 8 tx.add_transfer(to_address=address_2, amount=amount) signed_tx = tx.get_pushable() print("signed tx:", signed_tx) response = requests.post(url_tx, json=signed_tx) if not response.ok: raise Exception(response.reason) result = response.json() print(result) if result.get("code"): raise Exception(result["raw_log"]) # get the balance after sync time.sleep(5) response = requests.get(url_balance) balance_1_after = int(response.json()["balances"][0]["amount"]) print(f"balance of address 1 after transfer: {balance_1_after}")
def test_new_wallet(): wallet = Wallet.new() assert len(str(wallet.private_key)) > 0