Skip to main content

Overview

Tempo is a stablecoin payments blockchain where all value is held in TIP-20 tokens — there is no native gas token. CDP user wallets integrate with Tempo using a two-step sign-then-broadcast pattern: the CDP backend signs the transaction server-side, and you broadcast it to Tempo’s RPC yourself using a viem public client.
API key wallets also support Tempo out of the box — see API Key Wallets on Tempo below.
This guide covers:
  • Configuring the CDP wagmi connector for Tempo
  • Creating a viem public client to read chain state and broadcast transactions
  • Querying TIP-20 token balances (Tempo has no native token)
  • Signing and broadcasting TIP-20 transfers with useSignEvmTransaction
Tempo uses its own native account abstraction model and does not support ERC-4337 smart accounts. You must configure your CDP wallet with createOnLogin: "eoa".

Prerequisites

Prerequisites

  • A free CDP Portal account and project
  • Node.js 22+
  • A node package manager installed (i.e., npm, pnpm, or yarn)
  • Basic familiarity with React and TypeScript
  • Configured your domain in CDP Portal (see below)
Step 1: Access CDP PortalNavigate to the Clients Configuration in CDP Portal, and click Add domain to include your local app.Step 2: Add your domain
  • For local development: Use http://localhost:3000 (or your preferred port)
  • For production: Use your actual domain (e.g., https://yourapp.com)
For production apps, only add your actual production domain. Do not add localhost to production CDP projects as malicious apps running locally could impersonate your frontend and abuse your project credentials.
Step 3: Save your changesClick Add domain again to save your changes. You should see your domain listed in the CDP Portal dashboard. The allowlist will take effect immediately upon saving.You should see your domain listed in the CDP Portal dashboard. The allowlist will take effect immediately upon saving.
Install the required packages:
1

Configure the wagmi connector for Tempo

Configure createCDPEmbeddedWalletConnector with tempoModerato as the chain and set createOnLogin: "eoa". Smart accounts are not supported on Tempo.
src/config.ts
2

Create a viem public client for Tempo

Create a viem PublicClient pointed at the Tempo RPC. This client handles all read operations (balances, nonces, gas estimation) and is used to broadcast signed transactions.
src/tempo.ts
3

Read TIP-20 token balances

Tempo has no native token. Query balances by calling balanceOf on each TIP-20 token contract via tempoClient.readContract. All Tempo stablecoins use 6 decimals.
TIP-20 is Tempo’s token standard. It shares the same interface as ERC-20, which is why viem’s standard ERC-20 ABI works without modification.
src/Balances.tsx
4

Sign and broadcast a transaction

CDP user wallets sign transactions server-side. Use useSignEvmTransaction from @coinbase/cdp-hooks to get a signed transaction from the CDP backend, then broadcast it yourself using tempoClient.sendRawTransaction.This two-step approach is required because the signer lives in the CDP backend, not in an injected browser wallet.
src/Transaction.tsx
useSendEvmTransaction does not support Tempo because CDP’s Send Transaction API does not include Tempo as a managed network. Instead, use useSignEvmTransaction to sign and broadcast manually — exactly as shown above.
5

Wire up the providers

Wrap your app in CDPReactProvider, WagmiProvider, and QueryClientProvider:
src/main.tsx

API Key Wallets on Tempo

API key wallets support Tempo with no server-side changes required. Because Tempo is EVM-compatible, signing works by simply setting the correct chain ID in your transaction — the same signing infrastructure that works for Base and Ethereum works for Tempo.
For more, see the non-custodial wallets documentation.

Demo app

Explore a complete working integration in the CDP + Tempo demo app.

Advanced Tempo features

Viem’s tempoActions extension unlocks Tempo-native capabilities beyond what a plain public client provides: To enable these features, extend your viem client with tempoActions from viem/tempo:
See the viem Tempo documentation for the full action reference.