mechawallet_
Reference

Networks & fees#

The fee#

0.5% of the price, plus a fixed $0.01. No monthly fee, no per-seat cost, no minimum.

Seller price Fee Buyer pays Seller receives
$0.01 $0.01005 $0.02005 $0.01
$0.10 $0.0105 $0.1105 $0.10
$1.00 $0.015 $1.015 $1.00
$25.00 $0.135 $25.135 $25.00
$49.00 $0.255 $49.255 $49.00
$100.00 $0.51 $100.51 $100.00

The two parts are added, not compared — there is no floor and no crossover. The fixed $0.01 is the cost of one on-chain settlement, which does not shrink with the sale, so it is owed on every payment; the percentage is margin on value. That shape has no kink, which a floor does: under max(0.5%, $0.005) the effective rate climbed to 50% at $0.01 and the fixed part vanished entirely above $1.

The fixed component is also not negotiable. Per-account rates (volume deals) move the percentage only, so even a 0 bps deal still pays $0.01 and no sale settles below what it costs to settle.

It's visible in every 402 before anyone pays:

"extra": { "providerAmount": "100000", "feeAmount": "10500" }

That's a $0.10 sale: $0.0005 percentage plus $0.01 fixed.

Atomic USDC, 6 decimals, as strings.

The seller always receives the number they set

The fee is added on top, not deducted. Set $0.10 and $0.10 lands in your wallet.


Rails#

One checkout can advertise several networks at the same dollar price. The buyer picks.

Network CAIP-2 Asset Status
Base mainnet eip155:8453 USDC Live — settled on mainnet
Base Sepolia eip155:84532 test USDC Testing
Solana mainnet solana:5eykt4Us… SPL USDC Live — settled on mainnet
Stellar stellar:pubnet USDC Dormant

Both live rails have moved real money, verifiable on a block explorer rather than on our word: Base 0x292dcc2c… and Solana 46bzWMwk…. In each the seller received the full listed price and nothing was left sitting in an intermediary.

The buyer needs no gas token on either. On Base the payment is an EIP-3009 authorization and a relayer submits it. On Solana the relayer signs as fee payer at signer slot 0 — which is also why the buyer's client should check what it is signing before it signs; pay402 does, and so should any other implementation.

Testnets are hidden unless EXPOSE_TESTNET is on. Solana is hidden unless EXPOSE_SOLANA is on and its config is complete — a half-wired rail is never advertised.


How the split happens#

Base (EVM) — a splitter contract#

payTo is an immutable splitter, not the seller. The buyer signs one EIP-3009 ReceiveWithAuthorization for the total; the contract divides it in the same transaction.

0x234fE2A1D1df93fD9B907F0e1ad0c8b94E81FB5c   splitter (Base mainnet)
0x52B336b11fE0Af7ED835E2B83619f89Ae12Ed313   splitter v2 (Base mainnet — three-way: adds the platform leg)
0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913   USDC (Base mainnet)

Plain checkouts settle through v1. A checkout carrying a platform fee (see the platforms guide) settles through v2 — same discipline, one more leg, and the platform's wallet is a per-payment parameter, never baked in.

The USDC address and fee recipient are baked into the contract at deploy time and cannot be changed — not by us, not by anyone.

The buyer needs no ETH: a relayer submits the transaction and pays gas.

Solana (SVM) — no contract at all#

Program-less. payTo names the seller, and the split is two transfer_checked instructions inside the buyer's own transaction — one to the seller's ATA, one to the fee recipient's.

The relayer co-signs as fee payer, so the buyer needs no SOL.

Verification differs accordingly

On Base we trust an immutable contract to divide correctly. On Solana there's nothing to trust, so verification decodes the buyer's transaction and checks both transfer destinations and amounts against the 402. Neither path takes the client's word for the split.


Decimals and rounding#

USDC is 6 decimals on EVM and Solana, 7 on Stellar, so the atomic conversion is keyed on the destination network. Amounts cross the wire as atomic integer strings"110500", not 0.1105 — because a float can't hold money and JavaScript rounds silently.

Sub-cent precision is real and is never rounded up to a whole cent. A $0.01 sale is charged $0.01005 — the percentage on it is a twentieth of a cent, and it is carried, not swallowed.


Settlement timing#

Base A few seconds — one transaction, confirmed before goods release
Solana Sub-second to a couple of seconds

Goods are released only after settlement confirms. That ordering isn't configurable.


Rehearsals#

Every checkout's /c/{id}/test face settles without touching a chain: synthetic 0xtest_… hash, test_mode: true on the payment and receipt, no explorer link. The test face lists testnet rails only.

Which face settles simulated is decided by the path and the checkout's armed state — never by the payment payload, so a test payload presented to an armed live face is refused. An unarmed checkout (test_mode: true) rehearses on its bare URL too, until the seller goes live. A mw_test_ key cannot move real money, and a mw_live_ key cannot create an unarmed checkout — the two can't be crossed by accident.