A Tempo Transaction is a custom EIP-2718 transaction type (0x76) that extends standard EVM transactions with features designed for payments: atomic multi-call batching, stablecoin fee payment, fee sponsorship via co-signatures, time-bounded execution windows, and inline access key provisioning.
Transaction structure
TempoTransaction {
chain_id
nonce
calls: Vec<Call> // atomic multi-call
fee_token: Option<Address> // pay fees in a specific stablecoin
fee_payer_signature: Option<Signature> // someone else pays gas
valid_before: Option<u64> // execution deadline
valid_after: Option<u64> // earliest execution time
key_authorization: Option<...> // provision access key inline
}The transaction is encoded as 0x76 || rlp([...fields]). Optional fields use 0x80 (RLP empty string) when unset.
Features
Atomic batching. The calls field contains multiple (to, value, input) tuples that execute atomically: all succeed or all revert. One signature covers the entire batch. This replaces the need for multicall contracts in common payment flows like approving a token and executing a swap in one step.
Fee token selection. The fee_token field lets you specify which TIP-20 stablecoin pays the transaction fee. Without it, the protocol falls back to a cascading preference system.
Fee sponsorship. The fee_payer_signature field lets a third party pay gas. The sender signs with domain prefix 0x76, the fee payer signs with 0x78. Domain separation prevents cross-context signature replay.
Time-bounded execution. valid_before and valid_after set execution windows as Unix timestamps. Validators reject transactions outside these windows. Account for ~15 seconds of validator time variance.
Parallelizable nonces. Tempo supports 2D nonces through a Nonce Manager precompile. Key 0 is the standard protocol nonce; keys 1-N enable parallel transaction submission without nonce conflicts.
Signature types
Tempo Transactions support three signature types natively:
| Type | Use case |
|---|---|
| secp256k1 (65 bytes) | Standard Ethereum ECDSA |
P256 (130 bytes, prefix 0x01) | Passkeys, Apple Secure Enclave, Android Keystore |
WebAuthn (variable, prefix 0x02) | Full FIDO2 assertion verification |
All three derive addresses the same way: keccak256(pubKeyX || pubKeyY)[12:].
Standard EVM transactions still work
Tempo is fully backward-compatible. Legacy (0x00), EIP-2930 (0x01), and EIP-1559 (0x02) transactions all work. Tempo Transactions are only needed when you want the extended features.
Related content
- How Do Transaction Fees Work on Tempo?: fee calculation and token selection
- How to Sponsor Transaction Fees on Tempo: implement fee sponsorship
- How Do Passkeys Work on Tempo?: protocol-native WebAuthn support