forked from cerc-io/stack-orchestrator
Compare commits
66
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c9155eafd2 | ||
|
|
1ffc6b1687 | ||
|
|
87c25dfb5e | ||
|
|
0691c22db4 | ||
|
|
5c7d445500 | ||
|
|
a93fa93d26 | ||
|
|
1852d7d4c1 | ||
|
|
fce41994a3 | ||
|
|
a5d3d6bae7 | ||
|
|
8add4671c0 | ||
|
|
b1b1464205 | ||
|
|
fbe901a0fb | ||
|
|
a9558aa874 | ||
|
|
960a24c96b | ||
|
|
c1e3f5674d | ||
|
|
55e7d22e57 | ||
|
|
3634a35479 | ||
|
|
255a71fa4c | ||
|
|
3751db8046 | ||
|
|
6bb1acc04f | ||
|
|
9da47a2e45 | ||
|
|
8cdb9cee35 | ||
|
|
f8306e6685 | ||
|
|
feb5fe7bff | ||
|
|
b0770d7379 | ||
|
|
4aecfcd780 | ||
|
|
03f6d027f9 | ||
|
|
617228d0dc | ||
|
|
d8522211f4 | ||
|
|
4ca185c753 | ||
|
|
e004d93891 | ||
|
|
8f6703940a | ||
|
|
cf0e0c5d94 | ||
|
|
7f3a33564a | ||
|
|
10337e77f6 | ||
|
|
7a1ec3f196 | ||
|
|
4beb889e9f | ||
|
|
2b8eccf167 | ||
|
|
f5acbd1db0 | ||
|
|
f87f3d4765 | ||
|
|
d2dfcc813f | ||
|
|
d6f829ee65 | ||
|
|
363a0b733f | ||
|
|
3d75523d73 | ||
|
|
35dd30f877 | ||
|
|
b3feab0592 | ||
|
|
e3e48ccbf3 | ||
|
|
df13b8f630 | ||
|
|
209d49f105 | ||
|
|
b7094c7e7f | ||
|
|
fefbcf031c | ||
|
|
d98b02266b | ||
|
|
beac97b842 | ||
|
|
ea7c5109b8 | ||
|
|
6ce01a79ed | ||
|
|
2d5abdce45 | ||
|
|
db1edd85e6 | ||
|
|
55b2d3bd25 | ||
|
|
a3b3ac18b1 | ||
|
|
1629129cd5 | ||
|
|
feee38140d | ||
|
|
ddf51e01a3 | ||
|
|
a1a4837c89 | ||
|
|
18f3c2cc4f | ||
|
|
391759e929 | ||
|
|
0f7c23951d |
@@ -0,0 +1,27 @@
|
|||||||
|
name: Fixturenet-Eth-Test
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: 'ci-test'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
name: "Run an Ethereum fixturenet test"
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: "Clone project repository"
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
- name: "Install Python"
|
||||||
|
uses: cerc-io/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: '3.8'
|
||||||
|
- name: "Print Python version"
|
||||||
|
run: python3 --version
|
||||||
|
- name: "Install shiv"
|
||||||
|
run: pip install shiv
|
||||||
|
- name: "Generate build version file"
|
||||||
|
run: ./scripts/create_build_tag_file.sh
|
||||||
|
- name: "Build local shiv package"
|
||||||
|
run: ./scripts/build_shiv_package.sh
|
||||||
|
- name: "Run fixturenet-eth tests"
|
||||||
|
run: ./tests/fixturenet-eth/run-test.sh
|
||||||
@@ -1,10 +1,16 @@
|
|||||||
name: Test
|
name: Integration Test
|
||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: '*'
|
branches: '*'
|
||||||
push:
|
push:
|
||||||
branches: '*'
|
branches:
|
||||||
|
- main
|
||||||
|
- ci-test
|
||||||
|
|
||||||
|
# Needed until we can incorporate docker startup into the executor container
|
||||||
|
env:
|
||||||
|
DOCKER_HOST: unix:///var/run/dind.sock
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
@@ -25,5 +31,9 @@ jobs:
|
|||||||
run: ./scripts/create_build_tag_file.sh
|
run: ./scripts/create_build_tag_file.sh
|
||||||
- name: "Build local shiv package"
|
- name: "Build local shiv package"
|
||||||
run: ./scripts/build_shiv_package.sh
|
run: ./scripts/build_shiv_package.sh
|
||||||
|
- name: Start dockerd # Also needed until we can incorporate into the executor
|
||||||
|
run: |
|
||||||
|
dockerd -H $DOCKER_HOST --userland-proxy=false &
|
||||||
|
sleep 5
|
||||||
- name: "Run smoke tests"
|
- name: "Run smoke tests"
|
||||||
run: ./tests/smoke-test/run-smoke-test.sh
|
run: ./tests/smoke-test/run-smoke-test.sh
|
||||||
|
|||||||
@@ -5,4 +5,6 @@ laconic-so
|
|||||||
laconic_stack_orchestrator.egg-info
|
laconic_stack_orchestrator.egg-info
|
||||||
__pycache__
|
__pycache__
|
||||||
*~
|
*~
|
||||||
|
package
|
||||||
|
app/data/build_tag.txt
|
||||||
build
|
build
|
||||||
|
|||||||
@@ -35,58 +35,28 @@ curl -L -o ~/bin/laconic-so https://github.com/cerc-io/stack-orchestrator/releas
|
|||||||
```
|
```
|
||||||
|
|
||||||
Give it execute permissions:
|
Give it execute permissions:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
chmod +x ~/bin/laconic-so
|
chmod +x ~/bin/laconic-so
|
||||||
```
|
```
|
||||||
|
|
||||||
Ensure `laconic-so` is on the [`PATH`](https://unix.stackexchange.com/a/26059)
|
Ensure `laconic-so` is on the [`PATH`](https://unix.stackexchange.com/a/26059)
|
||||||
|
|
||||||
Verify operation (your version will probably be different, just check here that you see some version outut and not an error):
|
Verify operation (your version will probably be different, just check here that you see some version output and not an error):
|
||||||
|
|
||||||
```
|
```
|
||||||
laconic-so version
|
laconic-so version
|
||||||
Version: v1.0.27-7831078
|
Version: 1.1.0-7a607c2-202304260513
|
||||||
```
|
```
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Three sub-commands: `setup-repositories`, `build-containers` and `deploy-system` are generally run in order. The following is a slim example for standing up the `erc20-watcher`. Go further with the [erc20 watcher demo](/app/data/stacks/erc20) and other pieces of the stack, within the [`stacks` directory](/app/data/stacks).
|
The various [stacks](/app/data/stacks) each contain instructions for running different stacks based on your use case. For example:
|
||||||
|
|
||||||
### Setup Repositories
|
- [self-hosted Gitea](/app/data/stacks/build-support)
|
||||||
|
- [an Optimism Fixturenet](/app/data/stacks/fixturenet-optimism)
|
||||||
Clone the set of git repositories necessary to build a system:
|
- [laconicd with console and CLI](app/data/stacks/fixturenet-laconic-loaded)
|
||||||
|
- [kubo (IPFS)](app/data/stacks/kubo)
|
||||||
```bash
|
|
||||||
laconic-so --stack erc20 setup-repositories
|
|
||||||
```
|
|
||||||
|
|
||||||
This will default to cloning git reposiories into: `~/cerc` or - if set - the environment variable `CERC_REPO_BASE_DIR`
|
|
||||||
|
|
||||||
### Build Containers
|
|
||||||
|
|
||||||
Build the set of docker container images required to run a system. It takes around 10 minutes to build all the containers from scratch.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
laconic-so --stack erc20 build-containers
|
|
||||||
```
|
|
||||||
|
|
||||||
### Deploy System
|
|
||||||
|
|
||||||
Uses `docker compose` to deploy a system (with most recently built container images).
|
|
||||||
|
|
||||||
```bash
|
|
||||||
laconic-so --stack erc20 deploy-system up
|
|
||||||
```
|
|
||||||
|
|
||||||
Check out he GraphQL playground here: [http://localhost:3002/graphql](http://localhost:3002/graphql)
|
|
||||||
|
|
||||||
See the [erc20 watcher demo](/app/data/stacks/erc20) to continue further.
|
|
||||||
|
|
||||||
### Cleanup
|
|
||||||
|
|
||||||
```bash
|
|
||||||
laconic-so --stack erc20 deploy-system down
|
|
||||||
```
|
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
|
|||||||
@@ -95,6 +95,9 @@ def command(ctx, include, exclude, force_rebuild, extra_build_args):
|
|||||||
container_build_env.update({"CERC_SCRIPT_DEBUG": "true"} if debug else {})
|
container_build_env.update({"CERC_SCRIPT_DEBUG": "true"} if debug else {})
|
||||||
container_build_env.update({"CERC_FORCE_REBUILD": "true"} if force_rebuild else {})
|
container_build_env.update({"CERC_FORCE_REBUILD": "true"} if force_rebuild else {})
|
||||||
container_build_env.update({"CERC_CONTAINER_EXTRA_BUILD_ARGS": extra_build_args} if extra_build_args else {})
|
container_build_env.update({"CERC_CONTAINER_EXTRA_BUILD_ARGS": extra_build_args} if extra_build_args else {})
|
||||||
|
docker_host_env = os.getenv("DOCKER_HOST")
|
||||||
|
if docker_host_env:
|
||||||
|
container_build_env.update({"DOCKER_HOST": docker_host_env})
|
||||||
|
|
||||||
def process_container(container):
|
def process_container(container):
|
||||||
if not quiet:
|
if not quiet:
|
||||||
@@ -112,7 +115,7 @@ def command(ctx, include, exclude, force_rebuild, extra_build_args):
|
|||||||
# TODO: make this less of a hack -- should be specified in some metadata somewhere
|
# TODO: make this less of a hack -- should be specified in some metadata somewhere
|
||||||
# Check if we have a repo for this container. If not, set the context dir to the container-build subdir
|
# Check if we have a repo for this container. If not, set the context dir to the container-build subdir
|
||||||
repo_full_path = os.path.join(dev_root_path, repo_dir)
|
repo_full_path = os.path.join(dev_root_path, repo_dir)
|
||||||
repo_dir_or_build_dir = repo_dir if os.path.exists(repo_full_path) else build_dir
|
repo_dir_or_build_dir = repo_full_path if os.path.exists(repo_full_path) else build_dir
|
||||||
build_command = os.path.join(container_build_dir, "default-build.sh") + f" {container}:local {repo_dir_or_build_dir}"
|
build_command = os.path.join(container_build_dir, "default-build.sh") + f" {container}:local {repo_dir_or_build_dir}"
|
||||||
if not dry_run:
|
if not dry_run:
|
||||||
if verbose:
|
if verbose:
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ version: '3.7'
|
|||||||
|
|
||||||
services:
|
services:
|
||||||
fixturenet-eth-bootnode-geth:
|
fixturenet-eth-bootnode-geth:
|
||||||
|
restart: always
|
||||||
hostname: fixturenet-eth-bootnode-geth
|
hostname: fixturenet-eth-bootnode-geth
|
||||||
env_file:
|
env_file:
|
||||||
- ../config/fixturenet-eth/fixturenet-eth.env
|
- ../config/fixturenet-eth/fixturenet-eth.env
|
||||||
@@ -15,6 +16,7 @@ services:
|
|||||||
- "30303"
|
- "30303"
|
||||||
|
|
||||||
fixturenet-eth-geth-1:
|
fixturenet-eth-geth-1:
|
||||||
|
restart: always
|
||||||
hostname: fixturenet-eth-geth-1
|
hostname: fixturenet-eth-geth-1
|
||||||
cap_add:
|
cap_add:
|
||||||
- SYS_PTRACE
|
- SYS_PTRACE
|
||||||
@@ -27,7 +29,6 @@ services:
|
|||||||
- ../config/fixturenet-eth/fixturenet-eth.env
|
- ../config/fixturenet-eth/fixturenet-eth.env
|
||||||
image: cerc/fixturenet-eth-geth:local
|
image: cerc/fixturenet-eth-geth:local
|
||||||
volumes:
|
volumes:
|
||||||
- fixturenet_geth_accounts:/opt/testnet/build/el
|
|
||||||
- fixturenet_eth_geth_1_data:/root/ethdata
|
- fixturenet_eth_geth_1_data:/root/ethdata
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "nc", "-v", "localhost", "8545"]
|
test: ["CMD", "nc", "-v", "localhost", "8545"]
|
||||||
@@ -43,6 +44,7 @@ services:
|
|||||||
- "6060"
|
- "6060"
|
||||||
|
|
||||||
fixturenet-eth-geth-2:
|
fixturenet-eth-geth-2:
|
||||||
|
restart: always
|
||||||
hostname: fixturenet-eth-geth-2
|
hostname: fixturenet-eth-geth-2
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "nc", "-v", "localhost", "8545"]
|
test: ["CMD", "nc", "-v", "localhost", "8545"]
|
||||||
@@ -50,6 +52,8 @@ services:
|
|||||||
timeout: 10s
|
timeout: 10s
|
||||||
retries: 10
|
retries: 10
|
||||||
start_period: 3s
|
start_period: 3s
|
||||||
|
environment:
|
||||||
|
CERC_KEEP_RUNNING_AFTER_GETH_EXIT: "true"
|
||||||
env_file:
|
env_file:
|
||||||
- ../config/fixturenet-eth/fixturenet-eth.env
|
- ../config/fixturenet-eth/fixturenet-eth.env
|
||||||
image: cerc/fixturenet-eth-geth:local
|
image: cerc/fixturenet-eth-geth:local
|
||||||
@@ -59,14 +63,14 @@ services:
|
|||||||
- fixturenet_eth_geth_2_data:/root/ethdata
|
- fixturenet_eth_geth_2_data:/root/ethdata
|
||||||
|
|
||||||
fixturenet-eth-bootnode-lighthouse:
|
fixturenet-eth-bootnode-lighthouse:
|
||||||
|
restart: always
|
||||||
hostname: fixturenet-eth-bootnode-lighthouse
|
hostname: fixturenet-eth-bootnode-lighthouse
|
||||||
environment:
|
environment:
|
||||||
RUN_BOOTNODE: "true"
|
RUN_BOOTNODE: "true"
|
||||||
image: cerc/fixturenet-eth-lighthouse:local
|
image: cerc/fixturenet-eth-lighthouse:local
|
||||||
volumes:
|
|
||||||
- fixturenet_eth_bootnode_lighthouse_data:/opt/testnet/build/cl
|
|
||||||
|
|
||||||
fixturenet-eth-lighthouse-1:
|
fixturenet-eth-lighthouse-1:
|
||||||
|
restart: always
|
||||||
hostname: fixturenet-eth-lighthouse-1
|
hostname: fixturenet-eth-lighthouse-1
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "wget", "--tries=1", "--connect-timeout=1", "--quiet", "-O", "-", "http://localhost:8001/eth/v2/beacon/blocks/head"]
|
test: ["CMD", "wget", "--tries=1", "--connect-timeout=1", "--quiet", "-O", "-", "http://localhost:8001/eth/v2/beacon/blocks/head"]
|
||||||
@@ -92,6 +96,7 @@ services:
|
|||||||
- "8001"
|
- "8001"
|
||||||
|
|
||||||
fixturenet-eth-lighthouse-2:
|
fixturenet-eth-lighthouse-2:
|
||||||
|
restart: always
|
||||||
hostname: fixturenet-eth-lighthouse-2
|
hostname: fixturenet-eth-lighthouse-2
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "wget", "--tries=1", "--connect-timeout=1", "--quiet", "-O", "-", "http://localhost:8001/eth/v2/beacon/blocks/head"]
|
test: ["CMD", "wget", "--tries=1", "--connect-timeout=1", "--quiet", "-O", "-", "http://localhost:8001/eth/v2/beacon/blocks/head"]
|
||||||
@@ -116,10 +121,8 @@ services:
|
|||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
fixturenet_geth_accounts:
|
|
||||||
fixturenet_eth_bootnode_geth_data:
|
fixturenet_eth_bootnode_geth_data:
|
||||||
fixturenet_eth_geth_1_data:
|
fixturenet_eth_geth_1_data:
|
||||||
fixturenet_eth_geth_2_data:
|
fixturenet_eth_geth_2_data:
|
||||||
fixturenet_eth_bootnode_lighthouse_data:
|
|
||||||
fixturenet_eth_lighthouse_1_data:
|
fixturenet_eth_lighthouse_1_data:
|
||||||
fixturenet_eth_lighthouse_2_data:
|
fixturenet_eth_lighthouse_2_data:
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
version: "3.2"
|
|
||||||
services:
|
services:
|
||||||
laconicd:
|
laconicd:
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
image: cerc/laconicd:local
|
image: cerc/laconicd:local
|
||||||
command: ["sh", "/docker-entrypoint-scripts.d/create-fixturenet.sh"]
|
command: ["sh", "/docker-entrypoint-scripts.d/create-fixturenet.sh"]
|
||||||
volumes:
|
volumes:
|
||||||
|
# The cosmos-sdk node's database directory:
|
||||||
|
- laconicd-data:/root/.laconicd/data
|
||||||
# TODO: look at folding these scripts into the container
|
# TODO: look at folding these scripts into the container
|
||||||
- ../config/fixturenet-laconicd/create-fixturenet.sh:/docker-entrypoint-scripts.d/create-fixturenet.sh
|
- ../config/fixturenet-laconicd/create-fixturenet.sh:/docker-entrypoint-scripts.d/create-fixturenet.sh
|
||||||
- ../config/fixturenet-laconicd/export-mykey.sh:/docker-entrypoint-scripts.d/export-mykey.sh
|
- ../config/fixturenet-laconicd/export-mykey.sh:/docker-entrypoint-scripts.d/export-mykey.sh
|
||||||
|
|||||||
@@ -0,0 +1,68 @@
|
|||||||
|
version: "3.8"
|
||||||
|
services:
|
||||||
|
|
||||||
|
lotus-miner:
|
||||||
|
hostname: lotus-miner
|
||||||
|
env_file:
|
||||||
|
- ../config/fixturenet-lotus/lotus-env.env
|
||||||
|
image: cerc/lotus:local
|
||||||
|
volumes:
|
||||||
|
- ../config/fixturenet-lotus/setup-miner.sh:/docker-entrypoint-scripts.d/setup-miner.sh
|
||||||
|
- ../config/fixturenet-lotus/genesis/devgen.car:/devgen.car
|
||||||
|
- $HOME/stack-orchestrator/app/data/config/fixturenet-lotus/genesis/.genesis-sectors:/root/.genesis-sectors
|
||||||
|
- lotus-shared:/root/.lotus-shared
|
||||||
|
healthcheck:
|
||||||
|
# test: ["CMD-SHELL", "grep 'started ChainNotify channel' /var/log/lotus.log"]
|
||||||
|
# test: ["CMD-SHELL", "[ -f /root/.lotus-shared/miner.addr ]"]
|
||||||
|
test: ["CMD-SHELL", "[ -d /root/.lotus-miner-local-net ]"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 10
|
||||||
|
start_period: 60s
|
||||||
|
entrypoint: ["sh", "/docker-entrypoint-scripts.d/setup-miner.sh"]
|
||||||
|
ports:
|
||||||
|
- "1234"
|
||||||
|
- "2345"
|
||||||
|
- "3456"
|
||||||
|
- "1777"
|
||||||
|
|
||||||
|
lotus-node-1:
|
||||||
|
hostname: lotus-node-1
|
||||||
|
env_file:
|
||||||
|
- ../config/fixturenet-lotus/lotus-env.env
|
||||||
|
image: cerc/lotus:local
|
||||||
|
volumes:
|
||||||
|
- ../config/fixturenet-lotus/setup-node.sh:/docker-entrypoint-scripts.d/setup-node.sh
|
||||||
|
- ../config/fixturenet-lotus/genesis/devgen.car:/devgen.car
|
||||||
|
- lotus-shared:/root/.lotus-shared
|
||||||
|
depends_on:
|
||||||
|
lotus-miner:
|
||||||
|
condition: service_healthy
|
||||||
|
entrypoint: ["sh", "/docker-entrypoint-scripts.d/setup-node.sh"]
|
||||||
|
ports:
|
||||||
|
- "1234"
|
||||||
|
- "2345"
|
||||||
|
- "3456"
|
||||||
|
- "1777"
|
||||||
|
|
||||||
|
lotus-node-2:
|
||||||
|
hostname: lotus-node-2
|
||||||
|
env_file:
|
||||||
|
- ../config/fixturenet-lotus/lotus-env.env
|
||||||
|
image: cerc/lotus:local
|
||||||
|
volumes:
|
||||||
|
- ../config/fixturenet-lotus/setup-node.sh:/docker-entrypoint-scripts.d/setup-node.sh
|
||||||
|
- ../config/fixturenet-lotus/genesis/devgen.car:/devgen.car
|
||||||
|
- lotus-shared:/root/.lotus-shared
|
||||||
|
depends_on:
|
||||||
|
lotus-miner:
|
||||||
|
condition: service_healthy
|
||||||
|
entrypoint: ["sh", "/docker-entrypoint-scripts.d/setup-node.sh"]
|
||||||
|
ports:
|
||||||
|
- "1234"
|
||||||
|
- "2345"
|
||||||
|
- "3456"
|
||||||
|
- "1777"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
lotus-shared:
|
||||||
@@ -5,6 +5,7 @@ services:
|
|||||||
# Creates / updates the configuration for L1 contracts deployment
|
# Creates / updates the configuration for L1 contracts deployment
|
||||||
# Deploys the L1 smart contracts (outputs to volume l1_deployment)
|
# Deploys the L1 smart contracts (outputs to volume l1_deployment)
|
||||||
fixturenet-optimism-contracts:
|
fixturenet-optimism-contracts:
|
||||||
|
restart: on-failure
|
||||||
hostname: fixturenet-optimism-contracts
|
hostname: fixturenet-optimism-contracts
|
||||||
image: cerc/optimism-contracts:local
|
image: cerc/optimism-contracts:local
|
||||||
env_file:
|
env_file:
|
||||||
@@ -13,6 +14,7 @@ services:
|
|||||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||||
CERC_L1_CHAIN_ID: ${CERC_L1_CHAIN_ID}
|
CERC_L1_CHAIN_ID: ${CERC_L1_CHAIN_ID}
|
||||||
CERC_L1_RPC: ${CERC_L1_RPC}
|
CERC_L1_RPC: ${CERC_L1_RPC}
|
||||||
|
CERC_L1_ACCOUNTS_CSV_URL: ${CERC_L1_ACCOUNTS_CSV_URL}
|
||||||
CERC_L1_ADDRESS: ${CERC_L1_ADDRESS}
|
CERC_L1_ADDRESS: ${CERC_L1_ADDRESS}
|
||||||
CERC_L1_PRIV_KEY: ${CERC_L1_PRIV_KEY}
|
CERC_L1_PRIV_KEY: ${CERC_L1_PRIV_KEY}
|
||||||
CERC_L1_ADDRESS_2: ${CERC_L1_ADDRESS_2}
|
CERC_L1_ADDRESS_2: ${CERC_L1_ADDRESS_2}
|
||||||
@@ -27,14 +29,14 @@ services:
|
|||||||
- ../container-build/cerc-optimism-contracts/hardhat-tasks/send-balance.ts:/app/packages/contracts-bedrock/tasks/send-balance.ts
|
- ../container-build/cerc-optimism-contracts/hardhat-tasks/send-balance.ts:/app/packages/contracts-bedrock/tasks/send-balance.ts
|
||||||
- ../config/fixturenet-optimism/optimism-contracts/update-config.js:/app/packages/contracts-bedrock/update-config.js
|
- ../config/fixturenet-optimism/optimism-contracts/update-config.js:/app/packages/contracts-bedrock/update-config.js
|
||||||
- ../config/fixturenet-optimism/optimism-contracts/run.sh:/app/packages/contracts-bedrock/run.sh
|
- ../config/fixturenet-optimism/optimism-contracts/run.sh:/app/packages/contracts-bedrock/run.sh
|
||||||
- fixturenet_geth_accounts:/geth-accounts:ro
|
|
||||||
- l2_accounts:/l2-accounts
|
- l2_accounts:/l2-accounts
|
||||||
- l1_deployment:/app/packages/contracts-bedrock
|
- l1_deployment:/app/packages/contracts-bedrock
|
||||||
extra_hosts:
|
extra_hosts:
|
||||||
- "host.docker.internal:host-gateway"
|
- "host.docker.internal:host-gateway"
|
||||||
|
|
||||||
# Generates the config files required for L2 (outputs to volume l2_config)
|
# Generates the config files required for L2 (outputs to volume l2_config)
|
||||||
op-node-l2-config-gen:
|
op-node-l2-config-gen:
|
||||||
|
restart: on-failure
|
||||||
image: cerc/optimism-op-node:local
|
image: cerc/optimism-op-node:local
|
||||||
depends_on:
|
depends_on:
|
||||||
fixturenet-optimism-contracts:
|
fixturenet-optimism-contracts:
|
||||||
@@ -50,10 +52,11 @@ services:
|
|||||||
- l2_config:/app
|
- l2_config:/app
|
||||||
command: ["sh", "/app/generate-l2-config.sh"]
|
command: ["sh", "/app/generate-l2-config.sh"]
|
||||||
extra_hosts:
|
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)
|
# Initializes and runs the L2 execution client (outputs to volume l2_geth_data)
|
||||||
op-geth:
|
op-geth:
|
||||||
|
restart: always
|
||||||
image: cerc/optimism-l2geth:local
|
image: cerc/optimism-l2geth:local
|
||||||
depends_on:
|
depends_on:
|
||||||
op-node-l2-config-gen:
|
op-node-l2-config-gen:
|
||||||
@@ -76,6 +79,7 @@ services:
|
|||||||
|
|
||||||
# Runs the L2 consensus client (Sequencer node)
|
# Runs the L2 consensus client (Sequencer node)
|
||||||
op-node:
|
op-node:
|
||||||
|
restart: always
|
||||||
image: cerc/optimism-op-node:local
|
image: cerc/optimism-op-node:local
|
||||||
depends_on:
|
depends_on:
|
||||||
op-geth:
|
op-geth:
|
||||||
@@ -103,6 +107,7 @@ services:
|
|||||||
|
|
||||||
# Runs the batcher (takes transactions from the Sequencer and publishes them to L1)
|
# Runs the batcher (takes transactions from the Sequencer and publishes them to L1)
|
||||||
op-batcher:
|
op-batcher:
|
||||||
|
restart: always
|
||||||
image: cerc/optimism-op-batcher:local
|
image: cerc/optimism-op-batcher:local
|
||||||
depends_on:
|
depends_on:
|
||||||
op-node:
|
op-node:
|
||||||
@@ -122,11 +127,38 @@ services:
|
|||||||
# Waits for L1 endpoint to be up before running the batcher
|
# Waits for L1 endpoint to be up before running the batcher
|
||||||
command: |
|
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"
|
"/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:
|
extra_hosts:
|
||||||
- "host.docker.internal:host-gateway"
|
- "host.docker.internal:host-gateway"
|
||||||
|
|
||||||
|
# Runs the proposer (periodically submits new state roots to L1)
|
||||||
|
op-proposer:
|
||||||
|
restart: always
|
||||||
|
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"
|
||||||
|
ports:
|
||||||
|
- "127.0.0.1:8560:8560"
|
||||||
|
extra_hosts:
|
||||||
|
- "host.docker.internal:host-gateway"
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
fixturenet_geth_accounts:
|
|
||||||
l1_deployment:
|
l1_deployment:
|
||||||
l2_accounts:
|
l2_accounts:
|
||||||
l2_config:
|
l2_config:
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
version: "3.2"
|
||||||
|
services:
|
||||||
|
pocket:
|
||||||
|
restart: unless-stopped
|
||||||
|
image: cerc/pocket:local
|
||||||
|
# command: ["sh", "/docker-entrypoint-scripts.d/create-fixturenet.sh"]
|
||||||
|
entrypoint: ["sh", "/docker-entrypoint-scripts.d/create-fixturenet.sh"]
|
||||||
|
volumes:
|
||||||
|
# TODO: look at folding these scripts into the container
|
||||||
|
- ../config/fixturenet-pocket/create-fixturenet.sh:/docker-entrypoint-scripts.d/create-fixturenet.sh
|
||||||
|
- ../config/fixturenet-pocket/chains.json:/home/app/pocket-configs/chains.json
|
||||||
|
- ../config/fixturenet-pocket/genesis.json:/home/app/pocket-configs/genesis.json
|
||||||
|
ports:
|
||||||
|
- "8081:8081" # pocket relay rpc
|
||||||
|
networks:
|
||||||
|
net1:
|
||||||
|
name: fixturenet-eth_default
|
||||||
|
external: true
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
# Add-on pod to include foundry tooling within a fixturenet
|
# Add-on pod to include foundry tooling within a fixturenet
|
||||||
services:
|
services:
|
||||||
foundry:
|
foundry:
|
||||||
|
restart: always
|
||||||
image: cerc/foundry:local
|
image: cerc/foundry:local
|
||||||
command: ["while :; do sleep 600; done"]
|
command: ["while :; do sleep 600; done"]
|
||||||
volumes:
|
volumes:
|
||||||
|
|||||||
@@ -8,6 +8,6 @@ services:
|
|||||||
- ./ipfs/import:/import
|
- ./ipfs/import:/import
|
||||||
- ./ipfs/data:/data/ipfs
|
- ./ipfs/data:/data/ipfs
|
||||||
ports:
|
ports:
|
||||||
- "8080"
|
- "0.0.0.0:8080:8080"
|
||||||
- "4001"
|
- "0.0.0.0:4001:4001"
|
||||||
- "5001"
|
- "0.0.0.0:5001:5001"
|
||||||
|
|||||||
@@ -13,13 +13,10 @@ services:
|
|||||||
CERC_DEPLOYED_CONTRACT: ${CERC_DEPLOYED_CONTRACT}
|
CERC_DEPLOYED_CONTRACT: ${CERC_DEPLOYED_CONTRACT}
|
||||||
CERC_APP_WATCHER_URL: ${CERC_APP_WATCHER_URL}
|
CERC_APP_WATCHER_URL: ${CERC_APP_WATCHER_URL}
|
||||||
CERC_RELAY_NODES: ${CERC_RELAY_NODES}
|
CERC_RELAY_NODES: ${CERC_RELAY_NODES}
|
||||||
|
CERC_DENY_MULTIADDRS: ${CERC_DENY_MULTIADDRS}
|
||||||
|
CERC_BUILD_DIR: "@cerc-io/mobymask-ui/build"
|
||||||
working_dir: /scripts
|
working_dir: /scripts
|
||||||
# Waits for watcher server to be up before app build
|
command: ["sh", "mobymask-app-start.sh"]
|
||||||
# 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
|
|
||||||
volumes:
|
volumes:
|
||||||
- ../config/wait-for-it.sh:/scripts/wait-for-it.sh
|
- ../config/wait-for-it.sh:/scripts/wait-for-it.sh
|
||||||
- ../config/watcher-mobymask-v2/mobymask-app-start.sh:/scripts/mobymask-app-start.sh
|
- ../config/watcher-mobymask-v2/mobymask-app-start.sh:/scripts/mobymask-app-start.sh
|
||||||
@@ -28,12 +25,43 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- "0.0.0.0:3002:80"
|
- "0.0.0.0:3002:80"
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "nc", "-v", "localhost", "80"]
|
test: ["CMD", "nc", "-vz", "localhost", "80"]
|
||||||
|
interval: 20s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 15
|
||||||
|
start_period: 10s
|
||||||
|
extra_hosts:
|
||||||
|
- "host.docker.internal:host-gateway"
|
||||||
|
|
||||||
|
# Builds and serves the LXDAO version of MobyMask react-app
|
||||||
|
lxdao-mobymask-app:
|
||||||
|
restart: unless-stopped
|
||||||
|
image: cerc/mobymask-ui:local
|
||||||
|
env_file:
|
||||||
|
- ../config/watcher-mobymask-v2/mobymask-params.env
|
||||||
|
environment:
|
||||||
|
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||||
|
CERC_CHAIN_ID: ${CERC_CHAIN_ID}
|
||||||
|
CERC_DEPLOYED_CONTRACT: ${CERC_DEPLOYED_CONTRACT}
|
||||||
|
CERC_APP_WATCHER_URL: ${CERC_APP_WATCHER_URL}
|
||||||
|
CERC_RELAY_NODES: ${CERC_RELAY_NODES}
|
||||||
|
CERC_DENY_MULTIADDRS: ${CERC_DENY_MULTIADDRS}
|
||||||
|
CERC_BUILD_DIR: "@cerc-io/mobymask-ui-lxdao/build"
|
||||||
|
working_dir: /scripts
|
||||||
|
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
|
||||||
|
- peers_ids:/peers
|
||||||
|
- mobymask_deployment:/server
|
||||||
|
ports:
|
||||||
|
- "0.0.0.0:3004:80"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "nc", "-vz", "localhost", "80"]
|
||||||
interval: 20s
|
interval: 20s
|
||||||
timeout: 5s
|
timeout: 5s
|
||||||
retries: 15
|
retries: 15
|
||||||
start_period: 10s
|
start_period: 10s
|
||||||
shm_size: '1GB'
|
|
||||||
extra_hosts:
|
extra_hosts:
|
||||||
- "host.docker.internal:host-gateway"
|
- "host.docker.internal:host-gateway"
|
||||||
|
|
||||||
|
|||||||
@@ -10,10 +10,8 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||||
CERC_RELAY_NODES: ${CERC_RELAY_NODES}
|
CERC_RELAY_NODES: ${CERC_RELAY_NODES}
|
||||||
command:
|
CERC_DENY_MULTIADDRS: ${CERC_DENY_MULTIADDRS}
|
||||||
- sh
|
command: ["sh", "test-app-start.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
|
|
||||||
volumes:
|
volumes:
|
||||||
- ../config/wait-for-it.sh:/scripts/wait-for-it.sh
|
- ../config/wait-for-it.sh:/scripts/wait-for-it.sh
|
||||||
- ../config/watcher-mobymask-v2/test-app-start.sh:/scripts/test-app-start.sh
|
- ../config/watcher-mobymask-v2/test-app-start.sh:/scripts/test-app-start.sh
|
||||||
|
|||||||
@@ -1,7 +1,13 @@
|
|||||||
version: "3.2"
|
|
||||||
services:
|
services:
|
||||||
test:
|
test:
|
||||||
image: cerc/test-container:local
|
image: cerc/test-container:local
|
||||||
restart: always
|
restart: always
|
||||||
|
environment:
|
||||||
|
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||||
|
volumes:
|
||||||
|
- test-data:/var
|
||||||
ports:
|
ports:
|
||||||
- "80"
|
- "80"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
test-data:
|
||||||
|
|||||||
@@ -0,0 +1,304 @@
|
|||||||
|
version: '3.2'
|
||||||
|
|
||||||
|
services:
|
||||||
|
# Starts the PostgreSQL database for watchers
|
||||||
|
watcher-db:
|
||||||
|
restart: unless-stopped
|
||||||
|
image: postgres:14-alpine
|
||||||
|
environment:
|
||||||
|
- POSTGRES_USER=vdbm
|
||||||
|
- POSTGRES_MULTIPLE_DATABASES=azimuth-watcher,azimuth-watcher-job-queue,censures-watcher,censures-watcher-job-queue,claims-watcher,claims-watcher-job-queue,conditional-star-release-watcher,conditional-star-release-watcher-job-queue,delegated-sending-watcher,delegated-sending-watcher-job-queue,ecliptic-watcher,ecliptic-watcher-job-queue,linear-star-release-watcher,linear-star-release-watcher-job-queue,polls-watcher,polls-watcher-job-queue
|
||||||
|
- POSTGRES_EXTENSION=azimuth-watcher-job-queue:pgcrypto,censures-watcher-job-queue:pgcrypto,claims-watcher-job-queue:pgcrypto,conditional-star-release-watcher-job-queue:pgcrypto,delegated-sending-watcher-job-queue:pgcrypto,ecliptic-watcher-job-queue:pgcrypto,linear-star-release-watcher-job-queue:pgcrypto,polls-watcher-job-queue:pgcrypto,
|
||||||
|
- POSTGRES_PASSWORD=password
|
||||||
|
volumes:
|
||||||
|
- ../config/postgresql/multiple-postgressql-databases.sh:/docker-entrypoint-initdb.d/multiple-postgressql-databases.sh
|
||||||
|
- watcher_db_data:/var/lib/postgresql/data
|
||||||
|
ports:
|
||||||
|
- "0.0.0.0:15432:5432"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "nc", "-v", "localhost", "5432"]
|
||||||
|
interval: 20s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 15
|
||||||
|
start_period: 10s
|
||||||
|
|
||||||
|
# Starts the azimuth-watcher server
|
||||||
|
azimuth-watcher-server:
|
||||||
|
image: cerc/watcher-azimuth:local
|
||||||
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
watcher-db:
|
||||||
|
condition: service_healthy
|
||||||
|
env_file:
|
||||||
|
- ../config/watcher-azimuth/watcher-params.env
|
||||||
|
environment:
|
||||||
|
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||||
|
CERC_IPLD_ETH_RPC: ${CERC_IPLD_ETH_RPC}
|
||||||
|
CERC_IPLD_ETH_GQL: ${CERC_IPLD_ETH_GQL}
|
||||||
|
working_dir: /app/packages/azimuth-watcher
|
||||||
|
command: "./start-server.sh"
|
||||||
|
volumes:
|
||||||
|
- ../config/watcher-azimuth/watcher-config-template.toml:/app/packages/azimuth-watcher/environments/watcher-config-template.toml
|
||||||
|
- ../config/watcher-azimuth/merge-toml.js:/app/packages/azimuth-watcher/merge-toml.js
|
||||||
|
- ../config/watcher-azimuth/start-server.sh:/app/packages/azimuth-watcher/start-server.sh
|
||||||
|
ports:
|
||||||
|
- "3001"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "nc", "-vz", "localhost", "3001"]
|
||||||
|
interval: 20s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 15
|
||||||
|
start_period: 5s
|
||||||
|
extra_hosts:
|
||||||
|
- "host.docker.internal:host-gateway"
|
||||||
|
|
||||||
|
# Starts the censures-watcher server
|
||||||
|
censures-watcher-server:
|
||||||
|
image: cerc/watcher-azimuth:local
|
||||||
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
watcher-db:
|
||||||
|
condition: service_healthy
|
||||||
|
env_file:
|
||||||
|
- ../config/watcher-azimuth/watcher-params.env
|
||||||
|
environment:
|
||||||
|
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||||
|
CERC_IPLD_ETH_RPC: ${CERC_IPLD_ETH_RPC}
|
||||||
|
CERC_IPLD_ETH_GQL: ${CERC_IPLD_ETH_GQL}
|
||||||
|
working_dir: /app/packages/censures-watcher
|
||||||
|
command: "./start-server.sh"
|
||||||
|
volumes:
|
||||||
|
- ../config/watcher-azimuth/watcher-config-template.toml:/app/packages/censures-watcher/environments/watcher-config-template.toml
|
||||||
|
- ../config/watcher-azimuth/merge-toml.js:/app/packages/censures-watcher/merge-toml.js
|
||||||
|
- ../config/watcher-azimuth/start-server.sh:/app/packages/censures-watcher/start-server.sh
|
||||||
|
ports:
|
||||||
|
- "3002"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "nc", "-vz", "localhost", "3002"]
|
||||||
|
interval: 20s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 15
|
||||||
|
start_period: 5s
|
||||||
|
extra_hosts:
|
||||||
|
- "host.docker.internal:host-gateway"
|
||||||
|
|
||||||
|
# Starts the claims-watcher server
|
||||||
|
claims-watcher-server:
|
||||||
|
image: cerc/watcher-azimuth:local
|
||||||
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
watcher-db:
|
||||||
|
condition: service_healthy
|
||||||
|
env_file:
|
||||||
|
- ../config/watcher-azimuth/watcher-params.env
|
||||||
|
environment:
|
||||||
|
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||||
|
CERC_IPLD_ETH_RPC: ${CERC_IPLD_ETH_RPC}
|
||||||
|
CERC_IPLD_ETH_GQL: ${CERC_IPLD_ETH_GQL}
|
||||||
|
working_dir: /app/packages/claims-watcher
|
||||||
|
command: "./start-server.sh"
|
||||||
|
volumes:
|
||||||
|
- ../config/watcher-azimuth/watcher-config-template.toml:/app/packages/claims-watcher/environments/watcher-config-template.toml
|
||||||
|
- ../config/watcher-azimuth/merge-toml.js:/app/packages/claims-watcher/merge-toml.js
|
||||||
|
- ../config/watcher-azimuth/start-server.sh:/app/packages/claims-watcher/start-server.sh
|
||||||
|
ports:
|
||||||
|
- "3003"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "nc", "-vz", "localhost", "3003"]
|
||||||
|
interval: 20s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 15
|
||||||
|
start_period: 5s
|
||||||
|
extra_hosts:
|
||||||
|
- "host.docker.internal:host-gateway"
|
||||||
|
|
||||||
|
# Starts the conditional-star-release-watcher server
|
||||||
|
conditional-star-release-watcher-server:
|
||||||
|
image: cerc/watcher-azimuth:local
|
||||||
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
watcher-db:
|
||||||
|
condition: service_healthy
|
||||||
|
env_file:
|
||||||
|
- ../config/watcher-azimuth/watcher-params.env
|
||||||
|
environment:
|
||||||
|
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||||
|
CERC_IPLD_ETH_RPC: ${CERC_IPLD_ETH_RPC}
|
||||||
|
CERC_IPLD_ETH_GQL: ${CERC_IPLD_ETH_GQL}
|
||||||
|
working_dir: /app/packages/conditional-star-release-watcher
|
||||||
|
command: "./start-server.sh"
|
||||||
|
volumes:
|
||||||
|
- ../config/watcher-azimuth/watcher-config-template.toml:/app/packages/conditional-star-release-watcher/environments/watcher-config-template.toml
|
||||||
|
- ../config/watcher-azimuth/merge-toml.js:/app/packages/conditional-star-release-watcher/merge-toml.js
|
||||||
|
- ../config/watcher-azimuth/start-server.sh:/app/packages/conditional-star-release-watcher/start-server.sh
|
||||||
|
ports:
|
||||||
|
- "3004"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "nc", "-vz", "localhost", "3004"]
|
||||||
|
interval: 20s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 15
|
||||||
|
start_period: 5s
|
||||||
|
extra_hosts:
|
||||||
|
- "host.docker.internal:host-gateway"
|
||||||
|
|
||||||
|
# Starts the delegated-sending-watcher server
|
||||||
|
delegated-sending-watcher-server:
|
||||||
|
image: cerc/watcher-azimuth:local
|
||||||
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
watcher-db:
|
||||||
|
condition: service_healthy
|
||||||
|
env_file:
|
||||||
|
- ../config/watcher-azimuth/watcher-params.env
|
||||||
|
environment:
|
||||||
|
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||||
|
CERC_IPLD_ETH_RPC: ${CERC_IPLD_ETH_RPC}
|
||||||
|
CERC_IPLD_ETH_GQL: ${CERC_IPLD_ETH_GQL}
|
||||||
|
working_dir: /app/packages/delegated-sending-watcher
|
||||||
|
command: "./start-server.sh"
|
||||||
|
volumes:
|
||||||
|
- ../config/watcher-azimuth/watcher-config-template.toml:/app/packages/delegated-sending-watcher/environments/watcher-config-template.toml
|
||||||
|
- ../config/watcher-azimuth/merge-toml.js:/app/packages/delegated-sending-watcher/merge-toml.js
|
||||||
|
- ../config/watcher-azimuth/start-server.sh:/app/packages/delegated-sending-watcher/start-server.sh
|
||||||
|
ports:
|
||||||
|
- "3005"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "nc", "-vz", "localhost", "3005"]
|
||||||
|
interval: 20s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 15
|
||||||
|
start_period: 5s
|
||||||
|
extra_hosts:
|
||||||
|
- "host.docker.internal:host-gateway"
|
||||||
|
|
||||||
|
# Starts the ecliptic-watcher server
|
||||||
|
ecliptic-watcher-server:
|
||||||
|
image: cerc/watcher-azimuth:local
|
||||||
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
watcher-db:
|
||||||
|
condition: service_healthy
|
||||||
|
env_file:
|
||||||
|
- ../config/watcher-azimuth/watcher-params.env
|
||||||
|
environment:
|
||||||
|
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||||
|
CERC_IPLD_ETH_RPC: ${CERC_IPLD_ETH_RPC}
|
||||||
|
CERC_IPLD_ETH_GQL: ${CERC_IPLD_ETH_GQL}
|
||||||
|
working_dir: /app/packages/ecliptic-watcher
|
||||||
|
command: "./start-server.sh"
|
||||||
|
volumes:
|
||||||
|
- ../config/watcher-azimuth/watcher-config-template.toml:/app/packages/ecliptic-watcher/environments/watcher-config-template.toml
|
||||||
|
- ../config/watcher-azimuth/merge-toml.js:/app/packages/ecliptic-watcher/merge-toml.js
|
||||||
|
- ../config/watcher-azimuth/start-server.sh:/app/packages/ecliptic-watcher/start-server.sh
|
||||||
|
ports:
|
||||||
|
- "3006"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "nc", "-vz", "localhost", "3006"]
|
||||||
|
interval: 20s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 15
|
||||||
|
start_period: 5s
|
||||||
|
extra_hosts:
|
||||||
|
- "host.docker.internal:host-gateway"
|
||||||
|
|
||||||
|
# Starts the linear-star-release-watcher server
|
||||||
|
linear-star-release-watcher-server:
|
||||||
|
image: cerc/watcher-azimuth:local
|
||||||
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
watcher-db:
|
||||||
|
condition: service_healthy
|
||||||
|
env_file:
|
||||||
|
- ../config/watcher-azimuth/watcher-params.env
|
||||||
|
environment:
|
||||||
|
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||||
|
CERC_IPLD_ETH_RPC: ${CERC_IPLD_ETH_RPC}
|
||||||
|
CERC_IPLD_ETH_GQL: ${CERC_IPLD_ETH_GQL}
|
||||||
|
working_dir: /app/packages/linear-star-release-watcher
|
||||||
|
command: "./start-server.sh"
|
||||||
|
volumes:
|
||||||
|
- ../config/watcher-azimuth/watcher-config-template.toml:/app/packages/linear-star-release-watcher/environments/watcher-config-template.toml
|
||||||
|
- ../config/watcher-azimuth/merge-toml.js:/app/packages/linear-star-release-watcher/merge-toml.js
|
||||||
|
- ../config/watcher-azimuth/start-server.sh:/app/packages/linear-star-release-watcher/start-server.sh
|
||||||
|
ports:
|
||||||
|
- "3007"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "nc", "-vz", "localhost", "3007"]
|
||||||
|
interval: 20s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 15
|
||||||
|
start_period: 5s
|
||||||
|
extra_hosts:
|
||||||
|
- "host.docker.internal:host-gateway"
|
||||||
|
|
||||||
|
# Starts the polls-watcher server
|
||||||
|
polls-watcher-server:
|
||||||
|
image: cerc/watcher-azimuth:local
|
||||||
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
watcher-db:
|
||||||
|
condition: service_healthy
|
||||||
|
env_file:
|
||||||
|
- ../config/watcher-azimuth/watcher-params.env
|
||||||
|
environment:
|
||||||
|
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||||
|
CERC_IPLD_ETH_RPC: ${CERC_IPLD_ETH_RPC}
|
||||||
|
CERC_IPLD_ETH_GQL: ${CERC_IPLD_ETH_GQL}
|
||||||
|
working_dir: /app/packages/polls-watcher
|
||||||
|
command: "./start-server.sh"
|
||||||
|
volumes:
|
||||||
|
- ../config/watcher-azimuth/watcher-config-template.toml:/app/packages/polls-watcher/environments/watcher-config-template.toml
|
||||||
|
- ../config/watcher-azimuth/merge-toml.js:/app/packages/polls-watcher/merge-toml.js
|
||||||
|
- ../config/watcher-azimuth/start-server.sh:/app/packages/polls-watcher/start-server.sh
|
||||||
|
ports:
|
||||||
|
- "3008"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "nc", "-vz", "localhost", "3008"]
|
||||||
|
interval: 20s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 15
|
||||||
|
start_period: 5s
|
||||||
|
extra_hosts:
|
||||||
|
- "host.docker.internal:host-gateway"
|
||||||
|
|
||||||
|
# Starts the gateway-server for proxying queries
|
||||||
|
gateway-server:
|
||||||
|
image: cerc/watcher-azimuth:local
|
||||||
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
azimuth-watcher-server:
|
||||||
|
condition: service_healthy
|
||||||
|
censures-watcher-server:
|
||||||
|
condition: service_healthy
|
||||||
|
claims-watcher-server:
|
||||||
|
condition: service_healthy
|
||||||
|
conditional-star-release-watcher-server:
|
||||||
|
condition: service_healthy
|
||||||
|
delegated-sending-watcher-server:
|
||||||
|
condition: service_healthy
|
||||||
|
ecliptic-watcher-server:
|
||||||
|
condition: service_healthy
|
||||||
|
linear-star-release-watcher-server:
|
||||||
|
condition: service_healthy
|
||||||
|
polls-watcher-server:
|
||||||
|
condition: service_healthy
|
||||||
|
environment:
|
||||||
|
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||||
|
working_dir: /app/packages/gateway-server
|
||||||
|
command: "yarn server"
|
||||||
|
volumes:
|
||||||
|
- ../config/watcher-azimuth/gateway-watchers.json:/app/packages/gateway-server/dist/watchers.json
|
||||||
|
ports:
|
||||||
|
- "0.0.0.0:4000:4000"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "nc", "-vz", "localhost", "4000"]
|
||||||
|
interval: 20s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 15
|
||||||
|
start_period: 5s
|
||||||
|
extra_hosts:
|
||||||
|
- "host.docker.internal:host-gateway"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
watcher_db_data:
|
||||||
@@ -0,0 +1,91 @@
|
|||||||
|
version: '3.2'
|
||||||
|
|
||||||
|
services:
|
||||||
|
# Starts the PostgreSQL database for watcher
|
||||||
|
gelato-watcher-db:
|
||||||
|
restart: unless-stopped
|
||||||
|
image: postgres:14-alpine
|
||||||
|
environment:
|
||||||
|
- POSTGRES_USER=vdbm
|
||||||
|
- POSTGRES_MULTIPLE_DATABASES=gelato-watcher,gelato-watcher-job-queue
|
||||||
|
- POSTGRES_EXTENSION=gelato-watcher-job-queue:pgcrypto
|
||||||
|
- POSTGRES_PASSWORD=password
|
||||||
|
volumes:
|
||||||
|
- ../config/postgresql/multiple-postgressql-databases.sh:/docker-entrypoint-initdb.d/multiple-postgressql-databases.sh
|
||||||
|
- gelato_watcher_db_data:/var/lib/postgresql/data
|
||||||
|
ports:
|
||||||
|
- "0.0.0.0:15432:5432"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "nc", "-v", "localhost", "5432"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 15
|
||||||
|
start_period: 10s
|
||||||
|
|
||||||
|
# Starts the gelato-watcher job runner
|
||||||
|
gelato-watcher-job-runner:
|
||||||
|
image: cerc/watcher-gelato:local
|
||||||
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
gelato-watcher-db:
|
||||||
|
condition: service_healthy
|
||||||
|
env_file:
|
||||||
|
- ../config/watcher-gelato/watcher-params.env
|
||||||
|
environment:
|
||||||
|
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||||
|
CERC_IPLD_ETH_RPC: ${CERC_IPLD_ETH_RPC}
|
||||||
|
CERC_IPLD_ETH_GQL: ${CERC_IPLD_ETH_GQL}
|
||||||
|
command: ["./start-job-runner.sh"]
|
||||||
|
volumes:
|
||||||
|
- ../config/watcher-gelato/watcher-config-template.toml:/app/environments/watcher-config-template.toml
|
||||||
|
- ../config/watcher-gelato/start-job-runner.sh:/app/start-job-runner.sh
|
||||||
|
ports:
|
||||||
|
- "0.0.0.0:9000:9000"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "nc", "-v", "localhost", "9000"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 15
|
||||||
|
start_period: 10s
|
||||||
|
extra_hosts:
|
||||||
|
- "host.docker.internal:host-gateway"
|
||||||
|
|
||||||
|
# Starts the gelato-watcher server
|
||||||
|
gelato-watcher-server:
|
||||||
|
image: cerc/watcher-gelato:local
|
||||||
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
gelato-watcher-db:
|
||||||
|
condition: service_healthy
|
||||||
|
gelato-watcher-job-runner:
|
||||||
|
condition: service_healthy
|
||||||
|
env_file:
|
||||||
|
- ../config/watcher-gelato/watcher-params.env
|
||||||
|
environment:
|
||||||
|
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||||
|
CERC_IPLD_ETH_RPC: ${CERC_IPLD_ETH_RPC}
|
||||||
|
CERC_IPLD_ETH_GQL: ${CERC_IPLD_ETH_GQL}
|
||||||
|
CERC_USE_STATE_SNAPSHOT: ${CERC_USE_STATE_SNAPSHOT}
|
||||||
|
CERC_SNAPSHOT_GQL_ENDPOINT: ${CERC_SNAPSHOT_GQL_ENDPOINT}
|
||||||
|
CERC_SNAPSHOT_BLOCKHASH: ${CERC_SNAPSHOT_BLOCKHASH}
|
||||||
|
command: ["./start-server.sh"]
|
||||||
|
volumes:
|
||||||
|
- ../config/watcher-gelato/watcher-config-template.toml:/app/environments/watcher-config-template.toml
|
||||||
|
- ../config/watcher-gelato/start-server.sh:/app/start-server.sh
|
||||||
|
- ../config/watcher-gelato/create-and-import-checkpoint.sh:/app/create-and-import-checkpoint.sh
|
||||||
|
- gelato_watcher_state_gql:/app/state_checkpoint
|
||||||
|
ports:
|
||||||
|
- "0.0.0.0:3008:3008"
|
||||||
|
- "0.0.0.0:9001:9001"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "nc", "-v", "localhost", "3008"]
|
||||||
|
interval: 20s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 15
|
||||||
|
start_period: 5s
|
||||||
|
extra_hosts:
|
||||||
|
- "host.docker.internal:host-gateway"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
gelato_watcher_db_data:
|
||||||
|
gelato_watcher_state_gql:
|
||||||
@@ -34,23 +34,20 @@ services:
|
|||||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||||
ENV: "PROD"
|
ENV: "PROD"
|
||||||
CERC_L2_GETH_RPC: ${CERC_L2_GETH_RPC}
|
CERC_L2_GETH_RPC: ${CERC_L2_GETH_RPC}
|
||||||
|
CERC_L1_ACCOUNTS_CSV_URL: ${CERC_L1_ACCOUNTS_CSV_URL}
|
||||||
CERC_PRIVATE_KEY_DEPLOYER: ${CERC_PRIVATE_KEY_DEPLOYER}
|
CERC_PRIVATE_KEY_DEPLOYER: ${CERC_PRIVATE_KEY_DEPLOYER}
|
||||||
CERC_MOBYMASK_APP_BASE_URI: ${CERC_MOBYMASK_APP_BASE_URI}
|
CERC_MOBYMASK_APP_BASE_URI: ${CERC_MOBYMASK_APP_BASE_URI}
|
||||||
CERC_DEPLOYED_CONTRACT: ${CERC_DEPLOYED_CONTRACT}
|
CERC_DEPLOYED_CONTRACT: ${CERC_DEPLOYED_CONTRACT}
|
||||||
# Waits for L2 Optimism Geth and Node servers to be up before deploying contract
|
CERC_L2_GETH_HOST: ${CERC_L2_GETH_HOST}
|
||||||
command:
|
CERC_L2_GETH_PORT: ${CERC_L2_GETH_PORT}
|
||||||
- sh
|
CERC_L2_NODE_HOST: ${CERC_L2_NODE_HOST}
|
||||||
- -c
|
CERC_L2_NODE_PORT: ${CERC_L2_NODE_PORT}
|
||||||
- |
|
command: ["sh", "deploy-and-generate-invite.sh"]
|
||||||
./wait-for-it.sh -h ${CERC_L2_GETH_HOST:-$${DEFAULT_CERC_L2_GETH_HOST}} -p ${CERC_L2_GETH_PORT:-$${DEFAULT_CERC_L2_GETH_PORT}} -s -t 0 && \
|
|
||||||
./wait-for-it.sh -h ${CERC_L2_NODE_HOST:-$${DEFAULT_CERC_L2_NODE_HOST}} -p ${CERC_L2_NODE_PORT:-$${DEFAULT_CERC_L2_NODE_PORT}} -s -t 0 && \
|
|
||||||
./deploy-and-generate-invite.sh
|
|
||||||
volumes:
|
volumes:
|
||||||
- ../config/wait-for-it.sh:/app/packages/server/wait-for-it.sh
|
- ../config/wait-for-it.sh:/app/packages/server/wait-for-it.sh
|
||||||
- ../config/watcher-mobymask-v2/secrets-template.json:/app/packages/server/secrets-template.json
|
- ../config/watcher-mobymask-v2/secrets-template.json:/app/packages/server/secrets-template.json
|
||||||
- ../config/watcher-mobymask-v2/deploy-and-generate-invite.sh:/app/packages/server/deploy-and-generate-invite.sh
|
- ../config/watcher-mobymask-v2/deploy-and-generate-invite.sh:/app/packages/server/deploy-and-generate-invite.sh
|
||||||
- mobymask_deployment:/app/packages/server
|
- mobymask_deployment:/app/packages/server
|
||||||
- fixturenet_geth_accounts:/geth-accounts:ro
|
|
||||||
extra_hosts:
|
extra_hosts:
|
||||||
- "host.docker.internal:host-gateway"
|
- "host.docker.internal:host-gateway"
|
||||||
|
|
||||||
@@ -83,8 +80,10 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||||
CERC_L2_GETH_RPC: ${CERC_L2_GETH_RPC}
|
CERC_L2_GETH_RPC: ${CERC_L2_GETH_RPC}
|
||||||
|
CERC_L1_ACCOUNTS_CSV_URL: ${CERC_L1_ACCOUNTS_CSV_URL}
|
||||||
CERC_PRIVATE_KEY_PEER: ${CERC_PRIVATE_KEY_PEER}
|
CERC_PRIVATE_KEY_PEER: ${CERC_PRIVATE_KEY_PEER}
|
||||||
CERC_RELAY_PEERS: ${CERC_RELAY_PEERS}
|
CERC_RELAY_PEERS: ${CERC_RELAY_PEERS}
|
||||||
|
CERC_DENY_MULTIADDRS: ${CERC_DENY_MULTIADDRS}
|
||||||
CERC_RELAY_ANNOUNCE_DOMAIN: ${CERC_RELAY_ANNOUNCE_DOMAIN}
|
CERC_RELAY_ANNOUNCE_DOMAIN: ${CERC_RELAY_ANNOUNCE_DOMAIN}
|
||||||
CERC_ENABLE_PEER_L2_TXS: ${CERC_ENABLE_PEER_L2_TXS}
|
CERC_ENABLE_PEER_L2_TXS: ${CERC_ENABLE_PEER_L2_TXS}
|
||||||
CERC_DEPLOYED_CONTRACT: ${CERC_DEPLOYED_CONTRACT}
|
CERC_DEPLOYED_CONTRACT: ${CERC_DEPLOYED_CONTRACT}
|
||||||
@@ -94,7 +93,6 @@ services:
|
|||||||
- ../config/watcher-mobymask-v2/start-server.sh:/app/start-server.sh
|
- ../config/watcher-mobymask-v2/start-server.sh:/app/start-server.sh
|
||||||
- peers_ids:/app/peers
|
- peers_ids:/app/peers
|
||||||
- mobymask_deployment:/server
|
- mobymask_deployment:/server
|
||||||
- fixturenet_geth_accounts:/geth-accounts:ro
|
|
||||||
# Expose GQL, metrics and relay node ports
|
# Expose GQL, metrics and relay node ports
|
||||||
ports:
|
ports:
|
||||||
- "0.0.0.0:3001:3001"
|
- "0.0.0.0:3001:3001"
|
||||||
@@ -135,4 +133,3 @@ volumes:
|
|||||||
mobymask_watcher_db_data:
|
mobymask_watcher_db_data:
|
||||||
peers_ids:
|
peers_ids:
|
||||||
mobymask_deployment:
|
mobymask_deployment:
|
||||||
fixturenet_geth_accounts:
|
|
||||||
|
|||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
}+V�{iνΆΠΉ�²�¨ΣΗ\k»qς␍—?δΪAΒfκ’~μ©™LΉ�tb·yqτ·²ηξΔ�Ο?ξaΣ�J
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
Βfκ’~μ©™LΉ�tb·yqτ·²ηξΔ�Ο?ξaΣ�J
|
||||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
@@ -0,0 +1,71 @@
|
|||||||
|
{
|
||||||
|
"t01000": {
|
||||||
|
"ID": "t01000",
|
||||||
|
"Owner": "t3spusn5ia57qezc3fwpe3n2lhb4y4xt67xoflqbqy2muliparw2uktevletuv7gl4qakjpafgcl7jk2s2er3q",
|
||||||
|
"Worker": "t3spusn5ia57qezc3fwpe3n2lhb4y4xt67xoflqbqy2muliparw2uktevletuv7gl4qakjpafgcl7jk2s2er3q",
|
||||||
|
"PeerId": "12D3KooWG5q6pWJVdPBhDBv9AjWVbUh4xxTAZ7xvgZSjczWuD2Z9",
|
||||||
|
"MarketBalance": "0",
|
||||||
|
"PowerBalance": "0",
|
||||||
|
"SectorSize": 2048,
|
||||||
|
"Sectors": [
|
||||||
|
{
|
||||||
|
"CommR": {
|
||||||
|
"/": "bagboea4b5abcboxypcewlkmrat2myu4vthk3ii2pcomak7nhqmdbb6sxlolp2wdf"
|
||||||
|
},
|
||||||
|
"CommD": {
|
||||||
|
"/": "baga6ea4seaqn3jfixthmdgksv4vhfeuyvr6upw6tvaqbmzmsyxnzosm4pwgnmlq"
|
||||||
|
},
|
||||||
|
"SectorID": 0,
|
||||||
|
"Deal": {
|
||||||
|
"PieceCID": {
|
||||||
|
"/": "baga6ea4seaqn3jfixthmdgksv4vhfeuyvr6upw6tvaqbmzmsyxnzosm4pwgnmlq"
|
||||||
|
},
|
||||||
|
"PieceSize": 2048,
|
||||||
|
"VerifiedDeal": false,
|
||||||
|
"Client": "t3spusn5ia57qezc3fwpe3n2lhb4y4xt67xoflqbqy2muliparw2uktevletuv7gl4qakjpafgcl7jk2s2er3q",
|
||||||
|
"Provider": "t01000",
|
||||||
|
"Label": "0",
|
||||||
|
"StartEpoch": 0,
|
||||||
|
"EndEpoch": 9001,
|
||||||
|
"StoragePricePerEpoch": "0",
|
||||||
|
"ProviderCollateral": "0",
|
||||||
|
"ClientCollateral": "0"
|
||||||
|
},
|
||||||
|
"DealClientKey": {
|
||||||
|
"Type": "bls",
|
||||||
|
"PrivateKey": "tFvSRiSg2G3Ssgg0PSYy23XyjaIMXpsmdyG2B7UFLT4="
|
||||||
|
},
|
||||||
|
"ProofType": 5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"CommR": {
|
||||||
|
"/": "bagboea4b5abcb6krzypqcczhcnbeyjcqkeo6omfergm336o3kitugh3jgjog2yqq"
|
||||||
|
},
|
||||||
|
"CommD": {
|
||||||
|
"/": "baga6ea4seaqhondpb2373hjasjplxvbjzi5n5mm4fbbhjxp5ptnbq4cibapkeii"
|
||||||
|
},
|
||||||
|
"SectorID": 1,
|
||||||
|
"Deal": {
|
||||||
|
"PieceCID": {
|
||||||
|
"/": "baga6ea4seaqhondpb2373hjasjplxvbjzi5n5mm4fbbhjxp5ptnbq4cibapkeii"
|
||||||
|
},
|
||||||
|
"PieceSize": 2048,
|
||||||
|
"VerifiedDeal": false,
|
||||||
|
"Client": "t3spusn5ia57qezc3fwpe3n2lhb4y4xt67xoflqbqy2muliparw2uktevletuv7gl4qakjpafgcl7jk2s2er3q",
|
||||||
|
"Provider": "t01000",
|
||||||
|
"Label": "1",
|
||||||
|
"StartEpoch": 0,
|
||||||
|
"EndEpoch": 9001,
|
||||||
|
"StoragePricePerEpoch": "0",
|
||||||
|
"ProviderCollateral": "0",
|
||||||
|
"ClientCollateral": "0"
|
||||||
|
},
|
||||||
|
"DealClientKey": {
|
||||||
|
"Type": "bls",
|
||||||
|
"PrivateKey": "tFvSRiSg2G3Ssgg0PSYy23XyjaIMXpsmdyG2B7UFLT4="
|
||||||
|
},
|
||||||
|
"ProofType": 5
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
7b2254797065223a22626c73222c22507269766174654b6579223a227446765352695367324733537367673050535979323358796a61494d5870736d64794732423755464c54343d227d
|
||||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"ID": "f355523e-69d0-4984-bd0e-9588487c6231",
|
||||||
|
"Weight": 0,
|
||||||
|
"CanSeal": false,
|
||||||
|
"CanStore": false,
|
||||||
|
"MaxStorage": 0,
|
||||||
|
"Groups": null,
|
||||||
|
"AllowTo": null,
|
||||||
|
"AllowTypes": null,
|
||||||
|
"DenyTypes": null
|
||||||
|
}
|
||||||
Binary file not shown.
@@ -0,0 +1,108 @@
|
|||||||
|
{
|
||||||
|
"NetworkVersion": 18,
|
||||||
|
"Accounts": [
|
||||||
|
{
|
||||||
|
"Type": "account",
|
||||||
|
"Balance": "50000000000000000000000000",
|
||||||
|
"Meta": {
|
||||||
|
"Owner": "t3spusn5ia57qezc3fwpe3n2lhb4y4xt67xoflqbqy2muliparw2uktevletuv7gl4qakjpafgcl7jk2s2er3q"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"Miners": [
|
||||||
|
{
|
||||||
|
"ID": "t01000",
|
||||||
|
"Owner": "t3spusn5ia57qezc3fwpe3n2lhb4y4xt67xoflqbqy2muliparw2uktevletuv7gl4qakjpafgcl7jk2s2er3q",
|
||||||
|
"Worker": "t3spusn5ia57qezc3fwpe3n2lhb4y4xt67xoflqbqy2muliparw2uktevletuv7gl4qakjpafgcl7jk2s2er3q",
|
||||||
|
"PeerId": "12D3KooWG5q6pWJVdPBhDBv9AjWVbUh4xxTAZ7xvgZSjczWuD2Z9",
|
||||||
|
"MarketBalance": "0",
|
||||||
|
"PowerBalance": "0",
|
||||||
|
"SectorSize": 2048,
|
||||||
|
"Sectors": [
|
||||||
|
{
|
||||||
|
"CommR": {
|
||||||
|
"/": "bagboea4b5abcboxypcewlkmrat2myu4vthk3ii2pcomak7nhqmdbb6sxlolp2wdf"
|
||||||
|
},
|
||||||
|
"CommD": {
|
||||||
|
"/": "baga6ea4seaqn3jfixthmdgksv4vhfeuyvr6upw6tvaqbmzmsyxnzosm4pwgnmlq"
|
||||||
|
},
|
||||||
|
"SectorID": 0,
|
||||||
|
"Deal": {
|
||||||
|
"PieceCID": {
|
||||||
|
"/": "baga6ea4seaqn3jfixthmdgksv4vhfeuyvr6upw6tvaqbmzmsyxnzosm4pwgnmlq"
|
||||||
|
},
|
||||||
|
"PieceSize": 2048,
|
||||||
|
"VerifiedDeal": false,
|
||||||
|
"Client": "t3spusn5ia57qezc3fwpe3n2lhb4y4xt67xoflqbqy2muliparw2uktevletuv7gl4qakjpafgcl7jk2s2er3q",
|
||||||
|
"Provider": "t01000",
|
||||||
|
"Label": "0",
|
||||||
|
"StartEpoch": 0,
|
||||||
|
"EndEpoch": 9001,
|
||||||
|
"StoragePricePerEpoch": "0",
|
||||||
|
"ProviderCollateral": "0",
|
||||||
|
"ClientCollateral": "0"
|
||||||
|
},
|
||||||
|
"DealClientKey": {
|
||||||
|
"Type": "bls",
|
||||||
|
"PrivateKey": "tFvSRiSg2G3Ssgg0PSYy23XyjaIMXpsmdyG2B7UFLT4="
|
||||||
|
},
|
||||||
|
"ProofType": 5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"CommR": {
|
||||||
|
"/": "bagboea4b5abcb6krzypqcczhcnbeyjcqkeo6omfergm336o3kitugh3jgjog2yqq"
|
||||||
|
},
|
||||||
|
"CommD": {
|
||||||
|
"/": "baga6ea4seaqhondpb2373hjasjplxvbjzi5n5mm4fbbhjxp5ptnbq4cibapkeii"
|
||||||
|
},
|
||||||
|
"SectorID": 1,
|
||||||
|
"Deal": {
|
||||||
|
"PieceCID": {
|
||||||
|
"/": "baga6ea4seaqhondpb2373hjasjplxvbjzi5n5mm4fbbhjxp5ptnbq4cibapkeii"
|
||||||
|
},
|
||||||
|
"PieceSize": 2048,
|
||||||
|
"VerifiedDeal": false,
|
||||||
|
"Client": "t3spusn5ia57qezc3fwpe3n2lhb4y4xt67xoflqbqy2muliparw2uktevletuv7gl4qakjpafgcl7jk2s2er3q",
|
||||||
|
"Provider": "t01000",
|
||||||
|
"Label": "1",
|
||||||
|
"StartEpoch": 0,
|
||||||
|
"EndEpoch": 9001,
|
||||||
|
"StoragePricePerEpoch": "0",
|
||||||
|
"ProviderCollateral": "0",
|
||||||
|
"ClientCollateral": "0"
|
||||||
|
},
|
||||||
|
"DealClientKey": {
|
||||||
|
"Type": "bls",
|
||||||
|
"PrivateKey": "tFvSRiSg2G3Ssgg0PSYy23XyjaIMXpsmdyG2B7UFLT4="
|
||||||
|
},
|
||||||
|
"ProofType": 5
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"NetworkName": "localnet-6d52dae5-ff29-4bac-a45d-f84e6c07564c",
|
||||||
|
"VerifregRootKey": {
|
||||||
|
"Type": "multisig",
|
||||||
|
"Balance": "0",
|
||||||
|
"Meta": {
|
||||||
|
"Signers": [
|
||||||
|
"t1ceb34gnsc6qk5dt6n7xg6ycwzasjhbxm3iylkiy"
|
||||||
|
],
|
||||||
|
"Threshold": 1,
|
||||||
|
"VestingDuration": 0,
|
||||||
|
"VestingStart": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"RemainderAccount": {
|
||||||
|
"Type": "multisig",
|
||||||
|
"Balance": "0",
|
||||||
|
"Meta": {
|
||||||
|
"Signers": [
|
||||||
|
"t1ceb34gnsc6qk5dt6n7xg6ycwzasjhbxm3iylkiy"
|
||||||
|
],
|
||||||
|
"Threshold": 1,
|
||||||
|
"VestingDuration": 0,
|
||||||
|
"VestingStart": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
LOTUS_PATH=~/.lotus-local-net
|
||||||
|
LOTUS_MINER_PATH=~/.lotus-miner-local-net
|
||||||
|
LOTUS_SKIP_GENESIS_CHECK=_yes_
|
||||||
|
CGO_CFLAGS_ALLOW="-D__BLST_PORTABLE__"
|
||||||
|
CGO_CFLAGS="-D__BLST_PORTABLE__"
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
lotus --version
|
||||||
|
|
||||||
|
# # remove old bootnode peer info if present
|
||||||
|
# [ -f /root/.lotus-shared/miner.addr ] && rm /root/.lotus-shared/miner.addr
|
||||||
|
|
||||||
|
##TODO: generate genesis files inside container instead of bundling in config dir
|
||||||
|
##something like commands below should work, other scripts/compose will have to be updated to corresponding directories
|
||||||
|
# lotus fetch-params 2048
|
||||||
|
# lotus-seed pre-seal --sector-size 2KiB --num-sectors 2
|
||||||
|
# lotus-seed genesis new localnet.json
|
||||||
|
# lotus-seed genesis add-miner localnet.json ~/.genesis-sectors/pre-seal-t01000.json
|
||||||
|
|
||||||
|
|
||||||
|
# start daemon
|
||||||
|
nohup lotus daemon --genesis=/devgen.car --profile=bootstrapper --bootstrap=false > /var/log/lotus.log 2>&1 &
|
||||||
|
|
||||||
|
# Loop until the daemon is started
|
||||||
|
echo "Waiting for daemon to start..."
|
||||||
|
while ! grep -q "started ChainNotify channel" /var/log/lotus.log ; do
|
||||||
|
sleep 5
|
||||||
|
done
|
||||||
|
echo "Daemon started."
|
||||||
|
|
||||||
|
# publish bootnode peer info to shared volume
|
||||||
|
lotus net listen | awk 'NR==1{print}' > /root/.lotus-shared/miner.addr
|
||||||
|
|
||||||
|
# if miner not already initialized
|
||||||
|
if [ ! -d /root/.lotus-miner-local-net ]; then
|
||||||
|
# initialize miner
|
||||||
|
lotus wallet import --as-default ~/.genesis-sectors/pre-seal-t01000.key
|
||||||
|
lotus-miner init --genesis-miner --actor=t01000 --sector-size=2KiB --pre-sealed-sectors=~/.genesis-sectors --pre-sealed-metadata=~/.genesis-sectors/pre-seal-t01000.json --nosync
|
||||||
|
fi
|
||||||
|
|
||||||
|
# start miner
|
||||||
|
nohup lotus-miner run --nosync &
|
||||||
|
|
||||||
|
tail -f /dev/null
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
lotus --version
|
||||||
|
|
||||||
|
##TODO: paths can use values from lotus-env.env file
|
||||||
|
|
||||||
|
# if not already initialized
|
||||||
|
if [ ! -f /root/.lotus-local-net/config.toml ]; then
|
||||||
|
# init node config
|
||||||
|
mkdir $HOME/.lotus-local-net
|
||||||
|
lotus config default > $HOME/.lotus-local-net/config.toml
|
||||||
|
|
||||||
|
# add bootstrap peer info if available
|
||||||
|
if [ -f /root/.lotus-shared/miner.addr ]; then
|
||||||
|
MINER_ADDR=\"$(cat /root/.lotus-shared/miner.addr)\"
|
||||||
|
# add bootstrap peer id to config file
|
||||||
|
sed -i "/^\[Libp2p\]/a \ \ BootstrapPeers = [$MINER_ADDR]" $HOME/.lotus-local-net/config.toml
|
||||||
|
else
|
||||||
|
echo "Bootstrap peer info not found, unable to configure. Manual peering will be required."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# start node
|
||||||
|
lotus daemon --genesis=/devgen.car
|
||||||
@@ -6,9 +6,7 @@ DEFAULT_CERC_L1_RPC="http://fixturenet-eth-geth-1:8545"
|
|||||||
DEFAULT_CERC_L1_HOST="fixturenet-eth-geth-1"
|
DEFAULT_CERC_L1_HOST="fixturenet-eth-geth-1"
|
||||||
DEFAULT_CERC_L1_PORT=8545
|
DEFAULT_CERC_L1_PORT=8545
|
||||||
|
|
||||||
# Credentials for accounts on L1 to send balance to Optimism Proxy contract from
|
# URL to get CSV with credentials for accounts on L1
|
||||||
|
# that are used to send balance to Optimism Proxy contract
|
||||||
# (enables them to do transactions on L2)
|
# (enables them to do transactions on L2)
|
||||||
DEFAULT_CERC_L1_ADDRESS=
|
DEFAULT_CERC_L1_ACCOUNTS_CSV_URL="http://fixturenet-eth-bootnode-geth:9898/accounts.csv"
|
||||||
DEFAULT_CERC_L1_PRIV_KEY=
|
|
||||||
DEFAULT_CERC_L1_ADDRESS_2=
|
|
||||||
DEFAULT_CERC_L1_PRIV_KEY_2=
|
|
||||||
|
|||||||
@@ -7,10 +7,7 @@ fi
|
|||||||
CERC_L1_CHAIN_ID="${CERC_L1_CHAIN_ID:-${DEFAULT_CERC_L1_CHAIN_ID}}"
|
CERC_L1_CHAIN_ID="${CERC_L1_CHAIN_ID:-${DEFAULT_CERC_L1_CHAIN_ID}}"
|
||||||
CERC_L1_RPC="${CERC_L1_RPC:-${DEFAULT_CERC_L1_RPC}}"
|
CERC_L1_RPC="${CERC_L1_RPC:-${DEFAULT_CERC_L1_RPC}}"
|
||||||
|
|
||||||
CERC_L1_ADDRESS="${CERC_L1_ADDRESS:-${DEFAULT_CERC_L1_ADDRESS}}"
|
CERC_L1_ACCOUNTS_CSV_URL="${CERC_L1_ACCOUNTS_CSV_URL:-${DEFAULT_CERC_L1_ACCOUNTS_CSV_URL}}"
|
||||||
CERC_L1_PRIV_KEY="${CERC_L1_PRIV_KEY:-${DEFAULT_CERC_L1_PRIV_KEY}}"
|
|
||||||
CERC_L1_ADDRESS_2="${CERC_L1_ADDRESS_2:-${DEFAULT_CERC_L1_ADDRESS_2}}"
|
|
||||||
CERC_L1_PRIV_KEY_2="${CERC_L1_PRIV_KEY_2:-${DEFAULT_CERC_L1_PRIV_KEY_2}}"
|
|
||||||
|
|
||||||
echo "Using L1 RPC endpoint ${CERC_L1_RPC}"
|
echo "Using L1 RPC endpoint ${CERC_L1_RPC}"
|
||||||
|
|
||||||
@@ -62,17 +59,30 @@ PROPOSER_ADDRESS=$(echo "$KEYS_JSON" | jq -r '.Proposer.address')
|
|||||||
BATCHER_ADDRESS=$(echo "$KEYS_JSON" | jq -r '.Batcher.address')
|
BATCHER_ADDRESS=$(echo "$KEYS_JSON" | jq -r '.Batcher.address')
|
||||||
SEQUENCER_ADDRESS=$(echo "$KEYS_JSON" | jq -r '.Sequencer.address')
|
SEQUENCER_ADDRESS=$(echo "$KEYS_JSON" | jq -r '.Sequencer.address')
|
||||||
|
|
||||||
# Read the private key of L1 accounts
|
# Get the private keys of L1 accounts
|
||||||
if [ -f /geth-accounts/accounts.csv ]; then
|
if [ -n "$CERC_L1_ACCOUNTS_CSV_URL" ] && \
|
||||||
echo "Using L1 account credentials from the mounted volume"
|
l1_accounts_response=$(curl -L --write-out '%{http_code}' --silent --output /dev/null "$CERC_L1_ACCOUNTS_CSV_URL") && \
|
||||||
|
[ "$l1_accounts_response" -eq 200 ];
|
||||||
|
then
|
||||||
|
echo "Fetching L1 account credentials using provided URL"
|
||||||
|
mkdir -p /geth-accounts
|
||||||
|
wget -O /geth-accounts/accounts.csv "$CERC_L1_ACCOUNTS_CSV_URL"
|
||||||
|
|
||||||
CERC_L1_ADDRESS=$(head -n 1 /geth-accounts/accounts.csv | cut -d ',' -f 2)
|
CERC_L1_ADDRESS=$(head -n 1 /geth-accounts/accounts.csv | cut -d ',' -f 2)
|
||||||
CERC_L1_PRIV_KEY=$(head -n 1 /geth-accounts/accounts.csv | cut -d ',' -f 3)
|
CERC_L1_PRIV_KEY=$(head -n 1 /geth-accounts/accounts.csv | cut -d ',' -f 3)
|
||||||
CERC_L1_ADDRESS_2=$(awk -F, 'NR==2{print $(NF-1)}' /geth-accounts/accounts.csv)
|
CERC_L1_ADDRESS_2=$(awk -F, 'NR==2{print $(NF-1)}' /geth-accounts/accounts.csv)
|
||||||
CERC_L1_PRIV_KEY_2=$(awk -F, 'NR==2{print $NF}' /geth-accounts/accounts.csv)
|
CERC_L1_PRIV_KEY_2=$(awk -F, 'NR==2{print $NF}' /geth-accounts/accounts.csv)
|
||||||
else
|
else
|
||||||
echo "Using L1 account credentials from env"
|
echo "Couldn't fetch L1 account credentials, using them from env"
|
||||||
fi
|
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
|
# Select a finalized L1 block as the starting point for roll ups
|
||||||
until FINALIZED_BLOCK=$(cast block finalized --rpc-url "$CERC_L1_RPC"); do
|
until FINALIZED_BLOCK=$(cast block finalized --rpc-url "$CERC_L1_RPC"); do
|
||||||
echo "Waiting for a finalized L1 block to exist, retrying after 10s"
|
echo "Waiting for a finalized L1 block to exist, retrying after 10s"
|
||||||
@@ -85,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"
|
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
|
# Update the deployment config
|
||||||
sed -i 's/"l2OutputOracleStartingTimestamp": TIMESTAMP/"l2OutputOracleStartingTimestamp": '"$L1_BLOCKTIMESTAMP"'/g' deploy-config/getting-started.json
|
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
|
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
|
||||||
@@ -107,7 +110,7 @@ echo "PRIVATE_KEY_DEPLOYER=$ADMIN_PRIV_KEY" >> .env
|
|||||||
echo "Deploying the L1 smart contracts, this will take a while..."
|
echo "Deploying the L1 smart contracts, this will take a while..."
|
||||||
|
|
||||||
# Deploy the L1 smart contracts
|
# 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"
|
echo "Deployed the L1 smart contracts"
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ fi
|
|||||||
|
|
||||||
CERC_L1_RPC="${CERC_L1_RPC:-${DEFAULT_CERC_L1_RPC}}"
|
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 '"')
|
BATCHER_KEY=$(jq -r '.Batcher.privateKey' /l2-accounts/keys.json | tr -d '"')
|
||||||
|
|
||||||
cleanup() {
|
cleanup() {
|
||||||
@@ -18,6 +18,7 @@ cleanup() {
|
|||||||
}
|
}
|
||||||
trap 'cleanup' INT TERM
|
trap 'cleanup' INT TERM
|
||||||
|
|
||||||
|
# Run op-batcher
|
||||||
op-batcher \
|
op-batcher \
|
||||||
--l2-eth-rpc=http://op-geth:8545 \
|
--l2-eth-rpc=http://op-geth:8545 \
|
||||||
--rollup-rpc=http://op-node:8547 \
|
--rollup-rpc=http://op-node:8547 \
|
||||||
@@ -30,7 +31,6 @@ op-batcher \
|
|||||||
--rpc.port=8548 \
|
--rpc.port=8548 \
|
||||||
--rpc.enable-admin \
|
--rpc.enable-admin \
|
||||||
--max-channel-duration=1 \
|
--max-channel-duration=1 \
|
||||||
--target-l1-tx-size-bytes=2048 \
|
|
||||||
--l1-eth-rpc=$CERC_L1_RPC \
|
--l1-eth-rpc=$CERC_L1_RPC \
|
||||||
--private-key=$BATCHER_KEY \
|
--private-key=$BATCHER_KEY \
|
||||||
&
|
&
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ fi
|
|||||||
echo "Installing jq"
|
echo "Installing jq"
|
||||||
apk update && apk add 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 '"')
|
SEQUENCER_KEY=$(jq -r '.Sequencer.privateKey' /l2-accounts/keys.json | tr -d '"')
|
||||||
|
|
||||||
# Initialize op-geth if datadir/geth not found
|
# Initialize op-geth if datadir/geth not found
|
||||||
@@ -70,7 +70,7 @@ geth \
|
|||||||
--ws.origins="*" \
|
--ws.origins="*" \
|
||||||
--ws.api=debug,eth,txpool,net,engine \
|
--ws.api=debug,eth,txpool,net,engine \
|
||||||
--syncmode=full \
|
--syncmode=full \
|
||||||
--gcmode=full \
|
--gcmode=archive \
|
||||||
--nodiscover \
|
--nodiscover \
|
||||||
--maxpeers=0 \
|
--maxpeers=0 \
|
||||||
--networkid=42069 \
|
--networkid=42069 \
|
||||||
|
|||||||
@@ -6,9 +6,10 @@ fi
|
|||||||
|
|
||||||
CERC_L1_RPC="${CERC_L1_RPC:-${DEFAULT_CERC_L1_RPC}}"
|
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 '"')
|
SEQUENCER_KEY=$(jq -r '.Sequencer.privateKey' /l2-accounts/keys.json | tr -d '"')
|
||||||
|
|
||||||
|
# Run op-node
|
||||||
op-node \
|
op-node \
|
||||||
--l2=http://op-geth:8551 \
|
--l2=http://op-geth:8551 \
|
||||||
--l2.jwt-secret=/op-node-data/jwt.txt \
|
--l2.jwt-secret=/op-node-data/jwt.txt \
|
||||||
|
|||||||
+36
@@ -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
|
||||||
+18
@@ -0,0 +1,18 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"id": "0001",
|
||||||
|
"url": "http://127.0.0.1:8081/",
|
||||||
|
"basic_auth": {
|
||||||
|
"username": "",
|
||||||
|
"password": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "0021",
|
||||||
|
"url": "http://fixturenet-eth-geth-1:8545/",
|
||||||
|
"basic_auth": {
|
||||||
|
"username": "",
|
||||||
|
"password": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# TODO: we should have a mechanism to bundle it inside the container rather than link from here
|
||||||
|
# at deploy time.
|
||||||
|
|
||||||
|
CHAINID="pocketlocal-1"
|
||||||
|
MONIKER="localtestnet"
|
||||||
|
SERVICE_URL="http://127.0.0.1:8081"
|
||||||
|
PASSWORD="mypassword" # wallet password, required by cli
|
||||||
|
|
||||||
|
# check if jq is installed; install if necessary
|
||||||
|
# command -v jq > /dev/null 2>&1 || { echo >&2 "jq not installed. More info: https://stedolan.github.io/jq/download/"; exit 1; }
|
||||||
|
if ! command -v jq > /dev/null 2>&1; then
|
||||||
|
echo "jq not installed, downloading..."
|
||||||
|
mkdir -p /home/app/bin
|
||||||
|
wget -O /home/app/bin/jq https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64
|
||||||
|
chmod +x /home/app/bin/jq
|
||||||
|
export PATH=$PATH:/home/app/bin
|
||||||
|
fi
|
||||||
|
|
||||||
|
# remove existing daemon and client
|
||||||
|
rm -rf ~/.pocket*
|
||||||
|
|
||||||
|
# create a wallet with password "mypassword" and save the address for later
|
||||||
|
address=$(pocket accounts create --pwd $PASSWORD | awk '/Address:/ {print $2}')
|
||||||
|
|
||||||
|
# set this address as the validator address for the node
|
||||||
|
pocket accounts set-validator $address --pwd $PASSWORD
|
||||||
|
|
||||||
|
# save the public key for later
|
||||||
|
pubkey=$(pocket accounts show $address | awk '/Public Key:/ {print $3}')
|
||||||
|
|
||||||
|
# set node's moniker
|
||||||
|
echo $(pocket util print-configs) | jq '.tendermint_config.Moniker = "'"$MONIKER"'"' | jq . > $HOME/.pocket/config/config.json
|
||||||
|
|
||||||
|
# pocket mainnet has block time of 15 minutes, set closer to 1 minute instead
|
||||||
|
cat $HOME/.pocket/config/config.json | jq '.tendermint_config.Consensus.TimeoutPropose = 8000000000' | jq . > $HOME/.pocket/config/tmp_config.json && mv $HOME/.pocket/config/tmp_config.json $HOME/.pocket/config/config.json
|
||||||
|
cat $HOME/.pocket/config/config.json | jq '.tendermint_config.Consensus.TimeoutProposeDelta = 600000000' | jq . > $HOME/.pocket/config/tmp_config.json && mv $HOME/.pocket/config/tmp_config.json $HOME/.pocket/config/config.json
|
||||||
|
cat $HOME/.pocket/config/config.json | jq '.tendermint_config.Consensus.TimeoutPrevote = 4000000000' | jq . > $HOME/.pocket/config/tmp_config.json && mv $HOME/.pocket/config/tmp_config.json $HOME/.pocket/config/config.json
|
||||||
|
cat $HOME/.pocket/config/config.json | jq '.tendermint_config.Consensus.TimeoutPrevoteDelta = 600000000' | jq . > $HOME/.pocket/config/tmp_config.json && mv $HOME/.pocket/config/tmp_config.json $HOME/.pocket/config/config.json
|
||||||
|
cat $HOME/.pocket/config/config.json | jq '.tendermint_config.Consensus.TimeoutPrecommit = 4000000000' | jq . > $HOME/.pocket/config/tmp_config.json && mv $HOME/.pocket/config/tmp_config.json $HOME/.pocket/config/config.json
|
||||||
|
cat $HOME/.pocket/config/config.json | jq '.tendermint_config.Consensus.TimeoutPrecommitDelta = 6000000006' | jq . > $HOME/.pocket/config/tmp_config.json && mv $HOME/.pocket/config/tmp_config.json $HOME/.pocket/config/config.json
|
||||||
|
cat $HOME/.pocket/config/config.json | jq '.tendermint_config.Consensus.TimeoutCommit = 52000000000' | jq . > $HOME/.pocket/config/tmp_config.json && mv $HOME/.pocket/config/tmp_config.json $HOME/.pocket/config/config.json
|
||||||
|
cat $HOME/.pocket/config/config.json | jq '.tendermint_config.Consensus.CreateEmptyBlocksInterval = 60000000000' | jq . > $HOME/.pocket/config/tmp_config.json && mv $HOME/.pocket/config/tmp_config.json $HOME/.pocket/config/config.json
|
||||||
|
cat $HOME/.pocket/config/config.json | jq '.tendermint_config.Consensus.PeerGossipSleepDuration = 2000000000' | jq . > $HOME/.pocket/config/tmp_config.json && mv $HOME/.pocket/config/tmp_config.json $HOME/.pocket/config/config.json
|
||||||
|
cat $HOME/.pocket/config/config.json | jq '.tendermint_config.Consensus.PeerQueryMaj23SleepDuration = 1200000000' | jq . > $HOME/.pocket/config/tmp_config.json && mv $HOME/.pocket/config/tmp_config.json $HOME/.pocket/config/config.json
|
||||||
|
|
||||||
|
# include genesis.json and chains.json
|
||||||
|
cp $HOME/pocket-configs/genesis.json $HOME/.pocket/config/genesis.json
|
||||||
|
cp $HOME/pocket-configs/chains.json $HOME/.pocket/config/chains.json
|
||||||
|
|
||||||
|
# set chain-id and add node to genesis.json as a validator
|
||||||
|
cat $HOME/.pocket/config/genesis.json | jq '.chain_id="'"$CHAINID"'"' > $HOME/.pocket/config/tmp_genesis.json && mv $HOME/.pocket/config/tmp_genesis.json $HOME/.pocket/config/genesis.json
|
||||||
|
cat $HOME/.pocket/config/genesis.json | jq '.app_state.auth.accounts[0].value.address="'"$address"'"' > $HOME/.pocket/config/tmp_genesis.json && mv $HOME/.pocket/config/tmp_genesis.json $HOME/.pocket/config/genesis.json
|
||||||
|
cat $HOME/.pocket/config/genesis.json | jq '.app_state.auth.accounts[0].value.public_key.value="'"$pubkey"'"' > $HOME/.pocket/config/tmp_genesis.json && mv $HOME/.pocket/config/tmp_genesis.json $HOME/.pocket/config/genesis.json
|
||||||
|
cat $HOME/.pocket/config/genesis.json | jq '.app_state.pos.validators[0].address="'"$address"'"' > $HOME/.pocket/config/tmp_genesis.json && mv $HOME/.pocket/config/tmp_genesis.json $HOME/.pocket/config/genesis.json
|
||||||
|
cat $HOME/.pocket/config/genesis.json | jq '.app_state.pos.validators[0].public_key="'"$pubkey"'"' > $HOME/.pocket/config/tmp_genesis.json && mv $HOME/.pocket/config/tmp_genesis.json $HOME/.pocket/config/genesis.json
|
||||||
|
cat $HOME/.pocket/config/genesis.json | jq '.app_state.pos.validators[0].service_url="'"$SERVICE_URL"'"' > $HOME/.pocket/config/tmp_genesis.json && mv $HOME/.pocket/config/tmp_genesis.json $HOME/.pocket/config/genesis.json
|
||||||
|
|
||||||
|
# if [[ $1 == "pending" ]]; then
|
||||||
|
# echo "pending mode is on, please wait for the first block committed."
|
||||||
|
# fi
|
||||||
|
|
||||||
|
# Start the node
|
||||||
|
pocket start --simulateRelay
|
||||||
@@ -0,0 +1,272 @@
|
|||||||
|
{
|
||||||
|
"genesis_time": "2020-07-28T15:00:00.000000Z",
|
||||||
|
"chain_id": "testnet",
|
||||||
|
"consensus_params": {
|
||||||
|
"block": {
|
||||||
|
"max_bytes": "4000000",
|
||||||
|
"max_gas": "-1",
|
||||||
|
"time_iota_ms": "1"
|
||||||
|
},
|
||||||
|
"evidence": {
|
||||||
|
"max_age": "120000000000"
|
||||||
|
},
|
||||||
|
"validator": {
|
||||||
|
"pub_key_types": [
|
||||||
|
"ed25519"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"app_hash": "",
|
||||||
|
"app_state": {
|
||||||
|
"application": {
|
||||||
|
"params": {
|
||||||
|
"unstaking_time": "1814000000000000",
|
||||||
|
"max_applications": "9223372036854775807",
|
||||||
|
"app_stake_minimum": "1000000",
|
||||||
|
"base_relays_per_pokt": "167",
|
||||||
|
"stability_adjustment": "0",
|
||||||
|
"participation_rate_on": false,
|
||||||
|
"maximum_chains": "15"
|
||||||
|
},
|
||||||
|
"applications": [],
|
||||||
|
"exported": false
|
||||||
|
},
|
||||||
|
"auth": {
|
||||||
|
"params": {
|
||||||
|
"max_memo_characters": "75",
|
||||||
|
"tx_sig_limit": "8",
|
||||||
|
"fee_multipliers": {
|
||||||
|
"fee_multiplier": [],
|
||||||
|
"default": "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"accounts": [
|
||||||
|
{
|
||||||
|
"type": "posmint/Account",
|
||||||
|
"value": {
|
||||||
|
"address": "!validator-address",
|
||||||
|
"coins": [
|
||||||
|
{
|
||||||
|
"amount": "0",
|
||||||
|
"denom": "upokt"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"public_key": {
|
||||||
|
"type": "crypto/ed25519_public_key",
|
||||||
|
"value": "!validator-pubkey"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"supply": []
|
||||||
|
},
|
||||||
|
"gov": {
|
||||||
|
"params": {
|
||||||
|
"acl": [
|
||||||
|
{
|
||||||
|
"acl_key": "application/ApplicationStakeMinimum",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "application/AppUnstakingTime",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "application/BaseRelaysPerPOKT",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "application/MaxApplications",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "application/MaximumChains",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "application/ParticipationRateOn",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "application/StabilityAdjustment",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "auth/MaxMemoCharacters",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "auth/TxSigLimit",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "gov/acl",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "gov/daoOwner",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "gov/upgrade",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "pocketcore/ClaimExpiration",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "auth/FeeMultipliers",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "pocketcore/ReplayAttackBurnMultiplier",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "pos/ProposerPercentage",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "pocketcore/ClaimSubmissionWindow",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "pocketcore/MinimumNumberOfProofs",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "pocketcore/SessionNodeCount",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "pocketcore/SupportedBlockchains",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "pos/BlocksPerSession",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "pos/DAOAllocation",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "pos/DowntimeJailDuration",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "pos/MaxEvidenceAge",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "pos/MaximumChains",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "pos/MaxJailedBlocks",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "pos/MaxValidators",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "pos/MinSignedPerWindow",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "pos/RelaysToTokensMultiplier",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "pos/SignedBlocksWindow",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "pos/SlashFractionDoubleSign",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "pos/SlashFractionDowntime",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "pos/StakeDenom",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "pos/StakeMinimum",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"acl_key": "pos/UnstakingTime",
|
||||||
|
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"dao_owner": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4",
|
||||||
|
"upgrade": {
|
||||||
|
"Height": "0",
|
||||||
|
"Version": "0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"DAO_Tokens": "50000000000000"
|
||||||
|
},
|
||||||
|
"pos": {
|
||||||
|
"params": {
|
||||||
|
"relays_to_tokens_multiplier": "10000",
|
||||||
|
"unstaking_time": "1814000000000000",
|
||||||
|
"max_validators": "5000",
|
||||||
|
"stake_denom": "upokt",
|
||||||
|
"stake_minimum": "15000000000",
|
||||||
|
"session_block_frequency": "4",
|
||||||
|
"dao_allocation": "10",
|
||||||
|
"proposer_allocation": "1",
|
||||||
|
"maximum_chains": "15",
|
||||||
|
"max_jailed_blocks": "37960",
|
||||||
|
"max_evidence_age": "120000000000",
|
||||||
|
"signed_blocks_window": "10",
|
||||||
|
"min_signed_per_window": "0.60",
|
||||||
|
"downtime_jail_duration": "3600000000000",
|
||||||
|
"slash_fraction_double_sign": "0.05",
|
||||||
|
"slash_fraction_downtime": "0.000001"
|
||||||
|
},
|
||||||
|
"prevState_total_power": "0",
|
||||||
|
"prevState_validator_powers": null,
|
||||||
|
"validators": [
|
||||||
|
{
|
||||||
|
"address": "!validator-address",
|
||||||
|
"public_key": "!validator-pubkey",
|
||||||
|
"jailed": false,
|
||||||
|
"status": 2,
|
||||||
|
"tokens": "5000000000000",
|
||||||
|
"service_url": "!validator-url",
|
||||||
|
"chains": [
|
||||||
|
"0001",
|
||||||
|
"0021"
|
||||||
|
],
|
||||||
|
"unstaking_time": "2021-05-15T00:00:00Z"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"exported": false,
|
||||||
|
"signing_infos": {},
|
||||||
|
"missed_blocks": {},
|
||||||
|
"previous_proposer": ""
|
||||||
|
},
|
||||||
|
"pocketcore": {
|
||||||
|
"params": {
|
||||||
|
"session_node_count": "5",
|
||||||
|
"proof_waiting_period": "3",
|
||||||
|
"supported_blockchains": [
|
||||||
|
"0001",
|
||||||
|
"0021"
|
||||||
|
],
|
||||||
|
"claim_expiration": "120",
|
||||||
|
"replay_attack_burn_multiplier": "3",
|
||||||
|
"minimum_number_of_proofs": "10"
|
||||||
|
},
|
||||||
|
"receipts": null,
|
||||||
|
"claims": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"endpoint": "http://azimuth-watcher-server:3001/graphql",
|
||||||
|
"prefix": "azimuth"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": "http://censures-watcher-server:3002/graphql",
|
||||||
|
"prefix": "censures"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": "http://claims-watcher-server:3003/graphql",
|
||||||
|
"prefix": "claims"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": "http://conditional-star-release-watcher-server:3004/graphql",
|
||||||
|
"prefix": "conditionalStarRelease"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": "http://delegated-sending-watcher-server:3005/graphql",
|
||||||
|
"prefix": "delegatedSending"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": "http://ecliptic-watcher-server:3006/graphql",
|
||||||
|
"prefix": "ecliptic"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": "http://linear-star-release-watcher-server:3007/graphql",
|
||||||
|
"prefix": "linearStarRelease"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"endpoint": "http://polls-watcher-server:3008/graphql",
|
||||||
|
"prefix": "polls"
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
const fs = require('fs');
|
||||||
|
const tomlJS = require('toml-js');
|
||||||
|
const toml = require('toml');
|
||||||
|
const { merge } = require('lodash')
|
||||||
|
|
||||||
|
const main = () => {
|
||||||
|
const overrideConfigString = fs.readFileSync('environments/watcher-config.toml', 'utf-8');
|
||||||
|
const configString = fs.readFileSync('environments/local.toml', 'utf-8');
|
||||||
|
const overrideConfig = toml.parse(overrideConfigString)
|
||||||
|
const config = toml.parse(configString)
|
||||||
|
|
||||||
|
// Merge configs
|
||||||
|
const updatedConfig = merge(config, overrideConfig);
|
||||||
|
|
||||||
|
// Form dbConnectionString for jobQueue DB
|
||||||
|
const parts = config.jobQueue.dbConnectionString.split("://");
|
||||||
|
const credsAndDB = parts[1].split("@");
|
||||||
|
const creds = credsAndDB[0].split(":");
|
||||||
|
creds[0] = overrideConfig.database.username;
|
||||||
|
creds[1] = overrideConfig.database.password;
|
||||||
|
credsAndDB[0] = creds.join(":");
|
||||||
|
const dbName = credsAndDB[1].split("/")[1]
|
||||||
|
credsAndDB[1] = [overrideConfig.database.host, dbName].join("/");
|
||||||
|
parts[1] = credsAndDB.join("@");
|
||||||
|
|
||||||
|
updatedConfig.jobQueue.dbConnectionString = parts.join("://");
|
||||||
|
|
||||||
|
fs.writeFileSync('environments/local.toml', tomlJS.dump(updatedConfig), 'utf-8');
|
||||||
|
}
|
||||||
|
|
||||||
|
main();
|
||||||
+27
@@ -0,0 +1,27 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -e
|
||||||
|
if [ -n "$CERC_SCRIPT_DEBUG" ]; then
|
||||||
|
set -x
|
||||||
|
fi
|
||||||
|
|
||||||
|
CERC_IPLD_ETH_RPC="${CERC_IPLD_ETH_RPC:-${DEFAULT_CERC_IPLD_ETH_RPC}}"
|
||||||
|
CERC_IPLD_ETH_GQL="${CERC_IPLD_ETH_GQL:-${DEFAULT_CERC_IPLD_ETH_GQL}}"
|
||||||
|
|
||||||
|
echo "Using IPLD ETH RPC endpoint ${CERC_IPLD_ETH_RPC}"
|
||||||
|
echo "Using IPLD GQL endpoint ${CERC_IPLD_ETH_GQL}"
|
||||||
|
|
||||||
|
# Replace env variables in template TOML file
|
||||||
|
# Read in the config template TOML file and modify it
|
||||||
|
WATCHER_CONFIG_TEMPLATE=$(cat environments/watcher-config-template.toml)
|
||||||
|
WATCHER_CONFIG=$(echo "$WATCHER_CONFIG_TEMPLATE" | \
|
||||||
|
sed -E "s|REPLACE_WITH_CERC_IPLD_ETH_RPC|${CERC_IPLD_ETH_RPC}|g; \
|
||||||
|
s|REPLACE_WITH_CERC_IPLD_ETH_GQL|${CERC_IPLD_ETH_GQL}| ")
|
||||||
|
|
||||||
|
# Write the modified content to a new file
|
||||||
|
echo "$WATCHER_CONFIG" > environments/watcher-config.toml
|
||||||
|
|
||||||
|
# Merge SO watcher config with existing config file
|
||||||
|
node merge-toml.js
|
||||||
|
|
||||||
|
echo 'yarn server'
|
||||||
|
yarn server
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
[server]
|
||||||
|
host = "0.0.0.0"
|
||||||
|
maxSimultaneousRequests = -1
|
||||||
|
|
||||||
|
[database]
|
||||||
|
host = "watcher-db"
|
||||||
|
port = 5432
|
||||||
|
username = "vdbm"
|
||||||
|
password = "password"
|
||||||
|
|
||||||
|
[upstream]
|
||||||
|
[upstream.ethServer]
|
||||||
|
gqlApiEndpoint = "REPLACE_WITH_CERC_IPLD_ETH_GQL"
|
||||||
|
rpcProviderEndpoint = "REPLACE_WITH_CERC_IPLD_ETH_RPC"
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
# Defaults
|
||||||
|
|
||||||
|
# ipld-eth-server endpoints
|
||||||
|
DEFAULT_CERC_IPLD_ETH_RPC=
|
||||||
|
DEFAULT_CERC_IPLD_ETH_GQL=
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
if [ -n "$CERC_SCRIPT_DEBUG" ]; then
|
||||||
|
set -x
|
||||||
|
fi
|
||||||
|
|
||||||
|
CERC_SNAPSHOT_GQL_ENDPOINT="${CERC_SNAPSHOT_GQL_ENDPOINT:-${DEFAULT_CERC_SNAPSHOT_GQL_ENDPOINT}}"
|
||||||
|
CERC_SNAPSHOT_BLOCKHASH="${CERC_SNAPSHOT_BLOCKHASH:-${DEFAULT_CERC_SNAPSHOT_BLOCKHASH}}"
|
||||||
|
|
||||||
|
CHECKPOINT_FILE_PATH="./state_checkpoint/state-gql-${CERC_SNAPSHOT_BLOCKHASH}"
|
||||||
|
|
||||||
|
if [ -f "${CHECKPOINT_FILE_PATH}" ]; then
|
||||||
|
# Skip checkpoint creation if the file already exists
|
||||||
|
echo "File at ${CHECKPOINT_FILE_PATH} already exists, skipping checkpoint creation..."
|
||||||
|
else
|
||||||
|
# Create a checkpoint using GQL endpoint
|
||||||
|
echo "Creating a state checkpoint using GQL endpoint..."
|
||||||
|
yarn create-state-gql \
|
||||||
|
--snapshot-block-hash "${CERC_SNAPSHOT_BLOCKHASH}" \
|
||||||
|
--gql-endpoint "${CERC_SNAPSHOT_GQL_ENDPOINT}" \
|
||||||
|
--output "${CHECKPOINT_FILE_PATH}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Initializing watcher using a state snapshot..."
|
||||||
|
|
||||||
|
# Import the state checkpoint
|
||||||
|
# (skips if snapshot block is already indexed)
|
||||||
|
yarn import-state --import-file "${CHECKPOINT_FILE_PATH}"
|
||||||
+23
@@ -0,0 +1,23 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
if [ -n "$CERC_SCRIPT_DEBUG" ]; then
|
||||||
|
set -x
|
||||||
|
fi
|
||||||
|
|
||||||
|
CERC_IPLD_ETH_RPC="${CERC_IPLD_ETH_RPC:-${DEFAULT_CERC_IPLD_ETH_RPC}}"
|
||||||
|
CERC_IPLD_ETH_GQL="${CERC_IPLD_ETH_GQL:-${DEFAULT_CERC_IPLD_ETH_GQL}}"
|
||||||
|
|
||||||
|
echo "Using ETH server RPC endpoint ${CERC_IPLD_ETH_RPC}"
|
||||||
|
echo "Using ETH server GQL endpoint ${CERC_IPLD_ETH_GQL}"
|
||||||
|
|
||||||
|
# Read in the config template TOML file and modify it
|
||||||
|
WATCHER_CONFIG_TEMPLATE=$(cat environments/watcher-config-template.toml)
|
||||||
|
WATCHER_CONFIG=$(echo "$WATCHER_CONFIG_TEMPLATE" | \
|
||||||
|
sed -E "s|REPLACE_WITH_CERC_IPLD_ETH_GQL|${CERC_IPLD_ETH_GQL}|g; \
|
||||||
|
s|REPLACE_WITH_CERC_IPLD_ETH_RPC|${CERC_IPLD_ETH_RPC}| ")
|
||||||
|
|
||||||
|
# Write the modified content to a new file
|
||||||
|
echo "$WATCHER_CONFIG" > environments/local.toml
|
||||||
|
|
||||||
|
echo "Running job-runner"
|
||||||
|
DEBUG=vulcanize:* exec node --enable-source-maps dist/job-runner.js
|
||||||
+32
@@ -0,0 +1,32 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
if [ -n "$CERC_SCRIPT_DEBUG" ]; then
|
||||||
|
set -x
|
||||||
|
fi
|
||||||
|
|
||||||
|
CERC_IPLD_ETH_RPC="${CERC_IPLD_ETH_RPC:-${DEFAULT_CERC_IPLD_ETH_RPC}}"
|
||||||
|
CERC_IPLD_ETH_GQL="${CERC_IPLD_ETH_GQL:-${DEFAULT_CERC_IPLD_ETH_GQL}}"
|
||||||
|
|
||||||
|
CERC_USE_STATE_SNAPSHOT="${CERC_USE_STATE_SNAPSHOT:-${DEFAULT_CERC_USE_STATE_SNAPSHOT}}"
|
||||||
|
|
||||||
|
echo "Using ETH server RPC endpoint ${CERC_IPLD_ETH_RPC}"
|
||||||
|
echo "Using ETH server GQL endpoint ${CERC_IPLD_ETH_GQL}"
|
||||||
|
|
||||||
|
# Read in the config template TOML file and modify it
|
||||||
|
WATCHER_CONFIG_TEMPLATE=$(cat environments/watcher-config-template.toml)
|
||||||
|
WATCHER_CONFIG=$(echo "$WATCHER_CONFIG_TEMPLATE" | \
|
||||||
|
sed -E "s|REPLACE_WITH_CERC_IPLD_ETH_GQL|${CERC_IPLD_ETH_GQL}|g; \
|
||||||
|
s|REPLACE_WITH_CERC_IPLD_ETH_RPC|${CERC_IPLD_ETH_RPC}| ")
|
||||||
|
|
||||||
|
# Write the modified content to a new file
|
||||||
|
echo "$WATCHER_CONFIG" > environments/local.toml
|
||||||
|
|
||||||
|
if [ "$CERC_USE_STATE_SNAPSHOT" = true ] ; then
|
||||||
|
./create-and-import-checkpoint.sh
|
||||||
|
else
|
||||||
|
echo "Initializing watcher using fill..."
|
||||||
|
yarn fill --start-block $DEFAULT_CERC_GELATO_START_BLOCK --end-block $DEFAULT_CERC_GELATO_START_BLOCK
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Running active server"
|
||||||
|
DEBUG=vulcanize:* exec node --enable-source-maps dist/server.js
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
[server]
|
||||||
|
host = "0.0.0.0"
|
||||||
|
port = 3008
|
||||||
|
kind = "active"
|
||||||
|
|
||||||
|
# Checkpointing state.
|
||||||
|
checkpointing = true
|
||||||
|
|
||||||
|
# Checkpoint interval in number of blocks.
|
||||||
|
checkpointInterval = 2000
|
||||||
|
|
||||||
|
# Enable state creation
|
||||||
|
# CAUTION: Disable only if state creation is not desired or can be filled subsequently
|
||||||
|
enableState = true
|
||||||
|
|
||||||
|
subgraphPath = "./subgraph"
|
||||||
|
|
||||||
|
# Interval to restart wasm instance periodically
|
||||||
|
wasmRestartBlocksInterval = 20
|
||||||
|
|
||||||
|
# Interval in number of blocks at which to clear entities cache.
|
||||||
|
clearEntitiesCacheInterval = 1000
|
||||||
|
|
||||||
|
# Boolean to filter logs by contract.
|
||||||
|
filterLogs = true
|
||||||
|
|
||||||
|
# Max block range for which to return events in eventsInRange GQL query.
|
||||||
|
# Use -1 for skipping check on block range.
|
||||||
|
maxEventsBlockRange = 1000
|
||||||
|
|
||||||
|
# GQL cache settings
|
||||||
|
[server.gqlCache]
|
||||||
|
enabled = true
|
||||||
|
|
||||||
|
# Max in-memory cache size (in bytes) (default 8 MB)
|
||||||
|
# maxCacheSize
|
||||||
|
|
||||||
|
# GQL cache-control max-age settings (in seconds)
|
||||||
|
maxAge = 15
|
||||||
|
timeTravelMaxAge = 86400 # 1 day
|
||||||
|
|
||||||
|
[metrics]
|
||||||
|
host = "0.0.0.0"
|
||||||
|
port = 9000
|
||||||
|
[metrics.gql]
|
||||||
|
port = 9001
|
||||||
|
|
||||||
|
[database]
|
||||||
|
type = "postgres"
|
||||||
|
host = "gelato-watcher-db"
|
||||||
|
port = 5432
|
||||||
|
database = "gelato-watcher"
|
||||||
|
username = "vdbm"
|
||||||
|
password = "password"
|
||||||
|
synchronize = true
|
||||||
|
logging = false
|
||||||
|
|
||||||
|
[upstream]
|
||||||
|
[upstream.ethServer]
|
||||||
|
gqlApiEndpoint = "REPLACE_WITH_CERC_IPLD_ETH_GQL"
|
||||||
|
rpcProviderEndpoint = "REPLACE_WITH_CERC_IPLD_ETH_RPC"
|
||||||
|
|
||||||
|
[upstream.cache]
|
||||||
|
name = "requests"
|
||||||
|
enabled = false
|
||||||
|
deleteOnStart = false
|
||||||
|
|
||||||
|
[jobQueue]
|
||||||
|
dbConnectionString = "postgres://vdbm:password@gelato-watcher-db/gelato-watcher-job-queue"
|
||||||
|
maxCompletionLagInSecs = 300
|
||||||
|
jobDelayInMilliSecs = 100
|
||||||
|
eventsInBatch = 50
|
||||||
|
blockDelayInMilliSecs = 2000
|
||||||
|
prefetchBlocksInMem = true
|
||||||
|
prefetchBlockCount = 10
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
# ipld-eth-server endpoints
|
||||||
|
DEFAULT_CERC_IPLD_ETH_RPC="http://ipld-eth-server:8082"
|
||||||
|
DEFAULT_CERC_IPLD_ETH_GQL="http://ipld-eth-server:8083/graphql"
|
||||||
|
|
||||||
|
# Gelato start block
|
||||||
|
DEFAULT_CERC_GELATO_START_BLOCK=11361987
|
||||||
|
|
||||||
|
# Whether to use a state snapshot to initialize the watcher
|
||||||
|
DEFAULT_CERC_USE_STATE_SNAPSHOT=false
|
||||||
|
|
||||||
|
# State snapshot params
|
||||||
|
DEFAULT_CERC_SNAPSHOT_GQL_ENDPOINT=
|
||||||
|
DEFAULT_CERC_SNAPSHOT_BLOCKHASH=
|
||||||
@@ -5,19 +5,32 @@ if [ -n "$CERC_SCRIPT_DEBUG" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
CERC_L2_GETH_RPC="${CERC_L2_GETH_RPC:-${DEFAULT_CERC_L2_GETH_RPC}}"
|
CERC_L2_GETH_RPC="${CERC_L2_GETH_RPC:-${DEFAULT_CERC_L2_GETH_RPC}}"
|
||||||
CERC_PRIVATE_KEY_DEPLOYER="${CERC_PRIVATE_KEY_DEPLOYER:-${DEFAULT_CERC_PRIVATE_KEY_DEPLOYER}}"
|
CERC_L1_ACCOUNTS_CSV_URL="${CERC_L1_ACCOUNTS_CSV_URL:-${DEFAULT_CERC_L1_ACCOUNTS_CSV_URL}}"
|
||||||
|
|
||||||
CERC_MOBYMASK_APP_BASE_URI="${CERC_MOBYMASK_APP_BASE_URI:-${DEFAULT_CERC_MOBYMASK_APP_BASE_URI}}"
|
CERC_MOBYMASK_APP_BASE_URI="${CERC_MOBYMASK_APP_BASE_URI:-${DEFAULT_CERC_MOBYMASK_APP_BASE_URI}}"
|
||||||
CERC_DEPLOYED_CONTRACT="${CERC_DEPLOYED_CONTRACT:-${DEFAULT_CERC_DEPLOYED_CONTRACT}}"
|
CERC_DEPLOYED_CONTRACT="${CERC_DEPLOYED_CONTRACT:-${DEFAULT_CERC_DEPLOYED_CONTRACT}}"
|
||||||
|
|
||||||
|
# Check if CERC_DEPLOYED_CONTRACT environment variable set to skip contract deployment
|
||||||
|
if [ -n "$CERC_DEPLOYED_CONTRACT" ]; then
|
||||||
|
echo "CERC_DEPLOYED_CONTRACT is set to '$CERC_DEPLOYED_CONTRACT'"
|
||||||
|
echo "Skipping contract deployment"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
echo "Using L2 RPC endpoint ${CERC_L2_GETH_RPC}"
|
echo "Using L2 RPC endpoint ${CERC_L2_GETH_RPC}"
|
||||||
|
|
||||||
if [ -f /geth-accounts/accounts.csv ]; then
|
if [ -n "$CERC_L1_ACCOUNTS_CSV_URL" ] && \
|
||||||
echo "Using L1 private key from the mounted volume"
|
l1_accounts_response=$(curl -L --write-out '%{http_code}' --silent --output /dev/null "$CERC_L1_ACCOUNTS_CSV_URL") && \
|
||||||
# Read the private key of L1 account to deploy contract
|
[ "$l1_accounts_response" -eq 200 ];
|
||||||
|
then
|
||||||
|
echo "Fetching L1 account credentials using provided URL"
|
||||||
|
mkdir -p /geth-accounts
|
||||||
|
wget -O /geth-accounts/accounts.csv "$CERC_L1_ACCOUNTS_CSV_URL"
|
||||||
|
|
||||||
|
# Read the private key of an L1 account to deploy contract
|
||||||
CERC_PRIVATE_KEY_DEPLOYER=$(head -n 1 /geth-accounts/accounts.csv | cut -d ',' -f 3)
|
CERC_PRIVATE_KEY_DEPLOYER=$(head -n 1 /geth-accounts/accounts.csv | cut -d ',' -f 3)
|
||||||
else
|
else
|
||||||
echo "Using CERC_PRIVATE_KEY_DEPLOYER from env"
|
echo "Couldn't fetch L1 account credentials, using CERC_PRIVATE_KEY_DEPLOYER from env"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Set the private key
|
# Set the private key
|
||||||
@@ -29,14 +42,15 @@ jq --arg rpcUrl "$CERC_L2_GETH_RPC" '.rpcUrl = $rpcUrl' secrets.json > secrets_u
|
|||||||
# Set the MobyMask app base URI
|
# Set the MobyMask app base URI
|
||||||
jq --arg baseURI "$CERC_MOBYMASK_APP_BASE_URI" '.baseURI = $baseURI' secrets.json > secrets_updated.json && mv secrets_updated.json secrets.json
|
jq --arg baseURI "$CERC_MOBYMASK_APP_BASE_URI" '.baseURI = $baseURI' secrets.json > secrets_updated.json && mv secrets_updated.json secrets.json
|
||||||
|
|
||||||
export RPC_URL="${CERC_L2_GETH_RPC}"
|
# Wait for L2 Optimism Geth and Node servers to be up before deploying contract
|
||||||
|
CERC_L2_GETH_HOST="${CERC_L2_GETH_HOST:-${DEFAULT_CERC_L2_GETH_HOST}}"
|
||||||
|
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_NODE_HOST}" -p "${CERC_L2_NODE_PORT}" -s -t 0
|
||||||
|
|
||||||
# Check if CERC_DEPLOYED_CONTRACT environment variable set to skip contract deployment
|
export RPC_URL="${CERC_L2_GETH_RPC}"
|
||||||
if [ -n "$CERC_DEPLOYED_CONTRACT" ]; then
|
|
||||||
echo "CERC_DEPLOYED_CONTRACT is set to '$CERC_DEPLOYED_CONTRACT'"
|
|
||||||
echo "Exiting without deploying contract"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check and exit if a deployment already exists (on restarts)
|
# Check and exit if a deployment already exists (on restarts)
|
||||||
if [ -f ./config.json ]; then
|
if [ -f ./config.json ]; then
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ fi
|
|||||||
CERC_CHAIN_ID="${CERC_CHAIN_ID:-${DEFAULT_CERC_CHAIN_ID}}"
|
CERC_CHAIN_ID="${CERC_CHAIN_ID:-${DEFAULT_CERC_CHAIN_ID}}"
|
||||||
CERC_DEPLOYED_CONTRACT="${CERC_DEPLOYED_CONTRACT:-${DEFAULT_CERC_DEPLOYED_CONTRACT}}"
|
CERC_DEPLOYED_CONTRACT="${CERC_DEPLOYED_CONTRACT:-${DEFAULT_CERC_DEPLOYED_CONTRACT}}"
|
||||||
CERC_RELAY_NODES="${CERC_RELAY_NODES:-${DEFAULT_CERC_RELAY_NODES}}"
|
CERC_RELAY_NODES="${CERC_RELAY_NODES:-${DEFAULT_CERC_RELAY_NODES}}"
|
||||||
|
CERC_DENY_MULTIADDRS="${CERC_DENY_MULTIADDRS:-${DEFAULT_CERC_DENY_MULTIADDRS}}"
|
||||||
CERC_APP_WATCHER_URL="${CERC_APP_WATCHER_URL:-${DEFAULT_CERC_APP_WATCHER_URL}}"
|
CERC_APP_WATCHER_URL="${CERC_APP_WATCHER_URL:-${DEFAULT_CERC_APP_WATCHER_URL}}"
|
||||||
|
|
||||||
# If not set (or []), check the mounted volume for relay peer id
|
# If not set (or []), check the mounted volume for relay peer id
|
||||||
@@ -17,9 +18,13 @@ fi
|
|||||||
|
|
||||||
echo "Using CERC_RELAY_NODES $CERC_RELAY_NODES"
|
echo "Using CERC_RELAY_NODES $CERC_RELAY_NODES"
|
||||||
|
|
||||||
# Use config from mounted volume if available (when running web-app along with watcher stack)
|
if [ -z "$CERC_DEPLOYED_CONTRACT" ]; then
|
||||||
if [ -f /server/config.json ]; then
|
# Use config from mounted volume (when running web-app along with watcher stack)
|
||||||
echo "Taking config for deployed contract from mounted volume"
|
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
|
# Get deployed contract address and chain id
|
||||||
CERC_DEPLOYED_CONTRACT=$(jq -r '.address' /server/config.json | tr -d '"')
|
CERC_DEPLOYED_CONTRACT=$(jq -r '.address' /server/config.json | tr -d '"')
|
||||||
@@ -33,5 +38,6 @@ yq -n ".address = env(CERC_DEPLOYED_CONTRACT)" > /config/config.yml
|
|||||||
yq ".watcherUrl = env(CERC_APP_WATCHER_URL)" -i /config/config.yml
|
yq ".watcherUrl = env(CERC_APP_WATCHER_URL)" -i /config/config.yml
|
||||||
yq ".chainId = env(CERC_CHAIN_ID)" -i /config/config.yml
|
yq ".chainId = env(CERC_CHAIN_ID)" -i /config/config.yml
|
||||||
yq ".relayNodes = strenv(CERC_RELAY_NODES)" -i /config/config.yml
|
yq ".relayNodes = strenv(CERC_RELAY_NODES)" -i /config/config.yml
|
||||||
|
yq ".denyMultiaddrs = strenv(CERC_DENY_MULTIADDRS)" -i /config/config.yml
|
||||||
|
|
||||||
/scripts/start-serving-app.sh
|
/scripts/start-serving-app.sh
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
# Defaults
|
# Defaults
|
||||||
|
|
||||||
# Watcher endpoint
|
# Watcher endpoint
|
||||||
DEFAULT_CERC_WATCHER_HOST="mobymask-watcher-server"
|
|
||||||
DEFAULT_CERC_WATCHER_PORT=3001
|
|
||||||
DEFAULT_CERC_APP_WATCHER_URL="http://localhost:3001"
|
DEFAULT_CERC_APP_WATCHER_URL="http://localhost:3001"
|
||||||
|
|
||||||
# Set of relay peers to connect to from the relay node
|
# Set of relay peers to connect to from the relay node
|
||||||
@@ -26,3 +24,6 @@ DEFAULT_CERC_CHAIN_ID=42069
|
|||||||
|
|
||||||
# Set of relay nodes to be used by web-apps
|
# Set of relay nodes to be used by web-apps
|
||||||
DEFAULT_CERC_RELAY_NODES=[]
|
DEFAULT_CERC_RELAY_NODES=[]
|
||||||
|
|
||||||
|
# Set of multiaddrs to be avoided while dialling
|
||||||
|
DEFAULT_CERC_DENY_MULTIADDRS=[]
|
||||||
|
|||||||
@@ -2,12 +2,13 @@
|
|||||||
|
|
||||||
# L2 endpoints
|
# L2 endpoints
|
||||||
DEFAULT_CERC_L2_GETH_RPC="http://op-geth:8545"
|
DEFAULT_CERC_L2_GETH_RPC="http://op-geth:8545"
|
||||||
|
|
||||||
|
# Endpoints waited on before contract deployment
|
||||||
DEFAULT_CERC_L2_GETH_HOST="op-geth"
|
DEFAULT_CERC_L2_GETH_HOST="op-geth"
|
||||||
DEFAULT_CERC_L2_GETH_PORT=8545
|
DEFAULT_CERC_L2_GETH_PORT=8545
|
||||||
|
|
||||||
DEFAULT_CERC_L2_NODE_HOST="op-node"
|
DEFAULT_CERC_L2_NODE_HOST="op-node"
|
||||||
DEFAULT_CERC_L2_NODE_PORT=8547
|
DEFAULT_CERC_L2_NODE_PORT=8547
|
||||||
|
|
||||||
# Credentials for accounts to perform txs on L2
|
# URL to get CSV with credentials for accounts on L1 to perform txs on L2
|
||||||
DEFAULT_CERC_PRIVATE_KEY_DEPLOYER=
|
DEFAULT_CERC_L1_ACCOUNTS_CSV_URL="http://fixturenet-eth-bootnode-geth:9898/accounts.csv"
|
||||||
DEFAULT_CERC_PRIVATE_KEY_PEER=
|
|
||||||
|
|||||||
@@ -5,16 +5,23 @@ if [ -n "$CERC_SCRIPT_DEBUG" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
CERC_L2_GETH_RPC="${CERC_L2_GETH_RPC:-${DEFAULT_CERC_L2_GETH_RPC}}"
|
CERC_L2_GETH_RPC="${CERC_L2_GETH_RPC:-${DEFAULT_CERC_L2_GETH_RPC}}"
|
||||||
CERC_PRIVATE_KEY_PEER="${CERC_PRIVATE_KEY_PEER:-${DEFAULT_CERC_PRIVATE_KEY_PEER}}"
|
CERC_L1_ACCOUNTS_CSV_URL="${CERC_L1_ACCOUNTS_CSV_URL:-${DEFAULT_CERC_L1_ACCOUNTS_CSV_URL}}"
|
||||||
|
|
||||||
CERC_RELAY_PEERS="${CERC_RELAY_PEERS:-${DEFAULT_CERC_RELAY_PEERS}}"
|
CERC_RELAY_PEERS="${CERC_RELAY_PEERS:-${DEFAULT_CERC_RELAY_PEERS}}"
|
||||||
|
CERC_DENY_MULTIADDRS="${CERC_DENY_MULTIADDRS:-${DEFAULT_CERC_DENY_MULTIADDRS}}"
|
||||||
CERC_RELAY_ANNOUNCE_DOMAIN="${CERC_RELAY_ANNOUNCE_DOMAIN:-${DEFAULT_CERC_RELAY_ANNOUNCE_DOMAIN}}"
|
CERC_RELAY_ANNOUNCE_DOMAIN="${CERC_RELAY_ANNOUNCE_DOMAIN:-${DEFAULT_CERC_RELAY_ANNOUNCE_DOMAIN}}"
|
||||||
CERC_ENABLE_PEER_L2_TXS="${CERC_ENABLE_PEER_L2_TXS:-${DEFAULT_CERC_ENABLE_PEER_L2_TXS}}"
|
CERC_ENABLE_PEER_L2_TXS="${CERC_ENABLE_PEER_L2_TXS:-${DEFAULT_CERC_ENABLE_PEER_L2_TXS}}"
|
||||||
CERC_DEPLOYED_CONTRACT="${CERC_DEPLOYED_CONTRACT:-${DEFAULT_CERC_DEPLOYED_CONTRACT}}"
|
CERC_DEPLOYED_CONTRACT="${CERC_DEPLOYED_CONTRACT:-${DEFAULT_CERC_DEPLOYED_CONTRACT}}"
|
||||||
|
|
||||||
echo "Using L2 RPC endpoint ${CERC_L2_GETH_RPC}"
|
echo "Using L2 RPC endpoint ${CERC_L2_GETH_RPC}"
|
||||||
|
|
||||||
CERC_RELAY_MULTIADDR="/dns4/mobymask-watcher-server/tcp/9090/ws/p2p/$(jq -r '.id' /app/peers/relay-id.json)"
|
# Use public domain for relay multiaddr in peer config if specified
|
||||||
|
# Otherwise, use the docker container's host IP
|
||||||
|
if [ -n "$CERC_RELAY_ANNOUNCE_DOMAIN" ]; then
|
||||||
|
CERC_RELAY_MULTIADDR="/dns4/${CERC_RELAY_ANNOUNCE_DOMAIN}/tcp/443/wss/p2p/$(jq -r '.id' /app/peers/relay-id.json)"
|
||||||
|
else
|
||||||
|
CERC_RELAY_MULTIADDR="/dns4/mobymask-watcher-server/tcp/9090/ws/p2p/$(jq -r '.id' /app/peers/relay-id.json)"
|
||||||
|
fi
|
||||||
|
|
||||||
# Use contract address from environment variable or set from config.json in mounted volume
|
# Use contract address from environment variable or set from config.json in mounted volume
|
||||||
if [ -n "$CERC_DEPLOYED_CONTRACT" ]; then
|
if [ -n "$CERC_DEPLOYED_CONTRACT" ]; then
|
||||||
@@ -24,18 +31,25 @@ else
|
|||||||
CONTRACT_ADDRESS=$(jq -r '.address' /server/config.json | tr -d '"')
|
CONTRACT_ADDRESS=$(jq -r '.address' /server/config.json | tr -d '"')
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -f /geth-accounts/accounts.csv ]; then
|
if [ -n "$CERC_L1_ACCOUNTS_CSV_URL" ] && \
|
||||||
echo "Using L1 private key from the mounted volume"
|
l1_accounts_response=$(curl -L --write-out '%{http_code}' --silent --output /dev/null "$CERC_L1_ACCOUNTS_CSV_URL") && \
|
||||||
# Read the private key of L1 account for sending txs from peer
|
[ "$l1_accounts_response" -eq 200 ];
|
||||||
|
then
|
||||||
|
echo "Fetching L1 account credentials using provided URL"
|
||||||
|
mkdir -p /geth-accounts
|
||||||
|
wget -O /geth-accounts/accounts.csv "$CERC_L1_ACCOUNTS_CSV_URL"
|
||||||
|
|
||||||
|
# Read the private key of an L1 account for sending txs from peer
|
||||||
CERC_PRIVATE_KEY_PEER=$(awk -F, 'NR==2{print $NF}' /geth-accounts/accounts.csv)
|
CERC_PRIVATE_KEY_PEER=$(awk -F, 'NR==2{print $NF}' /geth-accounts/accounts.csv)
|
||||||
else
|
else
|
||||||
echo "Using CERC_PRIVATE_KEY_PEER from env"
|
echo "Couldn't fetch L1 account credentials, using CERC_PRIVATE_KEY_PEER from env"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Read in the config template TOML file and modify it
|
# Read in the config template TOML file and modify it
|
||||||
WATCHER_CONFIG_TEMPLATE=$(cat environments/watcher-config-template.toml)
|
WATCHER_CONFIG_TEMPLATE=$(cat environments/watcher-config-template.toml)
|
||||||
WATCHER_CONFIG=$(echo "$WATCHER_CONFIG_TEMPLATE" | \
|
WATCHER_CONFIG=$(echo "$WATCHER_CONFIG_TEMPLATE" | \
|
||||||
sed -E "s|REPLACE_WITH_CERC_RELAY_PEERS|${CERC_RELAY_PEERS}|g; \
|
sed -E "s|REPLACE_WITH_CERC_RELAY_PEERS|${CERC_RELAY_PEERS}|g; \
|
||||||
|
s|REPLACE_WITH_CERC_DENY_MULTIADDRS|${CERC_DENY_MULTIADDRS}|g; \
|
||||||
s/REPLACE_WITH_CERC_RELAY_ANNOUNCE_DOMAIN/${CERC_RELAY_ANNOUNCE_DOMAIN}/g; \
|
s/REPLACE_WITH_CERC_RELAY_ANNOUNCE_DOMAIN/${CERC_RELAY_ANNOUNCE_DOMAIN}/g; \
|
||||||
s|REPLACE_WITH_CERC_RELAY_MULTIADDR|${CERC_RELAY_MULTIADDR}|g; \
|
s|REPLACE_WITH_CERC_RELAY_MULTIADDR|${CERC_RELAY_MULTIADDR}|g; \
|
||||||
s/REPLACE_WITH_CERC_ENABLE_PEER_L2_TXS/${CERC_ENABLE_PEER_L2_TXS}/g; \
|
s/REPLACE_WITH_CERC_ENABLE_PEER_L2_TXS/${CERC_ENABLE_PEER_L2_TXS}/g; \
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
{
|
{
|
||||||
"relayNodes": [],
|
"relayNodes": [],
|
||||||
"peer": {
|
"peer": {
|
||||||
|
"denyMultiaddrs": [],
|
||||||
"enableDebugInfo": true
|
"enableDebugInfo": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ if [ -n "$CERC_SCRIPT_DEBUG" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
CERC_RELAY_NODES="${CERC_RELAY_NODES:-${DEFAULT_CERC_RELAY_NODES}}"
|
CERC_RELAY_NODES="${CERC_RELAY_NODES:-${DEFAULT_CERC_RELAY_NODES}}"
|
||||||
|
CERC_DENY_MULTIADDRS="${CERC_DENY_MULTIADDRS:-${DEFAULT_CERC_DENY_MULTIADDRS}}"
|
||||||
|
|
||||||
# If not set (or []), check the mounted volume for relay peer id
|
# If not set (or []), check the mounted volume for relay peer id
|
||||||
if [ -z "$CERC_RELAY_NODES" ] || [ "$CERC_RELAY_NODES" = "[]" ]; then
|
if [ -z "$CERC_RELAY_NODES" ] || [ "$CERC_RELAY_NODES" = "[]" ]; then
|
||||||
@@ -16,5 +17,6 @@ echo "Using CERC_RELAY_NODES $CERC_RELAY_NODES"
|
|||||||
|
|
||||||
# Use yq to create config.yml with environment variables
|
# Use yq to create config.yml with environment variables
|
||||||
yq -n ".relayNodes = strenv(CERC_RELAY_NODES)" > /config/config.yml
|
yq -n ".relayNodes = strenv(CERC_RELAY_NODES)" > /config/config.yml
|
||||||
|
yq ".denyMultiaddrs = strenv(CERC_DENY_MULTIADDRS)" -i /config/config.yml
|
||||||
|
|
||||||
/scripts/start-serving-app.sh
|
/scripts/start-serving-app.sh
|
||||||
|
|||||||
@@ -27,6 +27,7 @@
|
|||||||
host = "0.0.0.0"
|
host = "0.0.0.0"
|
||||||
port = 9090
|
port = 9090
|
||||||
relayPeers = REPLACE_WITH_CERC_RELAY_PEERS
|
relayPeers = REPLACE_WITH_CERC_RELAY_PEERS
|
||||||
|
denyMultiaddrs = REPLACE_WITH_CERC_DENY_MULTIADDRS
|
||||||
peerIdFile = './peers/relay-id.json'
|
peerIdFile = './peers/relay-id.json'
|
||||||
announce = 'REPLACE_WITH_CERC_RELAY_ANNOUNCE_DOMAIN'
|
announce = 'REPLACE_WITH_CERC_RELAY_ANNOUNCE_DOMAIN'
|
||||||
enableDebugInfo = true
|
enableDebugInfo = true
|
||||||
@@ -34,6 +35,7 @@
|
|||||||
[server.p2p.peer]
|
[server.p2p.peer]
|
||||||
relayMultiaddr = 'REPLACE_WITH_CERC_RELAY_MULTIADDR'
|
relayMultiaddr = 'REPLACE_WITH_CERC_RELAY_MULTIADDR'
|
||||||
pubSubTopic = 'mobymask'
|
pubSubTopic = 'mobymask'
|
||||||
|
denyMultiaddrs = REPLACE_WITH_CERC_DENY_MULTIADDRS
|
||||||
peerIdFile = './peers/peer-id.json'
|
peerIdFile = './peers/peer-id.json'
|
||||||
enableDebugInfo = true
|
enableDebugInfo = true
|
||||||
enableL2Txs = REPLACE_WITH_CERC_ENABLE_PEER_L2_TXS
|
enableL2Txs = REPLACE_WITH_CERC_ENABLE_PEER_L2_TXS
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Build a local version of the task executor for act-runner
|
# Build a local version of the task executor for act-runner
|
||||||
source ${CERC_CONTAINER_BASE_DIR}/build-base.sh
|
source ${CERC_CONTAINER_BASE_DIR}/build-base.sh
|
||||||
docker build -t cerc/act-runner-task-executor:local -f ${CERC_REPO_BASE_DIR}/hosting/gitea/Dockerfile.task-executor ${build_command_args} ${CERC_REPO_BASE_DIR}/hosting
|
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
||||||
|
docker build -t cerc/act-runner-task-executor:local -f ${CERC_REPO_BASE_DIR}/hosting/gitea/Dockerfile.task-executor ${build_command_args} ${SCRIPT_DIR}
|
||||||
|
|||||||
@@ -127,3 +127,9 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
wait $geth_pid
|
wait $geth_pid
|
||||||
|
|
||||||
|
if [ "true" == "$CERC_KEEP_RUNNING_AFTER_GETH_EXIT" ]; then
|
||||||
|
while [ 1 -eq 1 ]; do
|
||||||
|
sleep 60
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
FROM sigp/lcli:v3.2.1 AS lcli
|
FROM sigp/lcli:v4.1.0 AS lcli
|
||||||
FROM skylenet/ethereum-genesis-generator@sha256:210353ce7c898686bc5092f16c61220a76d357f51eff9c451e9ad1b9ad03d4d3 AS ethgen
|
FROM skylenet/ethereum-genesis-generator@sha256:210353ce7c898686bc5092f16c61220a76d357f51eff9c451e9ad1b9ad03d4d3 AS ethgen
|
||||||
FROM cerc/fixturenet-eth-geth:local AS fnetgeth
|
FROM cerc/fixturenet-eth-geth:local AS fnetgeth
|
||||||
|
|
||||||
|
|||||||
@@ -13,29 +13,25 @@ DEBUG_LEVEL=${1:-info}
|
|||||||
|
|
||||||
echo "Starting bootnode"
|
echo "Starting bootnode"
|
||||||
|
|
||||||
if [ ! -f "$DATADIR/bootnode/enr.dat" ]; then
|
# Clean up existing ENR dir to avoid node connectivity issues on a restart
|
||||||
echo "Generating bootnode enr"
|
if [ -d "$DATADIR/bootnode" ]; then
|
||||||
lcli \
|
echo "Removing existing bootnode enr directory"
|
||||||
generate-bootnode-enr \
|
rm -r "$DATADIR/bootnode"
|
||||||
--ip $ENR_IP \
|
|
||||||
--udp-port $BOOTNODE_PORT \
|
|
||||||
--tcp-port $BOOTNODE_PORT \
|
|
||||||
--genesis-fork-version $GENESIS_FORK_VERSION \
|
|
||||||
--output-dir $DATADIR/bootnode-temp
|
|
||||||
|
|
||||||
# Output ENR to a temp dir and mv as "lcli generate-bootnode-enr" will not overwrite an empty dir (mounted volume)
|
|
||||||
mkdir -p $DATADIR/bootnode
|
|
||||||
mv $DATADIR/bootnode-temp/* $DATADIR/bootnode
|
|
||||||
rm -r $DATADIR/bootnode-temp
|
|
||||||
|
|
||||||
echo "Generated bootnode enr"
|
|
||||||
else
|
|
||||||
echo "Found existing bootnode enr"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "Generating bootnode enr"
|
||||||
|
lcli \
|
||||||
|
generate-bootnode-enr \
|
||||||
|
--ip $ENR_IP \
|
||||||
|
--udp-port $BOOTNODE_PORT \
|
||||||
|
--tcp-port $BOOTNODE_PORT \
|
||||||
|
--genesis-fork-version $GENESIS_FORK_VERSION \
|
||||||
|
--output-dir $DATADIR/bootnode
|
||||||
|
|
||||||
bootnode_enr=`cat $DATADIR/bootnode/enr.dat`
|
bootnode_enr=`cat $DATADIR/bootnode/enr.dat`
|
||||||
echo "- $bootnode_enr" > $TESTNET_DIR/boot_enr.yaml
|
echo "- $bootnode_enr" > $TESTNET_DIR/boot_enr.yaml
|
||||||
echo "Written bootnode enr to $TESTNET_DIR/boot_enr.yaml"
|
|
||||||
|
echo "Generated bootnode enr and written to $TESTNET_DIR/boot_enr.yaml"
|
||||||
|
|
||||||
exec lighthouse boot_node \
|
exec lighthouse boot_node \
|
||||||
--testnet-dir $TESTNET_DIR \
|
--testnet-dir $TESTNET_DIR \
|
||||||
|
|||||||
+47
@@ -0,0 +1,47 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# 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.
|
||||||
|
${SCRIPT_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
|
||||||
@@ -2,9 +2,10 @@
|
|||||||
if [ -n "$CERC_SCRIPT_DEBUG" ]; then
|
if [ -n "$CERC_SCRIPT_DEBUG" ]; then
|
||||||
set -x
|
set -x
|
||||||
fi
|
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}
|
LIGHTHOUSE_BASE_URL=${LIGHTHOUSE_BASE_URL}
|
||||||
GETH_BASE_URL=${GETH_BASE_URL}
|
GETH_BASE_URL=${GETH_BASE_URL}
|
||||||
@@ -13,18 +14,29 @@ GETH_BASE_URL=${GETH_BASE_URL}
|
|||||||
# or some execution environment-neutral mechanism.
|
# or some execution environment-neutral mechanism.
|
||||||
if [ -z "$LIGHTHOUSE_BASE_URL" ]; then
|
if [ -z "$LIGHTHOUSE_BASE_URL" ]; then
|
||||||
LIGHTHOUSE_CONTAINER=`docker ps -q -f "name=fixturenet-eth-lighthouse-1-1"`
|
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_PORT=`docker port $LIGHTHOUSE_CONTAINER 8001 | cut -d':' -f2`
|
||||||
LIGHTHOUSE_BASE_URL="http://localhost:${LIGHTHOUSE_PORT}"
|
LIGHTHOUSE_BASE_URL="http://localhost:${LIGHTHOUSE_PORT}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -z "$GETH_BASE_URL" ]; then
|
if [ -z "$GETH_BASE_URL" ]; then
|
||||||
GETH_CONTAINER=`docker ps -q -f "name=fixturenet-eth-geth-1-1"`
|
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_PORT=`docker port $GETH_CONTAINER 8545 | cut -d':' -f2`
|
||||||
GETH_BASE_URL="http://localhost:${GETH_PORT}"
|
GETH_BASE_URL="http://localhost:${GETH_PORT}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
MARKER="."
|
||||||
|
|
||||||
function inc_status() {
|
function inc_status() {
|
||||||
echo " done"
|
echo " done"
|
||||||
|
MARKEr="."
|
||||||
STATUS=$((STATUS + 1))
|
STATUS=$((STATUS + 1))
|
||||||
if [ $STATUS -lt ${#STATUSES[@]} ]; then
|
if [ $STATUS -lt ${#STATUSES[@]} ]; then
|
||||||
echo -n "Waiting for ${STATUSES[$STATUS]}..."
|
echo -n "Waiting for ${STATUSES[$STATUS]}..."
|
||||||
@@ -34,7 +46,7 @@ function inc_status() {
|
|||||||
echo -n "Waiting for ${STATUSES[$STATUS]}..."
|
echo -n "Waiting for ${STATUSES[$STATUS]}..."
|
||||||
while [ $STATUS -lt ${#STATUSES[@]} ]; do
|
while [ $STATUS -lt ${#STATUSES[@]} ]; do
|
||||||
sleep 1
|
sleep 1
|
||||||
echo -n "."
|
echo -n "$MARKER"
|
||||||
case $STATUS in
|
case $STATUS in
|
||||||
0)
|
0)
|
||||||
result=`wget --no-check-certificate --quiet -O - --method POST --header 'Content-Type: application/json' \
|
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
|
inc_status
|
||||||
fi
|
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
|
esac
|
||||||
done
|
done
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Originally from: https://github.com/devcontainers/images/blob/main/src/javascript-node/.devcontainer/Dockerfile
|
# Originally from: https://github.com/devcontainers/images/blob/main/src/javascript-node/.devcontainer/Dockerfile
|
||||||
# [Choice] Node.js version (use -bullseye variants on local arm64/Apple Silicon): 18, 16, 14, 18-bullseye, 16-bullseye, 14-bullseye, 18-buster, 16-buster, 14-buster
|
# [Choice] Node.js version (use -bullseye variants on local arm64/Apple Silicon): 18, 16, 14, 18-bullseye, 16-bullseye, 14-bullseye, 18-buster, 16-buster, 14-buster
|
||||||
ARG VARIANT=16-bullseye
|
ARG VARIANT=18-bullseye
|
||||||
FROM node:${VARIANT}
|
FROM node:${VARIANT}
|
||||||
|
|
||||||
ARG USERNAME=node
|
ARG USERNAME=node
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
FROM sigp/lighthouse:v3.2.1-modern
|
FROM sigp/lighthouse:v4.1.0-modern
|
||||||
|
|
||||||
RUN apt-get update; apt-get install bash netcat curl less jq -y;
|
RUN apt-get update; apt-get install bash netcat curl less jq -y;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,138 @@
|
|||||||
|
#####################################
|
||||||
|
FROM golang:1.19.7-buster AS lotus-builder
|
||||||
|
MAINTAINER Lotus Development Team
|
||||||
|
|
||||||
|
RUN apt-get update && apt-get install -y ca-certificates build-essential clang ocl-icd-opencl-dev ocl-icd-libopencl1 jq libhwloc-dev
|
||||||
|
|
||||||
|
ENV XDG_CACHE_HOME="/tmp"
|
||||||
|
|
||||||
|
### taken from https://github.com/rust-lang/docker-rust/blob/master/1.63.0/buster/Dockerfile
|
||||||
|
ENV RUSTUP_HOME=/usr/local/rustup \
|
||||||
|
CARGO_HOME=/usr/local/cargo \
|
||||||
|
PATH=/usr/local/cargo/bin:$PATH \
|
||||||
|
RUST_VERSION=1.63.0
|
||||||
|
|
||||||
|
RUN set -eux; \
|
||||||
|
dpkgArch="$(dpkg --print-architecture)"; \
|
||||||
|
case "${dpkgArch##*-}" in \
|
||||||
|
amd64) rustArch='x86_64-unknown-linux-gnu'; rustupSha256='5cc9ffd1026e82e7fb2eec2121ad71f4b0f044e88bca39207b3f6b769aaa799c' ;; \
|
||||||
|
arm64) rustArch='aarch64-unknown-linux-gnu'; rustupSha256='e189948e396d47254103a49c987e7fb0e5dd8e34b200aa4481ecc4b8e41fb929' ;; \
|
||||||
|
*) echo >&2 "unsupported architecture: ${dpkgArch}"; exit 1 ;; \
|
||||||
|
esac; \
|
||||||
|
url="https://static.rust-lang.org/rustup/archive/1.25.1/${rustArch}/rustup-init"; \
|
||||||
|
wget "$url"; \
|
||||||
|
echo "${rustupSha256} *rustup-init" | sha256sum -c -; \
|
||||||
|
chmod +x rustup-init; \
|
||||||
|
./rustup-init -y --no-modify-path --profile minimal --default-toolchain $RUST_VERSION --default-host ${rustArch}; \
|
||||||
|
rm rustup-init; \
|
||||||
|
chmod -R a+w $RUSTUP_HOME $CARGO_HOME; \
|
||||||
|
rustup --version; \
|
||||||
|
cargo --version; \
|
||||||
|
rustc --version;
|
||||||
|
|
||||||
|
COPY ./ /opt/filecoin
|
||||||
|
WORKDIR /opt/filecoin
|
||||||
|
|
||||||
|
#RUN scripts/docker-git-state-check.sh
|
||||||
|
|
||||||
|
### make configurable filecoin-ffi build
|
||||||
|
ARG FFI_BUILD_FROM_SOURCE=0
|
||||||
|
ENV FFI_BUILD_FROM_SOURCE=${FFI_BUILD_FROM_SOURCE}
|
||||||
|
|
||||||
|
RUN make clean deps
|
||||||
|
|
||||||
|
ARG RUSTFLAGS=""
|
||||||
|
ARG GOFLAGS=""
|
||||||
|
|
||||||
|
#RUN make buildall
|
||||||
|
RUN make 2k
|
||||||
|
|
||||||
|
#####################################
|
||||||
|
FROM ubuntu:20.04 AS lotus-base
|
||||||
|
MAINTAINER Lotus Development Team
|
||||||
|
|
||||||
|
# Base resources
|
||||||
|
COPY --from=lotus-builder /etc/ssl/certs /etc/ssl/certs
|
||||||
|
COPY --from=lotus-builder /lib/*/libdl.so.2 /lib/
|
||||||
|
COPY --from=lotus-builder /lib/*/librt.so.1 /lib/
|
||||||
|
COPY --from=lotus-builder /lib/*/libgcc_s.so.1 /lib/
|
||||||
|
COPY --from=lotus-builder /lib/*/libutil.so.1 /lib/
|
||||||
|
COPY --from=lotus-builder /usr/lib/*/libltdl.so.7 /lib/
|
||||||
|
COPY --from=lotus-builder /usr/lib/*/libnuma.so.1 /lib/
|
||||||
|
COPY --from=lotus-builder /usr/lib/*/libhwloc.so.5 /lib/
|
||||||
|
COPY --from=lotus-builder /usr/lib/*/libOpenCL.so.1 /lib/
|
||||||
|
|
||||||
|
RUN useradd -r -u 532 -U fc \
|
||||||
|
&& mkdir -p /etc/OpenCL/vendors \
|
||||||
|
&& echo "libnvidia-opencl.so.1" > /etc/OpenCL/vendors/nvidia.icd
|
||||||
|
|
||||||
|
#####################################
|
||||||
|
FROM lotus-base AS lotus
|
||||||
|
MAINTAINER Lotus Development Team
|
||||||
|
|
||||||
|
COPY --from=lotus-builder /opt/filecoin/lotus /usr/local/bin/
|
||||||
|
COPY --from=lotus-builder /opt/filecoin/lotus-shed /usr/local/bin/
|
||||||
|
#COPY scripts/docker-lotus-entrypoint.sh /
|
||||||
|
#COPY myscripts/setup-node.sh /docker-entrypoint-scripts.d/setup-node.sh
|
||||||
|
|
||||||
|
ARG DOCKER_LOTUS_IMPORT_SNAPSHOT https://snapshots.mainnet.filops.net/minimal/latest
|
||||||
|
ENV DOCKER_LOTUS_IMPORT_SNAPSHOT ${DOCKER_LOTUS_IMPORT_SNAPSHOT}
|
||||||
|
ENV FILECOIN_PARAMETER_CACHE /var/tmp/filecoin-proof-parameters
|
||||||
|
ENV LOTUS_PATH /var/lib/lotus
|
||||||
|
ENV DOCKER_LOTUS_IMPORT_WALLET ""
|
||||||
|
|
||||||
|
RUN mkdir /var/lib/lotus /var/tmp/filecoin-proof-parameters
|
||||||
|
RUN chown fc: /var/lib/lotus /var/tmp/filecoin-proof-parameters
|
||||||
|
|
||||||
|
VOLUME /var/lib/lotus
|
||||||
|
VOLUME /var/tmp/filecoin-proof-parameters
|
||||||
|
|
||||||
|
USER fc
|
||||||
|
|
||||||
|
EXPOSE 1234
|
||||||
|
|
||||||
|
ENTRYPOINT ["/docker-lotus-entrypoint.sh"]
|
||||||
|
|
||||||
|
CMD ["-help"]
|
||||||
|
|
||||||
|
#####################################
|
||||||
|
FROM lotus-base AS lotus-all-in-one
|
||||||
|
|
||||||
|
ENV FILECOIN_PARAMETER_CACHE /var/tmp/filecoin-proof-parameters
|
||||||
|
ENV LOTUS_MINER_PATH /var/lib/lotus-miner
|
||||||
|
ENV LOTUS_PATH /var/lib/lotus
|
||||||
|
ENV LOTUS_WORKER_PATH /var/lib/lotus-worker
|
||||||
|
ENV WALLET_PATH /var/lib/lotus-wallet
|
||||||
|
|
||||||
|
COPY --from=lotus-builder /opt/filecoin/lotus /usr/local/bin/
|
||||||
|
COPY --from=lotus-builder /opt/filecoin/lotus-seed /usr/local/bin/
|
||||||
|
COPY --from=lotus-builder /opt/filecoin/lotus-shed /usr/local/bin/
|
||||||
|
#COPY --from=lotus-builder /opt/filecoin/lotus-wallet /usr/local/bin/
|
||||||
|
#COPY --from=lotus-builder /opt/filecoin/lotus-gateway /usr/local/bin/
|
||||||
|
COPY --from=lotus-builder /opt/filecoin/lotus-miner /usr/local/bin/
|
||||||
|
COPY --from=lotus-builder /opt/filecoin/lotus-worker /usr/local/bin/
|
||||||
|
#COPY --from=lotus-builder /opt/filecoin/lotus-stats /usr/local/bin/
|
||||||
|
#COPY --from=lotus-builder /opt/filecoin/lotus-fountain /usr/local/bin/
|
||||||
|
|
||||||
|
RUN mkdir /var/tmp/filecoin-proof-parameters
|
||||||
|
RUN mkdir /var/lib/lotus
|
||||||
|
RUN mkdir /var/lib/lotus-miner
|
||||||
|
RUN mkdir /var/lib/lotus-worker
|
||||||
|
RUN mkdir /var/lib/lotus-wallet
|
||||||
|
RUN chown fc: /var/tmp/filecoin-proof-parameters
|
||||||
|
RUN chown fc: /var/lib/lotus
|
||||||
|
RUN chown fc: /var/lib/lotus-miner
|
||||||
|
RUN chown fc: /var/lib/lotus-worker
|
||||||
|
RUN chown fc: /var/lib/lotus-wallet
|
||||||
|
|
||||||
|
|
||||||
|
#VOLUME /var/tmp/filecoin-proof-parameters
|
||||||
|
#VOLUME /var/lib/lotus
|
||||||
|
#VOLUME /var/lib/lotus-miner
|
||||||
|
#VOLUME /var/lib/lotus-worker
|
||||||
|
#VOLUME /var/lib/lotus-wallet
|
||||||
|
|
||||||
|
EXPOSE 1234
|
||||||
|
EXPOSE 2345
|
||||||
|
EXPOSE 3456
|
||||||
|
EXPOSE 1777
|
||||||
Executable
+12
@@ -0,0 +1,12 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build cerc/lotus
|
||||||
|
source ${CERC_CONTAINER_BASE_DIR}/build-base.sh
|
||||||
|
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
||||||
|
|
||||||
|
# Per lotus docs, 'releases' branch always contains latest stable release
|
||||||
|
git -C ${CERC_REPO_BASE_DIR}/lotus checkout releases
|
||||||
|
|
||||||
|
# Replace repo's Dockerfile with modified one
|
||||||
|
cp ${SCRIPT_DIR}/Dockerfile ${CERC_REPO_BASE_DIR}/lotus/Dockerfile
|
||||||
|
|
||||||
|
docker build -t cerc/lotus:local ${build_command_args} ${CERC_REPO_BASE_DIR}/lotus
|
||||||
@@ -31,7 +31,7 @@ RUN \
|
|||||||
|
|
||||||
# Install additional OS packages.
|
# Install additional OS packages.
|
||||||
RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
|
RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
|
||||||
&& apt-get -y install --no-install-recommends jq bash
|
&& apt-get -y install --no-install-recommends jq bash netcat
|
||||||
|
|
||||||
# We do this to get a yq binary from the published container, for the correct architecture we're building here
|
# We do this to get a yq binary from the published container, for the correct architecture we're building here
|
||||||
COPY --from=docker.io/mikefarah/yq:latest /usr/bin/yq /usr/local/bin/yq
|
COPY --from=docker.io/mikefarah/yq:latest /usr/bin/yq /usr/local/bin/yq
|
||||||
@@ -48,8 +48,11 @@ RUN mkdir -p /config
|
|||||||
# Install simple web server for now (use nginx perhaps later)
|
# Install simple web server for now (use nginx perhaps later)
|
||||||
RUN yarn global add http-server
|
RUN yarn global add http-server
|
||||||
|
|
||||||
# Globally install the payload web app package
|
# Globally install both versions of the payload web app package
|
||||||
RUN yarn global add @cerc-io/mobymask-ui
|
# Install old version of MobyMask web app
|
||||||
|
RUN yarn global add @cerc-io/mobymask-ui@0.1.4
|
||||||
|
# Install the LXDAO version of MobyMask web app
|
||||||
|
RUN yarn global add @cerc-io/mobymask-ui-lxdao@npm:@cerc-io/mobymask-ui@0.1.4-lxdao-0.1.1
|
||||||
|
|
||||||
# Expose port for http
|
# Expose port for http
|
||||||
EXPOSE 80
|
EXPOSE 80
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ do
|
|||||||
echo "Substituting: ${template_string_to_replace} = ${template_value_to_substitute}"
|
echo "Substituting: ${template_string_to_replace} = ${template_value_to_substitute}"
|
||||||
|
|
||||||
# TODO: Pass keys to be replaced without double quotes
|
# TODO: Pass keys to be replaced without double quotes
|
||||||
if [[ "$template_string_to_replace" =~ ^${config_prefix}_(relayNodes|chainId)$ ]]; then
|
if [[ "$template_string_to_replace" =~ ^${config_prefix}_(relayNodes|chainId|denyMultiaddrs)$ ]]; then
|
||||||
find ${webapp_files_dir} -type f -exec sed -i 's#"'"${template_string_to_replace}"'"#'"${template_value_to_substitute}"'#g' {} +
|
find ${webapp_files_dir} -type f -exec sed -i 's#"'"${template_string_to_replace}"'"#'"${template_value_to_substitute}"'#g' {} +
|
||||||
else
|
else
|
||||||
# Note: we do not escape our strings, on the expectation they do not container the '#' char.
|
# Note: we do not escape our strings, on the expectation they do not container the '#' char.
|
||||||
|
|||||||
@@ -4,6 +4,6 @@ if [ -n "$CERC_SCRIPT_DEBUG" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# TODO: Don't hard wire this:
|
# TODO: Don't hard wire this:
|
||||||
webapp_files_dir=/usr/local/share/.config/yarn/global/node_modules/@cerc-io/mobymask-ui/build
|
webapp_files_dir="/usr/local/share/.config/yarn/global/node_modules/${CERC_BUILD_DIR}"
|
||||||
/scripts/apply-webapp-config.sh /config/config.yml ${webapp_files_dir} MOBYMASK_HOSTED_CONFIG
|
/scripts/apply-webapp-config.sh /config/config.yml ${webapp_files_dir} MOBYMASK_HOSTED_CONFIG
|
||||||
http-server -p 80 ${webapp_files_dir}
|
http-server -p 80 ${webapp_files_dir}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
FROM node:16.17.1-alpine3.16
|
FROM node:16.17.1-alpine3.16
|
||||||
|
|
||||||
RUN apk --update --no-cache add python3 alpine-sdk jq bash
|
RUN apk --update --no-cache add python3 alpine-sdk jq bash curl wget
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ FROM cerc/foundry:local
|
|||||||
|
|
||||||
# Install node (local foundry is a debian based image)
|
# Install node (local foundry is a debian based image)
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
&& apt-get install -y curl \
|
&& apt-get install -y curl wget \
|
||||||
&& curl --silent --location https://deb.nodesource.com/setup_16.x | bash - \
|
&& curl --silent --location https://deb.nodesource.com/setup_16.x | bash - \
|
||||||
&& apt-get update \
|
&& apt-get update \
|
||||||
&& apt-get install -y nodejs git busybox jq \
|
&& apt-get install -y nodejs git busybox jq \
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Build cerc/optimism-l2geth
|
# Build cerc/optimism-l2geth
|
||||||
|
|
||||||
source ${CERC_CONTAINER_BASE_DIR}/build-base.sh
|
source ${CERC_CONTAINER_BASE_DIR}/build-base.sh
|
||||||
|
|
||||||
docker build -t cerc/optimism-l2geth:local ${build_command_args} ${CERC_REPO_BASE_DIR}/op-geth
|
docker build -t cerc/optimism-l2geth:local ${build_command_args} ${CERC_REPO_BASE_DIR}/op-geth
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Build cerc/optimism-op-batcher
|
# Build cerc/optimism-op-batcher
|
||||||
# TODO: use upstream Dockerfile once its buildx-specific content has been removed
|
# TODO: use upstream Dockerfile once its buildx-specific content has been removed
|
||||||
|
|
||||||
source ${CERC_CONTAINER_BASE_DIR}/build-base.sh
|
source ${CERC_CONTAINER_BASE_DIR}/build-base.sh
|
||||||
|
|
||||||
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
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
|
docker build -t cerc/optimism-op-batcher:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/optimism
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Build cerc/optimism-op-node
|
# Build cerc/optimism-op-node
|
||||||
# TODO: use upstream Dockerfile once its buildx-specific content has been removed
|
# TODO: use upstream Dockerfile once its buildx-specific content has been removed
|
||||||
|
|
||||||
source ${CERC_CONTAINER_BASE_DIR}/build-base.sh
|
source ${CERC_CONTAINER_BASE_DIR}/build-base.sh
|
||||||
|
|
||||||
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
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
|
docker build -t cerc/optimism-op-node:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/optimism
|
||||||
|
|||||||
@@ -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"]
|
||||||
@@ -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
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build cerc/pocket
|
||||||
|
docker build -t cerc/pocket:local ${CERC_REPO_BASE_DIR}/pocket-core-deployments/docker
|
||||||
@@ -21,8 +21,7 @@ RUN mkdir -p /config
|
|||||||
RUN yarn global add http-server
|
RUN yarn global add http-server
|
||||||
|
|
||||||
# Globally install the payload web app package
|
# Globally install the payload web app package
|
||||||
RUN yarn global add @cerc-io/test-app
|
RUN yarn global add @cerc-io/test-app@0.2.34
|
||||||
|
|
||||||
|
|
||||||
# Expose port for http
|
# Expose port for http
|
||||||
EXPOSE 80
|
EXPOSE 80
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ do
|
|||||||
echo "Substituting: ${template_string_to_replace} = ${template_value_to_substitute}"
|
echo "Substituting: ${template_string_to_replace} = ${template_value_to_substitute}"
|
||||||
|
|
||||||
# TODO: Pass keys to be replaced without double quotes
|
# TODO: Pass keys to be replaced without double quotes
|
||||||
if [[ "$template_string_to_replace" == "${config_prefix}_relayNodes" ]]; then
|
if [[ "$template_string_to_replace" =~ ^${config_prefix}_(relayNodes|denyMultiaddrs)$ ]]; then
|
||||||
find ${webapp_files_dir} -type f -exec sed -i 's#"'"${template_string_to_replace}"'"#'"${template_value_to_substitute}"'#g' {} +
|
find ${webapp_files_dir} -type f -exec sed -i 's#"'"${template_string_to_replace}"'"#'"${template_value_to_substitute}"'#g' {} +
|
||||||
else
|
else
|
||||||
# Note: we do not escape our strings, on the expectation they do not container the '#' char.
|
# Note: we do not escape our strings, on the expectation they do not container the '#' char.
|
||||||
|
|||||||
@@ -1,11 +1,14 @@
|
|||||||
#!/bin/sh
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
if [ -n "$CERC_SCRIPT_DEBUG" ]; then
|
||||||
|
set -x
|
||||||
|
fi
|
||||||
# Test if the container's filesystem is old (run previously) or new
|
# Test if the container's filesystem is old (run previously) or new
|
||||||
EXISTSFILENAME=/var/exists
|
EXISTSFILENAME=/var/exists
|
||||||
echo "Test container starting"
|
echo "Test container starting"
|
||||||
if [[ -f "$EXISTSFILENAME" ]];
|
if [[ -f "$EXISTSFILENAME" ]];
|
||||||
then
|
then
|
||||||
TIMESTAMP = `cat $EXISTSFILENAME`
|
TIMESTAMP=`cat $EXISTSFILENAME`
|
||||||
echo "Filesystem is old, created: $TIMESTAMP"
|
echo "Filesystem is old, created: $TIMESTAMP"
|
||||||
else
|
else
|
||||||
echo "Filesystem is fresh"
|
echo "Filesystem is fresh"
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
FROM node:18.16.0-alpine3.16
|
||||||
|
|
||||||
|
RUN apk --update --no-cache add git python3 alpine-sdk
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
RUN echo "Building azimuth-watcher-ts" && \
|
||||||
|
yarn && yarn build
|
||||||
|
|
||||||
|
RUN echo "Install toml-js to update watcher config files" && \
|
||||||
|
yarn add --dev --ignore-workspace-root-check toml-js
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build cerc/watcher-azimuth
|
||||||
|
|
||||||
|
source ${CERC_CONTAINER_BASE_DIR}/build-base.sh
|
||||||
|
|
||||||
|
# See: https://stackoverflow.com/a/246128/1701505
|
||||||
|
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
||||||
|
|
||||||
|
docker build -t cerc/watcher-azimuth:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/azimuth-watcher-ts
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
FROM node:18.15.0-alpine3.16
|
||||||
|
|
||||||
|
RUN apk --update --no-cache add git python3 alpine-sdk bash
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
RUN echo "Building gelato-watcher-ts" && \
|
||||||
|
yarn && yarn build
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build cerc/watcher-gelato
|
||||||
|
|
||||||
|
source ${CERC_CONTAINER_BASE_DIR}/build-base.sh
|
||||||
|
|
||||||
|
# See: https://stackoverflow.com/a/246128/1701505
|
||||||
|
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
||||||
|
|
||||||
|
docker build -t cerc/watcher-gelato:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/gelato-watcher-ts
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
FROM ubuntu:22.04
|
FROM ubuntu:22.04
|
||||||
|
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
&& apt-get install -y curl gnupg build-essential \
|
&& apt-get install -y curl wget gnupg build-essential \
|
||||||
&& curl --silent --location https://deb.nodesource.com/setup_18.x | bash - \
|
&& curl --silent --location https://deb.nodesource.com/setup_18.x | bash - \
|
||||||
&& apt-get update \
|
&& apt-get update \
|
||||||
&& apt-get install -y nodejs git busybox jq \
|
&& apt-get install -y nodejs git busybox jq \
|
||||||
@@ -14,7 +14,7 @@ WORKDIR /app
|
|||||||
|
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
RUN echo "Building watcher-ts" && \
|
RUN echo "Building mobymask-v2-watcher-ts" && \
|
||||||
yarn && yarn build
|
yarn && yarn build
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|||||||
@@ -35,3 +35,9 @@ cerc/act-runner-task-executor
|
|||||||
cerc/optimism-l2geth
|
cerc/optimism-l2geth
|
||||||
cerc/optimism-op-batcher
|
cerc/optimism-op-batcher
|
||||||
cerc/optimism-op-node
|
cerc/optimism-op-node
|
||||||
|
cerc/optimism-op-proposer
|
||||||
|
cerc/pocket
|
||||||
|
cerc/watcher-azimuth
|
||||||
|
cerc/ipld-eth-state-snapshot
|
||||||
|
cerc/watcher-gelato
|
||||||
|
cerc/lotus
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ laconicd
|
|||||||
fixturenet-laconicd
|
fixturenet-laconicd
|
||||||
fixturenet-eth
|
fixturenet-eth
|
||||||
fixturenet-eth-metrics
|
fixturenet-eth-metrics
|
||||||
watcher-ts
|
|
||||||
watcher-mobymask
|
watcher-mobymask
|
||||||
watcher-erc20
|
watcher-erc20
|
||||||
watcher-erc721
|
watcher-erc721
|
||||||
@@ -25,3 +24,7 @@ tx-spammer
|
|||||||
kubo
|
kubo
|
||||||
foundry
|
foundry
|
||||||
fixturenet-optimism
|
fixturenet-optimism
|
||||||
|
fixturenet-pocket
|
||||||
|
watcher-azimuth
|
||||||
|
watcher-gelato
|
||||||
|
fixturenet-lotus
|
||||||
|
|||||||
@@ -13,8 +13,6 @@ cerc-io/laconic-console
|
|||||||
cerc-io/mobymask-watcher
|
cerc-io/mobymask-watcher
|
||||||
cerc-io/watcher-ts
|
cerc-io/watcher-ts
|
||||||
cerc-io/mobymask-v2-watcher-ts
|
cerc-io/mobymask-v2-watcher-ts
|
||||||
cerc-io/react-peer
|
|
||||||
cerc-io/mobymask-ui
|
|
||||||
cerc-io/MobyMask
|
cerc-io/MobyMask
|
||||||
vulcanize/uniswap-watcher-ts
|
vulcanize/uniswap-watcher-ts
|
||||||
vulcanize/uniswap-v3-info
|
vulcanize/uniswap-v3-info
|
||||||
@@ -29,3 +27,9 @@ lirewine/sdk
|
|||||||
telackey/act_runner
|
telackey/act_runner
|
||||||
ethereum-optimism/op-geth
|
ethereum-optimism/op-geth
|
||||||
ethereum-optimism/optimism
|
ethereum-optimism/optimism
|
||||||
|
pokt-network/pocket-core
|
||||||
|
pokt-network/pocket-core-deployments
|
||||||
|
cerc-io/azimuth-watcher-ts
|
||||||
|
cerc-io/ipld-eth-state-snapshot
|
||||||
|
cerc-io/gelato-watcher-ts
|
||||||
|
filecoin-project/lotus
|
||||||
|
|||||||
@@ -0,0 +1,72 @@
|
|||||||
|
# Azimuth Watcher
|
||||||
|
|
||||||
|
Instructions to setup and deploy Azimuth Watcher stack
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
Prerequisite: `ipld-eth-server` RPC and GQL endpoints
|
||||||
|
|
||||||
|
Clone required repositories:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
laconic-so --stack azimuth setup-repositories
|
||||||
|
```
|
||||||
|
|
||||||
|
NOTE: If the repository already exists and checked out to a different version, `setup-repositories` command will throw an error.
|
||||||
|
For getting around this, the `azimuth-watcher-ts` repository can be removed and then run the command.
|
||||||
|
|
||||||
|
Checkout to the required versions and branches in repos
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# azimuth-watcher-ts
|
||||||
|
cd ~/cerc/azimuth-watcher-ts
|
||||||
|
git checkout v0.1.0
|
||||||
|
```
|
||||||
|
|
||||||
|
Build the container images:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
laconic-so --stack azimuth build-containers
|
||||||
|
```
|
||||||
|
|
||||||
|
This should create the required docker images in the local image registry.
|
||||||
|
|
||||||
|
### Configuration
|
||||||
|
|
||||||
|
* Create and update an env file to be used in the next step:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# External ipld-eth-server endpoints
|
||||||
|
CERC_IPLD_ETH_RPC=
|
||||||
|
CERC_IPLD_ETH_GQL=
|
||||||
|
```
|
||||||
|
|
||||||
|
* NOTE: If `ipld-eth-server` is running on the host machine, use `host.docker.internal` as the hostname to access host ports
|
||||||
|
|
||||||
|
### Deploy the stack
|
||||||
|
|
||||||
|
* Deploy the containers:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
laconic-so --stack azimuth deploy-system --env-file <PATH_TO_ENV_FILE> up
|
||||||
|
```
|
||||||
|
|
||||||
|
* List and check the health status of all the containers using `docker ps` and wait for them to be `healthy`
|
||||||
|
|
||||||
|
## Clean up
|
||||||
|
|
||||||
|
Stop all the services running in background run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
laconic-so --stack azimuth deploy-system down
|
||||||
|
```
|
||||||
|
|
||||||
|
Clear volumes created by this stack:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# List all relevant volumes
|
||||||
|
docker volume ls -q --filter "name=.*watcher_db_data"
|
||||||
|
|
||||||
|
# Remove all the listed volumes
|
||||||
|
docker volume rm $(docker volume ls -q --filter "name=.*watcher_db_data")
|
||||||
|
```
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
version: "1.0"
|
||||||
|
name: azimuth
|
||||||
|
repos:
|
||||||
|
- cerc-io/azimuth-watcher-ts
|
||||||
|
containers:
|
||||||
|
- cerc/watcher-azimuth
|
||||||
|
pods:
|
||||||
|
- watcher-azimuth
|
||||||
@@ -16,7 +16,7 @@ Leave `CERC_NPM_REGISTRY_URL` un-set to use the local gitea registry.
|
|||||||
Note: the scheme/gerbil container is excluded as it isn't currently required for the package registry.
|
Note: the scheme/gerbil container is excluded as it isn't currently required for the package registry.
|
||||||
|
|
||||||
```
|
```
|
||||||
$ laconic-so --stack build-support build-containers --exclude cerc/builder-gerbil
|
$ laconic-so --stack build-support build-containers
|
||||||
```
|
```
|
||||||
### 2. Deploy Gitea Package Registry
|
### 2. Deploy Gitea Package Registry
|
||||||
|
|
||||||
@@ -30,7 +30,7 @@ $ laconic-so --stack package-registry deploy up
|
|||||||
⠿ Container laconic-aecc4a21d3a502b14522db97d427e850-server-1 Started 1.9s
|
⠿ Container laconic-aecc4a21d3a502b14522db97d427e850-server-1 Started 1.9s
|
||||||
New user 'gitea_admin' has been successfully created!
|
New user 'gitea_admin' has been successfully created!
|
||||||
This is your gitea access token: 84fe66a73698bf11edbdccd0a338236b7d1d5c45. Keep it safe and secure, it can not be fetched again from gitea.
|
This is your gitea access token: 84fe66a73698bf11edbdccd0a338236b7d1d5c45. Keep it safe and secure, it can not be fetched again from gitea.
|
||||||
To use with laconic-so set this environment variable: export CERC_NPM_AUTH_TOKEN=3e493e77b3e83fe9e882f7e3a79dd4d5441c308b
|
To use with laconic-so set this environment variable: export CERC_NPM_AUTH_TOKEN=84fe66a73698bf11edbdccd0a338236b7d1d5c45
|
||||||
Created the organization cerc-io
|
Created the organization cerc-io
|
||||||
Gitea was configured to use host name: gitea.local, ensure that this resolves to localhost, e.g. with sudo vi /etc/hosts
|
Gitea was configured to use host name: gitea.local, ensure that this resolves to localhost, e.g. with sudo vi /etc/hosts
|
||||||
Success, gitea is properly initialized
|
Success, gitea is properly initialized
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
version: "1.1"
|
version: "1.2"
|
||||||
name: build-support
|
name: build-support
|
||||||
decription: "Build Support Components"
|
decription: "Build Support Components"
|
||||||
containers:
|
containers:
|
||||||
- cerc/builder-js
|
- cerc/builder-js
|
||||||
- cerc/builder-gerbil
|
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
version: "1.0"
|
||||||
|
name: chain-chunker
|
||||||
|
decription: "Stack to build containers for chain-chunker"
|
||||||
|
repos:
|
||||||
|
- cerc-io/ipld-eth-state-snapshot
|
||||||
|
- cerc-io/eth-statediff-service
|
||||||
|
- cerc-io/ipld-eth-db
|
||||||
|
- cerc-io/ipld-eth-server
|
||||||
|
containers:
|
||||||
|
- cerc/ipld-eth-state-snapshot
|
||||||
|
- cerc/eth-statediff-service
|
||||||
|
- cerc/ipld-eth-db
|
||||||
|
- cerc/ipld-eth-server
|
||||||
@@ -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
|
||||||
|
```
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user