⚒️Escrow Design

We don’t hold your money—we hold the logic.

Trustless Work escrows are role-based. It is important to understand the roles to be able to correctly configure the escrows. Updates to the contract status have to be signed by addresses, and only the addresses which have a role assigned can perfom the functions that only that role can sign.


Roles

Every escrow includes a roles object. These are the available roles:

  • Service Provider → Can update milestone status, can raise a dispute.

  • Approver → validates milestone completion, can raise a dispute.

  • Platform Address → can make changes before escrow is funded. Is the platform fee receiver (optional configurable %fee)

  • Release Signer → executes funds release.

  • Dispute Resolver → arbitrates when things go wrong, can re-route funds if dispute is raised.

  • Receiver → final destination of funds.

Other roles which play no role:

Issuer: has no powers over the contract.

Depositor: Every incoming transaction to the escrow is indexed. But depositors play no role.

Observer (coming in next version): Addreses that want to be observe a escrow. They play no role, but are indexed as an observer, which facilitates tracking of escrows by role.

Roles in Trustless Work

Escrow structure

But Roles are only the beginning, here are more properties you should know about:

  • Escrow ID: On-chain identifier of the contract. Deposit Address. We call it like this, but it is we also reference to it as Contract Address.

  • Engagement ID → configurable string, Is meant to be used to connect the escrow with an invoice number or an external secuencer. Facilitates indexation.

  • Title → configurable string, Title of the contract.

  • Roles → who marks, approves, releases, resolves, and receives

  • Description → why the escrow exists

  • Milestones → Action that must be completed to unlock funds

  • Amount & Fees → how much is locked, how much the platform earns

  • Platform Fee → optional, how much the platform (marketplace, app, etc) earns

  • Trustline → which asset is used (USDC, or any Stellar-issued token)

  • Flags → state indicators (disputed, released, resolved)

Escrow Properties

Two Escrow Types

We currently support two escrow types:

  1. Single-Release Escrow Multiple milestones, one payout. Useful for deposits, one-off jobs, or simple deliveries.

  2. Multi-Release Escrow Multiple milestones, multiple payouts (one per milestone). Perfect for projects, grants, or milestone-based funding.

More iterations are coming as we learn from your requirements! Feel free to reach out!

Escrow Types

Lifecycle Integration

We constantly talk about the escrow lifecycle, which follows this path.

  1. Initiation → define schema

  2. Funding → lock assets via trustline

  3. Milestone updates → service provider adds progress

  4. Approvals → approver signs off

  5. Release → release signer triggers transfer

  6. (Optional) Dispute & Resolution

Escrow Lifecycle

🚀 Next Steps

Then: Test it in our dApp Integrate Trustless Work into your platform Try out our Vibe-Coding Guide Use our escrow-blocks


Last updated

Was this helpful?