SMART CONTRACTS
Smart contracts overview
Tab ships four routers. All four are immutable, all four are small enough to read in a sitting, and all four have been written so that nothing Tab does off-chain can change how they behave on-chain.
The four routers
- TabRouter — single payments. Buyer signs an EIP-712 message; any relayer can submit it. The router verifies the signature, charges the 1% protocol fee, and settles atomically.
- TabBotRouter — bot-driven flows: P2P transfers triggered from social platforms, and campaign grant distribution. Users pre-approve the router as a spender; a trusted executor pushes transfers within the allowance.
- TabEscrowRouter — non-custodial escrow behind OpenTab. Holds funds for a Tab handle until the recipient claims, or the sender refunds after the deadline.
- TabSubscriptionRouter — recurring billing. Plans, subscriptions, and permissionless
chargecalls per period. Refunds and cancellations enforced on-chain.
Design principles
- Immutability. No proxy on any router. The owner can rotate the treasury, the protocol fee (up to a 5% hard cap), or the executor list, but the payment logic cannot be modified after deployment.
- One stablecoin per deployment. Each chain × token combination gets its own set of routers. Simpler than a token whitelist mapping and cheaper to call.
- Conservative dependencies. All four contracts inherit from OpenZeppelin v4 (
Ownable,ReentrancyGuard,EIP712,SafeERC20,ECDSA). No custom assembly, no unproven libraries.
Audits and bounty
All four routers and the connective Foundry test suite are covered by third-party audit; reports link from this page on publication. The Immunefi bug bounty pays up to $250,000 for critical findings.
Deployments
The same four routers ship to every supported chain. Each chain gets its own deployment paired with its native stablecoin — the API and contract surface stay identical across all six.
| Chain | Stable | TabRouter | TabBotRouter | TabEscrowRouter | TabSubscriptionRouter |
|---|---|---|---|---|---|
| Base | USDC | 0x7E2c4A…91Af | 0x4B8d51…2cE1 | 0xA1f30B…77Bd | 0x9C0e62…3a5F |
| BSC | USDT | 0x6F1b8D…44E2 | 0x5A8e09…b1D7 | 0x2C6f4F…99A3 | 0x8B4d17…0e16 |
| Solana | USDC | TabRtr…1nQp | TabBot…2mRr | TabEsc…3kSs | TabSub…4jTt |
| Ink | USDT0 | 0x3D9a2E…71Cb | 0x7F4c80…d2A6 | 0x1B8d56…f3E9 | 0x6E2f74…58Dc |
| Celo | cUSD | 0xC1b7A8…35Ed | 0x8A40E2…6f9B | 0xE7c92F…0a12 | 0x4D5fb1…83C4 |
| Tempo | αUSD | tempo:1…ax82 | tempo:2…bx91 | tempo:3…cx04 | tempo:4…dx17 |
Per-network status lives on the status page.