Why Tempo is the hub
Memos are first-class
TIP-20
transferWithMemo takes a bytes32 memo and emits it as an indexed topic of TransferWithMemo. The 32-byte Corridor Reference fits exactly, and reconciliation filters logs by reference with plain eth_getLogs.Gas in stablecoins
There is no native gas token. Vaults pay fees in pathUSD, the asset they already hold, through the Fee AMM. No ETH float to manage per vault.
Fast, final settlement
About 0.6 s to finality, so the hub is never the slow step in a payment.
A neutral quote token
pathUSD is Tempo’s quote token, issued by Bridge (a Stripe company). Every USD TIP-20 routes through it on the enshrined stablecoin DEX.
pathUSD as the unit of account
Every stablecoin on Tempo is a TIP-20, including USDC.e (Stargate-bridged USDC). Corridor treats pathUSD as its unit of account and accepts any USD TIP-20 at the edges:pathUSD (4217) → USDC on Base and others), issued by the Moderato faucet so testnet matches production, and accepted by validators as a fee token. Its circulating supply is still small, so each corridor carries a settlementAsset policy: when a ticket exceeds pathUSD depth, the corridor settles in USDC.e instead. Switching is configuration, not a migration. See ADR 0001.
Client
Corridor uses viem’s built-in Tempo support (viem/tempo):
The Moderato faucet funds an address through the RPC method
tempo_fundAddress.
Moving value
tempoMoveOnce: before sending, they search for an identical movement (same memo, parties and amount) since the saga’s start block. A retry after a crash between send and bookkeeping finds the transfer instead of sending it twice.
Observing
TempoObserver watches the vault addresses from a stored block cursor:
TransferWithMemologs in and out of each vault (two queries, because indexed-argument filters are ORed within an array).- Optionally, unreferenced movements: plain inbound
Transfers (faucet mints, owner top-ups, deposits without a memo) and fee transfers to the Fee Manager.
Gas accounting
Every Tempo transaction pays its fee as a TIP-20Transfer from the fee payer to the Fee Manager at 0xfeec000000000000000000000000000000000000, logged in the same receipt. On a real 2.000000 pathUSD transfer the vault’s balance fell by 2.000098: 98 base units were the fee, equal to gasUsed × effectiveGasPrice ÷ 10¹², rounded up. Corridor books each fee a vault pays to expense:gas, keyed by that log, so the treasury’s on-chain balance equals the ledger to the last unit. See Reconciliation.
Evidence
- Memo transfer found by indexed topic and booked once:
pnpm tempo:smoke. - Payout to a Shenzhen supplier with a decodable reference: 0x671161f6….
- Treasury on-chain = ledger: 1,000,051.994555 pathUSD, 10 fees booked from the chain.