From e237e21372f70903b712bc962a80a3076208d5f7 Mon Sep 17 00:00:00 2001 From: jangko Date: Tue, 23 Mar 2021 18:52:25 +0700 Subject: [PATCH] add hive client files --- hive_integration/nimbus/Dockerfile | 42 ++++++++++++++ hive_integration/nimbus/genesis.json | 15 +++++ hive_integration/nimbus/mapper.jq | 47 ++++++++++++++++ hive_integration/nimbus/nimbus.sh | 82 ++++++++++++++++++++++++++++ 4 files changed, 186 insertions(+) create mode 100644 hive_integration/nimbus/Dockerfile create mode 100644 hive_integration/nimbus/genesis.json create mode 100644 hive_integration/nimbus/mapper.jq create mode 100644 hive_integration/nimbus/nimbus.sh diff --git a/hive_integration/nimbus/Dockerfile b/hive_integration/nimbus/Dockerfile new file mode 100644 index 000000000..d2b01d956 --- /dev/null +++ b/hive_integration/nimbus/Dockerfile @@ -0,0 +1,42 @@ +# Docker container spec for building the master branch of nimbus. + +FROM debian:buster-slim AS build + +RUN apt-get update \ + && apt-get install -y --fix-missing build-essential make git libpcre3-dev librocksdb-dev \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +ENV NPROC=2 + +RUN git clone --depth 1 https://github.com/status-im/nimbus-eth1.git \ + && cd nimbus-eth1 \ + && git checkout master \ + && make -j${NPROC} NIMFLAGS="--parallelBuild:${NPROC}" V=1 update + +RUN cd nimbus-eth1 && \ + make -j${NPROC} NIMFLAGS="--parallelBuild:${NPROC}" nimbus && \ + mv build/nimbus /usr/bin/ + +# --------------------------------- # +# Starting new image to reduce size # +# --------------------------------- # +FROM debian:buster-slim AS deploy + +RUN apt-get update \ + && apt-get install -y librocksdb-dev bash curl jq\ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +COPY --from=build /usr/bin/nimbus /usr/bin/nimbus +# Inject the startup script +ADD nimbus.sh /nimbus.sh +ADD mapper.jq /mapper.jq +RUN chmod +x /nimbus.sh + +ADD genesis.json /genesis.json + +# Export the usual networking ports to allow outside access to the node +EXPOSE 8545 8546 8547 30303 30303/udp + +ENTRYPOINT ["/nimbus.sh"] diff --git a/hive_integration/nimbus/genesis.json b/hive_integration/nimbus/genesis.json new file mode 100644 index 000000000..7ca6f39f7 --- /dev/null +++ b/hive_integration/nimbus/genesis.json @@ -0,0 +1,15 @@ +{ + "coinbase" : "0x8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x020000", + "extraData" : "0x42", + "gasLimit" : "0x2fefd8", + "mixHash" : "0x2c85bcbce56429100b2108254bb56906257582aeafcbd682bc9af67a9f5aee46", + "nonce" : "0x78cc16f7b4f65485", + "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp" : "0x54c98c81", + "alloc" : { + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "balance" : "0x09184e72a000" + } + } +} diff --git a/hive_integration/nimbus/mapper.jq b/hive_integration/nimbus/mapper.jq new file mode 100644 index 000000000..e77f36300 --- /dev/null +++ b/hive_integration/nimbus/mapper.jq @@ -0,0 +1,47 @@ +# Removes all empty keys and values in input. +def remove_empty: + . | walk( + if type == "object" then + with_entries( + select( + .value != null and + .value != "" and + .value != [] and + .key != null and + .key != "" + ) + ) + else . + end + ) +; + +# Converts decimal string to number. +def to_int: + if . == null then . else .|tonumber end +; + +# Converts "1" / "0" to boolean. +def to_bool: + if . == null then . else + if . == "1" then true else false end + end +; + +# Replace config in input. +. + { + "config": { + "chainId": env.HIVE_CHAIN_ID|to_int, + "homesteadBlock": env.HIVE_FORK_HOMESTEAD|to_int, + "daoForkBlock": env.HIVE_FORK_DAO_BLOCK|to_int, + "daoForkSupport": env.HIVE_FORK_DAO_VOTE|to_bool, + "eip150Block": env.HIVE_FORK_TANGERINE|to_int, + "eip158Block": env.HIVE_FORK_SPURIOUS|to_int, + "byzantiumBlock": env.HIVE_FORK_BYZANTIUM|to_int, + "constantinopleBlock": env.HIVE_FORK_CONSTANTINOPLE|to_int, + "petersburgBlock": env.HIVE_FORK_PETERSBURG|to_int, + "istanbulBlock": env.HIVE_FORK_ISTANBUL|to_int, + "muirGlacierBlock": env.HIVE_FORK_MUIR_GLACIER|to_int, + "berlinBlock": env.HIVE_FORK_BERLIN|to_int + }|remove_empty +} diff --git a/hive_integration/nimbus/nimbus.sh b/hive_integration/nimbus/nimbus.sh new file mode 100644 index 000000000..2f536d799 --- /dev/null +++ b/hive_integration/nimbus/nimbus.sh @@ -0,0 +1,82 @@ +#!/bin/bash + +# Startup script to initialize and boot a nimbus instance. +# +# This script assumes the following files: +# - `nimbus` binary is located in the filesystem root +# - `genesis.json` file is located in the filesystem root (mandatory) +# - `chain.rlp` file is located in the filesystem root (optional) +# - `blocks` folder is located in the filesystem root (optional) +# - `keys` folder is located in the filesystem root (optional) +# +# This script assumes the following environment variables: +# +# - [ ] HIVE_BOOTNODE enode URL of the remote bootstrap node +# - [ ] HIVE_NETWORK_ID network ID number to use for the eth protocol +# - [ ] HIVE_TESTNET whether testnet nonces (2^20) are needed +# - [ ] HIVE_NODETYPE sync and pruning selector (archive, full, light) +# +# Forks: +# +# - [x] HIVE_FORK_HOMESTEAD block number of the homestead hard-fork transition +# - [x] HIVE_FORK_DAO_BLOCK block number of the DAO hard-fork transition +# - [x] HIVE_FORK_DAO_VOTE whether the node support (or opposes) the DAO fork +# - [x] HIVE_FORK_TANGERINE block number of Tangerine Whistle transition +# - [x] HIVE_FORK_SPURIOUS block number of Spurious Dragon transition +# - [x] HIVE_FORK_BYZANTIUM block number for Byzantium transition +# - [x] HIVE_FORK_CONSTANTINOPLE block number for Constantinople transition +# - [x] HIVE_FORK_PETERSBURG block number for ConstantinopleFix/PetersBurg transition +# - [x] HIVE_FORK_ISTANBUL block number for Istanbul transition +# - [x] HIVE_FORK_MUIRGLACIER block number for Muir Glacier transition +# - [x] HIVE_FORK_BERLIN block number for Berlin transition +# +# Clique PoA: +# +# - [ ] HIVE_CLIQUE_PERIOD enables clique support. value is block time in seconds. +# - [ ] HIVE_CLIQUE_PRIVATEKEY private key for clique mining +# +# Other: +# +# - [ ] HIVE_MINER enable mining. value is coinbase address. +# - [ ] HIVE_MINER_EXTRA extra-data field to set for newly minted blocks +# - [ ] HIVE_SKIP_POW if set, skip PoW verification during block import +# - [ ] HIVE_LOGLEVEL client loglevel (0-5) +# - [ ] HIVE_GRAPHQL_ENABLED enables graphql on port 8545 + +# Immediately abort the script on any error encountered +set -e + +nimbus=/usr/bin/nimbus +FLAGS="--prune:archive" + +if [ "$HIVE_LOGLEVEL" != "" ]; then + FLAGS="$FLAGS --log-level:$HIVE_LOGLEVEL" +fi + +# Configure the chain. +mv /genesis.json /genesis-input.json +jq -f /mapper.jq /genesis-input.json > /genesis.json + +# Dump genesis +echo "Supplied genesis state:" +cat /genesis.json +F-LAGS="$FLAGS --customgenesis:genesis.json" + +# Don't immediately abort, some imports are meant to fail +set +e + +# Load the remainder of the test chain +echo "Loading remaining individual blocks..." +if [ -d /blocks ]; then + (cd /blocks && $nimbus $FLAGS --log-level:$HIVE_LOGLEVEL --import:`ls | sort -n`) +else + echo "Warning: blocks folder not found." +fi + +set -e + +# Configure RPC. +FLAGS="$FLAGS --rpc --rpcapi:eth,debug" + +echo "Running nimbus with flags $FLAGS" +$nimbus $FLAGS