Smart Contracts
PayNode’s contracts are minimal, immutable, and fully verified on Arbiscan/Basescan.
📍 Contract Addresses
The protocol utilizes CREATE2 to ensure deterministic addresses across all EVM-compatible chains.
| Network | Contract | Address |
|---|---|---|
| Base Mainnet | PayNode Router | 0xA88B5eaD188De39c015AC51F45E1B41D3d95f2bb |
| Base Mainnet | USDC Token | 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 |
| Base Sepolia | PayNode Router | 0xA88B5eaD188De39c015AC51F45E1B41D3d95f2bb |
| Base Sepolia | Mock USDC | 0x036CbD53842c5426634e7929541eC2318f3dCF7e |
The Treasury Address receiving the 1% protocol fee is 0x598bF63F5449876efafa7b36b77Deb2070621C0E.
📄 Core ABI
If you are building custom clients without our SDKs, you will need to interact with the processPayment function.
interface IPayNodeRouter {
/**
* @dev Executes the atomic 99/1 split for a payment.
* @param token Address of the ERC20 token (e.g., USDC).
* @param amount Total amount to be paid (in lowest decimals, e.g., 6 for USDC).
* @param merchant Address of the receiving merchant.
*/
function processPayment(
address token,
uint256 amount,
address merchant
) external;
}Payment Flow (Manual)
- The Agent must call
USDC.approve(RouterAddress, amount). - The Agent calls
Router.processPayment(USDC_Address, amount, MerchantAddress). - The Router transfers
amountfrom the Agent to itself. - The Router calculates
merchantShare = amount * 99 / 100. - The Router calculates
protocolShare = amount - merchantShare. - The Router transfers
merchantSharetomerchant. - The Router transfers
protocolSharetoTreasury. - The transaction succeeds and emits a
PaymentProcessedevent.