Escrow Properties
An escrow is just structured data — a JSON body that defines how funds are held, released, and tracked. Each property tells the contract who does what, when funds move, and under which conditions.
TLDR:
Single-Release → all milestones must be approved for one payout.
Multi-Release → each milestone unlocks its own payout.
Below we break down the core properties of every escrow, and then highlight the differences between Single-Release and Multi-Release.

Core Structure
Escrow ID The on-chain identifier of the contract (also the deposit address). This is where funds are actually sent and locked.
Engagement ID & Title Configurable strings that help you identify the escrow in your own system — for example, linking it to an invoice, project ID, or marketplace order.
Description Human-readable explanation of the escrow’s purpose. Useful for context in dashboards, audits, or dispute resolution.
Roles Every escrow defines who can act on it:
Approver → validates milestone completion
Service Provider → delivers the work
Platform Address → the platform itself, able to take fees or adjust config before funding
Release Signer → executes the release of funds
Dispute Resolver → arbitrates conflicts, can re-route funds
Receiver → final destination of the funds 👉 See Roles for full detail.
Amount & Platform Fee
Single-Release: the total
amount
to be paid once conditions are met, plus an optionalplatformFee
percentage sent to the platform.Multi-Release: the total amount is distributed across milestones (each milestone defines its own
amount
). The platform fee still applies globally.
Trustline Defines the token being used (address and decimals). This is how Stellar escrows know which asset to accept. Typically USDC, but any Stellar-issued token is supported.
Flags Internal state markers that describe what’s happening:
disputed
→ a party raised a disputereleased
→ funds have already been releasedresolved
→ a dispute has been settledapproved
(Multi-Release only) → milestone has been approved by approver
Milestones
Milestones define what must be completed to unlock funds.
Single-Release Escrow
You can define one or many milestones, but the release is all-or-nothing.
Funds are only released once all milestones are approved.
Each milestone tracks:
description
→ what’s being deliveredstatus
→ pending, approved, in dispute, etc.evidence
(optional) → proof of deliveryapprovedFlag
→ true when the approver signs off
Multi-Release Escrow
Each milestone has the same properties as the single release, plus its own amount and flags.
When a milestone is approved, its funds can be released without waiting for others.
Milestones include:
amount
→ how much is unlocked upon approvalflags
→ released, disputed, resolved
This structure allows a project to fund and release in phases, not all at once.

Putting It Together
Single-Release = one payout, triggered when all milestones are approved. Amount + release & dispute flags live at the top level of the escrow.
Multi-Release = multiple payouts, each milestone has its own amount and flags. The total escrowed amount is distributed across milestones.
Both share the same core structure — IDs, roles, description, trustline, and platform fee. The difference is:
Single-Release → milestones are “checkpoints” for one big release.
Multi-Release → milestones are “tranches,” each tied to its own release.
🚀 Next Steps
Choose Escrow Type
Assign Roles
Follow Lifecycle Phases
Test configs in deploy in dApp
Last updated
Was this helpful?