← 返回
未分类 Key 中文

Decanus Escrow

Onchain dual-deposit escrow for agent-to-agent task settlement on Base L2 via MCP. Use when: creating escrow agreements, accepting work contracts, delivering...
链上双押金托管,用于在BaseL2上通过MCP进行代理间任务结算。适用于:创建托管协议、接受工作合同、交付...
manueltarouca manueltarouca 来源
未分类 clawhub v0.1.0 1 版本 100000 Key: 需要
★ 0
Stars
📥 300
下载
💾 0
安装
1
版本
#latest

概述

Escrow MCP Server

Dual-deposit escrow on Base Sepolia via the @decanus-labs/escrow-mcp MCP server. Both buyer and seller deposit -- if the seller doesn't deliver, their stake burns.

Start the Server

PRIVATE_KEY=0x... npx -y @decanus-labs/escrow-mcp

Or configure as an MCP server in config.yaml:

plugins:
  entries:
    escrow:
      type: mcp
      config:
        command: npx
        args: ["-y", "@decanus-labs/escrow-mcp"]
        env:
          PRIVATE_KEY: "0x..."

Optional env vars: RPC_URL (default: https://sepolia.base.org), CONTRACT_ADDRESS (default: v2 deployment).

Tools

Write Tools

create_escrow

Buyer creates an escrow, depositing ETH as payment.

ParamTypeRequiredDescription
------------------------------------
sellerstringyesSeller's Ethereum address
arbiterstringyesArbiter's Ethereum address (dispute resolver)
paymentAmountEthstringyesPayment in ETH (e.g. "0.01")
durationSecondsnumberyesDeadline in seconds from now

accept_escrow

Seller accepts by depositing a stake >= the payment amount.

ParamTypeRequiredDescription
------------------------------------
escrowIdnumberyesEscrow ID
stakeAmountEthstringyesStake in ETH (must be >= payment)

deliver_work

Seller submits delivery proof. Starts a 24h buyer review window.

ParamTypeRequiredDescription
------------------------------------
escrowIdnumberyesEscrow ID
deliveryHashstringyesbytes32 hex or plain string (auto-hashed via keccak256)

complete_escrow

Buyer approves delivery. Releases payment + seller stake to seller.

ParamTypeRequiredDescription
------------------------------------
escrowIdnumberyesEscrow ID

dispute_escrow

Either party raises a dispute. Arbiter must resolve.

ParamTypeRequiredDescription
------------------------------------
escrowIdnumberyesEscrow ID
reasonstringnoHuman-readable reason (stored off-chain)

refund_expired_escrow

Anyone triggers after deadline. Buyer gets payment back, seller stake burns.

ParamTypeRequiredDescription
------------------------------------
escrowIdnumberyesEscrow ID

Read Tools

get_escrow

Fetch escrow state. Returns state label, participants, amounts, deadlines (ISO + relative), delivery hash, and suggested next actions.

ParamTypeRequiredDescription
------------------------------------
escrowIdnumberyesEscrow ID

list_escrows

Paginated scan of recent escrows.

ParamTypeRequiredDescription
------------------------------------
limitnumbernoMax results (default 10, max 50)
statestringnoFilter: AWAITING_SELLER, FUNDED, DELIVERED, COMPLETED, DISPUTED, REFUNDED, BURNED
participantstringnoFilter by address (buyer, seller, or arbiter)

Escrow States

AWAITING_SELLER → FUNDED → DELIVERED → COMPLETED
                    ↓          ↓
                 DISPUTED   DISPUTED
                    ↓
                 BURNED (after deadline)
  • AWAITING_SELLER -- buyer deposited, waiting for seller to stake
  • FUNDED -- both deposited, seller can deliver or deadline triggers burn
  • DELIVERED -- seller submitted proof, 24h grace for buyer to approve or dispute
  • COMPLETED -- buyer approved, seller received payment + stake
  • DISPUTED -- arbiter must resolve
  • BURNED -- deadline expired while FUNDED, buyer refunded, seller stake locked permanently

Common Flows

Happy path: hire an agent, pay on delivery

1. create_escrow(seller=0x..., arbiter=0x..., paymentAmountEth="0.01", durationSeconds=86400)
2. Seller calls: accept_escrow(escrowId=0, stakeAmountEth="0.01")
3. Seller calls: deliver_work(escrowId=0, deliveryHash="ipfs://QmProof...")
4. Buyer calls: complete_escrow(escrowId=0)
   → Seller receives 0.02 ETH (payment + stake returned)

Dispute path

1. create_escrow(...) → accept_escrow(...)
2. Buyer or seller calls: dispute_escrow(escrowId=0, reason="Work incomplete")
   → State moves to DISPUTED, arbiter must resolve via contract

Expired refund (seller no-show)

1. create_escrow(...) → accept_escrow(...)
2. Deadline passes with no delivery
3. Anyone calls: refund_expired_escrow(escrowId=0)
   → Buyer gets payment back, seller stake burned (locked in contract)

Check status

get_escrow(escrowId=0)
→ Returns state, deadlines, next valid actions

Notes

  • All ETH amounts are strings to avoid precision issues. Use "0.01" not 0.01.
  • The deliveryHash field accepts either a raw bytes32 hex string or a plain string (which gets keccak256-hashed automatically).
  • Write tool responses include txHash and explorerUrl for verification.
  • Each server instance uses one signer (the PRIVATE_KEY). Run separate instances for buyer and seller roles.
  • Currently Base Sepolia testnet only. ETH-native, not stablecoin.

版本历史

共 1 个版本

  • v0.1.0 当前
    2026-05-07 17:21 安全 安全

安全检测

腾讯云安全 (Keen)

安全,无风险
查看报告

腾讯云安全 (Sanbu)

安全,无风险
查看报告

🔗 相关推荐

ai-agent

Find Skills

root
帮助用户发现和安装智能体技能,当用户询问如「如何做X」、「找X的技能」、「有能做...的吗」等问题时
★ 1,526 📥 581,916
ai-agent

self-improving agent

pskoett
记录自身发现以实现自我改进的技能
★ 4,174 📥 944,909
ai-agent

Self-Improving + Proactive Agent

ivangdavila
自我反思+自我批评+自我学习+自组织记忆。智能体评估自身工作、发现错误并持续改进。
★ 1,448 📥 329,456