PaymentRouter

Splits each charge payment between the merchant, protocol treasury, and keeper.

Overview

Every charge flows through PaymentRouter. It receives the full charge amount from CronRegistry and distributes it atomically in a single transaction:

  • 98.5% → merchant wallet
  • 1.0% → protocol treasury multisig
  • 0.5% → keeper (the caller of charge())

Multi-recipient plans

Merchants can configure a split so revenue is routed to multiple addresses automatically. For example, a revenue share between a creator and a platform.

// Configure a 70/30 split paymentRouter.setSplit(planId, [ { recipient: creatorAddress, bps: 7000 }, // 70% { recipient: platformAddress, bps: 3000 }, // 30% ]);

Splits are applied to the merchant's 98.5% share. Protocol fees and keeper bounty are not affected by split configuration.

Fee governance

The protocol fee rate is stored in PaymentRouter and can be updated by the governance multisig. The contract enforces a hard cap of 2% — it cannot be set higher regardless of governance actions.

ParameterCurrentCapControlled by
Protocol fee1.0%2.0%Governance multisig
Keeper bounty0.5%0.5%Fixed in code