Skip to main content

Supported chains

Mandate supports 4 EVM chains: 2 mainnets and 2 testnets. Your runtime key prefix determines which chains you can use.
ChainChain IDUSDC AddressDecimalsKey Prefix
Ethereum Mainnet10xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB486mndt_live_*
Ethereum Sepolia111551110x1c7D4B196Cb0C7B01d743Fbc6116a902379C72386mndt_test_*
Base Mainnet84530x833589fCD6eDb6E08f4c7C32D4f71b54bdA029136mndt_live_*
Base Sepolia845320x036CbD53842c5426634e7929541eC2318f3dCF7e6mndt_test_*

Test vs live keys

Runtime keys use prefixes to enforce environment separation:
  • mndt_test_* keys work with testnet chains (Sepolia, Base Sepolia). Use these for development and testing. Testnet usage is free.
  • mndt_live_* keys work with mainnet chains (Ethereum, Base). Use these for production deployments.
A test key cannot validate transactions on mainnet. A live key cannot validate transactions on testnet. This prevents accidental production transactions during development.

SDK constants

The SDK exports chain and token constants so you avoid hardcoding addresses:
import { CHAIN_ID, USDC } from '@mandate.md/sdk';

// Chain IDs
CHAIN_ID.ETHEREUM         // 1
CHAIN_ID.SEPOLIA          // 11155111
CHAIN_ID.BASE             // 8453
CHAIN_ID.BASE_SEPOLIA     // 84532

// USDC addresses
USDC.ETHEREUM             // 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
USDC.SEPOLIA              // 0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238
USDC.BASE                 // 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
USDC.BASE_SEPOLIA         // 0x036CbD53842c5426634e7929541eC2318f3dCF7e

Default RPCs

When using MandateWallet, you can specify a custom RPC URL in the configuration. If you do not, the SDK uses public default RPCs:
ChainDefault RPC
Ethereum Mainnethttps://eth.llamarpc.com
Ethereum Sepoliahttps://rpc.sepolia.org
Base Mainnethttps://mainnet.base.org
Base Sepoliahttps://sepolia.base.org
For production use, configure a dedicated RPC provider (Alchemy, Infura, QuickNode) to avoid rate limits and improve reliability.

Getting started on testnet

The fastest way to test Mandate is with a mndt_test_* key on Base Sepolia:
  1. Register an agent using mandate login --name "TestAgent" --address 0xYourAddress.
  2. Fund your test wallet with Base Sepolia ETH and test USDC from a faucet.
  3. Validate a transaction: mandate validate --action transfer --reason "Test payment" --amount 1 --to 0xRecipient.
No real funds are at risk. Testnet validation behaves identically to mainnet, including all 14 policy checks.

Next Steps

SDK Constants

Full reference for all exported constants in the SDK.

Credential Management

Store and rotate runtime keys securely.