# Multi-Swap

The Multi-Swap instrument allows makers to post their intend for a token exchange. Taker can engage the issuance and complete the exchange.

The Multi-Swap instrument is similar to Swap but it allows multiple engagements to the same issuance. Maker defines the expected input token amount and output amount. When a taker engages with output token less than the expected output amount, the proportional amount of input token is swapped.

## Multi-Swap lifecycle

The image below shows the lifecycle of Multi-Swap issuance and engagement.

![](https://2376257288-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LoaA4YYVTuDERPqi-LD%2F-M8CEsBNviKQ6oj-zjX-%2F-M8CH1C5iUbDKdeaYCNc%2Fmultiswap.jpg?alt=media\&token=f740a8db-3b06-4ee1-a35e-0cd41425232d)

* When a multi-swap issuance is created and the input token is deposited, the multi-swap issuance becomes Engageable;
* When a taker engages the multi-swap issuance and deposits the output token
  * If there is enough input token remaining, the multi-swap engagement is created and Complete with input token transferred to taker and output token transferred to maker
  * If there is not enough input token remaining, the engagement transaction will fail
  * If there is no input token left after this engagement, the multi-swap issuance is Complete
* When maker cancels an Engageable multi-swap issuance and there is no engagement, the multi-swap issuance becomes Cancelled and the deposited input token is returned;
* When the multi-swap issuance is due, the multi-swap is Complete and remaining input tokens are returned.

## Multi-Swap Parameters

The multi-swap instrument is highly customizable. It defines a set of parameters which allows both Service providers and makers to customize the multi- instrument and its issuances.

### Multi-Swap Service Provider Parameters

The following parameters allow Service Provider to customize the multi-swap instrument. They are all defined in the multi-swap instrument contract.

| Multi-Swap Instrument Parameter | Description                                 | Default |
| ------------------------------- | ------------------------------------------- | ------- |
| Max issuance duration           | Maximum duration of the issuance in seconds | 90 days |
| Min issuance duration           | Minimum duration of the issuance in seconds | 2 days  |

### Multi-Swap Maker Parameters

The following parameters allow makers to customize the multi-swap issuance. They are defined as the maker data in creating new multi-swap issuance.

| Multi-Swap Issuance Parameter | Description                                     |
| ----------------------------- | ----------------------------------------------- |
| Issuance duration             | The duration of issuance in seconds             |
| Input token address           |                                                 |
| Input amount                  |                                                 |
| Output token address          |                                                 |
| Output amount                 |                                                 |
| Max engagement output amount  | Maximum output amount for individual engagement |
| Min engagement output amount  | Minimum output amount for individual engagement |

### Multi-Swap Taker Parameters

The following parameter allows takers to customize the multi-swap engagement. They are defined as taker data in engaging multi-swap issuance.

| Multi-Swap Engagement Parameter | Description                                   |
| ------------------------------- | --------------------------------------------- |
| Engagement output amount        | The amount of output token in this engagement |

## Multi-Swap Custom Property

### Multi-Swap Issuance Custom Property

The multi-swap issuance defines a set of custom property. It includes all the maker parameters shown in the previous section with the addition of one field:

* Remaining input token: The amount of input token remaining in the Issuance Escrow

### Multi-Swap Engagement Custom Property

The multi-swap engagement defines the following custom property:

* Output amount: The amount of output token deposited in this engagement.
