chaind-eth

Queue server for ethereum
Log | Files | Refs | README | LICENSE

commit 93c6ed78772651a9005e67b15f603bec3f403893
parent 91b71952629be1fc258fbb26993f1c6e5336d1a7
Author: nolash <dev@holbrook.no>
Date:   Tue, 20 Jul 2021 16:58:03 +0200

Add inline config files

Diffstat:
MMANIFEST.in | 2+-
AREADME.md | 135+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Achaind_eth/data/config/syncer/config.ini | 4++++
Mrequirements.txt | 3+--
Msetup.cfg | 1+
5 files changed, 142 insertions(+), 3 deletions(-)

diff --git a/MANIFEST.in b/MANIFEST.in @@ -1 +1 @@ -include *requirements.txt LICENSE +include *requirements.txt LICENSE chaind_eth/data/config/* chaind_eth/data/config/syncer/* diff --git a/README.md b/README.md @@ -0,0 +1,135 @@ +# chaind-eth development tester recipe + +chaind-eth is a socket server that acts as a automated transaction handler for an EVM network. + +It capabilities are (unchecked box means feature not yet completed): + +- [x] unix socket server to accept raw, signed RLP evm transactions +- [x] stateful queueing system following full local and remote lifecycle of the transaction +- [x] transaction dispatcher unit +- [ ] transaction retry unit (for errored or suspended transactions) +- [x] blockchain listener that updates state of transactions in queue +- [x] CLI transaction listing tool, filterable by: + * [x] transaction range with lower and/or upper bound + * [x] only show transaction with errors + * [x] only show transaction that have not yet completed +- [x] systemd unit / socket service + +## prerequisites + +For these examples you need: + +- python 3.9.x +- pip +- virtualenv +- socat +- sqlite +- an EVM RPC endpoint + +For any python command / executable use: + +* `-v` or `-vv` to get more information about what is going on +* `--help` for information on how to use and parameters that can be passed + + +## usage example + + +### set up database + +In terminal window A + +Currently there is no more practical way of setting up the database backend :/ + +``` +git clone https://gitlab.com/chaintool/chaind +cd chaind +python -m venv .venv +. .venv/bin/activate +pip install --extra-index-url https://pip.grassrootseconomics.net:8433 -r requirements.txt +# the following will set up your database in ~/.local/share/chaind/eth/chaind.sqlite +PYTHONPATH=. CHAIND_DOMAIN=eth DATABASE_ENGINE=sqlite python scripts/migrate.py +``` + +### create an empty working directory + +``` +d=$(mktemp -d) && cd $d +``` + +### create a chaind-eth sandbox + +``` +python -m venv .venv +. .venv/bin/activate +pip install --extra-index-url https://pip.grassrootseconomics.net:8433 "chaind-eth>=0.0.1a2" +``` + +### start the services + +In terminal window B + +``` +cd <working directory> +. .venv/bin/activate +export DATABASE_ENGINE=sqlite +export RPC_HTTP_PROVIDER=<your_provider> +export CHAIN_SPEC=<chain_spec_of_provider> +chaind-eth-server --session-id testsession +``` + +In terminal window C + +``` +cd <working directory> +. .venv/bin/activate +export DATABASE_ENGINE=sqlite +export RPC_HTTP_PROVIDER=<your_provider> +export CHAIN_SPEC=<chain_spec_of_provider> +chaind-eth-syncer +``` + +### prepare test transactions + +Create two transactions from sender in keyfile (which needs to have gas balance) to a newly created account + +``` +export WALLET_KEY_FILE=<path_to_keyfile> +export WALLET_PASSWORD=<keyfile_password_if_needed> +export RPC_HTTP_PROVIDER=<your_provider> +export CHAIN_SPEC=<chain_spec_of_provider> + +# create new account and store address in variable +eth-keyfile -z > testkey.json +recipient=$(eth-keyfile -z -d testkey.json) + +# create transactions +eth-gas --raw -a $recipient 1024 > tx1.txt +eth-gas --raw -a $recipient 2048 > tx2.txt +eth-gas --raw -a $recipient 4096 > tx3.txt +``` + +### send test transactions to queue + +``` +cat tx1.txt | socat UNIX-CLIENT=/run/user/$UID/testsession/chaind.sock +cat tx2.txt | socat UNIX-CLIENT=/run/user/$UID/testsession/chaind.sock +cat tx3.txt | socat UNIX-CLIENT=/run/user/$UID/testsession/chaind.sock +``` + +### check status of transactions + +``` +export DATABASE_ENGINE=sqlite +sender=$(eth-keyfile -d $WALLET_KEY_FILE) +DATABASE_NAME=$HOME/.local/share/chaind/eth/chaind.sqlite chainqueue-list $sender +# to show a summary only instead all transactions +DATABASE_NAME=$HOME/.local/share/chaind/eth/chaind.sqlite chainqueue-list --summary $sender +``` + +The `chainqueue-list` tool provides some basic filtering. Use `chainqueue-list --help` to see what they are. + + +## systemd + +TBC diff --git a/chaind_eth/data/config/syncer/config.ini b/chaind_eth/data/config/syncer/config.ini @@ -0,0 +1,4 @@ +[syncer] +history_start = 0 +skip_history = 0 +loop_interval = 1 diff --git a/requirements.txt b/requirements.txt @@ -1,4 +1,3 @@ chaind<=0.0.1,>=0.0.1a5 hexathon~=0.0.1a7 -chainlib-eth<=0.0.6,>0.0.6a1 -#chainlib-eth~=0.0.5a4 +chainlib-eth<=0.0.6,>=0.0.6a1 diff --git a/setup.cfg b/setup.cfg @@ -26,6 +26,7 @@ licence_files = [options] python_requires = >= 3.6 +include_package_data = True packages = chaind_eth chaind_eth.runnable