# addMarket

Creates new token lending market.

### Types

```pascaligo
type assetType          is
| FA12 of address
| FA2  of (address * nat)

type newMetadataParams is map(string, bytes)

type newMarketParams    is [@layout:comb] record [
  interestRateModel     : address;
  asset                 : assetType;
  collateralFactorF     : nat;
  reserveFactorF        : nat;
  maxBorrowRate         : nat;
  token_metadata        : newMetadataParams;
  threshold             : nat;
  liquidReserveRateF    : nat;
]
```

<table><thead><tr><th width="179.33333333333331" align="center">Parameter</th><th align="center">Type</th><th>Description</th></tr></thead><tbody><tr><td align="center">interestRateModel</td><td align="center">address</td><td>interestRate contract instance</td></tr><tr><td align="center">asset</td><td align="center">assetType</td><td>FA12 or FA2 token</td></tr><tr><td align="center">collateralFactorF</td><td align="center">nat</td><td><p>collateral factor </p><p>as float number multiplied by <code>precision</code>= 1000000000000000000n; (1e+18)</p></td></tr><tr><td align="center">reserveFactorF</td><td align="center">nat</td><td><p>reserve factor</p><p>as float number multiplied by <code>precision</code>= 1000000000000000000n; (1e+18)</p></td></tr><tr><td align="center">maxBorrowRate</td><td align="center">nat</td><td></td></tr><tr><td align="center">token_metadata</td><td align="center">map(string, bytes)</td><td>token metadata packed to bytes</td></tr><tr><td align="center">threshold</td><td align="center">nat</td><td></td></tr><tr><td align="center">liquidReserveRateF</td><td align="center">nat</td><td></td></tr></tbody></table>

### Usage

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

```typescript
const fa2TokenId = 3;
const tokenMetadata = MichelsonMap.fromLiteral({
  symbol: Buffer.from("TST").toString("hex"),
  name: Buffer.from("TEST").toString("hex"),
  decimals: Buffer.from("6").toString("hex"),
  icon: Buffer.from("someURL").toString("hex"),
});
const yupana = await tezos.contract.at(yTokenAddress);
const operation = await yupana.methodsObject.addMarket(
      {
      interestRateModel: "KT1...",
      asset: { fa12: "KT1..." } or { fa2: { 0: "KT1...", 1: fa2TokenId } },
      collateralFactorF: 650000000000000000,
      reserveFactorF: 200000000000000000,
      maxBorrowRate: 5000000000000,
      token_metadata: tokenMetadata,
      threshold: 550000000000000000
).send();
await operation.confirmation();
```

{% endtab %}

{% tab title="🐍   Pytezos" %}

```python
PRECISION = pow(10, 18)
config = {
  "collateral_factor": 0.5,
  "reserve_factor": 0.5,
  "threshold": 0.8
}
token = { "fA12": token_address } # or { "fA2": (token_address, token_id) }
yupana = ContractInterface.from_michelson(code) # or client.contract(contract_address)...
call = yupana.addMarket(
                interestRateModel = "KT1...",
                asset = token,
                collateralFactorF = int(config["collateral_factor"] * PRECISION),
                reserveFactorF = int(config["reserve_factor"]  * PRECISION),
                maxBorrowRate = 1_000_000  * PRECISION,
                token_metadata = {"": ""},
                threshold = int(config["threshold"] * PRECISION)
            )
opg = call.inject()
```

{% endtab %}
{% endtabs %}

### Errors

* `yToken/token-has-already-been-added` -this token has been added to the market already.
* `yToken/not-admin` - `sender` is not contract admin.
