# Liquidity Providers

### LiquidityProviderTool ⇐ `WriteAccessHandler`

Functions to provide liquidity. This class requires a private key and executes smart-contract interactions that require gas-payments.

**Kind**: global class\
**Extends**: `WriteAccessHandler`

* [LiquidityProviderTool](https://d8x.gitbook.io/d8x/node-sdk/modules/broken-reference) ⇐ `WriteAccessHandler`
  * [new LiquidityProviderTool(config, signer)](https://d8x.gitbook.io/d8x/node-sdk/modules/broken-reference)
  * [.addLiquidity(poolSymbolName, amountCC)](https://d8x.gitbook.io/d8x/node-sdk/modules/broken-reference) ⇒
  * [.initiateLiquidityWithdrawal(poolSymbolName, amountPoolShares)](https://d8x.gitbook.io/d8x/node-sdk/modules/broken-reference) ⇒
  * [.executeLiquidityWithdrawal(poolSymbolName)](https://d8x.gitbook.io/d8x/node-sdk/modules/broken-reference) ⇒

#### new LiquidityProviderTool(config, signer)

Constructor

| Param  | Type                 | Description                                                    |
| ------ | -------------------- | -------------------------------------------------------------- |
| config | `NodeSDKConfig`      | Configuration object, see PerpetualDataHandler. readSDKConfig. |
| signer | `string` \| `Signer` | Private key or ethers Signer of the account                    |

**Example**

```js
import { LiquidityProviderTool, PerpetualDataHandler } from '@d8x/perpetuals-sdk';
async function main() {
  console.log(LiquidityProviderTool);
  // load configuration for Polygon zkEVM (testnet)
  const config = PerpetualDataHandler.readSDKConfig("cardona");
  // LiquidityProviderTool (authentication required, PK is an environment variable with a private key)
  const pk: string = <string>process.env.PK;
  let lqudtProviderTool = new LiquidityProviderTool(config, pk);
  // Create a proxy instance to access the blockchain
  await lqudtProviderTool.createProxyInstance();
}
main();
```

#### liquidityProviderTool.addLiquidity(poolSymbolName, amountCC) ⇒

Add liquidity to the PnL participant fund. The address gets pool shares in return.

**Kind**: instance method of [`LiquidityProviderTool`](https://d8x.gitbook.io/d8x/node-sdk/modules/broken-reference)\
**Returns**:

Transaction object

| Param          | Type     | Description                        |
| -------------- | -------- | ---------------------------------- |
| poolSymbolName | `string` | Name of pool symbol (e.g. MATIC)   |
| amountCC       | `number` | Amount in pool-collateral currency |

**Example**

```js
import { LiquidityProviderTool, PerpetualDataHandler } from '@d8x/perpetuals-sdk';
async function main() {
  console.log(LiquidityProviderTool);
  // setup (authentication required, PK is an environment variable with a private key)
  const config = PerpetualDataHandler.readSDKConfig("cardona");
  const pk: string = <string>process.env.PK;
  let lqudtProviderTool = new LiquidityProviderTool(config, pk);
  await lqudtProviderTool.createProxyInstance();
  // add liquidity
  await lqudtProviderTool.setAllowance("MATIC");
  let respAddLiquidity = await lqudtProviderTool.addLiquidity("MATIC", 0.1);
  console.log(respAddLiquidity);
}
main();
```

#### liquidityProviderTool.initiateLiquidityWithdrawal(poolSymbolName, amountPoolShares) ⇒

Initiates a liquidity withdrawal from the pool It triggers a time-delayed unlocking of the given number of pool shares. The amount of pool shares to be unlocked is fixed by this call, but not their value in pool currency.

**Kind**: instance method of [`LiquidityProviderTool`](https://d8x.gitbook.io/d8x/node-sdk/modules/broken-reference)\
**Returns**:

Transaction object.

| Param            | Type     | Description                                                      |
| ---------------- | -------- | ---------------------------------------------------------------- |
| poolSymbolName   | `string` | Name of pool symbol (e.g. MATIC).                                |
| amountPoolShares | `string` | Amount in pool-shares, removes everything if > available amount. |

**Example**

```js
import { LiquidityProviderTool, PerpetualDataHandler } from '@d8x/perpetuals-sdk';
async function main() {
  console.log(LiquidityProviderTool);
  // setup (authentication required, PK is an environment variable with a private key)
  const config = PerpetualDataHandler.readSDKConfig("cardona");
  const pk: string = <string>process.env.PK;
  let lqudtProviderTool = new LiquidityProviderTool(config, pk);
  await lqudtProviderTool.createProxyInstance();
  // initiate withdrawal
  let respRemoveLiquidity = await lqudtProviderTool.initiateLiquidityWithdrawal("MATIC", 0.1);
  console.log(respRemoveLiquidity);
}
main();
```

#### liquidityProviderTool.executeLiquidityWithdrawal(poolSymbolName) ⇒

Withdraws as much liquidity as there is available after a call to initiateLiquidityWithdrawal. The address loses pool shares in return.

**Kind**: instance method of [`LiquidityProviderTool`](https://d8x.gitbook.io/d8x/node-sdk/modules/broken-reference)\
**Returns**:

Transaction object.

| Param          |
| -------------- |
| poolSymbolName |

**Example**

```js
import { LiquidityProviderTool, PerpetualDataHandler } from '@d8x/perpetuals-sdk';
async function main() {
  console.log(LiquidityProviderTool);
  // setup (authentication required, PK is an environment variable with a private key)
  const config = PerpetualDataHandler.readSDKConfig("cardona");
  const pk: string = <string>process.env.PK;
  let lqudtProviderTool = new LiquidityProviderTool(config, pk);
  await lqudtProviderTool.createProxyInstance();
  // remove liquidity
  let respRemoveLiquidity = await lqudtProviderTool.executeLiquidityWithdrawal("MATIC", 0.1);
  console.log(respRemoveLiquidity);
}
main();
```
