# sSPELL

sSPELL is the original staking contract for SPELL holders. It is a version of the SushiBar by ChefNomi.\
It works with a share system, users mint sSPELL by depositing SPELL into the contract via the mint(amount) function, and they receive an amount of sSPELL at the current SPELL per sSPELL ratio.

When protocol fees are accrued and SPELL is bought back and sent to the sSPELL contract, SPELL is deposited but no sSPELL is minted: the SPELL per sSPELL ratio increases.

The burn function is the exact inverse of mint, it burns your sSPELL and gives you back SPELL at the current SPELL:sSPELL ratio.

To avoid people gaming the system, upon staking, the sSPELL is subject to a 24h lockup, where it can be moved, burned, used as collateral etc…

Appart from this, sSPELL is a regular ERC20.

### `mint | nonpayable`[​](https://smart-docs.vercel.app/contract#mint) <a href="#mint" id="mint"></a>

```solidity
function mint(uint256 amount) public returns (bool) {
```

**Parameters**

| Name       | Type      | Description               |
| ---------- | --------- | ------------------------- |
| **amount** | `uint256` | Amount of SPELL to stake. |

**Return values**

| Name  | Type   | Description                                  |
| ----- | ------ | -------------------------------------------- |
| **/** | `bool` | Returns True if the operation is successful. |

### `burn | nonpayable`[​](https://smart-docs.vercel.app/contract#burn) <a href="#burn" id="burn"></a>

```solidity
function burn(address to, uint256 shares) public returns (bool) {
```

**Parameters**

| Name       | Type      |                               |
| ---------- | --------- | ----------------------------- |
| **to**     | `address` | Address to send the SPELL to. |
| **shares** | `uint256` | Amount of sSPELL to burn.     |

**Return values**

| Name  | Type   | Description                                  |
| ----- | ------ | -------------------------------------------- |
| **/** | `bool` | Returns True if the operation is successful. |

### `burnFrom | nonpayable`[​](https://smart-docs.vercel.app/contract#burnFrom) <a href="#burnfrom" id="burnfrom"></a>

```solidity
function burnFrom(
    address from,
    address to,
    uint256 shares
) public returns (bool) {
```

Same as Burn, but allow another address that has been approved by you using the standard ERC20 approve() to burn on your behalf.

**Parameters**

| Name       | Type      | Description                      |
| ---------- | --------- | -------------------------------- |
| **from**   | `address` | Address to burn the sSPELL from. |
| **to**     | `address` | Address to send the SPELL to.    |
| **shares** | `uint256` | Amount of sSPELL to burn.        |

**Return values**

| Name  | Type   |                                              |
| ----- | ------ | -------------------------------------------- |
| **/** | `bool` | Returns True if the operation is successful. |


---

# 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://dev.abracadabra.money/token-related/sspell.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.
