Transactions

fund-evm-key

Fund an EVM (h160) address with TAO from the signing coldkey.

View as Markdown

An ordinary EVM account's native balance lives at its legacy ss58 mirror. Registered hashed aliases instead share their full native account's balance. On supported runtimes the transaction resolves the active mapping during execution, so an alias change cannot redirect funds to an obsolete mirror; the funds then appear as the EVM account's balance in MetaMask or any Ethereum tool (displayed with 18 decimals there: 1 TAO = 1e18). Like any transfer this is irreversible, so double-check the address. Protected aliases require their native hashed authorization. On older runtimes, when hashed aliases are enabled, native funding of unprotected aliases is refused: their mapping cannot be guarded against a concurrent registration. Send to those H160 addresses from an EVM wallet instead.

SignerOriginPalletWraps
coldkeysigned account (pallet role may apply)BalancesBalances.transfer_keep_alive, EVM.deposit

Parameters

ParameterTypeRequiredDescription
evm_addressstringyesEVM address to fund, as 0x-prefixed h160 hex.
amount_taonumber | "all"yesHow much TAO to send.

Address parameters (--hotkey, --coldkey, --dest, ...) accept a raw ss58 address, an address-book or proxy-book name, or a local wallet/hotkey name.

CLI

Preview with --dry-run (shows fee, effects, and policy result without submitting), then submit:

btcli tx fund-evm-key \
  --evm-address <value> \
  --amount-tao <amount|all> --dry-run
btcli tx fund-evm-key \
  --evm-address <value> \
  --amount-tao <amount|all> -w my_coldkey

Python

import bittensor as bt
from bittensor.wallet import Wallet

wallet = Wallet(name="my_coldkey", hotkey="my_hotkey")
intent = bt.FundEvmKey(evm_address="...", amount_tao=1.0)

sub = bt.Subtensor()
plan = sub.plan(intent, wallet)   # fee, effects, policy — no submission
result = sub.execute(intent, wallet)
if not result.success:
    print(result.error.code, result.error.remediation)

(bt.Subtensor is also the async client — async with bt.Subtensor() as client: — see The client.) Or build the intent by op name, as an agent would:

result = sub.execute_tool("fund_evm_key", {...}, wallet)

On-chain implementation

Balances.transfer_keep_alive is implemented by Substrate's pallet_balances, outside this repository's pallets.

EVM.deposit is implemented by Frontier's pallet_evm (vendored under vendor/frontier), outside this repository's pallets.

Every file is browsable under /code exactly as built into the runtime, or as plain text under /code/raw/<path> (index: /code/index.json).