Acki Nacki SDK is a customised for Acki Nacki TVM SDK that consists of
- Client Libraries
- CLI
- Local Blockchain
Core TVM-SDK client library is written in Rust, with bindings for other programming languages.
JS/TS guides are present here as reference guides meaning bindings in other languages have the same api calls.
Get quick help in our telegram channel:
Repository: https://github.com/tvmlabs/tvm-sdk
What is Core Client Library?
Core Client Library is written in Rust that can be dynamically linked. It provides all heavy-computation components and functions, such as TVM Virtual Machine, Transaction Executor, ABI-related functions, BOC manipulation functions, crypto functions.
The decision to create the Rust library was made after a period of time using pure JavaScript to implement these use cases.
We ended up with very slow work of pure JavaScript and decided to move all this to Rust library and link it to Javascript as a compiled binary including a wasm module for browser applications.
Also this approach provided an opportunity to easily create bindings for any programming language and platform, thus, to make it possible to develop distributed applications (DApps) for any possible use-cases, such as: mobile DApps, web DApps, server-side DApps, enterprise DApp, desktop Dapps etc.
Client Library exposes all the functionality through a few of exported functions. All interaction with library is performed using JSON-RPC like protocol via C .h file.
Repository: JavaScript SDK
You need to install core package and the package with binary for your platform. See the documentation.
Platform | Package |
---|---|
core package for all platforms | @tvmsdk/core |
Node.js | @tvmsdk/lib-node |
Web | @tvmsdk/lib-web |
Language | Repository |
---|---|
Java | |
.NET | everscale-actions/everscale-dotnet |
- use library module
json_interface
which provides access to library functions through JSON-RPC interface. This interface exports several extern "C" functions. So you can build a dynamic or static link library and link it to your application as any other external libraries. The JSON Interface is fully "C" compliant. You can find description in section JSON Interface. - write your own binding to chosen language and share it with community.
If you choose using JSON Interface please read this document JSON Interface.
Here you can find directions how to use json_interface
and write your own binding.
With TVM SDK you can implement logic of any complexity on TVM compatible blockchains (Everscale, Gosh, TON, Venom, etc).
- Create and send messages to blockchain
- Process messages reliably (supports retries and message expiration mechanics)
- Supports TVM Solidity and ABI compatible contracts
- Emulate transactions locally
- Run get methods
- Get account state
- Query blockchain data (blocks, transactions, messages)
- Sign data/check signature, calculate hashes (sha256, sha512), encrypt/decrypt data
- Validate addresses
- Work with blockchain native types (bag of cells or BOCs): encode, decode, calculate hash, etc
- Works on top of GraphQL API and compatible with Evernode-SE/DS, Evercloud.
Quick Start (Javascript binding)
JavaScript SDK Types and Methods (API Reference)
Core Types and Methods (API Reference)
We aim to follow semver practises, although before the mainnet launch we may introduce breaking changes in any release: patch and minor. Check the CHANGELOG.md file for breaking changes.
Soft Breaking is API changes that include only new optional fields in the existing structures. This changes are fully backward compatible for JSON Interface.
But in Rust such changes can produce some problems with an old client code.
Look at the example below:
- There is an API v1.0 function
foo
and the corresponding params structure:
#[derive(Default)]
struct ParamsOfFoo {
pub foo: String,
}
pub fn foo(params: ParamsOfFoo)
- Application uses this function in this way:
foo(ParamsOfFoo {
foo: "foo".into(),
});
- API v.1.1 introduces new field in
ParamsOfFoo
:
#[derive(Default)]
struct ParamsOfFoo {
pub foo: String,
pub bar: Option<String>,
}
From the perspective of JSON-interface it isn't breaking change because the new parameter is optional. But code snippet (2) will produce Rust compilation error.
- To avoid such problems we recommend to use default implementation inside structure initialisation:
foo(ParamsOfFoo {
foo: "foo".into(),
..Default::default(),
});
For all Ton Client API structures Default
trait is implemented.
The best way to build client libraries is to use build scripts from this repo.
Note: The scripts are written in JavaScript so you have to install Node.js (v.10 or newer) to run them. Also make sure you have the latest version of Rust installed.
To build a binary for a specific target (or binding), navigate to the relevant folder and run node build.js
.
The resulting binaries are placed to bin
folder in the gz-compressed format.
Note that the build script generates binaries compatible with the platform used to run the script. For example, if you run it on Mac OS, you get binaries targeted at Darwin (macOS) platform.
Note: You need latest version of rust. Upgrade it with rustup update
command. Check version with rustc --version
, it should be above or equal to 1.47.0
.
Rebuild api.json
:
cd toncli
cargo run api -o ../tools
Rebuild docs
:
cd tools
npm i
tsc
node index docs -o ../docs
Rebuild modules.ts
:
cd tools
npm i
tsc
node index binding -l ts -o ../../ever-sdk-js/packages/core/src
To run test suite use standard Rust test command
cargo test
SDK tests need GraphQL endpoint to run on. Such an API is exposed by a Block Keeper which runs in real networks, Local Network or public testnets.
Local Network is used by default with address http://localhost
and port 80. If you launch it on another port you need to specify it explicitly like this: http://localhost:port
. If you need to run tests on a real network use the following environment variables to override the default parameters
TON_USE_SE: true/false - flag defining if tests run against local network (true) or a real network (false)
TON_NETWORK_ADDRESS - Block Keeper addresses separated by comma.
TON_GIVER_SECRET - Sponsor Wallet secret key. If not defined, default Local Network giver keys are used
TON_GIVER_ADDRESS - Address of the Sponsor Wallet to use for prepaying accounts before deploying test contracts. If not defined, the address is calculated using `GiverV2.tvc` and configured public key
Instead of building library yourself, you can download the latest precompiled binaries from TVM SDK Binaries Store.
Platform | Major | Download links |
---|---|---|
Win32 | 0 | ton_client.lib , ton_client.dll |
1 | ton_client.lib , ton_client.dll |
|
macOS | 0 | libton_client.dylib |
1 | (x86_64)libton_client.dylib |
|
1 | (aarch64)libton_client.dylib |
|
Linux | 0 | libton_client.so |
1 | libton_client.so |
If you want an older version of library (e.g. 0.25.0
for macOS), you need to choose a link to your platform from the list above and replace 0
with a version: https://binaries.tonlabs.io/tonclient_0_25_0_darwin.gz
Downloaded archive is gzipped file