Javascript SDK for TVM blockchains (Everscale, TON, Venom, etc)
JavaScript SDK for TVM compatible networks
Client Library built for Everscale, Venom blockchain, TON, Gosh
for Web, Node.js and React Native platforms
Have a question? Get quick help in our channel:
Table of Content
- Prerequisites - Install core package - Install bridge package (depends on target JS platform) - NodeJs - Web - React Native - Preparation to run tests - Run tests on node js - Run tests on web browser - Run tests on react native platform - To control where your tests will run use this environmentsUseful links
- AppKit - JS package built on top of @eversdk/core package which purpose is to simplify writing applications on EverScale. It helps to implement most common use-cases with less coding.
- SDK guides - get a deeper understanding by diving into our guides where you can find extensive explanations of each step of DApp development on EverScale.
- SDK Samples - a good place to get to practice with SDK examples asap:)
Library distribution
This SDK is distributed via npm packages:- @eversdk/core – common binding independent from JavaScript platform you use.
- @eversdk/lib-node – bridge to NodeJs including NodeJs binary addon.
- @eversdk/lib-web – bridge to browser including WASM module.
- @eversdk/lib-react-native – bridge to mobile react-native platform including static libraries for iOS and Android.
Installation
Prerequisites
- Node.js 14 LTS
Install core package
script
npm i --save @eversdk/core
Install bridge package (depends on target JS platform)
The bridge package will download precompiled binaries from TON Labs cloud storage. If you want to rebuild binary from sources see build binaries section.
NodeJs
script
npm i --save @eversdk/lib-node
Web
script
npm i --save @eversdk/lib-web
Important! Each time you run npm install the new version of the eversdk.wasm and index.js is downloaded. So you have to always update the eversdk.wasm inside your web package before publishing (starting local web server, creating web bundle etc.). If you use Webpack the best way is to use CopyPlugin.
React Native
script
npm i --save @eversdk/lib-react-native
Setup library
You must initialize the library before the first use. The best place to do it is an initialization code of your application.
You need to attach the chosen binary module to the TonClient class.
NodeJs:
const {TonClient} = require("@eversdk/core"); const {libNode} = require("@eversdk/lib-node");
// Application initialization
TonClient.useBinaryLibrary(libNode)
Web: import {TonClient} from "@eversdk/core"; import {libWeb} from "@eversdk/lib-web";
// Application initialization
TonClient.useBinaryLibrary(libWeb);
By default the library loads wasm module from relative URL /eversdk.wasm.
You can specify alternative URL if you want to place (or rename) wasm module.
import {TonClient} from "@eversdk/core"; import {libWeb, libWebSetup} from "@eversdk/lib-web";
// Setup alternative URL for WASM module. libWebSetup({ binaryURL: "/assets/eversdk130_1.wasm", });
TonClient.useBinaryLibrary(libWeb);
By default, lib web starts a separate worker that will utilize core (wasm).
So main thread never freezes – it is fine for UI. But in some cases (e.g. when worker already exists in application or extension) separate worker is a bad approach.
In this case application can suppress separate worker with:
import {TonClient} from "@eversdk/core";
import {libWeb, libWebSetup} from "@eversdk/lib-web";
// Disable separate worker libWebSetup({ disableSeparateWorker: true, });
TonClient.useBinaryLibrary(libWeb);
React Native (iOS/Android):
import {TonClient} from "@eversdk/core"; import {libReactNative} from "@eversdk/lib-react-native";
// Application initialization
TonClient.useBinaryLibrary(libReactNative);
React Native (Web):
If you use React Native in Web, work the same way as described in Web section (see above).
Use library
All library functions are incorporated into TonClient class. Each client module is represented as a property of the TonClient object.
To start use library you must create an instance of the TonClient class:
const client = new TonClient(); const keys = await client.crypto.generaterandomsign_keys();
You can pass a configuration object in TonClient constructor:
const client = new TonClient({ network: { endpoints: ['net.ton.dev'] } });
In the end, close client to close all the sockets related to it:
client.close();
You can find reference guide to TonClient here: EVER-SDK API Documentation
Build bridge binaries
You can build binaries from sources.
If you install a bridge package from the npmjs you can build it with the following commands (e.g. for nodejs):
script cd node_modules/@eversdk/lib-node/build cargo run
Build binaries
If you checkout this repository you can build binaries for all bridges.
script
cd packages/lib-node/build
cargo run
cd ../../lib-web/build
cargo run
cd ../../../lib-react-native/android/build
cargo run
cd ../../ios/build
cargo run
Also the archives will be created to be published on the TON Labs cloud storage. Archives will be placed into the following folders:
packages/lib-node/publishpackages/lib-web/publishpackages/lib-react-native/ios/publishpackages/lib-react-native/android/publish
Run tests
This suite has test packages:
tests– common test package containing all unit tests for a library.tests-node– tests runner on node js.tests-web– tests runner on web browser.tests-react-native– tests runner on react native platform.
Preparation to run tests
You need to provide EVERCLOUDAUTHPROJECT environemnt variable. This is ProjectId. Take it from one of your project at https://dashboard.evercloud.dev/projects. (without secret / secret should be disabled)
script
cd packages/core
npm i
npx tsc
cd ../tests
npm i
npx tsc
Run tests on node js
script
cd packages/tests-node
npm i
node run
Run tests on web browser
script
cd packages/tests-web
npm i -f webpack
npm i -f webpack-cli
npm i -f
node run
Run tests on react native platform
script
cd packages/tests-react-native
npm i
node run ios
node run android
To control where your tests will run use this environments
script
TONUSESE=true TONNETWORKADDRESS=http://localhost node run
Download precompiled binaries
Instead of building library yourself, you can download the latest precompiled binaries from TON Labs SDK Binaries Store.
Binary | Target | Major | Download links ------------------- | ---------------- | ----- | -------------- Node.js AddOn | Win32 | 1 | eversdk.node | macOS x8664 | 1 | eversdk.node | macOS aarch64 | 1 | eversdk.node | Linux | 1 | eversdk.node React Native Module | Android x8664 | 1 | libeversdk.so | Android i686 | 1 | libeversdk.so | Android armv7 | 1 | libeversdk.so | Android aarch64 | 1 | libeversdk.so | iOS | 1 | libeversdk.a WASM Module | Browser | 1 | eversdk.wasm, index.js
Downloaded archive is gzipped file
Copyright 2018-2020 TON Labs LTD.
