• ABOUT

  • WHITEPAPER

  • DOCS

  • DISCORD

  • WALLET

  • EXPLORE

The V445 Upgrade

EVM, btcli, and Reliability · August 2026

Introduction

Spec 445 makes the chain substantially easier to use from every external surface. Solidity contracts gain 31 functions across five new Bittensor precompiles, plus 135 additions to existing interfaces. A saved multisig now behaves like a wallet throughout btcli. Automated dry runs carry enough information to approve and replay a transaction safely. Ledger users can read the actual fields of a limit order before signing it. Underneath those interfaces, v445 recycles transaction fees and corrects transaction-pool validation, proxy charging, commitment cleanup, storage growth, and GRANDPA finality.

The runtime, typed for Solidity

The Bittensor precompile suite now covers the deterministic, typed runtime surface that an EVM caller is authorized to use. Five new domain addresses expose system state that previously required a Substrate client or duplicated constants:

AddressPrecompileWhat contracts can inspect
0x…080fSchedulerScheduled calls, retry state, task addresses, and incomplete work
0x…0810DrandBeacon configuration, pulses, stored rounds, and unsigned timing
0x…0811TimestampRuntime timestamp and whether it was updated in the current block
0x…0812Runtime configurationChain ID and grouped economic, consensus, registration, and pallet constants
0x…0813Precompile registryWhether a precompile is currently disabled

Existing precompiles gain 68 state-changing methods and 67 typed views across staking V2, neurons, subnets, alpha, balances, proxies, leasing, crowdloans, UID lookup, voting power, and transfer surfaces. The additions include typed registration and identity operations, weight and commitment calls, stake and collateral management, subnet configuration, global and per-subnet state, and a maintained total-voting-power view. The coverage audit inventories the deliberate exclusions: Root-only, unsigned, inherent, disabled, and compatibility-only calls are not made reachable by pretending an EVM caller has a stronger origin.

Every state-changing method dispatches the highest-level runtime call as the mapped EVM signer. The pallet still enforces ownership, role, rate limits, freeze windows, and every other authorization rule. Released addresses and selectors remain stable; the new registry gives contracts a typed way to discover whether a whole precompile is currently disabled. Supported selectors remain defined by the published interfaces and ABIs.

IPrecompileRegistry registry =
    IPrecompileRegistry(0x0000000000000000000000000000000000000813);

IPrecompileRegistry.PrecompileStatus memory status =
    registry.getPrecompileStatus(target, selector);

IRuntimeConfiguration config =
    IRuntimeConfiguration(0x0000000000000000000000000000000000000812);

uint256 chainId = config.getEvmChainId();

In v445, only the registry's isDisabled field is populated. Its selector parameter and selector-lifecycle fields are reserved for a future extension and must not be used to infer whether a selector exists.

Canonical Solidity interfaces, JSON ABIs, generated Python ABI copies, documentation, gas accounting, and tests ship together. Integrators should use the v445 copies rather than reconstructing selectors from release notes. The new maintainer documentation also fixes the rules for ABI versioning, state exposure, lifecycle metadata, coverage, and backwards compatibility so later runtime releases can extend this surface without breaking deployed contracts.

Some existing staking reads now scan more stake records, so their gas estimate is higher. The affected methods are getTotalHotkeyStake, getTotalColdkeyStake, and getTotalColdkeyStakeOnSubnet. Contracts and services should estimate these calls again after the upgrade and avoid hard-coded gas limits. The selectors and return values have not changed.

A multisig is now a wallet

The v11 CLI no longer makes operators translate a multisig workflow into low-level approvals by hand. Save a signer set once, then pass its name wherever a coldkey wallet is accepted. Reads resolve the derived account. Writes select a local member, wrap the intended call, find an existing approval round, and supply its timepoint. A co-signer completes the round by running the same command.

btcli multisig add team-treasury   --threshold 2 --signatories alice,bob,carol

# Alice opens the operation; Bob runs the identical command to complete it.
btcli wallet transfer --dest 5F... --amount-tao 10 -w team-treasury

Before signing, --dry-run --json now returns the parsed arguments, exact spend or an explicit unbounded-spend marker, estimated fee, warnings, policy verdict, and a replay command that submits the same invocation without the dry-run flags. That makes a plan reviewable by a human, an agent, or a policy engine without asking any of them to infer intent from prose.

btcli tx transfer   --dest 5F... --amount-tao 10 -w team-treasury   --dry-run --json

The same release improves everyday staking: stake add shows free balance, accepts all, offers local hotkeys without requiring the target to live on disk, and accepts pasted or address-book targets. stake burn joins the normal command tree with a price-aware default. Names resolve inside raw-call JSON, multisig approvals fail early when the signer cannot cover the deposit and fee, and wrapper order is preserved so intent safety survives multisig dispatch. Root position rows now stay aligned with their human table columns, and explicit validator details produce one consolidated JSON document.

Secret-bearing flags now warn that values are visible in shell history and the process list; omitting them uses a hidden prompt. EVM private-key export prefers the clipboard on a terminal, and wallet regeneration accepts 64-byte sr25519 private keys. Keyfiles once again include the legacy fields expected by older subnet tooling, while the reader tolerates older encodings and gives specific guidance for browser and mobile exports. The complete operational flow is in the multisig guide.

Read the order before signing it

V438 let Ledger and compatible signers authorize limit orders by signing a wrapped order hash. V445 adds an alternative clear-signing form: one canonical printable message containing the order type, amount, subnet, limit or trigger price, expiry, hotkey, relayer policy, fee, slippage, chain ID, partial-fill policy, and signer. The hardware wallet displays those fields before approval, and the runtime deterministically rebuilds the same message before accepting the signature.

TAO.com order v1: Limit buy <amount> on subnet <netuid>,
limit price <price>, expiry <unix timestamp ms>, hotkey <ss58>, fee <rate> to <ss58>,
relayer <policy>, max slippage <value>, chain <id>,
partial fills <true|false>, signer <ss58>

The signed message uses raw integer units: amount is rao for a buy and raw alpha units for a sell; price uses a ×109 scale; fee and slippage use parts per billion; and expiry is a Unix timestamp in milliseconds. Frontends may show friendlier values alongside the message, but must sign these exact integers.

This format is additive. Existing raw SCALE signatures and wrapped-hash signatures remain valid, and every format resolves to the same canonical order ID for replay protection, cancellation, relayer restrictions, and partial fills. Sr25519 and ed25519 remain supported; ECDSA remains rejected. Rust and TypeScript parity tests plus device-derived Ledger vectors lock the exact bytes so a frontend cannot show one order and submit another.

Failures get cheaper, state stays smaller

AreaChange in v445
Transaction feesNative TAO fees and EVM fees are recycled instead of paid to the block author. Eligible alpha-paid fees are sold for TAO and recycled in the same transaction.
Commit transactionsDeterministic failures are rejected during transaction validation; competing commits in the same signer and rate-limit lane conflict in the pool.
Neuron trimmingDeregistration purges active and revealed commitments, metadata, usage and timelock indexes, and releases the associated commitment deposit.
Proxy feesProxy calls propagate the inner call's actual post-dispatch weight, refunding unused worst-case weight. This applies to proxy and proxy_announced.
StorageA bounded, resumable on_idle migration removes obsolete pre-dTAO prefixes and explicit zero rows; abandoned Swap V3 state is cleared separately.
Voting powerA maintained subnet total avoids repeated aggregation, and neuron removal or subnet dissolution now clears the corresponding voting-power state.
GRANDPAThe Polkadot SDK is pinned to fork revision cacb4310, including warp-finality and concluded-round cleanup fixes.

Transaction fees are separate from swap fees; swap fees still go to the block author. The other changes do not introduce new operator workflows. They move predictable failures out of blocks, stop deleted identities from leaving chargeable state behind, return overestimated proxy weight, and keep historical defaults from accumulating forever.

What to do

  • EVM integrators: refresh the complete canonical ABI set before using v445 selectors. Add 0x…080f through 0x…0813 only from the published interfaces, and use the registry to inspect whole-precompile availability. Re-estimate aggregate staking reads and do not rely on fixed gas stipends.
  • SDK and CLI users: older clients that read current chain metadata can keep using existing commands. To use the new v445 features, upgrade to bittensor 11.1.0 and bittensor-core 0.1.3 alongside the runtime upgrade. Existing wallet files remain usable, and saved multisigs can now be passed directly as -w. Rebuild any offline signing payload prepared before the runtime upgrade.
  • Limit-order applications: add the human-readable signing format for hardware-wallet users. Do not remove raw or wrapped-hash support; all three formats remain valid.

Signers: after the release train proposes, use btcli upgrade sign --url <v445 release URL> -w <wallet>.

Read the complete precompile reference