> Feedback: If these docs are stale, missing, or confusing, post sanitized feedback to `https://docs.tempo.xyz/api/feedback` with `source: "mcp"`, a short `message`, and any relevant `toolName`, `relatedResource`, or `client`.
# T3 Network Upgrade

T3 introduced enhanced access keys, a standard signature verification precompile, and virtual addresses for TIP-20 deposit routing.

:::info\[T3 status]
T3 is active on both testnet and mainnet.
:::

## Timeline

| Network | Date | Timestamp |
|---------|------|-----------|
| Testnet | April 21, 2026 4pm CEST | `1776780000` |
| Mainnet | April 27, 2026 4pm CEST | `1777298400` |

Node operators needed to upgrade to the T3-compatible release before the testnet activation timestamp.

## Overview

| TIP | What it does | Who should review |
|-----|-------------|-------------------|
| [TIP-1011](https://tips.sh/1011) | Periodic spending limits, call scoping, and a ban on access-key contract creation | Wallets, account SDKs, apps using connected apps or subscriptions |
| [TIP-1020](https://tips.sh/1020) | Signature verification precompile for secp256k1, P256, and WebAuthn | Smart contract teams, account integrators, wallet SDKs |
| [TIP-1022](https://tips.sh/1022) | [Virtual addresses](/docs/protocol/tip20/virtual-addresses) for TIP-20 deposit forwarding | Exchanges, ramps, custodians, payment processors, explorers, indexers |

## Breaking changes

These breaking changes only affect access-key integrations. You need to update your integration if you create new access keys, manually encode `key_authorization` or `authorizeKey(...)`, or rely on access-key-signed deployment flows. Existing authorized keys continue to work.

### Access-key authorization ABI

Integrations that directly call `AccountKeychain.authorizeKey(...)` or manually encode `key_authorization` must use the TIP-1011 tuple-form ABI. The legacy selector `0x54063a55` no longer works — legacy calls fail with `LegacyAuthorizeKeySelectorChanged(newSelector: 0x980a6025)`.

If you use an updated SDK, this is mostly a tooling upgrade. If you hand-encode calldata, use the exact tuple-form signature from the [Account Keychain precompile spec](/docs/protocol/transactions/AccountKeychain).

### Access-key contract creation

Access-key-signed transactions can no longer create contracts in any configuration — including direct CREATE, factory CREATE, and internal CREATE2. Move those flows to a root key path.

### Migration checklist

* Upgrade to a T3-compatible SDK release listed below
* Regenerate contract bindings or replace handcrafted encoders for `authorizeKey(...)`
* Move any access-key contract-creation flows to a root key path
* If you adopt virtual addresses, collapse the two-hop `Transfer` pair into one logical deposit to the registered master wallet rather than treating the virtual address hop as a separate transfer
* Test key creation, key rotation, and recovery flows on testnet

Most integrators only needed to upgrade tooling. Existing authorized access keys keep working.

## Supporting new features

### Virtual addresses for explorers and indexers

Each virtual-address deposit emits two `Transfer` events in one transaction: `Transfer(sender, virtualAddress, amount)` then `Transfer(virtualAddress, masterWallet, amount)`. Collapse these into one logical deposit to the master wallet. The virtual address is for attribution only — `balanceOf(virtualAddress)` is always zero.

See [Virtual addresses for TIP-20 deposits](/docs/protocol/tip20/virtual-addresses) for the full routing model and event sequences.

### Signature verification precompile

[TIP-1020](https://tips.sh/1020) is additive — existing verifier setups keep working. Teams that want a standard onchain verification surface can adopt the precompile instead of maintaining custom verifier contracts. See the [Signature Verification with Foundry](/docs/sdk/foundry/signature-verifier) guide.

## Compatible SDK releases

Tempo's broader tooling ecosystem is available in [Developer tools](/docs/quickstart/developer-tools).

| SDK | T3-compatible release |
|-----|-----------------------|
| [TypeScript](https://github.com/wevm/viem) | [`viem@2.47.11`](https://github.com/wevm/viem/releases/tag/viem%402.47.11), [`ox@0.14.13`](https://github.com/wevm/ox/releases/tag/ox%400.14.13) |
| [Rust](https://github.com/tempoxyz/tempo/releases/tag/tempo-alloy%401.5.1) | [`tempo-alloy@1.5.1`](https://github.com/tempoxyz/tempo/releases/tag/tempo-alloy%401.5.1) |
| [Go](https://github.com/tempoxyz/tempo-go) | [`v0.4.0`](https://github.com/tempoxyz/tempo-go/releases/tag/v0.4.0) |
| [Python](https://github.com/tempoxyz/pytempo) | [`0.5.0`](https://github.com/tempoxyz/pytempo/releases/tag/pytempo%400.5.0) |
| [Foundry](https://github.com/foundry-rs/foundry) | [`v1.7.0`](https://github.com/foundry-rs/foundry/releases/tag/v1.7.0) |

## Related docs

* [Virtual addresses for TIP-20 deposits](/docs/protocol/tip20/virtual-addresses)
* [TIP-1022](https://tips.sh/1022)
* Coordinating meta TIP: [tempoxyz/tempo#3273](https://github.com/tempoxyz/tempo/pull/3273)
