From 062823fa31e8806c27c105ae855571ab42256ce4 Mon Sep 17 00:00:00 2001 From: Alex Rea Date: Mon, 12 Aug 2024 12:40:44 +0100 Subject: [PATCH 1/4] First pass at dev environment for proxy colonies --- docker/colony-cdapp-dev-env-network | 4 +- docker/colony-cdapp-dev-env-network-remote | 17 +++++++ ...ony-cdapp-dev-env-network-wormhole-relayer | 33 +++++++++++++ .../colony-cdapp-dev-env-orchestration.yaml | 47 ++++++++++++++++++ docker/files/network-remote/run.sh.base | 17 +++++++ .../network-wormhole-relayer/run.sh.base | 48 +++++++++++++++++++ docker/files/network/run.sh.base | 2 +- package.json | 6 ++- 8 files changed, 170 insertions(+), 4 deletions(-) create mode 100644 docker/colony-cdapp-dev-env-network-remote create mode 100644 docker/colony-cdapp-dev-env-network-wormhole-relayer create mode 100644 docker/files/network-remote/run.sh.base create mode 100644 docker/files/network-wormhole-relayer/run.sh.base diff --git a/docker/colony-cdapp-dev-env-network b/docker/colony-cdapp-dev-env-network index 682a3d1f053..82f2048ef71 100644 --- a/docker/colony-cdapp-dev-env-network +++ b/docker/colony-cdapp-dev-env-network @@ -1,6 +1,6 @@ FROM colony-cdapp-dev-env/base:latest -ENV NETWORK_HASH=3f8df23173f840226fb8da42547e12664f10c290 +ENV NETWORK_HASH=4c3f6981329d46341cb8dea57746224e2d7c38eb # Declare volumes to set up metadata VOLUME [ "/colonyCDapp/amplify/mock-data" ] @@ -33,6 +33,8 @@ RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | b # Install required network dependencies RUN pnpm i --frozen-lockfile +RUN npx hardhat compile + # Initialize the justification tree cache # To avoid the error spewed by the miner at startup RUN echo "{}" > ./packages/reputation-miner/justificationTreeCache.json diff --git a/docker/colony-cdapp-dev-env-network-remote b/docker/colony-cdapp-dev-env-network-remote new file mode 100644 index 00000000000..255ec87d630 --- /dev/null +++ b/docker/colony-cdapp-dev-env-network-remote @@ -0,0 +1,17 @@ +FROM colony-cdapp-dev-env/network:latest +# Add dependencies from the host +# Note: these are listed individually so that if they change, they won't affect +# the build of the other images +ADD docker/files/network-remote/run.sh.base /colonyCDappBackend/run.sh + +WORKDIR /colonyCDappBackend + +# Open up ports to the docker image +# Ganache +EXPOSE 8545 + +# Make the run script executable +RUN chmod +x ./run.sh + +# Battlecruiser Operational! +CMD [ "./run.sh" ] diff --git a/docker/colony-cdapp-dev-env-network-wormhole-relayer b/docker/colony-cdapp-dev-env-network-wormhole-relayer new file mode 100644 index 00000000000..3f880ebf52e --- /dev/null +++ b/docker/colony-cdapp-dev-env-network-wormhole-relayer @@ -0,0 +1,33 @@ +FROM colony-cdapp-dev-env/network:latest +# Add dependencies from the host +# Note: these are listed individually so that if they change, they won't affect +# the build of the other images +ADD docker/files/network-wormhole-relayer/run.sh.base /colonyCDappBackend/run.sh + +WORKDIR /colonyCDappBackend + +# Open up ports to the docker image +# Ganache +# EXPOSE 8545 + +RUN apt-get update +RUN apt-get install -y ca-certificates curl +RUN install -m 0755 -d /etc/apt/keyrings +RUN curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc +RUN chmod a+r /etc/apt/keyrings/docker.asc + +# Add the repository to Apt sources: +RUN echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \ + $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ + tee /etc/apt/sources.list.d/docker.list > /dev/null +RUN apt-get update +RUN apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin + +RUN cd ./colonyNetwork/lib/wormhole/sdk/js-proto-node && npm i + +# Make the run script executable +RUN chmod +x ./run.sh + +# Battlecruiser Operational! +CMD [ "./run.sh" ] diff --git a/docker/colony-cdapp-dev-env-orchestration.yaml b/docker/colony-cdapp-dev-env-orchestration.yaml index d70736b51ca..0aa216319b9 100644 --- a/docker/colony-cdapp-dev-env-orchestration.yaml +++ b/docker/colony-cdapp-dev-env-orchestration.yaml @@ -26,6 +26,40 @@ services: amplify-setup: condition: service_completed_successfully + network-contracts-remote: + container_name: 'network-remote' + image: colony-cdapp-dev-env/network-remote:latest + volumes: + - 'amplify-mock-data:/colonyCDapp/amplify/mock-data' + ports: + - '8546:8545' + healthcheck: + test: ['CMD', 'curl', '-f', 'http://localhost:8545'] + interval: 5s + retries: 1000 + depends_on: + amplify-setup: + condition: service_completed_successfully + environment: + CHAIN_ID: 265669101 + + network-contracts-remote-2: + container_name: 'network-remote-2' + image: colony-cdapp-dev-env/network-remote:latest + volumes: + - 'amplify-mock-data:/colonyCDapp/amplify/mock-data' + ports: + - '8547:8545' + healthcheck: + test: ['CMD', 'curl', '-f', 'http://localhost:8545'] + interval: 5s + retries: 1000 + depends_on: + amplify-setup: + condition: service_completed_successfully + environment: + CHAIN_ID: 265669102 + reputation-monitor: container_name: 'monitor' image: colony-cdapp-dev-env/reputation-monitor:latest @@ -95,6 +129,19 @@ services: network-contracts: condition: service_healthy + wormhole-relayer: + container_name: 'wormhole-relayer' + image: colony-cdapp-dev-env/network-wormhole-relayer:latest + volumes: + - '/var/run/docker.sock:/var/run/docker.sock' + depends_on: + network-contracts: + condition: service_healthy + network-contracts-remote: + condition: service_healthy + network-contracts-remote-2: + condition: service_healthy + volumes: amplify-backend: amplify-mock-data: diff --git a/docker/files/network-remote/run.sh.base b/docker/files/network-remote/run.sh.base new file mode 100644 index 00000000000..06beccf9be2 --- /dev/null +++ b/docker/files/network-remote/run.sh.base @@ -0,0 +1,17 @@ +#!/bin/bash + +cd colonyNetwork + +# Ganache + +# Uncomment the line below if you need ganache to run in verbose mode +# sed -i 's/100000000000000000000" >\/dev\/null 2>&1/100000000000000000000" --verbose/g' scripts/start-blockchain-client.sh +# sed -i 's/--db $DBPATH/--db $DBPATH --server.host "0.0.0.0"/g' scripts/start-blockchain-client.sh +pnpm run start:blockchain:client + +# Colony Network Contracts + +npx hardhat compile +npx hardhat deploy-proxy-network --network development + +sleep infinity \ No newline at end of file diff --git a/docker/files/network-wormhole-relayer/run.sh.base b/docker/files/network-wormhole-relayer/run.sh.base new file mode 100644 index 00000000000..0c3c343cd2a --- /dev/null +++ b/docker/files/network-wormhole-relayer/run.sh.base @@ -0,0 +1,48 @@ +#!/bin/bash +cd ./colonyNetwork/lib/wormhole/ && DOCKER_BUILDKIT=1 docker build --target node-export -f Dockerfile.proto -o type=local,dest=. . +cd ../.. && npx tsc --esModuleInterop --downlevelIteration ./scripts/mockGuardianSpy.ts + +cd ./lib/safe-contracts + +# This is the private key for the first account we create on ganache, so has ether to pay for gas fees +rm -rf ./deployments/custom +PK="0x0355596cdb5e5242ad082c4fe3f8bbe48c9dba843fe1f99dd8272f487e70efae" NODE_URL=http://network:8545 npx hardhat deploy --network custom + +rm -rf ./deployments/custom +PK="0x0355596cdb5e5242ad082c4fe3f8bbe48c9dba843fe1f99dd8272f487e70efae" NODE_URL=http://network-remote:8545 npx hardhat deploy --network custom + +rm -rf ./deployments/custom +PK="0x0355596cdb5e5242ad082c4fe3f8bbe48c9dba843fe1f99dd8272f487e70efae" NODE_URL=http://network-remote-2:8545 npx hardhat deploy --network custom + +cd ../../ + +echo "const wormhole = require("@certusone/wormhole-sdk"); + +module.exports = { + chains: { + [wormhole.CHAIN_ID_ARBITRUM_SEPOLIA]: { + endpoints: ["http://localhost:8545"], + colonyBridgeAddress: "0x633899227A3BC1f79de097149E1E3C8097c07b1a", + payForGas: true, + evmChainId: 265669100, + }, + [wormhole.CHAIN_ID_SEPOLIA]: { + endpoints: ["http://localhost:8546"], + colonyBridgeAddress: "0x161944B5601a7d3004E20d4Ca823F710838Ea1be", + payForGas: true, + evmChainId: 265669101, + }, + [wormhole.CHAIN_ID_OPTIMISM_SEPOLIA]: { + endpoints: ["http://localhost:8547"], + colonyBridgeAddress: "0x161944B5601a7d3004E20d4Ca823F710838Ea1be", + payForGas: false, + evmChainId: 265669102, + }, + } + }, +}; +" > ./packages/wormhole-relayer/config.js + +node -e 'require("./scripts/setup-bridging-contracts.js").setupBridging("http://network:8545", ["http://network-remote:8545", "http://network-remote-2:8545"])' + +sleep infinity \ No newline at end of file diff --git a/docker/files/network/run.sh.base b/docker/files/network/run.sh.base index a831289454c..ea421a39166 100644 --- a/docker/files/network/run.sh.base +++ b/docker/files/network/run.sh.base @@ -7,7 +7,7 @@ cd colonyNetwork # Uncomment the line below if you need ganache to run in verbose mode # sed -i 's/100000000000000000000" >\/dev\/null 2>&1/100000000000000000000" --verbose/g' scripts/start-blockchain-client.sh # sed -i 's/--db $DBPATH/--db $DBPATH --server.host "0.0.0.0"/g' scripts/start-blockchain-client.sh -pnpm run start:blockchain:client & +pnpm run start:blockchain:client # Colony Network Contracts diff --git a/package.json b/package.json index 0e1ac7f8486..1322d1ed298 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,8 @@ "scripts": { "docker:build:base": "DOCKER_BUILDKIT=1 docker build --build-arg AMAZON_ARCH_FLAG=$(bash scripts/amazon-arch-flag.sh) --tag colony-cdapp-dev-env/base --file ./docker/colony-cdapp-dev-env-base .", "docker:build:network": "DOCKER_BUILDKIT=1 docker build --tag colony-cdapp-dev-env/network --file ./docker/colony-cdapp-dev-env-network .", + "docker:build:network-remote": "DOCKER_BUILDKIT=1 docker build --tag colony-cdapp-dev-env/network-remote --file ./docker/colony-cdapp-dev-env-network-remote .", + "docker:build:network-wormhole-relayer": "DOCKER_BUILDKIT=1 docker build --tag colony-cdapp-dev-env/network-wormhole-relayer --file ./docker/colony-cdapp-dev-env-network-wormhole-relayer .", "docker:build:monitor": "DOCKER_BUILDKIT=1 docker build --tag colony-cdapp-dev-env/reputation-monitor --file ./docker/colony-cdapp-dev-env-reputation-monitor .", "docker:build:mocking": "DOCKER_BUILDKIT=1 docker build --tag colony-cdapp-dev-env/mocking --file ./docker/colony-cdapp-dev-env-mocking .", "docker:build:ingestor": "DOCKER_BUILDKIT=1 docker build --ulimit nofile=5000:5000 --tag colony-cdapp-dev-env/block-ingestor --file ./docker/colony-cdapp-dev-env-block-ingestor .", @@ -13,8 +15,8 @@ "docker:build:safe": "DOCKER_BUILDKIT=1 docker build --tag colony-cdapp-dev-env/safe --file ./docker/colony-cdapp-dev-env-safe .", "docker:build:auth": "DOCKER_BUILDKIT=1 docker build --tag colony-cdapp-dev-env/auth-proxy --file ./docker/colony-cdapp-dev-env-auth-proxy .", "docker:build:bridge": "DOCKER_BUILDKIT=1 docker build --tag colony-cdapp-dev-env/mocking --file ./docker/colony-cdapp-dev-env-mocking .", - "docker:build:core": "npm run docker:build:base && npm run docker:build:network && npm run docker:build:monitor && npm run docker:build:ingestor && npm run docker:build:amplify && npm run docker:build:auth", - "docker:build:all": "npm run docker:build:base && npm run docker:build:network && npm run docker:build:monitor && npm run docker:build:ingestor && npm run docker:build:amplify && npm run docker:build:auth && npm run docker:build:mocking", + "docker:build:core": "npm run docker:build:base && npm run docker:build:network && npm run docker:build:network-remote && npm run docker:build:network-wormhole-relayer && npm run docker:build:monitor && npm run docker:build:mocking && npm run docker:build:ingestor && npm run docker:build:amplify && npm run docker:build:auth", + "docker:build:all": "npm run docker:build:base && npm run docker:build:network && npm run docker:build:network-remote && && npm run docker:build:network-wormhole-relayer && npm run docker:build:monitor && npm run docker:build:mocking && npm run docker:build:ingestor && npm run docker:build:amplify && npm run docker:build:safe && npm run docker:build:auth", "docker:compose:core": "docker compose --file docker/colony-cdapp-dev-env-orchestration.yaml", "docker:compose:all": "docker compose --file docker/colony-cdapp-dev-env-orchestration-all.yaml", "dev": "npm run watch-amplify & npm run generate-notifications-dev-key && npm run docker:build:core && npm run docker:compose:core up -- --force-recreate -V", From 89d965d509bf3b4c581275e0eb48aff732c6265d Mon Sep 17 00:00:00 2001 From: Alex Rea Date: Wed, 20 Nov 2024 16:02:59 +0000 Subject: [PATCH 2/4] Give hardhat:cmd ability to execute on other chains --- scripts/hardhat-cmd.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/scripts/hardhat-cmd.js b/scripts/hardhat-cmd.js index 5c230676861..8f88693c9c5 100755 --- a/scripts/hardhat-cmd.js +++ b/scripts/hardhat-cmd.js @@ -3,7 +3,7 @@ const { exec } = require('node:child_process'); const parseArgs = require('minimist') -strings = ['hash', 'data', 'from', 'to']; +strings = ['hash', 'data', 'from', 'to', 'network']; const argv = parseArgs(process.argv.slice(2), { string: strings }); const action = argv._[0]; @@ -11,11 +11,16 @@ delete argv._; let cmdFlags = ''; for (const [k, v] of Object.entries(argv)) { - cmdFlags += `--${k} ${v} `; + if (k !== 'network') { // network is an argument for docker, not hardhat + cmdFlags += `--${k} ${v} `; + } }; +let network = argv.network || 'network'; + + const hardhatCmd = `npx hardhat ${action} ${cmdFlags.trim()}`; -const fullCmd = `docker exec -t network bash -c \"cd colonyNetwork && ${hardhatCmd}\"`; +const fullCmd = `docker exec -t ${network} bash -c \"cd colonyNetwork && ${hardhatCmd}\"`; exec(fullCmd, (error, stdout, stderr) => { if (error) { From 86d1d821e52a39ff31ff805e89d6d9adadd46dce Mon Sep 17 00:00:00 2001 From: Alex Rea Date: Mon, 2 Dec 2024 15:10:51 +0000 Subject: [PATCH 3/4] Add and expose WormholeScan mock API --- docker/colony-cdapp-dev-env-network | 2 +- docker/colony-cdapp-dev-env-orchestration.yaml | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/docker/colony-cdapp-dev-env-network b/docker/colony-cdapp-dev-env-network index 82f2048ef71..cd59480b840 100644 --- a/docker/colony-cdapp-dev-env-network +++ b/docker/colony-cdapp-dev-env-network @@ -1,6 +1,6 @@ FROM colony-cdapp-dev-env/base:latest -ENV NETWORK_HASH=4c3f6981329d46341cb8dea57746224e2d7c38eb +ENV NETWORK_HASH=6c475e08c2acaaf8d2da99e6dafaf8bfe4771ce6 # Declare volumes to set up metadata VOLUME [ "/colonyCDapp/amplify/mock-data" ] diff --git a/docker/colony-cdapp-dev-env-orchestration.yaml b/docker/colony-cdapp-dev-env-orchestration.yaml index 0aa216319b9..3300cbf5254 100644 --- a/docker/colony-cdapp-dev-env-orchestration.yaml +++ b/docker/colony-cdapp-dev-env-orchestration.yaml @@ -134,6 +134,8 @@ services: image: colony-cdapp-dev-env/network-wormhole-relayer:latest volumes: - '/var/run/docker.sock:/var/run/docker.sock' + ports: + - '3007:3001' depends_on: network-contracts: condition: service_healthy From 4dd7668fca7c11638439c2fdf90830899b45c964 Mon Sep 17 00:00:00 2001 From: Alex Rea Date: Wed, 22 Jan 2025 12:09:30 +0000 Subject: [PATCH 4/4] Spy shouldn't wait for txs in dev environment --- docker/colony-cdapp-dev-env-network | 2 +- docker/files/network-wormhole-relayer/run.sh.base | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/colony-cdapp-dev-env-network b/docker/colony-cdapp-dev-env-network index cd59480b840..9835013e173 100644 --- a/docker/colony-cdapp-dev-env-network +++ b/docker/colony-cdapp-dev-env-network @@ -1,6 +1,6 @@ FROM colony-cdapp-dev-env/base:latest -ENV NETWORK_HASH=6c475e08c2acaaf8d2da99e6dafaf8bfe4771ce6 +ENV NETWORK_HASH=095066406a0a025d97352a77c265d78bd2bddcb2 # Declare volumes to set up metadata VOLUME [ "/colonyCDapp/amplify/mock-data" ] diff --git a/docker/files/network-wormhole-relayer/run.sh.base b/docker/files/network-wormhole-relayer/run.sh.base index 0c3c343cd2a..9180a2189f9 100644 --- a/docker/files/network-wormhole-relayer/run.sh.base +++ b/docker/files/network-wormhole-relayer/run.sh.base @@ -43,6 +43,6 @@ module.exports = { }; " > ./packages/wormhole-relayer/config.js -node -e 'require("./scripts/setup-bridging-contracts.js").setupBridging("http://network:8545", ["http://network-remote:8545", "http://network-remote-2:8545"])' +node -e 'require("./scripts/setup-bridging-contracts.js").setupBridging("http://network:8545", ["http://network-remote:8545", "http://network-remote-2:8545"], false)' sleep infinity \ No newline at end of file