Wallet Developer Guide
Tempo is EVM-compatible, so standard transactions work out of the box. However, Tempo has no native gas token, which means wallet behaviors like balance display and gas quoting need adjustment.
To deliver the best experience for your users, integrate Tempo Transactions — a protocol-native EIP-2718 transaction type (type byte 0x76) that provides fee token selection, fee sponsorship, call batching, concurrent nonces, passkey signing, and scheduled execution — without requiring a bundler, paymaster, or third-party vendor.
SDKs are available for TypeScript, Rust, Go, Python, and Foundry. Integration typically takes less than an hour.
Wallet integration steps
Integrate Tempo Transactions
Replace your wallet's transaction construction with Tempo Transactions. The minimum change is switching from a type-2 (EIP-1559) envelope to a type-0x76 Tempo Transaction envelope using one of the Tempo SDKs.
import { } from './viem.config'
import { } from 'viem'
// Sends a Tempo Transaction (type 0x76)
const { } = await ..({
: ('100', 6),
: '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEbb',
: '0x20c0000000000000000000000000000000000001',
})import { } from 'viem/accounts'
import { } from 'viem/tempo'
export const = ({
: ('0x...'),
})Handle the absence of a native token
If you use eth_getBalance to validate a user's balance, you should instead check the user's account fee token balance on Tempo. Additionally, you should not display any "native balance" in your UI for Tempo users.
import { } from './viem.config'
const = await ..({
: '0x...'
})
const = await ..({
: '0x...',
: .
})import { } from 'viem/accounts'
import { } from 'viem/tempo'
export const = ({
: ('0x...'),
})Configure native currency symbol
If you need to display a native token symbol, such as showing how much gas a transaction requires, you can set the currency symbol to USD for Tempo as fees are denominated in USD.
Use fee token preferences to quote gas prices
On Tempo, users can pay fees in any supported stablecoin. You should quote gas/fee prices in your UI based on a transaction's fee token.
Add fee token selection to your UI
Your wallet should provide a way for users to choose which stablecoin they pay fees in. This can be a dropdown in the transaction confirmation screen or a setting in account preferences.
To set the fee token on a per-transaction basis, pass the feeToken parameter when submitting a Tempo Transaction:
import { } from './viem.config'
import { } from 'viem'
const { } = await ..({
: ('100', 6),
: '0x20c0000000000000000000000000000000000002',
: '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEbb',
: '0x20c0000000000000000000000000000000000001',
})import { } from 'viem/accounts'
import { } from 'viem/tempo'
export const = ({
: ('0x...'),
})To set a persistent default so users don't need to select on every transaction, use setUserToken:
await client.fee.setUserTokenSync({
token: '0x20c0000000000000000000000000000000000001',
})See Fee Token Preferences for the full cascading resolution order.
Display token and network assets
Tempo provides a public tokenlist service that hosts token and network assets. You can pull these assets from our public tokenlist service to display in your UI.
- GitHub: tempoxyz/tempo-apps/apps/tokenlist
- Tokenlist JSON: tempoxyz.github.io/tempo-apps/42431/tokenlist.json
Already using EIP-7702 or EIP-4337?
If you've integrated a third-party account abstraction provider for batching, sponsorship, or smart accounts, Tempo Transactions provide these features natively at the protocol level. See the feature comparison for details.
Wallet integration recipes
Get user's fee token
Retrieve the user's configured fee token preference:
import { getUserToken } from 'viem/tempo'
const feeToken = await client.fee.getUserToken({
account: userAddress
})See getUserToken for full documentation.
Get token balance
Check a user's balance for a specific token:
import { getBalance } from 'viem/tempo'
const balance = await client.token.getBalance({
account: userAddress,
token: tokenAddress
})See getBalance for full documentation.
Set user fee token
Set the user's default fee token preference. This will be used for all transactions unless a different fee token is specified at the transaction level.
import { setUserToken } from 'viem/tempo'
await client.fee.setUserTokenSync({
token: '0x20c0000000000000000000000000000000000001',
})See setUserToken for full documentation.
Checklist
Before launching Tempo support, ensure your wallet:
- Integrates Tempo Transactions for transaction submission
- Checks fee token balance instead of native balance
- Hides or removes native balance display for Tempo
- Displays
USDas the currency symbol for gas - Quotes gas prices in the user's fee token
- Provides fee token selection in the UI (dropdown or account setting)
- Pulls token/network assets from Tempo's tokenlist
- (Recommended) Sponsors fees for your users via fee sponsorship
- (Recommended) Uses expiring nonces for lower-cost transactions that don't require nonce management
Learning Resources
Integrate Tempo Transactions for full control over transaction parameters
Learn how fee token preferences work in the protocol
Sponsor user fees to enable feeless transaction experiences in your application
How Tempo Transactions compare to EIP-7702 delegation
Pay fees in any supported stablecoin
Was this helpful?