PerformanceBlog
Tempo MCP serverGive agents search and read tools for Tempo docs
Skip to content
LogoLogo

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',
})

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...',
  : .
})

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',
})

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.

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 USD as 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