axelarnetwork / axelar-gmp-sdk-solidity

Solidity libraries and utilities provided by Axelar.
27 stars 32 forks source link

Axelar GMP SDK Solidity

This repository contains all the necessary ingredients for successful cross-chain development utilizing the Axelar General Message Passing protocol.

Documentation

Build

We recommend using the latest Node.js LTS version.

npm ci

npm run build

npm run test

Pre-compiled bytecodes can be found under Releases. Furthermore, pre-compiled bytecodes and ABI are shipped in the npm package and can be imported via:

npm install @axelar-network/axelar-gmp-sdk-solidity
const IAxelarExecutable = require('@axelar-network/axelar-gmp-sdk-solidity/interfaces/IAxelarExecutable.json');

const Upgradable = require('@axelar-network/axelar-cgp-solidity/artifacts/contracts/upgradable/Upgradable.sol/Upgradable.json');

Unit tests can also be run against live networks for integration testing, see here.

Development

Check gas usage

REPORT_GAS=true npm run test

Check storage layout of contracts.

STORAGE_LAYOUT=true npm run check

Check contract bytecode size

CHECK_CONTRACT_SIZE=true npm run build

Available contracts

AxelarExecutable

Base interface for validating and executing GMP contract calls.

AxelarExpressExecutable

Interface that allows expediting GMP calls by lending assets and performing execution before it fully propagates through the Axelar network.

Create2Deployer and Create3Deployer

These contracts are used to deploy your Executable to have the same address on different EVM chains. This simplifies message validation from peer Executables. You can learn more in the documentation.

Proxy and Upgradable

Base implementation of upgradable contracts designed to be deployed with Create3Deployer and to have the same Proxy address on different EVM chains.

AddressString

Allows conversion between string and address data types

AddressBytes

Allows conversion between bytes and address data types

Bytes32String

Allows conversion between string and bytes32 data types for storing strings under 31 bytes into a single storage slot