Fastest-chain built for
enterprise-scale payments
Sub-second transactions, sub-cent fees.
SETTLED TPS
Tempo settled ~92% of submitted benchmark load while sustaining high-volume throughput.
Build on Tempo
Tempo's infrastructure is well-suited for high-throughput transactions, public and private stablecoin payments
Built for programmable payments
Tempo brings payments, accounts, stablecoins, and compliance primitives into the protocol layer.
Tempo Transactions
Tempo Transactions let apps batch, sponsor, schedule, and parallelize payments through a native transaction type.
import { client } from "./viem.config"; // Calls execute atomically in one txconst receipt = await client.sendTransactionSync({ calls: [ { to: usdc, data: transferData(alice, 10n) }, { to: usdc, data: transferData(bob, 25n) }, ],});import { parseUnits } from "viem";import { client } from "./viem.config"; // App pays gas via a fee-payer signatureconst { receipt } = await client.token.transferSync({ token: usdc, to: alice, amount: parseUnits("10", 6), feePayer: sponsor,});import { client } from "./viem.config"; // Expiring nonces drop the nonce orderingconst opts = { token: usdc, nonceKey: "expiring" }; const [a, b] = await Promise.all([ client.token.transferSync({ ...opts, to: alice, amount }), client.token.transferSync({ ...opts, to: bob, amount }),]);import { client } from "./viem.config"; const now = Math.floor(Date.now() / 1000); // Valid only inside this time windowconst receipt = await client.sendTransactionSync({ to: usdc, data: transferData(alice, 10n), validAfter: now, validBefore: now + 3600,});import { client } from "./viem.config"; // Calls execute atomically in one txconst receipt = await client.sendTransactionSync({ calls: [ { to: usdc, data: transferData(alice, 10n) }, { to: usdc, data: transferData(bob, 25n) }, ],});Accounts
Tempo gives wallets and apps more flexible account access with passkeys, delegated keys, and scoped signing authority.
import { createConfig, http } from "wagmi";import { tempo } from "wagmi/chains";import { webAuthn } from "accounts/wagmi"; // Sign with a passkey — WebAuthn / P256export const config = createConfig({ chains: [tempo], connectors: [webAuthn({ authUrl: "/auth" })], transports: { [tempo.id]: http() },});import { generatePrivateKey } from "viem/accounts";import { Account, Actions, Expiry } from "viem/tempo";import { client } from "./viem.config"; // Delegate signing to a scoped access keyconst accessKey = Account.fromP256(generatePrivateKey(), { access: client.account,}); const auth = await Actions.accessKey.signAuthorization( client, { accessKey, expiry: Expiry.days(7) },);import { Actions, Expiry } from "viem/tempo";import { parseUnits } from "viem";import { client } from "./viem.config"; // Cap spend and scope which calls a key makesconst auth = await Actions.accessKey.signAuthorization(client, { accessKey, expiry: Expiry.days(7), limits: [{ token: usdc, limit: parseUnits("100", 6) }], scopes: [{ target: usdc, selector: "transfer(address,uint256)", }],});import { createConfig, http } from "wagmi";import { tempo } from "wagmi/chains";import { tempoWallet } from "accounts/wagmi"; // One passkey account, portable across devicesexport const config = createConfig({ chains: [tempo], connectors: [tempoWallet()], transports: { [tempo.id]: http() },});import { createConfig, http } from "wagmi";import { tempo } from "wagmi/chains";import { webAuthn } from "accounts/wagmi"; // Sign with a passkey — WebAuthn / P256export const config = createConfig({ chains: [tempo], connectors: [webAuthn({ authUrl: "/auth" })], transports: { [tempo.id]: http() },});TIP-20 Tokens
TIP-20 gives stablecoins the primitives needed for payments: fees, memos, lanes, policies, rewards, and issuer controls.
import { parseUnits } from "viem";import { client } from "./viem.config"; // Send alphaUSD, pay the fee in betaUSDconst { receipt } = await client.token.transferSync({ token: alphaUsd, to: alice, amount: parseUnits("100", 6), feeToken: betaUsd,});import { parseUnits, stringToHex, pad } from "viem";import { client } from "./viem.config"; // Attach a 32-byte invoice referenceconst memo = pad(stringToHex("INV-12345"), { size: 32 }); const { receipt } = await client.token.transferSync({ token: usdc, to: alice, amount: parseUnits("100", 6), memo,});import { parseUnits } from "viem";import { client } from "./viem.config"; // TIP-20 transfers use the reserved payment// lane automatically — predictable inclusionconst { receipt } = await client.token.transferSync({ token: usdc, to: alice, amount: parseUnits("100", 6),});import { parseUnits } from "viem";import { client } from "./viem.config"; // Issuer-only supply & emergency controlsawait client.token.mintSync({ token: usdc, to: treasury, amount: parseUnits("1000000", 6),});await client.token.setSupplyCapSync({ token: usdc, supplyCap });await client.token.pauseSync({ token: usdc });import { parseUnits } from "viem";import { client } from "./viem.config"; // Send alphaUSD, pay the fee in betaUSDconst { receipt } = await client.token.transferSync({ token: alphaUsd, to: alice, amount: parseUnits("100", 6), feeToken: betaUsd,});TIP-403 Policies
TIP-403 lets issuers define transfer rules once and reuse them across tokens, wallets, and payment flows.
import { client } from "./viem.config"; // Create one policy, reuse it everywhereconst { policyId } = await client.policy.createSync({ admin, type: "whitelist", addresses: [alice, bob],});import { client } from "./viem.config"; // Only approved addresses can transferawait client.policy.modifyWhitelistSync({ policyId, address: alice, allowed: true,});import { client } from "./viem.config"; // Block specific addresses; all others allowedawait client.policy.modifyBlacklistSync({ policyId, address: mallory, restricted: true,});import { client } from "./viem.config"; // Apply one policy across many tokensfor (const token of [alphaUsd, betaUsd, gbpUsd]) { await client.token.changeTransferPolicySync({ token, policyId, });}import { client } from "./viem.config"; // Create one policy, reuse it everywhereconst { policyId } = await client.policy.createSync({ admin, type: "whitelist", addresses: [alice, bob],});Zones
Zones let developers create controlled payment spaces for private economies, closed-loop stablecoins, and restricted payment flows.
import { createPublicClient, http } from "viem";import { zoneModerato } from "viem/tempo/zones"; // Private validium chain, anchored to Tempoconst zone = createPublicClient({ chain: zoneModerato(6), transport: http("https://rpc-zone-a.testnet.tempo.xyz"),});import { parseUnits } from "viem";import { Actions } from "viem/tempo"; // Encrypted: only the sequencer sees the detailsconst { receipt } = await Actions.zone.encryptedDepositSync( rootClient, { account: rootClient.account, token: pathUsd, amount: parseUnits("100", 6), zoneId: ZONE_A.id, },);import { parseUnits } from "viem";import { Actions } from "viem/tempo"; // Move pathUSD in; it stays private insideconst { receipt } = await Actions.zone.depositSync(rootClient, { account: rootClient.account, token: pathUsd, amount: parseUnits("100", 6), zoneId: ZONE_A.id,});import { parseUnits } from "viem";import { Actions } from "viem/tempo"; // Routed exit — zones inherit TIP-403 policiesconst { receipt } = await Actions.zone.requestWithdrawalSync( rootClient, { account: rootClient.account, token: pathUsd, amount: parseUnits("50", 6), zoneId: ZONE_A.id, },);import { createPublicClient, http } from "viem";import { zoneModerato } from "viem/tempo/zones"; // Private validium chain, anchored to Tempoconst zone = createPublicClient({ chain: zoneModerato(6), transport: http("https://rpc-zone-a.testnet.tempo.xyz"),});Developer Tools
Operate payment apps with hosted services, indexing, fee sponsorship, and node tooling.
- Hosted Fee PayerSponsor transaction fees so users can pay without holding gas.
- TIDX IndexerQuery transactions, balances, and payment activity from Tempo.
- Tempo CLIManage wallets, make requests, download data, and run nodes from the terminal.
- Run a Tempo NodeOperate dedicated infrastructure for direct network access and control.
Libraries & SDKs
SDKs and packages for integrating accounts, transactions, stablecoins, and payments into your product.
- Accounts SDKCreate passkey-based accounts and wallet experiences for Tempo apps.
- MPPXAccept machine payments over HTTP with one-time charges and sessions.
- TypeScript SDKBuild web apps with Tempo Transactions, fee tokens, and payment flows.
- Go SDKPower backend services, infrastructure, and payment systems.
- Python SDKPrototype, automate, and script payment workflows.
- Rust SDKBuild performance-sensitive infrastructure and lower-level integrations.
- Foundry supportTest and deploy contracts using familiar Ethereum development workflows.