-
Notifications
You must be signed in to change notification settings - Fork 622
feat(permissionless batches): batch production toolkit and operator recovery #1555
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Draft
jonastheis
wants to merge
133
commits into
develop
Choose a base branch
from
jt/permissionless-batches-recovery
base: develop
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
Changes from all commits
Commits
Show all changes
133 commits
Select commit
Hold shift + click to select a range
dca69ce
implement first steps for minimal recovery to permissionlessly produc…
jonastheis 2e09118
Merge remote-tracking branch 'origin/develop' into jt/permissionless-…
jonastheis 496314f
add config for recovery mode
jonastheis c12d380
structure code and implement restoreMinimalPreviousState and fetchL2B…
jonastheis c329959
produce chunks from specified L2 blocks and batch from chunks
jonastheis 71f240b
start implementation of restoring full previous state for relayer
jonastheis acc7083
implement processFinalizedBatch
jonastheis 59ea991
handle batches
jonastheis 2df07a9
introduce ForceL1MessageCount to config to be able to set a custom L1…
jonastheis 0f5ebf3
add Dockerfile for relayer in permissionless batches mode
jonastheis f96af8e
add docker compose file to spin up all necessary services together
jonastheis 16a471d
move docker file to build/dockerfiles
jonastheis d25094b
add coordinator-cron and proving-service-bundle
jonastheis 603feed
add bundle creation
jonastheis 5ddd6d6
add permissionless-batches/conf/ to dockerignore files
jonastheis 5ff6fd0
refactor cmd/permissionless_batches/app
jonastheis 0108873
implement RecoveryNeeded functionality to allow re-running without ov…
jonastheis a6f914a
refactor cmd/rollup_relayer/app and split into FullRecovery struct
jonastheis 0123502
clean up
jonastheis 596d9fe
introduce profiles to docker-compose.yml
jonastheis d85bdf5
initial instructions in README.md
jonastheis a9eac08
address review comments
jonastheis 606162e
add dummy configuration and documentation for permissionless batch pr…
jonastheis 30c0201
ignore /conf folder from git
jonastheis ec9d862
add documentation for operator recovery
jonastheis 6ef4775
address review comments
jonastheis 41606fe
support first version of CodecV6 in relayer and add functionality to …
jonastheis 0c0c417
adjust Sender to support multiple blobs when sending a transaction
jonastheis 78c9963
implement batch submission of multiple batches per transaction and co…
jonastheis 940fde0
implement missing part of commit logic for CodecV6
jonastheis ca8d930
feat(rollup-relayer): add Euclid support
omerfirmak 421afe9
deprecate halo2 provers, start openvm prover
omerfirmak b460d4a
Merge remote-tracking branch 'origin/omerfirmak/mpt' into feat/use-co…
jonastheis 182f8e3
update go.mod to latest da-codec version V7
jonastheis 783b965
update go.mod to latest da-codec version V7
jonastheis 5a479c3
address review comments
jonastheis 310abdd
add InitialL1MessageQueueHash and LastL1MessageQueueHash to chunk and…
jonastheis 2efbbd7
add support for bundles with CodecV7
jonastheis e713424
update contextIDFromBatches prefix to v7
jonastheis f4e17bc
fix ci
jonastheis 99c0a9f
update to latest da-codec
jonastheis 8db5339
fix issues with chunks when handling CodecV7
jonastheis 69a80d4
add testCommitBatchAndFinalizeBundleCodecV7 for relayer
jonastheis 5f22950
feat(prover): euclid prover first draft
omerfirmak 9412c7f
feat(coordinator): abstract proof types behind an interface
omerfirmak c3a3bad
feat(rollup-relayer): add Euclid support
omerfirmak 2de45f0
feat(coordinator): add euclid proof types
omerfirmak f01af24
fix: potentially flaky testResubmitZeroGasPriceTransaction
omerfirmak 2bd0655
feat: Add Euclid verifier
omerfirmak 848d3a6
fix: re-enable supported forks check
omerfirmak e5ad9c6
feat: allow stopping fake finalization at fork boundary
omerfirmak b424cef
feat: add CPU prover dockerfile
omerfirmak ac17696
feat: update contracts to euclid version
omerfirmak d503d4a
fix: base64 encode VKs
omerfirmak bf08436
fix: prover using wrong resources for batch/bundle circuits
omerfirmak 83c73f8
fix: coordinator ignore euclid transition chunk
omerfirmak d3acd6b
adjust to recent CodecV7 changes. remove initialL1MessageQueueIndex a…
jonastheis f13863e
Merge remote-tracking branch 'origin/omerfirmak/euclid-prover' into f…
jonastheis 8b57dd6
fixes after merge
jonastheis 37924b0
feat: bump zkvm-prover to rc4
omerfirmak fbc14ac
address review comments
jonastheis 867fda6
fix: add batch tasks details for v6 codec
omerfirmak 2e9827a
fix: properly propagate verifier errors
omerfirmak 01fa3b3
feat: use verifier-only types in coordinator
omerfirmak 50ebf17
fix: generate evm proofs for bundles
omerfirmak e1a0bab
add new contract ABI and adjust submission to it
jonastheis bb9d404
fix: force byte arrays to be marshaled as JSON arrays
omerfirmak 0125dd6
add new contract ABI
jonastheis 121ce09
update config and adjust to new contract ABI
jonastheis ed394a6
make sure that all batches committed in the same tx are part of the s…
jonastheis a55de1f
feat: set code tx support (#1600)
colinlyguo 89ede0d
build rollup images with --platform=linux/amd64
jonastheis 782e019
Merge branch 'feat/use-codec-v6' of github.com:scroll-tech/scroll int…
jonastheis 081d289
update da-codec dependency
jonastheis 47a6c23
fix bug where chunk and batch blocks mismatch
jonastheis eb5758b
feat: bump to zkvm-prover rc5
roynalnaruto 7353f30
update l2geth version in go.mod
jonastheis 673777f
use go 1.22 in Dockerfile builder
jonastheis 554a233
refactor: move euclid prover to new subdir
omerfirmak e27ab5a
Merge remote-tracking branch 'origin/develop' into omerfirmak/euclid-…
omerfirmak 26a49cb
Merge remote-tracking branch 'origin/omerfirmak/euclid-prover' into f…
jonastheis 8ea4315
update go.work.sum
jonastheis 55b32e1
add debug log message
jonastheis d6674e8
add configuration parameter maxChunksPerBatch for batch proposer
jonastheis a1c4562
add configuration parameter maxChunksPerBatch for batch proposer
jonastheis c8b614f
unit tests fix
colinlyguo f91c999
fix batch proposer panic
Thegaram 82dd5e0
feat(bridge-history): support codecv7
colinlyguo 4333d51
Revert "feat(bridge-history): support codecv7"
colinlyguo b30f4d0
chore(zkvm-circuit): upgrade to 0.1.0-rc.6 (#1610)
colinlyguo 03c63a6
update batch/chunk details for phase2
omerfirmak 9f4c9ee
fix: prover version (#1611)
yiweichi 101cc46
update dependencies
colinlyguo a868bc1
simplify version checks
colinlyguo 8b08a57
Revert "simplify version checks"
colinlyguo f1ea4b3
process task with CodecV7, add check for BlobDataProof length and add…
jonastheis b7e7d1a
Merge remote-tracking branch 'origin/omerfirmak/euclid-prover' into f…
jonastheis 94bee19
feat(bridge-history): support codecv7 (#1609)
colinlyguo f27ddb7
remove debug line
jonastheis da96331
tweak comments and some renamings
colinlyguo d79aaef
fix CI
jonastheis ab7038c
Merge branch 'feat/use-codec-v6' of github.com:scroll-tech/scroll int…
jonastheis 47219f2
run goimports
jonastheis 95adcc3
fix tests
jonastheis 224546e
add new ABI and add more tests
jonastheis 0799dd4
fix linter
jonastheis 7a70e37
fix test
jonastheis 57d50b7
Merge branch 'develop' into omerfirmak/euclid-prover
omerfirmak 20dffe4
chore: auto version bump [bot]
omerfirmak 867307d
Merge remote-tracking branch 'origin/omerfirmak/euclid-prover' into f…
jonastheis c9f6e8c
Merge remote-tracking branch 'origin/develop' into feat/use-codec-v6
jonastheis 9b462e4
go mod tidy
jonastheis d57e6b0
chore: auto version bump [bot]
jonastheis 4d677b3
address review comments
jonastheis 90d1563
Merge remote-tracking branch 'origin/develop' into feat/use-codec-v6
jonastheis d987931
go mod tidy
jonastheis 38b3239
chore: auto version bump [bot]
jonastheis e99a851
Merge branch 'feat/use-codec-v6' of github.com:scroll-tech/scroll int…
jonastheis bb6ee2c
Merge branch 'develop' into feat/use-codec-v6
jonastheis 2d84478
Merge remote-tracking branch 'origin/feat/use-codec-v6' into jt/permi…
jonastheis a8511d5
adjust minimal recovery to changes from CodecV7
jonastheis a16b906
add submission of permissionless batch
jonastheis 942f883
Merge remote-tracking branch 'origin/develop' into jt/permissionless-…
jonastheis 495921c
Merge remote-tracking branch 'origin/develop' into jt/permissionless-…
jonastheis 6414767
update da-codec to latest version
jonastheis 596fabf
update l2geth to latest version
jonastheis 81df41c
add better error handling and wait for transaction confirmation
jonastheis c2152b1
fix issue with replaced l2geth dependency
jonastheis 8009bd1
Merge branch 'develop' into jt/permissionless-batches-recovery
yiweichi 9d54bc2
Merge branch 'develop' into jt/permissionless-batches-recovery
yiweichi ac3305c
Merge branch 'develop' into jt/permissionless-batches-recovery
yiweichi 9d09283
morty/permissionless batches recovery (#1639)
yiweichi d3d5f1f
Merge branch 'develop' into jt/permissionless-batches-recovery
jonastheis File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,3 +4,5 @@ docs/ | |
l2geth/ | ||
rpc-gateway/ | ||
*target/* | ||
|
||
permissionless-batches/conf/ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,3 +4,5 @@ docs/ | |
l2geth/ | ||
rpc-gateway/ | ||
*target/* | ||
|
||
permissionless-batches/conf/ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,3 +4,5 @@ docs/ | |
l2geth/ | ||
rpc-gateway/ | ||
*target/* | ||
|
||
permissionless-batches/conf/ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,8 @@ | ||
assets/ | ||
contracts/ | ||
docs/ | ||
l2geth/ | ||
rpc-gateway/ | ||
*target/* | ||
*target/* | ||
|
||
permissionless-batches/conf/ |
30 changes: 30 additions & 0 deletions
30
build/dockerfiles/recovery_permissionless_batches.Dockerfile
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
# Download Go dependencies | ||
FROM scrolltech/go-rust-builder:go-1.21-rust-nightly-2023-12-03 as base | ||
|
||
WORKDIR /src | ||
COPY go.work* ./ | ||
COPY ./rollup/go.* ./rollup/ | ||
COPY ./common/go.* ./common/ | ||
COPY ./coordinator/go.* ./coordinator/ | ||
COPY ./database/go.* ./database/ | ||
COPY ./tests/integration-test/go.* ./tests/integration-test/ | ||
COPY ./bridge-history-api/go.* ./bridge-history-api/ | ||
RUN go mod download -x | ||
|
||
# Build rollup_relayer | ||
FROM base as builder | ||
|
||
RUN --mount=target=. \ | ||
--mount=type=cache,target=/root/.cache/go-build \ | ||
cd /src/rollup/cmd/permissionless_batches/ && CGO_LDFLAGS="-ldl" go build -v -p 4 -o /bin/rollup_relayer | ||
|
||
# Pull rollup_relayer into a second stage deploy ubuntu container | ||
FROM ubuntu:20.04 | ||
|
||
RUN apt update && apt install vim netcat-openbsd net-tools curl ca-certificates -y | ||
|
||
ENV CGO_LDFLAGS="-ldl" | ||
|
||
COPY --from=builder /bin/rollup_relayer /bin/ | ||
WORKDIR /app | ||
ENTRYPOINT ["rollup_relayer"] |
8 changes: 8 additions & 0 deletions
8
build/dockerfiles/recovery_permissionless_batches.Dockerfile.dockerignore
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
assets/ | ||
contracts/ | ||
docs/ | ||
l2geth/ | ||
rpc-gateway/ | ||
*target/* | ||
|
||
permissionless-batches/conf/ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,8 @@ | ||
assets/ | ||
contracts/ | ||
docs/ | ||
l2geth/ | ||
rpc-gateway/ | ||
*target/* | ||
*target/* | ||
|
||
permissionless-batches/conf/ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Empty file.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
.PHONY: batch-production-submission launch_local_prover launch_cloud_prover psql check_proving_status | ||
|
||
export SCROLL_ZKVM_VERSION=0.3.0 | ||
PG_URL=postgres://postgres@localhost:5432/scroll | ||
|
||
batch_production_submission: | ||
docker compose --profile batch-production-submission up | ||
|
||
local_prover: | ||
docker compose --profile local-prover up -d | ||
|
||
cloud_prover: | ||
docker compose --profile cloud-prover up | ||
|
||
psql: | ||
psql 'postgres://postgres@localhost:5432/scroll' | ||
|
||
check_proving_status: | ||
@echo "Checking proving status..." | ||
@result=$$(psql "${PG_URL}" -t -c "SELECT proving_status = 4 AS is_status_success FROM batch ORDER BY index LIMIT 1;" | tr -d '[:space:]'); \ | ||
if [ "$$result" = "t" ]; then \ | ||
echo "✅ Prove succeeded! You're ready to submit permissionless batch and proof!"; \ | ||
else \ | ||
echo "Proof is not ready..."; \ | ||
fi |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,186 @@ | ||
# Permissionless Batches | ||
Permissionless batches aka enforced batches is a feature that provides guarantee to users that they can exit Scroll even if the operator is down or censoring. | ||
It allows anyone to take over and submit a batch (permissionless batch submission) together with a proof after a certain time period has passed without a batch being finalized on L1. | ||
|
||
Once permissionless batch mode is activated, the operator can no longer submit batches in a permissioned way. Only the security council can deactivate permissionless batch mode and reinstate the operator as the only batch submitter. | ||
There are two types of situations to consider: | ||
- `Permissionless batch mode is activated:` This means that finalization halted for some time. Now anyone can submit batches utilizing the [batch production toolkit](#batch-production-toolkit). | ||
- `Permissionless batch mode is deactivated:` This means that the security council has decided to reinstate the operator as the only batch submitter. The operator needs to [recover](#operator-recovery) the sequencer and relayer to resume batch submission and the valid L2 chain. | ||
|
||
|
||
## Batch production toolkit | ||
The batch production toolkit is a set of tools that allow anyone to submit a batch in permissionless mode. It consists of three main components: | ||
1. l2geth state recovery from L1 | ||
2. l2geth block production | ||
3. production, proving and submission of batch with `docker-compose.yml` | ||
|
||
### Prerequisites | ||
- Unix-like OS, 32GB RAM | ||
- Docker | ||
- [l2geth](https://github.com/scroll-tech/go-ethereum/) or [Docker image](https://hub.docker.com/r/scrolltech/l2geth) of corresponding version [TODO link list with versions](#batch-production-toolkit). | ||
- access to an Ethereum L1 RPC node (beacon node and execution client) | ||
- ability to run a prover or access to a proving service (e.g. Sindri) | ||
- L1 account with funds to pay for the batch submission | ||
|
||
### 1. l2geth state recovery from L1 | ||
Once permissionless mode is activated there's no blocks being produced and propagated on L2. The first step is to recover the latest state of the L2 chain from L1. This is done by running l2geth in recovery mode. | ||
More information about l2geth recovery (aka L1 follower mode) can be found [here TODO: put correct link once released](https://github.com/scroll-tech/scroll-documentation/pull/374). | ||
|
||
Running l2geth in recovery mode requires following configuration: | ||
- `--scroll` or `--scroll-sepolia` - enables Scroll Mainnet or Sepolia mode | ||
- `--da.blob.beaconnode` - L1 RPC beacon node | ||
- `--l1.endpoint` - L1 RPC execution client | ||
- `--da.sync=true` - enables syncing with L1 | ||
- `--da.recovery` - enables recovery mode | ||
- `--da.recovery.initiall1block` - initial L1 block (commit tx of initial batch) | ||
- `--da.recovery.initialbatch` - batch where to start recovery from. Can be found on [Scrollscan Explorer](https://scrollscan.com/batches). | ||
- `--da.recovery.l2endblock` - until which L2 block recovery should run (optional) | ||
|
||
```bash | ||
./build/bin/geth --scroll<-sepolia> \ | ||
--datadir "tmp/datadir" \ | ||
--gcmode archive \ | ||
--http --http.addr "0.0.0.0" --http.port 8545 --http.api "eth,net,web3,debug,scroll" --http.vhosts "*" \ | ||
--da.blob.beaconnode "<L1 RPC beacon node>" \ | ||
--l1.endpoint "<L1 RPC execution client>" \ | ||
--da.sync=true --da.recovery --da.recovery.initiall1block "<initial L1 block (commit tx of initial batch)>" --da.recovery.initialbatch "<batch where to start recovery from>" --da.recovery.l2endblock "<until which L2 block recovery should run (optional)>" \ | ||
--verbosity 3 | ||
``` | ||
|
||
### 2. l2geth block production | ||
After the state is recovered, the next step is to produce blocks on L2. This is done by running l2geth in block production mode. | ||
As a prerequisite, the state recovery must be completed and the latest state of the L2 chain must be available. | ||
|
||
You also need to generate a keystore e.g. with [Clef](https://geth.ethereum.org/docs/fundamentals/account-management) to be able to sign blocks. | ||
This key is not used for any funds, but required for block production to work. Once you generated blocks you can safely discard it. | ||
|
||
Running l2geth in block production mode requires following configuration: | ||
- `--scroll` or `--scroll-sepolia` - enables Scroll Mainnet or Sepolia mode | ||
- `--da.blob.beaconnode` - L1 RPC beacon node | ||
- `--l1.endpoint` - L1 RPC execution client | ||
- `--da.sync=true` - enables syncing with L1 | ||
- `--da.recovery` - enables recovery mode | ||
- `--da.recovery.produceblocks` - enables block production | ||
- `--miner.etherbase '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' --mine` - enables mining. the address is not used, but required for mining to work | ||
- `---miner.gaslimit 1 --miner.gasprice 1 --miner.maxaccountsnum 100 --rpc.gascap 0 --gpo.ignoreprice 1` - gas limits for block production | ||
|
||
```bash | ||
./build/bin/geth --scroll<-sepolia> \ | ||
--datadir "tmp/datadir" \ | ||
--gcmode archive \ | ||
--http --http.addr "0.0.0.0" --http.port 8545 --http.api "eth,net,web3,debug,scroll" --http.vhosts "*" \ | ||
--da.blob.beaconnode "<L1 RPC beacon node>" \ | ||
--l1.endpoint "<L1 RPC execution client>" \ | ||
--da.sync=true --da.recovery --da.recovery.produceblocks \ | ||
--miner.gaslimit 1 --miner.gasprice 1 --miner.maxaccountsnum 100 --rpc.gascap 0 --gpo.ignoreprice 1 \ | ||
--miner.etherbase '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' --mine \ | ||
--ccc \ | ||
--verbosity 3 | ||
``` | ||
|
||
### 3. production, proving and submission of batch with `docker-compose.yml` | ||
After the blocks are produced, the next step is to produce a batch, prove it and submit it to L1. This is done by running the `docker-compose.yml` in the `permissionless-batches` folder. | ||
|
||
|
||
#### Producing a batch | ||
To produce a batch you need to run the `batch-production-submission` profile in `docker-compose.yml`. | ||
|
||
1. Fill `conf/genesis.json` with the latest genesis state from the L2 chain. The genesis for the current fork can be found here: [TODO link list with versions](#batch-production-toolkit) | ||
2. Make sure that `l2geth` with your locally produced blocks is running and reachable from the Docker network (e.g. `http://host.docker.internal:8545`) | ||
3. Fill in required fields in `conf/relayer/config.json` | ||
|
||
|
||
Run with `make batch_production_submission`. | ||
This will produce chunks, a batch and bundle which will be proven in the next step. | ||
`Success! You're ready to generate proofs!` indicates that everything is working correctly and the batch is ready to be proven. | ||
|
||
#### Proving a batch | ||
To prove the chunk, batch and bundle you just generated you need to run the `local-prover` or `cloud-prover` profile in `docker-compose.yml`. | ||
|
||
Local Proving: | ||
|
||
1. Hardware spec for local prover: CPU: 36+ core, 128G memory GPU: 24G memory (eg. Rtx 3090/3090Ti/4090/A10/L4) | ||
2. Make sure `verifier` `low_version_circuit` and `high_version_circuit` in `conf/coordinator/config.json` are correct for the latest fork: [TODO link list with versions](#batch-production-toolkit) | ||
2. Set the `SCROLL_ZKVM_VERSION` environment variable on `Makefile` to the correct version. [TODO link list with versions](#batch-production-toolkit) | ||
4. Fill in the required fields in `conf/proving-service/local-prover/config.json` | ||
|
||
Run with `make local_prover`. | ||
|
||
Cloud Proving(not supported yet): | ||
|
||
1. Make sure `verifier` `low_version_circuit` and `high_version_circuit` in `conf/coordinator/config.json` are correct for the latest fork: [TODO link list with versions](#batch-production-toolkit) | ||
2. Set the `SCROLL_ZKVM_VERSION` environment variable on `Makefile` to the correct version. [TODO link list with versions](#batch-production-toolkit) | ||
3. Fill in the required fields in `conf/proving-service/cloud-prover/config.json`. It is recommended to use Sindri. You'll need to obtain credits and an API key from their [website](https://sindri.app/). | ||
|
||
Run with `make cloud_prover`. | ||
|
||
This will prove chunks, the batch and bundle. | ||
Run `make check_proving_status` | ||
`Success! You're ready to submit permissionless batch and proof!` indicates that everything is working correctly and the batch is ready to be submit. | ||
|
||
|
||
#### Batch submission | ||
To submit the batch you need to run the `batch-production-submission` profile in `docker-compose.yml`. | ||
|
||
1. Fill in required fields in `conf/relayer/config.json` for the sender config. | ||
|
||
Run with `make batch_production_submission`. | ||
This will submit the batch to L1 and finalize it. The transaction will be retried in case of failure. | ||
|
||
**Troubleshooting** | ||
- in case the submission fails it will print the calldata for the transaction in an error message. You can use this with `cast call --trace --rpc-url "$SCROLL_L1_DEPLOYMENT_RPC" "$L1_SCROLL_CHAIN_PROXY_ADDR" <calldata>` to see what went wrong. | ||
- `0x4df567b9: ErrorNotInEnforcedBatchMode`: permissionless batch mode is not activated, you can't submit a batch | ||
- `0xa5d305cc: ErrorBatchIsEmpty`: no blob was provided. This is usually returned if you do the `cast call`, permissionless mode is activated but you didn't provide a blob in the transaction. | ||
|
||
## Operator recovery | ||
Operator recovery needs to be run by the rollup operator to resume normal rollup operation after permissionless batch mode is deactivated. It consists of two main components: | ||
1. l2geth recovery | ||
2. Relayer recovery | ||
|
||
These steps are required to resume permissioned batch submission and the valid L2 chain. They will restore the entire history of the batches submitted during permissionless mode. | ||
|
||
### Prerequisites | ||
- l2geth with the latest state of the L2 chain (before permissionless mode was activated) | ||
- signer key for the sequencer according to Clique consensus | ||
- relayer and coordinator are set up, running and up-to-date with the latest state of the L2 chain (before permissionless mode was activated) | ||
|
||
### l2geth recovery | ||
Running l2geth in recovery mode requires following configuration: | ||
- `--scroll` or `--scroll-sepolia` - enables Scroll Mainnet or Sepolia mode | ||
- `--da.blob.beaconnode` - L1 RPC beacon node | ||
- `--l1.endpoint` - L1 RPC execution client | ||
- `--da.sync=true` - enables syncing with L1 | ||
- `--da.recovery` - enables recovery mode | ||
- `--da.recovery.signblocks` - enables signing blocks with the sequencer and configured key | ||
- `--da.recovery.initiall1block` - initial L1 block (commit tx of initial batch) | ||
- `--da.recovery.initialbatch` - batch where to start recovery from. Can be found on [Scrollscan Explorer](https://scrollscan.com/batches). | ||
- `--da.recovery.l2endblock` - until which L2 block recovery should run (optional) | ||
|
||
```bash | ||
./build/bin/geth --scroll<-sepolia> \ | ||
--datadir "tmp/datadir" \ | ||
--gcmode archive \ | ||
--http --http.addr "0.0.0.0" --http.port 8545 --http.api "eth,net,web3,debug,scroll" --http.vhosts "*" \ | ||
--da.blob.beaconnode "<L1 RPC beacon node>" \ | ||
--l1.endpoint "<L1 RPC execution client>" \ | ||
--da.sync=true --da.recovery --da.recovery.signblocks --da.recovery.initiall1block "<initial L1 block (commit tx of initial batch)>" --da.recovery.initialbatch "<batch where to start recovery from>" --da.recovery.l2endblock "<until which L2 block recovery should run (optional)>" \ | ||
--verbosity 3 | ||
``` | ||
|
||
After the recovery is finished, start the sequencer in normal operation and continue issuing L2 blocks as normal. This will resume the L2 chain, allow the relayer (after running recovery) to create new batches and allow other L2 follower nodes to sync up the valid and signed L2 chain. | ||
|
||
### Relayer recovery | ||
Start the relayer with the following additional top-level configuration: | ||
``` | ||
"recovery_config": { | ||
"enable": true | ||
} | ||
``` | ||
|
||
This will make the relayer recover all the chunks, batches and bundles that were submitted during permissionless mode. These batches are marked automatically as proven and finalized. | ||
Once this process is finished, start the relayer normally without the recovery config to resume normal operation. | ||
``` | ||
"recovery_config": { | ||
"enable": false | ||
} | ||
``` |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
{ | ||
"prover_manager": { | ||
"provers_per_session": 1, | ||
"session_attempts": 100, | ||
"chunk_collection_time_sec": 36000, | ||
"batch_collection_time_sec": 2700, | ||
"bundle_collection_time_sec": 2700, | ||
"verifier": { | ||
"mock_mode": false, | ||
"low_version_circuit" : { | ||
"fork_name": "darwinV2", | ||
"params_path": "/verifier/params", | ||
"assets_path": "/verifier/assets", | ||
"min_prover_version": "v4.4.56" | ||
}, | ||
"high_version_circuit" : { | ||
"fork_name": "euclid", | ||
"assets_path": "/verifier/openvm/verifier", | ||
"min_prover_version": "v4.5.7" | ||
} | ||
} | ||
}, | ||
"db": { | ||
"driver_name": "postgres", | ||
"dsn": "postgres://db/scroll?sslmode=disable&user=postgres", | ||
yiweichi marked this conversation as resolved.
Show resolved
Hide resolved
|
||
"maxOpenNum": 200, | ||
"maxIdleNum": 20 | ||
}, | ||
"l2": { | ||
"chain_id": 333333 | ||
}, | ||
"auth": { | ||
"secret": "e788b62d39254928a821ac1c76b274a8c835aa1e20ecfb6f50eb10e87847de44", | ||
"challenge_expire_duration_sec": 10, | ||
"login_expire_duration_sec": 3600 | ||
} | ||
} |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Stray
--ccc
flag looks accidentalThe sample command includes
--ccc
, which does not exist in l2geth; this will cause the node to abort on unknown flag. Please drop or replace with the intended option.