WAX-CDT API

All of your smart contracts inherit from the C++ API files available in the WAX Contract Development Toolkit (WAX-CDT) library. These files are used to define your smart contract’s actions, structures, and data types.

This smart contract API can be grouped into three key modules:

  • contracts: This is the primary C++ contracts API used for communicating with the WAX Blockchain. This library defines actions, dispatchers, permissions, and more.
  • core: This library handles datastreams, the name datatype, serialization objects, and more.
  • types: This library defines the base contract, data layouts, data structures, and more.

All of these libraries are located in the wax-cdt/libraries/eosiolib folder. Most of this functionality is available once you include in your smart contract. It’s recommended that you review these files to help you understand how a smart contract is constructed.

WAX API Overloads and Customizations

Method Name: verify_rsa_sha256_sig

Source Code: WAX GitHub Repository

Description: Verify a signature using the RSA 256 algorithm. Implemented in native code, this method is about 15x’s faster than standard WASM verification. Refer to RSA Cryptography Standard for more information.

Input Parameters:

Parameter Description
message Message buffer to verify.
message_len Message buffer length.
signature Signature as hex string.
exponent Public key exponent as hex string.
modulus Modulus as hex string (a leading zero is not allowed).

Example Usage: This method is used to in our WAX RNG service to verify that the RSA signature (random value) returned from the WAX RNG oracle is valid.

 eosio_assert(verify_rsa_sha256_sig(&signing_value, sizeof(signing_value), 
    random_value, pub_key->exponent, pub_key->modulus),
    "Could not verify signature.");

Return Value: Boolean. True if the verification succeeds, False if not.

Data Types

Your smart contracts can use the following data types:

  • bool
  • string
  • int8
  • int16
  • int32
  • int64
  • int128
  • uint8
  • uint16
  • uint32
  • uint64
  • uint128
  • varint32
  • varuint32
  • float32
  • float64
  • float128
  • time_point
  • time_point_sec
  • block_timestamp_type
  • bytes
  • checksum160
  • checksum256
  • checksum512
  • name
  • public_key
  • private_key
  • signature
  • symbol
  • symbol_code
  • asset

Refer to EOSIO’s Types for more information.

Type Definitions

WAX-CDT also includes a custom library of type definitions:

  • typedef uint64_t account_name;
  • typedef uint64_t action_name;
  • typedef uint64_t permission_name;
  • typedef uint64_t scope_name;
  • typedef uint64_t table_name;
  • typedef uint32_t time;
  • typedef uint16_t weight_type;
  • typedef struct checksum256 transaction_id_type;
  • typedef struct checksum256 block_id_type;

Additional Information

For a complete list of features available from the smart contract C++ API, refer to EOSIO’s C/C++ API.