# \[Deprecated] KardiaChain JS SDK

This is just a quick introduction to Kardia JS SDK. For more detailed documentation, please refer to <https://docs.kardiachain.io/js-sdk/>

## **Getting Started**

&#x20;KardiaChain JS SDK contains 5 modules:

* `Account module` is for managing KardiaChain wallet
* `KAI module` is for interacting directly with KardiaChain's blockchain network
* `Contract module` is for interacting with KardiaChain's smart contract.
* `KRC20 module` is for interacting with KRC20 tokens
* `Transaction module` is for creating KardiaChain's transaction.

&#x20;

### &#x20;  **Installation**

&#x20;   KardiaChain JS SDK can be installed from npm

```
npm i kardia-js-sdk
```

### &#x20;   **Usage**

```java
import KardiaClient from 'kardia-js-sdk';
const RPC_ENDPOINT = 'YOUR_RPC_ENDPOINT';

const kardiaClient = new KardiaClient({ endpoint: RPC_ENDPOINT });

// Account module
const accountModule = kardiaClient.account;

// KAI module
const kaiModule = kardiaClient.kaiChain;

// Smart contract module
const smcModule = kardiaClient.contract;

// KRC20 module
const krcModule = kardiaClient.krc20;

// Transaction module
const transactionModule = kardiaClient.transaction;
```

## **Account Module**

### &#x20;   Generating a wallet

```java
import {KardiaAccount} from 'kardia-js-sdk';

const wallet = KardiaAccount.generateWallet();

// Expected result:
// {
//    address: "YOUR_WALLET_ADDRESS",
//    privateKey: "YOUR_ADDRESS_PRIVATE_KEY",
//    balace: 0
// }
```

### &#x20;   Get KAI balance of a wallet

```java
import KardiaClient from 'kardia-js-sdk';
const RPC_ENDPOINT = 'YOUR_RPC_ENDPOINT';

const kardiaClient = new KardiaClient({ endpoint: RPC_ENDPOINT });

// Account module
const accountModule = kardiaClient.account;

// Get balance
const balance = await accountModule.getBalance('YOUR_WALLET_ADDRESS');
```

### &#x20;   Access wallet by private key

```java
import {KardiaAccount} from 'kardia-js-sdk';

const wallet = KardiaAccount.getWalletFromPK('YOUR_ADDRESS_PRIVATE_KEY');

// Expected result:
// {
//    address: "YOUR_WALLET_ADDRESS",
//    privateKey: "YOUR_ADDRESS_PRIVATE_KEY",
//    balace: 123 // your wallet balance
// }
```

&#x20; &#x20;

### &#x20;    Access wallet by seed phrase

```java
import {KardiaAccount} from 'kardia-js-sdk';

const wallet = KardiaAccount.getWalletFromMnemonic('YOUR_MNEMONIC_PHRASE');

// Expected result:
// {
//    address: "YOUR_WALLET_ADDRESS",
//    privateKey: "YOUR_ADDRESS_PRIVATE_KEY",
//    balace: 123 // your wallet balance
// }
```

## KAI Module

### &#x20;   Event Handler

```java
const topic = keccak256('Transfer(address,address,uint256)');

    const filterId = await kardiaClient.kaiChain.newFilter({
      fromBlock: 200000,
      topics: [topic]
    })

    // To get all logs
    const allLogs = await kardiaClient.kaiChain.getFilterLogs(filterId);

    // To get logs since last poll
    const logs = await kardiaClient.kaiChain.getFilterChanges(filterId);
```

## KRC20 Module

### &#x20;   Get KRC20 balance of a wallet

```java
import KardiaClient from 'kardia-js-sdk';
const RPC_ENDPOINT = 'YOUR_RPC_ENDPOINT';

const kardiaClient = new KardiaClient({ endpoint: RPC_ENDPOINT });

const krc20Instance = kardiaClient.krc20;

// Fetch KRC20 token's data from smart contract
await krc20Instance.getFromAddress('KRC20_TOKEN_ADDRESS');

const balance = await krc20Instance.balanceOf('YOUR_WALLET_ADDRESS');
// `balance` will be your wallet's balance, but with token's `decimals` padding.
// To get real ballance, use the following code

const decimals = krc20Instance.getDecimals();
const parsedBalance = balance / 10 ** decimals;
```

### &#x20;   Send a KRC20 transaction

```java
import KardiaClient from 'kardia-js-sdk';
const RPC_ENDPOINT = 'YOUR_RPC_ENDPOINT';

const kardiaClient = new KardiaClient({ endpoint: RPC_ENDPOINT });

const krc20Instance = kardiaClient.krc20;

const txResult = await krc20Instance.transfer(
    'YOUR_WALLET_PRIVATE_KEY',
    'RECEIVER_ADDRESS',
    1 // Amount of tokens to send
);
```

## Transaction Module

### &#x20;   Creating a transaction

```java
import KardiaClient from 'kardia-js-sdk';
const RPC_ENDPOINT = 'YOUR_RPC_ENDPOINT';

const kardiaClient = new KardiaClient({ endpoint: RPC_ENDPOINT });

// Get your wallet's latest nonce
const nonce = await kardiaClient.account.getNonce('YOUR_WALLET_ADDRESS');
const txData = {
  to: 'RECEIVER_WALLET_ADDRESS',
  nonce,
  gas: 3000000,      // Gas limit
  gasPrice: 1*10**9,     // Minimum Gas Price = 1 OXY
  value: 231095,    // Amount of KAI to send
};

// Send transaction to network and get transaction hash immediately
const txHash = await kardiaClient.transaction.sendTransaction(
  txData,
  'YOUR_WALLET_PRIVATEKEY'
);

// txHash should be something like '0x0a2db5831c314363a97a79f416061a9daec5230f8b6306cd1c431b467c42f820'

// If you want to wait to the transaction to complete, follow the below code

const txResult = await kardiaClient.transaction.sendTransaction(
  txData,
  'YOUR_WALLET_PRIVATEKEY',
  true,    // Flag to indicate if you want to wait for the transaction to complete
  50000    // Time (in ms) you want to wait for transaction to complete, default will be 300000 (300s)
);
```

###

### &#x20;   Get transaction detail

```java
import KardiaClient from 'kardia-js-sdk';
const RPC_ENDPOINT = 'YOUR_RPC_ENDPOINT';

const kardiaClient = new KardiaClient({ endpoint: RPC_ENDPOINT });

const txDetail = await kardiaClient.transaction.getTransaction('TRANSACTION_HASH');
```

###

### &#x20;   Get transaction receipt

```java
import KardiaClient from 'kardia-js-sdk';
const RPC_ENDPOINT = 'YOUR_RPC_ENDPOINT';

const kardiaClient = new KardiaClient({ endpoint: RPC_ENDPOINT });

const txReceipt = await kardiaClient.transaction.getTransactionReceipt('TRANSACTION_HASH');
```
