diff --git a/docker-test-setup-api/.gitignore b/docker-test-setup-api/.gitignore new file mode 100644 index 00000000..3af0ccb6 --- /dev/null +++ b/docker-test-setup-api/.gitignore @@ -0,0 +1 @@ +/data diff --git a/docker-test-setup-api/00-build.sh b/docker-test-setup-api/00-build.sh new file mode 100755 index 00000000..838bf839 --- /dev/null +++ b/docker-test-setup-api/00-build.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +source ./common.sh + +$DC --profile dev build diff --git a/docker-test-setup-api/01-init-db.sh b/docker-test-setup-api/01-init-db.sh new file mode 100755 index 00000000..d0d26121 --- /dev/null +++ b/docker-test-setup-api/01-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 wait-for-db + +for cmd in keyper-0 keyper-1 keyper-2; do + mkdb $cmd & +done + +wait + +$DC stop db diff --git a/docker-test-setup-api/02-init-chain.sh b/docker-test-setup-api/02-init-chain.sh new file mode 100755 index 00000000..5e86b5da --- /dev/null +++ b/docker-test-setup-api/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 0x440Dc6F164e9241F04d282215ceF2780cd0B755e \ + --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-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-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/05-bootstrap.sh b/docker-test-setup-api/05-bootstrap.sh new file mode 100755 index 00000000..76fee6fd --- /dev/null +++ b/docker-test-setup-api/05-bootstrap.sh @@ -0,0 +1,11 @@ +#!/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 + +$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' /dev/null 2>&1; then + DC="docker compose" +else + DC=docker-compose +fi + +set -xe diff --git a/docker-test-setup-api/config/bootstrap.toml b/docker-test-setup-api/config/bootstrap.toml new file mode 100644 index 00000000..dcac06ff --- /dev/null +++ b/docker-test-setup-api/config/bootstrap.toml @@ -0,0 +1,21 @@ +# Peer identity: /p2p/12D3KooWJN7262vmnEQHkYG7VrZDwz9fMyJtHyvGp4XSenuUYfeJ +# Peer role: bootstrap + +# whether to register handlers on the messages and log them +InstanceID = 0 +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 new file mode 100644 index 00000000..eede7009 --- /dev/null +++ b/docker-test-setup-api/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", +] +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 +SyncMonitorCheckInterval = 60 + +[Chain.Node] +PrivateKey = '82904d1c48d3a27d218408fc2db3e743f554a69b05b91d28c2897a9026ea47df' +# Contract source directory +DeploymentDir = '/deployments/localhost/' +# The layer 1 JSON RPC endpoint +EthereumURL = "ws://blockchain:8545/" + +[Chain.Contracts] +KeyperSetManager = "0x8464135c8f25da09e49bc8782676a84730c318bc" +ShutterRegistry = "0xc6ba8c3233ecf65b761049ef63466945c362edd2" +KeyBroadcastContract = "0x59f2f1fcfe2474fd5f0b9ba1e73ca90b143eb8d0" + +[Shuttermint] +ShuttermintURL = "http://chain-0-validator:26657" +ValidatorPublicKey = "feb818be329ca88d0d0588fbf695b96f9c674cbc4f08037a34ac97c9aa40c7d0" +EncryptionKey = '6bf7e6c8d6753d435f885f398f62f221a84f0ccb0c5e2a382290489441e16f77' +DKGPhaseLength = 8 +DKGStartBlockDelta = 5 + +[Metrics] +Enabled = true +Host = "[::]" +Port = 9100 \ No newline at end of file diff --git a/docker-test-setup-api/config/keyper-1.toml b/docker-test-setup-api/config/keyper-1.toml new file mode 100644 index 00000000..5bbed904 --- /dev/null +++ b/docker-test-setup-api/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", +] +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 +SyncMonitorCheckInterval = 60 + +[Chain.Node] +PrivateKey = '939babbad75cbcc42eef92496ce86ede989ba96918bbc6cc0efcc498f9cc0887' +# Contract source directory +DeploymentDir = '/deployments/localhost/' +# The layer 1 JSON RPC endpoint +EthereumURL = "ws://blockchain:8545/" + +[Chain.Contracts] +KeyperSetManager = "0x8464135c8f25da09e49bc8782676a84730c318bc" +ShutterRegistry = "0xc6ba8c3233ecf65b761049ef63466945c362edd2" +KeyBroadcastContract = "0x59f2f1fcfe2474fd5f0b9ba1e73ca90b143eb8d0" + +[Shuttermint] +ShuttermintURL = "http://chain-0-validator:26657" +ValidatorPublicKey = "906d1cf0abcdb59ba08851c35004d0e961181e49e085d9f2169c03ab86bca4b8" +EncryptionKey = 'd10fcd3a9db97ecf80a41b5fb30bb91ea16bf6a8575e389912a335b19cc4b3b8' +DKGPhaseLength = 8 +DKGStartBlockDelta = 5 + +[Metrics] +Enabled = true +Host = "[::]" +Port = 9100 \ No newline at end of file diff --git a/docker-test-setup-api/config/keyper-2.toml b/docker-test-setup-api/config/keyper-2.toml new file mode 100644 index 00000000..e6d65f46 --- /dev/null +++ b/docker-test-setup-api/config/keyper-2.toml @@ -0,0 +1,54 @@ +# 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" +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", +] +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 +SyncMonitorCheckInterval = 60 + +[Chain.Node] +PrivateKey = 'e9383a24352f05bc11895c0da19efb6b83c726f05643c38f64b4146f19215125' +# Contract source directory +DeploymentDir = '/deployments/localhost/' +# The layer 1 JSON RPC endpoint +EthereumURL = "ws://blockchain:8545/" + +[Chain.Contracts] +KeyperSetManager = "0x8464135c8f25da09e49bc8782676a84730c318bc" +ShutterRegistry = "0xc6ba8c3233ecf65b761049ef63466945c362edd2" +KeyBroadcastContract = "0x59f2f1fcfe2474fd5f0b9ba1e73ca90b143eb8d0" + +[Shuttermint] +ShuttermintURL = "http://chain-0-validator:26657" +ValidatorPublicKey = "f058f555488d9feb60373c26daf6e4596e38aee17828d9491791a4af0c00539d" +EncryptionKey = '782629977650cc003b122a611aa4d2e075fcfbc8bb92a49a832ca518c87b6ce8' +DKGPhaseLength = 8 +DKGStartBlockDelta = 5 + +[Metrics] +Enabled = true +Host = "[::]" +Port = 9100 \ No newline at end of file diff --git a/docker-test-setup-api/config/node-deploy.json b/docker-test-setup-api/config/node-deploy.json new file mode 100644 index 00000000..892dbd24 --- /dev/null +++ b/docker-test-setup-api/config/node-deploy.json @@ -0,0 +1,9 @@ +{ + "keypers": [ + [ + "0xCDD50A6F9B1439dc14c4f2A7eaF14dA1EF5A476c", + "0x539cF80D345d26525A47dB80De0fAb147D588fDa", + "0x4F01A5A4Ef09c08Df83A85885516424A4a53be68" + ] + ] +} 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..b8c871c8 --- /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 = "479968ffa5ee4c84514a477a8f15f3db0413964fd4c20b08a55fed9fed790fad" diff --git a/docker-test-setup-api/docker-compose.yml b/docker-test-setup-api/docker-compose.yml new file mode 100644 index 00000000..89ecc2bb --- /dev/null +++ b/docker-test-setup-api/docker-compose.yml @@ -0,0 +1,255 @@ +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-test-setup-api/build-src/setup-blockchain/Dockerfile + context: .. + restart: unless-stopped + ports: + - "8545:8545" + volumes: + - ./data/blockchain:/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-test-setup-api/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} + 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 + depends_on: + - blockchain + logging: *logging + + register-identity: + build: + dockerfile: docker-test-setup-api/build-src/deploy_contracts/Dockerfile + context: .. + command: + - "./script/SubmitTransaction.service.s.sol" + - "--rpc-url" + - "http://blockchain:8545" + - "--broadcast" + environment: + TX_SENDER_KEY: ${DEPLOY_KEY} + REGISTRY_ADDRESS: ${ShutterRegistry} + EON: 1 + IDENTITY_PREFIX: ${IDENTITY_PREFIX} + TIMESTAMP: ${TIMESTAMP} + volumes: + - ./data/deployments:/contracts/broadcast + - ./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 + - ./config:/config + command: "--config /chain/config/config.toml" + depends_on: + - deploy-contracts + 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: + - deploy-contracts + 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: + - deploy-contracts + 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 + + bootnode-0: + image: rolling-shutter + restart: always + entrypoint: + - /rolling-shutter + - p2pnode + command: "--config /config/bootstrap.toml" + volumes: + - ./config:/config + - ./data/deployments:/deployments + depends_on: + db: + condition: service_healthy + logging: *logging + + keyper-0: + image: rolling-shutter + restart: always + entrypoint: + - /rolling-shutter + - shutterservicekeyper + 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 + chain-0-validator: + condition: service_started + logging: *logging + + keyper-1: + image: rolling-shutter + restart: always + entrypoint: + - /rolling-shutter + - shutterservicekeyper + 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 + chain-1-validator: + condition: service_started + logging: *logging + + keyper-2: + image: rolling-shutter + restart: always + entrypoint: + - /rolling-shutter + - shutterservicekeyper + 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 + chain-2-validator: + condition: service_started + logging: *logging + + wait-for-db: + image: postgres:latest + profiles: + - 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 diff --git a/docker-test-setup-api/get-contracts.sh b/docker-test-setup-api/get-contracts.sh new file mode 100755 index 00000000..e96f34e3 --- /dev/null +++ b/docker-test-setup-api/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 and op-bootstrap.toml" +${BB} sed -i "/^KeyperSetManager =/cKeyperSetManager = \"${KeyperSetManager}\"" "config/bootstrap.toml" +${BB} sed -i "/^KeyperSetManager =/cKeyperSetManager = \"${KeyperSetManager}\"" "config/op-bootstrap.toml"