Cronos Play C++ SDK
Cronos Play C++ API Reference
API Reference can be found:
Pre-requisites
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
Pre-built Download
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.zipmacOS 10.15 or newer:
play_cpp_sdk_Darwin_x86_64.tar.gzUbuntu 20.04 or newer:
play_cpp_sdk_libstdc++_Linux_x86_64.tar.gzorplay_cpp_sdk_libc++_Linux_x86_64.tar.gzAndroid:
play_cpp_sdk_$(TARGET)-$(NDK_VERSION).tar.gzIOS:
play_cpp_sdk_aarch64-apple-ios.tar.gz
Setup a demo project
Windows
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.gitUnzip the archive file into
demofolder, and replace the originalsdkfolderOpen
demo.slnwhich includes two projects:demo(dynamic build) anddemostatic(static build). If you use Visual Studio 2022, retarget project, and upgrade PlatformToolset to v143.Select
Releaseprofile.Right click
demoordemostaticproject, clickBuildorRebuildto 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 thedemofolder and open itSelect configuration
x64-Releasein the tool barClick
Build>Build AllorRebuild Allto build the project
Mac
Clone the current repository
git clone https://github.com/cronos-labs/play-cpp-sdk.gitUnzip the archive file into
demofolder, and replace the originalsdkfolderUnder
demofolder and build thedemoproject
make CXX=g++ # Compile with g++
make CXX=clang++ # Compile with clang++
make # Compile with default compilerLinux
Clone the current repository
git clone https://github.com/cronos-labs/play-cpp-sdk.gitUnzip the archive file into
demofolder, and replace the originalsdkfolderUnder
demofolder and build thedemoproject with g++, clang++ or default compiler
make CXX=g++ # Compile with g++
make CXX=clang++ # Compile with clang++
make # Compile with default compilerSetup a c++ 14 (or newer) project
Unzip the archive file into the root folder of your project, you should see a folder named
sdkand its subdirectories/files.
- sdk
- CMakeLists.txt
- include: c++ source files and header files
- lib: static and dynamic libraries
- CHANGELOG.md
- LICENSEInclude 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, 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_sdkstatic or dynamic library,cxxbridge1static library, and sources (*.cc) into your build system (Visual Studio solution, CMake or Makefile). For more details, check out Cronos Play Docs.
Build libraries and bindings from scratch
If the Pre-built release does not support your platform, you can build the binaries and bindings on your own.
Windows
Run
windows_build.batin x64 Native Tools Command Prompt for VS 2019. It will clone necessary submodules, buildplay-cpp-sdkcrate, finally setup and build the demo project.Clean
~/.cargo/git/checkoutsif cxx fails to build, then runwindows_build.batagain.Run
windows_install.bat, libraries and bindings will be copied into a new created folder:install
Notes about Visual Studio 2022
Open
demo.sln. If you use Visual Studio 2022, retarget project, and upgrade PlatformToolset tov143before runningwindows_build.bat
Mac
Run
makeRun
make install, libraries and bindings will be copied into a new created folder:install
Linux
Run
makeRun
make install, libraries and bindings will be copied into a new created folder:install
Android
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-androidRun
make install, libraries and bindings will be copied into a new created folder:install
IOS
Run
make aarch64-apple-iosRun
make install, libraries and bindings will be copied into a new created folder:install
Examples
All Examples could be found here
Wallet related functions
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
)ERC20, ERC721, ERC1155 related functions
function balance_of - Returns the decimal amount of tokens owned by account_address.
::org::defi_wallet_core::U256 balance_of(
::rust::String account_address
) constExample
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() constExample
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() constExample
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() constExample
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
) constfunction owner_of - Returns the owner of the token_id token.
::rust::String owner_of(
::rust::String token_id
) constfunction name - Get the descriptive name for a collection of NFTs in this contract.
::rust::String name() constfunction symbol - Get the abbreviated name for NFTs in this contract.
::rust::String symbol() constfunction token_uri- Get the distinct Uniform Resource Identifier (URI) for a given asset.
::rust::String token_uri(
::rust::String token_id
) constfunction 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
) constfunction 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
) constfunction 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
) constfunction 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
) constfunction 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
) constfunction uri - Get the distinct Uniform Resource Identifier (URI) for a given asset.
::rust::String uri(
::rust::String token_id
) constfunction 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
) constfunction 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
) constLast updated
Was this helpful?