Routex supports four blockchains. Each adapter implements the ChainAdapter interface and handles chain-specific balance queries, fee estimation, and payment payload construction.
Technology: viem (EVM) Finality: ~2000ms (L2 block time) Chain IDs: 8453 (mainnet), 84532 (Sepolia testnet)
pnpm add @routexcc/chain-baseimport { createBaseAdapter } from '@routexcc/chain-base';
import { createPublicClient, http } from 'viem';
import { base, baseSepolia } from 'viem/chains';
// Mainnet
const client = createPublicClient({
chain: base,
transport: http('https://base-mainnet.g.alchemy.com/v2/YOUR_KEY'),
});
const adapter = createBaseAdapter(client);
// Testnet
const testClient = createPublicClient({
chain: baseSepolia,
transport: http('https://base-sepolia.g.alchemy.com/v2/YOUR_KEY'),
});
const testAdapter = createBaseAdapter(testClient, { testnet: true });eth_call(ERC-20balanceOf)eth_gasPriceeth_estimateGas
EIP-712 signed typed data with domain separator including chainId and verifyingContract.
Technology: viem (EVM), shares EvmAdapter base class with Base
Finality: ~2000ms
Chain IDs: 137 (mainnet), 80002 (Amoy testnet)
pnpm add @routexcc/chain-polygonimport { createPolygonAdapter } from '@routexcc/chain-polygon';
import { createPublicClient, http } from 'viem';
import { polygon } from 'viem/chains';
const client = createPublicClient({
chain: polygon,
transport: http('https://polygon-mainnet.g.alchemy.com/v2/YOUR_KEY'),
});
const adapter = createPolygonAdapter(client);Same as Base (shared EVM implementation).
Technology: @stellar/stellar-sdk Finality: ~5000ms (consensus round) Token: USDC via trustline
pnpm add @routexcc/chain-stellarimport { createStellarAdapter } from '@routexcc/chain-stellar';
const adapter = createStellarAdapter(stellarRpcClient, {
usdcIssuer: 'GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN',
});- Horizon API: account balances, fee stats
- Stellar RPC: transaction submission
- Stellar uses 7-decimal precision internally; the adapter converts to 6-decimal USDC precision.
- USDC balance is read from the account's trustline for the specified issuer.
Technology: @solana/web3.js Finality: ~400ms (slot time) Token: USDC as SPL token
pnpm add @routexcc/chain-solanaimport { createSolanaAdapter } from '@routexcc/chain-solana';
const adapter = createSolanaAdapter(solanaRpcClient, {
usdcMint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
});getTokenAccountBalancegetTokenAccountsByOwnergetRecentPrioritizationFees
- Fee estimation uses base fee (5000 lamports) plus median prioritization fee.
- Lamport-to-USD conversion uses 9-decimal precision.
All adapters implement ChainAdapter:
interface ChainAdapter {
readonly chainId: ChainId;
getBalance(address: string, token: string): Promise<TokenBalance>;
estimateFee(payment: AcceptedPayment): Promise<FeeEstimate>;
buildPaymentPayload(payment: AcceptedPayment, signer: Signer): Promise<PaymentPayload>;
getFinality(): number;
}The adapter never accesses the signer's private key. It calls signer.sign() or signer.signTypedData() and receives only the signature.