0x76) is Tempo’s native transaction format, designed for high-throughput payment systems with advanced account abstraction features.
Overview
Tempo Transactions extend Ethereum’s transaction model with:- Multiple signature types: secp256k1, P256, and WebAuthn
- Batch execution: Execute multiple calls atomically in a single transaction
- Flexible nonces: 2D nonces for parallelization and expiring nonces for time-based replay protection
- Gas sponsorship: Built-in fee payer signatures for gasless transactions
- Fee token preference: Optional TIP-20 token for fee payment
- Delegation support: EIP-7702-style authorization lists with Tempo signatures
Transaction Structure
A Tempo Transaction contains the following fields:Core Fields
Call Structure
Each call in the batch contains:tempo_transaction.rs:91-101
Batching
Tempo Transactions can execute multiple calls atomically in a single transaction.Rules
- Non-empty calls: The
callslist must contain at least one call - CREATE restriction: Only the first call can be a CREATE; all subsequent calls must be CALL
- Authorization list restriction: CREATE calls are not allowed when the authorization list is non-empty (EIP-7702 semantics)
Example
tempo_transaction.rs:242-270
Nonce Systems
Tempo Transactions support two nonce systems:2D Nonces (Standard)
2D nonces use a two-dimensional(nonce_key, nonce) system that enables parallel transaction submission.
Nonce Keys:
nonce_key = 0: Protocol nonce (sequential, like Ethereum)nonce_key = 1..uint256.max-1: User-defined nonce keys for parallel transactionsnonce_key = uint256.max: Reserved for expiring nonces (see below)
tempo_transaction.rs:202-208
Expiring Nonces (TIP-1009)
Expiring nonces provide time-based replay protection instead of sequential ordering. Constants:nonce_keymust beU256::MAXnoncemust be0valid_beforemust be set and within 30 seconds of current time- Replay protection uses transaction hash instead of sequential nonces
- No need to track nonce ordering
- Concurrent transactions from same sender
- Simplified UX for gasless/meta-transactions
- Automatic expiry (no manual cancellation needed)
tempo_transaction.rs:26-29
Time Bounds
Tempo Transactions can specify validity windows usingvalid_before and valid_after timestamps.
Valid Before
Transaction is only valid before this Unix timestamp (seconds):Valid After
Transaction is only valid after this Unix timestamp (seconds):Validation Rules
- If both are set:
valid_beforemust be greater thanvalid_after - For expiring nonces:
valid_beforeis required and must be within 30 seconds - Transactions outside their validity window are rejected by the transaction pool
tempo_transaction.rs:298-305
Signature Types
Tempo Transactions support three signature algorithms:secp256k1 (Standard Ethereum)
- EOA (Externally Owned Account) transactions
- Hardware wallet signatures
- Backward compatibility
P256 (NIST P-256)
- Secure enclave signatures (iOS Secure Enclave, Android Keystore)
- Hardware security modules (HSMs)
- Government/enterprise compliance
WebAuthn (Passkeys)
- Passkey-based authentication
- Biometric authentication (Face ID, Touch ID, fingerprint)
- Hardware security keys (YubiKey)
tempo_transaction.rs:21-23
Gas Sponsorship
Tempo Transactions support built-in gas sponsorship via fee payer signatures.Fee Payer Signature
A separate secp256k1 signature that authorizes gas payment:Signature Hash
The fee payer signature is computed over:- Fee payer commits to the
fee_tokenfield - User does NOT commit to
fee_token(skipped whenfee_payer_signatureis present) - This allows fee payers to specify the payment token while users remain token-agnostic
tempo_transaction.rs:336-362
Fee Token Preference
Optional TIP-20 token for fee payment:None: No preference (sequencer chooses)Some(address): Preferred TIP-20 token for fee payment
tempo_transaction.rs:175-176
Authorization Lists
Tempo Transactions support EIP-7702-style authorization lists with Tempo signature types.Tempo Signed Authorization
Allows accounts to delegate execution to smart contracts:- Smart contract wallets
- Account abstraction patterns
- Batch operations with delegation
- WebAuthn/passkey-based contract wallets
tempo_transaction.rs:229-231
Key Authorization
Optional field for provisioning new access keys in the AccountKeychain precompile:- User signs authorization with their root key
- Transaction can be signed with a Keychain signature (access key)
- The new key is added to the keychain before signature verification
tempo_transaction.rs:222-227
Gas Costs
Base Transaction Gas
- Account creation (first transaction,
nonce = 0): +250,000 gas (TIP-1000) - Expiring nonce: +13,000 gas for replay protection
- New storage: 250,000 gas per new state element (TIP-1000)
Batch Gas Savings
Batching multiple calls saves gas by sharing the base transaction overhead:Transaction Hash
The transaction hash is computed as:fee_payer_signature is present, the user’s signature hash omits fee_token. This allows fee payers to specify the payment token.
Source: tempo_transaction.rs:329-334
Validation Rules
Tempo Transactions must satisfy:- Non-empty calls:
calls.len() > 0 - CREATE restriction: Only first call can be CREATE
- Authorization list: No CREATE when authorization list is non-empty
- Time bounds:
valid_before > valid_after(if both set) - Expiring nonce constraints:
nonce_key == U256::MAXnonce == 0valid_beforerequired and within 30 seconds
tempo_transaction.rs:288-307