Skip to content

Commit 6f77eae

Browse files
committed
fix: v5 upgrade
1 parent 3c1a2c5 commit 6f77eae

30 files changed

Lines changed: 962 additions & 178 deletions

File tree

.environment/mainnet/config.example.json

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,28 @@
1111
"url": "redis://:dashtec@redis-mainnet:6379"
1212
},
1313
"rpc": {
14-
"ethereumUrls": "<<SECRET: injected from MAINNET_ETHEREUM_RPC_URL>>"
14+
"ethereumUrls": "<<SECRET: injected from MAINNET_ETHEREUM_RPC_URL>>",
15+
"consensusUrls": "<<SECRET: injected from MAINNET_L1_CONSENSUS_HOST_URLS>>"
1516
},
16-
"sentinel": {
17-
"proxyUrl": "<<SECRET: injected from MAINNET_SENTINEL_PROXY_URL>>"
17+
"aztecNode": {
18+
"url": "http://aztec-node-mainnet:8080",
19+
"image": "aztecprotocol/aztec:5.2.0@sha256:2dd0b84a5a42285762390e38f82a6ba737bfeba6e39df688af7f050dae81a3b0",
20+
"network": "mainnet",
21+
"p2pPort": 40400,
22+
"syncMode": "snapshot",
23+
"sentinelHistoryLengthInEpochs": 24,
24+
"maxOldSpaceSizeMb": 4096,
25+
"memLimit": "8g"
1826
},
1927
"contracts": {
20-
"rollupAddress": "0x603bb2c05D474794ea97805e8De69bCcFb3bCA12",
21-
"governanceAddress": "0x1102471Eb3378FEE427121c9EfcEa452E4B6B75e",
22-
"governanceProposerAddress": "0x06Ef1DcF87E419C48B94a331B252819FADbD63ef",
23-
"slashingProposerAddress": "0x7a318c3DaA9f21f8fc8238c65755eB0394Fbf189",
24-
"slashFactoryAddress": "0x",
25-
"gseAddress": "0xa92ecFD0E70c9cd5E5cd76c50Af0F7Da93567a4f",
28+
"rollupAddress": "0x0000000000000000000000000000000000000000",
29+
"governanceAddress": "0x0000000000000000000000000000000000000000",
30+
"governanceProposerAddress": "0x0000000000000000000000000000000000000000",
31+
"slashingProposerAddress": "0x0000000000000000000000000000000000000000",
32+
"gseAddress": "0x0000000000000000000000000000000000000000",
2633
"stakingRegistryAddress": "0x042dF8f42790d6943F41C25C2132400fd727f452",
27-
"registryAddress": "0x0000000000000000000000000000000000000000"
34+
"registryAddress": "0x0000000000000000000000000000000000000000",
35+
"_comment": "Discovered by `pnpm env:discover mainnet` from the Aztec node (node_getL1ContractAddresses) plus Rollup.getSlasher()/Slasher.PROPOSER(). stakingRegistryAddress is not part of the Aztec core deployment and must be set by hand."
2836
},
2937
"collectors": {
3038
"validatorStats": {
@@ -56,7 +64,8 @@
5664
"ponder": {
5765
"port": 42069,
5866
"maxHealthcheckDuration": 240,
59-
"startBlock": 20000000
67+
"startBlock": 0,
68+
"_comment": "startBlock is set by `pnpm env:discover mainnet` to the rollup contract deployment block."
6069
},
6170
"app": {
6271
"url": "https://dashtec.xyz",

.environment/mainnet/config.json

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,27 @@
1111
"url": "redis://:dashtec@redis-mainnet:6379"
1212
},
1313
"rpc": {
14-
"ethereumUrls": ""
14+
"ethereumUrls": "",
15+
"consensusUrls": ""
1516
},
16-
"sentinel": {
17-
"proxyUrl": ""
17+
"aztecNode": {
18+
"url": "http://aztec-node-mainnet:8080",
19+
"image": "aztecprotocol/aztec:5.2.0@sha256:2dd0b84a5a42285762390e38f82a6ba737bfeba6e39df688af7f050dae81a3b0",
20+
"network": "mainnet",
21+
"p2pPort": 40400,
22+
"syncMode": "snapshot",
23+
"sentinelHistoryLengthInEpochs": 24,
24+
"maxOldSpaceSizeMb": 4096,
25+
"memLimit": "8g"
1826
},
1927
"contracts": {
20-
"rollupAddress": "0xae2001f7e21d5ecabf6234e9fdd1e76f50f74962",
21-
"governanceAddress": "0x1102471Eb3378FEE427121c9EfcEa452E4B6B75e",
22-
"governanceProposerAddress": "0x06Ef1DcF87E419C48B94a331B252819FADbD63ef",
23-
"slashingProposerAddress": "0xa4a38fD0108C00983E75616b638Ff3321FD26958",
24-
"slashFactoryAddress": "0x",
25-
"gseAddress": "0xa92ecFD0E70c9cd5E5cd76c50Af0F7Da93567a4f",
28+
"rollupAddress": "0x0000000000000000000000000000000000000000",
29+
"governanceAddress": "0x0000000000000000000000000000000000000000",
30+
"governanceProposerAddress": "0x0000000000000000000000000000000000000000",
31+
"slashingProposerAddress": "0x0000000000000000000000000000000000000000",
32+
"gseAddress": "0x0000000000000000000000000000000000000000",
2633
"stakingRegistryAddress": "0x042dF8f42790d6943F41C25C2132400fd727f452",
27-
"registryAddress": "0x35b22e09ee0390539439e24f06da43d83f90e298"
34+
"registryAddress": "0x0000000000000000000000000000000000000000"
2835
},
2936
"collectors": {
3037
"validatorStats": {
@@ -56,7 +63,7 @@
5663
"ponder": {
5764
"port": 42069,
5865
"maxHealthcheckDuration": 240,
59-
"startBlock": 20000000
66+
"startBlock": 0
6067
},
6168
"app": {
6269
"url": "https://dashtec.xyz",

.environment/testnet/config.example.json

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,28 @@
1111
"url": "redis://:dashtec@redis-testnet:6379"
1212
},
1313
"rpc": {
14-
"ethereumUrls": "<<SECRET: injected from TESTNET_ETHEREUM_RPC_URL>>"
14+
"ethereumUrls": "<<SECRET: injected from TESTNET_ETHEREUM_RPC_URL>>",
15+
"consensusUrls": "<<SECRET: injected from TESTNET_L1_CONSENSUS_HOST_URLS>>"
1516
},
16-
"sentinel": {
17-
"proxyUrl": "<<SECRET: injected from TESTNET_SENTINEL_PROXY_URL>>"
17+
"aztecNode": {
18+
"url": "http://aztec-node-testnet:8080",
19+
"image": "aztecprotocol/aztec:5.2.0@sha256:2dd0b84a5a42285762390e38f82a6ba737bfeba6e39df688af7f050dae81a3b0",
20+
"network": "testnet",
21+
"p2pPort": 40500,
22+
"syncMode": "snapshot",
23+
"sentinelHistoryLengthInEpochs": 24,
24+
"maxOldSpaceSizeMb": 4096,
25+
"memLimit": "6g"
1826
},
1927
"contracts": {
20-
"rollupAddress": "0xebd99ff0ff6677205509ae73f93d0ca52ac85d67",
21-
"governanceAddress": "0x1b5dad737609a548543ce32a71377900b5fd5584",
22-
"governanceProposerAddress": "0xef1b0d8aaca52f70323cbb91b0103bce75e9c533",
23-
"slashingProposerAddress": "0x1d78c05369d4fd947b90De0B7727737c19636d4D",
24-
"slashFactoryAddress": "0xd71673ec4b5d5b468cd48da855a66df0a02cdf3b",
25-
"gseAddress": "0xfb243b9112bb65785a4a8edaf32529accf003614",
28+
"rollupAddress": "0x0000000000000000000000000000000000000000",
29+
"governanceAddress": "0x0000000000000000000000000000000000000000",
30+
"governanceProposerAddress": "0x0000000000000000000000000000000000000000",
31+
"slashingProposerAddress": "0x0000000000000000000000000000000000000000",
32+
"gseAddress": "0x0000000000000000000000000000000000000000",
2633
"stakingRegistryAddress": "0xa65f52BD0889BbE7DF0cE14709865e3E3bDDbEEa",
27-
"registryAddress": "0x0000000000000000000000000000000000000000"
34+
"registryAddress": "0x0000000000000000000000000000000000000000",
35+
"_comment": "Discovered by `pnpm env:discover testnet` from the Aztec node (node_getL1ContractAddresses) plus Rollup.getSlasher()/Slasher.PROPOSER(). stakingRegistryAddress is not part of the Aztec core deployment and must be set by hand."
2836
},
2937
"collectors": {
3038
"validatorStats": {
@@ -56,7 +64,8 @@
5664
"ponder": {
5765
"port": 42069,
5866
"maxHealthcheckDuration": 240,
59-
"startBlock": 9500000
67+
"startBlock": 0,
68+
"_comment": "startBlock is set by `pnpm env:discover testnet` to the rollup contract deployment block."
6069
},
6170
"app": {
6271
"url": "https://testnet.dashtec.xyz",

.environment/testnet/config.json

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,27 @@
1111
"url": "redis://:dashtec@redis-testnet:6379"
1212
},
1313
"rpc": {
14-
"ethereumUrls": ""
14+
"ethereumUrls": "",
15+
"consensusUrls": ""
1516
},
16-
"sentinel": {
17-
"proxyUrl": ""
17+
"aztecNode": {
18+
"url": "http://aztec-node-testnet:8080",
19+
"image": "aztecprotocol/aztec:5.2.0@sha256:2dd0b84a5a42285762390e38f82a6ba737bfeba6e39df688af7f050dae81a3b0",
20+
"network": "testnet",
21+
"p2pPort": 40500,
22+
"syncMode": "snapshot",
23+
"sentinelHistoryLengthInEpochs": 24,
24+
"maxOldSpaceSizeMb": 4096,
25+
"memLimit": "6g"
1826
},
1927
"contracts": {
20-
"rollupAddress": "0xa0bfb1b494fb49041e5c6e8c2c1be09cd171c6ba",
21-
"governanceAddress": "0xcaf7447721447b22cd0076ac7c63877c3afd329f",
22-
"governanceProposerAddress": "0x01c7d4ca153748d2377968fef22894cb162e9480",
23-
"slashingProposerAddress": "0xf5Aa08D6F331Fed2a0F09229568D9A391D02d387",
24-
"slashFactoryAddress": "0x0",
25-
"gseAddress": "0xb6a38a51a6c1de9012f9d8ea9745ef957212eaac",
28+
"rollupAddress": "0x0000000000000000000000000000000000000000",
29+
"governanceAddress": "0x0000000000000000000000000000000000000000",
30+
"governanceProposerAddress": "0x0000000000000000000000000000000000000000",
31+
"slashingProposerAddress": "0x0000000000000000000000000000000000000000",
32+
"gseAddress": "0x0000000000000000000000000000000000000000",
2633
"stakingRegistryAddress": "0xC6EcC1832c8BF6a41c927BEb4E9ec610FBeDd1C2",
27-
"registryAddress": "0xa0bfb1b494fb49041e5c6e8c2c1be09cd171c6ba"
34+
"registryAddress": "0x0000000000000000000000000000000000000000"
2835
},
2936
"collectors": {
3037
"validatorStats": {
@@ -56,7 +63,7 @@
5663
"ponder": {
5764
"port": 42069,
5865
"maxHealthcheckDuration": 240,
59-
"startBlock": 9500000
66+
"startBlock": 0
6067
},
6168
"app": {
6269
"url": "https://testnet.dashtec.xyz",

.github/workflows/deploy.yml

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,17 @@ jobs:
2727
with:
2828
oauth-client-id: ${{ secrets.TS_OAUTH_CLIENT_ID }}
2929
oauth-secret: ${{ secrets.TS_OAUTH_SECRET }}
30-
# The tailnet ACL must allow `tag:ci` to SSH to the server's tag as
31-
# root with `action: accept` (not `check`, which needs interactivity).
32-
tags: tag:ci
30+
# `tag:dashtec-ci` must exist in the tailnet ACL's tagOwners, and the
31+
# ACL must allow it to SSH to `tag:dashtec` as root with
32+
# `action: accept` (not `check`, which needs a browser approval).
33+
# Both live in foundation-iac/rpc.aztec.foundation/tailscale.tf, which
34+
# owns the tailnet ACL singleton for the whole tailnet.
35+
#
36+
# This was `tag:ci`, which no tagOwner ever granted — the OAuth client
37+
# could not mint it, so this step failed on every run and the deploy
38+
# never reached Ansible. Renamed to match the `tag:eth-rpc-ci`
39+
# convention rather than claim a bare `tag:ci` in a shared tailnet.
40+
tags: tag:dashtec-ci
3341

3442
- name: Install Ansible
3543
run: pipx install --include-deps ansible
@@ -49,11 +57,15 @@ jobs:
4957
env:
5058
ANSIBLE_HOST_KEY_CHECKING: "False"
5159
# Per-network secrets injected into the committed config.json.
60+
# L1 execution RPC (Ponder, collectors, Aztec node) and L1 beacon API
61+
# (Aztec node only — it fetches the blobs carrying checkpoint data).
62+
# There is no *_SENTINEL_PROXY_URL any more: the dashboard now talks to
63+
# the Aztec node we run ourselves in docker-compose.
5264
MAINNET_ETHEREUM_RPC_URL: ${{ secrets.MAINNET_ETHEREUM_RPC_URL }}
53-
MAINNET_SENTINEL_PROXY_URL: ${{ secrets.MAINNET_SENTINEL_PROXY_URL }}
65+
MAINNET_L1_CONSENSUS_HOST_URLS: ${{ secrets.MAINNET_L1_CONSENSUS_HOST_URLS }}
5466
MAINNET_SESSION_PASSWORD: ${{ secrets.MAINNET_SESSION_PASSWORD }}
5567
TESTNET_ETHEREUM_RPC_URL: ${{ secrets.TESTNET_ETHEREUM_RPC_URL }}
56-
TESTNET_SENTINEL_PROXY_URL: ${{ secrets.TESTNET_SENTINEL_PROXY_URL }}
68+
TESTNET_L1_CONSENSUS_HOST_URLS: ${{ secrets.TESTNET_L1_CONSENSUS_HOST_URLS }}
5769
TESTNET_SESSION_PASSWORD: ${{ secrets.TESTNET_SESSION_PASSWORD }}
5870
# OAuth, shared across networks (one app each). IDs are public
5971
# (variables); secrets are sensitive.

README.md

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,15 @@ Blockchain --> Ponder Indexer --> Materializer --> PostgreSQL --> REST API --> D
99
^
1010
|
1111
Custom Collectors
12+
^
13+
|
14+
Aztec node (self-hosted, per network)
1215
```
1316

17+
dashtec runs its own Aztec node per network rather than depending on an external
18+
RPC. It serves the `node_*` methods the dashboard needs and is the source of
19+
truth for which L1 contracts to index — see [docs/aztec-node.md](docs/aztec-node.md).
20+
1421
## Project Structure
1522

1623
```
@@ -48,7 +55,12 @@ docker compose --profile mainnet up -d postgres-mainnet redis-mainnet
4855

4956
# Configure environment
5057
cp .environment/mainnet/config.example.json .environment/mainnet/config.json
51-
# Edit config.json with your RPC endpoints, contract addresses, etc.
58+
# Edit config.json: rpc.ethereumUrls (L1 execution) and rpc.consensusUrls (L1 beacon).
59+
# Leave contracts.* at their zero placeholders — the next step fills them in.
60+
61+
# Start our Aztec node, then discover the contract addresses from it
62+
docker compose --profile mainnet up -d --wait --wait-timeout 3600 aztec-node-mainnet
63+
pnpm env:discover mainnet
5264

5365
# Propagate config to all packages
5466
pnpm env:propagate mainnet
@@ -72,6 +84,7 @@ pnpm turbo typecheck # Typecheck everything
7284
pnpm db:generate # Generate Prisma client
7385
pnpm db:migrate # Run database migrations
7486
pnpm db:studio # Open Prisma Studio
87+
pnpm env:discover <mainnet|testnet> # Read contract addresses from the Aztec node
7588
pnpm env:propagate <mainnet|testnet> # Propagate env config to all packages
7689
pnpm --filter @dashtec/<pkg> dev # Dev a single package
7790
```

ansible/README.md

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,27 @@ the docker-compose lifecycle — lives here, so it's idempotent and re-runnable.
1818
| -------- | ------ |
1919
| `docker` | Install Docker Engine + compose plugin + git + jq (GPG-pinned apt repo) |
2020
| `repo` | Clone/update the repo at `repo_version` into `/opt/dashtec` (`force: true`, resetting the committed `config.json` to its clean, secret-free state) |
21-
| `config` | Assert secrets present, inject secrets into the committed `config.json` (via jq), run `env:propagate` (Node-only, via an ephemeral container), render the root `.env` |
22-
| `deploy` | `docker compose --profile <network> up -d --build` for each network |
21+
| `config` | Assert secrets present, inject secrets into the committed `config.json` (via jq), read it back, render the root `.env` |
22+
| `aztec_node` | Start `aztec-node-<network>` and wait for it to report healthy, then discover the Aztec V5 contract addresses and the rollup's deployment block from it into `config.json` |
23+
| `deploy` | Run `env:propagate` (Node-only, via an ephemeral container), then `docker compose --profile <network> up -d --build` for each network, then apply DB migrations |
2324

2425
### Config & secrets model
2526

2627
`.environment/<network>/config.json` is **committed** with all non-secret values
2728
(addresses, domains, in-cluster DB/Redis URLs, collector tuning) and **empty**
2829
secret fields. At deploy, the `config` role injects the secrets with `jq`, then
29-
`env:propagate` fans them into the package `.env` files. The root `.env`'s
30-
`NEXT_SENTINEL_URL` / `VALIDATOR_STATS_RPC_URL` (+ testnet) are set to
31-
`SENTINEL_PROXY_URL` (the Aztec node JSON-RPC endpoint). Never commit real secret
30+
the `aztec_node` role starts our own Aztec node and discovers the V5 contract
31+
addresses from it, and only then does `env:propagate` fan everything into the
32+
package `.env` files. The root `.env`'s `NEXT_SENTINEL_URL` /
33+
`VALIDATOR_STATS_RPC_URL` (+ testnet) point at that node
34+
(`http://aztec-node-<network>:8080`), and its `AZTEC_NODE_*` variables are what
35+
the node services in `docker-compose.yml` interpolate. Never commit real secret
3236
values into `config.json`.
3337

38+
Role order matters: `config` renders the root `.env` (so the node can start),
39+
`aztec_node` brings the node up and writes `contracts.*` + `ponder.startBlock`
40+
into `config.json`, `deploy` propagates and starts everything else.
41+
3442
## CI deployment (default)
3543

3644
Push to `main` (or run the workflow manually) triggers the deploy. The runner:
@@ -46,12 +54,12 @@ Push to `main` (or run the workflow manually) triggers the deploy. The runner:
4654
| ------ | ------- |
4755
| `TS_OAUTH_CLIENT_ID`, `TS_OAUTH_SECRET` | Tailscale OAuth client (tagged `tag:ci`) so the runner joins the tailnet |
4856
| `MAINNET_ETHEREUM_RPC_URL`, `TESTNET_ETHEREUM_RPC_URL` | L1 RPC URLs (contain API keys) → `rpc.ethereumUrls` |
49-
| `MAINNET_SENTINEL_PROXY_URL`, `TESTNET_SENTINEL_PROXY_URL` | Aztec node base URL`sentinel.proxyUrl` (also derives the root `.env` sentinel/RPC vars) |
57+
| `MAINNET_L1_CONSENSUS_HOST_URLS`, `TESTNET_L1_CONSENSUS_HOST_URLS` | L1 beacon-chain API URLs`rpc.consensusUrls`. Only the Aztec node uses these, to fetch the blobs carrying checkpoint data; an execution RPC will not do |
5058
| `MAINNET_SESSION_PASSWORD`, `TESTNET_SESSION_PASSWORD` | iron-session password (≥32 chars) |
5159
| `DISCORD_CLIENT_SECRET` | Discord OAuth secret — **shared across networks** (optional) |
5260
| `X_CLIENT_SECRET` | X OAuth secret — **shared across networks** (optional) |
5361

54-
> `ETHEREUM_RPC_URL`, `SENTINEL_PROXY_URL`, and `SESSION_PASSWORD` are required
62+
> `ETHEREUM_RPC_URL`, `L1_CONSENSUS_HOST_URLS`, and `SESSION_PASSWORD` are required
5563
> per active network; the OAuth secrets are shared and optional (auth is disabled
5664
> if empty). Register both `dashtec.xyz` and `testnet.dashtec.xyz` redirect URIs
5765
> on the single Discord/X app, and set the matching `clientId` in each network's
@@ -84,8 +92,8 @@ each with its corresponding `*_CLIENT_SECRET`.
8492
```bash
8593
cd ansible
8694
# inventory.ini is generated by `terraform apply`; or copy inventory.example.ini
87-
export MAINNET_ETHEREUM_RPC_URL=... MAINNET_SENTINEL_PROXY_URL=... MAINNET_SESSION_PASSWORD=...
88-
export TESTNET_ETHEREUM_RPC_URL=... TESTNET_SENTINEL_PROXY_URL=... TESTNET_SESSION_PASSWORD=...
95+
export MAINNET_ETHEREUM_RPC_URL=... MAINNET_L1_CONSENSUS_HOST_URLS=... MAINNET_SESSION_PASSWORD=...
96+
export TESTNET_ETHEREUM_RPC_URL=... TESTNET_L1_CONSENSUS_HOST_URLS=... TESTNET_SESSION_PASSWORD=...
8997
# optional: *_DISCORD_CLIENT_SECRET / *_X_CLIENT_SECRET
9098
ansible-playbook site.yml
9199
```

ansible/group_vars/all/vars.yml

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,30 @@ dashtec_networks:
1313

1414
# Per-network secrets, sourced from the environment (GitHub Actions Secrets in
1515
# CI, or `export`ed locally). These are injected into the committed config.json
16-
# at deploy time; NEXT_SENTINEL_URL / VALIDATOR_STATS_RPC_URL in the root .env
17-
# are set to sentinel_proxy_url (the Aztec node JSON-RPC endpoint).
16+
# at deploy time.
17+
#
18+
# ethereum_rpc_url is the L1 execution-layer RPC, used by Ponder, the custom
19+
# collectors, and the Aztec node. l1_consensus_urls is the L1 beacon-chain API;
20+
# only the Aztec node needs it, to fetch the blobs that carry checkpoint data.
21+
#
22+
# There is no longer a sentinel_proxy_url: NEXT_SENTINEL_URL and
23+
# VALIDATOR_STATS_RPC_URL now point at our own aztec-node-<network> container
24+
# (see .environment/<network>/config.json -> aztecNode.url).
1825
network_secrets:
1926
mainnet:
2027
ethereum_rpc_url: "{{ lookup('env', 'MAINNET_ETHEREUM_RPC_URL') }}"
21-
sentinel_proxy_url: "{{ lookup('env', 'MAINNET_SENTINEL_PROXY_URL') }}"
28+
l1_consensus_urls: "{{ lookup('env', 'MAINNET_L1_CONSENSUS_HOST_URLS') }}"
2229
session_password: "{{ lookup('env', 'MAINNET_SESSION_PASSWORD') }}"
2330
testnet:
2431
ethereum_rpc_url: "{{ lookup('env', 'TESTNET_ETHEREUM_RPC_URL') }}"
25-
sentinel_proxy_url: "{{ lookup('env', 'TESTNET_SENTINEL_PROXY_URL') }}"
32+
l1_consensus_urls: "{{ lookup('env', 'TESTNET_L1_CONSENSUS_HOST_URLS') }}"
2633
session_password: "{{ lookup('env', 'TESTNET_SESSION_PASSWORD') }}"
2734

35+
# How long to wait for a node to answer /status before giving up on contract
36+
# discovery. A first boot restores from a snapshot and then catches up to the
37+
# chain tip, which is far slower than a restart with a warm data volume.
38+
aztec_node_ready_timeout_seconds: 3600
39+
2840
# OAuth config is shared across networks (one Discord/X app with both redirect
2941
# URIs registered). Optional — auth is disabled if empty. Client IDs are public
3042
# (GitHub Actions *variables*); client secrets are sensitive (Actions *secrets*).

0 commit comments

Comments
 (0)