# 8. escrow\.bos - a contract that holds funds in escrow

An escrow contract designed for paying worker proposals. The intention is that the authority for this account would be nulled.

> Original source code was gratefully authored by [eosDAC](https://github.com/eosdac/dacescrow).

### Quickstart

#### Init Escrow

> Only `bet.bos@active` can `init` an escrow. This will initialize the escrow between the `sender` & `receiver`.

```
$ bosc tx create escrow.bos init '{"sender":"bet.bos","receiver":"<RECEIVER>","approver":"eosio","escrow_name":"<NAME>","expires_at":"2019-09-15T00:00:00","memo":"BOS escrow"}' -p bet.bos
```

#### Fund/Initialize Escrow

> BOS funds must be `transfer` into the `escrow.bos` account before starting another escrow

```
$ bosc transfer bet.bos escrow.bos "100.0000 BOS" -m "<ESCROW NAME>" -p bet.bos
```

#### Approve Escrow

> Only `bet.bos@active` or `eosio@active` are allowed to approve. if approver is bet.bos, no change, allow proposer to claim 100% of the fund if approver is BPs, only keep 90% fund for proposer to claim, and BET.BOS will manually execute transfer ACTION in escrow\.bos to send fund to each BPs and each auditors

```
$ bosc tx create escrow.bos approve '{"escrow_name":"<NAME>","approver":"eosio"}' -p eosio
```

#### Review Escrow

Allows the {{ sender }}, {{ approver }} or {{ receiver }} to perform an on-chain notification which is used to signal a review of the {{ escrow\_name }}.

```
$ bosc tx create escrow.bos review '{"escrow_name":"<NAME>","user":"<USER>","reviewer":"<REVIEWER>","memo": "review escrow"}' -p <USER>
```

#### Claim Escrow

> Executing `claim` will complete the escrow process and transfer the BOS tokens to the receiver. Anyone can execute the `claim` action.

```
$ bosc tx create escrow.bos claim '{"escrow_name":"<NAME>"}' -p <ACCOUNT>
```

#### Proposing `approve` MSIG

1. Create an `approve.json` transaction file which is signed by `eosio@active`

```
$ bosc tx create escrow.bos approve '{"escrow_name": "<NAME>", "approver":"eosio"}' -p eosio --skip-sign --expiration 36000 --write-transaction approve.json
```

1. Propose MSIG

```
$ bosc multisig propose <PROPOSER> <PROPOSAL NAME> approve.json --request-producers
```

1. Exec MSIG

```
$ bosc multisig exec <PROPOSER> <PROSOAL NAME> <EXECUTER>
```

### Caveats

* The sender of an escrow will temporarily be whitelisted to BOS executives. In the future anyone may be a sender
* The sender may only have one unfilled escrow at any given time, however they may have many filled escrows
* To fill an escrow the sender must transfer the `BOS` tokens to this contract. An unfilled escrow will be filled
* The receiver is considered as always approving the escrow. An approval must come from either the sender or the approver
* The sender may only cancel an escrow that has not been filled
* The sender may only refund an escrow that has passed it's expiry
* Unapprove only removes an existing approval, if the action is made before the receiver uses the claim action
* A sender may extend the expiry but not shorten it
* The approver may change extend or shorten the expiry
* The approver may close an escrow. This is essentially the same as refunding it, however without waiting for the expiry to lapse
* The approver may Lock and Unlock an escrow. This prevents ALL actions except unlock and actions made by the approver.

## init

### Description

To create an empty escrow payment agreement for safe and secure funds transfer protecting both {{ sender }} and {{ receiver }} for a determined amount of time.

## transfer

### ACTION: `transfer`

### Description

To listen and react to the eosio.token contract's transfer action and ensure the correct parameters have been included in the transfer action.

## approve

### Description

To approve the release of funds to the intended {{ receiver }}. Each escrow agreement requires at least {{ sender }} or {{ approver }} to grant fund release.

## unapprove

### Description

To unapprove the release of funds to the intended receiver from a previous approved action.

## claim

To claim the escrowed funds for an intended {{ receiver }} after an escrow agreement has met the required approvals.

## refund

To return the escrowed funds back to the original {{ sender }}. This action can only be run after the contract has met the intended expiry time.

## cancel

### Description

To cancel an escrow agreement. This action can only be performed by the {{ sender }} as long as no funds have already been transferred for the escrow agreement. Otherwise they would need to wait for the expiry time and then use the refund action.

## extend

### Description

Allows the sender to extend the expiry

## close

Allows the {{ approver }} to close and refund an unexpired escrow

## lock

### Description

Allows the {{ approver }} to lock an escrow preventing any actions by {{ sender }} or {{ receiver }}.

## review

### Description

Allows the {{ sender }}, {{ approver }} or {{ receiver }} to perform an on-chain notification which is used to signal a review of the {{ escrow\_name }}.

## clean

### Description

To remove all existing escrow agreements for developer purposes. This can only be run with \_self permission of the contract which would be unavailable on the main net once the contract permissions are removed for the contract account.


---

# 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://boscore.gitbook.io/docs/essentials/bos-ecosystem/boscore-improvement-proposal/8.escrow-bos.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.
