diff --git a/README.md b/README.md index 3af1261..d2df047 100644 --- a/README.md +++ b/README.md @@ -1 +1,5 @@ -# fixturenet-laconicd-stack \ No newline at end of file +# fixturenet-laconicd-stack + +Stack to run a laconicd fixturenet + +- [Stack documentation](stack-orchestrator/stacks/fixturenet-laconicd/README.md) diff --git a/stack-orchestrator/compose/docker-compose-fixturenet-laconicd.yml b/stack-orchestrator/compose/docker-compose-fixturenet-laconicd.yml new file mode 100644 index 0000000..6d92073 --- /dev/null +++ b/stack-orchestrator/compose/docker-compose-fixturenet-laconicd.yml @@ -0,0 +1,27 @@ +services: + laconicd: + restart: unless-stopped + image: cerc/laconic2d:local + command: ["sh", "/docker-entrypoint-scripts.d/create-fixturenet.sh"] + environment: + TEST_AUCTION_ENABLED: ${TEST_AUCTION_ENABLED:-false} + TEST_REGISTRY_EXPIRY: ${TEST_REGISTRY_EXPIRY:-false} + volumes: + - laconicd-data:/root/.laconicd + - ../config/fixturenet-laconicd/scripts/create-fixturenet.sh:/docker-entrypoint-scripts.d/create-fixturenet.sh + ports: + - "6060" + - "26657" + - "26656" + - "9473" + - "9090" + - "1317" + healthcheck: + test: ["CMD", "nc", "-vz", "127.0.0.1:26657"] + interval: 30s + timeout: 10s + retries: 10 + start_period: 10s + +volumes: + laconicd-data: diff --git a/stack-orchestrator/config/fixturenet-laconicd/scripts/create-fixturenet.sh b/stack-orchestrator/config/fixturenet-laconicd/scripts/create-fixturenet.sh new file mode 100644 index 0000000..4b9225e --- /dev/null +++ b/stack-orchestrator/config/fixturenet-laconicd/scripts/create-fixturenet.sh @@ -0,0 +1,101 @@ +#!/bin/bash + +KEY="alice" +CHAINID="laconic_9000-1" +MONIKER="localtestnet" +KEYRING="test" +LOGLEVEL="${LOGLEVEL:-info}" + +if [ "$1" == "clean" ] || [ ! -d "$HOME/.laconicd/data/blockstore.db" ]; then + # validate dependencies are installed + command -v jq > /dev/null 2>&1 || { + echo >&2 "jq not installed. More info: https://stedolan.github.io/jq/download/" + exit 1 + } + + # remove existing daemon and client + rm -rf $HOME/.laconicd/* + + if [ -n "`which make`" ]; then + make install + fi + + laconicd config set client chain-id $CHAINID + laconicd config set client keyring-backend $KEYRING + + # if $KEY exists it should be deleted + laconicd keys add $KEY --keyring-backend $KEYRING + + # Set moniker and chain-id for Ethermint (Moniker can be anything, chain-id must be an integer) + laconicd init $MONIKER --chain-id $CHAINID --default-denom photon + + update_genesis() { + jq "$1" $HOME/.laconicd/config/genesis.json > $HOME/.laconicd/config/tmp_genesis.json && + mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json + } + + if [[ "$TEST_REGISTRY_EXPIRY" == "true" ]]; then + echo "Setting timers for expiry tests." + + update_genesis '.app_state["registry"]["params"]["record_rent_duration"]="60s"' + update_genesis '.app_state["registry"]["params"]["authority_grace_period"]="60s"' + update_genesis '.app_state["registry"]["params"]["authority_rent_duration"]="60s"' + fi + + if [[ "$TEST_AUCTION_ENABLED" == "true" ]]; then + echo "Enabling auction and setting timers." + + update_genesis '.app_state["registry"]["params"]["authority_auction_enabled"]=true' + update_genesis '.app_state["registry"]["params"]["authority_rent_duration"]="60s"' + update_genesis '.app_state["registry"]["params"]["authority_grace_period"]="300s"' + update_genesis '.app_state["registry"]["params"]["authority_auction_commits_duration"]="60s"' + update_genesis '.app_state["registry"]["params"]["authority_auction_reveals_duration"]="60s"' + fi + + # increase block time (?) + update_genesis '.consensus["params"]["block"]["time_iota_ms"]="1000"' + + # Set gas limit in genesis + update_genesis '.consensus["params"]["block"]["max_gas"]="10000000"' + + # disable produce empty block + if [[ "$OSTYPE" == "darwin"* ]]; then + sed -i '' 's/create_empty_blocks = true/create_empty_blocks = false/g' $HOME/.laconicd/config/config.toml + else + sed -i 's/create_empty_blocks = true/create_empty_blocks = false/g' $HOME/.laconicd/config/config.toml + fi + + # Enable telemetry (prometheus metrics: http://localhost:1317/metrics?format=prometheus) + if [[ "$OSTYPE" == "darwin"* ]]; then + sed -i '' 's/enabled = false/enabled = true/g' $HOME/.laconicd/config/app.toml + sed -i '' 's/prometheus-retention-time = 0/prometheus-retention-time = 60/g' $HOME/.laconicd/config/app.toml + sed -i '' 's/prometheus = false/prometheus = true/g' $HOME/.laconicd/config/config.toml + else + sed -i 's/enabled = false/enabled = true/g' $HOME/.laconicd/config/app.toml + sed -i 's/prometheus-retention-time = 0/prometheus-retention-time = 60/g' $HOME/.laconicd/config/app.toml + sed -i 's/prometheus = false/prometheus = true/g' $HOME/.laconicd/config/config.toml + fi + + # Allocate genesis accounts (cosmos formatted addresses) + laconicd genesis add-genesis-account $KEY 100000000000000000000000000photon --keyring-backend $KEYRING + + # Sign genesis transaction + laconicd genesis gentx $KEY 1000000000000000000000photon --keyring-backend $KEYRING --chain-id $CHAINID + + # Collect genesis tx + laconicd genesis collect-gentxs + + # Run this to ensure everything worked and that the genesis file is setup correctly + laconicd genesis validate +else + echo "Using existing database at $HOME/.laconicd. To replace, run '`basename $0` clean'" +fi + +# Start the node (remove the --pruning=nothing flag if historical queries are not needed) +laconicd start \ + --pruning=nothing \ + --log_level $LOGLEVEL \ + --minimum-gas-prices=0.0001photon \ + --api.enable \ + --rpc.laddr="tcp://0.0.0.0:26657" \ + --gql-server --gql-playground diff --git a/stack-orchestrator/container-build/cerc-laconic2d/build.sh b/stack-orchestrator/container-build/cerc-laconic2d/build.sh new file mode 100755 index 0000000..2265c85 --- /dev/null +++ b/stack-orchestrator/container-build/cerc-laconic2d/build.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +# Build cerc/laconic2d +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh +docker build -t cerc/laconic2d:local ${build_command_args} ${CERC_REPO_BASE_DIR}/laconic2d diff --git a/stack-orchestrator/stacks/fixturenet-laconicd/README.md b/stack-orchestrator/stacks/fixturenet-laconicd/README.md new file mode 100644 index 0000000..1429121 --- /dev/null +++ b/stack-orchestrator/stacks/fixturenet-laconicd/README.md @@ -0,0 +1,87 @@ +# fixturenet-laconicd-stack + +## Setup + +* Clone the stack repo + + ```bash + laconic-so fetch-stack git.vdb.to/cerc-io/fixturenet-laconicd-stack + ``` + +* Clone required repositories: + + ```bash + laconic-so --stack ~/cerc/fixturenet-laconicd-stack/stack-orchestrator/stacks/fixturenet-laconicd setup-repositories + ``` + +* Build the container images: + + ```bash + laconic-so --stack ~/cerc/fixturenet-laconicd-stack/stack-orchestrator/stacks/fixturenet-laconicd build-containers + ``` + +## Create a deployment + +* Create a spec file for the deployment: + + ```bash + laconic-so --stack ~/cerc/fixturenet-laconicd-stack/stack-orchestrator/stacks/fixturenet-laconicd deploy init --output fixturenet-laconicd-spec.yml + ``` + +* Edit `network` in the spec file to map container ports to host ports as required: + + ```bash + ... + network: + ports: + laconicd: + - '6060:6060' + - '26657:26657' + - '26656:26656' + - '9473:9473' + - '9090:9090' + - '1317:1317' + ``` + +* Create a deployment from the spec file: + + ```bash + laconic-so --stack ~/cerc/fixturenet-laconicd-stack/stack-orchestrator/stacks/fixturenet-laconicd deploy create --spec-file fixturenet-laconicd-spec.yml --deployment-dir fixturenet-laconicd-deployment + ``` + +## Start the deployment + +```bash +laconic-so deployment --dir fixturenet-laconicd-deployment start +``` + +## Check status + +* To list down and monitor the running containers: + + ```bash + # With status + docker ps -a + + # Follow logs for laconicd container + laconic-so deployment --dir fixturenet-laconicd-deployment logs laconicd -f + ``` + +## Clean up + +* Stop all services running in the background: + + ```bash + # Stop the docker containers + laconic-so deployment --dir fixturenet-laconicd-deployment stop + ``` + +* To stop all services and also delete data: + + ```bash + # Stop the docker containers + laconic-so deployment --dir fixturenet-laconicd-deployment stop --delete-volumes + + # Remove deployment directory (deployment will have to be recreated for a re-run) + rm -r fixturenet-laconicd-deployment + ``` diff --git a/stack-orchestrator/stacks/fixturenet-laconicd/stack.yml b/stack-orchestrator/stacks/fixturenet-laconicd/stack.yml new file mode 100644 index 0000000..85c2ba1 --- /dev/null +++ b/stack-orchestrator/stacks/fixturenet-laconicd/stack.yml @@ -0,0 +1,9 @@ +version: "1.0" +name: fixturenet-laconicd +description: "A laconicd fixturenet" +repos: + - git.vdb.to/cerc-io/laconic2d +containers: + - cerc/laconic2d +pods: + - fixturenet-laconicd