Generic blockchain access library and tooling
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lash b8ee1ed97d
Bump vesrion
5 months ago
chainlib Add settings module 5 months ago
doc/texinfo Remove unnecessary nodes 11 months ago
scripts Upgrade confini 7 months ago
tests Add custom fields to chain spec, harden custom field imports, improve dumpconfig handle 11 months ago
.gitignore Add missing jsonrpc module, add address code retrieve to get cli util 1 year ago
.gitlab-ci.yml Update .gitlab-ci.yml 1 year ago
CHANGELOG Flags cleanup, remove persistent wallet 7 months ago
LICENSE.txt Add block and tx class 2 years ago Flags cleanup, remove persistent wallet 7 months ago
Makefile Add missing jsonrpc module, add address code retrieve to get cli util 1 year ago Add docstrings 1 year ago
requirements.txt Upgrade confini 7 months ago Add docstrings for config, test for config 1 year ago
setup.cfg Bump vesrion 5 months ago WIP add environment variable support to man generator 7 months ago


Chainlib is a prototype attempt at writing a generalized code library structure in python3 for concepts that are valid across blockchains, either within the same chain technology or across them. If useful and/or successful, it should be considered ported to a more performant language (rust?).

It is primarily aimed at (possibly threaded) console-environment development.

It aims to give fine-grained control and transparency to all operations and transformations.

It library code should be easy to understand and maintain.

To achieve transparency and improve maintainability, it deliberately exposes the user of this code to a certain degree of complexity.

Ultimately, the chainlib library is for the developer who seeks to understand and contribute, rather than merely defer and consume.


Chainlib seeks to keep its dependency graph and small as possible. Because of baggage from the initial phase of development, it depends on the crypto-dev-signer library to represent transaction structures. As this dependency also includes other routines not necessary for the code in the library, it will be replaced with a dedicated component. crypto-dev-signer will still be used as default for tests, and for the time being also for the CLI runnables.

To generate the bitcoin-style keccak256 hashes, pysha3 is used. pysha3 is a very fast python wrapper around the official keccak implementation from XKCP.

The other requirements are very this code fragments that merely help to relieve a bit of tedium, and add no magic.

Chainlib is not compatible with python2, nor is there any reason to expect it will aim to be.


Any generalizable structures and code can be found in the base module directory chainlib/

Currently the only operational code for available targets is for the evm and the Ethereum network protocol. This code can be found in the separate package chainlib-eth.

Every module will have a subdirectory runnable which contains CLI convenience tooling for common operations. Any directory example will contain code snippets demonstrating usage.

How to use

There are no (exhaustive) tutorial planned for chainlib. All you need to know should be possible to easily understand from code in the example tests and runnable subfolders.

See also

  • The chainsyncer project, which provides a simple chain syncer framework allowing for an arbitrary amount of pluggable code to be executed for each block transaction.
  • The chainqueue project, which provides a transaction queueing daemon that handles conditional submisssion and resubmission of transactions to the network.