Skip to contentJefferyAkorful.sol

Work / Waybill

Waybill

Staged USDC escrow on Arc: a supplier is paid part by part as named people confirm.

  • Payments
  • DeFi
  • Solidity
  • Foundry
  • TypeScript
  • Next.js
  • USDC

Arc

the record

A buyer splits an order into parts and names what releases each one: attestors who sign a statement, the buyer’s approval, or a due date. USDC sits in an immutable escrow contract on Arc and is paid out part by part. A disputed part freezes alone, and a default applies if nobody decides.

  1. 01

    Non-custodial: no function sends a deal’s funds to a caller-chosen address, and the contracts have no proxies.

  2. 02

    Everyone named accepts before any money moves; if they do not accept by the deadline, the deal cancels with nothing locked.

  3. 03

    Anyone can send a due payment, refund or default; a failed transfer to a blocked wallet leaves that part retryable instead of jamming the deal.

  4. 04

    A relayer sends routine claims and refunds and indexes events, but nothing depends on it.

  5. 05

    Live on Arc mainnet in early access: deals up to 1,000 USDC, 10,000 USDC held in total.

// proofDeployed on Arc
tests
321
fuzz tests
21
invariants
7
Step by step

beat by beat

  1. Agree the partsBuyer

    The buyer splits the order into up to eight parts and names what releases each one: attestors who sign a statement, the buyer’s own approval, or a due date. Nothing is locked yet.

  2. Everyone acceptsSupplier, attestors, arbiter

    The supplier, every named attestor and the arbiter each accept before the buyer can fund. If the acceptance deadline passes first, anyone can cancel the deal with nothing locked.

  3. Lock the moneyBuyer

    The buyer funds the deal in one transfer: the total, plus the prepaid fee. The USDC is held by the escrow contract, not by Waybill.

  4. Sign off a partAttestor

    A named attestor signs a short statement for one part in their own wallet. Anyone can send the signature; the contract checks it is theirs, unexpired and unused. Enough signatures start the part’s review window.

  5. Pay the supplierAnyone

    When the review window ends, anyone can send the claim, and that part is paid to the supplier’s payout wallet. If the transfer fails, the part stays payable and can be retried.

  6. Dispute one partBuyer or supplier, then arbiter

    The buyer can dispute a part in review, or the supplier an overdue one. Only that part freezes. The other side has 72 hours to respond, then the arbiter pays the supplier, refunds the buyer, or splits it.

  7. Nobody confirmsAnyone

    If a part is still unconfirmed after its due date and grace period, anyone can make it refundable. The refund returns that part, and every later part not yet final, to the buyer’s refund wallet.