diff --git a/Dockerfile b/Dockerfile index b43c2ca501..570a08ec4d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,7 +20,10 @@ RUN go mod download # Copy the rest of the source code and build the application COPY . . -RUN make install +RUN expected_major_version=$(grep 'const releaseVersion = ' app/setup_handlers.go | awk -F'"' '{print $2}') && \ + make install VERSION="${expected_major_version}" && \ + git_hash=$(git rev-parse --short HEAD) && \ + echo -n "${expected_major_version}-${git_hash}" > /go/delivery/zeta-node/expected_major_version # Run Stage FROM alpine:3.18 @@ -46,6 +49,7 @@ RUN apk --no-cache add git jq bash curl nano vim tmux python3 libusb-dev linux-h # Copy the binaries from the build stage COPY --from=builder /go/bin/zetaclientd /usr/local/bin/zetaclientd COPY --from=builder /go/bin/zetacored /usr/local/bin/zetacored +COPY --from=builder /go/delivery/zeta-node/expected_major_version /scripts/expected_major_version # Set the working directory WORKDIR /usr/local/bin diff --git a/Makefile b/Makefile index b679c488d3..14f911e420 100644 --- a/Makefile +++ b/Makefile @@ -287,14 +287,68 @@ release: ### Local Mainnet Development ### ############################################################################### -mainnet-zetarpc-node: - cd contrib/mainnet/zetacored && DOCKER_TAG=$(DOCKER_TAG) docker-compose up +#BTC +start-bitcoin-node-mainnet: + cd contrib/rpc/bitcoind-mainnet && DOCKER_TAG=$(DOCKER_TAG) docker-compose up -mainnet-bitcoind-node: - cd contrib/mainnet/bitcoind && DOCKER_TAG=$(DOCKER_TAG) docker-compose up +stop-bitcoin-node-mainnet: + cd contrib/rpc/bitcoind-mainnet && DOCKER_TAG=$(DOCKER_TAG) docker-compose down + +clean-bitcoin-node-mainnet: + cd contrib/rpc/bitcoind-mainnet && DOCKER_TAG=$(DOCKER_TAG) docker-compose down -v + +#ETHEREUM +start-eth-node-mainnet: + cd contrib/rpc/ethereum && DOCKER_TAG=$(DOCKER_TAG) docker-compose up + +stop-eth-node-mainnet: + cd contrib/rpc/ethereum && DOCKER_TAG=$(DOCKER_TAG) docker-compose down + +clean-eth-node-mainnet: + cd contrib/rpc/ethereum && DOCKER_TAG=$(DOCKER_TAG) docker-compose down -v + +#ZETA + +#FULL-NODE-RPC-FROM-BUILT-IMAGE +start-zetacored-rpc-mainnet: + cd contrib/rpc/zetacored && bash init_docker_compose.sh mainnet image $(DOCKER_TAG) + +stop-zetacored-rpc-mainnet: + cd contrib/rpc/zetacored && bash kill_docker_compose.sh mainnet false + +clean-zetacored-rpc-mainnet: + cd contrib/rpc/zetacored && bash kill_docker_compose.sh mainnet true + +#FULL-NODE-RPC-FROM-BUILT-IMAGE +start-zetacored-rpc-testnet: + cd contrib/rpc/zetacored && bash init_docker_compose.sh athens3 image $(DOCKER_TAG) + +stop-zetacored-rpc-testnet: + cd contrib/rpc/zetacored && bash kill_docker_compose.sh athens3 false + +clean-zetacored-rpc-testnet: + cd contrib/rpc/zetacored && bash kill_docker_compose.sh athens3 true + +#FULL-NODE-RPC-FROM-LOCAL-BUILD +start-zetacored-rpc-mainnet-localbuild: + cd contrib/rpc/zetacored && bash init_docker_compose.sh mainnet localbuild $(DOCKER_TAG) + +stop-zetacored-rpc-mainnet-localbuild: + cd contrib/rpc/zetacored && bash kill_docker_compose.sh mainnet false + +clean-zetacored-rpc-mainnet-localbuild: + cd contrib/rpc/zetacored && bash kill_docker_compose.sh mainnet true + +#FULL-NODE-RPC-FROM-LOCAL-BUILD +start-zetacored-rpc-testnet-localbuild: + cd contrib/rpc/zetacored && bash init_docker_compose.sh athens3 localbuild $(DOCKER_TAG) + +stop-zetacored-rpc-testnet-localbuild: + cd contrib/rpc/zetacored && bash kill_docker_compose.sh athens3 false + +clean-zetacored-rpc-testnet-localbuild: + cd contrib/rpc/zetacored && bash kill_docker_compose.sh athens3 true -athens3-zetarpc-node: - cd contrib/athens3/zetacored && DOCKER_TAG=$(DOCKER_TAG) docker-compose up ############################################################################### ### Debug Tools ### diff --git a/changelog.md b/changelog.md index 3688b1f89c..bb2f5e881c 100644 --- a/changelog.md +++ b/changelog.md @@ -2,6 +2,9 @@ ## Unreleased +### CI +* [2070](https://github.com/zeta-chain/node/pull/2070) - Added commands to build binaries from the working branch as a live full node rpc to test non-governance changes. + ### Refactor * [2032](https://github.com/zeta-chain/node/pull/2032) - improve some general structure of the ZetaClient codebase diff --git a/contrib/athens3/zetacored/docker-compose.yml b/contrib/athens3/zetacored/docker-compose.yml deleted file mode 100644 index cee5b695bc..0000000000 --- a/contrib/athens3/zetacored/docker-compose.yml +++ /dev/null @@ -1,42 +0,0 @@ -version: '3.8' -services: - zetachain_mainnet_rpc: - platform: linux/amd64 - #This will build the binary from the GIT_REF you are locally on. -# build: -# context: ../../.. -# dockerfile: Dockerfile - image: zetachain/zetacored:${DOCKER_TAG:-ubuntu-v14.0.1} - environment: - DAEMON_HOME: "/root/.zetacored" - NETWORK: athens3 - #RESTORE_TYPE=snapshot/snapshot-archive/statesync - RESTORE_TYPE: "snapshot" - SNAPSHOT_API: https://snapshots.zetachain.com - TRUST_HEIGHT_DIFFERENCE_STATE_SYNC: 40000 - CHAIN_ID: "athens_7001-1" - VISOR_NAME: "cosmovisor" - DAEMON_NAME: "zetacored" - DAEMON_ALLOW_DOWNLOAD_BINARIES: "false" - DAEMON_RESTART_AFTER_UPGRADE: "true" - UNSAFE_SKIP_BACKUP: "true" - CLIENT_DAEMON_NAME: "zetaclientd" - CLIENT_DAEMON_ARGS: "" - CLIENT_SKIP_UPGRADE: "true" - CLIENT_START_PROCESS: "false" - MONIKER: local-test - RE_DO_START_SEQUENCE: "false" - ports: - - "26656:26656" - - "1317:1317" - - "8545:8545" - - "8546:8546" - - "26657:26657" - - "9090:9090" - - "9091:9091" - volumes: - - zetacored_data_athens3:/root/.zetacored/ - entrypoint: bash /scripts/start.sh - -volumes: - zetacored_data_athens3: diff --git a/contrib/docker-scripts/start.sh b/contrib/docker-scripts/start.sh index d60f131c2c..6e2cebaf1f 100644 --- a/contrib/docker-scripts/start.sh +++ b/contrib/docker-scripts/start.sh @@ -236,7 +236,35 @@ function move_zetacored_binaries { } function start_network { - ${VISOR_NAME} version + if [ "${IS_LOCAL_DEVELOPMENT}" == "true" ]; then + cp /usr/local/bin/zetacored ${DAEMON_HOME}/cosmovisor/genesis/bin/zetacored + find /root/.zetacored/cosmovisor/upgrades/ -type f -path "*/bin/zetacored" -exec cp /usr/local/bin/zetacored {} \; + fi + expected_major_version=$(cat /scripts/expected_major_version | cut -d '-' -f 1) + VISOR_VERSION=v$(${VISOR_NAME} version | tail -n 1 | tr -d '(devel)' | tr -d '\n') + DAEMON_VERSION=$(${DAEMON_NAME} version) + VISOR_MAJOR_VERSION=$(echo $VISOR_VERSION | grep -o '^v[0-9]*') + DAEMON_MAJOR_VERSION=$(echo $DAEMON_VERSION | grep -o '^v[0-9]*') + + logt "EXPECTED_VERSION_WITH_HASH: $(cat /scripts/expected_major_version | cut -d '-' -f 1)" + logt "EXPECTED_MAJOR_VERSION: ${expected_major_version}" + logt "VISOR_VERSION: ${VISOR_VERSION}" + logt "DAEMON_VERSION: ${DAEMON_VERSION}" + logt "VISOR_MAJOR_VERSION: ${VISOR_MAJOR_VERSION}" + logt "DAEMON_MAJOR_VERSION: ${DAEMON_MAJOR_VERSION}" + + if [ "$VISOR_MAJOR_VERSION" != "$expected_major_version" ] || [ "$DAEMON_MAJOR_VERSION" != "$expected_major_version" ]; then + logt "One or both versions don't match the expected major release version: $expected_major_version" + else + logt "Both versions match the expected major release version: $expected_major_version" + fi + + if [ "$VISOR_VERSION" != "$DAEMON_VERSION" ]; then + logt "cosmovisor version doesn't appear to match your daemon version. Start ${DAEMON_NAME}" + else + logt "cosmovisor version match your daemon version. Start ${VISOR_NAME}" + fi + ${VISOR_NAME} run start --home ${DAEMON_HOME} \ --log_level info \ --moniker ${MONIKER} \ diff --git a/contrib/mainnet/zetacored/docker-compose.yml b/contrib/mainnet/zetacored/docker-compose.yml deleted file mode 100644 index ed75d0254c..0000000000 --- a/contrib/mainnet/zetacored/docker-compose.yml +++ /dev/null @@ -1,45 +0,0 @@ -version: '3.8' -services: - zetachain_mainnet_rpc: - platform: linux/amd64 - #This will build the binary from the GIT_REF you are locally on. - # build: - # context: ../../.. - # dockerfile: Dockerfile - image: zetachain/zetacored:${DOCKER_TAG:-ubuntu-v14.0.1} - container_name: zetachain_mainnet_rpc - environment: - DAEMON_HOME: "/root/.zetacored" - NETWORK: mainnet - #RESTORE_TYPE=snapshot/snapshot-archive/statesync - RESTORE_TYPE: "snapshot" - SNAPSHOT_API: https://snapshots.zetachain.com - TRUST_HEIGHT_DIFFERENCE_STATE_SYNC: 40000 - CHAIN_ID: "zetachain_7000-1" - VISOR_NAME: "cosmovisor" - DAEMON_NAME: "zetacored" - DAEMON_ALLOW_DOWNLOAD_BINARIES: "false" - DAEMON_RESTART_AFTER_UPGRADE: "true" - UNSAFE_SKIP_BACKUP: "true" - CLIENT_DAEMON_NAME: "zetaclientd" - CLIENT_DAEMON_ARGS: "" - CLIENT_SKIP_UPGRADE: "true" - CLIENT_START_PROCESS: "false" - MONIKER: local-test - RE_DO_START_SEQUENCE: "false" - ports: - - "26656:26656" - - "1317:1317" - - "8545:8545" - - "8546:8546" - - "26657:26657" - - "9090:9090" - - "9091:9091" - volumes: - - zetacored_data_mainnet:/root/.zetacored/ - entrypoint: bash /scripts/start.sh - #for debugging - #entrypoint: ["/bin/sh", "-c"] - #command: ["while true; do sleep 86400; done"] -volumes: - zetacored_data_mainnet: diff --git a/contrib/mainnet/bitcoind/docker-compose.yml b/contrib/rpc/bitcoind-mainnet/docker-compose.yml similarity index 100% rename from contrib/mainnet/bitcoind/docker-compose.yml rename to contrib/rpc/bitcoind-mainnet/docker-compose.yml diff --git a/contrib/rpc/ethereum/Dockerfile b/contrib/rpc/ethereum/Dockerfile new file mode 100644 index 0000000000..25451ea475 --- /dev/null +++ b/contrib/rpc/ethereum/Dockerfile @@ -0,0 +1,8 @@ +# Use the official Go Ethereum image +FROM ethereum/client-go:latest + +# Expose the ports (8545 for JSON-RPC, 8546 for WebSocket, 30303 for P2P) +EXPOSE 8545 8546 30303 + +# Set the entrypoint to start Geth +ENTRYPOINT ["geth"] diff --git a/contrib/rpc/ethereum/docker-compose.yml b/contrib/rpc/ethereum/docker-compose.yml new file mode 100644 index 0000000000..c2e433d22e --- /dev/null +++ b/contrib/rpc/ethereum/docker-compose.yml @@ -0,0 +1,38 @@ +version: '3.8' +services: + lighthouse: + image: sigp/lighthouse:latest + command: lighthouse --network mainnet beacon --http --checkpoint-sync-url https://sync.invis.tools + ports: + - "5052:5052" + volumes: + - type: volume + source: lighthouse_data + target: /root/.lighthouse + geth: + build: . + ports: + - "18545:18545" # JSON-RPC + - "18546:18546" # WebSocket + - "30303:30303" # P2P Network + volumes: + - type: volume + source: ethereum_data + target: /root/.ethereum + command: + - "--http" + - "--http.addr" + - "0.0.0.0" + - "--http.vhosts=*" + - "--http.api=admin,eth,debug,miner,net,txpool,personal,web3" + - "--ws" + - "--ws.addr" + - "0.0.0.0" + - "--ws.api=admin,eth,debug,miner,net,txpool,personal,web3" + - "--ws.origins=*" + - "--maxpeers=50" + - "--syncmode=snap" + +volumes: + ethereum_data: + lighthouse_data: diff --git a/contrib/rpc/zetacored/docker-compose.yml b/contrib/rpc/zetacored/docker-compose.yml new file mode 100644 index 0000000000..fa0f8caacb --- /dev/null +++ b/contrib/rpc/zetacored/docker-compose.yml @@ -0,0 +1,36 @@ +version: '3.8' +services: + -=name=-: + platform: linux/amd64 + -=image_block=- + container_name: "zetachain_${NETWORK:-mainnet}_rpc" + environment: + DAEMON_HOME: "${DAEMON_HOME:-/root/.zetacored}" + NETWORK: ${NETWORK:-mainnet} + RESTORE_TYPE: "${RESTORE_TYPE:-snapshot}" + SNAPSHOT_API: ${SNAPSHOT_API:-https://snapshots.zetachain.com} + TRUST_HEIGHT_DIFFERENCE_STATE_SYNC: ${TRUST_HEIGHT_DIFFERENCE_STATE_SYNC:-40000} + CHAIN_ID: "${CHAIN_ID:-zetachain_7000-1}" + VISOR_NAME: "${VISOR_NAME:-cosmovisor}" + DAEMON_NAME: "${DAEMON_NAME:-zetacored}" + DAEMON_ALLOW_DOWNLOAD_BINARIES: "${DAEMON_ALLOW_DOWNLOAD_BINARIES:-false}" + DAEMON_RESTART_AFTER_UPGRADE: "${DAEMON_RESTART_AFTER_UPGRADE:-true}" + UNSAFE_SKIP_BACKUP: "${UNSAFE_SKIP_BACKUP:-true}" + MONIKER: ${MONIKER:-mainnet-docker-rpc} + #If this is true it will erase everything and start over from scratch. + RE_DO_START_SEQUENCE: "${RE_DO_START_SEQUENCE:-false}" + #If this is true it will build the dockerfile and use binary from built docker file instead of remote docker image for local development testing on non-governance upgrades. + IS_LOCAL_DEVELOPMENT: "${IS_LOCAL_DEVELOPMENT:-false}" + ports: + - "26656:26656" + - "1317:1317" + - "8545:8545" + - "8546:8546" + - "26657:26657" + - "9090:9090" + - "9091:9091" + volumes: + - -=name=-:/root/.zetacored/ + entrypoint: bash /scripts/start.sh +volumes: + -=name=-: diff --git a/contrib/rpc/zetacored/init_docker_compose.sh b/contrib/rpc/zetacored/init_docker_compose.sh new file mode 100644 index 0000000000..04e9f6857c --- /dev/null +++ b/contrib/rpc/zetacored/init_docker_compose.sh @@ -0,0 +1,65 @@ +#!/bin/bash + +NETWORK=${1} +TYPE=${2} +DOCKER_TAG=${3} + +if [ "$TYPE" == "image" ]; then + echo "Source Environment File." + SOURCE_FILE_NAME="networks/.${NETWORK}" + if [ ! -f "$SOURCE_FILE_NAME" ]; then + echo "Environment file $SOURCE_FILE_NAME does not exist." + exit 1 + fi + source ${SOURCE_FILE_NAME} +elif [ "$TYPE" == "localbuild" ]; then + echo "Source Environment File." + SOURCE_FILE_NAME="networks/.${NETWORK}-localbuild" + if [ ! -f "$SOURCE_FILE_NAME" ]; then + echo "Environment file $SOURCE_FILE_NAME does not exist." + exit 1 + fi + source ${SOURCE_FILE_NAME} +fi + +# Define the path to the Docker Compose file +FILE_PATH="${NETWORK}-docker-compose.yml" +cp docker-compose.yml ${FILE_PATH} + +# Determine the appropriate Docker Compose configuration based on TYPE +if [ "$TYPE" == "image" ]; then + IMAGE_BLOCK="image: zetachain/zetacored:\${DOCKER_TAG:-ubuntu-v14.0.1.0}" + NAME="zetacored-rpc-${NETWORK}" +elif [ "$TYPE" == "localbuild" ]; then + IMAGE_BLOCK=$(cat << 'EOF' +build: + context: ../../.. + dockerfile: Dockerfile +EOF +) + NAME="zetacored-rpc-${NETWORK}-localbuild" +else + echo "Invalid TYPE. Please specify 'image' or 'localbuild'." + exit 1 +fi + +IMAGE_BLOCK_ESCAPED=$(echo "$IMAGE_BLOCK" | sed 's/[&/]/\\&/g; s/$/\\/') +IMAGE_BLOCK_ESCAPED=${IMAGE_BLOCK_ESCAPED%?} + +# Replace placeholders in the Docker Compose file +sed -i '' "s|-=name=-|$NAME|g" $FILE_PATH +sed -i '' "s|-=image_block=-|$IMAGE_BLOCK_ESCAPED|g" $FILE_PATH + +echo "DEBUG ENV VARS" +printenv +echo "================" + +echo "Placeholders have been replaced in $FILE_PATH." +cat $FILE_PATH +echo "================" + +if [ "$TYPE" == "image" ]; then + docker-compose -f ${FILE_PATH} up +elif [ "$TYPE" == "localbuild" ]; then + docker-compose -f ${FILE_PATH} up --build +fi diff --git a/contrib/rpc/zetacored/kill_docker_compose.sh b/contrib/rpc/zetacored/kill_docker_compose.sh new file mode 100644 index 0000000000..5d6a2c192d --- /dev/null +++ b/contrib/rpc/zetacored/kill_docker_compose.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +NETWORK=${1} +CLEAN=${2} +FILE_PATH="${NETWORK}-docker-compose.yml" + +if [ "${CLEAN}" == "true" ]; then + docker-compose -f ${FILE_PATH} down -v + rm -rf ${FILE_PATH} +else + docker-compose -f ${FILE_PATH} down + rm -rf ${FILE_PATH} +fi + diff --git a/contrib/rpc/zetacored/networks/.athens3 b/contrib/rpc/zetacored/networks/.athens3 new file mode 100644 index 0000000000..d89a99033d --- /dev/null +++ b/contrib/rpc/zetacored/networks/.athens3 @@ -0,0 +1,14 @@ +export DAEMON_HOME="/root/.zetacored" +export NETWORK=athens3 +export RESTORE_TYPE="snapshot" +export SNAPSHOT_API=https://snapshots.zetachain.com +export TRUST_HEIGHT_DIFFERENCE_STATE_SYNC=40000 +export CHAIN_ID="athens_7001-1" +export VISOR_NAME="cosmovisor" +export DAEMON_NAME="zetacored" +export DAEMON_ALLOW_DOWNLOAD_BINARIES="false" +export DAEMON_RESTART_AFTER_UPGRADE="true" +export UNSAFE_SKIP_BACKUP="true" +export MONIKER=testnet-docker-rpc +export RE_DO_START_SEQUENCE="false" +export IS_LOCAL_DEVELOPMENT="false" \ No newline at end of file diff --git a/contrib/rpc/zetacored/networks/.athens3-localbuild b/contrib/rpc/zetacored/networks/.athens3-localbuild new file mode 100644 index 0000000000..b8e0acb6ad --- /dev/null +++ b/contrib/rpc/zetacored/networks/.athens3-localbuild @@ -0,0 +1,14 @@ +export DAEMON_HOME="/root/.zetacored" +export NETWORK=athens3 +export RESTORE_TYPE="snapshot" +export SNAPSHOT_API=https://snapshots.zetachain.com +export TRUST_HEIGHT_DIFFERENCE_STATE_SYNC=40000 +export CHAIN_ID="athens_7001-1" +export VISOR_NAME="cosmovisor" +export DAEMON_NAME="zetacored" +export DAEMON_ALLOW_DOWNLOAD_BINARIES="false" +export DAEMON_RESTART_AFTER_UPGRADE="false" +export UNSAFE_SKIP_BACKUP="true" +export MONIKER=testnet-docker-rpc +export RE_DO_START_SEQUENCE="false" +export IS_LOCAL_DEVELOPMENT="true" \ No newline at end of file diff --git a/contrib/rpc/zetacored/networks/.mainnet b/contrib/rpc/zetacored/networks/.mainnet new file mode 100644 index 0000000000..4b7420b539 --- /dev/null +++ b/contrib/rpc/zetacored/networks/.mainnet @@ -0,0 +1,14 @@ +export DAEMON_HOME="/root/.zetacored" +export NETWORK=mainnet +export RESTORE_TYPE="snapshot" +export SNAPSHOT_API=https://snapshots.zetachain.com +export TRUST_HEIGHT_DIFFERENCE_STATE_SYNC=40000 +export CHAIN_ID="zetachain_7000-1" +export VISOR_NAME="cosmovisor" +export DAEMON_NAME="zetacored" +export DAEMON_ALLOW_DOWNLOAD_BINARIES="false" +export DAEMON_RESTART_AFTER_UPGRADE="true" +export UNSAFE_SKIP_BACKUP="true" +export MONIKER=mainnet-docker-rpc +export RE_DO_START_SEQUENCE="false" +export IS_LOCAL_DEVELOPMENT="false" diff --git a/contrib/rpc/zetacored/networks/.mainnet-localbuild b/contrib/rpc/zetacored/networks/.mainnet-localbuild new file mode 100644 index 0000000000..371e6fe215 --- /dev/null +++ b/contrib/rpc/zetacored/networks/.mainnet-localbuild @@ -0,0 +1,14 @@ +export DAEMON_HOME="/root/.zetacored" +export NETWORK=mainnet +export RESTORE_TYPE="snapshot" +export SNAPSHOT_API=https://snapshots.zetachain.com +export TRUST_HEIGHT_DIFFERENCE_STATE_SYNC=40000 +export CHAIN_ID="zetachain_7000-1" +export VISOR_NAME="cosmovisor" +export DAEMON_NAME="zetacored" +export DAEMON_ALLOW_DOWNLOAD_BINARIES="false" +export DAEMON_RESTART_AFTER_UPGRADE="false" +export UNSAFE_SKIP_BACKUP="true" +export MONIKER=mainnet-docker-rpc +export RE_DO_START_SEQUENCE="false" +export IS_LOCAL_DEVELOPMENT="true" diff --git a/readme.md b/readme.md index eb1438682a..c20c2aa54e 100644 --- a/readme.md +++ b/readme.md @@ -139,182 +139,67 @@ Once the release is approved the pipeline will continue and will publish the rel This guide details deploying Zetacored nodes on both ZetaChain mainnet and Athens3 (testnet), alongside setting up a Bitcoin node for mainnet. The setup utilizes Docker Compose with environment variables for a streamlined deployment process. -### Deploying Zetacored Nodes - -#### Launching a Node - -**For Mainnet:** -- Use the `make` command with a specified Docker tag to initiate a mainnet Zetacored node. - ```shell - make mainnet-zetarpc-node DOCKER_TAG=ubuntu-v14.0.1 - ``` - -**For Athens3 (Testnet):** -- Similar command structure for Athens3, ensuring the correct Docker tag is used. - ```shell - make testnet-zetarpc-node DOCKER_TAG=ubuntu-v14.0.1 - ``` - -#### Modifying the Sync Type - -**To change the sync type for your node:** -- Edit docker-compose.yml in contrib/{NETWORK}/zetacored/. -- Set RESTORE_TYPE to your desired method (snapshot, snapshot-archive, statesync). - -#### Zetacored Environment Variables - -| Variable | Description | -|----------|-------------| -| `DAEMON_HOME` | Daemon's home directory (`/root/.zetacored`). | -| `NETWORK` | Network identifier: `mainnet` or `athens3` (for testnet). | -| `RESTORE_TYPE` | Node restoration method: `snapshot`, `snapshot-archive`, `statesync`. | -| `SNAPSHOT_API` | API URL for fetching snapshots. | -| `TRUST_HEIGHT_DIFFERENCE_STATE_SYNC` | Trust height difference for state synchronization. | -| `CHAIN_ID` | Chain ID for the network. | -| `VISOR_NAME` | Visor software name, typically `cosmovisor`. | -| `DAEMON_NAME` | Daemon software name, `zetacored`. | -| `DAEMON_ALLOW_DOWNLOAD_BINARIES` | Enable daemon to download binaries. | -| `DAEMON_RESTART_AFTER_UPGRADE` | Restart daemon after software upgrade. | -| `UNSAFE_SKIP_BACKUP` | Skip backup during potentially unsafe operations. | -| `CLIENT_DAEMON_NAME` | Client daemon name, such as `zetaclientd`. | -| `CLIENT_DAEMON_ARGS` | Extra arguments for the client daemon. | -| `CLIENT_SKIP_UPGRADE` | Skip client software upgrade. | -| `CLIENT_START_PROCESS` | Begin client process start-up. | -| `MONIKER` | Node's moniker or nickname. | -| `RE_DO_START_SEQUENCE` | Restart node setup from scratch if necessary. | +Here's a comprehensive documentation using markdown tables to cover all the `make` commands for managing Zetacored and Bitcoin nodes, including where to modify the environment variables in Docker Compose configurations. + +### Zetacored / BTC Node Deployment and Management + +#### Commands Overview for Zetacored + +| Environment | Action | Command | Docker Compose Location | +|-------------------------------------|-----------------------------|---------------------------------------------------------------|------------------------------------------| +| **Mainnet** | Start Bitcoin Node | `make start-bitcoin-node-mainnet` | `contrib/rpc/bitcoind-mainnet` | +| **Mainnet** | Stop Bitcoin Node | `make stop-bitcoin-node-mainnet` | `contrib/rpc/bitcoind-mainnet` | +| **Mainnet** | Clean Bitcoin Node Data | `make clean-bitcoin-node-mainnet` | `contrib/rpc/bitcoind-mainnet` | +| **Mainnet** | Start Ethereum Node | `make start-eth-node-mainnet` | `contrib/rpc/ethereum` | +| **Mainnet** | Stop Ethereum Node | `make stop-eth-node-mainnet` | `contrib/rpc/ethereum` | +| **Mainnet** | Clean Ethereum Node Data | `make clean-eth-node-mainnet` | `contrib/rpc/ethereum` | +| **Mainnet** | Start Zetacored Node | `make start-mainnet-zetarpc-node DOCKER_TAG=ubuntu-v14.0.1` | `contrib/rpc/zetacored` | +| **Mainnet** | Stop Zetacored Node | `make stop-mainnet-zetarpc-node` | `contrib/rpc/zetacored` | +| **Mainnet** | Clean Zetacored Node Data | `make clean-mainnet-zetarpc-node` | `contrib/rpc/zetacored` | +| **Testnet (Athens3)** | Start Zetacored Node | `make start-testnet-zetarpc-node DOCKER_TAG=ubuntu-v14.0.1` | `contrib/rpc/zetacored` | +| **Testnet (Athens3)** | Stop Zetacored Node | `make stop-testnet-zetarpc-node` | `contrib/rpc/zetacored` | +| **Testnet (Athens3)** | Clean Zetacored Node Data | `make clean-testnet-zetarpc-node` | `contrib/rpc/zetacored` | +| **Mainnet Local Build** | Start Zetacored Node | `make start-zetacored-rpc-mainnet-localbuild` | `contrib/rpc/zetacored` | +| **Mainnet Local Build** | Stop Zetacored Node | `make stop-zetacored-rpc-mainnet-localbuild` | `contrib/rpc/zetacored` | +| **Mainnet Local Build** | Clean Zetacored Node Data | `make clean-zetacored-rpc-mainnet-localbuild` | `contrib/rpc/zetacored` | +| **Testnet Local Build (Athens3)** | Start Zetacored Node | `make start-zetacored-rpc-testnet-localbuild` | `contrib/rpc/zetacored` | +| **Testnet Local Build (Athens3)** | Stop Zetacored Node | `make stop-zetacored-rpc-testnet-localbuild` | `contrib/rpc/zetacored` | +| **Testnet Local Build (Athens3)** | Clean Zetacored Node Data | `make clean-zetacored-rpc-testnet-localbuild` | `contrib/rpc/zetacored` | + ### Bitcoin Node Setup for Mainnet -**Restoring a BTC Watcher Node:** -- To deploy a Bitcoin mainnet node, specify the `DOCKER_TAG` for your Docker image. - ```shell - make mainnet-bitcoind-node DOCKER_TAG=36-mainnet - ``` - -#### Bitcoin Node Environment Variables - -| Variable | Description | -|----------|-------------| -| `bitcoin_username` | Username for Bitcoin RPC. | -| `bitcoin_password` | Password for Bitcoin RPC. | -| `NETWORK_HEIGHT_URL` | URL to fetch the latest block height. | -| `WALLET_NAME` | Name of the Bitcoin wallet. | -| `WALLET_ADDRESS` | Bitcoin wallet address for transactions. | -| `SNAPSHOT_URL` | URL for downloading the blockchain snapshot. | -| `SNAPSHOT_RESTORE` | Enable restoration from snapshot. | -| `CLEAN_SNAPSHOT` | Clean existing data before restoring snapshot. | -| `DOWNLOAD_SNAPSHOT` | Download the snapshot if not present. | - -### Docker Compose Configurations - -#### Zetacored Mainnet - -```yaml -version: '3.8' -services: - zetachain_mainnet_rpc: - platform: linux/amd64 - image: zetachain/zetacored:${DOCKER_TAG:-ubuntu-v14.0.1} - environment: - DAEMON_HOME: "/root/.zetacored" - NETWORK: mainnet - RESTORE_TYPE: "snapshot" - SNAPSHOT_API: https://snapshots.zetachain.com - TRUST_HEIGHT_DIFFERENCE_STATE_SYNC: 40000 - CHAIN_ID: "zetachain_7000-1" - VISOR_NAME: "cosmovisor" - DAEMON_NAME: "zetacored" - DAEMON_ALLOW_DOWNLOAD_BINARIES: "false" - DAEMON_RESTART_AFTER_UPGRADE: "true" - UNSAFE_SKIP_BACKUP: "true" - CLIENT_DAEMON_NAME: "zetaclientd" - CLIENT_DAEMON_ARGS: "" - CLIENT_SKIP_UPGRADE: "true" - CLIENT_START_PROCESS: "false" - MONIKER: local-test - RE_DO_START_SEQUENCE: "false" - ports: - - "26656:26656" - - "1317:1317" - - "8545:8545" - - "8546:8546" - - "26657:26657" - - "9090:9090" - - "9091:9091" - volumes: - - - - zetacored_data_mainnet:/root/.zetacored/ - entrypoint: bash /scripts/start.sh -volumes: - zetacored_data_mainnet: -``` +#### Commands Overview for Bitcoin -#### Zetacored Athens3/Testnet - -```yaml -version: '3.8' -services: - zetachain_testnet_rpc: - platform: linux/amd64 - image: zetachain/zetacored:${DOCKER_TAG:-ubuntu-v14-testnet} - environment: - DAEMON_HOME: "/root/.zetacored" - NETWORK: athens3 - RESTORE_TYPE: "snapshot" - SNAPSHOT_API: https://snapshots.zetachain.com - TRUST_HEIGHT_DIFFERENCE_STATE_SYNC: 40000 - CHAIN_ID: "athens_7001-1" - VISOR_NAME: "cosmovisor" - DAEMON_NAME: "zetacored" - DAEMON_ALLOW_DOWNLOAD_BINARIES: "false" - DAEMON_RESTART_AFTER_UPGRADE: "true" - UNSAFE_SKIP_BACKUP: "true" - CLIENT_DAEMON_NAME: "zetaclientd" - CLIENT_DAEMON_ARGS: "" - CLIENT_SKIP_UPGRADE: "true" - CLIENT_START_PROCESS: "false" - MONIKER: local-test - RE_DO_START_SEQUENCE: "false" - ports: - - "26656:26656" - - "1317:1317" - - "8545:8545" - - "8546:8546" - - "26657:26657" - - "9090:9090" - - "9091:9091" - volumes: - - zetacored_data_athens3:/root/.zetacored/ - entrypoint: bash /scripts/start.sh -volumes: - zetacored_data_athens3: -``` +| Action | Command | Docker Compose Location | +|--------|---------|-------------------------| +| Start Node | `make start-mainnet-bitcoind-node DOCKER_TAG=36-mainnet` | `contrib/mainnet/bitcoind` | +| Stop Node | `make stop-mainnet-bitcoind-node` | `contrib/mainnet/bitcoind` | +| Clean Node Data | `make clean-mainnet-bitcoind-node` | `contrib/mainnet/bitcoind` | -#### Bitcoin Mainnet Node - -```yaml -version: '3' -services: - bitcoin: - image: zetachain/bitcoin:${DOCKER_TAG:-36-mainnet} - platform: linux/amd64 - environment: - - bitcoin_username=test - - bitcoin_password=test - - NETWORK_HEIGHT_URL=https://blockstream.info/api/blocks/tip/height - - WALLET_NAME=tssMainnet - - WALLET_ADDRESS=bc1qm24wp577nk8aacckv8np465z3dvmu7ry45el6y - - SNAPSHOT_URL=https://storage.googleapis.com/bitcoin-rpc-snapshots-prod/bitcoind-mainnet-2024-02-20-00-22-06.tar.gz - - SNAPSHOT_RESTORE=true - - CLEAN_SNAPSHOT=true - - DOWNLOAD_SNAPSHOT=true - volumes: - - bitcoin_data:/root/ - ports: - - 8332:8332 -volumes: - bitcoin_data: -``` +### Configuration Options + +#### Where to Modify Environment Variables + +The environment variables for both Zetacored and Bitcoin nodes are defined in the `docker-compose.yml` files located in the respective directories mentioned above. These variables control various operational aspects like the sync type, networking details, and client behavior. + +#### Example Environment Variables for Zetacored + +| Variable | Description | Example | +|----------|-------------|---------| +| `DAEMON_HOME` | Daemon's home directory | `/root/.zetacored` | +| `NETWORK` | Network identifier | `mainnet`, `athens3` | +| `CHAIN_ID` | Chain ID for the network | `zetachain_7000-1`, `athens_7001-1` | +| `RESTORE_TYPE` | Node restoration method | `snapshot`, `statesync` | +| `SNAPSHOT_API` | API URL for fetching snapshots | `https://snapshots.zetachain.com` | + +#### Example Environment Variables for Bitcoin + +| Variable | Description | Example | +|----------|-------------|---------| +| `bitcoin_username` | Username for Bitcoin RPC | `user` | +| `bitcoin_password` | Password for Bitcoin RPC | `pass` | +| `WALLET_NAME` | Name of the Bitcoin wallet | `tssMainnet` | +| `WALLET_ADDRESS` | Bitcoin wallet address for transactions | `bc1qm24wp577nk8aacckv8np465z3dvmu7ry45el6y` | -Replace placeholders in Docker Compose files and `make` commands with actual values appropriate for your deployment scenario. This complete setup guide is designed to facilitate the deployment and management of Zetacored and Bitcoin nodes in various environments. \ No newline at end of file +This detailed tabulation ensures all necessary commands and configurations are neatly organized, providing clarity on where to manage the settings and how to execute different operations for Zetacored and Bitcoin nodes across different environments.