Was this helpful?
Virtual addresses let you issue a distinct deposit address for each customer without creating a separate onchain TIP-20 balance for each one. The deposit is attributed to the virtual address, but the balance is credited directly to the registered master wallet.
This page is intentionally about the operator flow rather than the spec. In preview environments the demo may run against pre-release infrastructure, but the flow is the same one operators will use on public testnet.
The important behavior is:
This walkthrough shows the full flow:
pathUSD from a second address to a virtual address derived from that master idWhen the demo succeeds, you should see all of the following:
pathUSD to the virtual address0Transfer eventsOnce a master is registered, operators derive virtual addresses offchain from the masterId and their own customer tag.
import { VirtualAddress } from 'ox/tempo'
const virtualAddress = VirtualAddress.from({
masterId,
userTag: '0x000000000001',
})In practice, the userTag is the operator's internal routing value for a customer, account, or payment reference.
A few things matter in production:
balanceOf(virtualAddress) stays 0; use events and your own userTag mapping for attributionStart with the conceptual model for routing, attribution, and treasury operations.
Read the full protocol definition, including derivation rules, transfer paths, and invariants.
See when virtual addresses activate and what else ships with T3.