def do_transfer(ctx: Context, identifier: str, address: Address, amount: int, tx_fee: int) -> Optional[str]: """ Perform wealth transfer to another account. :param ctx: click context :param identifier: str, ledger id to perform transfer operation :param address: address of the recepient :param amount: int, amount of wealth to transfer :param tx_fee: int, fee for transaction :return: str, transaction digest or None if failed. """ click.echo("Starting transfer ...") wallet = get_wallet_from_context(ctx) source_address = wallet.addresses[identifier] _override_ledger_configurations(ctx.agent_config) balance = int(try_get_balance(ctx.agent_config, wallet, identifier)) total_payable = amount + tx_fee if total_payable > balance: raise click.ClickException( f"Balance is not enough! Available={balance}, required={total_payable}!" ) tx_nonce = LedgerApis.generate_tx_nonce(identifier, source_address, address) transaction = LedgerApis.get_transfer_transaction(identifier, source_address, address, amount, tx_fee, tx_nonce) tx_signed = wallet.sign_transaction(identifier, transaction) return LedgerApis.send_signed_transaction(identifier, tx_signed)
def run(): # Create a private keys create_private_key(FetchAICrypto.identifier, private_key_file=FETCHAI_PRIVATE_KEY_FILE_1) create_private_key(FetchAICrypto.identifier, private_key_file=FETCHAI_PRIVATE_KEY_FILE_2) # Set up the wallets wallet_1 = Wallet({FetchAICrypto.identifier: FETCHAI_PRIVATE_KEY_FILE_1}) wallet_2 = Wallet({FetchAICrypto.identifier: FETCHAI_PRIVATE_KEY_FILE_2}) # Set up the LedgerApis ledger_apis = LedgerApis( {FetchAICrypto.identifier: { "network": "testnet" }}, FetchAICrypto.identifier) # Generate some wealth try_generate_testnet_wealth(FetchAICrypto.identifier, wallet_1.addresses[FetchAICrypto.identifier]) logger.info("Sending amount to {}".format( wallet_2.addresses.get(FetchAICrypto.identifier))) # Create the transaction and send it to the ledger. tx_nonce = ledger_apis.generate_tx_nonce( FetchAICrypto.identifier, wallet_2.addresses.get(FetchAICrypto.identifier), wallet_1.addresses.get(FetchAICrypto.identifier), ) transaction = ledger_apis.get_transfer_transaction( identifier=FetchAICrypto.identifier, sender_address=wallet_1.addresses.get(FetchAICrypto.identifier), destination_address=wallet_2.addresses.get(FetchAICrypto.identifier), amount=1, tx_fee=1, tx_nonce=tx_nonce, ) signed_transaction = wallet_1.sign_transaction(FetchAICrypto.identifier, transaction) transaction_digest = ledger_apis.send_signed_transaction( FetchAICrypto.identifier, signed_transaction) logger.info("Transaction complete.") logger.info("The transaction digest is {}".format(transaction_digest))
def run(): # Create a private keys create_private_key( CosmosCrypto.identifier, private_key_file=COSMOS_PRIVATE_KEY_FILE_1 ) create_private_key( CosmosCrypto.identifier, private_key_file=COSMOS_PRIVATE_KEY_FILE_2 ) # Set up the wallets wallet_1 = Wallet({CosmosCrypto.identifier: COSMOS_PRIVATE_KEY_FILE_1}) wallet_2 = Wallet({CosmosCrypto.identifier: COSMOS_PRIVATE_KEY_FILE_2}) # Generate some wealth try_generate_testnet_wealth( CosmosCrypto.identifier, wallet_1.addresses[CosmosCrypto.identifier] ) logger.info( "Sending amount to {}".format(wallet_2.addresses.get(CosmosCrypto.identifier)) ) # Create the transaction and send it to the ledger. tx_nonce = LedgerApis.generate_tx_nonce( CosmosCrypto.identifier, wallet_2.addresses.get(CosmosCrypto.identifier), wallet_1.addresses.get(CosmosCrypto.identifier), ) transaction = LedgerApis.get_transfer_transaction( identifier=CosmosCrypto.identifier, sender_address=wallet_1.addresses.get(CosmosCrypto.identifier), destination_address=wallet_2.addresses.get(CosmosCrypto.identifier), amount=1, tx_fee=1, tx_nonce=tx_nonce, ) signed_transaction = wallet_1.sign_transaction(CosmosCrypto.identifier, transaction) transaction_digest = LedgerApis.send_signed_transaction( CosmosCrypto.identifier, signed_transaction ) logger.info("Transaction complete.") logger.info("The transaction digest is {}".format(transaction_digest))