From ddf51e01a3af4c971c2aa61de5cf1436326b2f55 Mon Sep 17 00:00:00 2001 From: zramsay Date: Tue, 18 Apr 2023 18:01:54 -0400 Subject: [PATCH 01/18] first pass Former-commit-id: ca29e9cf0d887228db37ef4c190800c5fa107e79 --- docs/laconicd-fixturenet.md | 113 ++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 docs/laconicd-fixturenet.md diff --git a/docs/laconicd-fixturenet.md b/docs/laconicd-fixturenet.md new file mode 100644 index 00000000..bb60af9b --- /dev/null +++ b/docs/laconicd-fixturenet.md @@ -0,0 +1,113 @@ +# Running a laconicd fixturenet with console + +The following tutorial explains the steps to run a laconicd fixturenet with CLI and web console that displays records in the registry. It is designed as an introduction to Stack Orchestrator and to showcase one component of the Laconic Stack. Prior to Stack Orchestrator, the following 4 repositories had to be cloned and setup manually: + +- https://github.com/cerc-io/laconicd +- https://github.com/cerc-io/laconic-sdk +- https://github.com/cerc-io/laconic-registry-cli +- https://github.com/cerc-io/laconic-console + +Now, with Stack Orchestrator, it is a few quick commands. Additionally, the `docker` and `docker compose` integration on the back-end allows the stack to easily persist, facilitating workflows. + +## Setup laconic-so + +To avoid hiccups on Mac M1/M2 and any local machine nuances that may affect the user experience, this tutorial is focused on using a fresh Digital Ocean (DO) droplet with similar specs: +16 GB Memory / 8 Intel vCPUs / 160 GB Disk. + +1. Login to the droplet as root (either by SSH key or password set in the DO console) + +``` +ssh root@IP +``` + +2. Get the install script, give it executable permissions, and run it: + +``` +curl -o install.sh https://raw.githubusercontent.com/cerc-io/stack-orchestrator/main/scripts/quick-install-ubuntu.sh +``` +``` +chmod +x install.sh +``` +``` +bash install.sh +``` + +3. Confirm docker was installed and activate the changes in `~/.profile`: + +``` +docker run hello-world +``` +``` +source ~/.profile +``` + +4. Verify installation: + +``` +laconic-so version +``` + +## Setup the laconic fixturenet stack + +1. Get the repositories + +``` +laconic-so --stack fixturenet-laconic-loaded setup-repositories --include cerc-io/laconicd,cerc-io/laconic-sdk,cerc-io/laconic-registry-cli,cerc-io/laconic-console +``` + +2. Set this environment variable to the Laconic self-hosted Gitea instance: + +``` +export CERC_NPM_REGISTRY_URL=https://git.vdb.to/api/packages/cerc-io/npm/ +``` + +3. Build the containers: + +``` +laconic-so --stack fixturenet-laconic-loaded build-containers +``` + +It's possible to run into an `ESOCKETTIMEDOUT` error, e.g., `error An unexpected error occurred: "https://registry.yarnpkg.com/@material-ui/icons/-/icons-4.11.3.tgz: ESOCKETTIMEDOUT"`. This may happen even if you have a great internet connection. In that case, re-run the `build-containers` command. + +4. Set this environment variable to your droplet's IP address: + +``` +export LACONIC_HOSTED_ENDPOINT=68.183.195.210 +``` + +5. Deploy the stack: + +``` +laconic-so --stack fixturenet-laconic-loaded deploy up +``` + +6. Check the logs: + +``` +laconic-so --stack fixturenet-laconic-loaded deploy logs +``` + +You'll see output from `laconicd` and the block height should be >1 to confirm it is running: + +``` +laconic-5cd0a80c1442c3044c8b295d26426bae-laconicd-1 | 9:29PM INF indexed block exents height=12 module=txindex server=node +laconic-5cd0a80c1442c3044c8b295d26426bae-laconicd-1 | 9:30PM INF Timed out dur=4976.960115 height=13 module=consensus round=0 server=node step=1 +laconic-5cd0a80c1442c3044c8b295d26426bae-laconicd-1 | 9:30PM INF received proposal module=consensus proposal={"Type":32,"block_id":{"hash":"D26C088A711F912ADB97888C269F628DA33153795621967BE44DCB43C3D03CA4","parts":{"hash":"22411A20B7F14CDA33244420FBDDAF24450C0628C7A06034FF22DAC3699DDCC8","total":1}},"height":13,"pol_round":-1,"round":0,"signature":"DEuqnaQmvyYbUwckttJmgKdpRu6eVm9i+9rQ1pIrV2PidkMNdWRZBLdmNghkIrUzGbW8Xd7UVJxtLRmwRASgBg==","timestamp":"2023-04-18T21:30:01.49450663Z"} server=node +laconic-5cd0a80c1442c3044c8b295d26426bae-laconicd-1 | 9:30PM INF received complete proposal block hash=D26C088A711F912ADB97888C269F628DA33153795621967BE44DCB43C3D03CA4 height=13 module=consensus server=node +laconic-5cd0a80c1442c3044c8b295d26426bae-laconicd-1 | 9:30PM INF finalizing commit of block hash={} height=13 module=consensus num_txs=0 root=1A8CA1AF139CCC80EC007C6321D8A63A46A793386EE2EDF9A5CA0AB2C90728B7 server=node +laconic-5cd0a80c1442c3044c8b295d26426bae-laconicd-1 | 9:30PM INF minted coins from module account amount=2059730459416582643aphoton from=mint module=x/bank +laconic-5cd0a80c1442c3044c8b295d26426bae-laconicd-1 | 9:30PM INF executed block height=13 module=state num_invalid_txs=0 num_valid_txs=0 server=node +laconic-5cd0a80c1442c3044c8b295d26426bae-laconicd-1 | 9:30PM INF commit synced commit=436F6D6D697449447B5B363520313037203630203232372039352038352032303820313334203231392032303520313433203130372031343920313431203139203139322038362031323720362031383520323533203137362031333820313735203135392031383620323334203135382031323120313431203230342037335D3A447D +laconic-5cd0a80c1442c3044c8b295d26426bae-laconicd-1 | 9:30PM INF committed state app_hash=416B3CE35F55D086DBCD8F6B958D13C0567F06B9FDB08AAF9FBAEA9E798DCC49 height=13 module=state num_txs=0 server=node +laconic-5cd0a80c1442c3044c8b295d26426bae-laconicd-1 | 9:30PM INF indexed block exents height=13 module=txindex server=node +``` + +7. Confirm operation of the registry CLI: + +``` +laconic-so --stack fixturenet-laconic-loaded deploy exec cli "laconic cns status" +``` + +## Configure Digital Ocean firewall + +Let's open some ports. In the DO web console, navigate to your droplet's main page. Select the "Networking" tab and scroll down to "Firewall". From feee38140d8602f903779570a8296cc6955eeb72 Mon Sep 17 00:00:00 2001 From: zramsay Date: Tue, 18 Apr 2023 18:48:52 -0400 Subject: [PATCH 02/18] second pass Former-commit-id: 07c2a01a5810d2d446e8465f4db4ce4bdcfc619f --- docs/laconicd-fixturenet.md | 72 ++++++++++++++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 1 deletion(-) diff --git a/docs/laconicd-fixturenet.md b/docs/laconicd-fixturenet.md index bb60af9b..b9045970 100644 --- a/docs/laconicd-fixturenet.md +++ b/docs/laconicd-fixturenet.md @@ -110,4 +110,74 @@ laconic-so --stack fixturenet-laconic-loaded deploy exec cli "laconic cns status ## Configure Digital Ocean firewall -Let's open some ports. In the DO web console, navigate to your droplet's main page. Select the "Networking" tab and scroll down to "Firewall". +Let's open some ports. + +1. In the Digital Ocean web console, navigate to your droplet's main page. Select the "Networking" tab and scroll down to "Firewall". + +2. Get the port for the running console: + +``` +echo http://IP:$(laconic-so --stack fixturenet-laconic-loaded deploy port laconic-console 80 | cut -d ':' -f 2) +``` +``` +http://IP:32778 +``` + +3. Go back to the Digital Ocean web console and set an Inbound Rule for Custom TCP of the above port: + +- `32778` in this example, but yours will be different. +- do the same for port `9473` + +Additional ports will need to be opened depending on your application. Ensure you add your droplet to this new Firewall and wait a minute or so for the update to propagate. + +4. Navigate to http://IP:port and ensure laconic-console is functioning as expected: + +- ensure you are connected to `laconicd`; no error message should pop up; +- the wifi symbol in the bottom right should have a green check mark beside it +- navigate to the status tab; it should display similar/identical information +- navigate to the config tab, you'll see something like (with your IP): + +``` +wns + webui 68.183.195.210:9473/console + server 68.183.195.210:9473/api +``` + +## Publish and query a sample record to the registry + +1. The following command will create a bond and publish a record: + +``` +laconic-so --stack fixturenet-laconic-loaded deploy exec cli ./scripts/create-demo-records.sh +``` + +You'll get an output like: + +``` +Balance is: 99998999999999998999600000 +Created bond with id: dd88e8d6f9567b32b28e70552aea4419c5dd3307ebae85a284d1fe38904e301a +Published demo-record-1.yml with id: bafyreierh3xnfivexlscdwubvczmddsnf46uytyfvrbdhkjzztvsz6ruly +``` + +The sample record we deployed looks like: + +``` +TODO +``` + +2. Return to the laconic-console + +- the published record should now be viewable +- explore it for more information +- click on the link that opens the GraphQL console +- the query is pre-loaded, click the button to run it +- inspect the output + +3. Try out additional CLI commands + +- these are documented [here](https://github.com/cerc-io/laconic-registry-cli#readme) and updates are forthcoming +- e.g,: + +``` +laconic-so --stack fixturenet-laconic-loaded deploy exec cli "laconic cns record list" +``` From 1629129cd5f1edea30fb0ed34d5556a7feefc571 Mon Sep 17 00:00:00 2001 From: zramsay Date: Tue, 18 Apr 2023 19:54:18 -0400 Subject: [PATCH 03/18] the fix Former-commit-id: e5b9b74b4c0b890d6e79627f47139ef0b255e7a2 --- docs/laconicd-fixturenet.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/laconicd-fixturenet.md b/docs/laconicd-fixturenet.md index b9045970..66ae1020 100644 --- a/docs/laconicd-fixturenet.md +++ b/docs/laconicd-fixturenet.md @@ -72,7 +72,7 @@ It's possible to run into an `ESOCKETTIMEDOUT` error, e.g., `error An unexpected 4. Set this environment variable to your droplet's IP address: ``` -export LACONIC_HOSTED_ENDPOINT=68.183.195.210 +export LACONIC_HOSTED_ENDPOINT=http://68.183.195.210 ``` 5. Deploy the stack: @@ -139,8 +139,8 @@ Additional ports will need to be opened depending on your application. Ensure yo ``` wns - webui 68.183.195.210:9473/console - server 68.183.195.210:9473/api + webui http://68.183.195.210:9473/console + server http://68.183.195.210:9473/api ``` ## Publish and query a sample record to the registry From 209d49f10501078a36929018688007db566438cd Mon Sep 17 00:00:00 2001 From: Zach Date: Wed, 19 Apr 2023 21:10:19 -0400 Subject: [PATCH 04/18] Update laconicd-fixturenet.md Former-commit-id: 32c0830e777ec3ca9d9b638e4c0d6071cd9d4aaa --- docs/laconicd-fixturenet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/laconicd-fixturenet.md b/docs/laconicd-fixturenet.md index 66ae1020..eacdf33e 100644 --- a/docs/laconicd-fixturenet.md +++ b/docs/laconicd-fixturenet.md @@ -72,7 +72,7 @@ It's possible to run into an `ESOCKETTIMEDOUT` error, e.g., `error An unexpected 4. Set this environment variable to your droplet's IP address: ``` -export LACONIC_HOSTED_ENDPOINT=http://68.183.195.210 +export LACONIC_HOSTED_ENDPOINT=http:// ``` 5. Deploy the stack: From 7a1ec3f196749db24e54010c4791bd6d44aae8a0 Mon Sep 17 00:00:00 2001 From: prathamesh0 <42446521+prathamesh0@users.noreply.github.com> Date: Fri, 21 Apr 2023 17:27:53 +0530 Subject: [PATCH 05/18] Fix mobymask contract deployment script (#362) Former-commit-id: 0bc54b30e0512bcf5f261b379a88fca3c004c44f --- app/data/compose/docker-compose-fixturenet-optimism.yml | 6 +++--- .../watcher-mobymask-v2/deploy-and-generate-invite.sh | 2 +- .../container-build/cerc-watcher-mobymask-v2/Dockerfile | 2 +- app/data/stacks/mobymask-v2/watcher-p2p-network.md | 4 +--- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/app/data/compose/docker-compose-fixturenet-optimism.yml b/app/data/compose/docker-compose-fixturenet-optimism.yml index c651e5a7..02b0cbc3 100644 --- a/app/data/compose/docker-compose-fixturenet-optimism.yml +++ b/app/data/compose/docker-compose-fixturenet-optimism.yml @@ -31,7 +31,7 @@ services: - l2_accounts:/l2-accounts - l1_deployment:/app/packages/contracts-bedrock extra_hosts: - - "host.docker.internal:host-gateway" + - "host.docker.internal:host-gateway" # Generates the config files required for L2 (outputs to volume l2_config) op-node-l2-config-gen: @@ -50,7 +50,7 @@ services: - l2_config:/app command: ["sh", "/app/generate-l2-config.sh"] extra_hosts: - - "host.docker.internal:host-gateway" + - "host.docker.internal:host-gateway" # Initializes and runs the L2 execution client (outputs to volume l2_geth_data) op-geth: @@ -123,7 +123,7 @@ services: command: | "/wait-for-it.sh -h ${CERC_L1_HOST:-$${DEFAULT_CERC_L1_HOST}} -p ${CERC_L1_PORT:-$${DEFAULT_CERC_L1_PORT}} -s -t 60 -- /run-op-batcher.sh" extra_hosts: - - "host.docker.internal:host-gateway" + - "host.docker.internal:host-gateway" volumes: l1_deployment: diff --git a/app/data/config/watcher-mobymask-v2/deploy-and-generate-invite.sh b/app/data/config/watcher-mobymask-v2/deploy-and-generate-invite.sh index c7fc1c70..e574c56b 100755 --- a/app/data/config/watcher-mobymask-v2/deploy-and-generate-invite.sh +++ b/app/data/config/watcher-mobymask-v2/deploy-and-generate-invite.sh @@ -48,7 +48,7 @@ CERC_L2_GETH_PORT="${CERC_L2_GETH_PORT:-${DEFAULT_CERC_L2_GETH_PORT}}" CERC_L2_NODE_HOST="${CERC_L2_NODE_HOST:-${DEFAULT_CERC_L2_NODE_HOST}}" CERC_L2_NODE_PORT="${CERC_L2_NODE_PORT:-${DEFAULT_CERC_L2_NODE_PORT}}" ./wait-for-it.sh -h "${CERC_L2_GETH_HOST}" -p "${CERC_L2_GETH_PORT}" -s -t 0 -./wait-for-it.sh -h "${CERC_L2_GETH_PORT}" -p "${CERC_L2_NODE_PORT}" -s -t 0 +./wait-for-it.sh -h "${CERC_L2_NODE_HOST}" -p "${CERC_L2_NODE_PORT}" -s -t 0 export RPC_URL="${CERC_L2_GETH_RPC}" diff --git a/app/data/container-build/cerc-watcher-mobymask-v2/Dockerfile b/app/data/container-build/cerc-watcher-mobymask-v2/Dockerfile index c572658d..6c100091 100644 --- a/app/data/container-build/cerc-watcher-mobymask-v2/Dockerfile +++ b/app/data/container-build/cerc-watcher-mobymask-v2/Dockerfile @@ -14,7 +14,7 @@ WORKDIR /app COPY . . -RUN echo "Building watcher-ts" && \ +RUN echo "Building mobymask-v2-watcher-ts" && \ yarn && yarn build WORKDIR /app diff --git a/app/data/stacks/mobymask-v2/watcher-p2p-network.md b/app/data/stacks/mobymask-v2/watcher-p2p-network.md index 563012e8..5fbaf79e 100644 --- a/app/data/stacks/mobymask-v2/watcher-p2p-network.md +++ b/app/data/stacks/mobymask-v2/watcher-p2p-network.md @@ -99,9 +99,8 @@ laconic-so --stack mobymask-v2 deploy --cluster mobymask_v2 --include watcher-mo # Expected output (ignore the "The X variable is not set. Defaulting to a blank string." warnings): -# [+] Running 10/10 +# [+] Running 9/9 # ✔ Network mobymask_v2_default Created 0.1s -# ✔ Volume "mobymask_v2_fixturenet_geth_accounts" Created 0.0s # ✔ Volume "mobymask_v2_peers_ids" Created 0.0s # ✔ Volume "mobymask_v2_mobymask_watcher_db_data" Created 0.0s # ✔ Volume "mobymask_v2_mobymask_deployment" Created 0.0s @@ -291,7 +290,6 @@ Clear volumes created by this stack: # Expected output: - # mobymask_v2_fixturenet_geth_accounts # mobymask_v2_mobymask_deployment # mobymask_v2_mobymask_watcher_db_data # mobymask_v2_peers_ids From 10337e77f6bc6cc27bf7b24650ebc903e6f6a758 Mon Sep 17 00:00:00 2001 From: Nabarun Gogoi Date: Mon, 24 Apr 2023 17:55:17 +0530 Subject: [PATCH 06/18] Upgrade mobymkas-ui package version for endorse member UI (#365) Former-commit-id: d7ea87426885f85a78efbc67d310b9abde3f21b8 --- app/data/container-build/cerc-mobymask-ui/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/data/container-build/cerc-mobymask-ui/Dockerfile b/app/data/container-build/cerc-mobymask-ui/Dockerfile index e5a804b4..651d718f 100644 --- a/app/data/container-build/cerc-mobymask-ui/Dockerfile +++ b/app/data/container-build/cerc-mobymask-ui/Dockerfile @@ -52,7 +52,7 @@ RUN yarn global add http-server # Install old version of MobyMask web app RUN yarn global add @cerc-io/mobymask-ui@0.1.3 # Install the LXDAO version of MobyMask web app -RUN yarn global add @cerc-io/mobymask-ui-lxdao@npm:@cerc-io/mobymask-ui@0.1.3-lxdao-0.1.0 +RUN yarn global add @cerc-io/mobymask-ui-lxdao@npm:@cerc-io/mobymask-ui@0.1.3-lxdao-0.1.1 # Expose port for http EXPOSE 80 From 7f3a33564a703f8efb12f55300c01f2923857441 Mon Sep 17 00:00:00 2001 From: prathamesh0 <42446521+prathamesh0@users.noreply.github.com> Date: Tue, 25 Apr 2023 10:41:47 +0530 Subject: [PATCH 07/18] Upgrade Optimism and add op-proposer (#364) * Use the latest stable optimism release * Remove unnecessary repos from repo-list * Add op-proposer service to fixturenet-optimism stack * Add jq and bash to op-proposer image * Update instructions * Update op-batcher and op-geth commands Former-commit-id: 988be0ef9ab6c4f3b74431ca0bd31c41fa0584b0 --- .../docker-compose-fixturenet-optimism.yml | 23 ++++++++++++ .../optimism-contracts/run.sh | 16 ++++----- .../fixturenet-optimism/run-op-batcher.sh | 4 +-- .../config/fixturenet-optimism/run-op-geth.sh | 4 +-- .../config/fixturenet-optimism/run-op-node.sh | 3 +- .../fixturenet-optimism/run-op-proposer.sh | 36 +++++++++++++++++++ .../cerc-optimism-l2geth/build.sh | 3 ++ .../cerc-optimism-op-batcher/build.sh | 3 ++ .../cerc-optimism-op-node/build.sh | 3 ++ .../cerc-optimism-op-proposer/Dockerfile | 31 ++++++++++++++++ .../cerc-optimism-op-proposer/build.sh | 8 +++++ app/data/container-image-list.txt | 1 + app/data/pod-list.txt | 1 - app/data/repository-list.txt | 2 -- app/data/stacks/fixturenet-optimism/README.md | 5 +-- .../stacks/fixturenet-optimism/l2-only.md | 7 ++-- app/data/stacks/fixturenet-optimism/stack.yml | 1 + app/data/stacks/mobymask-v2/README.md | 2 +- 18 files changed, 131 insertions(+), 22 deletions(-) create mode 100755 app/data/config/fixturenet-optimism/run-op-proposer.sh create mode 100644 app/data/container-build/cerc-optimism-op-proposer/Dockerfile create mode 100755 app/data/container-build/cerc-optimism-op-proposer/build.sh diff --git a/app/data/compose/docker-compose-fixturenet-optimism.yml b/app/data/compose/docker-compose-fixturenet-optimism.yml index 02b0cbc3..c9e17b03 100644 --- a/app/data/compose/docker-compose-fixturenet-optimism.yml +++ b/app/data/compose/docker-compose-fixturenet-optimism.yml @@ -125,6 +125,29 @@ services: extra_hosts: - "host.docker.internal:host-gateway" + # Runs the proposer (periodically submits new state roots to L1) + op-proposer: + image: cerc/optimism-op-proposer:local + depends_on: + op-node: + condition: service_healthy + env_file: + - ../config/fixturenet-optimism/l1-params.env + environment: + CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG} + CERC_L1_RPC: ${CERC_L1_RPC} + volumes: + - ../config/wait-for-it.sh:/wait-for-it.sh + - ../config/fixturenet-optimism/run-op-proposer.sh:/run-op-proposer.sh + - l1_deployment:/contracts-bedrock:ro + - l2_accounts:/l2-accounts:ro + entrypoint: ["sh", "-c"] + # Waits for L1 endpoint to be up before running the proposer + command: | + "/wait-for-it.sh -h ${CERC_L1_HOST:-$${DEFAULT_CERC_L1_HOST}} -p ${CERC_L1_PORT:-$${DEFAULT_CERC_L1_PORT}} -s -t 60 -- /run-op-proposer.sh" + extra_hosts: + - "host.docker.internal:host-gateway" + volumes: l1_deployment: l2_accounts: diff --git a/app/data/config/fixturenet-optimism/optimism-contracts/run.sh b/app/data/config/fixturenet-optimism/optimism-contracts/run.sh index eb55e1fd..d878c03f 100755 --- a/app/data/config/fixturenet-optimism/optimism-contracts/run.sh +++ b/app/data/config/fixturenet-optimism/optimism-contracts/run.sh @@ -76,6 +76,13 @@ else echo "Couldn't fetch L1 account credentials, using them from env" fi +# Send balances to the above L2 addresses +yarn hardhat send-balance --to "${ADMIN_ADDRESS}" --amount 2 --private-key "${CERC_L1_PRIV_KEY}" --network getting-started +yarn hardhat send-balance --to "${PROPOSER_ADDRESS}" --amount 5 --private-key "${CERC_L1_PRIV_KEY}" --network getting-started +yarn hardhat send-balance --to "${BATCHER_ADDRESS}" --amount 1000 --private-key "${CERC_L1_PRIV_KEY}" --network getting-started + +echo "Balances sent to L2 accounts" + # Select a finalized L1 block as the starting point for roll ups until FINALIZED_BLOCK=$(cast block finalized --rpc-url "$CERC_L1_RPC"); do echo "Waiting for a finalized L1 block to exist, retrying after 10s" @@ -88,13 +95,6 @@ L1_BLOCKTIMESTAMP=$(echo "$FINALIZED_BLOCK" | awk '/timestamp/{print $2}') echo "Selected L1 block ${L1_BLOCKNUMBER} as the starting block for roll ups" -# Send balances to the above L2 addresses -yarn hardhat send-balance --to "${ADMIN_ADDRESS}" --amount 2 --private-key "${CERC_L1_PRIV_KEY}" --network getting-started -yarn hardhat send-balance --to "${PROPOSER_ADDRESS}" --amount 5 --private-key "${CERC_L1_PRIV_KEY}" --network getting-started -yarn hardhat send-balance --to "${BATCHER_ADDRESS}" --amount 1000 --private-key "${CERC_L1_PRIV_KEY}" --network getting-started - -echo "Balances sent to L2 accounts" - # Update the deployment config sed -i 's/"l2OutputOracleStartingTimestamp": TIMESTAMP/"l2OutputOracleStartingTimestamp": '"$L1_BLOCKTIMESTAMP"'/g' deploy-config/getting-started.json jq --arg chainid "$CERC_L1_CHAIN_ID" '.l1ChainID = ($chainid | tonumber)' deploy-config/getting-started.json > tmp.json && mv tmp.json deploy-config/getting-started.json @@ -110,7 +110,7 @@ echo "PRIVATE_KEY_DEPLOYER=$ADMIN_PRIV_KEY" >> .env echo "Deploying the L1 smart contracts, this will take a while..." # Deploy the L1 smart contracts -yarn hardhat deploy --network getting-started +yarn hardhat deploy --network getting-started --tags l1 echo "Deployed the L1 smart contracts" diff --git a/app/data/config/fixturenet-optimism/run-op-batcher.sh b/app/data/config/fixturenet-optimism/run-op-batcher.sh index 4bee6036..18955545 100755 --- a/app/data/config/fixturenet-optimism/run-op-batcher.sh +++ b/app/data/config/fixturenet-optimism/run-op-batcher.sh @@ -6,7 +6,7 @@ fi CERC_L1_RPC="${CERC_L1_RPC:-${DEFAULT_CERC_L1_RPC}}" -# Get BACTHER_KEY from keys.json +# Get Batcher key from keys.json BATCHER_KEY=$(jq -r '.Batcher.privateKey' /l2-accounts/keys.json | tr -d '"') cleanup() { @@ -18,6 +18,7 @@ cleanup() { } trap 'cleanup' INT TERM +# Run op-batcher op-batcher \ --l2-eth-rpc=http://op-geth:8545 \ --rollup-rpc=http://op-node:8547 \ @@ -30,7 +31,6 @@ op-batcher \ --rpc.port=8548 \ --rpc.enable-admin \ --max-channel-duration=1 \ - --target-l1-tx-size-bytes=2048 \ --l1-eth-rpc=$CERC_L1_RPC \ --private-key=$BATCHER_KEY \ & diff --git a/app/data/config/fixturenet-optimism/run-op-geth.sh b/app/data/config/fixturenet-optimism/run-op-geth.sh index 48391d73..8b521f85 100755 --- a/app/data/config/fixturenet-optimism/run-op-geth.sh +++ b/app/data/config/fixturenet-optimism/run-op-geth.sh @@ -8,7 +8,7 @@ fi echo "Installing jq" apk update && apk add jq -# Get SEQUENCER key from keys.json +# Get Sequencer key from keys.json SEQUENCER_KEY=$(jq -r '.Sequencer.privateKey' /l2-accounts/keys.json | tr -d '"') # Initialize op-geth if datadir/geth not found @@ -70,7 +70,7 @@ geth \ --ws.origins="*" \ --ws.api=debug,eth,txpool,net,engine \ --syncmode=full \ - --gcmode=full \ + --gcmode=archive \ --nodiscover \ --maxpeers=0 \ --networkid=42069 \ diff --git a/app/data/config/fixturenet-optimism/run-op-node.sh b/app/data/config/fixturenet-optimism/run-op-node.sh index b7cc8680..516cf0a5 100755 --- a/app/data/config/fixturenet-optimism/run-op-node.sh +++ b/app/data/config/fixturenet-optimism/run-op-node.sh @@ -6,9 +6,10 @@ fi CERC_L1_RPC="${CERC_L1_RPC:-${DEFAULT_CERC_L1_RPC}}" -# Get SEQUENCER KEY from keys.json +# Get Sequencer key from keys.json SEQUENCER_KEY=$(jq -r '.Sequencer.privateKey' /l2-accounts/keys.json | tr -d '"') +# Run op-node op-node \ --l2=http://op-geth:8551 \ --l2.jwt-secret=/op-node-data/jwt.txt \ diff --git a/app/data/config/fixturenet-optimism/run-op-proposer.sh b/app/data/config/fixturenet-optimism/run-op-proposer.sh new file mode 100755 index 00000000..09746760 --- /dev/null +++ b/app/data/config/fixturenet-optimism/run-op-proposer.sh @@ -0,0 +1,36 @@ +#!/bin/sh +set -e +if [ -n "$CERC_SCRIPT_DEBUG" ]; then + set -x +fi + +CERC_L1_RPC="${CERC_L1_RPC:-${DEFAULT_CERC_L1_RPC}}" + +# Read the L2OutputOracle contract address from the deployment +L2OO_DEPLOYMENT=$(cat /contracts-bedrock/deployments/getting-started/L2OutputOracle.json) +L2OO_ADDR=$(echo "$L2OO_DEPLOYMENT" | jq -r '.address') + +# Get Proposer key from keys.json +PROPOSER_KEY=$(jq -r '.Proposer.privateKey' /l2-accounts/keys.json | tr -d '"') + +cleanup() { + echo "Signal received, cleaning up..." + kill ${proposer_pid} + + wait + echo "Done" +} +trap 'cleanup' INT TERM + +# Run op-proposer +op-proposer \ + --poll-interval 12s \ + --rpc.port 8560 \ + --rollup-rpc http://op-node:8547 \ + --l2oo-address $L2OO_ADDR \ + --private-key $PROPOSER_KEY \ + --l1-eth-rpc $CERC_L1_RPC \ + & + +proposer_pid=$! +wait $proposer_pid diff --git a/app/data/container-build/cerc-optimism-l2geth/build.sh b/app/data/container-build/cerc-optimism-l2geth/build.sh index 5e125703..86c84a74 100755 --- a/app/data/container-build/cerc-optimism-l2geth/build.sh +++ b/app/data/container-build/cerc-optimism-l2geth/build.sh @@ -1,4 +1,7 @@ #!/usr/bin/env bash + # Build cerc/optimism-l2geth + source ${CERC_CONTAINER_BASE_DIR}/build-base.sh + docker build -t cerc/optimism-l2geth:local ${build_command_args} ${CERC_REPO_BASE_DIR}/op-geth diff --git a/app/data/container-build/cerc-optimism-op-batcher/build.sh b/app/data/container-build/cerc-optimism-op-batcher/build.sh index 08b209d0..a91c0063 100755 --- a/app/data/container-build/cerc-optimism-op-batcher/build.sh +++ b/app/data/container-build/cerc-optimism-op-batcher/build.sh @@ -1,6 +1,9 @@ #!/usr/bin/env bash + # Build cerc/optimism-op-batcher # TODO: use upstream Dockerfile once its buildx-specific content has been removed + source ${CERC_CONTAINER_BASE_DIR}/build-base.sh + SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) docker build -t cerc/optimism-op-batcher:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/optimism diff --git a/app/data/container-build/cerc-optimism-op-node/build.sh b/app/data/container-build/cerc-optimism-op-node/build.sh index 9c33529a..be68cbbd 100755 --- a/app/data/container-build/cerc-optimism-op-node/build.sh +++ b/app/data/container-build/cerc-optimism-op-node/build.sh @@ -1,6 +1,9 @@ #!/usr/bin/env bash + # Build cerc/optimism-op-node # TODO: use upstream Dockerfile once its buildx-specific content has been removed + source ${CERC_CONTAINER_BASE_DIR}/build-base.sh + SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) docker build -t cerc/optimism-op-node:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/optimism diff --git a/app/data/container-build/cerc-optimism-op-proposer/Dockerfile b/app/data/container-build/cerc-optimism-op-proposer/Dockerfile new file mode 100644 index 00000000..e91aa4bb --- /dev/null +++ b/app/data/container-build/cerc-optimism-op-proposer/Dockerfile @@ -0,0 +1,31 @@ +FROM golang:1.19.0-alpine3.15 as builder + +ARG VERSION=v0.0.0 + +RUN apk add --no-cache make gcc musl-dev linux-headers git jq bash + +# build op-proposer with the shared go.mod & go.sum files +COPY ./op-proposer /app/op-proposer +COPY ./op-bindings /app/op-bindings +COPY ./op-node /app/op-node +COPY ./op-service /app/op-service +COPY ./op-signer /app/op-signer +COPY ./go.mod /app/go.mod +COPY ./go.sum /app/go.sum +COPY ./.git /app/.git + +WORKDIR /app/op-proposer + +RUN go mod download + +ARG TARGETOS TARGETARCH + +RUN make op-proposer VERSION="$VERSION" GOOS=$TARGETOS GOARCH=$TARGETARCH + +FROM alpine:3.15 + +RUN apk add --no-cache jq bash + +COPY --from=builder /app/op-proposer/bin/op-proposer /usr/local/bin + +CMD ["op-proposer"] diff --git a/app/data/container-build/cerc-optimism-op-proposer/build.sh b/app/data/container-build/cerc-optimism-op-proposer/build.sh new file mode 100755 index 00000000..f3c975dc --- /dev/null +++ b/app/data/container-build/cerc-optimism-op-proposer/build.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +# Build cerc/optimism-op-proposer + +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh + +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +docker build -t cerc/optimism-op-proposer:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/optimism diff --git a/app/data/container-image-list.txt b/app/data/container-image-list.txt index 0635c4c8..0caea48a 100644 --- a/app/data/container-image-list.txt +++ b/app/data/container-image-list.txt @@ -35,3 +35,4 @@ cerc/act-runner-task-executor cerc/optimism-l2geth cerc/optimism-op-batcher cerc/optimism-op-node +cerc/optimism-op-proposer diff --git a/app/data/pod-list.txt b/app/data/pod-list.txt index ef42ad9e..f24c9ed0 100644 --- a/app/data/pod-list.txt +++ b/app/data/pod-list.txt @@ -10,7 +10,6 @@ laconicd fixturenet-laconicd fixturenet-eth fixturenet-eth-metrics -watcher-ts watcher-mobymask watcher-erc20 watcher-erc721 diff --git a/app/data/repository-list.txt b/app/data/repository-list.txt index bfb6085c..0d808d68 100644 --- a/app/data/repository-list.txt +++ b/app/data/repository-list.txt @@ -13,8 +13,6 @@ cerc-io/laconic-console cerc-io/mobymask-watcher cerc-io/watcher-ts cerc-io/mobymask-v2-watcher-ts -cerc-io/react-peer -cerc-io/mobymask-ui cerc-io/MobyMask vulcanize/uniswap-watcher-ts vulcanize/uniswap-v3-info diff --git a/app/data/stacks/fixturenet-optimism/README.md b/app/data/stacks/fixturenet-optimism/README.md index 345e9a8d..bbe41c6a 100644 --- a/app/data/stacks/fixturenet-optimism/README.md +++ b/app/data/stacks/fixturenet-optimism/README.md @@ -19,7 +19,7 @@ Checkout to the required versions and branches in repos: ```bash # Optimism cd ~/cerc/optimism -git checkout @eth-optimism/sdk@0.0.0-20230329025055 +git checkout v1.0.3 ``` Build the container images: @@ -36,8 +36,9 @@ This should create the required docker images in the local image registry: * `cerc/foundry` * `cerc/optimism-contracts` * `cerc/optimism-l2geth` -* `cerc/optimism-op-batcher` * `cerc/optimism-op-node` +* `cerc/optimism-op-batcher` +* `cerc/optimism-op-proposer` ## Deploy diff --git a/app/data/stacks/fixturenet-optimism/l2-only.md b/app/data/stacks/fixturenet-optimism/l2-only.md index 957627d3..72bf93cb 100644 --- a/app/data/stacks/fixturenet-optimism/l2-only.md +++ b/app/data/stacks/fixturenet-optimism/l2-only.md @@ -19,21 +19,22 @@ Checkout to the required versions and branches in repos: ```bash # Optimism cd ~/cerc/optimism -git checkout @eth-optimism/sdk@0.0.0-20230329025055 +git checkout v1.0.3 ``` Build the container images: ```bash -laconic-so --stack fixturenet-optimism build-containers --include cerc/foundry,cerc/optimism-contracts,cerc/optimism-op-node,cerc/optimism-l2geth,cerc/optimism-op-batcher +laconic-so --stack fixturenet-optimism build-containers --include cerc/foundry,cerc/optimism-contracts,cerc/optimism-op-node,cerc/optimism-l2geth,cerc/optimism-op-batcher,cerc/optimism-op-proposer ``` This should create the required docker images in the local image registry: * `cerc/foundry` * `cerc/optimism-contracts` * `cerc/optimism-l2geth` -* `cerc/optimism-op-batcher` * `cerc/optimism-op-node` +* `cerc/optimism-op-batcher` +* `cerc/optimism-op-proposer` ## Deploy diff --git a/app/data/stacks/fixturenet-optimism/stack.yml b/app/data/stacks/fixturenet-optimism/stack.yml index e53623ca..45bb1709 100644 --- a/app/data/stacks/fixturenet-optimism/stack.yml +++ b/app/data/stacks/fixturenet-optimism/stack.yml @@ -16,6 +16,7 @@ containers: - cerc/optimism-op-node - cerc/optimism-l2geth - cerc/optimism-op-batcher + - cerc/optimism-op-proposer pods: - fixturenet-eth - fixturenet-optimism diff --git a/app/data/stacks/mobymask-v2/README.md b/app/data/stacks/mobymask-v2/README.md index ff67b55c..e781af79 100644 --- a/app/data/stacks/mobymask-v2/README.md +++ b/app/data/stacks/mobymask-v2/README.md @@ -35,7 +35,7 @@ git checkout v0.1.2 # Optimism cd ~/cerc/optimism -git checkout @eth-optimism/sdk@0.0.0-20230329025055 +git checkout v1.0.3 ``` Build the container images: From cf0e0c5d94cdaabac10b83ca4e3ae631a1104384 Mon Sep 17 00:00:00 2001 From: prathamesh0 <42446521+prathamesh0@users.noreply.github.com> Date: Tue, 25 Apr 2023 11:51:49 +0530 Subject: [PATCH 08/18] Add an arg for shutdown timeout in deploy down command (#366) Former-commit-id: 44cf57df9b627fb2ad992e56d14b7f7caef52779 --- app/data/stacks/fixturenet-optimism/README.md | 2 +- app/data/stacks/fixturenet-optimism/l2-only.md | 2 +- app/data/stacks/mobymask-v2/README.md | 2 +- app/deploy_system.py | 8 +++++++- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/app/data/stacks/fixturenet-optimism/README.md b/app/data/stacks/fixturenet-optimism/README.md index bbe41c6a..d8a7966f 100644 --- a/app/data/stacks/fixturenet-optimism/README.md +++ b/app/data/stacks/fixturenet-optimism/README.md @@ -70,7 +70,7 @@ docker logs -f Stop all services running in the background: ```bash -laconic-so --stack fixturenet-optimism deploy down +laconic-so --stack fixturenet-optimism deploy down 30 ``` Clear volumes created by this stack: diff --git a/app/data/stacks/fixturenet-optimism/l2-only.md b/app/data/stacks/fixturenet-optimism/l2-only.md index 72bf93cb..0396bf6a 100644 --- a/app/data/stacks/fixturenet-optimism/l2-only.md +++ b/app/data/stacks/fixturenet-optimism/l2-only.md @@ -90,7 +90,7 @@ docker logs -f Stop all services running in the background: ```bash -laconic-so --stack fixturenet-optimism deploy --include fixturenet-optimism down +laconic-so --stack fixturenet-optimism deploy --include fixturenet-optimism down 30 ``` Clear volumes created by this stack: diff --git a/app/data/stacks/mobymask-v2/README.md b/app/data/stacks/mobymask-v2/README.md index e781af79..a123c203 100644 --- a/app/data/stacks/mobymask-v2/README.md +++ b/app/data/stacks/mobymask-v2/README.md @@ -111,7 +111,7 @@ Follow the [demo](./demo.md) to try out the MobyMask app with L2 chain Stop all the services running in background run: ```bash -laconic-so --stack mobymask-v2 deploy-system down +laconic-so --stack mobymask-v2 deploy-system down 30 ``` Clear volumes created by this stack: diff --git a/app/deploy_system.py b/app/deploy_system.py index 3c347fdf..35912518 100644 --- a/app/deploy_system.py +++ b/app/deploy_system.py @@ -74,7 +74,13 @@ def command(ctx, include, exclude, env_file, cluster, command, extra_args): elif command == "down": if verbose: print("Running compose down") - docker.compose.down() + + timeout_arg = None + if extra_args_list: + timeout_arg=extra_args_list[0] + + # Specify shutdown timeout (default 10s) to give services enough time to shutdown gracefully + docker.compose.down(timeout=timeout_arg) elif command == "exec": if extra_args_list is None or len(extra_args_list) < 2: print("Usage: exec ") From 8f6703940a43988175314e34a42417a4b80f0afd Mon Sep 17 00:00:00 2001 From: prathamesh0 <42446521+prathamesh0@users.noreply.github.com> Date: Tue, 25 Apr 2023 15:52:38 +0530 Subject: [PATCH 09/18] Upgrade Optimism (#367) Former-commit-id: 8a054a979ca45debcfe4af04fb858a123cce3a96 --- app/data/stacks/fixturenet-optimism/README.md | 2 +- app/data/stacks/fixturenet-optimism/l2-only.md | 2 +- app/data/stacks/mobymask-v2/README.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/data/stacks/fixturenet-optimism/README.md b/app/data/stacks/fixturenet-optimism/README.md index d8a7966f..7664a7c3 100644 --- a/app/data/stacks/fixturenet-optimism/README.md +++ b/app/data/stacks/fixturenet-optimism/README.md @@ -19,7 +19,7 @@ Checkout to the required versions and branches in repos: ```bash # Optimism cd ~/cerc/optimism -git checkout v1.0.3 +git checkout v1.0.4 ``` Build the container images: diff --git a/app/data/stacks/fixturenet-optimism/l2-only.md b/app/data/stacks/fixturenet-optimism/l2-only.md index 0396bf6a..8cac9ce1 100644 --- a/app/data/stacks/fixturenet-optimism/l2-only.md +++ b/app/data/stacks/fixturenet-optimism/l2-only.md @@ -19,7 +19,7 @@ Checkout to the required versions and branches in repos: ```bash # Optimism cd ~/cerc/optimism -git checkout v1.0.3 +git checkout v1.0.4 ``` Build the container images: diff --git a/app/data/stacks/mobymask-v2/README.md b/app/data/stacks/mobymask-v2/README.md index a123c203..32fdbf60 100644 --- a/app/data/stacks/mobymask-v2/README.md +++ b/app/data/stacks/mobymask-v2/README.md @@ -35,7 +35,7 @@ git checkout v0.1.2 # Optimism cd ~/cerc/optimism -git checkout v1.0.3 +git checkout v1.0.4 ``` Build the container images: From e004d938917fef281ff478c54ee1147e43884ed8 Mon Sep 17 00:00:00 2001 From: prathamesh0 <42446521+prathamesh0@users.noreply.github.com> Date: Tue, 25 Apr 2023 18:32:38 +0530 Subject: [PATCH 10/18] Add instructions to run MobyMask app with a watcher on network (#368) * Remove unnecessary check on watcher endpoint * Add instructions to run MobyMask app with a watcher on network * Move watcher on network docs to a separate folder * Add nginx config for watcher endpoint * Add expected output logs * Add sample nginx config for hosting the app * Update instructions Former-commit-id: 018950858b1607e08185d65588047718039db959 --- .../compose/docker-compose-mobymask-app.yml | 14 +- .../compose/docker-compose-peer-test-app.yml | 5 +- .../watcher-mobymask-v2/mobymask-app-start.sh | 8 +- .../watcher-mobymask-v2/mobymask-params.env | 2 - .../watcher.md} | 49 ++++-- .../watcher-p2p-network/web-app.md | 162 ++++++++++++++++++ app/data/stacks/mobymask-v2/web-apps.md | 6 +- 7 files changed, 204 insertions(+), 42 deletions(-) rename app/data/stacks/mobymask-v2/{watcher-p2p-network.md => watcher-p2p-network/watcher.md} (87%) create mode 100644 app/data/stacks/mobymask-v2/watcher-p2p-network/web-app.md diff --git a/app/data/compose/docker-compose-mobymask-app.yml b/app/data/compose/docker-compose-mobymask-app.yml index f2b30a4b..d43e6b44 100644 --- a/app/data/compose/docker-compose-mobymask-app.yml +++ b/app/data/compose/docker-compose-mobymask-app.yml @@ -15,12 +15,7 @@ services: CERC_RELAY_NODES: ${CERC_RELAY_NODES} CERC_BUILD_DIR: "@cerc-io/mobymask-ui/build" working_dir: /scripts - # Waits for watcher server to be up before app build - # Required when running with watcher stack to get deployed contract address - command: - - sh - - -c - - ./wait-for-it.sh -h ${CERC_WATCHER_HOST:-$${DEFAULT_CERC_WATCHER_HOST}} -p ${CERC_WATCHER_PORT:-$${DEFAULT_CERC_WATCHER_PORT}} -s -t 0 -- ./mobymask-app-start.sh + command: ["sh", "mobymask-app-start.sh"] volumes: - ../config/wait-for-it.sh:/scripts/wait-for-it.sh - ../config/watcher-mobymask-v2/mobymask-app-start.sh:/scripts/mobymask-app-start.sh @@ -51,12 +46,7 @@ services: CERC_RELAY_NODES: ${CERC_RELAY_NODES} CERC_BUILD_DIR: "@cerc-io/mobymask-ui-lxdao/build" working_dir: /scripts - # Waits for watcher server to be up before app build - # Required when running with watcher stack to get deployed contract address - command: - - sh - - -c - - ./wait-for-it.sh -h ${CERC_WATCHER_HOST:-$${DEFAULT_CERC_WATCHER_HOST}} -p ${CERC_WATCHER_PORT:-$${DEFAULT_CERC_WATCHER_PORT}} -s -t 0 -- ./mobymask-app-start.sh + command: ["sh", "mobymask-app-start.sh"] volumes: - ../config/wait-for-it.sh:/scripts/wait-for-it.sh - ../config/watcher-mobymask-v2/mobymask-app-start.sh:/scripts/mobymask-app-start.sh diff --git a/app/data/compose/docker-compose-peer-test-app.yml b/app/data/compose/docker-compose-peer-test-app.yml index 927f92f7..f2a22675 100644 --- a/app/data/compose/docker-compose-peer-test-app.yml +++ b/app/data/compose/docker-compose-peer-test-app.yml @@ -10,10 +10,7 @@ services: environment: CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG} CERC_RELAY_NODES: ${CERC_RELAY_NODES} - command: - - sh - - -c - - ./wait-for-it.sh -h ${CERC_WATCHER_HOST:-$${DEFAULT_CERC_WATCHER_HOST}} -p ${CERC_WATCHER_PORT:-$${DEFAULT_CERC_WATCHER_PORT}} -s -t 0 -- ./test-app-start.sh + command: ["sh", "test-app-start.sh"] volumes: - ../config/wait-for-it.sh:/scripts/wait-for-it.sh - ../config/watcher-mobymask-v2/test-app-start.sh:/scripts/test-app-start.sh diff --git a/app/data/config/watcher-mobymask-v2/mobymask-app-start.sh b/app/data/config/watcher-mobymask-v2/mobymask-app-start.sh index 0437d22d..9f343340 100755 --- a/app/data/config/watcher-mobymask-v2/mobymask-app-start.sh +++ b/app/data/config/watcher-mobymask-v2/mobymask-app-start.sh @@ -17,9 +17,13 @@ fi echo "Using CERC_RELAY_NODES $CERC_RELAY_NODES" -# Use config from mounted volume if available (when running web-app along with watcher stack) -if [ -f /server/config.json ]; then +if [ -z "$CERC_DEPLOYED_CONTRACT" ]; then + # Use config from mounted volume (when running web-app along with watcher stack) echo "Taking config for deployed contract from mounted volume" + while [ ! -f /server/config.json ]; do + echo "Config not found, retrying after 5 seconds" + sleep 5 + done # Get deployed contract address and chain id CERC_DEPLOYED_CONTRACT=$(jq -r '.address' /server/config.json | tr -d '"') diff --git a/app/data/config/watcher-mobymask-v2/mobymask-params.env b/app/data/config/watcher-mobymask-v2/mobymask-params.env index 22681036..6d1bf063 100644 --- a/app/data/config/watcher-mobymask-v2/mobymask-params.env +++ b/app/data/config/watcher-mobymask-v2/mobymask-params.env @@ -1,8 +1,6 @@ # Defaults # Watcher endpoint -DEFAULT_CERC_WATCHER_HOST="mobymask-watcher-server" -DEFAULT_CERC_WATCHER_PORT=3001 DEFAULT_CERC_APP_WATCHER_URL="http://localhost:3001" # Set of relay peers to connect to from the relay node diff --git a/app/data/stacks/mobymask-v2/watcher-p2p-network.md b/app/data/stacks/mobymask-v2/watcher-p2p-network/watcher.md similarity index 87% rename from app/data/stacks/mobymask-v2/watcher-p2p-network.md rename to app/data/stacks/mobymask-v2/watcher-p2p-network/watcher.md index 5fbaf79e..74d95b92 100644 --- a/app/data/stacks/mobymask-v2/watcher-p2p-network.md +++ b/app/data/stacks/mobymask-v2/watcher-p2p-network/watcher.md @@ -81,10 +81,11 @@ Add the following contents to `mobymask-watcher.env`: ```bash # Domain to be used in the relay node's announce address - CERC_RELAY_ANNOUNCE_DOMAIN="example.com" + CERC_RELAY_ANNOUNCE_DOMAIN="mobymask.example.com" # DO NOT CHANGE THESE VALUES + CERC_L2_GETH_RPC="https://mobymask-l2.dev.vdb.to" CERC_DEPLOYED_CONTRACT="0x2B6AFbd4F479cE4101Df722cF4E05F941523EaD9" CERC_ENABLE_PEER_L2_TXS=false CERC_RELAY_PEERS=["/dns4/relay1.dev.vdb.to/tcp/443/wss/p2p/12D3KooWAx83SM9GWVPc9v9fNzLzftRX6EaAFMjhYiFxRYqctcW1", "/dns4/relay2.dev.vdb.to/tcp/443/wss/p2p/12D3KooWBycy6vHVEfUwwYRbPLBdb5gx9gtFSEMpErYPUjUkDNkm", "/dns4/relay3.dev.vdb.to/tcp/443/wss/p2p/12D3KooWARcUJsiGCgiygiRVVK94U8BNSy8DFBbzAF3B6orrabwn"] @@ -115,7 +116,7 @@ This will run the `mobymask-v2-watcher` including: * A relay node which is in a federated setup with relay nodes set in the env file * A peer node which connects to the watcher relay node as an entrypoint to the MobyMask watcher p2p network. This peer listens for messages from other peers on the network and logs them out to the console -The watcher endpoint is exposed on host port `3001` and the relay node endpoint is exposed on host port `9090` +The watcher GraphQL endpoint is exposed on host port `3001` and the relay node endpoint is exposed on host port `9090` To list down and monitor the running containers: @@ -155,18 +156,30 @@ Check watcher container logs to get multiaddr advertised by the watcher's relay # mobymask_v2-mobymask-watcher-server-1 | 2023-04-20T04:22:57.069Z laconic:relay Relay node started with id 12D3KooWKef84LAcBNb9wZNs6jC5kQFXjddo47hK6AGHD2dSvGai (characteristic-black-pamella) # mobymask_v2-mobymask-watcher-server-1 | 2023-04-20T04:22:57.069Z laconic:relay Listening on: - # mobymask_v2-mobymask-watcher-server-1 | 2023-04-20T04:22:57.070Z laconic:relay /dns4/example.com/tcp/443/wss/p2p/12D3KooWKef84LAcBNb9wZNs6jC5kQFXjddo47hK6AGHD2dSvGai + # mobymask_v2-mobymask-watcher-server-1 | 2023-04-20T04:22:57.070Z laconic:relay /dns4/mobymask.example.com/tcp/443/wss/p2p/12D3KooWKef84LAcBNb9wZNs6jC5kQFXjddo47hK6AGHD2dSvGai ``` ## Web App -To be able to connect to the relay node from remote peers, it needs to be publicly reachable. Configure your website with SSL and the `https` traffic forwarded to port `9090`. +To be able to connect to the relay node from remote peers, it needs to be publicly reachable. +Configure your website with SSL and the `https` traffic reverse proxied as: +* `/graphql` to port `3001` (watcher GQL endpoint) +* `/` to port `9090` (relay node) -For example, a Nginx configuration for domain `example.com` would look something like: +For example, a Nginx configuration for domain `mobymask.example.com` would look something like: ```bash server { - server_name example.com; + server_name mobymask.example.com; + + location /graphql { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://127.0.0.1:3001; + proxy_read_timeout 90; + } # https://nginx.org/en/docs/http/websocket.html location / { @@ -181,35 +194,37 @@ For example, a Nginx configuration for domain `example.com` would look something listen [::]:443 ssl ipv6only=on; # managed by Certbot listen 443 ssl; # managed by Certbot - ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot - ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot + ssl_certificate /etc/letsencrypt/live/mobymask.example.com/fullchain.pem; # managed by Certbot + ssl_certificate_key /etc/letsencrypt/live/mobymask.example.com/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { - if ($host = example.com) { + if ($host = mobymask.example.com) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; listen [::]:80; - server_name example.com; + server_name mobymask.example.com; return 404; # managed by Certbot } ``` -To connect a browser peer to the watcher's relay node: -* Visit https://mobymask-lxdao-app.dev.vdb.to/ +To test the web-app, either visit https://mobymask-lxdao-app.dev.vdb.to/ or follow [web-app.md](./web-app.md) to deploy the app locally that hits your watcher's GQL endpoint + +Connect a browser peer to the watcher's relay node: * Click on debug panel on bottom right of the homepage * Select `` in `Primary Relay` dropdown on the right and enter the watcher relay node's multiaddr * Click on `UPDATE` to refresh the page and connect to the watcher's relay node; you should see the relay node's multiaddr in `Self Node Info` on the debug panel * Switch to the `GRAPH (PEERS)` tab to see peers connected to this browser node and the `GRAPH (NETWORK)` tab to see the whole MobyMask p2p network -Perform transactions (invite required): -* Open the invite link in a browser and open the debug panel -* Confirm that the browser peer is connected to at least one other peer, then close the debug panel +Perform transactions: +* An invitation is required to be able to perform transactions; ask an existing user of the app for an invite +* In a browser, close the app if it's already open and then open the invite link +* From the debug panel, confirm that the browser peer is connected to at least one other peer * Check the status for a phisher to be reported in the `Check Phisher Status` section on homepage * Select `Report Phisher` option in the `Pending reports` section, enter multiple phisher records and click on the `Submit batch to p2p network` button; this broadcasts signed invocations to peers on the network, including the watcher peer * Check the watcher container logs to see the message received: @@ -286,7 +301,7 @@ Clear volumes created by this stack: ```bash # List all relevant volumes - docker volume ls -q --filter "name=mobymask_v2*" + docker volume ls -q --filter "name=mobymask_v2" # Expected output: @@ -296,7 +311,7 @@ Clear volumes created by this stack: # Remove all the listed volumes - docker volume rm $(docker volume ls -q --filter "name=mobymask_v2*") + docker volume rm $(docker volume ls -q --filter "name=mobymask_v2") ``` ## Troubleshooting diff --git a/app/data/stacks/mobymask-v2/watcher-p2p-network/web-app.md b/app/data/stacks/mobymask-v2/watcher-p2p-network/web-app.md new file mode 100644 index 00000000..d20dc405 --- /dev/null +++ b/app/data/stacks/mobymask-v2/watcher-p2p-network/web-app.md @@ -0,0 +1,162 @@ +# MobyMask Watcher P2P Network - Web App + +Instructions to setup and deploy the MobyMask app locally, pointed to a watcher on the p2p network + +## Prerequisites + +* Laconic Stack Orchestrator ([installation](/README.md#install)) +* Watcher GQL endpoint + +## Setup + +Build the container images: + + ```bash + laconic-so --stack mobymask-v2 build-containers --include cerc/react-peer,cerc/mobymask-ui + ``` + +Check that the required images are created in the local image registry: + + ```bash + docker image ls + + # Expected output: + + # REPOSITORY TAG IMAGE ID CREATED SIZE + # cerc/react-peer local d66b144dbb53 4 days ago 868MB + # cerc/mobymask-ui local e456bf9937ec 4 days ago 1.67GB + # . + # . + ``` + +## Deploy + +### Configuration + +Create an env file `mobymask-app.env`: + + ```bash + touch mobymask-app.env + ``` + +Add the following contents to `mobymask-app.env`: + + ```bash + # Watcher endpoint used by the app for GQL queries + CERC_APP_WATCHER_URL="http://127.0.0.1:3001" + + + # DO NOT CHANGE THESE VALUES + CERC_DEPLOYED_CONTRACT="0x2B6AFbd4F479cE4101Df722cF4E05F941523EaD9" + CERC_RELAY_NODES=["/dns4/relay1.dev.vdb.to/tcp/443/wss/p2p/12D3KooWAx83SM9GWVPc9v9fNzLzftRX6EaAFMjhYiFxRYqctcW1", "/dns4/relay2.dev.vdb.to/tcp/443/wss/p2p/12D3KooWBycy6vHVEfUwwYRbPLBdb5gx9gtFSEMpErYPUjUkDNkm", "/dns4/relay3.dev.vdb.to/tcp/443/wss/p2p/12D3KooWARcUJsiGCgiygiRVVK94U8BNSy8DFBbzAF3B6orrabwn"] + ``` + +Replace `CERC_APP_WATCHER_URL` with the watcher's endpoint (eg. `https://mobymask.example.com`) + +### Deploy the stack + +```bash +laconic-so --stack mobymask-v2 deploy --cluster mm_v2 --include mobymask-app --env-file mobymask-app.env up lxdao-mobymask-app + +# Expected output (ignore the "The X variable is not set. Defaulting to a blank string." warnings): + +# [+] Running 4/4 +# ✔ Network mm_v2_default Created 0.1s +# ✔ Volume "mm_v2_peers_ids" Created 0.0s +# ✔ Volume "mm_v2_mobymask_deployment" Created 0.0s +# ✔ Container mm_v2-lxdao-mobymask-app-1 Started 1.1s +``` + +This will run the `lxdao-mobymask-app` (at `http://localhost:3004`) pointed to `CERC_APP_WATCHER_URL` for GQL queries + +To monitor the running container: + + ```bash + # With status + docker ps + + # Expected output: + + # CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES + # f1369dbae1c9 cerc/mobymask-ui:local "docker-entrypoint.s…" 2 minutes ago Up 2 minutes (healthy) 0.0.0.0:3004->80/tcp mm_v2-lxdao-mobymask-app-1 + + # Check logs for a container + docker logs -f mm_v2-lxdao-mobymask-app-1 + + # Expected output: + + # . + # . + # . + # Available on: + # http://127.0.0.1:80 + # http://192.168.0.2:80 + # Hit CTRL-C to stop the server + ``` + +Note: For opening an invite link on this deployed app, replace the URL part before `/#` with `http://localhost:3004` +For example: `http://localhost:3004/#/members?invitation=XYZ` + +In order to host the app using a public domain, configure your website with SSL and `https` traffic reverse proxied to port `3004`. + +For example, a Nginx configuration for domain `my-mobymask-app.example.com` would look something like: + + ```bash + server { + server_name my-mobymask-app.example.com; + + location / { + proxy_pass http://localhost:3004; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + + listen [::]:443 ssl; + listen 443 ssl; + ssl_certificate /etc/letsencrypt/live/my-mobymask-app.example.com/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/my-mobymask-app.example.com/privkey.pem; + include /etc/letsencrypt/options-ssl-nginx.conf; + ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; + } + + server { + if ($host = my-mobymask-app.example.com) { + return 301 https://$host$request_uri; + } # managed by Certbot + + server_name my-mobymask-app.example.com; + listen 80; + return 404; # managed by Certbot + } + ``` + +## Clean up + +Stop all services running in the background: + + ```bash + laconic-so --stack mobymask-v2 deploy --cluster mm_v2 --include mobymask-app down + + # Expected output: + + # [+] Running 2/2 + # ✔ Container mm_v2-lxdao-mobymask-app-1 Removed 10.6s + # ✔ Network mm_v2_default Removed 0.5s + ``` + +Clear volumes created by this stack: + + ```bash + # List all relevant volumes + docker volume ls -q --filter "name=mm_v2" + + # Expected output: + + # mm_v2_mobymask_deployment + # mm_v2_peers_ids + + # Remove all the listed volumes + docker volume rm $(docker volume ls -q --filter "name=mm_v2") + ``` diff --git a/app/data/stacks/mobymask-v2/web-apps.md b/app/data/stacks/mobymask-v2/web-apps.md index 76293f1f..42f05095 100644 --- a/app/data/stacks/mobymask-v2/web-apps.md +++ b/app/data/stacks/mobymask-v2/web-apps.md @@ -28,10 +28,6 @@ Create and update an env file to be used in the next step ([defaults](../../conf # Also add if running MobyMask app: - # External watcher endpoint (to check if watcher is up) - CERC_WATCHER_HOST= - CERC_WATCHER_PORT= - # Watcher endpoint used by the app for GQL queries CERC_APP_WATCHER_URL="http://127.0.0.1:3001" @@ -50,7 +46,7 @@ For running mobymask-app ```bash laconic-so --stack mobymask-v2 deploy --include mobymask-app --env-file up -# Runs on host port 3002 +# Runs mobymask-app on host port 3002 and lxdao-mobymask-app on host port 3004 ``` For running peer-test-app From 4ca185c7537af40a572a612394630a0f3cbc9cfc Mon Sep 17 00:00:00 2001 From: prathamesh0 <42446521+prathamesh0@users.noreply.github.com> Date: Tue, 25 Apr 2023 19:38:13 +0530 Subject: [PATCH 11/18] Fix sample env in MobyMask app instructions (#369) Former-commit-id: 6a11046ea5e107bfdba32767532f472e4f72d00b --- app/data/stacks/mobymask-v2/watcher-p2p-network/web-app.md | 2 +- app/data/stacks/mobymask-v2/web-apps.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/data/stacks/mobymask-v2/watcher-p2p-network/web-app.md b/app/data/stacks/mobymask-v2/watcher-p2p-network/web-app.md index d20dc405..cf1821b5 100644 --- a/app/data/stacks/mobymask-v2/watcher-p2p-network/web-app.md +++ b/app/data/stacks/mobymask-v2/watcher-p2p-network/web-app.md @@ -48,7 +48,7 @@ Add the following contents to `mobymask-app.env`: # DO NOT CHANGE THESE VALUES CERC_DEPLOYED_CONTRACT="0x2B6AFbd4F479cE4101Df722cF4E05F941523EaD9" - CERC_RELAY_NODES=["/dns4/relay1.dev.vdb.to/tcp/443/wss/p2p/12D3KooWAx83SM9GWVPc9v9fNzLzftRX6EaAFMjhYiFxRYqctcW1", "/dns4/relay2.dev.vdb.to/tcp/443/wss/p2p/12D3KooWBycy6vHVEfUwwYRbPLBdb5gx9gtFSEMpErYPUjUkDNkm", "/dns4/relay3.dev.vdb.to/tcp/443/wss/p2p/12D3KooWARcUJsiGCgiygiRVVK94U8BNSy8DFBbzAF3B6orrabwn"] + CERC_RELAY_NODES=["/dns4/relay1.dev.vdb.to/tcp/443/wss/p2p/12D3KooWAx83SM9GWVPc9v9fNzLzftRX6EaAFMjhYiFxRYqctcW1","/dns4/relay2.dev.vdb.to/tcp/443/wss/p2p/12D3KooWBycy6vHVEfUwwYRbPLBdb5gx9gtFSEMpErYPUjUkDNkm","/dns4/relay3.dev.vdb.to/tcp/443/wss/p2p/12D3KooWARcUJsiGCgiygiRVVK94U8BNSy8DFBbzAF3B6orrabwn"] ``` Replace `CERC_APP_WATCHER_URL` with the watcher's endpoint (eg. `https://mobymask.example.com`) diff --git a/app/data/stacks/mobymask-v2/web-apps.md b/app/data/stacks/mobymask-v2/web-apps.md index 42f05095..2eb037f6 100644 --- a/app/data/stacks/mobymask-v2/web-apps.md +++ b/app/data/stacks/mobymask-v2/web-apps.md @@ -22,7 +22,7 @@ Create and update an env file to be used in the next step ([defaults](../../conf ```bash # Set of relay nodes to be used by the web-app - # (use double quotes " for strings) + # (use double quotes " for strings, avoid space after commas) # Eg. CERC_RELAY_NODES=["/dns4/example.com/tcp/443/wss/p2p/12D3KooWGHmDDCc93XUWL16FMcTPCGu2zFaMkf67k8HZ4gdQbRDr"] CERC_RELAY_NODES=[] From d8522211f4875ab5a2338a7d4ce2916f5851365f Mon Sep 17 00:00:00 2001 From: Thomas E Lackey Date: Wed, 26 Apr 2023 00:13:35 -0500 Subject: [PATCH 12/18] Add script for exporting ethdb from fixturenet. (#370) * Add script for exporting ethdb from fixturenet. * Update README * Script Former-commit-id: 7a607c299441126d3c9126dc4efa70b18b63ea48 --- .../compose/docker-compose-fixturenet-eth.yml | 2 + .../cerc-fixturenet-eth-geth/run-el.sh | 6 +++ .../scripts/export-ethdb.sh | 38 +++++++++++++++++++ .../scripts/status.sh | 26 +++++++++++-- app/data/stacks/fixturenet-eth-tx/README.md | 37 ++++++++++++++++++ app/data/stacks/fixturenet-eth-tx/stack.yml | 15 ++++++++ 6 files changed, 121 insertions(+), 3 deletions(-) create mode 100755 app/data/container-build/cerc-fixturenet-eth-lighthouse/scripts/export-ethdb.sh create mode 100644 app/data/stacks/fixturenet-eth-tx/README.md create mode 100644 app/data/stacks/fixturenet-eth-tx/stack.yml diff --git a/app/data/compose/docker-compose-fixturenet-eth.yml b/app/data/compose/docker-compose-fixturenet-eth.yml index c687b326..59f729b9 100644 --- a/app/data/compose/docker-compose-fixturenet-eth.yml +++ b/app/data/compose/docker-compose-fixturenet-eth.yml @@ -49,6 +49,8 @@ services: timeout: 10s retries: 10 start_period: 3s + environment: + CERC_KEEP_RUNNING_AFTER_GETH_EXIT: "true" env_file: - ../config/fixturenet-eth/fixturenet-eth.env image: cerc/fixturenet-eth-geth:local diff --git a/app/data/container-build/cerc-fixturenet-eth-geth/run-el.sh b/app/data/container-build/cerc-fixturenet-eth-geth/run-el.sh index 526c76d7..edde1ba2 100755 --- a/app/data/container-build/cerc-fixturenet-eth-geth/run-el.sh +++ b/app/data/container-build/cerc-fixturenet-eth-geth/run-el.sh @@ -127,3 +127,9 @@ else fi wait $geth_pid + +if [ "true" == "$CERC_KEEP_RUNNING_AFTER_GETH_EXIT" ]; then + while [ 1 -eq 1 ]; do + sleep 60 + done +fi diff --git a/app/data/container-build/cerc-fixturenet-eth-lighthouse/scripts/export-ethdb.sh b/app/data/container-build/cerc-fixturenet-eth-lighthouse/scripts/export-ethdb.sh new file mode 100755 index 00000000..77198c61 --- /dev/null +++ b/app/data/container-build/cerc-fixturenet-eth-lighthouse/scripts/export-ethdb.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +MY_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +GETH_EXPORT_MIN_BLOCK=${1:-${GETH_EXPORT_MIN_BLOCK:-1000}} + +# Wait for block. +${MY_DIR}/status.sh $GETH_EXPORT_MIN_BLOCK +if [ $? -ne 0 ]; then + echo "Unable to export ethdb." 1>&2 + exit 1 +fi + +# Stop geth. +echo -n "Exporting ethdb.... " +GETH_CONTAINER=`docker ps -q -f "name=${CERC_SO_COMPOSE_PROJECT}-fixturenet-eth-geth-2-1"` +if [ -z "$GETH_CONTAINER" ]; then + echo "not found" + exit 1 +fi + +docker exec $GETH_CONTAINER sh -c 'rm -rf /root/tmp && mkdir -p /root/tmp/export' +docker exec $GETH_CONTAINER sh -c 'ln -s /opt/testnet/build/el/geth.json /root/tmp/export/genesis.json && ln -s /root/ethdata /root/tmp/export/' +docker exec $GETH_CONTAINER sh -c 'cat /root/tmp/export/genesis.json | jq ".config" > /root/tmp/export/genesis.config.json' + +# Stop geth and zip up ethdb. +docker exec $GETH_CONTAINER sh -c 'curl -s --location "localhost:8545" --header "Content-Type: application/json" --data "{\"jsonrpc\": \"2.0\", \"id\": 1, \"method\": \"eth_getBlockByNumber\", \"params\": [\"0x0\", false]}" > /root/tmp/export/eth_getBlockByNumber_0x0.json' +docker exec $GETH_CONTAINER sh -c 'curl -s --location "localhost:8545" --header "Content-Type: application/json" --data "{\"jsonrpc\": \"2.0\", \"id\": 1, \"method\": \"eth_blockNumber\", \"params\": []}" > /root/tmp/export/eth_blockNumber.json' +docker exec $GETH_CONTAINER sh -c "killall geth && sleep 2 && tar chzf /root/tmp/ethdb.tgz -C /root/tmp/export ." + +# Copy ethdb to host. +GETH_EXPORT_FILE=${2:-${GETH_EXPORT_FILE:-./ethdb.tgz}} +docker cp $GETH_CONTAINER:/root/tmp/ethdb.tgz $GETH_EXPORT_FILE +echo "$GETH_EXPORT_FILE" +docker exec $GETH_CONTAINER sh -c "rm -rf /root/tmp" + +# Restart the container to get geth back up and running. +docker restart $GETH_CONTAINER >/dev/null diff --git a/app/data/container-build/cerc-fixturenet-eth-lighthouse/scripts/status.sh b/app/data/container-build/cerc-fixturenet-eth-lighthouse/scripts/status.sh index c6e65a68..f6d9d27b 100755 --- a/app/data/container-build/cerc-fixturenet-eth-lighthouse/scripts/status.sh +++ b/app/data/container-build/cerc-fixturenet-eth-lighthouse/scripts/status.sh @@ -2,9 +2,10 @@ if [ -n "$CERC_SCRIPT_DEBUG" ]; then set -x fi -STATUSES=("geth to generate DAG" "beacon phase0" "beacon altair" "beacon bellatrix pre-merge" "beacon bellatrix merge") -STATUS=0 +MIN_BLOCK_NUM=${1:-${MIN_BLOCK_NUM:-3}} +STATUSES=("geth to generate DAG" "beacon phase0" "beacon altair" "beacon bellatrix pre-merge" "beacon bellatrix merge" "block number $MIN_BLOCK_NUM") +STATUS=0 LIGHTHOUSE_BASE_URL=${LIGHTHOUSE_BASE_URL} GETH_BASE_URL=${GETH_BASE_URL} @@ -13,18 +14,29 @@ GETH_BASE_URL=${GETH_BASE_URL} # or some execution environment-neutral mechanism. if [ -z "$LIGHTHOUSE_BASE_URL" ]; then LIGHTHOUSE_CONTAINER=`docker ps -q -f "name=fixturenet-eth-lighthouse-1-1"` + if [ -z "$LIGHTHOUSE_CONTAINER" ]; then + echo "Lighthouse container not found." 1>&2 + exit 1 + fi LIGHTHOUSE_PORT=`docker port $LIGHTHOUSE_CONTAINER 8001 | cut -d':' -f2` LIGHTHOUSE_BASE_URL="http://localhost:${LIGHTHOUSE_PORT}" fi if [ -z "$GETH_BASE_URL" ]; then GETH_CONTAINER=`docker ps -q -f "name=fixturenet-eth-geth-1-1"` + if [ -z "$GETH_CONTAINER" ]; then + echo "Lighthouse container not found." 1>&2 + exit 1 + fi GETH_PORT=`docker port $GETH_CONTAINER 8545 | cut -d':' -f2` GETH_BASE_URL="http://localhost:${GETH_PORT}" fi +MARKER="." + function inc_status() { echo " done" + MARKEr="." STATUS=$((STATUS + 1)) if [ $STATUS -lt ${#STATUSES[@]} ]; then echo -n "Waiting for ${STATUSES[$STATUS]}..." @@ -34,7 +46,7 @@ function inc_status() { echo -n "Waiting for ${STATUSES[$STATUS]}..." while [ $STATUS -lt ${#STATUSES[@]} ]; do sleep 1 - echo -n "." + echo -n "$MARKER" case $STATUS in 0) result=`wget --no-check-certificate --quiet -O - --method POST --header 'Content-Type: application/json' \ @@ -67,5 +79,13 @@ while [ $STATUS -lt ${#STATUSES[@]} ]; do inc_status fi ;; + 5) + result=`wget --no-check-certificate --quiet -O - "$LIGHTHOUSE_BASE_URL/eth/v2/beacon/blocks/head" | jq -r '.data.message.body.execution_payload.block_number'` + if [ ! -z "$result" ] && [ $result -gt $MIN_BLOCK_NUM ]; then + inc_status + else + MARKER="$result " + fi + ;; esac done diff --git a/app/data/stacks/fixturenet-eth-tx/README.md b/app/data/stacks/fixturenet-eth-tx/README.md new file mode 100644 index 00000000..9af9ee3d --- /dev/null +++ b/app/data/stacks/fixturenet-eth-tx/README.md @@ -0,0 +1,37 @@ +# fixturenet-eth-tx + +A variation of `fixturenet-eth` that automatically generates transactions using `tx-spammer`. + +See `stacks/fixturenet-eth/README.md` for more information. + +## Containers + +* cerc/go-ethereum +* cerc/lighthouse +* cerc/fixturenet-eth-geth +* cerc/fixturenet-eth-lighthouse +* cerc/tx-spammer + +## Deploy the stack +``` +$ laconic-so --stack fixturenet-eth-tx setup-repositories +$ laconic-so --stack fixturenet-eth-tx build-containers +$ laconic-so --stack fixturenet-eth-tx deploy up +``` + +## Export the ethdb (optional) + +It is easy to export data from the fixturenet for offline processing of the raw ethdb files (eg, by eth-statediff-service) using the `export-ethdb.sh` script. + +For example: + +``` +❯ app/data/container-build/cerc-fixturenet-eth-lighthouse/scripts/export-ethdb.sh 500 +Waiting for geth to generate DAG.... done +Waiting for beacon phase0.... done +Waiting for beacon altair.... done +Waiting for beacon bellatrix pre-merge.... done +Waiting for beacon bellatrix merge.... done +Waiting for block number 500.... done +Exporting ethdb.... ./ethdb.tgz +``` diff --git a/app/data/stacks/fixturenet-eth-tx/stack.yml b/app/data/stacks/fixturenet-eth-tx/stack.yml new file mode 100644 index 00000000..0c3b45a3 --- /dev/null +++ b/app/data/stacks/fixturenet-eth-tx/stack.yml @@ -0,0 +1,15 @@ +version: "1.1" +name: fixturenet-eth-tx +decription: "Ethereum Fixturenet w/ tx-spammer" +repos: + - cerc-io/go-ethereum + - cerc-io/tx-spammer +containers: + - cerc/go-ethereum + - cerc/lighthouse + - cerc/fixturenet-eth-geth + - cerc/fixturenet-eth-lighthouse + - cerc/tx-spammer +pods: + - fixturenet-eth + - tx-spammer From 617228d0dcf184a24638a0517eb5651d02137949 Mon Sep 17 00:00:00 2001 From: Zach Date: Wed, 26 Apr 2023 14:43:32 -0400 Subject: [PATCH 13/18] optimism: on error, wait, then re-run 'deploy up' Former-commit-id: a4ff8f3dcb8ff2b45fc89b9d99d8f354bb14b545 --- app/data/stacks/fixturenet-optimism/README.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/app/data/stacks/fixturenet-optimism/README.md b/app/data/stacks/fixturenet-optimism/README.md index 7664a7c3..02e06a44 100644 --- a/app/data/stacks/fixturenet-optimism/README.md +++ b/app/data/stacks/fixturenet-optimism/README.md @@ -2,7 +2,7 @@ Instructions to setup and deploy an end-to-end L1+L2 stack with [fixturenet-eth](../fixturenet-eth/) (L1) and [Optimism](https://stack.optimism.io) (L2) -We support running just the L2 part of stack, given an external L1 endpoint. Follow [l2-only](./l2-only.md) for the same. +We support running just the L2 part of stack, given an external L1 endpoint. Follow the [L2 only doc](./l2-only.md) for the same. ## Setup @@ -28,6 +28,8 @@ Build the container images: laconic-so --stack fixturenet-optimism build-containers ``` +Note: this will take >10 mins depending on the specs of your machine, and **requires** 16GB of memory or greater. + This should create the required docker images in the local image registry: * `cerc/go-ethereum` * `cerc/lighthouse` @@ -48,12 +50,14 @@ Deploy the stack: laconic-so --stack fixturenet-optimism deploy up ``` -The `fixturenet-optimism-contracts` service may take a while (`~15 mins`) to complete running as it: +If you get the error `service "fixturenet-optimism-contracts" didn't complete successfully: exit 1` with ~25 lines of Traceback, wait 15-20 mins then re-run the command. + +The `fixturenet-optimism-contracts` service takes a while to complete running as it: 1. waits for the 'Merge' to happen on L1 2. waits for a finalized block to exist on L1 (so that it can be taken as a starting block for roll ups) 3. deploys the L1 contracts -To list down and monitor the running containers: +To list and monitor the running containers: ```bash laconic-so --stack fixturenet-optimism deploy ps From 03f6d027f97a5b6d0b2dc61979b579ea5d847583 Mon Sep 17 00:00:00 2001 From: Thomas E Lackey Date: Wed, 26 Apr 2023 23:26:50 -0500 Subject: [PATCH 14/18] Minor script cleanup. (#372) Former-commit-id: 323ca3b2387e0ac656b901405362298895b8a3e8 --- .../scripts/export-ethdb.sh | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/app/data/container-build/cerc-fixturenet-eth-lighthouse/scripts/export-ethdb.sh b/app/data/container-build/cerc-fixturenet-eth-lighthouse/scripts/export-ethdb.sh index 77198c61..dd93b219 100755 --- a/app/data/container-build/cerc-fixturenet-eth-lighthouse/scripts/export-ethdb.sh +++ b/app/data/container-build/cerc-fixturenet-eth-lighthouse/scripts/export-ethdb.sh @@ -1,12 +1,21 @@ #!/bin/bash -MY_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +# Exports the complete fixturenet-eth ethdb data to a tarball (default, ./ethdb.tgz), waiting for a minimum +# block height (default 1000) to be reached before exporting. + +# Usage: export-ethdb.sh [min_block_number=1000] [output_file=./ethdb.tgz] + +if [[ -n "$CERC_SCRIPT_DEBUG" ]]; then + set -x +fi + +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) GETH_EXPORT_MIN_BLOCK=${1:-${GETH_EXPORT_MIN_BLOCK:-1000}} # Wait for block. -${MY_DIR}/status.sh $GETH_EXPORT_MIN_BLOCK -if [ $? -ne 0 ]; then +${SCRIPT_DIR}/status.sh $GETH_EXPORT_MIN_BLOCK +if [[ $? -ne 0 ]]; then echo "Unable to export ethdb." 1>&2 exit 1 fi @@ -14,7 +23,7 @@ fi # Stop geth. echo -n "Exporting ethdb.... " GETH_CONTAINER=`docker ps -q -f "name=${CERC_SO_COMPOSE_PROJECT}-fixturenet-eth-geth-2-1"` -if [ -z "$GETH_CONTAINER" ]; then +if [[ -z "$GETH_CONTAINER" ]]; then echo "not found" exit 1 fi From 4aecfcd780993e35fe2d352da5d7b4a0cf360bd6 Mon Sep 17 00:00:00 2001 From: prathamesh0 <42446521+prathamesh0@users.noreply.github.com> Date: Thu, 27 Apr 2023 18:26:58 +0530 Subject: [PATCH 15/18] Map op-batcher and op-proposer ports to host (#373) Former-commit-id: f04b266a24351d89fe60c2f87a0cbcd7e81dc6bf --- app/data/compose/docker-compose-fixturenet-optimism.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/data/compose/docker-compose-fixturenet-optimism.yml b/app/data/compose/docker-compose-fixturenet-optimism.yml index c9e17b03..a20fd118 100644 --- a/app/data/compose/docker-compose-fixturenet-optimism.yml +++ b/app/data/compose/docker-compose-fixturenet-optimism.yml @@ -122,6 +122,8 @@ services: # Waits for L1 endpoint to be up before running the batcher command: | "/wait-for-it.sh -h ${CERC_L1_HOST:-$${DEFAULT_CERC_L1_HOST}} -p ${CERC_L1_PORT:-$${DEFAULT_CERC_L1_PORT}} -s -t 60 -- /run-op-batcher.sh" + ports: + - "127.0.0.1:8548:8548" extra_hosts: - "host.docker.internal:host-gateway" @@ -145,6 +147,8 @@ services: # Waits for L1 endpoint to be up before running the proposer command: | "/wait-for-it.sh -h ${CERC_L1_HOST:-$${DEFAULT_CERC_L1_HOST}} -p ${CERC_L1_PORT:-$${DEFAULT_CERC_L1_PORT}} -s -t 60 -- /run-op-proposer.sh" + ports: + - "127.0.0.1:8560:8560" extra_hosts: - "host.docker.internal:host-gateway" From b0770d73790c877e36b986d4244a6b9f85538543 Mon Sep 17 00:00:00 2001 From: David Boreham Date: Thu, 27 Apr 2023 10:22:21 -0600 Subject: [PATCH 16/18] Remove > Former-commit-id: 73419c341a427133161264e9bee5e6082bc918ce --- app/data/stacks/fixturenet-eth-tx/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/data/stacks/fixturenet-eth-tx/README.md b/app/data/stacks/fixturenet-eth-tx/README.md index 9af9ee3d..f6ae483a 100644 --- a/app/data/stacks/fixturenet-eth-tx/README.md +++ b/app/data/stacks/fixturenet-eth-tx/README.md @@ -26,7 +26,7 @@ It is easy to export data from the fixturenet for offline processing of the raw For example: ``` -❯ app/data/container-build/cerc-fixturenet-eth-lighthouse/scripts/export-ethdb.sh 500 +$ app/data/container-build/cerc-fixturenet-eth-lighthouse/scripts/export-ethdb.sh 500 Waiting for geth to generate DAG.... done Waiting for beacon phase0.... done Waiting for beacon altair.... done From f8306e6685e7ea2f23ac016f670d15cdac55b7da Mon Sep 17 00:00:00 2001 From: David Boreham Date: Thu, 27 Apr 2023 09:52:37 -0700 Subject: [PATCH 17/18] Add foundry to the fixturenet-eth-tx stack (#374) Former-commit-id: af93743974a5ea35f13a65261b53a2581eb36016 --- app/data/stacks/fixturenet-eth-tx/stack.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/data/stacks/fixturenet-eth-tx/stack.yml b/app/data/stacks/fixturenet-eth-tx/stack.yml index 0c3b45a3..0a0a6bd6 100644 --- a/app/data/stacks/fixturenet-eth-tx/stack.yml +++ b/app/data/stacks/fixturenet-eth-tx/stack.yml @@ -1,15 +1,18 @@ -version: "1.1" +version: "1.2" name: fixturenet-eth-tx decription: "Ethereum Fixturenet w/ tx-spammer" repos: - cerc-io/go-ethereum - cerc-io/tx-spammer + - dboreham/foundry containers: - cerc/go-ethereum - cerc/lighthouse - cerc/fixturenet-eth-geth - cerc/fixturenet-eth-lighthouse - cerc/tx-spammer + - cerc/foundry pods: - fixturenet-eth + - foundry - tx-spammer From 8cdb9cee35bd26a3eecb7fb466257d766a1f1c95 Mon Sep 17 00:00:00 2001 From: David Boreham Date: Thu, 27 Apr 2023 09:54:11 -0700 Subject: [PATCH 18/18] Remove gerbil builder container from build-support stack (#375) Former-commit-id: 19e38d2a942af03e80e81138b3f079dfbf4de7fa --- app/data/stacks/build-support/stack.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/data/stacks/build-support/stack.yml b/app/data/stacks/build-support/stack.yml index e4efb457..e0962515 100644 --- a/app/data/stacks/build-support/stack.yml +++ b/app/data/stacks/build-support/stack.yml @@ -1,6 +1,5 @@ -version: "1.1" +version: "1.2" name: build-support decription: "Build Support Components" containers: - cerc/builder-js - - cerc/builder-gerbil