# add\_new\_farm

An entrypoint that adds a new farm with the specified parameters. Also setups share token default metadata. Required amount of reward token will be transferred from an admin to the contract (allowance is required).

### Call parameters

```pascaligo
type fa12_type          is address

type fa2_type           is [@layout:comb] record [
  token                   : address;
  id                      : token_id_type;
]

type token_type         is
  FA12                    of fa12_type
| FA2                     of fa2_type

type fees_type          is [@layout:comb] record [
  harvest_fee             : nat;
  withdrawal_fee          : nat;
]

type stake_params_type  is [@layout:comb] record [
  staked_token            : token_type;
  is_v1_lp                : bool;
]

type add_new_farm_type  is [@layout:comb] record [
  fees                    : fees_type;
  stake_params            : stake_params_type;
  token_info              : map(string, bytes);
  reward_token            : token_type;
  paused                  : bool;
  timelock                : nat;
  start_time              : timestamp;
  end_time                : timestamp;
  reward_per_second       : nat;
]
```

#### fees\_type

<table><thead><tr><th width="185.84381285171565">Field</th><th width="150">Type</th><th width="199.77716643741405">Hint</th><th>Description</th></tr></thead><tbody><tr><td>harvest_fee</td><td>nat</td><td>Float value multiplied by 1e+16</td><td>Fee that applies in time of rewards claiming</td></tr><tr><td>withdrawal_fee</td><td>nat</td><td>Float value multiplied by 1e+16</td><td>Fee that applies in time of withdrawing (unstaking) tokens only in farms with timelock</td></tr></tbody></table>

#### stake\_params\_type

<table><thead><tr><th width="224.57173634858546">Field</th><th width="182.41614906832302">Type</th><th>Description</th></tr></thead><tbody><tr><td>staked_token</td><td>token_type</td><td>FA1.2/FA2 staked token</td></tr><tr><td>is_v1_lp</td><td>bool</td><td>Flag that indicates: QuipuSwap V1 LP token staked or not</td></tr></tbody></table>

#### add\_new\_farm\_type

| Field               | Type                                      | Description                                        |
| ------------------- | ----------------------------------------- | -------------------------------------------------- |
| fees                | [fees\_type](#fees_type)                  | Fees that applies to the farming                   |
| stake\_params       | [stake\_params\_type](#stake_params_type) | Staking parameters                                 |
| token\_info         | map(string, bytes)                        | Mapping of token's keys to token's info            |
| reward\_token       | token\_type                               | FA1.2/FA2 reward token                             |
| paused              | bool                                      | Flag that indicates: farm is paused or not         |
| timelock            | nat                                       | Timelock in seconds (0 for farms without timelock) |
| start\_time         | timestamp                                 | Farm's start time                                  |
| end\_time           | timestamp                                 | Farm's end time                                    |
| reward\_per\_second | nat                                       | Reward per second                                  |

### Usage

{% tabs %}
{% tab title="🌮 Taquito" %}

```javascript
import { MichelsonMap } from "@taquito/michelson-encoder";

const tFarmAddress = "KT1...";
const lifetime = 10510000; // ~4 months
const params = {
    fees: {
        harvest_fee: 0.05 * 10 ** 16, // 0.05%
        withdrawal_fee: 0.25 * 10 ** 16, // 0.25%
    },
    stake_params: {
        staked_token: {
            fA2: {
                token: "KT1...",
                id: 0,
            },
        },
        is_v1_lp: true, // or false
    },
    token_info: MichelsonMap.fromLiteral({
        name: Buffer.from("wWBTC/TEZ FA2 Staking Share").toString("hex"),
        symbol: Buffer.from("QSHR").toString("hex"),
        decimals: Buffer.from("6").toString("hex"),
    }),
    reward_token: {
      fA12: "KT1...",
    },
    paused: false, // or true
    timelock: 0, // or positive number
    start_time: String(Math.ceil(Date.now() / 1000)),
    end_time: String(Math.floor(Date.now() / 1000) + lifetime + 1),
    reward_per_second: 1169098400000000,
};
const tFarm = await tezos.contract.at(tFarmAddress);
const operation = await tFarm.methodsObject.add_new_farm(params).send();

await operation.confirmation();
```

{% endtab %}
{% endtabs %}

### Errors

* `Not-admin` - `sender` of the transaction is not current administrator.
* `TFarm/wrong-end-time` - end time of a farming is less that or equal to start time.
* `TFarm/wrong-timelock` - timelock is greater than farming's lifetime.


---

# 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.quipuswap.com/smart-contracts/farming/tfarm-contract/entrypoints-overview/admin-entrypoints/add_new_farm.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.
