ERC-3009 is a signed transfer authorization on USDC. The holder signs once. A contract later calls receiveWithAuthorization and the tokens move, without a separate approve. SohoPay uses that for repayment (and for gift prepay). SohoSettlementV2.repayWithAuthorization pulls USDC from the borrower’s wallet after they sign on the repayment consent page. The debt mirror drops when that pull is confirmed. Merchant settlement does not use ERC-3009. The agent does not hold the USDC, and the voucher is not a transferWithAuthorization. settleBatch pays the merchant from protocol liquidity, then records debt against the borrower. See x402 and Settlements. If you are inspecting a transaction on Basescan:
  • A repayment shows USDC moving from the borrower into the protocol via receiveWithAuthorization.
  • A merchant payout shows USDC moving from SohoSettlementV2 to the registry payout address, net of the fee.

Next steps

Repayment

The flow that asks the borrower to sign.

Fees

Why the merchant payout is smaller than the billed amount.