API Reference can be found:
{% embed url="https://docs.play.cronos.org/" %} Cronos Play C++ API Reference {% endembed %}
- python 3.8 or newer
- rust 1.61 or newer
- C++ 14 or newer
- Optional:
- GNU make
- GNU make for mac and linux, ninja for windows
- Visual Studio 2019 or newer for windows
Please download the archive file based on your OS in the release page, where:
- Visual Studio 2019 MSVC, x86_64, toolset 14.29 or newer:
play_cpp_sdk_Windows_x86_64.zip
- macOS 10.15 or newer:
play_cpp_sdk_Darwin_x86_64.tar.gz
- Ubuntu 20.04 or newer:
play_cpp_sdk_libstdc++_Linux_x86_64.tar.gz
orplay_cpp_sdk_libc++_Linux_x86_64.tar.gz
- Android:
play_cpp_sdk_$(TARGET)-$(NDK_VERSION).tar.gz
- IOS:
play_cpp_sdk_aarch64-apple-ios.tar.gz
Visual Studio Project
Start with a C++ project with .sln
and .vcxproj
files:
- Clone the current repository
git clone https://github.com/cronos-labs/play-cpp-sdk.git
- Unzip the archive file into
demo
folder, and replace the originalsdk
folder - Open
demo.sln
which includes two projects:demo
(dynamic build) anddemostatic
(static build). If you use Visual Studio 2022, retarget project, and upgrade PlatformToolset to v143. - Select
Release
profile. - Right click
demo
ordemostatic
project, clickBuild
orRebuild
to build the project
CMake Project
Build modern, cross-platform C++ apps that don't depend on .sln
or .vcxproj
files:
- Open Visual Studio, then open a local folder in welcome window (or click
File
>Open
>Folder...
in the menu), locate thedemo
folder and open it - Select configuration
x64-Release
in the tool bar - Click
Build
>Build All
orRebuild All
to build the project
- Clone the current repository
git clone https://github.com/cronos-labs/play-cpp-sdk.git
- Unzip the archive file into
demo
folder, and replace the originalsdk
folder - Under
demo
folder and build thedemo
project
make CXX=g++ # Compile with g++
make CXX=clang++ # Compile with clang++
make # Compile with default compiler
- Clone the current repository
git clone https://github.com/cronos-labs/play-cpp-sdk.git
- Unzip the archive file into
demo
folder, and replace the originalsdk
folder - Under
demo
folder and build thedemo
project with g++, clang++ or default compiler
make CXX=g++ # Compile with g++
make CXX=clang++ # Compile with clang++
make # Compile with default compiler
- Unzip the archive file into the root folder of your project, you should see a folder named
sdk
and its subdirectories/files.
- sdk
- CMakeLists.txt
- include: c++ source files and header files
- lib: static and dynamic libraries
- CHANGELOG.md
- LICENSE
- Include the following headers and use the namespaces in your source codes based on your need
#include "sdk/include/defi-wallet-core-cpp/src/contract.rs.h" // erc20, erc721, erc1155 supports
#include "sdk/include/defi-wallet-core-cpp/src/lib.rs.h" // wallet, EIP4361, query, signing, broadcast etc, on crypto.org and cronos
#include "sdk/include/defi-wallet-core-cpp/src/nft.rs.h" // crypto.org chain nft support
#include "sdk/include/defi-wallet-core-cpp/src/uint.rs.h" // uint256 type support
#include "sdk/include/defi-wallet-core-cpp/src/ethereum.rs.h" // dynamic contract support
#include "sdk/include/extra-cpp-bindings/src/lib.rs.h" // etherscan/cronoscan, crypto.com pay, wallet connect support
#include "sdk/include/rust/cxx.h" // the important data types, e.g., rust::String, rust::str, etc
using namespace rust;
using namespace org::defi_wallet_core;
using namespace com::crypto::game_sdk;
- Link the
play_cpp_sdk
static or dynamic library,cxxbridge1
static library, and sources (*.cc) into your build system (Visual Studio solution, CMake or Makefile). For more details, check out Cronos Play Docs.
If the Pre-built release does not support your platform, you can build the binaries and bindings on your own.
- Run
windows_build.bat
in x64 Native Tools Command Prompt for VS 2019. It will clone necessary submodules, buildplay-cpp-sdk
crate, finally setup and build the demo project. - Clean
~/.cargo/git/checkouts
if cxx fails to build, then runwindows_build.bat
again. - Run
windows_install.bat
, libraries and bindings will be copied into a new created folder:install
- Open
demo.sln
. If you use Visual Studio 2022, retarget project, and upgrade PlatformToolset tov143
before runningwindows_build.bat
- Run
make
- Run
make install
, libraries and bindings will be copied into a new created folder:install
- Run
make
- Run
make install
, libraries and bindings will be copied into a new created folder:install
-
Install Android NDK (e.g. 21.4.7075529) via Android Studio
-
Run make for one of the following Android targets on macOS or Linux
NDK_VERSION=21.4.7075529 make armv7-linux-androideabi NDK_VERSION=21.4.7075529 make aarch64-linux-android NDK_VERSION=21.4.7075529 make i686-linux-android NDK_VERSION=21.4.7075529 make x86_64-linux-android
-
Run
make install
, libraries and bindings will be copied into a new created folder:install
- Run
make aarch64-apple-ios
- Run
make install
, libraries and bindings will be copied into a new created folder:install
All Examples could be found here
function new_wallet
- Generates the HD wallet with a BIP39 backup phrase (English words) and password
::rust::Box<::org::defi_wallet_core::Wallet > new_wallet(
::rust::String password,
::org::defi_wallet_core::MnemonicWordCount word_count
)
function restore_wallet
- Recovers/imports HD wallet from a BIP39 backup phrase (English words) and password
::rust::Box<::org::defi_wallet_core::Wallet > restore_wallet(
::rust::String mnemonic,
::rust::String password
)
function new_privatekey
- Generates a random private key
::rust::Box<::org::defi_wallet_core::PrivateKey > new_privatekey()
function new_privatekey_from_bytes
- Constructs private key from hex bytes
// constructs private key from bytes
::rust::Box<::org::defi_wallet_core::PrivateKey > new_privatekey_from_bytes(
::rust::Vec<::std::uint8_t > bytes
)
function new_privatekey_from_hex
- Constructs private key from hex string
// constructs private key from hex string
::rust::Box<::org::defi_wallet_core::PrivateKey > new_privatekey_from_hex(
::rust::String hex
)
function balance_of
- Returns the decimal amount of tokens owned by account_address.
::org::defi_wallet_core::U256 balance_of(
::rust::String account_address
) const
Example
Erc20 erc20 = new_erc20("0xf0307093f23311FE6776a7742dB619EB3df62969",
"https://cronos-testnet-3.crypto.org:8545", 383)
.legacy();
U256 = erc20.balance_of("0xf0307093f23311FE6776a7742dB619EB3df62969");
cout << balance.to_string() << endl;
function name
-Returns the name of the token.
::rust::String name() const
Example
Erc20 erc20 = new_erc20("0xf0307093f23311FE6776a7742dB619EB3df62969",
"https://cronos-testnet-3.crypto.org:8545", 383);
String name = erc20.name();
assert(name == "USDC");
function symbol
- Returns the symbol of the token.
::rust::String symbol() const
Example
Erc20 erc20 = new_erc20("0xf0307093f23311FE6776a7742dB619EB3df62969",
"https://cronos-testnet-3.crypto.org:8545", 383);
String symbol = erc20.symbol();
assert(symbol == "USDC");
function decimals
- Returns the number of decimals the token uses.
::std::uint8_t decimals() const
Example
Erc20 erc20 = new_erc20("0xf0307093f23311FE6776a7742dB619EB3df62969",
"https://cronos-testnet-3.crypto.org:8545", 383)
.legacy();
uint8_t decimals = erc20.decimals();
assert(decimals == 6);
function balance_of
- Returns the number of tokens in owner's account_address.
::org::defi_wallet_core::U256 balance_of(
::rust::String account_address
) const
function owner_of
- Returns the owner of the token_id token.
::rust::String owner_of(
::rust::String token_id
) const
function name
- Get the descriptive name for a collection of NFTs in this contract.
::rust::String name() const
function symbol
- Get the abbreviated name for NFTs in this contract.
::rust::String symbol() const
function token_uri
- Get the distinct Uniform Resource Identifier (URI) for a given asset.
::rust::String token_uri(
::rust::String token_id
) const
function transfer_from
- Transfers token_id token from from_address to to_address.
::org::defi_wallet_core::CronosTransactionReceiptRaw transfer_from(
::rust::String from_address,
::rust::String to_address,
::rust::String token_id,
const ::org::defi_wallet_core::PrivateKey & private_key
) const
function safe_transfer_from
- Safely transfers token_id
token from from_address
to to_address
.
::org::defi_wallet_core::CronosTransactionReceiptRaw safe_transfer_from(
::rust::String from_address,
::rust::String to_address,
::rust::String token_id,
const ::org::defi_wallet_core::PrivateKey & private_key
) const
function safe_transfer_from_with_data
- Safely transfers token_id token from from_address to to_address with additional_data.
::org::defi_wallet_core::CronosTransactionReceiptRaw safe_transfer_from_with_data(
::rust::String from_address,
::rust::String to_address,
::rust::String token_id,
::rust::Vec<::std::uint8_t > additional_data,
const ::org::defi_wallet_core::PrivateKey & private_key
) const
function balance_of
- Returns the amount of tokens of token_id
owned by account_address
.
::org::defi_wallet_core::U256 balance_of(
::rust::String account_address,
::rust::String token_id
) const
function balance_of_batch
- Batched version of balance_of, get the balance of multiple account/token pairs
::rust::Vec<::rust::String > balance_of_batch(
::rust::Vec<::rust::String > account_addresses,
::rust::Vec<::rust::String > token_ids
) const
function uri
- Get the distinct Uniform Resource Identifier (URI) for a given asset.
::rust::String uri(
::rust::String token_id
) const
function safe_transfer_from
- Transfers amount tokens of token_id
from from_address
to to_address
with additional_data
.
::org::defi_wallet_core::CronosTransactionReceiptRaw safe_transfer_from(
::rust::String from_address,
::rust::String to_address,
::rust::String token_id,
::rust::String amount,
::rust::Vec<::std::uint8_t > additional_data,
const ::org::defi_wallet_core::PrivateKey & private_key
) const
function safe_batch_transfer_from
- Batched version of safeTransferFrom
.
::org::defi_wallet_core::CronosTransactionReceiptRaw safe_batch_transfer_from(
::rust::String from_address,
::rust::String to_address,
::rust::Vec<::rust::String > token_ids,
::rust::Vec<::rust::String > amounts,
::rust::Vec<::std::uint8_t > additional_data,
const ::org::defi_wallet_core::PrivateKey & private_key
) const