From f27f515b1cefa5531a10fa635d23db07ab6c89b1 Mon Sep 17 00:00:00 2001 From: blockchainluffy Date: Sun, 29 Dec 2024 17:30:20 +0530 Subject: [PATCH 1/8] completed contract setup --- docker-service/.env | 2 + .../build-src/deploy_contracts/Dockerfile | 11 + .../build-src/setup-blockchain/Dockerfile | 6 + docker-service/docker-compose.yml | 350 ++++++++++++++++++ 4 files changed, 369 insertions(+) create mode 100644 docker-service/.env create mode 100644 docker-service/build-src/deploy_contracts/Dockerfile create mode 100644 docker-service/build-src/setup-blockchain/Dockerfile create mode 100644 docker-service/docker-compose.yml diff --git a/docker-service/.env b/docker-service/.env new file mode 100644 index 00000000..4c81a3ff --- /dev/null +++ b/docker-service/.env @@ -0,0 +1,2 @@ +# This is the default key for `geth --dev` +DEPLOY_KEY=0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d \ No newline at end of file diff --git a/docker-service/build-src/deploy_contracts/Dockerfile b/docker-service/build-src/deploy_contracts/Dockerfile new file mode 100644 index 00000000..078c6ca9 --- /dev/null +++ b/docker-service/build-src/deploy_contracts/Dockerfile @@ -0,0 +1,11 @@ +FROM alpine/git AS builder + +RUN date +RUN git clone --branch=shutter-api https://github.com/shutter-network/contracts /contracts + +FROM --platform=linux/amd64 ghcr.io/foundry-rs/foundry +WORKDIR /contracts +COPY --from=builder /contracts /contracts + +RUN forge build +ENTRYPOINT ["forge", "script"] \ No newline at end of file diff --git a/docker-service/build-src/setup-blockchain/Dockerfile b/docker-service/build-src/setup-blockchain/Dockerfile new file mode 100644 index 00000000..7bfffc74 --- /dev/null +++ b/docker-service/build-src/setup-blockchain/Dockerfile @@ -0,0 +1,6 @@ +# syntax=docker/dockerfile:1.4 +FROM --platform=linux/amd64 ghcr.io/foundry-rs/foundry + +WORKDIR /anvil + +ENTRYPOINT anvil --host 0.0.0.0 -p 8545 -b 2 \ No newline at end of file diff --git a/docker-service/docker-compose.yml b/docker-service/docker-compose.yml new file mode 100644 index 00000000..3806eac2 --- /dev/null +++ b/docker-service/docker-compose.yml @@ -0,0 +1,350 @@ +x-logging: &logging + driver: local + options: + max-file: 10 + +services: + rs-build: + build: + dockerfile: docker/build-src/rolling-shutter/Dockerfile + context: .. + image: rolling-shutter + command: "-v" + + db: + image: postgres + restart: always + environment: + POSTGRES_HOST_AUTH_METHOD: trust + volumes: + - ./data/db:/var/lib/postgresql/data + healthcheck: + test: pg_isready -U postgres + start_period: "30s" + start_interval: "2s" + logging: *logging + + blockchain: + build: + dockerfile: docker-service/build-src/setup-blockchain/Dockerfile + context: .. + restart: always + volumes: + - ./data/geth:/data + # currently health checks fail + healthcheck: + test: > + curl -sSf -X POST http://127.0.0.1:8545 -H "Content-Type: application/json" --data-raw '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[], "id": 1}' | grep -o '"result":"0x' + start_period: "30s" + start_interval: "2s" + logging: *logging + + deploy-contracts: + build: + dockerfile: docker-service/build-src/deploy_contracts/Dockerfile + context: .. + command: + - "./script/Deploy.service.s.sol" + - "--rpc-url" + - "http://blockchain:8545" + - "--broadcast" + environment: + DEPLOY_KEY: ${DEPLOY_KEY} + PRIVATE_KEY: ${DEPLOY_KEY} + # DEPLOY_CONF: /config/node-deploy.json + # KEYPER_SET_INDEX: 0 + volumes: + - ./data/deployments:/contracts/deployments + - ./config:/config + depends_on: + - blockchain + logging: *logging + + chain-0-validator: + image: rolling-shutter + restart: always + entrypoint: + - /rolling-shutter + - chain + volumes: + - ./data/chain-0-validator:/chain + - ./data/deployments:/deployments + command: "--config /chain/config/config.toml" + depends_on: + blockchain: + condition: service_healthy + logging: *logging + + chain-1-validator: + image: rolling-shutter + restart: always + entrypoint: + - /rolling-shutter + - chain + volumes: + - ./data/chain-1-validator:/chain + - ./data/deployments:/deployments + command: "--config /chain/config/config.toml" + depends_on: + blockchain: + condition: service_healthy + logging: *logging + + chain-2-validator: + image: rolling-shutter + restart: always + entrypoint: + - /rolling-shutter + - chain + volumes: + - ./data/chain-2-validator:/chain + - ./data/deployments:/deployments + command: "--config /chain/config/config.toml" + depends_on: + blockchain: + condition: service_healthy + logging: *logging + + chain-3-validator: + image: rolling-shutter + restart: always + entrypoint: + - /rolling-shutter + - chain + volumes: + - ./data/chain-3-validator:/chain + - ./data/deployments:/deployments + command: "--config /chain/config/config.toml" + depends_on: + blockchain: + condition: service_healthy + logging: *logging + + chain-seed: + image: rolling-shutter + restart: always + entrypoint: + - /rolling-shutter + - chain + volumes: + - ./data/chain-seed:/chain + command: "--config /chain/config/config.toml" + logging: *logging + + snapshot: + image: rolling-shutter + restart: always + entrypoint: + - /rolling-shutter + - snapshot + command: "--config /config/snapshot.toml" + volumes: + - ./config:/config + ports: + - "8754:8754" + - "9100:9100" + depends_on: + db: + condition: service_healthy + keyper-0: + condition: service_started + keyper-1: + condition: service_started + keyper-2: + condition: service_started + keyper-3: + condition: service_started + logging: *logging + labels: + caddy: live.snapshot.shutter.network + caddy.reverse_proxy: "{{upstreams 8754}}" + + bootnode-0: + image: rolling-shutter + restart: always + entrypoint: + - /rolling-shutter + - p2pnode + command: "--config /config/bootnode-0.toml" + volumes: + - ./config:/config + - ./data/deployments:/deployments + depends_on: + db: + condition: service_healthy + blockchain: + condition: service_healthy + logging: *logging + + bootnode-1: + image: rolling-shutter + restart: always + entrypoint: + - /rolling-shutter + - p2pnode + command: "--config /config/bootnode-1.toml" + volumes: + - ./config:/config + - ./data/deployments:/deployments + depends_on: + db: + condition: service_healthy + blockchain: + condition: service_healthy + logging: *logging + + keyper-0: + image: rolling-shutter + restart: always + entrypoint: + - /rolling-shutter + - "--loglevel=:debug,basichost:info,swarm:info,swarm2:info,net/identify:info,pubsub:info,p2p-config:info,upgrader:info" + - snapshotkeyper + command: "--config /config/keyper-0.toml" + volumes: + - ./config:/config + - ./data/deployments:/deployments + ports: + - "9200:9100" + depends_on: + db: + condition: service_healthy + bootnode-0: + condition: service_started + bootnode-1: + condition: service_started + blockchain: + condition: service_healthy + logging: *logging + + keyper-1: + image: rolling-shutter + restart: always + entrypoint: + - /rolling-shutter + - "--loglevel=:debug,basichost:info,swarm:info,swarm2:info,net/identify:info,pubsub:info,p2p-config:info,upgrader:info" + - snapshotkeyper + command: "--config /config/keyper-1.toml" + volumes: + - ./config:/config + - ./data/deployments:/deployments + ports: + - "9201:9100" + depends_on: + db: + condition: service_healthy + bootnode-0: + condition: service_started + bootnode-1: + condition: service_started + blockchain: + condition: service_healthy + logging: *logging + + keyper-2: + image: rolling-shutter + restart: always + entrypoint: + - /rolling-shutter + - "--loglevel=:debug,basichost:info,swarm:info,swarm2:info,net/identify:info,pubsub:info,p2p-config:info,upgrader:info" + - snapshotkeyper + command: "--config /config/keyper-2.toml" + volumes: + - ./config:/config + - ./data/deployments:/deployments + ports: + - "9202:9100" + depends_on: + db: + condition: service_healthy + bootnode-0: + condition: service_started + bootnode-1: + condition: service_started + blockchain: + condition: service_healthy + logging: *logging + + keyper-3: + image: rolling-shutter + restart: always + entrypoint: + - /rolling-shutter + - "--loglevel=:debug,basichost:info,swarm:info,swarm2:info,net/identify:info,pubsub:info,p2p-config:info,upgrader:info" + - snapshotkeyper + command: "--config /config/keyper-3.toml" + volumes: + - ./config:/config + - ./data/deployments:/deployments + depends_on: + db: + condition: service_healthy + bootnode-0: + condition: service_started + bootnode-1: + condition: service_started + blockchain: + condition: service_healthy + logging: *logging + + caddy: + image: lucaslorentz/caddy-docker-proxy:ci-alpine + restart: always + ports: + - "80:80" + - "443:443" + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - ./data/caddy:/data + profiles: + - live + environment: + CADDY_INGRESS_NETWORKS: rolling-shutter_default + labels: + caddy.email: devops@brainbot.com + logging: *logging + + dummyserver: + build: + dockerfile: docker/build-src/dummyserver/Dockerfile + context: .. + restart: always + profiles: + - dev + logging: *logging + + metrics: + build: + context: build-src/metrics + restart: always + ports: + - "8428:8428" + volumes: + - ./data/metrics:/victoria-metrics-data + profiles: + - dev + logging: *logging + + grafana: + image: grafana/grafana-oss + restart: always + expose: + - 3000 + ports: + - 3000:3000 + volumes: + - ./config/grafana/provisioning:/etc/grafana/provisioning + - ./data/grafana/data:/var/lib/grafana + profiles: + - dev + environment: + GF_SECURITY_ADMIN_USER: admin + GF_SECURITY_ADMIN_PASSWORD: admin + GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS: victoriametrics-datasource + GF_INSTALL_PLUGINS: https://github.com/VictoriaMetrics/grafana-datasource/releases/download/v0.8.1/victoriametrics-datasource-v0.8.1.zip;victoriametrics-datasource + + dockerize: + image: jwilder/dockerize + profiles: + - script + logging: *logging From de1e41d428932c001ea29132354e26cb860a0b15 Mon Sep 17 00:00:00 2001 From: blockchainluffy Date: Wed, 8 Jan 2025 18:01:49 +0530 Subject: [PATCH 2/8] test-setup: added config files and get-contracts script and changed compose --- docker-service/common.sh | 11 ++ docker-service/config/bootstrap.toml | 8 ++ docker-service/config/keyper-0.toml | 54 ++++++++ docker-service/config/keyper-1.toml | 54 ++++++++ docker-service/config/keyper-2.toml | 55 ++++++++ docker-service/config/node-deploy.json | 18 +++ docker-service/docker-compose.yml | 183 +++---------------------- docker-service/get-contracts.sh | 27 ++++ docker-service/init-db.sh | 24 ++++ 9 files changed, 271 insertions(+), 163 deletions(-) create mode 100644 docker-service/common.sh create mode 100644 docker-service/config/bootstrap.toml create mode 100644 docker-service/config/keyper-0.toml create mode 100644 docker-service/config/keyper-1.toml create mode 100644 docker-service/config/keyper-2.toml create mode 100644 docker-service/config/node-deploy.json create mode 100755 docker-service/get-contracts.sh create mode 100644 docker-service/init-db.sh diff --git a/docker-service/common.sh b/docker-service/common.sh new file mode 100644 index 00000000..d5bfdb76 --- /dev/null +++ b/docker-service/common.sh @@ -0,0 +1,11 @@ +BB="docker run --rm -v $(pwd)/data:/data -v $(pwd)/config:/config -w / busybox" +TM_P2P_PORT=26656 +TM_RPC_PORT=26657 + +if docker compose ls >/dev/null 2>&1; then + DC="docker compose" +else + DC=docker-compose +fi + +set -xe diff --git a/docker-service/config/bootstrap.toml b/docker-service/config/bootstrap.toml new file mode 100644 index 00000000..55bae2f4 --- /dev/null +++ b/docker-service/config/bootstrap.toml @@ -0,0 +1,8 @@ +InstanceID = 0 +# The op-geth JSON RPC endpoint +JSONRPCURL = 'http://blockchain:8545' +KeyperSetManager = "0xafe1b5bdebd4ae65af2024738bf0735fbb65d44b" +ByIndex = 1 +KeyperSetFilePath = '/config/keyperset.json' +ShuttermintURL = 'http://chain:26657' +SigningKey = "479968ffa5ee4c84514a477a8f15f3db0413964fd4c20b08a55fed9fed790fad" diff --git a/docker-service/config/keyper-0.toml b/docker-service/config/keyper-0.toml new file mode 100644 index 00000000..8fc1b0b2 --- /dev/null +++ b/docker-service/config/keyper-0.toml @@ -0,0 +1,54 @@ +# Peer identity: /p2p/12D3KooWQ8iKQe4iEfkTh3gdBtpxWsKwx3BwrA18km5rq3Zwt2QF +# Ethereum address: 0xCDD50A6F9B1439dc14c4f2A7eaF14dA1EF5A476c + + +InstanceID = 0 +# If it's empty, we use the standard PG_ environment variables +DatabaseURL = "postgres://postgres@db:5432/keyper-0" +HTTPEnabled = false +HTTPListenAddress = ':3000' +MaxNumKeysPerMessage = 500 + +[P2P] +P2PKey = 'CAESQJ3NdZ6mRrDAW/Z59OKwcKdOCbZQ45z5o8K+tLHOL8Xw1LbawPZLk3mXNyiDyADcLk1bqYMe3uQ6T8xi65zkM0A=' +ListenAddresses = ["/ip4/0.0.0.0/tcp/23000"] +# Overwrite p2p boostrap nodes +CustomBootstrapAddresses = [ + "/dns4/bootnode-0/tcp/23000/p2p/12D3KooWJN7262vmnEQHkYG7VrZDwz9fMyJtHyvGp4XSenuUYfeJ", + "/dns4/bootnode-1/tcp/23000/p2p/12D3KooWSayB2PEYpXtdk2dEqFaagoy8kDzmWpoD9DieuuzYdcBo" +] +DiscoveryNamespace = 'shutter-local' +# Optional, to be set to true if running an access node +IsAccessNode = false + +[P2P.FloodSubDiscovery] +Enabled = false +Interval = 10 +Topics = [] + +[Chain] +SyncStartBlockNumber = 0 + +[Chain.Node] +PrivateKey = '82904d1c48d3a27d218408fc2db3e743f554a69b05b91d28c2897a9026ea47df' +# Contract source directory +DeploymentDir = '/deployments/localhost/' +# The layer 1 JSON RPC endpoint +EthereumURL = "ws://geth:8546/" + +[Chain.Contracts] +KeyperSetManager = "0xafe1b5bdebd4ae65af2024738bf0735fbb65d44b" +ShutterRegistry = "0xed17543171c1459714cdc6519b58ffcc29a3c3c9" +KeyBroadcastContract = "0x505d59fffd312983cc0ed114d7f117b91520d742" + +[Shuttermint] +ShuttermintURL = "http://chain-0-validator:26657" +ValidatorPublicKey = "297c73584e56373601efb3f6780df1d83fd09994b0c318b58435b5adce947e6e" +EncryptionKey = '6bf7e6c8d6753d435f885f398f62f221a84f0ccb0c5e2a382290489441e16f77' +DKGPhaseLength = 8 +DKGStartBlockDelta = 5 + +[Metrics] +Enabled = true +Host = "[::]" +Port = 9100 \ No newline at end of file diff --git a/docker-service/config/keyper-1.toml b/docker-service/config/keyper-1.toml new file mode 100644 index 00000000..86b8aba2 --- /dev/null +++ b/docker-service/config/keyper-1.toml @@ -0,0 +1,54 @@ +# Peer identity: /p2p/12D3KooWGksg5G2oau6EgdJFLiQoKaMvzPJnTCuoPScZcmZRdkny +# Ethereum address: 0x539cF80D345d26525A47dB80De0fAb147D588fDa + + +InstanceID = 0 +# If it's empty, we use the standard PG_ environment variables +DatabaseURL = "postgres://postgres@db:5432/keyper-1" +HTTPEnabled = false +HTTPListenAddress = ':3000' +MaxNumKeysPerMessage = 500 + +[P2P] +P2PKey = 'CAESQO+t2CR93jdMq/FDqZf2+KIY9kLhKA1rZY9WFherSqvZZxzY8W4y5hSBrW5u79SDCvbLcmo7kEwu6VsK0NjZnxY=' +ListenAddresses = ["/ip4/0.0.0.0/tcp/23000"] +# Overwrite p2p boostrap nodes +CustomBootstrapAddresses = [ + "/dns4/bootnode-0/tcp/23000/p2p/12D3KooWJN7262vmnEQHkYG7VrZDwz9fMyJtHyvGp4XSenuUYfeJ", + "/dns4/bootnode-1/tcp/23000/p2p/12D3KooWSayB2PEYpXtdk2dEqFaagoy8kDzmWpoD9DieuuzYdcBo" +] +DiscoveryNamespace = 'shutter-local' +# Optional, to be set to true if running an access node +IsAccessNode = false + +[P2P.FloodSubDiscovery] +Enabled = false +Interval = 10 +Topics = [] + +[Chain] +SyncStartBlockNumber = 0 + +[Chain.Node] +PrivateKey = '939babbad75cbcc42eef92496ce86ede989ba96918bbc6cc0efcc498f9cc0887' +# Contract source directory +DeploymentDir = '/deployments/localhost/' +# The layer 1 JSON RPC endpoint +EthereumURL = "ws://geth:8546/" + +[Chain.Contracts] +KeyperSetManager = "0xafe1b5bdebd4ae65af2024738bf0735fbb65d44b" +ShutterRegistry = "0xed17543171c1459714cdc6519b58ffcc29a3c3c9" +KeyBroadcastContract = "0x505d59fffd312983cc0ed114d7f117b91520d742" + +[Shuttermint] +ShuttermintURL = "http://chain-0-validator:26657" +ValidatorPublicKey = "f2a38321e4411697f71e704817906650b49e3b36bd974d0b0e6bb2af923cfcaf" +EncryptionKey = 'd10fcd3a9db97ecf80a41b5fb30bb91ea16bf6a8575e389912a335b19cc4b3b8' +DKGPhaseLength = 8 +DKGStartBlockDelta = 5 + +[Metrics] +Enabled = true +Host = "[::]" +Port = 9100 \ No newline at end of file diff --git a/docker-service/config/keyper-2.toml b/docker-service/config/keyper-2.toml new file mode 100644 index 00000000..8d9fc0b2 --- /dev/null +++ b/docker-service/config/keyper-2.toml @@ -0,0 +1,55 @@ +# Peer identity: /p2p/12D3KooWLwtKMLJqRGWB3AGi87u8Sc7hwp6a6PDMAyWEAsHnjGJG +# Ethereum address: 0x4F01A5A4Ef09c08Df83A85885516424A4a53be68 + + +InstanceID = 0 +# If it's empty, we use the standard PG_ environment variables +DatabaseURL = "postgres://postgres@db:5432/keyper-2" +BeaconAPIURL = 'http://localhost:5052' +HTTPEnabled = false +HTTPListenAddress = ':3000' +MaxNumKeysPerMessage = 500 + +[P2P] +P2PKey = 'CAESQJrsyuTYZZpjqfbXTtMbrQOuS1XtzD+M6ssAZLo5R26fpV218+TTRXw4mkAdaxWpIDX0ZEQH5NC8A8+1nWvbF2U=' +ListenAddresses = ["/ip4/0.0.0.0/tcp/23000"] +# Overwrite p2p boostrap nodes +CustomBootstrapAddresses = [ + "/dns4/bootnode-0/tcp/23000/p2p/12D3KooWJN7262vmnEQHkYG7VrZDwz9fMyJtHyvGp4XSenuUYfeJ", + "/dns4/bootnode-1/tcp/23000/p2p/12D3KooWSayB2PEYpXtdk2dEqFaagoy8kDzmWpoD9DieuuzYdcBo" +] +DiscoveryNamespace = 'shutter-local' +# Optional, to be set to true if running an access node +IsAccessNode = false + +[P2P.FloodSubDiscovery] +Enabled = false +Interval = 10 +Topics = [] + +[Chain] +SyncStartBlockNumber = 0 + +[Chain.Node] +PrivateKey = 'e9383a24352f05bc11895c0da19efb6b83c726f05643c38f64b4146f19215125' +# Contract source directory +DeploymentDir = '/deployments/localhost/' +# The layer 1 JSON RPC endpoint +EthereumURL = "ws://geth:8546/" + +[Chain.Contracts] +KeyperSetManager = "0xafe1b5bdebd4ae65af2024738bf0735fbb65d44b" +ShutterRegistry = "0xed17543171c1459714cdc6519b58ffcc29a3c3c9" +KeyBroadcastContract = "0x505d59fffd312983cc0ed114d7f117b91520d742" + +[Shuttermint] +ShuttermintURL = "http://chain-0-validator:26657" +ValidatorPublicKey = "0b4880050a426b60316f3e90bee50163e9a1cf9251d7086468cd7342bddfdde3" +EncryptionKey = '782629977650cc003b122a611aa4d2e075fcfbc8bb92a49a832ca518c87b6ce8' +DKGPhaseLength = 8 +DKGStartBlockDelta = 5 + +[Metrics] +Enabled = true +Host = "[::]" +Port = 9100 \ No newline at end of file diff --git a/docker-service/config/node-deploy.json b/docker-service/config/node-deploy.json new file mode 100644 index 00000000..b0716211 --- /dev/null +++ b/docker-service/config/node-deploy.json @@ -0,0 +1,18 @@ +{ + "keypers": [ + [ + "0xCDD50A6F9B1439dc14c4f2A7eaF14dA1EF5A476c", + "0x539cF80D345d26525A47dB80De0fAb147D588fDa", + "0x4F01A5A4Ef09c08Df83A85885516424A4a53be68" + ], + [ + "0xCDD50A6F9B1439dc14c4f2A7eaF14dA1EF5A476c", + "0x539cF80D345d26525A47dB80De0fAb147D588fDa", + "0x03C82916552440f803b6284B40a0d64C5eb4E779" + ] + ], + "decryptors": ["0x0000000000000000000000000000000000000000"], + "collator": "0x2E135FE171fB6351026B75aF688a7F9689B66B87", + "fundValue": "1000", + "activationBlockOffset": 30 +} diff --git a/docker-service/docker-compose.yml b/docker-service/docker-compose.yml index 3806eac2..2bfca814 100644 --- a/docker-service/docker-compose.yml +++ b/docker-service/docker-compose.yml @@ -71,8 +71,7 @@ services: - ./data/deployments:/deployments command: "--config /chain/config/config.toml" depends_on: - blockchain: - condition: service_healthy + - deploy-contracts logging: *logging chain-1-validator: @@ -86,8 +85,7 @@ services: - ./data/deployments:/deployments command: "--config /chain/config/config.toml" depends_on: - blockchain: - condition: service_healthy + - deploy-contracts logging: *logging chain-2-validator: @@ -101,23 +99,7 @@ services: - ./data/deployments:/deployments command: "--config /chain/config/config.toml" depends_on: - blockchain: - condition: service_healthy - logging: *logging - - chain-3-validator: - image: rolling-shutter - restart: always - entrypoint: - - /rolling-shutter - - chain - volumes: - - ./data/chain-3-validator:/chain - - ./data/deployments:/deployments - command: "--config /chain/config/config.toml" - depends_on: - blockchain: - condition: service_healthy + - deploy-contracts logging: *logging chain-seed: @@ -131,66 +113,19 @@ services: command: "--config /chain/config/config.toml" logging: *logging - snapshot: - image: rolling-shutter - restart: always - entrypoint: - - /rolling-shutter - - snapshot - command: "--config /config/snapshot.toml" - volumes: - - ./config:/config - ports: - - "8754:8754" - - "9100:9100" - depends_on: - db: - condition: service_healthy - keyper-0: - condition: service_started - keyper-1: - condition: service_started - keyper-2: - condition: service_started - keyper-3: - condition: service_started - logging: *logging - labels: - caddy: live.snapshot.shutter.network - caddy.reverse_proxy: "{{upstreams 8754}}" - bootnode-0: image: rolling-shutter restart: always entrypoint: - /rolling-shutter - - p2pnode - command: "--config /config/bootnode-0.toml" - volumes: - - ./config:/config - - ./data/deployments:/deployments - depends_on: - db: - condition: service_healthy - blockchain: - condition: service_healthy - logging: *logging - - bootnode-1: - image: rolling-shutter - restart: always - entrypoint: - - /rolling-shutter - - p2pnode - command: "--config /config/bootnode-1.toml" + - opbootstrap + command: "--config /config/bootstrap.toml" volumes: - ./config:/config - ./data/deployments:/deployments depends_on: db: condition: service_healthy - blockchain: - condition: service_healthy logging: *logging keyper-0: @@ -207,14 +142,11 @@ services: ports: - "9200:9100" depends_on: - db: - condition: service_healthy - bootnode-0: - condition: service_started - bootnode-1: - condition: service_started - blockchain: - condition: service_healthy + - db: + condition: service_healthy + - bootnode-0: + condition: service_started + - chain-0-validator logging: *logging keyper-1: @@ -231,14 +163,11 @@ services: ports: - "9201:9100" depends_on: - db: - condition: service_healthy - bootnode-0: - condition: service_started - bootnode-1: - condition: service_started - blockchain: - condition: service_healthy + - db: + condition: service_healthy + - bootnode-0: + condition: service_started + - chain-1-validator logging: *logging keyper-2: @@ -255,53 +184,11 @@ services: ports: - "9202:9100" depends_on: - db: - condition: service_healthy - bootnode-0: - condition: service_started - bootnode-1: - condition: service_started - blockchain: - condition: service_healthy - logging: *logging - - keyper-3: - image: rolling-shutter - restart: always - entrypoint: - - /rolling-shutter - - "--loglevel=:debug,basichost:info,swarm:info,swarm2:info,net/identify:info,pubsub:info,p2p-config:info,upgrader:info" - - snapshotkeyper - command: "--config /config/keyper-3.toml" - volumes: - - ./config:/config - - ./data/deployments:/deployments - depends_on: - db: - condition: service_healthy - bootnode-0: - condition: service_started - bootnode-1: - condition: service_started - blockchain: - condition: service_healthy - logging: *logging - - caddy: - image: lucaslorentz/caddy-docker-proxy:ci-alpine - restart: always - ports: - - "80:80" - - "443:443" - volumes: - - /var/run/docker.sock:/var/run/docker.sock - - ./data/caddy:/data - profiles: - - live - environment: - CADDY_INGRESS_NETWORKS: rolling-shutter_default - labels: - caddy.email: devops@brainbot.com + - db: + condition: service_healthy + - bootnode-0: + condition: service_started + - chain-2-validator logging: *logging dummyserver: @@ -313,36 +200,6 @@ services: - dev logging: *logging - metrics: - build: - context: build-src/metrics - restart: always - ports: - - "8428:8428" - volumes: - - ./data/metrics:/victoria-metrics-data - profiles: - - dev - logging: *logging - - grafana: - image: grafana/grafana-oss - restart: always - expose: - - 3000 - ports: - - 3000:3000 - volumes: - - ./config/grafana/provisioning:/etc/grafana/provisioning - - ./data/grafana/data:/var/lib/grafana - profiles: - - dev - environment: - GF_SECURITY_ADMIN_USER: admin - GF_SECURITY_ADMIN_PASSWORD: admin - GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS: victoriametrics-datasource - GF_INSTALL_PLUGINS: https://github.com/VictoriaMetrics/grafana-datasource/releases/download/v0.8.1/victoriametrics-datasource-v0.8.1.zip;victoriametrics-datasource - dockerize: image: jwilder/dockerize profiles: diff --git a/docker-service/get-contracts.sh b/docker-service/get-contracts.sh new file mode 100755 index 00000000..1ebe9a23 --- /dev/null +++ b/docker-service/get-contracts.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash +## Needs to be bash, for the variable expansion to work! +source ./common.sh +source .env +set -e + +CONTRACTS_JSON=$(jq '.transactions[]|(select(.function==null))|{(.contractName|tostring): .contractAddress}' data/deployments/Deploy.service.s.sol/31337/run-latest.json) +#echo ${CONTRACTS_JSON} | jq -r ".[]|to_entries" + +for s in $(echo ${CONTRACTS_JSON} | jq -r "to_entries|map(\"\(.key)=\(.value|tostring)\")| .[] "); do + export $s +done + +for cfg in keyper-{0..2}.toml; do + config_path=config/${cfg} + echo $config_path + + for name in KeyperSetManager KeyperSet KeyBroadcastContract ShutterRegistry; do + key=$name + value="${!name}" + ${BB} sed -i "/^$key =/c$key = \"$value\"" "${config_path}" + done +done + +echo "Setting up bootstrap.toml" +${BB} sed -i "/^KeyperSetManager =/cKeyperSetManager = \"${KeyperSetManager}\"" "config/bootstrap.toml" +${BB} sed -i "/^SigningKey =/cSigningKey = \"$(echo $DEPLOY_KEY | cut -b3-)\"" "config/bootstrap.toml" diff --git a/docker-service/init-db.sh b/docker-service/init-db.sh new file mode 100644 index 00000000..3f05b8b5 --- /dev/null +++ b/docker-service/init-db.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +source ./common.sh + +mkdb() { + $DC exec -T db createdb -U postgres $1 + $DC run -T --rm --no-deps $1 initdb --config /config/${1}.toml +} + +$DC stop db +$DC rm -f db + +${BB} rm -rf data/db + +$DC up -d db +$DC run --rm --no-deps dockerize -wait tcp://db:5432 -timeout 40s + +for cmd in keyper-0 keyper-1 keyper-2; do + mkdb $cmd & +done + +wait + +$DC stop db From 9f3022570ab3b5ec19ffd902cccaae4da3aeb671 Mon Sep 17 00:00:00 2001 From: blockchainluffy Date: Thu, 6 Feb 2025 11:51:07 +0530 Subject: [PATCH 3/8] test setup: added steps till contract deployment --- docker-service/00-build.sh | 5 ++ docker-service/{init-db.sh => 01-init-db.sh} | 0 docker-service/02-init-chain.sh | 66 +++++++++++++++++++ .../build-src/deploy_contracts/Dockerfile | 3 +- .../build-src/setup-blockchain/Dockerfile | 2 +- docker-service/config/bootstrap.toml | 4 +- docker-service/config/keyper-0.toml | 10 +-- docker-service/config/keyper-1.toml | 10 +-- docker-service/config/keyper-2.toml | 10 +-- docker-service/docker-compose.yml | 25 +++---- 10 files changed, 105 insertions(+), 30 deletions(-) create mode 100755 docker-service/00-build.sh rename docker-service/{init-db.sh => 01-init-db.sh} (100%) mode change 100644 => 100755 create mode 100755 docker-service/02-init-chain.sh diff --git a/docker-service/00-build.sh b/docker-service/00-build.sh new file mode 100755 index 00000000..838bf839 --- /dev/null +++ b/docker-service/00-build.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +source ./common.sh + +$DC --profile dev build diff --git a/docker-service/init-db.sh b/docker-service/01-init-db.sh old mode 100644 new mode 100755 similarity index 100% rename from docker-service/init-db.sh rename to docker-service/01-init-db.sh diff --git a/docker-service/02-init-chain.sh b/docker-service/02-init-chain.sh new file mode 100755 index 00000000..bb126c47 --- /dev/null +++ b/docker-service/02-init-chain.sh @@ -0,0 +1,66 @@ +#!/usr/bin/env bash + +source ./common.sh + +$DC stop blockchain +$DC rm -f blockchain +$DC stop chain-{0..2}-validator chain-seed +$DC rm -f chain-{0..2}-validator chain-seed + +${BB} rm -rf data/chain-{0..2}-validator data/chain-seed +${BB} mkdir -p data/chain-{0..2}-validator/config data/chain-seed/config +${BB} chmod -R a+rwX data/chain-{0..2}-validator/config data/chain-seed/config +${BB} rm -rf data/deployments + +# has blockchain as dependency +$DC up -d blockchain +sleep 5 +$DC up deploy-contracts + +bash get-contracts.sh +# setup chain-seed +$DC run --rm --no-deps chain-seed init \ + --root /chain \ + --blocktime 1 \ + --listen-address tcp://0.0.0.0:${TM_RPC_PORT} \ + --role seed + +seed_node=$(cat data/chain-seed/config/node_key.json.id)@chain-seed:${TM_P2P_PORT} + +${BB} sed -i "/^moniker/c\moniker = \"chain-seed\"" data/chain-seed/config/config.toml + +# configure validators and keypers 0-2 +for num in {0..2}; do + validator_cmd=chain-$num-validator + + $DC run --rm --no-deps ${validator_cmd} init \ + --root /chain \ + --genesis-keyper 0x346a9357D8EB6F0FbC4894ed6DBb1eCCA1051c09 \ + --blocktime 1 \ + --listen-address tcp://0.0.0.0:${TM_RPC_PORT} \ + --role validator + + validator_id=$(cat data/${validator_cmd}/config/node_key.json.id) + validator_node=${validator_id}@${validator_cmd}:${TM_P2P_PORT} + validator_config_path=data/${validator_cmd}/config/config.toml + + # share genesis + if [ $num -eq 0 ]; then + for destination in data/chain-seed/config/ data/chain-{1..2}-validator/config/; do + ${BB} cp -v data/chain-0-validator/config/genesis.json "${destination}" + done + fi + + # set validator publickey for keyper + ${BB} sed -i "/ValidatorPublicKey/c\ValidatorPublicKey = \"$(cat data/${validator_cmd}/config/priv_validator_pubkey.hex)\"" /config/keyper-${num}.toml + + # set seed node for chain bootstrap + ${BB} sed -i "/^seeds =/c\seeds = \"${seed_node}\"" "${validator_config_path}" + # fix external address for docker internal communication + ${BB} sed -i "/^external_address =/c\external_address = \"${validator_cmd}:${TM_P2P_PORT}\"" "${validator_config_path}" + # give a nice name + ${BB} sed -i "/^moniker/c\moniker = \"${validator_cmd}\"" "${validator_config_path}" + +done + +$DC stop -t 30 diff --git a/docker-service/build-src/deploy_contracts/Dockerfile b/docker-service/build-src/deploy_contracts/Dockerfile index 078c6ca9..1333be21 100644 --- a/docker-service/build-src/deploy_contracts/Dockerfile +++ b/docker-service/build-src/deploy_contracts/Dockerfile @@ -3,9 +3,10 @@ FROM alpine/git AS builder RUN date RUN git clone --branch=shutter-api https://github.com/shutter-network/contracts /contracts -FROM --platform=linux/amd64 ghcr.io/foundry-rs/foundry +FROM --platform=linux/amd64 ghcr.io/foundry-rs/foundry AS runner WORKDIR /contracts COPY --from=builder /contracts /contracts +RUN forge install RUN forge build ENTRYPOINT ["forge", "script"] \ No newline at end of file diff --git a/docker-service/build-src/setup-blockchain/Dockerfile b/docker-service/build-src/setup-blockchain/Dockerfile index 7bfffc74..ce3566d4 100644 --- a/docker-service/build-src/setup-blockchain/Dockerfile +++ b/docker-service/build-src/setup-blockchain/Dockerfile @@ -3,4 +3,4 @@ FROM --platform=linux/amd64 ghcr.io/foundry-rs/foundry WORKDIR /anvil -ENTRYPOINT anvil --host 0.0.0.0 -p 8545 -b 2 \ No newline at end of file +ENTRYPOINT anvil --host 0.0.0.0 -p 8545 -b 2 --dump-state /data/blockchain.json --load-state /data/blockchain.json \ No newline at end of file diff --git a/docker-service/config/bootstrap.toml b/docker-service/config/bootstrap.toml index 55bae2f4..a5789b77 100644 --- a/docker-service/config/bootstrap.toml +++ b/docker-service/config/bootstrap.toml @@ -1,8 +1,8 @@ InstanceID = 0 # The op-geth JSON RPC endpoint JSONRPCURL = 'http://blockchain:8545' -KeyperSetManager = "0xafe1b5bdebd4ae65af2024738bf0735fbb65d44b" +KeyperSetManager = "0x8464135c8f25da09e49bc8782676a84730c318bc" ByIndex = 1 KeyperSetFilePath = '/config/keyperset.json' ShuttermintURL = 'http://chain:26657' -SigningKey = "479968ffa5ee4c84514a477a8f15f3db0413964fd4c20b08a55fed9fed790fad" +SigningKey = "59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d" diff --git a/docker-service/config/keyper-0.toml b/docker-service/config/keyper-0.toml index 8fc1b0b2..0cf2943a 100644 --- a/docker-service/config/keyper-0.toml +++ b/docker-service/config/keyper-0.toml @@ -34,16 +34,16 @@ PrivateKey = '82904d1c48d3a27d218408fc2db3e743f554a69b05b91d28c2897a9026ea47df' # Contract source directory DeploymentDir = '/deployments/localhost/' # The layer 1 JSON RPC endpoint -EthereumURL = "ws://geth:8546/" +EthereumURL = "ws://blockchain:8546/" [Chain.Contracts] -KeyperSetManager = "0xafe1b5bdebd4ae65af2024738bf0735fbb65d44b" -ShutterRegistry = "0xed17543171c1459714cdc6519b58ffcc29a3c3c9" -KeyBroadcastContract = "0x505d59fffd312983cc0ed114d7f117b91520d742" +KeyperSetManager = "0x8464135c8f25da09e49bc8782676a84730c318bc" +ShutterRegistry = "0xc6ba8c3233ecf65b761049ef63466945c362edd2" +KeyBroadcastContract = "0x59f2f1fcfe2474fd5f0b9ba1e73ca90b143eb8d0" [Shuttermint] ShuttermintURL = "http://chain-0-validator:26657" -ValidatorPublicKey = "297c73584e56373601efb3f6780df1d83fd09994b0c318b58435b5adce947e6e" +ValidatorPublicKey = "27ca212bf841f3734e076c9e4dbc41f9e54b08b5bcc1db822cd59b8bc4370680" EncryptionKey = '6bf7e6c8d6753d435f885f398f62f221a84f0ccb0c5e2a382290489441e16f77' DKGPhaseLength = 8 DKGStartBlockDelta = 5 diff --git a/docker-service/config/keyper-1.toml b/docker-service/config/keyper-1.toml index 86b8aba2..00167b18 100644 --- a/docker-service/config/keyper-1.toml +++ b/docker-service/config/keyper-1.toml @@ -34,16 +34,16 @@ PrivateKey = '939babbad75cbcc42eef92496ce86ede989ba96918bbc6cc0efcc498f9cc0887' # Contract source directory DeploymentDir = '/deployments/localhost/' # The layer 1 JSON RPC endpoint -EthereumURL = "ws://geth:8546/" +EthereumURL = "ws://blockchain:8546/" [Chain.Contracts] -KeyperSetManager = "0xafe1b5bdebd4ae65af2024738bf0735fbb65d44b" -ShutterRegistry = "0xed17543171c1459714cdc6519b58ffcc29a3c3c9" -KeyBroadcastContract = "0x505d59fffd312983cc0ed114d7f117b91520d742" +KeyperSetManager = "0x8464135c8f25da09e49bc8782676a84730c318bc" +ShutterRegistry = "0xc6ba8c3233ecf65b761049ef63466945c362edd2" +KeyBroadcastContract = "0x59f2f1fcfe2474fd5f0b9ba1e73ca90b143eb8d0" [Shuttermint] ShuttermintURL = "http://chain-0-validator:26657" -ValidatorPublicKey = "f2a38321e4411697f71e704817906650b49e3b36bd974d0b0e6bb2af923cfcaf" +ValidatorPublicKey = "394784520c7c6b3e78d88d3e8bc2068c9a3babd125000093ad0733c4077c52f7" EncryptionKey = 'd10fcd3a9db97ecf80a41b5fb30bb91ea16bf6a8575e389912a335b19cc4b3b8' DKGPhaseLength = 8 DKGStartBlockDelta = 5 diff --git a/docker-service/config/keyper-2.toml b/docker-service/config/keyper-2.toml index 8d9fc0b2..85792e13 100644 --- a/docker-service/config/keyper-2.toml +++ b/docker-service/config/keyper-2.toml @@ -35,16 +35,16 @@ PrivateKey = 'e9383a24352f05bc11895c0da19efb6b83c726f05643c38f64b4146f19215125' # Contract source directory DeploymentDir = '/deployments/localhost/' # The layer 1 JSON RPC endpoint -EthereumURL = "ws://geth:8546/" +EthereumURL = "ws://blockchain:8546/" [Chain.Contracts] -KeyperSetManager = "0xafe1b5bdebd4ae65af2024738bf0735fbb65d44b" -ShutterRegistry = "0xed17543171c1459714cdc6519b58ffcc29a3c3c9" -KeyBroadcastContract = "0x505d59fffd312983cc0ed114d7f117b91520d742" +KeyperSetManager = "0x8464135c8f25da09e49bc8782676a84730c318bc" +ShutterRegistry = "0xc6ba8c3233ecf65b761049ef63466945c362edd2" +KeyBroadcastContract = "0x59f2f1fcfe2474fd5f0b9ba1e73ca90b143eb8d0" [Shuttermint] ShuttermintURL = "http://chain-0-validator:26657" -ValidatorPublicKey = "0b4880050a426b60316f3e90bee50163e9a1cf9251d7086468cd7342bddfdde3" +ValidatorPublicKey = "90278a149655f84695f390bd5e83d71ed04a67cbce490deda66110b00f4a0386" EncryptionKey = '782629977650cc003b122a611aa4d2e075fcfbc8bb92a49a832ca518c87b6ce8' DKGPhaseLength = 8 DKGStartBlockDelta = 5 diff --git a/docker-service/docker-compose.yml b/docker-service/docker-compose.yml index 2bfca814..95fd7929 100644 --- a/docker-service/docker-compose.yml +++ b/docker-service/docker-compose.yml @@ -30,7 +30,7 @@ services: context: .. restart: always volumes: - - ./data/geth:/data + - ./data/blockchain:/data # currently health checks fail healthcheck: test: > @@ -54,7 +54,7 @@ services: # DEPLOY_CONF: /config/node-deploy.json # KEYPER_SET_INDEX: 0 volumes: - - ./data/deployments:/contracts/deployments + - ./data/deployments:/contracts/broadcast - ./config:/config depends_on: - blockchain @@ -142,11 +142,12 @@ services: ports: - "9200:9100" depends_on: - - db: + db: condition: service_healthy - - bootnode-0: + bootnode-0: condition: service_started - - chain-0-validator + chain-0-validator: + condition: service_started logging: *logging keyper-1: @@ -163,11 +164,12 @@ services: ports: - "9201:9100" depends_on: - - db: + db: condition: service_healthy - - bootnode-0: + bootnode-0: condition: service_started - - chain-1-validator + chain-1-validator: + condition: service_started logging: *logging keyper-2: @@ -184,11 +186,12 @@ services: ports: - "9202:9100" depends_on: - - db: + db: condition: service_healthy - - bootnode-0: + bootnode-0: condition: service_started - - chain-2-validator + chain-2-validator: + condition: service_started logging: *logging dummyserver: From e87fe09ef246e2c9b66cf7c05931c17739fab745 Mon Sep 17 00:00:00 2001 From: blockchainluffy Date: Tue, 3 Jun 2025 16:06:56 +0530 Subject: [PATCH 4/8] feat: update docker compose setup to deploy contracts --- .gitignore | 3 ++- docker-service/.env | 2 -- docker-test-setup-api/.gitignore | 2 ++ .../00-build.sh | 0 .../01-init-db.sh | 0 .../02-init-chain.sh | 0 .../build-src/deploy_contracts/Dockerfile | 6 ++++- .../build-src/rolling-shutter/Dockerfile | 22 +++++++++++++++++++ .../build-src/setup-blockchain/Dockerfile | 2 +- .../common.sh | 0 .../config/bootstrap.toml | 0 .../config/keyper-0.toml | 0 .../config/keyper-1.toml | 0 .../config/keyper-2.toml | 0 .../config/node-deploy.json | 5 ----- .../docker-compose.yml | 20 +++++++++-------- .../get-contracts.sh | 0 17 files changed, 43 insertions(+), 19 deletions(-) delete mode 100644 docker-service/.env create mode 100644 docker-test-setup-api/.gitignore rename {docker-service => docker-test-setup-api}/00-build.sh (100%) rename {docker-service => docker-test-setup-api}/01-init-db.sh (100%) rename {docker-service => docker-test-setup-api}/02-init-chain.sh (100%) rename {docker-service => docker-test-setup-api}/build-src/deploy_contracts/Dockerfile (58%) create mode 100644 docker-test-setup-api/build-src/rolling-shutter/Dockerfile rename {docker-service => docker-test-setup-api}/build-src/setup-blockchain/Dockerfile (76%) rename {docker-service => docker-test-setup-api}/common.sh (100%) rename {docker-service => docker-test-setup-api}/config/bootstrap.toml (100%) rename {docker-service => docker-test-setup-api}/config/keyper-0.toml (100%) rename {docker-service => docker-test-setup-api}/config/keyper-1.toml (100%) rename {docker-service => docker-test-setup-api}/config/keyper-2.toml (100%) rename {docker-service => docker-test-setup-api}/config/node-deploy.json (68%) rename {docker-service => docker-test-setup-api}/docker-compose.yml (91%) rename {docker-service => docker-test-setup-api}/get-contracts.sh (100%) diff --git a/.gitignore b/.gitignore index f45500b8..4e29178a 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,5 @@ log node_modules result temp -work \ No newline at end of file +work +.DS_Store \ No newline at end of file diff --git a/docker-service/.env b/docker-service/.env deleted file mode 100644 index 4c81a3ff..00000000 --- a/docker-service/.env +++ /dev/null @@ -1,2 +0,0 @@ -# This is the default key for `geth --dev` -DEPLOY_KEY=0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d \ No newline at end of file diff --git a/docker-test-setup-api/.gitignore b/docker-test-setup-api/.gitignore new file mode 100644 index 00000000..3da9bd7a --- /dev/null +++ b/docker-test-setup-api/.gitignore @@ -0,0 +1,2 @@ +/data +.env diff --git a/docker-service/00-build.sh b/docker-test-setup-api/00-build.sh similarity index 100% rename from docker-service/00-build.sh rename to docker-test-setup-api/00-build.sh diff --git a/docker-service/01-init-db.sh b/docker-test-setup-api/01-init-db.sh similarity index 100% rename from docker-service/01-init-db.sh rename to docker-test-setup-api/01-init-db.sh diff --git a/docker-service/02-init-chain.sh b/docker-test-setup-api/02-init-chain.sh similarity index 100% rename from docker-service/02-init-chain.sh rename to docker-test-setup-api/02-init-chain.sh diff --git a/docker-service/build-src/deploy_contracts/Dockerfile b/docker-test-setup-api/build-src/deploy_contracts/Dockerfile similarity index 58% rename from docker-service/build-src/deploy_contracts/Dockerfile rename to docker-test-setup-api/build-src/deploy_contracts/Dockerfile index 1333be21..c216ff0a 100644 --- a/docker-service/build-src/deploy_contracts/Dockerfile +++ b/docker-test-setup-api/build-src/deploy_contracts/Dockerfile @@ -2,11 +2,15 @@ FROM alpine/git AS builder RUN date RUN git clone --branch=shutter-api https://github.com/shutter-network/contracts /contracts +RUN cd /contracts && git submodule update --init --recursive FROM --platform=linux/amd64 ghcr.io/foundry-rs/foundry AS runner WORKDIR /contracts -COPY --from=builder /contracts /contracts +COPY --from=builder --chown=foundry:foundry /contracts /contracts +RUN git config --global --add safe.directory /contracts + +USER foundry RUN forge install RUN forge build ENTRYPOINT ["forge", "script"] \ No newline at end of file diff --git a/docker-test-setup-api/build-src/rolling-shutter/Dockerfile b/docker-test-setup-api/build-src/rolling-shutter/Dockerfile new file mode 100644 index 00000000..5b87851e --- /dev/null +++ b/docker-test-setup-api/build-src/rolling-shutter/Dockerfile @@ -0,0 +1,22 @@ +FROM golang:1.21 AS builder +ENV GOMODCACHE=/root/.cache/mod +# Fetch go modules separately to improve cache usage +RUN mkdir /gomod +COPY /rolling-shutter/go.* /gomod/ +WORKDIR /gomod +RUN --mount=type=cache,id=go-mod-$TARGETARCH$TARGETVARIANT,sharing=locked,target=/root/.cache go mod download + +# Build binary +COPY / /src +WORKDIR /src/rolling-shutter +RUN --mount=type=cache,id=go-mod-$TARGETARCH$TARGETVARIANT,sharing=locked,target=/root/.cache CGO_ENABLED=1 GOOS=linux GOFLAGS=-v make build + +FROM golang:1.21 AS runner + +COPY --from=builder /src/rolling-shutter/bin/rolling-shutter /rolling-shutter + +# Use 'uclibc' flavor to avoid https://github.com/docker-library/busybox/issues/155#issuecomment-1344375664 +RUN --mount=from=busybox:uclibc,src=/bin,dst=/bin mkdir -p /etc/ssl +COPY --from=builder /etc/ssl/certs /etc/ssl/certs + +ENTRYPOINT ["/rolling-shutter"] \ No newline at end of file diff --git a/docker-service/build-src/setup-blockchain/Dockerfile b/docker-test-setup-api/build-src/setup-blockchain/Dockerfile similarity index 76% rename from docker-service/build-src/setup-blockchain/Dockerfile rename to docker-test-setup-api/build-src/setup-blockchain/Dockerfile index ce3566d4..5b29fa2a 100644 --- a/docker-service/build-src/setup-blockchain/Dockerfile +++ b/docker-test-setup-api/build-src/setup-blockchain/Dockerfile @@ -3,4 +3,4 @@ FROM --platform=linux/amd64 ghcr.io/foundry-rs/foundry WORKDIR /anvil -ENTRYPOINT anvil --host 0.0.0.0 -p 8545 -b 2 --dump-state /data/blockchain.json --load-state /data/blockchain.json \ No newline at end of file +ENTRYPOINT anvil --host 0.0.0.0 -p 8545 -b 2 --dump-state /data/blockchain.json \ No newline at end of file diff --git a/docker-service/common.sh b/docker-test-setup-api/common.sh similarity index 100% rename from docker-service/common.sh rename to docker-test-setup-api/common.sh diff --git a/docker-service/config/bootstrap.toml b/docker-test-setup-api/config/bootstrap.toml similarity index 100% rename from docker-service/config/bootstrap.toml rename to docker-test-setup-api/config/bootstrap.toml diff --git a/docker-service/config/keyper-0.toml b/docker-test-setup-api/config/keyper-0.toml similarity index 100% rename from docker-service/config/keyper-0.toml rename to docker-test-setup-api/config/keyper-0.toml diff --git a/docker-service/config/keyper-1.toml b/docker-test-setup-api/config/keyper-1.toml similarity index 100% rename from docker-service/config/keyper-1.toml rename to docker-test-setup-api/config/keyper-1.toml diff --git a/docker-service/config/keyper-2.toml b/docker-test-setup-api/config/keyper-2.toml similarity index 100% rename from docker-service/config/keyper-2.toml rename to docker-test-setup-api/config/keyper-2.toml diff --git a/docker-service/config/node-deploy.json b/docker-test-setup-api/config/node-deploy.json similarity index 68% rename from docker-service/config/node-deploy.json rename to docker-test-setup-api/config/node-deploy.json index b0716211..5b8af235 100644 --- a/docker-service/config/node-deploy.json +++ b/docker-test-setup-api/config/node-deploy.json @@ -4,11 +4,6 @@ "0xCDD50A6F9B1439dc14c4f2A7eaF14dA1EF5A476c", "0x539cF80D345d26525A47dB80De0fAb147D588fDa", "0x4F01A5A4Ef09c08Df83A85885516424A4a53be68" - ], - [ - "0xCDD50A6F9B1439dc14c4f2A7eaF14dA1EF5A476c", - "0x539cF80D345d26525A47dB80De0fAb147D588fDa", - "0x03C82916552440f803b6284B40a0d64C5eb4E779" ] ], "decryptors": ["0x0000000000000000000000000000000000000000"], diff --git a/docker-service/docker-compose.yml b/docker-test-setup-api/docker-compose.yml similarity index 91% rename from docker-service/docker-compose.yml rename to docker-test-setup-api/docker-compose.yml index 95fd7929..46f167f9 100644 --- a/docker-service/docker-compose.yml +++ b/docker-test-setup-api/docker-compose.yml @@ -26,9 +26,11 @@ services: blockchain: build: - dockerfile: docker-service/build-src/setup-blockchain/Dockerfile + dockerfile: docker-test-setup-api/build-src/setup-blockchain/Dockerfile context: .. - restart: always + restart: unless-stopped + ports: + - "8545:8545" volumes: - ./data/blockchain:/data # currently health checks fail @@ -41,7 +43,7 @@ services: deploy-contracts: build: - dockerfile: docker-service/build-src/deploy_contracts/Dockerfile + dockerfile: docker-test-setup-api/build-src/deploy_contracts/Dockerfile context: .. command: - "./script/Deploy.service.s.sol" @@ -143,9 +145,9 @@ services: - "9200:9100" depends_on: db: - condition: service_healthy + condition: service_healthy bootnode-0: - condition: service_started + condition: service_started chain-0-validator: condition: service_started logging: *logging @@ -165,9 +167,9 @@ services: - "9201:9100" depends_on: db: - condition: service_healthy + condition: service_healthy bootnode-0: - condition: service_started + condition: service_started chain-1-validator: condition: service_started logging: *logging @@ -187,9 +189,9 @@ services: - "9202:9100" depends_on: db: - condition: service_healthy + condition: service_healthy bootnode-0: - condition: service_started + condition: service_started chain-2-validator: condition: service_started logging: *logging diff --git a/docker-service/get-contracts.sh b/docker-test-setup-api/get-contracts.sh similarity index 100% rename from docker-service/get-contracts.sh rename to docker-test-setup-api/get-contracts.sh From 78c66fd8f80446a1232daef807c90565f5b3966c Mon Sep 17 00:00:00 2001 From: blockchainluffy Date: Wed, 4 Jun 2025 16:07:23 +0530 Subject: [PATCH 5/8] fix: test setup to run on arm machine --- docker-test-setup-api/01-init-db.sh | 2 +- .../build-src/rolling-shutter/Dockerfile | 22 ------------------- docker-test-setup-api/docker-compose.yml | 22 +++++++++++++++---- 3 files changed, 19 insertions(+), 27 deletions(-) delete mode 100644 docker-test-setup-api/build-src/rolling-shutter/Dockerfile diff --git a/docker-test-setup-api/01-init-db.sh b/docker-test-setup-api/01-init-db.sh index 3f05b8b5..d0d26121 100755 --- a/docker-test-setup-api/01-init-db.sh +++ b/docker-test-setup-api/01-init-db.sh @@ -13,7 +13,7 @@ $DC rm -f db ${BB} rm -rf data/db $DC up -d db -$DC run --rm --no-deps dockerize -wait tcp://db:5432 -timeout 40s +$DC run --rm --no-deps wait-for-db for cmd in keyper-0 keyper-1 keyper-2; do mkdb $cmd & diff --git a/docker-test-setup-api/build-src/rolling-shutter/Dockerfile b/docker-test-setup-api/build-src/rolling-shutter/Dockerfile deleted file mode 100644 index 5b87851e..00000000 --- a/docker-test-setup-api/build-src/rolling-shutter/Dockerfile +++ /dev/null @@ -1,22 +0,0 @@ -FROM golang:1.21 AS builder -ENV GOMODCACHE=/root/.cache/mod -# Fetch go modules separately to improve cache usage -RUN mkdir /gomod -COPY /rolling-shutter/go.* /gomod/ -WORKDIR /gomod -RUN --mount=type=cache,id=go-mod-$TARGETARCH$TARGETVARIANT,sharing=locked,target=/root/.cache go mod download - -# Build binary -COPY / /src -WORKDIR /src/rolling-shutter -RUN --mount=type=cache,id=go-mod-$TARGETARCH$TARGETVARIANT,sharing=locked,target=/root/.cache CGO_ENABLED=1 GOOS=linux GOFLAGS=-v make build - -FROM golang:1.21 AS runner - -COPY --from=builder /src/rolling-shutter/bin/rolling-shutter /rolling-shutter - -# Use 'uclibc' flavor to avoid https://github.com/docker-library/busybox/issues/155#issuecomment-1344375664 -RUN --mount=from=busybox:uclibc,src=/bin,dst=/bin mkdir -p /etc/ssl -COPY --from=builder /etc/ssl/certs /etc/ssl/certs - -ENTRYPOINT ["/rolling-shutter"] \ No newline at end of file diff --git a/docker-test-setup-api/docker-compose.yml b/docker-test-setup-api/docker-compose.yml index 46f167f9..c6a89d02 100644 --- a/docker-test-setup-api/docker-compose.yml +++ b/docker-test-setup-api/docker-compose.yml @@ -136,7 +136,7 @@ services: entrypoint: - /rolling-shutter - "--loglevel=:debug,basichost:info,swarm:info,swarm2:info,net/identify:info,pubsub:info,p2p-config:info,upgrader:info" - - snapshotkeyper + - shutterservicekeyper command: "--config /config/keyper-0.toml" volumes: - ./config:/config @@ -158,7 +158,7 @@ services: entrypoint: - /rolling-shutter - "--loglevel=:debug,basichost:info,swarm:info,swarm2:info,net/identify:info,pubsub:info,p2p-config:info,upgrader:info" - - snapshotkeyper + - shutterservicekeyper command: "--config /config/keyper-1.toml" volumes: - ./config:/config @@ -180,7 +180,7 @@ services: entrypoint: - /rolling-shutter - "--loglevel=:debug,basichost:info,swarm:info,swarm2:info,net/identify:info,pubsub:info,p2p-config:info,upgrader:info" - - snapshotkeyper + - shutterservicekeyper command: "--config /config/keyper-2.toml" volumes: - ./config:/config @@ -201,8 +201,22 @@ services: dockerfile: docker/build-src/dummyserver/Dockerfile context: .. restart: always + logging: *logging + + wait-for-db: + image: postgres:latest profiles: - - dev + - script + command: > + sh -c ' + until pg_isready -h db -p 5432 -U postgres; do + echo "Waiting for db to be ready..." + sleep 1 + done + echo "db is ready" + ' + depends_on: + - db logging: *logging dockerize: From d1c9d9e06d928a290e0ccbc165dedff969fce8b4 Mon Sep 17 00:00:00 2001 From: blockchainluffy Date: Wed, 4 Jun 2025 17:15:02 +0530 Subject: [PATCH 6/8] wip: bootstrap keypers configuration --- docker-test-setup-api/03-run.sh | 6 +++++ docker-test-setup-api/04-bootstrap.sh | 9 +++++++ docker-test-setup-api/config/bootstrap.toml | 27 ++++++++++++++----- docker-test-setup-api/config/keyper-0.toml | 6 ++--- docker-test-setup-api/config/keyper-1.toml | 6 ++--- docker-test-setup-api/config/keyper-2.toml | 7 +++-- docker-test-setup-api/config/node-deploy.json | 6 +---- .../config/op-bootstrap.toml | 7 +++++ docker-test-setup-api/docker-compose.yml | 21 ++++----------- docker-test-setup-api/get-contracts.sh | 3 ++- 10 files changed, 59 insertions(+), 39 deletions(-) create mode 100755 docker-test-setup-api/03-run.sh create mode 100755 docker-test-setup-api/04-bootstrap.sh create mode 100644 docker-test-setup-api/config/op-bootstrap.toml diff --git a/docker-test-setup-api/03-run.sh b/docker-test-setup-api/03-run.sh new file mode 100755 index 00000000..bd86eb2e --- /dev/null +++ b/docker-test-setup-api/03-run.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +source ./common.sh + +echo "Starting entire system" +$DC up -d diff --git a/docker-test-setup-api/04-bootstrap.sh b/docker-test-setup-api/04-bootstrap.sh new file mode 100755 index 00000000..5d5ed564 --- /dev/null +++ b/docker-test-setup-api/04-bootstrap.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +source ./common.sh + +echo "Submitting bootstrap transaction" + +$DC run --rm --no-deps --entrypoint /rolling-shutter chain-0-validator op-bootstrap fetch-keyperset \ + --config /config/op-bootstrap.toml + # --deployment-dir /deployments/dockerGeth \ diff --git a/docker-test-setup-api/config/bootstrap.toml b/docker-test-setup-api/config/bootstrap.toml index a5789b77..dcac06ff 100644 --- a/docker-test-setup-api/config/bootstrap.toml +++ b/docker-test-setup-api/config/bootstrap.toml @@ -1,8 +1,21 @@ +# Peer identity: /p2p/12D3KooWJN7262vmnEQHkYG7VrZDwz9fMyJtHyvGp4XSenuUYfeJ +# Peer role: bootstrap + +# whether to register handlers on the messages and log them InstanceID = 0 -# The op-geth JSON RPC endpoint -JSONRPCURL = 'http://blockchain:8545' -KeyperSetManager = "0x8464135c8f25da09e49bc8782676a84730c318bc" -ByIndex = 1 -KeyperSetFilePath = '/config/keyperset.json' -ShuttermintURL = 'http://chain:26657' -SigningKey = "59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d" +ListenMessages = true + +[P2P] +P2PKey = "CAESQKFtiMAqd2c8bQ/mfPStxViY970MNtWUVWdn44rUoQXAfv7ztSQ9nLeqliXrkuqKi3XUObyAfH+Py3eMbHFvIpM=" +ListenAddresses = ["/ip4/0.0.0.0/tcp/23000"] +# Overwrite p2p boostrap nodes +CustomBootstrapAddresses = [ + "/dns4/bootnode-0/tcp/23000/p2p/12D3KooWJN7262vmnEQHkYG7VrZDwz9fMyJtHyvGp4XSenuUYfeJ", +] +IsAccessNode = false +DiscoveryNamespace = "shutter-local" + +[P2P.FloodSubDiscovery] +Enabled = false +Interval = 10 +Topics = [] \ No newline at end of file diff --git a/docker-test-setup-api/config/keyper-0.toml b/docker-test-setup-api/config/keyper-0.toml index 0cf2943a..eede7009 100644 --- a/docker-test-setup-api/config/keyper-0.toml +++ b/docker-test-setup-api/config/keyper-0.toml @@ -15,7 +15,6 @@ ListenAddresses = ["/ip4/0.0.0.0/tcp/23000"] # Overwrite p2p boostrap nodes CustomBootstrapAddresses = [ "/dns4/bootnode-0/tcp/23000/p2p/12D3KooWJN7262vmnEQHkYG7VrZDwz9fMyJtHyvGp4XSenuUYfeJ", - "/dns4/bootnode-1/tcp/23000/p2p/12D3KooWSayB2PEYpXtdk2dEqFaagoy8kDzmWpoD9DieuuzYdcBo" ] DiscoveryNamespace = 'shutter-local' # Optional, to be set to true if running an access node @@ -28,13 +27,14 @@ Topics = [] [Chain] SyncStartBlockNumber = 0 +SyncMonitorCheckInterval = 60 [Chain.Node] PrivateKey = '82904d1c48d3a27d218408fc2db3e743f554a69b05b91d28c2897a9026ea47df' # Contract source directory DeploymentDir = '/deployments/localhost/' # The layer 1 JSON RPC endpoint -EthereumURL = "ws://blockchain:8546/" +EthereumURL = "ws://blockchain:8545/" [Chain.Contracts] KeyperSetManager = "0x8464135c8f25da09e49bc8782676a84730c318bc" @@ -43,7 +43,7 @@ KeyBroadcastContract = "0x59f2f1fcfe2474fd5f0b9ba1e73ca90b143eb8d0" [Shuttermint] ShuttermintURL = "http://chain-0-validator:26657" -ValidatorPublicKey = "27ca212bf841f3734e076c9e4dbc41f9e54b08b5bcc1db822cd59b8bc4370680" +ValidatorPublicKey = "feb818be329ca88d0d0588fbf695b96f9c674cbc4f08037a34ac97c9aa40c7d0" EncryptionKey = '6bf7e6c8d6753d435f885f398f62f221a84f0ccb0c5e2a382290489441e16f77' DKGPhaseLength = 8 DKGStartBlockDelta = 5 diff --git a/docker-test-setup-api/config/keyper-1.toml b/docker-test-setup-api/config/keyper-1.toml index 00167b18..5bbed904 100644 --- a/docker-test-setup-api/config/keyper-1.toml +++ b/docker-test-setup-api/config/keyper-1.toml @@ -15,7 +15,6 @@ ListenAddresses = ["/ip4/0.0.0.0/tcp/23000"] # Overwrite p2p boostrap nodes CustomBootstrapAddresses = [ "/dns4/bootnode-0/tcp/23000/p2p/12D3KooWJN7262vmnEQHkYG7VrZDwz9fMyJtHyvGp4XSenuUYfeJ", - "/dns4/bootnode-1/tcp/23000/p2p/12D3KooWSayB2PEYpXtdk2dEqFaagoy8kDzmWpoD9DieuuzYdcBo" ] DiscoveryNamespace = 'shutter-local' # Optional, to be set to true if running an access node @@ -28,13 +27,14 @@ Topics = [] [Chain] SyncStartBlockNumber = 0 +SyncMonitorCheckInterval = 60 [Chain.Node] PrivateKey = '939babbad75cbcc42eef92496ce86ede989ba96918bbc6cc0efcc498f9cc0887' # Contract source directory DeploymentDir = '/deployments/localhost/' # The layer 1 JSON RPC endpoint -EthereumURL = "ws://blockchain:8546/" +EthereumURL = "ws://blockchain:8545/" [Chain.Contracts] KeyperSetManager = "0x8464135c8f25da09e49bc8782676a84730c318bc" @@ -43,7 +43,7 @@ KeyBroadcastContract = "0x59f2f1fcfe2474fd5f0b9ba1e73ca90b143eb8d0" [Shuttermint] ShuttermintURL = "http://chain-0-validator:26657" -ValidatorPublicKey = "394784520c7c6b3e78d88d3e8bc2068c9a3babd125000093ad0733c4077c52f7" +ValidatorPublicKey = "906d1cf0abcdb59ba08851c35004d0e961181e49e085d9f2169c03ab86bca4b8" EncryptionKey = 'd10fcd3a9db97ecf80a41b5fb30bb91ea16bf6a8575e389912a335b19cc4b3b8' DKGPhaseLength = 8 DKGStartBlockDelta = 5 diff --git a/docker-test-setup-api/config/keyper-2.toml b/docker-test-setup-api/config/keyper-2.toml index 85792e13..e6d65f46 100644 --- a/docker-test-setup-api/config/keyper-2.toml +++ b/docker-test-setup-api/config/keyper-2.toml @@ -5,7 +5,6 @@ InstanceID = 0 # If it's empty, we use the standard PG_ environment variables DatabaseURL = "postgres://postgres@db:5432/keyper-2" -BeaconAPIURL = 'http://localhost:5052' HTTPEnabled = false HTTPListenAddress = ':3000' MaxNumKeysPerMessage = 500 @@ -16,7 +15,6 @@ ListenAddresses = ["/ip4/0.0.0.0/tcp/23000"] # Overwrite p2p boostrap nodes CustomBootstrapAddresses = [ "/dns4/bootnode-0/tcp/23000/p2p/12D3KooWJN7262vmnEQHkYG7VrZDwz9fMyJtHyvGp4XSenuUYfeJ", - "/dns4/bootnode-1/tcp/23000/p2p/12D3KooWSayB2PEYpXtdk2dEqFaagoy8kDzmWpoD9DieuuzYdcBo" ] DiscoveryNamespace = 'shutter-local' # Optional, to be set to true if running an access node @@ -29,13 +27,14 @@ Topics = [] [Chain] SyncStartBlockNumber = 0 +SyncMonitorCheckInterval = 60 [Chain.Node] PrivateKey = 'e9383a24352f05bc11895c0da19efb6b83c726f05643c38f64b4146f19215125' # Contract source directory DeploymentDir = '/deployments/localhost/' # The layer 1 JSON RPC endpoint -EthereumURL = "ws://blockchain:8546/" +EthereumURL = "ws://blockchain:8545/" [Chain.Contracts] KeyperSetManager = "0x8464135c8f25da09e49bc8782676a84730c318bc" @@ -44,7 +43,7 @@ KeyBroadcastContract = "0x59f2f1fcfe2474fd5f0b9ba1e73ca90b143eb8d0" [Shuttermint] ShuttermintURL = "http://chain-0-validator:26657" -ValidatorPublicKey = "90278a149655f84695f390bd5e83d71ed04a67cbce490deda66110b00f4a0386" +ValidatorPublicKey = "f058f555488d9feb60373c26daf6e4596e38aee17828d9491791a4af0c00539d" EncryptionKey = '782629977650cc003b122a611aa4d2e075fcfbc8bb92a49a832ca518c87b6ce8' DKGPhaseLength = 8 DKGStartBlockDelta = 5 diff --git a/docker-test-setup-api/config/node-deploy.json b/docker-test-setup-api/config/node-deploy.json index 5b8af235..892dbd24 100644 --- a/docker-test-setup-api/config/node-deploy.json +++ b/docker-test-setup-api/config/node-deploy.json @@ -5,9 +5,5 @@ "0x539cF80D345d26525A47dB80De0fAb147D588fDa", "0x4F01A5A4Ef09c08Df83A85885516424A4a53be68" ] - ], - "decryptors": ["0x0000000000000000000000000000000000000000"], - "collator": "0x2E135FE171fB6351026B75aF688a7F9689B66B87", - "fundValue": "1000", - "activationBlockOffset": 30 + ] } diff --git a/docker-test-setup-api/config/op-bootstrap.toml b/docker-test-setup-api/config/op-bootstrap.toml new file mode 100644 index 00000000..e715d035 --- /dev/null +++ b/docker-test-setup-api/config/op-bootstrap.toml @@ -0,0 +1,7 @@ +InstanceID = 42 +JSONRPCURL = 'ws://blockchain:8545' +KeyperSetManager = "0x8464135c8f25da09e49bc8782676a84730c318bc" +ByIndex = 1 +KeyperSetFilePath = '/config/keyperset.json' +ShuttermintURL = 'http://chain-0-validator:26657' +SigningKey = "59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d" diff --git a/docker-test-setup-api/docker-compose.yml b/docker-test-setup-api/docker-compose.yml index c6a89d02..f6bb2290 100644 --- a/docker-test-setup-api/docker-compose.yml +++ b/docker-test-setup-api/docker-compose.yml @@ -71,6 +71,7 @@ services: volumes: - ./data/chain-0-validator:/chain - ./data/deployments:/deployments + - ./config:/config command: "--config /chain/config/config.toml" depends_on: - deploy-contracts @@ -120,7 +121,7 @@ services: restart: always entrypoint: - /rolling-shutter - - opbootstrap + - p2pnode command: "--config /config/bootstrap.toml" volumes: - ./config:/config @@ -135,7 +136,7 @@ services: restart: always entrypoint: - /rolling-shutter - - "--loglevel=:debug,basichost:info,swarm:info,swarm2:info,net/identify:info,pubsub:info,p2p-config:info,upgrader:info" + - "--loglevel=:error,basichost:info,swarm:info,swarm2:info,net/identify:info,pubsub:info,p2p-config:info,upgrader:info" - shutterservicekeyper command: "--config /config/keyper-0.toml" volumes: @@ -157,7 +158,7 @@ services: restart: always entrypoint: - /rolling-shutter - - "--loglevel=:debug,basichost:info,swarm:info,swarm2:info,net/identify:info,pubsub:info,p2p-config:info,upgrader:info" + - "--loglevel=:error,basichost:info,swarm:info,swarm2:info,net/identify:info,pubsub:info,p2p-config:info,upgrader:info" - shutterservicekeyper command: "--config /config/keyper-1.toml" volumes: @@ -179,7 +180,7 @@ services: restart: always entrypoint: - /rolling-shutter - - "--loglevel=:debug,basichost:info,swarm:info,swarm2:info,net/identify:info,pubsub:info,p2p-config:info,upgrader:info" + - "--loglevel=:error,basichost:info,swarm:info,swarm2:info,net/identify:info,pubsub:info,p2p-config:info,upgrader:info" - shutterservicekeyper command: "--config /config/keyper-2.toml" volumes: @@ -196,13 +197,6 @@ services: condition: service_started logging: *logging - dummyserver: - build: - dockerfile: docker/build-src/dummyserver/Dockerfile - context: .. - restart: always - logging: *logging - wait-for-db: image: postgres:latest profiles: @@ -219,8 +213,3 @@ services: - db logging: *logging - dockerize: - image: jwilder/dockerize - profiles: - - script - logging: *logging diff --git a/docker-test-setup-api/get-contracts.sh b/docker-test-setup-api/get-contracts.sh index 1ebe9a23..4d757ffa 100755 --- a/docker-test-setup-api/get-contracts.sh +++ b/docker-test-setup-api/get-contracts.sh @@ -24,4 +24,5 @@ done echo "Setting up bootstrap.toml" ${BB} sed -i "/^KeyperSetManager =/cKeyperSetManager = \"${KeyperSetManager}\"" "config/bootstrap.toml" -${BB} sed -i "/^SigningKey =/cSigningKey = \"$(echo $DEPLOY_KEY | cut -b3-)\"" "config/bootstrap.toml" +${BB} sed -i "/^KeyperSetManager =/cKeyperSetManager = \"${KeyperSetManager}\"" "config/op-bootstrap.toml" +${BB} sed -i "/^SigningKey =/cSigningKey = \"$(echo $DEPLOY_KEY | cut -b3-)\"" "config/op-bootstrap.toml" From b1b7acf32657b678389e83bb496a10ce955bcfde Mon Sep 17 00:00:00 2001 From: blockchainluffy Date: Wed, 4 Jun 2025 17:42:51 +0530 Subject: [PATCH 7/8] feat: add AddKeyperSet script --- docker-test-setup-api/.gitignore | 1 - docker-test-setup-api/04-addkeyperset.sh | 22 ++++++++++++++ .../{04-bootstrap.sh => 05-bootstrap.sh} | 0 docker-test-setup-api/docker-compose.yml | 29 +++++++++++++++---- docker-test-setup-api/get-contracts.sh | 2 +- 5 files changed, 47 insertions(+), 7 deletions(-) create mode 100755 docker-test-setup-api/04-addkeyperset.sh rename docker-test-setup-api/{04-bootstrap.sh => 05-bootstrap.sh} (100%) diff --git a/docker-test-setup-api/.gitignore b/docker-test-setup-api/.gitignore index 3da9bd7a..3af0ccb6 100644 --- a/docker-test-setup-api/.gitignore +++ b/docker-test-setup-api/.gitignore @@ -1,2 +1 @@ /data -.env diff --git a/docker-test-setup-api/04-addkeyperset.sh b/docker-test-setup-api/04-addkeyperset.sh new file mode 100755 index 00000000..75c5db18 --- /dev/null +++ b/docker-test-setup-api/04-addkeyperset.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +source ./common.sh +source .env +set -e + +CONTRACTS_JSON=$(jq '.transactions[]|(select(.function==null))|{(.contractName|tostring): .contractAddress}' data/deployments/Deploy.service.s.sol/31337/run-latest.json) + +for s in $(echo ${CONTRACTS_JSON} | jq -r "to_entries|map(\"\(.key)=\(.value|tostring)\")| .[] "); do + export $s +done + +# Get keyper addresses from node-deploy.json +export KEYPER_ADDRESSES=$(jq -r '.keypers[0] | join(",")' config/node-deploy.json) + +echo "Submitting Add Keyper Set transaction" +export THRESHOLD=2 +export KEYPERSETMANAGER_ADDRESS=${KeyperSetManager} +export KEYBROADCAST_ADDRESS=${KeyBroadcastContract} +export ACTIVATION_DELTA=10 + +$DC run --rm --no-deps add-keyper-set diff --git a/docker-test-setup-api/04-bootstrap.sh b/docker-test-setup-api/05-bootstrap.sh similarity index 100% rename from docker-test-setup-api/04-bootstrap.sh rename to docker-test-setup-api/05-bootstrap.sh diff --git a/docker-test-setup-api/docker-compose.yml b/docker-test-setup-api/docker-compose.yml index f6bb2290..e3197ae0 100644 --- a/docker-test-setup-api/docker-compose.yml +++ b/docker-test-setup-api/docker-compose.yml @@ -53,8 +53,30 @@ services: environment: DEPLOY_KEY: ${DEPLOY_KEY} PRIVATE_KEY: ${DEPLOY_KEY} - # DEPLOY_CONF: /config/node-deploy.json - # KEYPER_SET_INDEX: 0 + volumes: + - ./data/deployments:/contracts/broadcast + - ./config:/config + depends_on: + - blockchain + logging: *logging + + add-keyper-set: + build: + dockerfile: docker-test-setup-api/build-src/deploy_contracts/Dockerfile + context: .. + command: + - "./script/AddKeyperSet.s.sol" + - "--rpc-url" + - "http://blockchain:8545" + - "--broadcast" + environment: + DEPLOY_KEY: ${DEPLOY_KEY} + PRIVATE_KEY: ${DEPLOY_KEY} + ACTIVATION_DELTA: ${ACTIVATION_DELTA} + KEYPERSETMANAGER_ADDRESS: ${KEYPERSETMANAGER_ADDRESS} + KEYBROADCAST_ADDRESS: ${KEYBROADCAST_ADDRESS} + KEYPER_ADDRESSES: ${KEYPER_ADDRESSES} + THRESHOLD: ${THRESHOLD} volumes: - ./data/deployments:/contracts/broadcast - ./config:/config @@ -136,7 +158,6 @@ services: restart: always entrypoint: - /rolling-shutter - - "--loglevel=:error,basichost:info,swarm:info,swarm2:info,net/identify:info,pubsub:info,p2p-config:info,upgrader:info" - shutterservicekeyper command: "--config /config/keyper-0.toml" volumes: @@ -158,7 +179,6 @@ services: restart: always entrypoint: - /rolling-shutter - - "--loglevel=:error,basichost:info,swarm:info,swarm2:info,net/identify:info,pubsub:info,p2p-config:info,upgrader:info" - shutterservicekeyper command: "--config /config/keyper-1.toml" volumes: @@ -180,7 +200,6 @@ services: restart: always entrypoint: - /rolling-shutter - - "--loglevel=:error,basichost:info,swarm:info,swarm2:info,net/identify:info,pubsub:info,p2p-config:info,upgrader:info" - shutterservicekeyper command: "--config /config/keyper-2.toml" volumes: diff --git a/docker-test-setup-api/get-contracts.sh b/docker-test-setup-api/get-contracts.sh index 4d757ffa..1ea4c648 100755 --- a/docker-test-setup-api/get-contracts.sh +++ b/docker-test-setup-api/get-contracts.sh @@ -22,7 +22,7 @@ for cfg in keyper-{0..2}.toml; do done done -echo "Setting up bootstrap.toml" +echo "Setting up bootstrap.toml and op-bootstrap.toml" ${BB} sed -i "/^KeyperSetManager =/cKeyperSetManager = \"${KeyperSetManager}\"" "config/bootstrap.toml" ${BB} sed -i "/^KeyperSetManager =/cKeyperSetManager = \"${KeyperSetManager}\"" "config/op-bootstrap.toml" ${BB} sed -i "/^SigningKey =/cSigningKey = \"$(echo $DEPLOY_KEY | cut -b3-)\"" "config/op-bootstrap.toml" From b83bb57e9bd3f06280e6bd75da47676346ec1635 Mon Sep 17 00:00:00 2001 From: blockchainluffy Date: Thu, 5 Jun 2025 14:06:52 +0530 Subject: [PATCH 8/8] feat: add decryption test and fix bootstrap keyper script --- docker-test-setup-api/02-init-chain.sh | 2 +- docker-test-setup-api/05-bootstrap.sh | 4 ++- docker-test-setup-api/06-test-decryption.sh | 34 +++++++++++++++++++ docker-test-setup-api/90-stop.sh | 6 ++++ .../config/op-bootstrap.toml | 2 +- docker-test-setup-api/docker-compose.yml | 23 ++++++++++++- docker-test-setup-api/get-contracts.sh | 1 - 7 files changed, 67 insertions(+), 5 deletions(-) create mode 100755 docker-test-setup-api/06-test-decryption.sh create mode 100755 docker-test-setup-api/90-stop.sh diff --git a/docker-test-setup-api/02-init-chain.sh b/docker-test-setup-api/02-init-chain.sh index bb126c47..5e86b5da 100755 --- a/docker-test-setup-api/02-init-chain.sh +++ b/docker-test-setup-api/02-init-chain.sh @@ -35,7 +35,7 @@ for num in {0..2}; do $DC run --rm --no-deps ${validator_cmd} init \ --root /chain \ - --genesis-keyper 0x346a9357D8EB6F0FbC4894ed6DBb1eCCA1051c09 \ + --genesis-keyper 0x440Dc6F164e9241F04d282215ceF2780cd0B755e \ --blocktime 1 \ --listen-address tcp://0.0.0.0:${TM_RPC_PORT} \ --role validator diff --git a/docker-test-setup-api/05-bootstrap.sh b/docker-test-setup-api/05-bootstrap.sh index 5d5ed564..76fee6fd 100755 --- a/docker-test-setup-api/05-bootstrap.sh +++ b/docker-test-setup-api/05-bootstrap.sh @@ -6,4 +6,6 @@ echo "Submitting bootstrap transaction" $DC run --rm --no-deps --entrypoint /rolling-shutter chain-0-validator op-bootstrap fetch-keyperset \ --config /config/op-bootstrap.toml - # --deployment-dir /deployments/dockerGeth \ + +$DC run --rm --no-deps --entrypoint /rolling-shutter chain-0-validator op-bootstrap \ + --config /config/op-bootstrap.toml diff --git a/docker-test-setup-api/06-test-decryption.sh b/docker-test-setup-api/06-test-decryption.sh new file mode 100755 index 00000000..af83183f --- /dev/null +++ b/docker-test-setup-api/06-test-decryption.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash + +source ./common.sh +set -e + +echo "Submitting identity registration transaction" + +CONTRACTS_JSON=$(jq '.transactions[]|(select(.function==null))|{(.contractName|tostring): .contractAddress}' data/deployments/Deploy.service.s.sol/31337/run-latest.json) + +for s in $(echo ${CONTRACTS_JSON} | jq -r "to_entries|map(\"\(.key)=\(.value|tostring)\")| .[] "); do + export $s +done + +export TIMESTAMP=$(($(date +%s) + 50)) +export IDENTITY_PREFIX=0x$(LC_ALL=C tr -dc 'a-f0-9'