> For the complete documentation index, see [llms.txt](https://docs.swivel.finance/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.swivel.finance/swivel-v2.0.0/developers/contract/contracts/swivel.md).

# Swivel

## constructor

```solidity
  function constructor(
    address m
  ) public
```

### Parameters:

| Name | Type    | Description                           |
| ---- | ------- | ------------------------------------- |
| `m`  | address | deployed MarketPlace contract address |

## initiate

```solidity
  function initiate(
    struct Hash.Order[] o,
    uint256[] a,
    struct Sig.Components[] c
  ) external returns (bool)
```

Allows a user to initiate a position

### Parameters:

| Name | Type                     | Description                                                         |
| ---- | ------------------------ | ------------------------------------------------------------------- |
| `o`  | struct Hash.Order\[]     | Array of offline Swivel.Orders                                      |
| `a`  | uint256\[]               | Array of order volume (principal) amounts relative to passed orders |
| `c`  | struct Sig.Components\[] | Array of Components from valid ECDSA signatures                     |

## initiateVaultFillingZcTokenInitiate

```solidity
  function initiateVaultFillingZcTokenInitiate(
    struct Hash.Order o,
    uint256 a,
    struct Sig.Components c
  ) internal
```

Allows a user to initiate a Vault by filling an offline zcToken initiate order

This method should pass (underlying, maturity, maker, sender, principalFilled) to MarketPlace.custodialInitiate

### Parameters:

| Name | Type                  | Description                                                     |
| ---- | --------------------- | --------------------------------------------------------------- |
| `o`  | struct Hash.Order     | Order being filled                                              |
| `a`  | uint256               | Amount of volume (premium) being filled by the taker's initiate |
| `c`  | struct Sig.Components | Components of a valid ECDSA signature                           |

## initiateZcTokenFillingVaultInitiate

```solidity
  function initiateZcTokenFillingVaultInitiate(
    struct Hash.Order o,
    uint256 a,
    struct Sig.Components c
  ) internal
```

Allows a user to initiate a zcToken by filling an offline vault initiate order

This method should pass (underlying, maturity, sender, maker, a) to MarketPlace.custodialInitiate

### Parameters:

| Name | Type                  | Description                                                       |
| ---- | --------------------- | ----------------------------------------------------------------- |
| `o`  | struct Hash.Order     | Order being filled                                                |
| `a`  | uint256               | Amount of volume (principal) being filled by the taker's initiate |
| `c`  | struct Sig.Components | Components of a valid ECDSA signature                             |

## initiateZcTokenFillingZcTokenExit

```solidity
  function initiateZcTokenFillingZcTokenExit(
    struct Hash.Order o,
    uint256 a,
    struct Sig.Components c
  ) internal
```

Allows a user to initiate zcToken? by filling an offline zcToken exit order

This method should pass (underlying, maturity, maker, sender, a) to MarketPlace.p2pZcTokenExchange

### Parameters:

| Name | Type                  | Description                                                       |
| ---- | --------------------- | ----------------------------------------------------------------- |
| `o`  | struct Hash.Order     | Order being filled                                                |
| `a`  | uint256               | Amount of volume (principal) being filled by the taker's initiate |
| `c`  | struct Sig.Components | Components of a valid ECDSA signature                             |

## initiateVaultFillingVaultExit

```solidity
  function initiateVaultFillingVaultExit(
    struct Hash.Order o,
    uint256 a,
    struct Sig.Components c
  ) internal
```

Allows a user to initiate a Vault by filling an offline vault exit order

This method should pass (underlying, maturity, maker, sender, principalFilled) to MarketPlace.p2pVaultExchange

### Parameters:

| Name | Type                  | Description                                                  |
| ---- | --------------------- | ------------------------------------------------------------ |
| `o`  | struct Hash.Order     | Order being filled                                           |
| `a`  | uint256               | Amount of volume (interest) being filled by the taker's exit |
| `c`  | struct Sig.Components | Components of a valid ECDSA signature                        |

## exit

```solidity
  function exit(
    struct Hash.Order[] o,
    uint256[] a,
    struct Sig.Components[] c
  ) external returns (bool)
```

Allows a user to exit (sell) a currently held position to the marketplace.

### Parameters:

| Name | Type                     | Description                                                         |
| ---- | ------------------------ | ------------------------------------------------------------------- |
| `o`  | struct Hash.Order\[]     | Array of offline Swivel.Orders                                      |
| `a`  | uint256\[]               | Array of order volume (principal) amounts relative to passed orders |
| `c`  | struct Sig.Components\[] | Components of a valid ECDSA signature                               |

## exitZcTokenFillingZcTokenInitiate

```solidity
  function exitZcTokenFillingZcTokenInitiate(
    struct Hash.Order o,
    uint256 a,
    struct Sig.Components c
  ) internal
```

Allows a user to exit their zcTokens by filling an offline zcToken initiate order

This method should pass (underlying, maturity, sender, maker, principalFilled) to MarketPlace.p2pZcTokenExchange

### Parameters:

| Name | Type                  | Description                                                  |
| ---- | --------------------- | ------------------------------------------------------------ |
| `o`  | struct Hash.Order     | Order being filled                                           |
| `a`  | uint256               | Amount of volume (interest) being filled by the taker's exit |
| `c`  | struct Sig.Components | Components of a valid ECDSA signature                        |

## exitVaultFillingVaultInitiate

```solidity
  function exitVaultFillingVaultInitiate(
    struct Hash.Order o,
    uint256 a,
    struct Sig.Components c
  ) internal
```

Allows a user to exit their Vault by filling an offline vault initiate order

This method should pass (underlying, maturity, sender, maker, a) to MarketPlace.p2pVaultExchange

### Parameters:

| Name | Type                  | Description                                                   |
| ---- | --------------------- | ------------------------------------------------------------- |
| `o`  | struct Hash.Order     | Order being filled                                            |
| `a`  | uint256               | Amount of volume (principal) being filled by the taker's exit |
| `c`  | struct Sig.Components | Components of a valid ECDSA signature                         |

## exitVaultFillingZcTokenExit

```solidity
  function exitVaultFillingZcTokenExit(
    struct Hash.Order o,
    uint256 a,
    struct Sig.Components c
  ) internal
```

Allows a user to exit their Vault filling an offline zcToken exit order

This method should pass (underlying, maturity, maker, sender, a) to MarketPlace.exitFillingExit

### Parameters:

| Name | Type                  | Description                                                   |
| ---- | --------------------- | ------------------------------------------------------------- |
| `o`  | struct Hash.Order     | Order being filled                                            |
| `a`  | uint256               | Amount of volume (principal) being filled by the taker's exit |
| `c`  | struct Sig.Components | Components of a valid ECDSA signature                         |

## exitZcTokenFillingVaultExit

```solidity
  function exitZcTokenFillingVaultExit(
    struct Hash.Order o,
    uint256 a,
    struct Sig.Components c
  ) internal
```

Allows a user to exit their zcTokens by filling an offline vault exit order

This method should pass (underlying, maturity, sender, maker, principalFilled) to MarketPlace.exitFillingExit

### Parameters:

| Name | Type                  | Description                                                  |
| ---- | --------------------- | ------------------------------------------------------------ |
| `o`  | struct Hash.Order     | Order being filled                                           |
| `a`  | uint256               | Amount of volume (interest) being filled by the taker's exit |
| `c`  | struct Sig.Components | Components of a valid ECDSA signature                        |

## cancel

```solidity
  function cancel(
    struct Hash.Order o,
    struct Sig.Components c
  ) external returns (bool)
```

Allows a user to cancel an order, preventing it from being filled in the future

### Parameters:

| Name | Type                  | Description                           |
| ---- | --------------------- | ------------------------------------- |
| `o`  | struct Hash.Order     | Order being cancelled                 |
| `c`  | struct Sig.Components | Components of a valid ECDSA signature |

## transferAdmin

```solidity
  function transferAdmin(
    address a
  ) external returns (bool)
```

### Parameters:

| Name | Type    | Description            |
| ---- | ------- | ---------------------- |
| `a`  | address | Address of a new admin |

## scheduleWithdrawal

```solidity
  function scheduleWithdrawal(
    address e
  ) external returns (bool)
```

Allows the admin to schedule the withdrawal of tokens

### Parameters:

| Name | Type    | Description                          |
| ---- | ------- | ------------------------------------ |
| `e`  | address | Address of (erc20) token to withdraw |

## blockWithdrawal

```solidity
  function blockWithdrawal(
    address e
  ) external returns (bool)
```

Emergency function to block unplanned withdrawals

### Parameters:

| Name | Type    | Description                          |
| ---- | ------- | ------------------------------------ |
| `e`  | address | Address of token withdrawal to block |

## withdraw

```solidity
  function withdraw(
    address e
  ) external returns (bool)
```

Allows the admin to withdraw the given token, provided the holding period has been observed

### Parameters:

| Name | Type    | Description                  |
| ---- | ------- | ---------------------------- |
| `e`  | address | Address of token to withdraw |

## setFee

```solidity
  function setFee(
    uint16 i,
    uint16 d
  ) external returns (bool)
```

Allows the admin to set a new fee denominator

### Parameters:

| Name | Type   | Description                          |
| ---- | ------ | ------------------------------------ |
| `i`  | uint16 | The index of the new fee denominator |
| `d`  | uint16 | The new fee denominator              |

## approveUnderlying

```solidity
  function approveUnderlying(
    address[] u,
    address[] c
  ) external returns (bool)
```

Allows the admin to bulk approve given compound addresses at the underlying token, saving marginal approvals

### Parameters:

| Name | Type       | Description                         |
| ---- | ---------- | ----------------------------------- |
| `u`  | address\[] | array of underlying token addresses |
| `c`  | address\[] | array of compound token addresses   |

## splitUnderlying

```solidity
  function splitUnderlying(
    address u,
    uint256 m,
    uint256 a
  ) external returns (bool)
```

Allows users to deposit underlying and in the process split it into/mint zcTokens and vault notional. Calls mPlace.mintZcTokenAddingNotional

### Parameters:

| Name | Type    | Description                                         |
| ---- | ------- | --------------------------------------------------- |
| `u`  | address | Underlying token address associated with the market |
| `m`  | uint256 | Maturity timestamp of the market                    |
| `a`  | uint256 | Amount of underlying being deposited                |

## combineTokens

```solidity
  function combineTokens(
    address u,
    uint256 m,
    uint256 a
  ) external returns (bool)
```

Allows users deposit/burn 1-1 amounts of both zcTokens and vault notional, in the process "combining" the two, and redeeming underlying. Calls mPlace.burnZcTokenRemovingNotional.

### Parameters:

| Name | Type    | Description                                         |
| ---- | ------- | --------------------------------------------------- |
| `u`  | address | Underlying token address associated with the market |
| `m`  | uint256 | Maturity timestamp of the market                    |
| `a`  | uint256 | Amount of zcTokens being redeemed                   |

## redeemZcToken

```solidity
  function redeemZcToken(
    address u,
    uint256 m,
    uint256 a
  ) external returns (bool)
```

Allows zcToken holders to redeem their tokens for underlying tokens after maturity has been reached (via MarketPlace).

### Parameters:

| Name | Type    | Description                                         |
| ---- | ------- | --------------------------------------------------- |
| `u`  | address | Underlying token address associated with the market |
| `m`  | uint256 | Maturity timestamp of the market                    |
| `a`  | uint256 | Amount of zcTokens being redeemed                   |

## redeemVaultInterest

```solidity
  function redeemVaultInterest(
    address u,
    uint256 m
  ) external returns (bool)
```

Allows Vault owners to redeem any currently accrued interest (via MarketPlace)

### Parameters:

| Name | Type    | Description                                         |
| ---- | ------- | --------------------------------------------------- |
| `u`  | address | Underlying token address associated with the market |
| `m`  | uint256 | Maturity timestamp of the market                    |

## validOrderHash

```solidity
  function validOrderHash(
    struct Hash.Order o,
    struct Sig.Components c
  ) internal returns (bytes32)
```

Varifies the validity of an order and it's signature.

### Parameters:

| Name | Type                  | Description                           |
| ---- | --------------------- | ------------------------------------- |
| `o`  | struct Hash.Order     | An offline Swivel.Order               |
| `c`  | struct Sig.Components | Components of a valid ECDSA signature |

### Return Values:

| Name                          | Type              | Description   |
| ----------------------------- | ----------------- | ------------- |
| `the`                         | struct Hash.Order | hashed order. |
| ## Events                     |                   |               |
| ### Cancel                    |                   |               |
| \`\`\`solidity                |                   |               |
| event Cancel(                 |                   |               |
| )                             |                   |               |
| \`\`\`                        |                   |               |
| Emitted on order cancellation |                   |               |

## Initiate

```solidity
  event Initiate(
  )
```

Emitted on any initiate\*

filled is 'principalFilled' when (vault:false, exit:false) && (vault:true, exit:true) filled is 'premiumFilled' when (vault:true, exit:false) && (vault:false, exit:true)

## Exit

```solidity
  event Exit(
  )
```

Emitted on any exit\*

filled is 'principalFilled' when (vault:false, exit:false) && (vault:true, exit:true) filled is 'premiumFilled' when (vault:true, exit:false) && (vault:false, exit:true)

## ScheduleWithdrawal

```solidity
  event ScheduleWithdrawal(
  )
```

Emitted on token withdrawal scheduling

## BlockWithdrawal

```solidity
  event BlockWithdrawal(
  )
```

Emitted on token withdrawal blocking

## SetFee

```solidity
  event SetFee(
  )
```

Emitted on a change to the feenominators array


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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.swivel.finance/swivel-v2.0.0/developers/contract/contracts/swivel.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.
