# Escrow Properties

TLDR:&#x20;

* *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.**

<figure><img src="/files/cTNpevts5QEwnNz6bvCH" alt=""><figcaption><p>Single Release escrow</p></figcaption></figure>

### 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 optional `platformFee` 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. 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 dispute
  * `released` → funds have already been released
  * `resolved` → a dispute has been settled
  * `approved` (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 delivered
    * `status` → any type of status
    * `approve` → true or false
    * `evidence` (optional) → proof of delivery
* **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 approval
    * `description` → what’s being delivered
    * `status` → any type of status
    * `flags` → released, disputed, resolved and approve
    * `receiver` → final destination of the funds

This structure allows a project to fund and release in **phases**, not all at once.

<figure><img src="/files/sJf4Ws4txaHd7KAUHY3V" alt=""><figcaption></figcaption></figure>

***

### 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](/trustless-work/v2-en/introduction/technology-overview/escrow-types.md)
* Assign [Roles](/trustless-work/v2-en/introduction/technology-overview/roles-in-trustless-work.md)
* Follow [Lifecycle Phases](/trustless-work/v2-en/introduction/technology-overview/escrow-lifecycle.md)
* Test configs in [deploy in dApp](/trustless-work/v2-en/oss-dapps/backoffice.md)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.trustlesswork.com/trustless-work/v2-en/introduction/technology-overview/what-does-a-smart-escrow-look-like.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
