Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.remlo.xyz/llms.txt

Use this file to discover all available pages before exploring further.

Remlo runs against one Tempo network per environment, selected by the TEMPO_NETWORK env var. Default is testnet (Moderato). Switching is intentional and explicit — never an implicit derivation from NODE_ENV — so a misconfigured deploy can’t accidentally route real-funds traffic to mainnet.

The env var

TEMPO_NETWORK=testnet     # default; Moderato
TEMPO_NETWORK=mainnet     # Presto
TEMPO_NETWORK=devnet      # rare; mostly for contract verification
Set in Vercel (or your hosting env) per environment. A value Remlo doesn’t recognize falls back to testnet with a server-log warning.

What changes per network

The single source of truth is lib/tempo/network.ts. Code paths that need network-specific values import getTempoNetwork() (typed config) or getTempoChain() (viem Chain). Per-network values:
PropertyMainnetTestnet (Moderato)Devnet
Chain ID42174243131318
RPC URLhttps://rpc.tempo.xyzhttps://rpc.moderato.tempo.xyzhttps://rpc.devnet.tempo.xyz
WebSocketwss://rpc.tempo.xyzwss://rpc.moderato.tempo.xyz
Explorerhttps://explore.tempo.xyzhttps://explore.testnet.tempo.xyzhttps://explore.devnet.tempo.xyz
Sponsor URL(not yet)https://sponsor.moderato.tempo.xyz
Token listtokenlist.tempo.xyz/list/4217tokenlist.tempo.xyz/list/42431tokenlist.tempo.xyz/list/31318
Currency symbolUSDUSDUSD
Faucetn/awallet.tempo.xyz(varies)

What stays constant on every network

The “predeployed system contracts” Tempo bakes into genesis. Live in lib/tempo/system-contracts.ts and never change between networks:
ContractAddress
TIP-20 Factory0x20Fc000000000000000000000000000000000000
Fee Manager0xfeec000000000000000000000000000000000000
Stablecoin DEX0xdec0000000000000000000000000000000000000
TIP-403 Policy Registry0x403c000000000000000000000000000000000000
Signature Verifier (TIP-1020)0x5165300000000000000000000000000000000000
Address Registry (TIP-1022)0xFDC0000000000000000000000000000000000000
Account Keychain (TIP-1011)0xAAAAAAAA00000000000000000000000000000000
Nonce precompile0x4E4F4E4345000000000000000000000000000000
pathUSD0x20c0000000000000000000000000000000000000
ERC-8004 Identity Registry0x8004A169FB4a3325136EB29fA0ceB6D2e539a432
ERC-8004 Reputation Registry0x8004BAa17C55a88189AE136b182e5fdA19dE9b63
What this means in practice: code that reads or writes against system contracts (TIP-403 policies, virtual addresses, AccountKeychain, etc.) is automatically network-correct. Only the network choice (which RPC + chain ID) needs to swap.

What’s deployment-specific

Remlo’s own contracts (PayrollBatcher, PayrollTreasury, EmployeeRegistry, StreamVesting, YieldRouter) are NOT enshrined — they’re our deployments. Their addresses must be set per-network via env:
NEXT_PUBLIC_PAYROLL_TREASURY=0x...
NEXT_PUBLIC_PAYROLL_BATCHER=0x...
NEXT_PUBLIC_EMPLOYEE_REGISTRY=0x...
NEXT_PUBLIC_STREAM_VESTING=0x...
NEXT_PUBLIC_YIELD_ROUTER=0x...
Defaults in lib/constants.ts are the testnet (Moderato) deployments from 2026-03-25. Production / mainnet must override via env.

Helpers

  • getTempoNetwork() — returns the typed config for the active network.
  • getTempoChain() — returns a viem Chain ready for createPublicClient / createWalletClient.
  • tempoExplorerUrl('tx' | 'address' | 'block', value) — composes explorer URLs without per-component string-concatenation.
  • assertNotMainnet(reason) — hard-throws on mainnet. Use this to gate code paths that must be testnet-only (faucet flows, sandbox emulation).

Mainnet readiness checklist

Before flipping TEMPO_NETWORK=mainnet:
  • All NEXT_PUBLIC_PAYROLL_* envs point to mainnet deployments.
  • Verified contracts visible at https://explore.tempo.xyz/address/<ADDR> (use contracts.tempo.xyz Sourcify endpoint).
  • Token allowlist coordinated with the issuer (PayrollBatcher must be on the relevant TIP-403 policy whitelist).
  • RPC partner (Alchemy / QuickNode / etc.) is on the latest T-upgrade.
  • TEMPO_RPC_URL_FALLBACK set to a second RPC for failover.
  • Auto-Payroll: regenerate AUTOPAYROLL_ENCRYPTION_KEY for production; do NOT reuse the testnet key.

See also