# SDKs

**Installation**

```
npm install @flexsmart/flexsmart-sdk
```

#### Generate Contracts

Running the following command would generate the classes for the contracts currently available at FlexSmart.

```
npx flexsmart generate
```

You could generate the contract for your own ABIs by running the following command.

```
npx flexsmart generate /path/to/the/contractABI.json
```

#### Deploy Contracts

You can deploy contracts via the SDK and manage them later on the [FlexSmart](https://hub.flexsmart.io/) platform.

<mark style="color:blue;">**Deploy an ERC20 token:**</mark>

```javascript
import { FlexsmartSDK } from '@flexsmart/flexsmart-sdk';
...
const sdk = new FlexsmartSDK(web3Signer);
sdk.setAPIKey('YOUR-API-KEY');
const result = await sdk.deployERC20({
  name: 'SDK Coin',
  symbol: 'SDKCOIN',
  initialSupply: 10000,
  isFullFeature: true,
  decimals: 18,
});
...
```

<mark style="color:orange;">**Deploy an BEP20 token:**</mark>

```javascript
import { FlexsmartSDK } from '@flexsmart/flexsmart-sdk';
...
const sdk = new FlexsmartSDK(web3Signer);
sdk.setAPIKey('YOUR-API-KEY');
const result = await sdk.deployBEP20({
  name: 'SDK Coin',
  symbol: 'SDKCOIN',
  initialSupply: 10000,
  isFullFeature: true,
  decimals: 18,
});
...
```

<mark style="color:green;">**Deploy an ERC777 token:**</mark>

```javascript
import { FlexsmartSDK } from '@flexsmart/flexsmart-sdk';
...
const sdk = new FlexsmartSDK(web3Signer);
sdk.setAPIKey('YOUR-API-KEY');
const result = await sdk.deployERC777({
  name: 'SDK Coin',
  symbol: 'SDKCOIN',
  initialSupply: 400,
  decimals: 18,
});
...
```

<mark style="color:red;">**Deploy an Escrow contract:**</mark>

```javascript
import { FlexsmartSDK, EscrowToken } from '@flexsmart/flexsmart-sdk';
...
const sdk = new FlexsmartSDK(web3Signer);
sdk.setAPIKey('YOUR-API-KEY');
const result = await sdk.deployEscrow({
  arbiterAddress: '0x1234567890123456789012345678901234567890',
  arbiterEmail: 'arbiter@flexsmart.io',
  arbiterPercentage: 5,
  buyerAddress: '0x1234567890123456789012345678901234567890',
  buyerEmail: 'buyer@flexsmart.io',
  sellerAddress: '0x1234567890123456789012345678901234567890',
  sellerEmail: 'seller@flexsmart.io',
  autoReleaseWaitDays: 14,
  contractAmount: 1500,
  description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit',
  currencyToken: EscrowToken.USDT,
});
...
```

#### Manage Contracts

You could manage your deployed contracts quickly and easily with the *FlexSmart SDK.*

<mark style="color:blue;">**Manage an ERC20 Token**</mark>

```javascript
import { Erc20TokenAll } from '@flexsmart/flexsmart-sdk/dist/.contracts';
...
const sdk = new FlexsmartSDK(web3Signer);
const erc20Contract = await sdk.getContract(
  '0x1234567890123456789012345678901234567890', // Contract address
  Erc20TokenAll,
);
await erc20Contract.decimals();
await erc20Contract..mint('0x1234567890123456789012345678901234567890', 500);
...
```

<mark style="color:orange;">**Manage a BEP20 Token**</mark>

```javascript
import { Bep20TokenAll } from '@flexsmart/flexsmart-sdk/dist/.contracts';
...
const sdk = new FlexsmartSDK(web3Signer);
const bep20Contract = await sdk.getContract(
  '0x1234567890123456789012345678901234567890', // Contract address
  Bep20TokenAll,
);
await bep20Contract.decimals();
await bep20Contract.mint('0x1234567890123456789012345678901234567890', 500);
...
```

<mark style="color:green;">**Manage an ERC777 Token**</mark>

```javascript
import { Erc777TokenBasic } from '@flexsmart/flexsmart-sdk/dist/.contracts';
...
const sdk = new FlexsmartSDK(web3Signer);
const erc777Contract = await sdk.getContract(
  '0x1234567890123456789012345678901234567890', // Contract address
  Erc777TokenBasic,
);
await erc777Contract.decimals();
await erc777Contract.transfer('0x1234567890123456789012345678901234567890', 500);
...
```

<mark style="color:red;">**Manage an Escrow contract**</mark>

```javascript
import { TokenEscrow } from '@flexsmart/flexsmart-sdk/dist/.contracts';
...
const sdk = new FlexsmartSDK(web3Signer);
const escrowContract = await sdk.getContract(
  '0x1234567890123456789012345678901234567890', // Contract address
  TokenEscrow,
);
await escrowContract.buyerAddress();
await escrowContract.resolveDispute(50);
...
```
