Smart Contracts

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.

NetworkContractAddress
Base MainnetPayNode Router0xA88B5eaD188De39c015AC51F45E1B41D3d95f2bb
Base MainnetUSDC Token0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
Base SepoliaPayNode Router0xA88B5eaD188De39c015AC51F45E1B41D3d95f2bb
Base SepoliaMock USDC0x036CbD53842c5426634e7929541eC2318f3dCF7e

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)

  1. The Agent must call USDC.approve(RouterAddress, amount).
  2. The Agent calls Router.processPayment(USDC_Address, amount, MerchantAddress).
  3. The Router transfers amount from the Agent to itself.
  4. The Router calculates merchantShare = amount * 99 / 100.
  5. The Router calculates protocolShare = amount - merchantShare.
  6. The Router transfers merchantShare to merchant.
  7. The Router transfers protocolShare to Treasury.
  8. The transaction succeeds and emits a PaymentProcessed event.