forked from cerc-io/stack-orchestrator
		
	Merge branch 'main' into dboreham/add-console
Former-commit-id: 62d2d37417
			
			
This commit is contained in:
		
						commit
						4b0f46bb1b
					
				| @ -10,6 +10,7 @@ Ensure that the following are already installed: | ||||
| 
 | ||||
| - [Python3](https://wiki.python.org/moin/BeginnersGuide/Download): `python3 --version` >= `3.8.10` (the Python3 shipped in Ubuntu 20+ is good to go) | ||||
| - [Docker](https://docs.docker.com/get-docker/): `docker --version` >= `20.10.21` | ||||
| - [jq](https://stedolan.github.io/jq/download/): `jq --version` >= `1.5` | ||||
| 
 | ||||
| Note: if installing docker-compose via package manager on Linux (as opposed to Docker Desktop), you must [install the plugin](https://docs.docker.com/compose/install/linux/#install-the-plugin-manually), e.g. : | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										25
									
								
								app/data/compose/docker-compose-mobymask-laconicd.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								app/data/compose/docker-compose-mobymask-laconicd.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,25 @@ | ||||
| version: "3.2" | ||||
| 
 | ||||
| services: | ||||
|   laconicd: | ||||
|     restart: unless-stopped | ||||
|     image: cerc/laconicd:local | ||||
|     command: ["sh", "/docker-entrypoint-scripts.d/create-fixturenet.sh"] | ||||
|     volumes: | ||||
|       - ../config/fixturenet-laconicd/create-fixturenet.sh:/docker-entrypoint-scripts.d/create-fixturenet.sh | ||||
|     ports: | ||||
|       - "9473" | ||||
|       - "8545" | ||||
|       - "8546" | ||||
|       - "1317" | ||||
|     healthcheck: | ||||
|       test: ["CMD", "nc", "-v", "localhost", "8545"] | ||||
|       interval: 20s | ||||
|       timeout: 5s | ||||
|       retries: 15 | ||||
|       start_period: 10s | ||||
| 
 | ||||
| networks: | ||||
|   # https://docs.docker.com/compose/networking/#configure-the-default-network | ||||
|   default: | ||||
|     name: mobymask-v2-network | ||||
| @ -21,6 +21,26 @@ services: | ||||
|       retries: 15 | ||||
|       start_period: 10s | ||||
| 
 | ||||
|   mobymask: | ||||
|     restart: unless-stopped | ||||
|     depends_on: | ||||
|       mobymask-watcher-db: | ||||
|         condition: service_healthy | ||||
|     image: cerc/mobymask:local | ||||
|     working_dir: /app/packages/server | ||||
|     environment: | ||||
|       - ENV=PROD | ||||
|     command: ["sh", "-c", "npm start"] | ||||
|     volumes: | ||||
|       - ../config/watcher-mobymask-v2/secrets.json:/app/packages/server/secrets.json | ||||
|       - moby_data_server:/app/packages/server | ||||
|     healthcheck: | ||||
|       test: ["CMD", "nc", "-v", "localhost", "3330"] | ||||
|       interval: 20s | ||||
|       timeout: 5s | ||||
|       retries: 15 | ||||
|       start_period: 10s | ||||
| 
 | ||||
|   mobymask-watcher-server: | ||||
|     restart: unless-stopped | ||||
|     depends_on: | ||||
| @ -30,18 +50,81 @@ services: | ||||
|     command: ["sh", "-c", "yarn server"] | ||||
|     volumes: | ||||
|       - ../config/watcher-mobymask-v2/watcher.toml:/app/packages/mobymask-v2-watcher/environments/local.toml | ||||
|       - ../config/watcher-mobymask-v2/.env:/app/packages/peer/.env | ||||
|       - ../config/watcher-mobymask-v2/peer.env:/app/packages/peer/.env | ||||
|       - ../config/watcher-mobymask-v2/relay-id.json:/app/packages/mobymask-v2-watcher/relay-id.json | ||||
|     ports: | ||||
|       - "0.0.0.0:3001:3001" | ||||
|       - "0.0.0.0:9001:9001" | ||||
|       - "0.0.0.0:9090:9090" | ||||
|     healthcheck: | ||||
|       test: ["CMD", "nc", "-v", "localhost", "9090"] | ||||
|       test: ["CMD", "busybox", "nc", "localhost", "9090"] | ||||
|       interval: 20s | ||||
|       timeout: 5s | ||||
|       retries: 15 | ||||
|       start_period: 5s | ||||
| 
 | ||||
|   mobymask-watcher-peer: | ||||
|     restart: unless-stopped | ||||
|     depends_on: | ||||
|       mobymask: | ||||
|         condition: service_healthy | ||||
|     image: cerc/watcher-mobymask-v2:local | ||||
|     command: ["sh", "peer-start.sh"] | ||||
|     volumes: | ||||
|       - ../config/watcher-mobymask-v2/watcher.toml:/app/packages/mobymask-v2-watcher/environments/local.toml | ||||
|       - ../config/watcher-mobymask-v2/peer-id.json:/app/packages/mobymask-v2-watcher/peer-id.json | ||||
|       - ../config/watcher-mobymask-v2/peer-start.sh:/app/packages/mobymask-v2-watcher/peer-start.sh | ||||
|       - moby_data_server:/server | ||||
| 
 | ||||
|   mobymask-app: | ||||
|     depends_on: | ||||
|       mobymask-watcher-server: | ||||
|         condition: service_healthy | ||||
|       mobymask: | ||||
|         condition: service_healthy | ||||
|     image: cerc/mobymask-ui:local | ||||
|     command: ["sh", "mobymask-app-start.sh"] | ||||
|     volumes: | ||||
|       - ../config/watcher-mobymask-v2/mobymask-app.env:/app/.env | ||||
|       - ../config/watcher-mobymask-v2/mobymask-app-config.json:/app/src/mobymask-app-config.json | ||||
|       - ../config/watcher-mobymask-v2/mobymask-app-start.sh:/app/mobymask-app-start.sh | ||||
|       - moby_data_server:/server | ||||
|     ports: | ||||
|       - "0.0.0.0:3002:3000" | ||||
|     healthcheck: | ||||
|       test: ["CMD", "nc", "-v", "localhost", "3000"] | ||||
|       interval: 20s | ||||
|       timeout: 5s | ||||
|       retries: 15 | ||||
|       start_period: 10s | ||||
|     shm_size: '1GB' | ||||
| 
 | ||||
|   peer-test-app: | ||||
|     depends_on: | ||||
|       mobymask-watcher-server: | ||||
|         condition: service_healthy | ||||
|     image: cerc/react-peer:local | ||||
|     working_dir: /app/packages/test-app | ||||
|     command: ["sh", "-c", "yarn build && serve -s build"] | ||||
|     volumes: | ||||
|       - ../config/watcher-mobymask-v2/test-app-config.json:/app/packages/test-app/src/config.json | ||||
|     ports: | ||||
|       - "0.0.0.0:3003:3000" | ||||
|     healthcheck: | ||||
|       test: ["CMD", "nc", "-v", "localhost", "3000"] | ||||
|       interval: 20s | ||||
|       timeout: 5s | ||||
|       retries: 15 | ||||
|       start_period: 10s | ||||
| 
 | ||||
| volumes: | ||||
|   mobymask_watcher_db_data: | ||||
|   moby_data_server: | ||||
| 
 | ||||
| networks: | ||||
|   # https://docs.docker.com/compose/networking/#configure-the-default-network | ||||
|   default: | ||||
|     # https://docs.docker.com/compose/networking/#use-a-pre-existing-network | ||||
|     name: mobymask-v2-network | ||||
|     external: true | ||||
| 
 | ||||
|  | ||||
| @ -1 +0,0 @@ | ||||
| RELAY="/ip4/127.0.0.1/tcp/9090/http/p2p-webrtc-direct/p2p/12D3KooWSPCsVkHVyLQoCqhu2YRPvvM7o6r6NRYyLM5zeA6Uig5t" | ||||
| @ -1,8 +0,0 @@ | ||||
| { | ||||
|   "relayNodes": [ | ||||
|     "/ip4/127.0.0.1/tcp/9090/http/p2p-webrtc-direct/p2p/12D3KooWSPCsVkHVyLQoCqhu2YRPvvM7o6r6NRYyLM5zeA6Uig5t" | ||||
|   ], | ||||
|   "peer": { | ||||
|     "enableDebugInfo": true | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,8 @@ | ||||
| { | ||||
|   "relayNodes": [ | ||||
|     "/ip4/127.0.0.1/tcp/9090/ws/p2p/12D3KooWSPCsVkHVyLQoCqhu2YRPvvM7o6r6NRYyLM5zeA6Uig5t" | ||||
|   ], | ||||
|   "peer": { | ||||
|     "enableDebugInfo": true | ||||
|   } | ||||
| } | ||||
							
								
								
									
										9
									
								
								app/data/config/watcher-mobymask-v2/mobymask-app-start.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										9
									
								
								app/data/config/watcher-mobymask-v2/mobymask-app-start.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,9 @@ | ||||
| #!/bin/sh | ||||
| set -e | ||||
| 
 | ||||
| # Merging config files to get deployed contract address | ||||
| jq -s '.[0] * .[1]' /app/src/mobymask-app-config.json /server/config.json > /app/src/config.json | ||||
| 
 | ||||
| npm run build | ||||
| 
 | ||||
| serve -s build | ||||
							
								
								
									
										1
									
								
								app/data/config/watcher-mobymask-v2/mobymask-app.env
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								app/data/config/watcher-mobymask-v2/mobymask-app.env
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| REACT_APP_WATCHER_URI=http://localhost:3001/graphql | ||||
							
								
								
									
										5
									
								
								app/data/config/watcher-mobymask-v2/peer-id.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								app/data/config/watcher-mobymask-v2/peer-id.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | ||||
| { | ||||
|   "id": "12D3KooWK6myjc8r1KBnfP9igp31qJkPaVfsKDjKrjoSefV5SDEo", | ||||
|   "privKey": "CAESQJMHbMaH+UEOtjGOzXYtoPO/cdHakCtN1hcnknIWzx/6ie1lxb+8kfzBjwt7apfj8fHlTCYSIVK8Q2AWu9a2h3g=", | ||||
|   "pubKey": "CAESIIntZcW/vJH8wY8Le2qX4/Hx5UwmEiFSvENgFrvWtod4" | ||||
| } | ||||
							
								
								
									
										10
									
								
								app/data/config/watcher-mobymask-v2/peer-start.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										10
									
								
								app/data/config/watcher-mobymask-v2/peer-start.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,10 @@ | ||||
| #!/bin/sh | ||||
| 
 | ||||
| # Private key of account with balance | ||||
| PRIVATE_KEY= | ||||
| 
 | ||||
| # Assign deployed contract address from server config | ||||
| CONTRACT_ADDRESS=`jq '.address' /server/config.json` | ||||
| 
 | ||||
| echo 'yarn peer-listener --contract-address <CONTRACT_ADDRESS> --private-key <PRIVATE_KEY>' | ||||
| yarn peer-listener --contract-address $CONTRACT_ADDRESS --private-key $PRIVATE_KEY | ||||
							
								
								
									
										1
									
								
								app/data/config/watcher-mobymask-v2/peer.env
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								app/data/config/watcher-mobymask-v2/peer.env
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| RELAY="/ip4/127.0.0.1/tcp/9090/ws/p2p/12D3KooWSPCsVkHVyLQoCqhu2YRPvvM7o6r6NRYyLM5zeA6Uig5t" | ||||
							
								
								
									
										5
									
								
								app/data/config/watcher-mobymask-v2/secrets.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								app/data/config/watcher-mobymask-v2/secrets.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | ||||
| { | ||||
|     "rpcUrl": "http://laconicd:8545", | ||||
|     "privateKey": "GENESIS_ACCOUNT_PRIVATE_KEY", | ||||
|     "baseURI": "http://127.0.0.1:3002/#" | ||||
| } | ||||
							
								
								
									
										8
									
								
								app/data/config/watcher-mobymask-v2/test-app-config.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								app/data/config/watcher-mobymask-v2/test-app-config.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,8 @@ | ||||
| { | ||||
|   "relayNodes": [ | ||||
|     "/ip4/127.0.0.1/tcp/9090/ws/p2p/12D3KooWSPCsVkHVyLQoCqhu2YRPvvM7o6r6NRYyLM5zeA6Uig5t" | ||||
|   ], | ||||
|   "peer": { | ||||
|     "enableDebugInfo": true | ||||
|   } | ||||
| } | ||||
| @ -31,7 +31,7 @@ | ||||
|       enableDebugInfo = true | ||||
| 
 | ||||
|     [server.p2p.peer] | ||||
|       relayMultiaddr = '/ip4/mobymask-watcher-server/tcp/9090/http/p2p-webrtc-direct/p2p/12D3KooWSPCsVkHVyLQoCqhu2YRPvvM7o6r6NRYyLM5zeA6Uig5t' | ||||
|       relayMultiaddr = '/dns4/mobymask-watcher-server/tcp/9090/ws/p2p/12D3KooWSPCsVkHVyLQoCqhu2YRPvvM7o6r6NRYyLM5zeA6Uig5t' | ||||
|       pubSubTopic = 'mobymask' | ||||
|       peerIdFile = './peer-id.json' | ||||
|       enableDebugInfo = true | ||||
| @ -55,7 +55,7 @@ | ||||
| [upstream] | ||||
|   [upstream.ethServer] | ||||
|     gqlApiEndpoint = "http://ipld-eth-server:8083/graphql" | ||||
|     rpcProviderEndpoint = "http://ipld-eth-server:8082" | ||||
|     rpcProviderEndpoint = "http://laconicd:8545" | ||||
|     blockDelayInMilliSecs = 60000 | ||||
| 
 | ||||
|   [upstream.cache] | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| #!/bin/bash | ||||
| # Usage: build-npm-package-local-dependencies.sh <registry-url> <publish-with-this-version> | ||||
| # Runs build-npm-package.sh after first fixing up yarn.lock to use a local | ||||
| # npm registry for all packages in a spcific scope (currently @cerc-io) | ||||
| # npm registry for all packages in a spcific scope (currently @cerc-io and @lirewine) | ||||
| if [ -n "$CERC_SCRIPT_DEBUG" ]; then | ||||
|     set -x | ||||
| fi | ||||
| @ -17,18 +17,21 @@ fi | ||||
| set -e | ||||
| local_npm_registry_url=$1 | ||||
| package_publish_version=$2 | ||||
| # TODO: make this a paramater and allow a list of scopes | ||||
| npm_scope_for_local="@cerc-io" | ||||
| # We need to configure the local registry  | ||||
| npm config set ${npm_scope_for_local}:registry ${local_npm_registry_url} | ||||
| npm config set -- ${local_npm_registry_url}:_authToken ${CERC_NPM_AUTH_TOKEN} | ||||
| # Find the set of dependencies from the specified scope | ||||
| mapfile -t dependencies_from_scope < <(cat package.json | jq -r '.dependencies | with_entries(if (.key|test("^'${npm_scope_for_local}'/.*$")) then ( {key: .key, value: .value } ) else empty end ) | keys[]') | ||||
| echo "Fixing up dependencies" | ||||
| for package in "${dependencies_from_scope[@]}" | ||||
| # If we need to handle an additional scope, add it to the list below: | ||||
| npm_scopes_to_handle=("@cerc-io" "@lirewine") | ||||
| for npm_scope_for_local in ${npm_scopes_to_handle[@]} | ||||
| do | ||||
|     echo "Fixing up package ${package}" | ||||
|     yarn-local-registry-fixup.sh $package ${local_npm_registry_url} | ||||
|     # We need to configure the local registry | ||||
|     npm config set ${npm_scope_for_local}:registry ${local_npm_registry_url} | ||||
|     npm config set -- ${local_npm_registry_url}:_authToken ${CERC_NPM_AUTH_TOKEN} | ||||
|     # Find the set of dependencies from the specified scope | ||||
|     mapfile -t dependencies_from_scope < <(cat package.json | jq -r '.dependencies | with_entries(if (.key|test("^'${npm_scope_for_local}'/.*$")) then ( {key: .key, value: .value } ) else empty end ) | keys[]') | ||||
|     echo "Fixing up dependencies in scope ${npm_scope_for_local}" | ||||
|     for package in "${dependencies_from_scope[@]}" | ||||
|     do | ||||
|         echo "Fixing up package ${package}" | ||||
|         yarn-local-registry-fixup.sh $package ${local_npm_registry_url} | ||||
|     done | ||||
| done | ||||
| echo "Running build" | ||||
| build-npm-package.sh ${local_npm_registry_url} ${package_publish_version} | ||||
|  | ||||
| @ -22,8 +22,8 @@ set -e | ||||
| # Get the name of this package from package.json since we weren't passed that | ||||
| package_name=$( cat package.json | jq -r .name ) | ||||
| local_npm_registry_url=$1 | ||||
| npm config set @lirewine:registry ${local_npm_registry_url} | ||||
| npm config set @cerc-io:registry ${local_npm_registry_url} | ||||
| npm config set @lirewine:registry ${local_npm_registry_url} | ||||
| npm config set -- ${local_npm_registry_url}:_authToken ${CERC_NPM_AUTH_TOKEN} | ||||
| # First check if the version of this package we're trying to build already exists in the registry | ||||
| package_exists=$( yarn info --json ${package_name}@${package_publish_version} 2>/dev/null | jq -r .data.dist.tarball ) | ||||
|  | ||||
| @ -1,3 +1,3 @@ | ||||
| #!/usr/bin/env bash | ||||
| # Build a local version of the foundry-rs/foundry image | ||||
| docker build -t cerc/foundry:local ${CERC_REPO_BASE_DIR}/foundry | ||||
| docker build -t cerc/foundry:local -f ${CERC_REPO_BASE_DIR}/foundry/Dockerfile-debian ${CERC_REPO_BASE_DIR}/foundry | ||||
|  | ||||
| @ -1,4 +1,4 @@ | ||||
| FROM ghcr.io/foundry-rs/foundry | ||||
| FROM cerc/foundry:local | ||||
| 
 | ||||
| RUN apk update ; apk add --no-cache --allow-untrusted ca-certificates curl bash git jq | ||||
| RUN apk add --no-cache --upgrade grep | ||||
|  | ||||
| @ -40,8 +40,7 @@ RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ | ||||
| # RUN su node -c "npm install -g <your-package-list-here>" | ||||
| 
 | ||||
| # Configure the local npm registry | ||||
| RUN npm config set @lirewine:registry ${CERC_NPM_URL} \ | ||||
|     && npm config set @cerc-io:registry ${CERC_NPM_URL} \ | ||||
| RUN npm config set @cerc-io:registry ${CERC_NPM_URL} \ | ||||
|     && npm config set @lirewine:registry ${CERC_NPM_URL} \ | ||||
|     && npm config set -- ${CERC_NPM_URL}:_authToken ${CERC_NPM_AUTH_TOKEN} | ||||
| 
 | ||||
|  | ||||
| @ -1,11 +1,13 @@ | ||||
| FROM node:18.15.0-alpine3.16 | ||||
| 
 | ||||
| RUN apk --update --no-cache add make git | ||||
| RUN apk --update --no-cache add make git jq | ||||
| 
 | ||||
| WORKDIR /app | ||||
| 
 | ||||
| COPY . . | ||||
| 
 | ||||
| RUN npm install -g serve | ||||
| 
 | ||||
| RUN echo "Building mobymask-ui" && \ | ||||
|     npm install | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										13
									
								
								app/data/container-build/cerc-mobymask/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								app/data/container-build/cerc-mobymask/Dockerfile
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | ||||
| FROM node:16.17.1-alpine3.16 | ||||
| 
 | ||||
| RUN apk --update --no-cache add python3 alpine-sdk | ||||
| 
 | ||||
| WORKDIR /app | ||||
| 
 | ||||
| COPY . . | ||||
| 
 | ||||
| RUN yarn | ||||
| 
 | ||||
| # Add scripts | ||||
| RUN mkdir /scripts | ||||
| ENV PATH="${PATH}:/scripts" | ||||
							
								
								
									
										7
									
								
								app/data/container-build/cerc-mobymask/build.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										7
									
								
								app/data/container-build/cerc-mobymask/build.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,7 @@ | ||||
| #!/usr/bin/env bash | ||||
| # Build cerc/mobymask | ||||
| 
 | ||||
| # See: https://stackoverflow.com/a/246128/1701505 | ||||
| SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) | ||||
| 
 | ||||
| docker build -t cerc/mobymask:local -f ${SCRIPT_DIR}/Dockerfile ${CERC_REPO_BASE_DIR}/MobyMask | ||||
| @ -1,12 +1,14 @@ | ||||
| FROM node:18.15.0-alpine3.16 | ||||
| 
 | ||||
| RUN apk --update --no-cache add make git | ||||
| RUN apk --update --no-cache add make git python3 | ||||
| 
 | ||||
| WORKDIR /app | ||||
| 
 | ||||
| COPY . . | ||||
| 
 | ||||
| RUN yarn global add serve | ||||
| 
 | ||||
| RUN echo "Building react-peer" && \ | ||||
|     yarn && yarn workspace @cerc-io/react-peer build | ||||
|     yarn install --ignore-scripts && yarn build --ignore @cerc-io/test-app | ||||
| 
 | ||||
| WORKDIR /app | ||||
|  | ||||
| @ -4,7 +4,7 @@ RUN apt-get update \ | ||||
|   && apt-get install -y curl gnupg build-essential \ | ||||
|   && curl --silent --location https://deb.nodesource.com/setup_18.x | bash - \ | ||||
|   && apt-get update \ | ||||
|   && apt-get install -y nodejs git \ | ||||
|   && apt-get install -y nodejs git busybox jq \ | ||||
|   && node -v | ||||
| 
 | ||||
| RUN corepack enable \ | ||||
|  | ||||
| @ -22,6 +22,7 @@ cerc/uniswap-v3-info | ||||
| cerc/watcher-mobymask-v2 | ||||
| cerc/react-peer | ||||
| cerc/mobymask-ui | ||||
| cerc/mobymask | ||||
| cerc/test-container | ||||
| cerc/eth-probe | ||||
| cerc/builder-js | ||||
|  | ||||
| @ -1,4 +1,5 @@ | ||||
| gem | ||||
| laconic-sdk | ||||
| debug | ||||
| laconic-registry-cli | ||||
| gem | ||||
| debug | ||||
| crypto | ||||
|  | ||||
| @ -15,6 +15,7 @@ watcher-erc20 | ||||
| watcher-erc721 | ||||
| watcher-uniswap-v3 | ||||
| watcher-mobymask-v2 | ||||
| mobymask-laconicd | ||||
| test | ||||
| eth-probe | ||||
| keycloak | ||||
|  | ||||
| @ -13,9 +13,13 @@ cerc-io/mobymask-watcher | ||||
| cerc-io/watcher-ts | ||||
| cerc-io/react-peer | ||||
| cerc-io/mobymask-ui | ||||
| cerc-io/MobyMask | ||||
| vulcanize/uniswap-watcher-ts | ||||
| vulcanize/uniswap-v3-info | ||||
| vulcanize/assemblyscript | ||||
| cerc-io/eth-probe | ||||
| cerc-io/tx-spammer | ||||
| dboreham/foundry | ||||
| lirewine/gem | ||||
| lirewine/debug | ||||
| lirewine/crypto | ||||
|  | ||||
| @ -10,6 +10,30 @@ Clone required repositories: | ||||
| laconic-so --stack mobymask-v2 setup-repositories | ||||
| ``` | ||||
| 
 | ||||
| Checkout to the required versions and branches in repos | ||||
| 
 | ||||
| ```bash | ||||
| # watcher-ts | ||||
| cd ~/cerc/watcher-ts | ||||
| git checkout v0.2.31 | ||||
| 
 | ||||
| # react-peer | ||||
| cd ~/cerc/react-peer | ||||
| git checkout v0.2.29 | ||||
| 
 | ||||
| # mobymask-ui | ||||
| cd ~/cerc/mobymask-ui | ||||
| git checkout laconic | ||||
| 
 | ||||
| # laconicd | ||||
| cd ~/cerc/laconicd | ||||
| git checkout v0.8.0 | ||||
| 
 | ||||
| # MobyMask | ||||
| cd ~/cerc/MobyMask | ||||
| git checkout v0.1.1 | ||||
| ``` | ||||
| 
 | ||||
| Build the container images: | ||||
| 
 | ||||
| ```bash | ||||
| @ -20,25 +44,75 @@ This should create the required docker images in the local image registry. | ||||
| 
 | ||||
| Deploy the stack: | ||||
| 
 | ||||
| ```bash | ||||
| laconic-so --stack mobymask-v2 deploy-system up | ||||
| ``` | ||||
| * Deploy the laconic chain | ||||
| 
 | ||||
|   ```bash | ||||
|   laconic-so --stack mobymask-v2 deploy-system --include mobymask-laconicd up | ||||
|   ``` | ||||
| 
 | ||||
| * Check that laconic chain status is healthy | ||||
| 
 | ||||
|   ```bash | ||||
|   docker ps | ||||
|   ``` | ||||
| 
 | ||||
| * Export the private key from laconicd | ||||
| 
 | ||||
|   ```bash | ||||
|   laconic-so --stack mobymask-v2 deploy-system --include mobymask-laconicd exec laconicd "echo y | laconicd keys export mykey --unarmored-hex --unsafe" | ||||
|   ``` | ||||
| 
 | ||||
| * Set the private key in [secrets.json](../../config/watcher-mobymask-v2/secrets.json) file that will be used by mobymask container to deploy contract | ||||
| 
 | ||||
| * Create a new account | ||||
| 
 | ||||
|   ```bash | ||||
|   laconic-so --stack mobymask-v2 deploy-system --include mobymask-laconicd exec laconicd "laconicd keys add alice" | ||||
|   ``` | ||||
| 
 | ||||
| * Transfer balance to new account | ||||
| 
 | ||||
|   ```bash | ||||
|   laconic-so --stack mobymask-v2 deploy-system --include mobymask-laconicd exec laconicd 'laconicd tx bank send $(laconicd keys show mykey -a) $(laconicd keys show alice -a) 1000000000000000000000000aphoton --fees 2000aphoton' | ||||
|   ``` | ||||
| 
 | ||||
| * Export the private key of new account from laconicd | ||||
| 
 | ||||
|   ```bash | ||||
|   laconic-so --stack mobymask-v2 deploy-system --include mobymask-laconicd exec laconicd "echo y | laconicd keys export alice --unarmored-hex --unsafe" | ||||
|   ``` | ||||
| 
 | ||||
| * Set the private key (`PRIVATE_KEY`) in [peer-start.sh](../../config/watcher-mobymask-v2/peer-start.sh) file that will be used to start the peer that sends txs to L2 chain | ||||
| 
 | ||||
| * Deploy the other containers | ||||
| 
 | ||||
|   ```bash | ||||
|   laconic-so --stack mobymask-v2 deploy-system --include watcher-mobymask-v2 up | ||||
|   ``` | ||||
| 
 | ||||
| * Check that all containers are healthy using `docker ps` | ||||
| 
 | ||||
|   NOTE: The `mobymask-ui` container might not start. If mobymask-app is not running at http://localhost:3002, run command again to start the container | ||||
| 
 | ||||
|   ```bash | ||||
|   laconic-so --stack mobymask-v2 deploy-system --include watcher-mobymask-v2 up | ||||
|   ``` | ||||
| 
 | ||||
| ## Tests | ||||
| 
 | ||||
| Find the watcher container's id: | ||||
| 
 | ||||
| ```bash | ||||
| docker ps | grep "cerc/watcher-mobymask-v2:local" | ||||
| laconic-so --stack mobymask-v2 deploy-system --include watcher-mobymask-v2 ps | grep "mobymask-watcher-server" | ||||
| ``` | ||||
| 
 | ||||
| Example output | ||||
| 
 | ||||
| ``` | ||||
| 8b38e9a64d7e   cerc/watcher-mobymask-v2:local   "sh -c 'yarn server'"    35 seconds ago   Up 14 seconds (health: starting)   0.0.0.0:3001->3001/tcp, 0.0.0.0:9001->9001/tcp, 0.0.0.0:9090->9090/tcp   laconic-aeb84676de2b0a7671ae90d537fc7d26-mobymask-watcher-server-1 | ||||
| id: 5d3aae4b22039fcd1c9b18feeb91318ede1100581e75bb5ac54f9e436066b02c, name: laconic-bfb01caf98b1b8f7c8db4d33f11b905a-mobymask-watcher-server-1, ports: 0.0.0.0:3001->3001/tcp, 0.0.0.0:9001->9001/tcp, 0.0.0.0:9090->9090/tcp | ||||
| ``` | ||||
| 
 | ||||
| In above output the container ID is `8b38e9a64d7e` | ||||
| In above output the container ID is `5d3aae4b22039fcd1c9b18feeb91318ede1100581e75bb5ac54f9e436066b02c` | ||||
| 
 | ||||
| Export it for later use: | ||||
| 
 | ||||
| @ -52,10 +126,51 @@ Run the peer tests: | ||||
| docker exec -w /app/packages/peer $CONTAINER_ID yarn test | ||||
| ``` | ||||
| 
 | ||||
| ## Web Apps | ||||
| 
 | ||||
| Check that the status for web-app containers are healthy by using `docker ps` | ||||
| 
 | ||||
| ### mobymask-app | ||||
| 
 | ||||
| The mobymask-app should be running at http://localhost:3002 | ||||
| 
 | ||||
| ### peer-test-app | ||||
| 
 | ||||
| The peer-test-app should be running at http://localhost:3003 | ||||
| 
 | ||||
| ## Details | ||||
| 
 | ||||
| * The relay node for p2p network is running at http://localhost:9090 | ||||
| 
 | ||||
| * The [peer package](https://github.com/cerc-io/watcher-ts/tree/main/packages/peer) (published in [gitea](https://git.vdb.to/cerc-io/-/packages/npm/@cerc-io%2Fpeer)) can be used in client code for connecting to the network | ||||
| 
 | ||||
| * The [react-peer package](https://github.com/cerc-io/react-peer/tree/main/packages/react-peer) (published in [gitea](https://git.vdb.to/cerc-io/-/packages/npm/@cerc-io%2Freact-peer)) which uses the peer package can be used in react app for connecting to the network | ||||
| 
 | ||||
| ## Demo | ||||
| 
 | ||||
| Follow the [demo](./demo.md) to try out the MobyMask app with L2 chain | ||||
| 
 | ||||
| ## Clean up | ||||
| 
 | ||||
| To stop all the services running in background run: | ||||
| Stop all the services running in background run: | ||||
| 
 | ||||
| ```bash | ||||
| laconic-so --stack mobymask-v2 deploy-system down | ||||
| laconic-so --stack mobymask-v2 deploy-system --include watcher-mobymask-v2 down | ||||
| 
 | ||||
| laconic-so --stack mobymask-v2 deploy-system --include mobymask-laconicd down | ||||
| ``` | ||||
| 
 | ||||
| Clear volumes: | ||||
| 
 | ||||
| * List all volumes | ||||
| 
 | ||||
|   ```bash | ||||
|   docker volume ls | ||||
|   ``` | ||||
| 
 | ||||
| * Remove volumes created by this stack | ||||
| 
 | ||||
|   Example: | ||||
|   ```bash | ||||
|   docker volume rm laconic-bfb01caf98b1b8f7c8db4d33f11b905a_moby_data_server | ||||
|   ``` | ||||
|  | ||||
							
								
								
									
										130
									
								
								app/data/stacks/mobymask-v2/demo.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										130
									
								
								app/data/stacks/mobymask-v2/demo.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,130 @@ | ||||
| # Demo | ||||
| 
 | ||||
| * Get the root invite link URL for mobymask-app | ||||
| 
 | ||||
|   ``` | ||||
|   laconic-so --stack mobymask-v2 deploy-system --include watcher-mobymask-v2 logs mobymask | ||||
|   ``` | ||||
| 
 | ||||
|   NOTE: Clear the browser cache (local storage) for http://127.0.0.1:3002 to remove old invitations | ||||
| 
 | ||||
|   The invite link is seen at the end of the logs | ||||
|   Example: | ||||
|   ``` | ||||
|   laconic-bfb01caf98b1b8f7c8db4d33f11b905a-mobymask-1  | http://127.0.0.1:3002/#/members?invitation=%7B%22v%22%3A1%2C%22signedDelegations%22%3A%5B%7B%22signature%22%3A%220x7559bd412f02677d60820e38243acf61547f79339395a34f7d4e1630e645aeb30535fc219f79b6fbd3af0ce3bd05132ad46d2b274a9fbc4c36bc71edd09850891b%22%2C%22delegation%22%3A%7B%22delegate%22%3A%220xc0838c92B2b71756E0eAD5B3C1e1F186baeEAAac%22%2C%22authority%22%3A%220x0000000000000000000000000000000000000000000000000000000000000000%22%2C%22caveats%22%3A%5B%7B%22enforcer%22%3A%220x558024C7d593B840E1BfD83E9B287a5CDad4db15%22%2C%22terms%22%3A%220x0000000000000000000000000000000000000000000000000000000000000000%22%7D%5D%7D%7D%5D%2C%22key%22%3A%220x98da9805821f1802196443e578fd32af567bababa0a249c07c82df01ecaa7d8d%22%7D | ||||
|   ``` | ||||
| 
 | ||||
| * In the debug panel, check if it is connected to the p2p network (It should be connected to atleast one other peer for pubsub to work). | ||||
| 
 | ||||
| * Create an invite link in the app by clicking on `Create new invite link` button. | ||||
| 
 | ||||
| * Switch to the `MESSAGES` tab in debug panel for viewing incoming messages later. | ||||
| 
 | ||||
| * Open the invite link in a new browser with different profile (to simulate remote browser) | ||||
|   * Check that it is connected to any other peer in the network. | ||||
| 
 | ||||
| * In `Report a phishing attempt` section, report multiple phishers using the `submit` button. Click on the `Submit batch to p2p network` button. This broadcasts signed invocations to the connected peers. | ||||
| 
 | ||||
| * In the `MESSAGES` tab of other browsers, a message can be seen with the signed invocations. | ||||
| 
 | ||||
| * In a terminal check logs from the watcher peer container. | ||||
| 
 | ||||
|   * Get the container id | ||||
| 
 | ||||
|     ```bash | ||||
|     laconic-so --stack mobymask-v2 deploy-system --include watcher-mobymask-v2 ps | grep mobymask-watcher-peer | ||||
|     ``` | ||||
| 
 | ||||
|   * Check logs | ||||
| 
 | ||||
|     ```bash | ||||
|     docker logs -f CONTAINER_ID | ||||
|     ``` | ||||
| 
 | ||||
| * It should have received the message, sent transaction to L2 chain and received a transaction receipt with block details. | ||||
| 
 | ||||
|   Example log: | ||||
| 
 | ||||
|   ``` | ||||
|   2023-03-23T10:25:19.771Z vulcanize:peer-listener [10:25:19] Received a message on mobymask P2P network from peer: PeerId(12D3KooWAVNswtcrX12iDYukEoxdQwD34kJyRWcQTfZ4unGg2xjd) | ||||
|   2023-03-23T10:25:24.143Z laconic:libp2p-utils Transaction receipt for invoke message { | ||||
|     to: '0x558024C7d593B840E1BfD83E9B287a5CDad4db15', | ||||
|     blockNumber: 1996, | ||||
|     blockHash: '0xebef19c21269654804b2ef2d4bb5cb6c88743b37ed77e82222dc5671debf3afb', | ||||
|     transactionHash: '0xf8c5a093a93f793012196073a7d0cb3ed6fbd2846126c066cb31c72100960cb1', | ||||
|     effectiveGasPrice: '1500000007', | ||||
|     gasUsed: '250000' | ||||
|   } | ||||
|   ``` | ||||
| 
 | ||||
| * Check the phisher in watcher GQL: http://localhost:3001/graphql | ||||
|   * Use the blockHash from transaction receipt details or query for latest block | ||||
| 
 | ||||
|     ```gql | ||||
|     query { | ||||
|       latestBlock { | ||||
|         hash | ||||
|         number | ||||
|       } | ||||
|     } | ||||
|     ``` | ||||
| 
 | ||||
|   * Get the deployed contract address | ||||
| 
 | ||||
|     ```bash | ||||
|     laconic-so --stack mobymask-v2 deploy-system --include watcher-mobymask-v2 exec mobymask-app "cat src/config.json" | ||||
|     ``` | ||||
| 
 | ||||
|     The value of `address` field is the deployed contract address | ||||
| 
 | ||||
|   * Check for phisher value | ||||
| 
 | ||||
|     ```gql | ||||
|     query { | ||||
|       isPhisher( | ||||
|         blockHash: "TX_OR_LATEST_BLOCK_HASH", | ||||
|         contractAddress: "CONTRACT_ADDRESS", | ||||
|         # If reported phisher name was "test" then key0 value is "TWT:test" | ||||
|         key0: "TWT:PHISHER_NAME" | ||||
|       ) { | ||||
|         value | ||||
|       } | ||||
|     } | ||||
|     ``` | ||||
| 
 | ||||
|     It should return true for reported phisher names. | ||||
| 
 | ||||
|   * Watcher internally is using L2 chain `eth_getStorageAt` method. | ||||
| 
 | ||||
| * Check the phisher name in mobymask app in `Check Phisher Status` section. | ||||
|     * Watcher GQL API is used for checking phisher. | ||||
| 
 | ||||
| * Manage the invitations by clicking on the `Outstanding Invitations in p2p network`. | ||||
| 
 | ||||
| * Revoke the created invitation by clicking on `Revoke (p2p network)` | ||||
| 
 | ||||
| * Revocation messages can be seen in the debug panel `MESSAGES` tab of other browsers. | ||||
| 
 | ||||
| * Check the watcher peer logs. It should receive a message and log the transaction receipt for revoke message. | ||||
| 
 | ||||
| * Try reporting a phisher from the revoked invitee's browser. | ||||
| 
 | ||||
|   * The invocation message for reporting phisher would be broadcasted to all peers. | ||||
| 
 | ||||
|   * Check the watcher peer logs. A transaction failed error should be logged. | ||||
| 
 | ||||
|   * Check the reported phisher in [watcher GQL](https://localhost:3001/graphql) | ||||
| 
 | ||||
|     ```gql | ||||
|     query { | ||||
|       isPhisher( | ||||
|         blockHash: "LATEST_BLOCK_HASH", | ||||
|         contractAddress: "CONTRACT_ADDRESS", | ||||
|         key0: "TWT:PHISHER_NAME" | ||||
|       ) { | ||||
|         value | ||||
|       } | ||||
|     } | ||||
|     ``` | ||||
| 
 | ||||
|     It should return false as the invitation/delegation used for reporting phishers has been revoked. | ||||
| @ -4,8 +4,14 @@ repos: | ||||
|   - cerc-io/watcher-ts | ||||
|   - cerc-io/react-peer | ||||
|   - cerc-io/mobymask-ui | ||||
|   - cerc-io/laconicd | ||||
|   - cerc-io/MobyMask | ||||
| containers: | ||||
|   - cerc/watcher-mobymask-v2 | ||||
|   - cerc/react-peer | ||||
|   - cerc/mobymask-ui | ||||
|   - cerc/laconicd | ||||
|   - cerc/mobymask | ||||
| pods: | ||||
|   - mobymask-laconicd | ||||
|   - watcher-mobymask-v2 | ||||
|  | ||||
| @ -1,2 +1,2 @@ | ||||
| # This file should be re-generated running: scripts/update-version-file.sh script | ||||
| v1.0.29-5fca9bd | ||||
| v1.0.30-3d03b10 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user