abigen
Abigen is a binding-generator for easily interacting with the Electroneum Smart Chain using Go. Abigen creates easy-to-use, type-safe Go packages from Electroneum smart contract definitions known as ABIs. This abstracts away a lot of the complexity of handling smart contract deployment and interaction in Go native applications such as encoding and decoding smart contracts into EVM bytecode. Abigen comes bundled with Etn-sc. A full Etn-sc installation includes the abigen binary. Abigen can also be built independently by navigating to electroneum-sc/cmd/abigen
and running go build
, or equivalently:
What is an ABI?
Electroneum smart contracts have a schema that defines its functions and return types in the form of a JSON file. This JSON file is known as an Application Binary Interface, or ABI. The ABI acts as a specification for precisely how to encode data sent to a contract and how to decode the data the contract sends back. The ABI is the only essential piece of information required to generate Go bindings. Go developers can then use the bindings to interact with the contract from their Go application without having to deal directly with data encoding and decoding. An ABI is generated when a contract is compiled.
Generating the bindings
To demonstrate the binding generator a contract is required. The contract Storage.sol
implements two very simple functions: store
updates a user-defined uint256
to the contract's storage, and retrieve
displays the value stored in the contract to the user. The Solidity code is as follows:
This contract can be pasted into a text file and saved as Storage.sol
. The following code snippet shows how an ABI can be generated for Storage.sol
using the Solidity compiler solc.
The ABI can also be generated in other ways such as using the compile commands in development frameworks such as Truffle, Hardhat and Brownie or in the online IDE Remix. ABIs for existing verified contracts can be downloaded from the Electroneum Block Explorer.
The ABI for Storage.sol
(Storage.abi
) looks as follows:
The contract binding can then be generated by passing the ABI to abigen as follows:
Where the flags are:
--abi
: Mandatory path to the contract ABI to bind to--pkg
: Mandatory Go package name to place the Go code into--type
: Optional Go type name to assign to the binding struct--out
: Optional output path for the generated Go source file (not set = stdout)
This will generate a type-safe Go binding for the Storage contract. The generated code will look something like the snippet below, the full version of which can be viewed here.
Storage.go
contains all the bindings required to interact with Storage.sol
from a Go application.
For instructions on how to deploy this contract to Electroneum from a Go native application read our Go bindings page. To browse the Abigen source code visit the Etn-sc GitHub repository.
Last updated