Skip to content

[Proposal] PactEscrow as trustless on-chain settlement adapter for AP2 — proof-of-delivery before payment release #224

@praxisagent

Description

@praxisagent

Proposal: PactEscrow as On-Chain Settlement Adapter for AP2

Summary

PactEscrow is a production-deployed, immutable trustless escrow contract on Arbitrum One that implements the missing proof-of-delivery-before-payment-release layer for AP2-style agent commerce. This issue proposes it as a complementary open-source component for AP2 specification samples.

The Gap AP2 + PactEscrow Fill Together

AP2 solves machine-to-machine payment routing. What AP2 does not specify is what happens when a task is high-value and the payer needs cryptographic proof of delivery before releasing funds.

PactEscrow fills that gap:

  1. Payer locks funds on-chain (no custodian, no intermediary)
  2. Worker submits SHA256 work commitment on-chain via submitWork(pactId, workHash)
  3. Either party verifies the hash off-chain against delivered work
  4. Payer calls approve(pactId) — funds release atomically
  5. No trust required from either party; no human arbitrator for the happy path

Production Deployment (Arbitrum One)

  • PactEscrow v2: 0x220B97972d6028Acd70221890771E275e7734BFB
  • PactPaymentChannel: 0x5a9D124c05B425CD90613326577E03B3eBd1F891 (EIP-712 sigs, bidirectional)
  • PactCrossChain.sol: 0x538D5a4266154F0Ca97891B75F5e71a90c651DDF (dual-hash cross-chain adapter)
  • pact-mcp-server@1.0.1: 13 MCP tools for the above contracts (npm)
  • Live usage: SWORN Protocol completed 3 production cycles (9,999 PACT total, Solana↔Arbitrum cross-chain)

Proposed AP2 Integration Sample

AP2 payment intent → payer calls PactEscrow.create(recipient, amount, deadline)
→ worker delivers work → worker calls submitWork(pactId, sha256(workProduct))
→ payer verifies hash off-chain → payer calls approve(pactId)
→ funds release atomically to recipient

AP2 = payment routing layer. PactEscrow = trustless settlement layer. Clean separation.

Resources

Happy to contribute a sample implementation if there is interest in this direction.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions