45 lines
2.7 KiB
Markdown
45 lines
2.7 KiB
Markdown
# chainlib
|
|
|
|
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.
|
|
|
|
|
|
## Requirements
|
|
|
|
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](https://github.com/XKCP/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.
|
|
|
|
|
|
## Structure
|
|
|
|
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](https://gitlab.com/chaintool/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](https://gitlab.com/chaintool/chainqueue) project, which provides a transaction queueing daemon that handles conditional submisssion and resubmission of transactions to the network.
|