Overview
The Parallax client reusable Go libraries focus on three main usage areas:- Simplified client side account management
- Remote node interfacing via different transports
- Contract interactions through auto-generated bindings
Go packages
Theparallax
library is distributed as a collection of standard Go packages straight from Parallax’s GitHub repository. The packages can be used directly via the official Go toolkit, without needing any third party tools.
The canonical import path for the Parallax client is github.com/microstack-tech/parallax
, with all packages residing underneath. Although there are lots of them most developers will only care about a limited subset.
All the Parallax client packages can be downloaded using:
Tutorial
This section includes some basic usage examples for theprlclient
and prlxclient
packages available as part of the Go API. The prlclient
package provides a client that implements the full Parallax JSON-RPC API, whereas prlxclient
offers the Parallax client specific API.
Instantiating a client
The client is an instance of the Client struct which has associated functions that wrap requests to the Parallax client RPC API endpoints. A client is instantiated by passing a raw url or path to an ipc file to the client’s Dial function. In the following code snippet the path to the ipc file for a local Parallax client is provided to prlclient.Dial().Interacting with the client
The client can now be used to handle requests to the Parallax client using the full JSON-RPC API. For example, the functionBlockNumber()
wraps a call to the eth_blockNumber
endpoint. The function SendTransaction
wraps a call to eth_sendTransaction
. The full list of client methods can be found here.
Frequently, the functions take an instance of the Context type as their leading argument. This defines context about requests sent from the application such as deadlines, cancellation signals etc. More information on this can be found in the Go documentation. An empty context instance can be created using Context.Background()
.
Querying client for data
A simple starting point is to fetch the chain ID from the client. This e.g. is needed when signing a transaction as is to be seen in the next section.ChainID
, many functions require arguments other than context. The Go API takes in and returns high-level types which are used in the Parallax client internals as well to simplify programming and remove the need for knowing how data needs to be formatted exactly as per the JSON-RPC API spec. For example to find out the nonce for an account at a given block the address needs to be provided as a common.Address
type and the block number as a *big.Int
:
Querying past events
Contracts emit events during execution which can be queried from the client. The parameters for the event one is interested in have to be filled out in theparallax.FilterQuery
object. This includes which event topics are of interest, from which contracts and during which range of blocks. The example below queries Transfer events of all ERC-20 tokens for the last 10 blocks:
Sending a transaction
Sending a transaction is achieved using theSendTransaction()
function. SendTransaction
takes an instance of context.Context
as its leading argument and a signed transaction as its second argument. The signed transaction must be generated in advance. Building the signed transaction is a multi-stage process that requires first generating a key pair if none exists already, retrieving some chain data and defining sender and recipient addresses. Then these data can be collected into a transaction object and signed. The resulting signed transaction can then be passed to SendTransaction
.
The example below assumes the following key pair has already been generated:
1 Lax
is sent from the address ADDR
to an arbitrary recipient.
prlxclient
An instance ofprlxclient
can be used in exactly the same way as prlclient
. However, prlxclient
includes the Parallax client specific API methods. These additional methods are:
prlclient
and prlxclient
have a CallContract()
function - the difference is that the prlxclient
version includes an overrides argument.
Details relating to these endpoints can be found at pkg.go.dev or the Parallax client GitHub.