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.
| Parameter | Current | Cap | Controlled by |
|---|---|---|---|
| Protocol fee | 1.0% | 2.0% | Governance multisig |
| Keeper bounty | 0.5% | 0.5% | Fixed in code |