diff --git a/Dockerfile b/Dockerfile index 9edb2749b..cb54646bb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -38,7 +38,7 @@ EXPOSE 30333 9933 9944 FROM $BASE_IMAGE AS subtensor # Copy all chainspec files -COPY --from=builder /build/*.json / +COPY --from=builder /build/chainspecs/*.json / # Copy final binary COPY --from=builder /build/target/production/node-subtensor /usr/local/bin diff --git a/plain_spec_devnet.json b/chainspecs/plain_spec_devnet.json similarity index 100% rename from plain_spec_devnet.json rename to chainspecs/plain_spec_devnet.json diff --git a/plain_spec_finney.json b/chainspecs/plain_spec_finney.json similarity index 99% rename from plain_spec_finney.json rename to chainspecs/plain_spec_finney.json index 78f340d6f..76b58a624 100644 --- a/plain_spec_finney.json +++ b/chainspecs/plain_spec_finney.json @@ -105141,4 +105141,4 @@ } } } -} \ No newline at end of file +} diff --git a/plain_spec_testfinney.json b/chainspecs/plain_spec_testfinney.json similarity index 99% rename from plain_spec_testfinney.json rename to chainspecs/plain_spec_testfinney.json index b636180b9..820acd6d3 100644 --- a/plain_spec_testfinney.json +++ b/chainspecs/plain_spec_testfinney.json @@ -71,4 +71,4 @@ } } } -} \ No newline at end of file +} diff --git a/raw_spec_devnet.json b/chainspecs/raw_spec_devnet.json similarity index 100% rename from raw_spec_devnet.json rename to chainspecs/raw_spec_devnet.json diff --git a/raw_spec_finney.json b/chainspecs/raw_spec_finney.json similarity index 100% rename from raw_spec_finney.json rename to chainspecs/raw_spec_finney.json diff --git a/raw_spec_testfinney.json b/chainspecs/raw_spec_testfinney.json similarity index 100% rename from raw_spec_testfinney.json rename to chainspecs/raw_spec_testfinney.json diff --git a/scripts/build_all_chainspecs.sh b/scripts/build_all_chainspecs.sh index 03727b728..1e291b47f 100755 --- a/scripts/build_all_chainspecs.sh +++ b/scripts/build_all_chainspecs.sh @@ -1,39 +1,75 @@ #!/bin/bash +# The genesis is not allowed to change. Since the wasm genesis will change +# depending on the system architecture used, we need to extract the genesis from +# the old chain specs and insert them into the new chain specs to ensure there +# are no genesis mismatch issues. + +# This script updates the chain spec files keeping the genesis unchanged. + set -e -echo "*** Building node..." -cargo build -p node-subtensor +raw_finney="chainspecs/raw_spec_finney.json" +plain_finney="chainspecs/plain_spec_finney.json" +raw_testfinney="chainspecs/raw_spec_testfinney.json" +plain_testfinney="chainspecs/plain_spec_testfinney.json" +raw_devnet="chainspecs/raw_spec_devnet.json" +plain_devnet="chainspecs/plain_spec_devnet.json" + +save_genesis() { + jq -r ".genesis" "$1" >"$2" +} + +buildspec() { + local chain="$1" + shift + ./target/debug/node-subtensor build-spec --chain "$chain" --disable-default-bootnode "$@" +} -echo "*** Building new chainspecs..." +# Update genesis in new chainspecs using the extracted genesis data from the +# temporary files +update_genesis() { + jq --slurpfile genesis "$1" '.genesis = $genesis[0]' "$2" >"$3" +} -finney_genesis_temp=$(mktemp) -testfinney_genesis_temp=$(mktemp) -raw_spec_finney_temp=$(mktemp) -raw_spec_testfinney_temp=$(mktemp) +update_spec() { + local chain="$1" + local raw_path="$2" + local plain_path="$3" -# Save old genesis state before doing anything -jq -r ".genesis" raw_spec_finney.json >"$finney_genesis_temp" -jq -r ".genesis" raw_spec_testfinney.json >"$testfinney_genesis_temp" + raw_genesis_temp=$(mktemp) + plain_genesis_temp=$(mktemp) + raw_spec_temp=$(mktemp) + plain_spec_temp=$(mktemp) -# Build new chainspecs -./target/debug/node-subtensor build-spec --raw --chain finney >"$raw_spec_finney_temp" -./target/debug/node-subtensor build-spec --chain finney >plain_spec_finney.json + echo "*** Backing up genesis for '$chain'..." -./target/debug/node-subtensor build-spec --raw --chain test_finney >"$raw_spec_testfinney_temp" -./target/debug/node-subtensor build-spec --chain test_finney >plain_spec_testfinney.json + save_genesis "$raw_path" "$raw_genesis_temp" + save_genesis "$plain_path" "$plain_genesis_temp" -echo "*** Updating genesis..." + echo "*** Building new chainspec for '$chain'..." -# The genesis is not allowed to change. Since the wasm genesis will change depending on the system -# architecture used, we need to extract the genesis from the old chain specs and insert them into -# the new chain specs to ensure there are no genesis mismatch issues. + # Build new chainspecs + buildspec "$chain" >"$plain_spec_temp" + buildspec "$chain" --raw >"$raw_spec_temp" -# Update genesis in new chainspecs using the extracted genesis data from the temporary files -jq --slurpfile genesis "$finney_genesis_temp" '.genesis = $genesis[0]' "$raw_spec_finney_temp" >raw_spec_finney.json -jq --slurpfile genesis "$testfinney_genesis_temp" '.genesis = $genesis[0]' "$raw_spec_testfinney_temp" >raw_spec_testfinney.json + echo "*** Restoring genesis in '$chain'..." + + update_genesis "$raw_genesis_temp" "$raw_spec_temp" "$raw_path" + update_genesis "$plain_genesis_temp" "$plain_spec_temp" "$plain_path" + + # cleanup + rm -f "$raw_genesis_temp" "$plain_genesis_temp" "$raw_spec_temp" \ + "$plain_spec_temp" +} + +# SCRIPT + +echo "*** Building node..." +cargo build -p node-subtensor -# Cleanup -rm -f "$finney_genesis_temp" "$testfinney_genesis_temp" "$raw_spec_finney_temp" "$raw_spec_testfinney_temp" +update_spec finney "$raw_finney" "$plain_finney" +update_spec test_finney "$raw_testfinney" "$plain_testfinney" +update_spec devnet "$raw_devnet" "$plain_devnet" echo "*** Done!" diff --git a/scripts/run/subtensor.sh b/scripts/run/subtensor.sh index 66ba32d3c..05baa7a76 100755 --- a/scripts/run/subtensor.sh +++ b/scripts/run/subtensor.sh @@ -41,7 +41,7 @@ function run_command() { # Command to run subtensor $F_BIN_PATH \ --base-path /tmp/blockchain \ - --chain ./raw_spec_finney.json \ + --chain ./chainspecs/raw_spec_finney.json \ --rpc-external --rpc-cors all \ --no-mdns \ --rpc-max-connections 10000 --in-peers 500 --out-peers 500 \