# 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);
...
```


---

# 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.flexsmart.io/flexsmart/technical/developers/sdks.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.
