SDK v2 (@klever/sdk)

This is historical documentation for SDK v2, which uses a WebAssembly + PEM file model. It is no longer maintained. For current documentation, see Introduction to Klever Blockchain SDK.


Installation

npm install @klever/sdk

or

yarn add @klever/sdk

Setup

Web App

After installation, the KleverSDK folder will automatically appear inside your public, assets, or static folder (depending on the framework).

To load the KleverSDK WASM file into your DOM, import the loader script in your index.html or app.html:

<!-- React -->
<script src="%PUBLIC_URL%/kleverSDK/kleverSDKLoader.js"></script>

<!-- Vue or Svelte -->
<script src="/kleverSDK/kleverSDKLoader.js"></script>

<!-- SvelteKit -->
<script src="%sveltekit.assets%/kleverSDK/kleverSDKLoader.js"></script>

<!-- Angular -->
<script src="assets/kleverSDK/kleverSDKLoader.js"></script>
{/* NextJS */}
import Script from 'next/script'

<Script src="/kleverSDK/kleverSDKLoader.js" strategy="beforeInteractive" />

Node.js

Node.js 18+ is required.

// CommonJS
require('./kleverSDK/kleverSDKLoader')

Basic Usage

Simple call:

import { sendTransaction, TransactionType } from '@klever/sdk'

sendTransaction(TransactionType.Transfer, {
  sender: 'address',
  privateKey: 'privateKey',
  receiver: 'receiver',
  amount: 100,
})

With an account instance:

import { Account } from '@klever/sdk'

const account = new Account('address', 'privateKey')
await account.sendTransfer({ receiver: 'receiver', amount: 100 })

Transactions

IDType
0Transfer
1Create Asset
2Create Validator
3Validator Config
4Freeze
5Unfreeze
6Delegate
7Undelegate
8Withdraw
9Claim
10Unjail
11Asset Trigger
12Set Account Name
13Proposal
14Vote
15Config ITO Prices
16Set ITO Prices
17Buy
18Sell
19Cancel Market Order
20Create Marketplace
21Config Marketplace
22Update Account Permission

Usage Inside a Context (React)

import { useState, createContext, useContext } from 'react'
import { Account, core } from '@klever/sdk'

interface ISdkContext {
  isLoaded(): Promise<boolean>
  getAccount(): Account | null
  setAccount(account: Account): void
}

const SdkContext = createContext({} as ISdkContext)

const SdkProvider: React.FC = ({ children }) => {
  const [acc, setAcc] = useState<Account | null>(null)

  const values: ISdkContext = {
    isLoaded:   () => core.isSDKLoaded(),
    getAccount: () => acc,
    setAccount: account => setAcc(account),
  }
  return <SdkContext.Provider value={values}>{children}</SdkContext.Provider>
}

const useSdk = () => useContext(SdkContext)

export { SdkContext, SdkProvider, useSdk }

Wrap your App.tsx:

import { SdkProvider } from './MyCustomHook'

<SdkProvider>
  ...
</SdkProvider>

Optional Params

Metadata

const metadata = 'this text will be stored in the blockchain transaction'
await account.sendTransfer(payload, { metadata })

Disable Autobroadcast

const rawTransaction = await account.sendTransfer(transferPayload, { autobroadcast: false })
const broadcastResponse = await broadcast(JSON.stringify(rawTransaction))

Multiple Contracts (PreviousTX)

const transferContract = await account.sendTransfer(transferPayload, { autobroadcast: false })
const multiContractTx  = await account.sendFreeze(freezePayload, { previousTX: transferContract })
// autobroadcasts the multi-contract TX

Sign Message / Verify Signature

import { core } from '@klever/sdk'

const { signature } = await core.signMessage(message, privateKey)
const { valid }     = await core.verifySignature(message, signature, walletAddress)
console.log(valid)

Raw WASM Functions

// Browser
window.kleverWeb.sendTransaction(transactionType, payload, props)

// Node.js
globalThis.kleverWeb.sendTransaction(transactionType, payload, props)

Available raw functions:

getAccount(address)
createAccount()
getAddressFromPrivateKey(privateKey)
generateMnemonic()
parsePemFileData(pemString)
decodePEM(cipheredPem, password)
signMessage(JSON.stringify({ message, privatekey }))
verifySignature(JSON.stringify({ message, signature, publicKey }))
setApiUrl(newApiUrl)
setNodeUrl(newNodeUrl)
sendTransaction(transactionType, payload, props)
signTx(JSON.stringify({ rawTx, privateKey }))
broadcast(JSON.stringify(signedTx))

Raw Broadcast Flow

const rawTx = await globalThis.kleverWeb.sendTransaction(transactionType, JSON.stringify(payload))

const { signature } = await globalThis.kleverWeb.signTx(JSON.stringify({ rawTx, privateKey }))

const signedTx       = { ...rawTx, Signature: signature }
const broadcastResponse = await globalThis.kleverWeb.broadcast(JSON.stringify(signedTx))

sendTransaction Payload

const payload = JSON.stringify({ receiver, amount, asset, sender, nonce })
const rawTx   = await globalThis.kleverWeb.sendTransaction(0, payload)

sendTransaction Props

// Metadata
const props = JSON.stringify({ metadata: 'stored in blockchain on broadcast' })
const rawTx = await globalThis.kleverWeb.sendTransaction(0, payload, props)

// Multi-contract chain
const singleContractTx = await globalThis.kleverWeb.sendTransaction(0, payload)
const props2           = JSON.stringify({ previousTX: singleContractTx[0] })
const multiContractTx  = await globalThis.kleverWeb.sendTransaction(2, payload2, props2)

Was this page helpful?