solana/web3.js/bin/localnet.sh

168 lines
3.3 KiB
Bash
Raw Normal View History

2018-11-11 08:13:20 -08:00
#!/usr/bin/env bash
set -e
2018-10-02 20:51:19 -07:00
channel=$(
cd "$(dirname "$0")";
node -p '
let p;
try {
p = require("@solana/web3.js/package.json");
} catch (err) {
p = require("../package.json");
}
p["solana-channel"]
'
)
2018-10-02 20:51:19 -07:00
usage() {
exitcode=0
if [[ -n "$1" ]]; then
exitcode=1
echo "Error: $*"
fi
cat <<EOF
2018-10-13 11:21:20 -07:00
usage: $0 [update|up|down|logs|deploy] [command-specific options]
2018-10-02 20:51:19 -07:00
Operate a local testnet
update - Update the network image from dockerhub.com
up - Start the network
down - Stop the network
logs - Display network logging
2018-10-13 11:21:20 -07:00
deploy - Deploy a native program.
2018-10-02 20:51:19 -07:00
logs-specific options:
-f - Follow log output
update/up-specific options:
edge - Update/start the "edge" channel network
beta - Update/start the "beta" channel network
-n - Optional Docker network to join
Default channel: $channel
2018-10-02 20:51:19 -07:00
down-specific options:
none
2018-10-13 11:21:20 -07:00
deploy-specific options:
program - The program to deploy.
Note that deployments are discarded on network stop
2018-10-02 20:51:19 -07:00
EOF
exit $exitcode
}
[[ -n $1 ]] || usage
cmd="$1"
shift
2018-10-02 20:51:19 -07:00
docker --version || usage "It appears that docker is not installed"
case $cmd in
update)
if [[ -n $1 ]]; then
channel="$1"
2018-10-02 20:51:19 -07:00
fi
[[ $channel = edge || $channel = beta ]] || usage "Invalid channel: $channel"
(
set -x
docker pull solanalabs/solana:"$channel"
)
;;
up)
if [[ -n $1 ]]; then
channel="$1"
2018-10-02 20:51:19 -07:00
fi
[[ $channel = edge || $channel = beta ]] || usage "Invalid channel: $channel"
if [[ $2 = -n ]]; then
[[ -n $3 ]] || usage "Invalid -n argument"
network="$3"
fi
2018-10-02 20:51:19 -07:00
(
set -x
RUST_LOG=${RUST_LOG:-solana=warn,solana_bpf=info,solana_jsonrpc=info,solana::rpc=info,solana_fullnode=info,solana::drone=info,solana::bank=info,solana::banking_stage=info,solana::system_program=info}
2018-10-14 13:05:05 -07:00
2018-10-02 20:51:19 -07:00
docker run \
--detach \
--name solana-localnet \
--network "$network" \
2018-10-02 20:51:19 -07:00
--rm \
--publish 8899:8899 \
2018-10-26 20:49:13 -07:00
--publish 8900:8900 \
2018-10-02 20:51:19 -07:00
--tty \
2018-10-14 13:05:05 -07:00
--env RUST_LOG="$RUST_LOG" \
2018-10-02 20:51:19 -07:00
solanalabs/solana:"$channel"
2018-10-25 18:13:32 -07:00
for _ in 1 2 3 4 5; do
if curl \
-X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1, "method":"getTransactionCount"}' \
http://localhost:8899; then
break;
fi
sleep 1
done
2018-10-02 20:51:19 -07:00
)
;;
down)
(
set -x
if [[ -n "$(docker ps --filter "name=^solana-localnet$" -q)" ]]; then
docker stop --time 0 solana-localnet
fi
2018-10-02 20:51:19 -07:00
)
;;
logs)
follow=false
if [[ -n $1 ]]; then
if [[ $1 = "-f" ]]; then
follow=true
else
usage "Unknown argument: $1"
fi
fi
while $follow; do
if [[ -n $(docker ps -q -f name=solana-localnet) ]]; then
(
set -x
docker logs solana-localnet -f
) || true
fi
sleep 1
done
2018-10-02 20:51:19 -07:00
(
set -x
docker logs solana-localnet
2018-10-02 20:51:19 -07:00
)
;;
2018-10-13 11:21:20 -07:00
deploy)
program=$1
[[ -n $program ]] || usage
[[ -f $program ]] || usage "file does not exist: $program"
basename=$(basename "$program")
if docker exec solana-localnet test -f /usr/bin/"$basename"; then
echo "Error: $basename has already been deployed"
exit 1
fi
(
set -x
docker cp "$program" solana-localnet:/usr/bin/
)
docker exec solana-localnet ls -l /usr/bin/"$basename"
echo "$basename deployed successfully"
;;
2018-10-02 20:51:19 -07:00
*)
usage "Unknown command: $cmd"
esac
exit 0