README: add instructions for running a sandboxed node
This commit is contained in:
parent
d2ad611c3d
commit
e033176820
82
README.md
82
README.md
@ -76,20 +76,6 @@ download and install them from, eg,
|
|||||||
https://pkgs.org/download/libsodium18 and
|
https://pkgs.org/download/libsodium18 and
|
||||||
https://pkgs.org/download/libsodium-dev
|
https://pkgs.org/download/libsodium-dev
|
||||||
|
|
||||||
Running the node in a sandbox
|
|
||||||
-----------------------------
|
|
||||||
|
|
||||||
To run a single instance of a Tezos node in sandbox mode:
|
|
||||||
|
|
||||||
```
|
|
||||||
./tezos-node run --sandbox --rpc-addr localhost:8732 --data-dir /tmp/tezos-sandbox
|
|
||||||
```
|
|
||||||
|
|
||||||
This "sandboxed" node will not participate in the P2P network, but will accept
|
|
||||||
RPC from localhost on port 8732. See below from more details on the RPC
|
|
||||||
interface.
|
|
||||||
|
|
||||||
|
|
||||||
Running the node
|
Running the node
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
@ -149,6 +135,74 @@ with the following commands line:
|
|||||||
./tezos-node config update --data-dir "$dir" --net-addr localhost:9734
|
./tezos-node config update --data-dir "$dir" --net-addr localhost:9734
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Running the node in a sandbox
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
To run a 'localhost-only' instance of a Tezos network, we provide two
|
||||||
|
helper scripts:
|
||||||
|
|
||||||
|
- `./scripts/launch-sandboxed-node.sh`
|
||||||
|
- `./scripts/init-sandboxed-client.sh`
|
||||||
|
|
||||||
|
For instance, if you want to run local network with two nodes, in a
|
||||||
|
first terminal, the following command will initialize a node listening
|
||||||
|
for peers on port `19731` and listening for RPC on port `18731`.
|
||||||
|
|
||||||
|
```
|
||||||
|
./scripts/launch-sandboxed-node.sh 1
|
||||||
|
```
|
||||||
|
|
||||||
|
This node will store its data in a temporary directory which will be
|
||||||
|
removed when the node is killed.
|
||||||
|
|
||||||
|
To launch the second node, just run the following command, it will
|
||||||
|
listen on port `19739` and `18739`:
|
||||||
|
|
||||||
|
```
|
||||||
|
./scripts/launch-sandboxed-node.sh 9
|
||||||
|
```
|
||||||
|
|
||||||
|
You might replace `1` or `9` by any number in between if you want to
|
||||||
|
run more than two nodes. But, if you intend to run a single node
|
||||||
|
network, you might remove the spurious "Too few connections" warnings
|
||||||
|
by lowering the number of expected connection, by running the
|
||||||
|
following command instead:
|
||||||
|
|
||||||
|
```
|
||||||
|
./scripts/launch-sandboxed-node.sh 1 --connections 0
|
||||||
|
```
|
||||||
|
|
||||||
|
Once your node(s) is/are running, open a new terminal and initialize
|
||||||
|
the "sandboxed" client data:
|
||||||
|
|
||||||
|
```
|
||||||
|
eval `./scripts/init-sandboxed-client.sh 1`
|
||||||
|
```
|
||||||
|
|
||||||
|
It will initialize the client data in a temporary directory. It will
|
||||||
|
also defines in the current shell session an alias `tezos-client`
|
||||||
|
preconfigured for communicating the same-numbered node. For instance:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ tezos-client rpc call blocks/head/hash
|
||||||
|
{ "hash": "BLockGenesisGenesisGenesisGenesisGenesisGeneskvg68z" }
|
||||||
|
```
|
||||||
|
|
||||||
|
When you bootstrap a new network, the network is initialized with a
|
||||||
|
dummy economic protocol, called "genesis". If you want to run the same
|
||||||
|
protocol than the alphanet, `init-sandboxed-client` also defines an
|
||||||
|
alias `tezos-activate-alpha`, that you need to execute once for
|
||||||
|
activating the whole network. For instance:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ tezos-client rpc call blocks/head/protocol
|
||||||
|
{ "protocol": "ProtoGenesisGenesisGenesisGenesisGenesisGenesk612im" }
|
||||||
|
$ tezos-activate-alpha
|
||||||
|
Injected BMBcK869jaHQDc
|
||||||
|
$ tezos-client rpc call blocks/head/protocol
|
||||||
|
{ "protocol": "ProtoALphaALphaALphaALphaALphaALphaALphaALphaDdp3zK" }
|
||||||
|
```
|
||||||
|
|
||||||
Configuration options
|
Configuration options
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
|
@ -6,11 +6,17 @@ client="${client:=tezos-client -base-dir $client_dir}"
|
|||||||
## Waiter ##################################################################
|
## Waiter ##################################################################
|
||||||
|
|
||||||
wait_for_the_node_to_be_ready() {
|
wait_for_the_node_to_be_ready() {
|
||||||
|
local count=0
|
||||||
if $client rpc call blocks/head/hash >/dev/null 2>&1; then return; fi
|
if $client rpc call blocks/head/hash >/dev/null 2>&1; then return; fi
|
||||||
printf "Waiting for the node to initialize..."
|
printf "Waiting for the node to initialize..."
|
||||||
sleep 1
|
sleep 1
|
||||||
while ! $client rpc call blocks/head/hash >/dev/null 2>&1
|
while ! $client rpc call blocks/head/hash >/dev/null 2>&1
|
||||||
do
|
do
|
||||||
|
count=$((count+1))
|
||||||
|
if [ "$count" -ge 30 ]; then
|
||||||
|
echo " timeout."
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
printf "."
|
printf "."
|
||||||
sleep 1
|
sleep 1
|
||||||
done
|
done
|
||||||
@ -128,3 +134,44 @@ log_endorser() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
## Sandboxed client ########################################################
|
||||||
|
|
||||||
|
# key pairs from $src_dir/test/sandbox.json
|
||||||
|
|
||||||
|
BOOTSTRAP1_PUBLIC="edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav"
|
||||||
|
BOOTSTRAP1_SECRET="edskRuR1azSfboG86YPTyxrQgosh5zChf5bVDmptqLTb5EuXAm9rsnDYfTKhq7rDQujdn5WWzwUMeV3agaZ6J2vPQT58jJAJPi"
|
||||||
|
|
||||||
|
BOOTSTRAP2_PUBLIC="edpktzNbDAUjUk697W7gYg2CRuBQjyPxbEg8dLccYYwKSKvkPvjtV9"
|
||||||
|
BOOTSTRAP2_SECRET="edskRkJz4Rw2rM5NtabEWMbbg2bF4b1nfFajaqEuEk4SgU7eeDbym9gVQtBTbYo32WUg2zb5sNBkD1whRN7zX43V9bftBbtaKc"
|
||||||
|
|
||||||
|
BOOTSTRAP3_PUBLIC="edpkuTXkJDGcFd5nh6VvMz8phXxU3Bi7h6hqgywNFi1vZTfQNnS1RV"
|
||||||
|
BOOTSTRAP3_SECRET="edskS3qsqsNgdjUqeMsVcEwBn8dkZ5iDRz6aF21KhcCtRiAkWBypUSbicccR4Vgqm9UdW2Vabuos6seezqgbXTrmcbLUG4rdAC"
|
||||||
|
|
||||||
|
BOOTSTRAP4_PUBLIC="edpkuFrRoDSEbJYgxRtLx2ps82UdaYc1WwfS9sE11yhauZt5DgCHbU"
|
||||||
|
BOOTSTRAP4_SECRET="edskRg9qcPqaVQa6jXWNMU5p71tseSuR7NzozgqZ9URsVDi81wTyPJdFSBdeakobyHUi4Xgu61jgKRQvkhXrPmEdEUfiqfiJFL"
|
||||||
|
|
||||||
|
BOOTSTRAP5_PUBLIC="edpkv8EUUH68jmo3f7Um5PezmfGrRF24gnfLpH3sVNwJnV5bVCxL2n"
|
||||||
|
BOOTSTRAP5_SECRET="edskS7rLN2Df3nbS1EYvwJbWo4umD7yPM1SUeX7gp1WhCVpMFXjcCyM58xs6xsnTsVqHQmJQ2RxoAjJGedWfvFmjQy6etA3dgZ"
|
||||||
|
|
||||||
|
DICTATOR_SECRET="edskRhxswacLW6jF6ULavDdzwqnKJVS4UcDTNiCyiH6H8ZNnn2pmNviL7pRNz9kRxxaWQFzEQEcZExGHKbwmuaAcoMegj5T99z"
|
||||||
|
|
||||||
|
add_sandboxed_bootstrap_identities() {
|
||||||
|
|
||||||
|
${client} add public key bootstrap1 ${BOOTSTRAP1_PUBLIC}
|
||||||
|
${client} add secret key bootstrap1 ${BOOTSTRAP1_SECRET}
|
||||||
|
|
||||||
|
${client} add public key bootstrap2 ${BOOTSTRAP2_PUBLIC}
|
||||||
|
${client} add secret key bootstrap2 ${BOOTSTRAP2_SECRET}
|
||||||
|
|
||||||
|
${client} add public key bootstrap3 ${BOOTSTRAP3_PUBLIC}
|
||||||
|
${client} add secret key bootstrap3 ${BOOTSTRAP3_SECRET}
|
||||||
|
|
||||||
|
${client} add public key bootstrap4 ${BOOTSTRAP4_PUBLIC}
|
||||||
|
${client} add secret key bootstrap4 ${BOOTSTRAP4_SECRET}
|
||||||
|
|
||||||
|
${client} add public key bootstrap5 ${BOOTSTRAP5_PUBLIC}
|
||||||
|
${client} add secret key bootstrap5 ${BOOTSTRAP5_SECRET}
|
||||||
|
|
||||||
|
${client} add secret key dictator ${DICTATOR_SECRET}
|
||||||
|
|
||||||
|
}
|
||||||
|
58
scripts/init-sandboxed-client.sh
Executable file
58
scripts/init-sandboxed-client.sh
Executable file
@ -0,0 +1,58 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
script_dir="$(cd "$(dirname "$0")" && echo "$(pwd -P)/")"
|
||||||
|
src_dir="$(dirname "$script_dir")"
|
||||||
|
cd "$src_dir"
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
echo "Small script to initialize a client to a local and closed test network with a maximum of 9 nodes."
|
||||||
|
echo
|
||||||
|
echo "Usage: eval \`$0 <id>\`"
|
||||||
|
echo " where <id> should be an integer between 1 and 9."
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ $# -lt 1 ] || [ "$1" -le 0 ] || [ 10 -le "$1" ]; then
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
id="$1"
|
||||||
|
shift 1
|
||||||
|
|
||||||
|
rpc=$((18730 + id))
|
||||||
|
client_dir="$(mktemp -td tezos-client-XXXXX)"
|
||||||
|
client="./tezos-client -base-dir $client_dir -addr 127.0.0.1 -port $rpc"
|
||||||
|
|
||||||
|
. "$script_dir/client_lib.inc.sh"
|
||||||
|
|
||||||
|
add_sandboxed_bootstrap_identities | sed -e 's/^/## /' 1>&2
|
||||||
|
|
||||||
|
cat <<EOF
|
||||||
|
if type tezos-client-reset >/dev/null 2>&1 ; then tezos-client-reset; fi ;
|
||||||
|
alias tezos-client="$client" ;
|
||||||
|
alias tezos-activate-alpha="$client -block genesis activate protocol ProtoALphaALphaALphaALphaALphaALphaALphaALphaDdp3zK with fitness 1 and key dictator" ;
|
||||||
|
alias tezos-client-reset="rm -rf \"$client_dir\"; unalias tezos-client tezos-activate-alpha tezos-client-reset" ;
|
||||||
|
trap tezos-client-reset EXIT ;
|
||||||
|
EOF
|
||||||
|
|
||||||
|
(cat | sed -e 's/^/## /') 1>&2 <<EOF
|
||||||
|
|
||||||
|
The client is now properly initialized. In the rest of this shell
|
||||||
|
session, you might now run \`tezos-client\` to communicate with a
|
||||||
|
tezos node launched with \`launch-sandboxed-node $1\`. For instance:
|
||||||
|
|
||||||
|
tezos-client rpc call blocks/head/protocol
|
||||||
|
|
||||||
|
Note: if the current protocol version, as reported by the previous
|
||||||
|
command, is "ProtoGenesisGenesisGenesisGenesisGenesisGenesk612im", you
|
||||||
|
may have to activate in your "sandboxed network" the same economic
|
||||||
|
protocol than used by the alphanet by running:
|
||||||
|
|
||||||
|
tezos-activate-alpha
|
||||||
|
|
||||||
|
Warning: all the client data will be removed when you close this shell
|
||||||
|
or if you run this command a second time.
|
||||||
|
|
||||||
|
EOF
|
@ -1,79 +0,0 @@
|
|||||||
#! /bin/bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
script_dir="$(cd "$(dirname "$0")" && echo "$(pwd -P)/")"
|
|
||||||
src_dir="$(dirname "$script_dir")"
|
|
||||||
cd "$src_dir"
|
|
||||||
|
|
||||||
function usage() {
|
|
||||||
echo "Small script client to a local and closed test network with a maximum of 9 nodes."
|
|
||||||
echo
|
|
||||||
echo "Usage: $0 <id> [ bake [id] | endorse [id] | exec ... ]"
|
|
||||||
echo " where <id> should be an integer between 1 and 9."
|
|
||||||
}
|
|
||||||
|
|
||||||
if [ $# -lt 2 ] || [ "$1" -le 0 ] || [ 10 -le "$1" ]; then
|
|
||||||
usage
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
id="$1"
|
|
||||||
cmd="$2"
|
|
||||||
shift 2
|
|
||||||
|
|
||||||
rpc=$((18730 + id))
|
|
||||||
base_dir="/tmp/tezos-client-$rpc"
|
|
||||||
|
|
||||||
client="./tezos-client -base-dir $base_dir -addr 127.0.0.1 -port $rpc"
|
|
||||||
|
|
||||||
. "$script_dir/client_lib.inc.sh"
|
|
||||||
|
|
||||||
function cmd_bake() {
|
|
||||||
wait_for_the_node_to_be_ready
|
|
||||||
if [ $# -eq 0 ]; then
|
|
||||||
create_identity
|
|
||||||
create_account
|
|
||||||
fi
|
|
||||||
start_baker "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
function cmd_endorse() {
|
|
||||||
wait_for_the_node_to_be_ready
|
|
||||||
if [ $# -eq 0 ]; then
|
|
||||||
create_account
|
|
||||||
endorsement
|
|
||||||
fi
|
|
||||||
start_endorser "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
function cmd_exec() {
|
|
||||||
$client "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
function cmd_clear() {
|
|
||||||
rm -fr "$base_dir"
|
|
||||||
}
|
|
||||||
|
|
||||||
if [ ! -d "$base_dir" ] && [ "$cmd" != "clear" ]; then
|
|
||||||
$client bootstrap
|
|
||||||
fi
|
|
||||||
|
|
||||||
case $cmd in
|
|
||||||
bake)
|
|
||||||
cmd_bake "$@"
|
|
||||||
;;
|
|
||||||
endorse)
|
|
||||||
cmd_endorse "$@"
|
|
||||||
;;
|
|
||||||
exec)
|
|
||||||
cmd_exec "$@"
|
|
||||||
;;
|
|
||||||
clear)
|
|
||||||
cmd_clear
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
usage
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
@ -1,41 +0,0 @@
|
|||||||
#! /bin/sh
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
script_dir="$(cd "$(dirname "$0")" && echo "$(pwd -P)/")"
|
|
||||||
src_dir="$(dirname "$script_dir")"
|
|
||||||
cd "$src_dir"
|
|
||||||
|
|
||||||
if [ $# -lt 1 ] || [ "$1" -le 0 ] || [ 10 -le "$1" ]; then
|
|
||||||
echo "Small script to launch local and closed test network with a maximum of 9 nodes."
|
|
||||||
echo
|
|
||||||
echo "Usage: $0 <id>"
|
|
||||||
echo " where <id> should be an integer between 1 and 9."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
id="$1"
|
|
||||||
shift 1
|
|
||||||
|
|
||||||
port=$((19730 + id))
|
|
||||||
rpc=$((18730 + id))
|
|
||||||
expected_pow=10
|
|
||||||
data_dir="$(mktemp -td tezos-node-XXXXX)"
|
|
||||||
peers="--no-bootstrap-peers $(seq -f '--peer localhost:1973%.f' 1 9) --closed"
|
|
||||||
node="$src_dir/tezos-node"
|
|
||||||
|
|
||||||
cleanup () {
|
|
||||||
set +e
|
|
||||||
echo Cleaning up...
|
|
||||||
rm -rf "$data_dir"
|
|
||||||
}
|
|
||||||
trap cleanup EXIT INT
|
|
||||||
|
|
||||||
$node config init \
|
|
||||||
--data-dir "$data_dir" \
|
|
||||||
--net-addr ":$port" \
|
|
||||||
--rpc-addr "[::]:$rpc" \
|
|
||||||
--expected-pow "$expected_pow" \
|
|
||||||
--connections 2 $peers
|
|
||||||
$node identity generate "$expected_pow" --data-dir "$data_dir"
|
|
||||||
$node run --data-dir "$data_dir" "$@"
|
|
@ -1,25 +1,42 @@
|
|||||||
#!/usr/bin/env bash
|
#! /bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
script_dir="$(cd "$(dirname "$0")" && echo "$(pwd -P)/")"
|
script_dir="$(cd "$(dirname "$0")" && echo "$(pwd -P)/")"
|
||||||
export TZPATH="$(dirname $script_dir)"
|
src_dir="$(dirname "$script_dir")"
|
||||||
|
cd "$src_dir"
|
||||||
|
|
||||||
. $TZPATH/test/test_utils.sh
|
if [ $# -lt 1 ] || [ "$1" -le 0 ] || [ 10 -le "$1" ]; then
|
||||||
|
echo "Small script to launch local and closed test network with a maximum of 9 nodes."
|
||||||
|
echo
|
||||||
|
echo "Usage: $0 <id>"
|
||||||
|
echo " where <id> should be an integer between 1 and 9."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
start_sandboxed_node
|
id="$1"
|
||||||
sleep 3
|
shift 1
|
||||||
|
|
||||||
activate_alpha |& sed 's/^/## /' > /dev/stderr
|
port=$((19730 + id))
|
||||||
|
rpc=$((18730 + id))
|
||||||
|
expected_pow="${expected_pow:-0.0}"
|
||||||
|
node_dir="$(mktemp -td tezos-node-XXXXX)"
|
||||||
|
peers="--no-bootstrap-peers $(seq -f '--peer localhost:1973%.f' 1 9) --closed"
|
||||||
|
node="$src_dir/tezos-node"
|
||||||
|
sandbox_param="--sandbox=$script_dir/sandbox.json"
|
||||||
|
|
||||||
trap - EXIT
|
cleanup () {
|
||||||
|
set +e
|
||||||
|
echo Cleaning up...
|
||||||
|
rm -rf "$node_dir"
|
||||||
|
}
|
||||||
|
trap cleanup EXIT INT
|
||||||
|
|
||||||
display_aliases
|
$node config init \
|
||||||
|
--data-dir "$node_dir" \
|
||||||
echo | sed 's/^/## /' 1>&2 <<EOF
|
--net-addr ":$port" \
|
||||||
|
--rpc-addr "[::]:$rpc" \
|
||||||
Successfully launched a sandboxed node.
|
--expected-pow "$expected_pow" \
|
||||||
|
--connections 2 $peers
|
||||||
Run 'tezos-client' to communicate with the sandboxed node.
|
$node identity generate "$expected_pow" --data-dir "$node_dir"
|
||||||
Run 'tezos-sandbox-stop' to stop the node and remove the sandbox data.
|
$node run --data-dir "$node_dir" "$sandbox_param" "$@"
|
||||||
|
|
||||||
EOF
|
|
||||||
|
Loading…
Reference in New Issue
Block a user