KardiaChain JS SDK

KardiaChain JS SDK is a wrapper built on top of KardiaChain RCF protocol that helps developers to easily interact with KardiaChain's blockchain network.
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

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.

Installation

KardiaChain JS SDK can be installed from npm
npm i kardia-js-sdk

Usage

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

Generating a wallet

import {KardiaAccount} from 'kardia-js-sdk';
const wallet = KardiaAccount.generateWallet();
// Expected result:
// {
// address: "YOUR_WALLET_ADDRESS",
// privateKey: "YOUR_ADDRESS_PRIVATE_KEY",
// balace: 0
// }

Get KAI balance of a wallet

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');

Access wallet by private key

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
// }

Access wallet by seed phrase

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

Event Handler

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

Get KRC20 balance of a wallet

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;

Send a KRC20 transaction

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

Creating a transaction

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)
);

Get transaction detail

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');

Get transaction receipt

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');