135 lines
3.8 KiB
Bash
135 lines
3.8 KiB
Bash
#!/bin/sh
|
|
|
|
configure_client() {
|
|
|
|
local client_config="$HOME/.tezos-client/config"
|
|
mkdir -p "$client_dir" "$HOME/.tezos-client"
|
|
|
|
if [ ! -f "$client_config" ]; then
|
|
"$client" --base-dir "$client_dir" \
|
|
--addr "$NODE_HOST" --port "$NODE_RPC_PORT" \
|
|
config init --output "$client_config" >/dev/null 2>&1
|
|
else
|
|
"$client" --base-dir "$client_dir" \
|
|
--addr "$NODE_HOST" --port "$NODE_RPC_PORT" \
|
|
config update >/dev/null 2>&1
|
|
fi
|
|
|
|
}
|
|
|
|
wait_for_the_node_to_be_ready() {
|
|
local count=0
|
|
if "$client" rpc get /chains/main/blocks/head/hash >/dev/null 2>&1; then return; fi
|
|
printf "Waiting for the node to initialize..."
|
|
sleep 1
|
|
while ! "$client" rpc get /chains/main/blocks/head/hash >/dev/null 2>&1
|
|
do
|
|
count=$((count+1))
|
|
if [ "$count" -ge 30 ]; then
|
|
echo " timeout."
|
|
exit 2
|
|
fi
|
|
printf "."
|
|
sleep 1
|
|
done
|
|
echo " done."
|
|
}
|
|
|
|
wait_for_the_node_to_be_bootstraped() {
|
|
wait_for_the_node_to_be_ready
|
|
echo "Waiting for the node to synchronize with the network..."
|
|
"$client" bootstrapped
|
|
}
|
|
|
|
launch_node() {
|
|
|
|
mkdir -p "$node_dir"
|
|
|
|
# Check if we have to reset the chain because the image we want to
|
|
# run has a incompatible version with the blockchain we have stored
|
|
# locally on disk
|
|
|
|
local image_version="$(cat "/usr/local/share/tezos/alphanet_version")"
|
|
echo "Current public chain: $image_version."
|
|
local local_data_version=""
|
|
if [ -f "$node_dir/alphanet_version" ]; then
|
|
local_data_version="$(cat "$node_dir/alphanet_version")"
|
|
echo "Local chain data: $local_data_version."
|
|
fi
|
|
if [ "$local_data_version" != "$image_version" ]; then
|
|
echo "Removing outdated chain data..."
|
|
if [ -f "$node_data_dir/identity.json" ]; then \
|
|
mv "$node_data_dir/identity.json" /tmp
|
|
fi
|
|
rm -rf "$node_data_dir"
|
|
rm -rf "$client_dir/blocks"
|
|
rm -rf "$client_dir/nonces"
|
|
rm -rf "$client_dir/endorsements"
|
|
if [ -f "/tmp/identity.json" ]; then \
|
|
mkdir -p "$node_data_dir"
|
|
mv /tmp/identity.json "$node_data_dir/"
|
|
fi
|
|
cp "/usr/local/share/tezos/alphanet_version" \
|
|
"$node_dir/alphanet_version"
|
|
fi
|
|
|
|
mkdir -p "$node_data_dir"
|
|
|
|
if [ ! -f "$node_data_dir/config.json" ]; then
|
|
echo "Configuring the node..."
|
|
"$node" config init \
|
|
--data-dir "$node_data_dir" \
|
|
--rpc-addr ":$NODE_RPC_PORT" \
|
|
"$@"
|
|
else
|
|
echo "Updating the node configuration..."
|
|
"$node" config update \
|
|
--data-dir "$node_data_dir" \
|
|
--rpc-addr ":$NODE_RPC_PORT" \
|
|
"$@"
|
|
fi
|
|
|
|
for i in "$@"; do
|
|
if [ "$i" = "--help" ] ; then exit 0; fi
|
|
done
|
|
|
|
# Generate a new identity if not present
|
|
|
|
if [ ! -f "$node_data_dir/identity.json" ]; then
|
|
echo "Generating a new node identity..."
|
|
"$node" identity generate "${IDENTITY_POW:-26}". \
|
|
--data-dir "$node_data_dir"
|
|
fi
|
|
|
|
configure_client
|
|
|
|
# Launching the node
|
|
|
|
exec "$node" run --data-dir "$node_data_dir"
|
|
|
|
}
|
|
|
|
launch_baker() {
|
|
configure_client
|
|
wait_for_the_node_to_be_bootstraped
|
|
exec "$baker" --base-dir "$client_dir" \
|
|
--addr "$NODE_HOST" --port "$NODE_RPC_PORT" \
|
|
run with local node "$node_data_dir" "$@"
|
|
}
|
|
|
|
launch_endorser() {
|
|
configure_client
|
|
wait_for_the_node_to_be_bootstraped
|
|
exec "$endorser" --base-dir "$client_dir" \
|
|
--addr "$NODE_HOST" --port "$NODE_RPC_PORT" \
|
|
run "$@"
|
|
}
|
|
|
|
launch_accuser() {
|
|
configure_client
|
|
wait_for_the_node_to_be_bootstraped
|
|
exec "$accuser" --base-dir "$client_dir" \
|
|
--addr "$NODE_HOST" --port "$NODE_RPC_PORT" \
|
|
run "$@"
|
|
}
|