{"id":13796393,"url":"https://github.com/everx-labs/ever-sdk","last_synced_at":"2025-04-04T15:07:27.493Z","repository":{"id":36958075,"uuid":"181494245","full_name":"everx-labs/ever-sdk","owner":"everx-labs","description":"Client Libraries in 13 languages for Everscale, TON, Venom and other TVM blockchains","archived":false,"fork":false,"pushed_at":"2024-10-21T22:46:15.000Z","size":20500,"stargazers_count":173,"open_issues_count":4,"forks_count":54,"subscribers_count":18,"default_branch":"master","last_synced_at":"2024-10-22T18:32:28.304Z","etag":null,"topics":["blockchain","client","ever","everscale","freeton","sdk","ton","toncoin","venom","venom-blockchain","venom-developer-program","web3"],"latest_commit_sha":null,"homepage":"https://docs.everos.dev/ever-sdk/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/everx-labs.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-04-15T13:36:56.000Z","updated_at":"2024-10-14T17:30:03.000Z","dependencies_parsed_at":"2024-04-26T15:43:57.287Z","dependency_job_id":"8c1c6ae7-7b49-45fd-99a2-1f75468b8234","html_url":"https://github.com/everx-labs/ever-sdk","commit_stats":null,"previous_names":["everx-labs/ever-sdk"],"tags_count":125,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/everx-labs%2Fever-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/everx-labs%2Fever-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/everx-labs%2Fever-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/everx-labs%2Fever-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/everx-labs","download_url":"https://codeload.github.com/everx-labs/ever-sdk/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247198450,"owners_count":20900080,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blockchain","client","ever","everscale","freeton","sdk","ton","toncoin","venom","venom-blockchain","venom-developer-program","web3"],"created_at":"2024-08-03T23:01:09.759Z","updated_at":"2025-04-04T15:07:27.449Z","avatar_url":"https://github.com/everx-labs.png","language":"Rust","funding_links":[],"categories":["Programming"],"sub_categories":[],"readme":"# Ever SDK\n\nClient libraries for DApp development in TVM blockchains (Everscale, Gosh, TON, Venom Blockchain, etc.).\n\nCore Ever-SDK client library is written in Rust, with bindings in 11 programming languages.\n\n**Get quick help in our telegram channel:**\n\n[![Channel on Telegram](https://img.shields.io/badge/chat-on%20telegram-9cf.svg)](https://t.me/ever\\_sdk)\n\n* [Ever SDK](#ever-sdk)\n  * [Supported languages](#supported-languages)\n    * [Rust (core library)](#rust-core-library)\n    * [Official Javascript(Typescript) binding](#official-javascripttypescript-binding)\n    * [Community bindings](#community-bindings)\n    * [If you did not find the language you need](#if-you-did-not-find-the-language-you-need)\n  * [Use-cases](#use-cases)\n  * [Quick Start](#quick-start)\n  * [How to avoid Soft Breaking Problems](#how-to-avoid-soft-breaking-problems)\n  * [Build client library](#build-client-library)\n  * [Build artifacts](#build-artifacts)\n  * [Run tests](#run-tests)\n  * [Download precompiled binaries](#download-precompiled-binaries)\n\n## Supported languages\n\n### Rust (core library)\n\nRepository: https://github.com/everx-labs/ever-sdk\n\n**What is Core Client Library?**\n\nCore Client Library is written in Rust that can be dynamically linked. It provides all heavy-computation components and functions, such as TON Virtual Machine, TON Transaction Executor, ABI-related functions, boc-related functions, crypto functions.\n\nThe decision to create the Rust library was made after a period of time using pure JavaScript to implement these use cases.\n\nWe 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.\n\nAlso, 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 etc.\n\nClient Library exposes all the functionality through a few of exported functions. All interaction with library is performed using JSON-RPC like protocol.\n\n### Official Javascript(Typescript) binding\n\nRepository: [JavaScript SDK](https://github.com/everx-labs/ever-sdk-js)\n\nYou need to install core package and the package with binary for your platform. [See the documentation.](https://github.com/everx-labs/ever-sdk-js#library-distribution)\n\n| Platform                       | Package                                                                                                              |\n|--------------------------------|----------------------------------------------------------------------------------------------------------------------|\n| core package for all platforms | [@eversdk/core](https://github.com/everx-labs/ever-sdk-js#install-core-package)                                      |\n| Node.js                        | [@eversdk/lib-node](https://github.com/everx-labs/ever-sdk-js#nodejs)                                                |\n| Web                            | [@eversdk/lib-web](https://github.com/everx-labs/ever-sdk-js#web)                                                    |\n| React-Native                   | [@eversdk/lib-react-native](https://github.com/everx-labs/ever-sdk-js#react-native)                                  |\n| React-Native with JSI support  | [@eversdk/lib-react-native-jsi](https://github.com/everx-labs/ever-sdk-js/tree/master/packages/lib-react-native-jsi) |\n\n### Community bindings\n\n| Language | Repository                                                                                                                                                                               |\n|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| Clojure  | [serge-medvedev/tonos-client-clojure](https://github.com/serge-medvedev/tonos-client-clojure)                                                                                            |\n| Golang   | \u003cp\u003e\u003ca href=\"https://github.com/radianceteam/ton-client-go\"\u003eradianceteam/ton-client-go\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://github.com/markgenuine/ever-client-go\"\u003emarkgenuine/ever-client-go\u003c/a\u003e\u003c/p\u003e  |\n| Java     | \u003cp\u003e\u003ca href=\"https://github.com/radianceteam/ton-client-java\"\u003eradianceteam/ton-client-java\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://github.com/deplant/java4ever-binding\"\u003elaugan/java4ever-binding\u003c/a\u003e\u003c/p\u003e |\n| Kotlin   | [mdorofeev/ton-client-kotlin](https://github.com/mdorofeev/ton-client-kotlin)                                                                                                            |\n| Lua      | [serge-medvedev/tonos-client-lua](https://github.com/serge-medvedev/tonos-client-lua)                                                                                                    |\n| .NET     | [everscale-actions/everscale-dotnet](https://github.com/everscale-actions/everscale-dotnet)                                                                                              |\n| PHP      | \u003cp\u003e\u003ca href=\"https://github.com/extraton/php-ton-client\"\u003eextraton/php-ton-client\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://github.com/radianceteam/ton-client-php\"\u003eradianceteam/ton-client-php\u003c/a\u003e\u003c/p\u003e      |\n| Python   | [move-ton/ton-client-py](https://github.com/move-ton/ton-client-py)                                                                                                                      |\n| Ruby     | [nerzh/ton-client-ruby](https://github.com/nerzh/ton-client-ruby)                                                                                                                        |\n| Scala    | [radianceteam/ton-client-scala](https://github.com/radianceteam/ton-client-scala)                                                                                                        |\n| Swift    | [nerzh/ton-client-swift](https://github.com/nerzh/ton-client-swift)                                                                                                                      |\n\n### If you did not find the language you need\n\n* 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](docs/for-binding-developers/json\\_interface.md).\n* write your own binding to chosen language and share it with community.\n\nIf you choose using JSON Interface please read this document [JSON Interface](docs/for-binding-developers/json\\_interface.md).\\\nHere you can find directions how to use `json_interface` and write your own binding.\n\n## Use-cases\n\nWith Ever-SDK you can implement logic of any complexity on TVM compatible blockchains (Everscale, Gosh, TON, Venom, etc.).\n\n* Create and send messages to blockchain\n* Process messages reliably (supports retries and message expiration mechanics)\n* Supports TON Solidity and ABI compatible contracts\n* Emulate transactions locally\n* Run get methods\n* Get account state\n* Query blockchain data (blocks, transactions, messages)\n* Subscribe to events and any other blockchain updates (literally)\n* Sign data/check signature, calculate hashes (sha256, sha512), encrypt/decrypt data\n* Validate addresses\n* Work with blockchain native types (bag of cells or BOCs): encode, decode, calculate hash, etc\n* Works on top of GraphQL API and compatible with Evernode-SE/DS, Evercloud.\n\n## Quick Start\n\nGet your endpoint at [dashboard.evercloud.dev](https://dashboard.evercloud.dev/) or run Evernode-SE (local node) or Dapp Server (self-hosted blockchain node).\n\nSee the list of available TVM networks: [https://docs.everplatform.dev/products/evercloud/networks-endpoints](https://docs.everplatform.dev/products/evercloud/networks-endpoints)\n\n[Quick Start (Javascript binding)](docs/quick\\_start.md)\n\n[Error descriptions](docs/reference/error\\_codes.md)\n\n[JavaScript SDK Types and Methods (API Reference)](https://everx-labs.github.io/ever-sdk-js/)\n\n[Core Types and Methods (API Reference)](docs/reference/types-and-methods/modules.md)\n\n[Guides](docs/guides/installation/add\\_sdk\\_to\\_your\\_app.md)\n\n## How to avoid Soft Breaking Problems\n\nSoft Breaking is API changes that include only new optional fields in the existing structures. These changes are fully backward compatible for JSON Interface.\n\nBut in Rust such changes can produce some problems with an old client code.\n\nLook at the example below:\n\n1. There is an API v1.0 function `foo` and the corresponding params structure:\n\n```rust\n#[derive(Default)]\nstruct ParamsOfFoo {\n    pub foo: String,\n}\n\npub fn foo(params: ParamsOfFoo)\n```\n\n1. Application uses this function in this way:\n\n```rust\nfoo(ParamsOfFoo {\n    foo: \"foo\".into(),\n});\n```\n\n1. API v.1.1 introduces new field in `ParamsOfFoo`:\n\n```rust\n#[derive(Default)]\nstruct ParamsOfFoo {\n    pub foo: String,\n    pub bar: Option\u003cString\u003e,\n}\n```\n\nFrom 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.\n\n1. To avoid such problems we recommend to use default implementation inside structure initialisation:\n\n```rust\nfoo(ParamsOfFoo {\n    foo: \"foo\".into(),\n    ..Default::default(),\n});\n```\n\nFor all Ton Client API structures `Default` trait is implemented.\n\n## Build client library\n\nThe best way to build client libraries is to use build scripts from this repo.\n\n**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.\n\nTo build a binary for a specific target (or binding), navigate to the relevant folder and run `node build.js`.\n\nThe resulting binaries are placed to `bin` folder in the gz-compressed format.\n\nNote that the build script generates binaries compatible with the platform used to run the script. For example, if you run it on macOS, you get binaries targeted at Darwin (macOS) platform.\n\n**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`.\n\n## Build artifacts\n\nRebuild `api.json`:\n\n```shell\ncd evercli\ncargo run api -o ../tools\n```\n\nRebuild `docs`:\n\n```shell\ncd tools\nnpm i\ntsc\nnode index docs -o ../docs\n```\n\nRebuild `modules.ts`:\n\n```shell\ncd tools\nnpm i\ntsc\nnode index binding -l ts -o ../../ever-sdk-js/packages/core/src\n```\n\n## Run tests\n\nTo run test suite use standard Rust test command\n\n```\ncargo test\n```\n\nSDK tests need [EVER OS API](https://docs.everplatform.dev/reference/graphql-api/networks) endpoint to run on. Such an API is exposed by a [DApp Server](https://github.com/everx-labs/evernode-ds) which runs in real networks and by local blockchain [Evernode SE](https://github.com/everx-labs/evernode-se).\n\nEvernode SE 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 have Evernode SE running on another address or if you need to run tests on a real Everscale network, use the following environment variables to override the default parameters\n\n```\nTON_USE_SE: true/false - flag defining if tests run against Evernode SE or a real network (DApp Server)\nTON_NETWORK_ADDRESS - Dapp server or Evernode SE addresses separated by comma.\nTON_GIVER_SECRET - Giver secret key. If not defined, default Evernode SE giver keys are used\nTON_GIVER_ADDRESS - Address of the giver to use for prepaying accounts before deploying test contracts. If not defined, the address is calculated using `GiverV2.tvc` and configured public key\nEVERCLOUD_AUTH_PROJECT – Evercloud project id used to authorise tests that requires main net interaction \n```\n\n## Download precompiled binaries\n\nInstead of building library yourself, you can download the **latest** precompiled binaries from EverX SDK Binaries Store.\n\n| Platform | Major | Download links                                                                                                                                                   |\n|----------|-------|------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| Win32    | 0     | [`ever_client.lib`](https://binaries.everx-labs.io/tonclient\\_0\\_win32\\_lib.gz), [`ever_client.dll`](https://binaries.everx-labs.io/tonclient\\_0\\_win32\\_dll.gz) |\n|          | 1     | [`ever_client.lib`](https://binaries.everx-labs.io/tonclient\\_1\\_win32\\_lib.gz), [`ever_client.dll`](https://binaries.everx-labs.io/tonclient\\_1\\_win32\\_dll.gz) |\n| macOS    | 0     | [`libton_client.dylib`](https://binaries.everx-labs.io/tonclient\\_0\\_darwin.gz)                                                                                  |\n|          | 1     | (x86\\_64)[`libton_client.dylib`](https://binaries.everx-labs.io/tonclient\\_1\\_darwin.gz)                                                                         |\n|          | 1     | (aarch64)[`libton_client.dylib`](https://binaries.everx-labs.io/tonclient\\_1\\_darwin\\_arm64.gz)                                                                  |\n| Linux    | 0     | [`libton_client.so`](https://binaries.everx-labs.io/tonclient\\_0\\_linux.gz)                                                                                      |\n|          | 1     | [`libton_client.so`](https://binaries.everx-labs.io/tonclient\\_1\\_linux.gz)                                                                                      |\n\nIf 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.everx-labs.io/tonclient\\_**0\\_25\\_0**\\_darwin.gz](https://binaries.everx-labs.io/tonclient\\_0\\_25\\_0\\_darwin.gz)\n\n_Downloaded archive is gzipped file_\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feverx-labs%2Fever-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feverx-labs%2Fever-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feverx-labs%2Fever-sdk/lists"}