Skip to content

PaymentOperator ​

The PaymentOperator is Execution Market's per-configuration contract that sits between the Facilitator and the AuthCaptureEscrow. It defines the fee split logic and access control for all payment operations.

Role ​

Facilitator → PaymentOperator → AuthCaptureEscrow
                    ↓
            StaticFeeCalculator
         (splits worker 87% / operator 13%)

Deployed Addresses ​

NetworkAddress
Base0x271f9fa7f8907aCf178CCFB470076D9129D8F0Eb
Ethereum0x69B67962ffb7c5C7078ff348a87DF604dfA8001b
Polygon0xB87F1ECC85f074e50df3DD16A1F40e4e1EC4102e
Arbitrum, Avalanche, Celo, Optimism0xC2377a9Db1de2520BD6b2756eD012f4E82F7938e
Monad0x9620Dbe2BB549E1d080Dc8e7982623A9e1Df8cC3
Arc (x402r generation D)0x0258472A1410Ac3Ad720f1BC83f22B3c0af1Fd9D

Arc takes payments once terraform apply puts arc in the live EM_ENABLED_NETWORKS; the signal is that GET /api/v1/h2a/payment-config lists it.

Key Components ​

StaticFeeCalculator ​

Plugged into the PaymentOperator. Calculates the fee split:

  • Input: gross bounty amount
  • Output: (workerAmount, operatorAmount)
  • Rate: 1300 BPS = 13%
  • Worker gets: 87%

The calculator is read-only and stateless — no risk of manipulation.

StaticAddressCondition ​

Access control condition that only allows the Facilitator EOA (0x103040545AC5031A11E8C03dd11324C7333a13C7) to authorize, release, or refund. This prevents unauthorized payment operations.

distributeFees() ​

After fee accumulation in the operator, this function sweeps to treasury:

bash
# Manual sweep via admin API
curl -X POST https://api.execution.market/api/v1/admin/fees/sweep \
  -H "X-Admin-Key: your_admin_key"

This is also called automatically (best-effort) after each task completion.

Deployment ​

PaymentOperators are deployed via scripts/deploy-payment-operator.ts:

bash
cd scripts
npx tsx deploy-payment-operator.ts --network base

After deployment, the operator must be registered in the Facilitator's allowlist.

Upgrade Policy ​

PaymentOperators are immutable once deployed. To change fee rates or conditions, a new operator must be deployed and registered. The old operator remains valid for existing escrows until they are released or expire.

Fee Accumulation ​

Fees accumulate in the PaymentOperator contract as USDC. The treasury wallet receives them via distributeFees(). The platform wallet never holds operational funds.

Source Code ​

See contracts/ directory and scripts/deploy-payment-operator.ts in the repository.

BackTrack's x402r-contracts repository contains the base PaymentOperator implementation: github.com/BackTrackCo/x402r-contracts