ligo/scripts/activate_protocol.sh
2019-02-20 12:39:21 +01:00

90 lines
2.7 KiB
Bash
Executable File

#! /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-<hash>" 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