From 62abb52b9f960250d58f805bbed55cf240703052 Mon Sep 17 00:00:00 2001 From: Marco Stronati Date: Thu, 10 Jan 2019 16:01:30 +0100 Subject: [PATCH] Scripts: add activate_protocol.sh --- scripts/activate_protocol.sh | 89 ++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100755 scripts/activate_protocol.sh diff --git a/scripts/activate_protocol.sh b/scripts/activate_protocol.sh new file mode 100755 index 000000000..f72b2e5cd --- /dev/null +++ b/scripts/activate_protocol.sh @@ -0,0 +1,89 @@ +#! /bin/bash + +set -e + +usage="Usage: +$ ./scripts/activate_protocol.sh src/proto_004_PtDPBVyN +Inserts the protocol in the right files of the build system to compile it +If in master activates in addition to alpha. +If in mainnet activates in addition to its predecessor, here proto_003_PsddFKi3." + +script_dir="$(cd "$(dirname "$0")" && echo "$(pwd -P)/")" +cd "$script_dir"/.. + +if [ ! -d "$1" ]; then + echo "$usage" + exit 1 +fi + +is_mainnet () { + # need to check a real file because of phantom git directories + if [ -f "src/proto_000_Ps9mPmXa/lib_protocol/src/TEZOS_PROTOCOL" ] + then return 0; else return 1; fi +} + +new_version=$(basename $1 | awk -F'_' '{print $2}') +new_hash=$(basename $1 | awk -F'_' '{print $3}') +full_hash=$(jq .hash < $1/lib_protocol/src/TEZOS_PROTOCOL) +replacement=${new_version}-${new_hash} +if [[ -z "${new_version}" || -z "${new_hash}" || -z "${full_hash}" ]] ; then + echo "$usage" + exit 1 +fi + +# The pattern to look for, "alpha" for master or "00X-" for mainnet. +# Once found it's either replaced or the line is duplicated and then replaced +if is_mainnet +then + old_version=$( printf '%03d' $(($new_version -1)) ) + old_dir=$(ls -d src/proto_${old_version}_*) + old_hash=$(basename $old_dir | awk -F'_' '{print $3}') + pattern=${old_version}-${old_hash} +else + pattern="alpha" +fi + +# if a line matches PATTERN, a new line is printed where the pattern is replaced +duplicate_and_replace() { + PATTERN=$1 + REPLACEMENT=$2 + shift 2 + + awk -i inplace '{ + print + if ($0 ~ PATTERN) { + sub(PATTERN,REPLACEMENT) + print + }}' PATTERN=$PATTERN REPLACEMENT=$REPLACEMENT $* +} + +# the minimum needed, although you can't bake +duplicate_and_replace ${pattern} ${replacement} active_protocol_versions + +# activate in client to bake and use RPCs +duplicate_and_replace -${pattern} -${replacement} \ + src/bin_client/{dune,tezos-client.opam} + +read -p "Link in the Node? (no if you want to test injection) (Y/n) " ans +if [[ "$ans" == "Y" || "$ans" == "y" || -z "$ans" ]]; then + duplicate_and_replace -${pattern} -${replacement} \ + src/bin_node/{dune,tezos-node.opam} +fi + +read -p "User-activated update in 3 blocks? (Y/n) " ans +if [[ "$ans" == "Y" || "$ans" == "y" || -z "$ans" ]]; then + # clean existing lines, if any + awk -i inplace ' + BEGIN{found=0}{ + if (!found && $0 ~ "let forced_protocol_upgrades") + {found=1; print} + else { + if (found && $0 ~ "^]") + {found=0; print } + else + { if (!found){print}} + }}' src/lib_base/block_header.ml + + sed -i '/let forced_protocol_upgrades/ a \ \ 3l, Protocol_hash.of_b58check_exn '${full_hash}' ;' \ + src/lib_base/block_header.ml +fi