From 6fc47983a881fd89e1d96cba094ab13ad6d8d273 Mon Sep 17 00:00:00 2001 From: Danil Date: Thu, 29 Feb 2024 15:21:29 +0100 Subject: [PATCH 01/65] add base path to constants Signed-off-by: Danil --- etc/test_config/constant/eth.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/etc/test_config/constant/eth.json b/etc/test_config/constant/eth.json index 624e605e3c2..0b464bafc03 100644 --- a/etc/test_config/constant/eth.json +++ b/etc/test_config/constant/eth.json @@ -1,5 +1,6 @@ { "web3_url": "http://127.0.0.1:8545", "test_mnemonic": "stuff slice staff easily soup parent arm payment cotton trade scatter struggle", - "mnemonic": "fine music test violin matrix prize squirrel panther purchase material script deal" + "mnemonic": "fine music test violin matrix prize squirrel panther purchase material script deal", + "base_path": "m/44'/60'/0'/0" } From 63f8812c47b6a8c97b772d89777e0f6034417368 Mon Sep 17 00:00:00 2001 From: Danil Date: Fri, 8 Mar 2024 20:54:24 +0100 Subject: [PATCH 02/65] Use reth instead of geth Signed-off-by: Danil --- contracts | 2 +- .../tests/custom-erc20-bridge.test.ts | 4 +- docker-compose.yml | 141 +++++------------- etc/env/base/eth_client.toml | 2 +- etc/test_config/constant/eth.json | 4 +- infrastructure/zk/src/init.ts | 5 +- infrastructure/zk/src/up.ts | 9 +- 7 files changed, 55 insertions(+), 112 deletions(-) diff --git a/contracts b/contracts index d85a73a1eeb..def54290e4b 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit d85a73a1eeb5557343b7b44c6543aaf391d8b984 +Subproject commit def54290e4bf252efe6cc27033486a76b29ac381 diff --git a/core/tests/ts-integration/tests/custom-erc20-bridge.test.ts b/core/tests/ts-integration/tests/custom-erc20-bridge.test.ts index e3c517c9ba3..88642fb7c92 100644 --- a/core/tests/ts-integration/tests/custom-erc20-bridge.test.ts +++ b/core/tests/ts-integration/tests/custom-erc20-bridge.test.ts @@ -41,11 +41,11 @@ describe('Tests for the custom bridge behavior', () => { const gasPrice = await scaledGasPrice(alice); let l1Bridge = await l1bridgeFactory.deploy(process.env.CONTRACTS_DIAMOND_PROXY_ADDR!); - await l1Bridge.deployTransaction.wait(2); + await l1Bridge.deployTransaction.wait(); let l1BridgeProxyFactory = new TransparentUpgradeableProxyFactory(alice._signerL1()); let l1BridgeProxy = await l1BridgeProxyFactory.deploy(l1Bridge.address, bob.address, '0x'); const amount = 1000; // 1000 wei is enough. - await l1BridgeProxy.deployTransaction.wait(2); + await l1BridgeProxy.deployTransaction.wait(); const isLocalSetup = process.env.ZKSYNC_LOCAL_SETUP; const baseCommandL1 = isLocalSetup diff --git a/docker-compose.yml b/docker-compose.yml index 9ccd9e44cd9..2c6779b0edd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,107 +1,48 @@ version: '3.2' services: - create-beacon-chain-genesis: - image: "gcr.io/prysmaticlabs/prysm/cmd/prysmctl:HEAD-c6801d" - command: - - testnet - - generate-genesis - - --fork=deneb - - --num-validators=64 - - --genesis-time-delay=5 - - --output-ssz=/consensus/genesis.ssz - - --chain-config-file=/prysm/config.yml - - --geth-genesis-json-in=/geth/standard-dev.json - - --geth-genesis-json-out=/execution/genesis.json +# geth: +# image: "ethereum/client-go:v1.13.5" +# ports: +# - 8551:8551 +# - 8545:8545 +# - 8546:8546 +# volumes: +# - ./volumes/geth:/var/lib/geth/data +# - ./docker/geth/:/geth/:ro +# command: +# - --networkid=9 +# - --datadir=/var/lib/geth/data +# - --http +# - --http.api=engine,eth,web3,personal,net,debug +# - --http.addr=0.0.0.0 +# - --http.corsdomain=* +# - --http.vhosts=* +# - --ws +# - --ws.addr=0.0.0.0 +# - --ws.port=8546 +# - --ws.origins=* +# - --nodiscover +# - --authrpc.addr=0.0.0.0 +# - --authrpc.vhosts=* +# - --authrpc.jwtsecret=/var/lib/geth/data/jwtsecret +# - --allow-insecure-unlock +# - --unlock=0x8a91dc2d28b689474298d91899f0c1baf62cb85b +# - --password=/var/lib/geth/data/password.sec +# - --syncmode=full + reth: + restart: always + image: "ghcr.io/paradigmxyz/reth:v0.1.0-alpha.21" volumes: - - ./docker/geth:/geth/:ro - - ./docker/prysm:/prysm/:ro - - ./volumes/geth:/execution - - ./volumes/prysm:/consensus - geth-genesis: - image: "ethereum/client-go:v1.13.5" - command: --datadir=/execution init /execution/genesis.json - volumes: - - ./volumes/geth:/execution - depends_on: - create-beacon-chain-genesis: - condition: service_completed_successfully - geth: - image: "ethereum/client-go:v1.13.5" - ports: - - 8551:8551 - - 8545:8545 - - 8546:8546 - volumes: - - ./volumes/geth:/var/lib/geth/data - - ./docker/geth/:/geth/:ro - command: - - --networkid=9 - - --datadir=/var/lib/geth/data - - --http - - --http.api=engine,eth,web3,personal,net,debug - - --http.addr=0.0.0.0 - - --http.corsdomain=* - - --http.vhosts=* - - --ws - - --ws.addr=0.0.0.0 - - --ws.port=8546 - - --ws.origins=* - - --nodiscover - - --authrpc.addr=0.0.0.0 - - --authrpc.vhosts=* - - --authrpc.jwtsecret=/var/lib/geth/data/jwtsecret - - --allow-insecure-unlock - - --unlock=0x8a91dc2d28b689474298d91899f0c1baf62cb85b - - --password=/var/lib/geth/data/password.sec - - --syncmode=full - depends_on: - beacon: - condition: service_started - geth-genesis: - condition: service_completed_successfully - beacon: - image: "gcr.io/prysmaticlabs/prysm/beacon-chain:HEAD-c6801d" - command: - - --datadir=/consensus/beacon/ - - --min-sync-peers=0 - - --genesis-state=/consensus/genesis.ssz - - --bootstrap-node= - - --interop-eth1data-votes - - --chain-config-file=/consensus/config.yml - - --contract-deployment-block=0 - - --chain-id=9 - - --rpc-host=0.0.0.0 - - --grpc-gateway-host=0.0.0.0 - - --execution-endpoint=http://geth:8551 - - --accept-terms-of-use - - --jwt-secret=/execution/jwtsecret - - --suggested-fee-recipient=0x8a91dc2d28b689474298d91899f0c1baf62cb85b - - --minimum-peers-per-subnet=0 - - --enable-debug-rpc-endpoints + - type: bind + source: ./volumes/reth/data + target: /rethdata + - type: bind + source: ./volumes/reth/logs + target: /rethlogs + command: node --dev --datadir /rethdata --http --http.port 8545 --http.addr 0.0.0.0 + ports: - - 4000:4000 - - 3500:3500 - - 6060:6060 - volumes: - - ./volumes/prysm:/consensus - - ./volumes/geth:/execution - depends_on: - create-beacon-chain-genesis: - condition: service_completed_successfully - validator: - image: "gcr.io/prysmaticlabs/prysm/validator:HEAD-c6801d" - command: - - --beacon-rpc-provider=beacon:4000 - - --datadir=/consensus/validatordata - - --accept-terms-of-use - - --interop-num-validators=64 - - --interop-start-index=0 - - --chain-config-file=/consensus/config.yml - depends_on: - beacon: - condition: service_started - volumes: - - ./volumes/prysm:/consensus + - 127.0.0.1:8545:8545 postgres: image: "postgres:14" command: postgres -c 'max_connections=200' diff --git a/etc/env/base/eth_client.toml b/etc/env/base/eth_client.toml index ef0e1015514..61a17d4e97a 100644 --- a/etc/env/base/eth_client.toml +++ b/etc/env/base/eth_client.toml @@ -1,4 +1,4 @@ [eth_client] -chain_id=9 +chain_id=1337 # Addresses of the Ethereum node API, separated by comma web3_url="http://127.0.0.1:8545" diff --git a/etc/test_config/constant/eth.json b/etc/test_config/constant/eth.json index 0b464bafc03..6129d7f5d98 100644 --- a/etc/test_config/constant/eth.json +++ b/etc/test_config/constant/eth.json @@ -1,6 +1,6 @@ { "web3_url": "http://127.0.0.1:8545", - "test_mnemonic": "stuff slice staff easily soup parent arm payment cotton trade scatter struggle", - "mnemonic": "fine music test violin matrix prize squirrel panther purchase material script deal", + "test_mnemonic": "test test test test test test test test test test test junk", + "mnemonic": "test test test test test test test test test test test junk", "base_path": "m/44'/60'/0'/0" } diff --git a/infrastructure/zk/src/init.ts b/infrastructure/zk/src/init.ts index d55c62049f4..a9c70e6d205 100644 --- a/infrastructure/zk/src/init.ts +++ b/infrastructure/zk/src/init.ts @@ -10,7 +10,7 @@ import * as docker from './docker'; import * as env from './env'; import * as run from './run'; import * as server from './server'; -import { up } from './up'; +import { createVolumes, up } from './up'; const entry = chalk.bold.yellow; const announce = chalk.yellow; @@ -31,7 +31,8 @@ export async function init(initArgs: InitArgs = DEFAULT_ARGS) { await announced('Pulling images', docker.pull()); await announced('Checking environment', checkEnv()); await announced('Checking git hooks', env.gitHooks()); - await announced('Setting up containers', up()); + await announced('Create volumes', createVolumes()); + // await announced('Setting up containers', up()); } if (!skipSubmodulesCheckout) { await announced('Checkout system-contracts submodule', submoduleUpdate()); diff --git a/infrastructure/zk/src/up.ts b/infrastructure/zk/src/up.ts index 5cfed342669..2816ccfe2e9 100644 --- a/infrastructure/zk/src/up.ts +++ b/infrastructure/zk/src/up.ts @@ -4,8 +4,11 @@ import { down } from './down'; import fs from 'fs'; // Make sure that the volumes exists before starting the containers. -function createVolumes() { +export function createVolumes() { fs.mkdirSync(`${process.env.ZKSYNC_HOME}/volumes/geth`, { recursive: true }); + fs.mkdirSync(`${process.env.ZKSYNC_HOME}/volumes/reth`, { recursive: true }); + fs.mkdirSync(`${process.env.ZKSYNC_HOME}/volumes/reth/data`, { recursive: true }); + fs.mkdirSync(`${process.env.ZKSYNC_HOME}/volumes/reth/logs`, { recursive: true }); fs.mkdirSync(`${process.env.ZKSYNC_HOME}/volumes/prysm/beacon`, { recursive: true }); fs.mkdirSync(`${process.env.ZKSYNC_HOME}/volumes/prysm/validator`, { recursive: true }); fs.mkdirSync(`${process.env.ZKSYNC_HOME}/volumes/postgres`, { recursive: true }); @@ -31,10 +34,8 @@ function createVolumes() { } export async function up(composeFile?: string) { - await down(); - // There is some race on the filesystem, so backoff here await utils.sleep(1); - createVolumes(); + // createVolumes(); if (composeFile) { await utils.spawn(`docker compose -f ${composeFile} up -d geth postgres`); } else { From ce4814330f2ba4883023083b6558b327d7c15b98 Mon Sep 17 00:00:00 2001 From: Danil Date: Mon, 11 Mar 2024 16:34:50 +0100 Subject: [PATCH 03/65] Update private keys Signed-off-by: Danil --- contracts | 2 +- etc/env/base/private.toml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/contracts b/contracts index def54290e4b..d85a73a1eeb 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit def54290e4bf252efe6cc27033486a76b29ac381 +Subproject commit d85a73a1eeb5557343b7b44c6543aaf391d8b984 diff --git a/etc/env/base/private.toml b/etc/env/base/private.toml index 8389369c544..b8c11067ac4 100644 --- a/etc/env/base/private.toml +++ b/etc/env/base/private.toml @@ -8,13 +8,13 @@ test_database_prover_url="postgres://postgres:notsecurepassword@localhost:5433/p [eth_sender.sender] # Set in env file for development, production, staging and testnet. -operator_private_key="0x27593fea79697e947890ecbecce7901b0008345e5d7259710d0dd5e500d040be" +operator_private_key="0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6" # Address to be used for zkSync account managing the interaction with a contract on Ethereum. # Derived from the `OPERATOR_PRIVATE_KEY`. -operator_commit_eth_addr="0xde03a0B5963f75f1C8485B355fF6D30f3093BDE7" +operator_commit_eth_addr="0xa0Ee7A142d267C1f36714E4a8F75612F20a79720" -operator_blobs_private_key="0xe667e57a9b8aaa6709e51ff7d093f1c5b73b63f9987e4ab4aa9a5c699e024ee8" -operator_blobs_eth_addr="0x4F9133D1d3F50011A6859807C837bdCB31Aaab13" +operator_blobs_private_key="0x4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356" +operator_blobs_eth_addr="0x14dC79964da2C08b23698B3D3cc7Ca32193d9955" [consensus] config_path = "etc/env/consensus_config.json" From a968dd6916228bf576f2d662644634094c1cbc94 Mon Sep 17 00:00:00 2001 From: Danil Date: Mon, 11 Mar 2024 16:54:13 +0100 Subject: [PATCH 04/65] Use reth instead of geth Signed-off-by: Danil --- bin/ci_localnet_up | 6 +---- docker-compose-cpu-runner.yml | 17 +++++++++---- docker-compose-gpu-runner-cuda-12-0.yml | 17 +++++++++---- docker-compose-gpu-runner.yml | 17 +++++++++---- docker-compose-runner-nightly.yml | 24 ++---------------- docker-compose.yml | 33 ++----------------------- docs/guides/development.md | 2 +- etc/env/docker.toml | 4 +-- etc/env/ext-node-docker.toml | 2 +- infrastructure/zk/src/init.ts | 2 +- infrastructure/zk/src/up.ts | 25 +------------------ sdk/zksync-rs/tests/integration.rs | 2 +- 12 files changed, 48 insertions(+), 103 deletions(-) diff --git a/bin/ci_localnet_up b/bin/ci_localnet_up index 7f9701a9a14..ebdfd1ef055 100755 --- a/bin/ci_localnet_up +++ b/bin/ci_localnet_up @@ -4,9 +4,5 @@ set -e cd $ZKSYNC_HOME -mkdir -p ./volumes/postgres ./volumes/geth/keystore ./volumes/prysm/beacon ./volumes/prysm/validator -cp ./docker/prysm/config.yml ./volumes/prysm/config.yml -cp ./docker/geth/jwtsecret ./volumes/geth/jwtsecret -cp ./docker/geth/password.sec ./volumes/geth/password.sec -cp ./docker/geth/keystore/UTC--2019-04-06T21-13-27.692266000Z--8a91dc2d28b689474298d91899f0c1baf62cb85b ./volumes/geth/keystore/ +mkdir -p ./volumes/postgres ./volumes/reth/data ./volumes/reth/logs docker-compose --profile runner up -d --wait diff --git a/docker-compose-cpu-runner.yml b/docker-compose-cpu-runner.yml index 21649e2cc7d..cf8f0f60fb1 100644 --- a/docker-compose-cpu-runner.yml +++ b/docker-compose-cpu-runner.yml @@ -1,14 +1,21 @@ version: '3.2' services: - geth: - image: "matterlabs/geth:latest" - environment: - - PLUGIN_CONFIG + reth: + restart: always + image: "ghcr.io/paradigmxyz/reth:v0.2.0-beta.1" + volumes: + - type: bind + source: ./volumes/reth/data + target: /rethdata + - type: bind + source: ./volumes/reth/logs + target: /rethlogs + command: node --dev --datadir /rethdata --http --http.addr 0.0.0.0 --http.port 8545 --dev.block-time 300ms zk: image: "matterlabs/zk-environment:latest2.0-lightweight-nightly" depends_on: - - geth + - reth - postgres security_opt: - seccomp:unconfined diff --git a/docker-compose-gpu-runner-cuda-12-0.yml b/docker-compose-gpu-runner-cuda-12-0.yml index 622f51bd52c..48528b64ff1 100644 --- a/docker-compose-gpu-runner-cuda-12-0.yml +++ b/docker-compose-gpu-runner-cuda-12-0.yml @@ -1,14 +1,21 @@ version: '3.2' services: - geth: - image: "matterlabs/geth:latest" - environment: - - PLUGIN_CONFIG + reth: + restart: always + image: "ghcr.io/paradigmxyz/reth:v0.2.0-beta.1" + volumes: + - type: bind + source: ./volumes/reth/data + target: /rethdata + - type: bind + source: ./volumes/reth/logs + target: /rethlogs + command: node --dev --datadir /rethdata --http --http.addr 0.0.0.0 --http.port 8545 --dev.block-time 300ms zk: image: matterlabs/zk-environment:cuda-12-0-latest depends_on: - - geth + - reth - postgres security_opt: - seccomp:unconfined diff --git a/docker-compose-gpu-runner.yml b/docker-compose-gpu-runner.yml index d88a636dfde..2047782c981 100644 --- a/docker-compose-gpu-runner.yml +++ b/docker-compose-gpu-runner.yml @@ -1,15 +1,22 @@ version: '3.2' services: - geth: - image: "matterlabs/geth:latest" - environment: - - PLUGIN_CONFIG + reth: + restart: always + image: "ghcr.io/paradigmxyz/reth:v0.2.0-beta.1" + volumes: + - type: bind + source: ./volumes/reth/data + target: /rethdata + - type: bind + source: ./volumes/reth/logs + target: /rethlogs + command: node --dev --datadir /rethdata --http --http.addr 0.0.0.0 --http.port 8545 --dev.block-time 300ms zk: image: "matterlabs/zk-environment:cuda-11-8-latest" container_name: zk depends_on: - - geth + - reth - postgres security_opt: - seccomp:unconfined diff --git a/docker-compose-runner-nightly.yml b/docker-compose-runner-nightly.yml index 5cd9294ffae..0dfa2f59ac3 100644 --- a/docker-compose-runner-nightly.yml +++ b/docker-compose-runner-nightly.yml @@ -11,27 +11,7 @@ services: file: docker-compose.yml service: postgres - geth: + reth: extends: file: docker-compose.yml - service: geth - - create-beacon-chain-genesis: - extends: - file: docker-compose.yml - service: create-beacon-chain-genesis - - validator: - extends: - file: docker-compose.yml - service: validator - - beacon: - extends: - file: docker-compose.yml - service: beacon - - geth-genesis: - extends: - file: docker-compose.yml - service: geth-genesis + service: reth diff --git a/docker-compose.yml b/docker-compose.yml index 2c6779b0edd..1440e634e10 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,37 +1,8 @@ version: '3.2' services: -# geth: -# image: "ethereum/client-go:v1.13.5" -# ports: -# - 8551:8551 -# - 8545:8545 -# - 8546:8546 -# volumes: -# - ./volumes/geth:/var/lib/geth/data -# - ./docker/geth/:/geth/:ro -# command: -# - --networkid=9 -# - --datadir=/var/lib/geth/data -# - --http -# - --http.api=engine,eth,web3,personal,net,debug -# - --http.addr=0.0.0.0 -# - --http.corsdomain=* -# - --http.vhosts=* -# - --ws -# - --ws.addr=0.0.0.0 -# - --ws.port=8546 -# - --ws.origins=* -# - --nodiscover -# - --authrpc.addr=0.0.0.0 -# - --authrpc.vhosts=* -# - --authrpc.jwtsecret=/var/lib/geth/data/jwtsecret -# - --allow-insecure-unlock -# - --unlock=0x8a91dc2d28b689474298d91899f0c1baf62cb85b -# - --password=/var/lib/geth/data/password.sec -# - --syncmode=full reth: restart: always - image: "ghcr.io/paradigmxyz/reth:v0.1.0-alpha.21" + image: "ghcr.io/paradigmxyz/reth:v0.2.0-beta.1" volumes: - type: bind source: ./volumes/reth/data @@ -39,7 +10,7 @@ services: - type: bind source: ./volumes/reth/logs target: /rethlogs - command: node --dev --datadir /rethdata --http --http.port 8545 --http.addr 0.0.0.0 + command: node --dev --datadir /rethdata --http --http.addr 0.0.0.0 --http.port 8545 --dev.block-time 300ms ports: - 127.0.0.1:8545:8545 diff --git a/docs/guides/development.md b/docs/guides/development.md index c6410bbfcbb..2ca82e4305b 100644 --- a/docs/guides/development.md +++ b/docs/guides/development.md @@ -58,7 +58,7 @@ If you don’t need all of the `zk init` functionality, but just need to start/s commands: ``` -zk up # Set up `geth` container +zk up # Set up `reth` container zk down # Shut down `geth` container ``` diff --git a/etc/env/docker.toml b/etc/env/docker.toml index af15fcaaa56..94348c3d215 100644 --- a/etc/env/docker.toml +++ b/etc/env/docker.toml @@ -4,10 +4,10 @@ test_database_url = "postgres://postgres:notsecurepassword@host:5433/zksync_loca test_database_prover_url="postgres://postgres:notsecurepassword@host:5433/prover_local_test" # for loadtest -l1_rpc_address = "http://geth:8545" +l1_rpc_address = "http://reth:8545" [eth_client] -web3_url = "http://geth:8545" +web3_url = "http://reth:8545" [chain.state_keeper] miniblock_iteration_interval = 50 diff --git a/etc/env/ext-node-docker.toml b/etc/env/ext-node-docker.toml index 67b18d1786d..a9cda0f1ce4 100644 --- a/etc/env/ext-node-docker.toml +++ b/etc/env/ext-node-docker.toml @@ -3,7 +3,7 @@ template_database_url = "postgres://postgres:notsecurepassword@postgres/zksync_l test_database_url = "postgres://postgres:notsecurepassword@host:5433/zksync_local_test_ext_node" [en] -eth_client_url = "http://geth:8545" +eth_client_url = "http://reth:8545" [_metadata] base = ["ext-node.toml"] diff --git a/infrastructure/zk/src/init.ts b/infrastructure/zk/src/init.ts index a9c70e6d205..0944ed1e495 100644 --- a/infrastructure/zk/src/init.ts +++ b/infrastructure/zk/src/init.ts @@ -32,7 +32,7 @@ export async function init(initArgs: InitArgs = DEFAULT_ARGS) { await announced('Checking environment', checkEnv()); await announced('Checking git hooks', env.gitHooks()); await announced('Create volumes', createVolumes()); - // await announced('Setting up containers', up()); + await announced('Setting up containers', up()); } if (!skipSubmodulesCheckout) { await announced('Checkout system-contracts submodule', submoduleUpdate()); diff --git a/infrastructure/zk/src/up.ts b/infrastructure/zk/src/up.ts index 2816ccfe2e9..1e9429d8176 100644 --- a/infrastructure/zk/src/up.ts +++ b/infrastructure/zk/src/up.ts @@ -5,39 +5,16 @@ import fs from 'fs'; // Make sure that the volumes exists before starting the containers. export function createVolumes() { - fs.mkdirSync(`${process.env.ZKSYNC_HOME}/volumes/geth`, { recursive: true }); - fs.mkdirSync(`${process.env.ZKSYNC_HOME}/volumes/reth`, { recursive: true }); fs.mkdirSync(`${process.env.ZKSYNC_HOME}/volumes/reth/data`, { recursive: true }); fs.mkdirSync(`${process.env.ZKSYNC_HOME}/volumes/reth/logs`, { recursive: true }); - fs.mkdirSync(`${process.env.ZKSYNC_HOME}/volumes/prysm/beacon`, { recursive: true }); - fs.mkdirSync(`${process.env.ZKSYNC_HOME}/volumes/prysm/validator`, { recursive: true }); fs.mkdirSync(`${process.env.ZKSYNC_HOME}/volumes/postgres`, { recursive: true }); - - fs.copyFileSync( - `${process.env.ZKSYNC_HOME}/docker/prysm/config.yml`, - `${process.env.ZKSYNC_HOME}/volumes/prysm/config.yml` - ); - - fs.copyFileSync( - `${process.env.ZKSYNC_HOME}/docker/geth/jwtsecret`, - `${process.env.ZKSYNC_HOME}/volumes/geth/jwtsecret` - ); - fs.copyFileSync( - `${process.env.ZKSYNC_HOME}/docker/geth/password.sec`, - `${process.env.ZKSYNC_HOME}/volumes/geth/password.sec` - ); - fs.mkdirSync(`${process.env.ZKSYNC_HOME}/volumes/geth/keystore`, { recursive: true }); - fs.copyFileSync( - `${process.env.ZKSYNC_HOME}/docker/geth/keystore/UTC--2019-04-06T21-13-27.692266000Z--8a91dc2d28b689474298d91899f0c1baf62cb85b`, - `${process.env.ZKSYNC_HOME}/volumes/geth/keystore/UTC--2019-04-06T21-13-27.692266000Z--8a91dc2d28b689474298d91899f0c1baf62cb85b` - ); } export async function up(composeFile?: string) { await utils.sleep(1); // createVolumes(); if (composeFile) { - await utils.spawn(`docker compose -f ${composeFile} up -d geth postgres`); + await utils.spawn(`docker compose -f ${composeFile} up -d reth postgres`); } else { await utils.spawn('docker compose up -d'); } diff --git a/sdk/zksync-rs/tests/integration.rs b/sdk/zksync-rs/tests/integration.rs index 158d719808f..10c37c55c68 100644 --- a/sdk/zksync-rs/tests/integration.rs +++ b/sdk/zksync-rs/tests/integration.rs @@ -42,7 +42,7 @@ // const ETH_ADDR: &str = "36615Cf349d7F6344891B1e7CA7C72883F5dc049"; // const ETH_PRIVATE_KEY: &str = "7726827caac94a7f9e1b160f7ea819f172f7b6f9d2a97f992c38edeab82d4110"; // const LOCALHOST_WEB3_ADDR: &str = "http://127.0.0.1:8545"; -// const DOCKER_WEB3_ADDR: &str = "http://geth:8545"; +// const DOCKER_WEB3_ADDR: &str = "http://reth:8545"; // fn web3_addr() -> &'static str { // let ci: u8 = env::var("CI").map_or(0, |s| s.parse().unwrap()); From f9ef9b6195970c6fa447fdf91c0c64fbe8b820de Mon Sep 17 00:00:00 2001 From: Danil Date: Mon, 11 Mar 2024 19:00:04 +0100 Subject: [PATCH 05/65] attempts to fix Signed-off-by: Danil --- docker-compose.yml | 1 - etc/env/ext-node.toml | 2 +- infrastructure/zk/src/run.ts | 12 ------------ infrastructure/zk/src/up.ts | 1 - 4 files changed, 1 insertion(+), 15 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 1440e634e10..a941596e462 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,7 +11,6 @@ services: source: ./volumes/reth/logs target: /rethlogs command: node --dev --datadir /rethdata --http --http.addr 0.0.0.0 --http.port 8545 --dev.block-time 300ms - ports: - 127.0.0.1:8545:8545 postgres: diff --git a/etc/env/ext-node.toml b/etc/env/ext-node.toml index b7c728b1791..9309e569e65 100644 --- a/etc/env/ext-node.toml +++ b/etc/env/ext-node.toml @@ -14,7 +14,7 @@ prometheus_port = 3322 healthcheck_port = 3081 threads_per_server = 128 l2_chain_id = 270 -l1_chain_id = 9 +l1_chain_id = 1337 req_entities_limit = 10000 diff --git a/infrastructure/zk/src/run.ts b/infrastructure/zk/src/run.ts index e67d7d05875..da35462e550 100644 --- a/infrastructure/zk/src/run.ts +++ b/infrastructure/zk/src/run.ts @@ -24,18 +24,6 @@ export async function deployERC20( { "name": "DAI", "symbol": "DAI", "decimals": 18 }, { "name": "wBTC", "symbol": "wBTC", "decimals": 8, "implementation": "RevertTransferERC20" }, { "name": "BAT", "symbol": "BAT", "decimals": 18 }, - { "name": "GNT", "symbol": "GNT", "decimals": 18 }, - { "name": "MLTT", "symbol": "MLTT", "decimals": 18 }, - { "name": "DAIK", "symbol": "DAIK", "decimals": 18 }, - { "name": "wBTCK", "symbol": "wBTCK", "decimals": 8, "implementation": "RevertTransferERC20" }, - { "name": "BATK", "symbol": "BATS", "decimals": 18 }, - { "name": "GNTK", "symbol": "GNTS", "decimals": 18 }, - { "name": "MLTTK", "symbol": "MLTTS", "decimals": 18 }, - { "name": "DAIL", "symbol": "DAIL", "decimals": 18 }, - { "name": "wBTCL", "symbol": "wBTCP", "decimals": 8, "implementation": "RevertTransferERC20" }, - { "name": "BATL", "symbol": "BATW", "decimals": 18 }, - { "name": "GNTL", "symbol": "GNTW", "decimals": 18 }, - { "name": "MLTTL", "symbol": "MLTTW", "decimals": 18 }, { "name": "Wrapped Ether", "symbol": "WETH", "decimals": 18, "implementation": "WETH9"} ]' ${args.join(' ')} > ./etc/tokens/${destinationFile}.json`); const WETH = getTokens(destinationFile).find((token) => token.symbol === 'WETH')!; diff --git a/infrastructure/zk/src/up.ts b/infrastructure/zk/src/up.ts index 145bfd25c3b..32faa49d8b8 100644 --- a/infrastructure/zk/src/up.ts +++ b/infrastructure/zk/src/up.ts @@ -1,6 +1,5 @@ import { Command } from 'commander'; import * as utils from './utils'; -import { down } from './down'; import fs from 'fs'; // Make sure that the volumes exists before starting the containers. From bcf31683f493a93a4b99fbcf33480fa2e4d0c495 Mon Sep 17 00:00:00 2001 From: Danil Date: Mon, 11 Mar 2024 19:09:32 +0100 Subject: [PATCH 06/65] Update contracts Signed-off-by: Danil --- contracts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts b/contracts index d85a73a1eeb..e0a33ce73c4 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit d85a73a1eeb5557343b7b44c6543aaf391d8b984 +Subproject commit e0a33ce73c4decd381446a6eb812b14c2ff69c47 From 807891c2e8e4690bf0267c86e83070c7bb5f124d Mon Sep 17 00:00:00 2001 From: Danil Date: Mon, 11 Mar 2024 19:29:25 +0100 Subject: [PATCH 07/65] Fix chain id Signed-off-by: Danil --- core/lib/basic_types/src/network.rs | 4 ++-- core/tests/loadnext/src/config.rs | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/core/lib/basic_types/src/network.rs b/core/lib/basic_types/src/network.rs index 5f4683aeb67..780b78ee2d2 100644 --- a/core/lib/basic_types/src/network.rs +++ b/core/lib/basic_types/src/network.rs @@ -74,7 +74,7 @@ impl Network { 3 => Self::Ropsten, 4 => Self::Rinkeby, 5 => Self::Goerli, - 9 => Self::Localhost, + 1337 => Self::Localhost, 11155111 => Self::Sepolia, _ => Self::Unknown, } @@ -87,7 +87,7 @@ impl Network { Self::Ropsten => L1ChainId(3), Self::Rinkeby => L1ChainId(4), Self::Goerli => L1ChainId(5), - Self::Localhost => L1ChainId(9), + Self::Localhost => L1ChainId(1337), Self::Sepolia => L1ChainId(11155111), Self::Unknown => panic!("Unknown chain ID"), Self::Test => panic!("Test chain ID"), diff --git a/core/tests/loadnext/src/config.rs b/core/tests/loadnext/src/config.rs index 2cc6317059d..402bf5c227f 100644 --- a/core/tests/loadnext/src/config.rs +++ b/core/tests/loadnext/src/config.rs @@ -152,9 +152,9 @@ fn default_l1_rpc_address() -> String { fn default_master_wallet_pk() -> String { // Use this key only for localhost because it is compromised! - // Using this key for Rinkeby will result in losing Rinkeby ETH. - // Corresponding wallet is `0x36615Cf349d7F6344891B1e7CA7C72883F5dc049` - let result = "7726827caac94a7f9e1b160f7ea819f172f7b6f9d2a97f992c38edeab82d4110".to_string(); + // Using this key for Testnet will result in losing Testnet ETH. + // Corresponding wallet is `0x70997970C51812dc3A010C7d01b50e0d17dc79C8` + let result = "0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d".to_string(); tracing::info!("Using default MASTER_WALLET_PK: {result}"); result } From 986ad7116dac752209ad2ae7441679e077ff25c5 Mon Sep 17 00:00:00 2001 From: Danil Date: Mon, 11 Mar 2024 19:58:48 +0100 Subject: [PATCH 08/65] Small fixes Signed-off-by: Danil --- core/lib/eth_client/src/clients/http/query.rs | 13 +++++++++++-- .../revert-test/tests/revert-and-restart-en.test.ts | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/core/lib/eth_client/src/clients/http/query.rs b/core/lib/eth_client/src/clients/http/query.rs index 0bf15a9f90b..695bf47a926 100644 --- a/core/lib/eth_client/src/clients/http/query.rs +++ b/core/lib/eth_client/src/clients/http/query.rs @@ -129,8 +129,17 @@ impl EthInterface for QueryClient { .web3 .eth() .block(BlockId::Number(BlockNumber::Pending)) - .await? - .expect("Pending block should always exist"); + .await?; + let block = if let Some(block) = block { + block + } else { + // fallback for local testing + self.web3 + .eth() + .block(BlockId::Number(BlockNumber::Latest)) + .await? + .expect("Latest block should always exist") + }; latency.observe(); // base_fee_per_gas always exists after London fork diff --git a/core/tests/revert-test/tests/revert-and-restart-en.test.ts b/core/tests/revert-test/tests/revert-and-restart-en.test.ts index 198666d19f1..a23e19b4643 100644 --- a/core/tests/revert-test/tests/revert-and-restart-en.test.ts +++ b/core/tests/revert-test/tests/revert-and-restart-en.test.ts @@ -253,7 +253,7 @@ describe('Block reverting test', function () { if (lastCommitted.sub(lastExecuted).gte(2)) { break; } - await utils.sleep(1); + await utils.sleep(0.3); } const alice2 = await alice.getBalance(); console.log('Terminate the main node'); From 8194a36e1d6ffbf0329c109cfa66b2a9facf1be9 Mon Sep 17 00:00:00 2001 From: Danil Date: Mon, 11 Mar 2024 21:30:14 +0100 Subject: [PATCH 09/65] try approcah from en Signed-off-by: Danil --- .../tests/revert-and-restart-en.test.ts | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/core/tests/revert-test/tests/revert-and-restart-en.test.ts b/core/tests/revert-test/tests/revert-and-restart-en.test.ts index a23e19b4643..3ac0fc76d65 100644 --- a/core/tests/revert-test/tests/revert-and-restart-en.test.ts +++ b/core/tests/revert-test/tests/revert-and-restart-en.test.ts @@ -239,14 +239,28 @@ describe('Block reverting test', function () { const lastExecuted: BigNumber = await main_contract.getTotalBlocksExecuted(); // One is not enough to test the reversion of sk cache because // it gets updated with some batch logs only at the start of the next batch. - for (let i = 0; i < 2; i++) { - const h: zkweb3.types.PriorityOpResponse = await extNode.tester.syncWallet.deposit({ - token: zkweb3.utils.ETH_ADDRESS, - amount: depositAmount, - to: alice.address - }); - await h.waitL1Commit(); + const initialL1BatchNumber = (await main_contract.getTotalBlocksCommitted()).toNumber(); + const firstDepositHandle = await extNode.tester.syncWallet.deposit({ + token: zkweb3.utils.ETH_ADDRESS, + amount: depositAmount, + to: alice.address + }); + + await firstDepositHandle.wait(); + while ((await extNode.tester.web3Provider.getL1BatchNumber()) <= initialL1BatchNumber) { + await utils.sleep(0.1); } + + const secondDepositHandle = await extNode.tester.syncWallet.deposit({ + token: zkweb3.utils.ETH_ADDRESS, + amount: depositAmount, + to: alice.address + }); + await secondDepositHandle.wait(); + while ((await extNode.tester.web3Provider.getL1BatchNumber()) <= initialL1BatchNumber + 1) { + await utils.sleep(0.3); + } + while (true) { const lastCommitted: BigNumber = await main_contract.getTotalBlocksCommitted(); console.log(`lastExecuted = ${lastExecuted}, lastCommitted = ${lastCommitted}`); From 410b9ae0c72deeac23e5980341c43b4aba1d2f44 Mon Sep 17 00:00:00 2001 From: Danil Date: Wed, 13 Mar 2024 15:48:50 +0100 Subject: [PATCH 10/65] Add genesis file Signed-off-by: Danil --- core/bin/zksync_server/src/main.rs | 36 +-- core/lib/config/src/configs/chain.rs | 8 +- core/lib/config/src/configs/contracts.rs | 14 +- core/lib/config/src/testonly.rs | 15 +- core/lib/protobuf_config/src/chain.rs | 16 +- core/lib/protobuf_config/src/contracts.rs | 42 ++- .../lib/protobuf_config/src/proto/chain.proto | 2 + .../protobuf_config/src/proto/contracts.proto | 11 +- .../src/api_server/execution_sandbox/tests.rs | 4 +- .../src/api_server/tx_sender/tests.rs | 2 +- .../src/api_server/web3/tests/mod.rs | 15 +- .../lib/zksync_core/src/consensus/testonly.rs | 2 +- .../src/consistency_checker/tests/mod.rs | 16 +- core/lib/zksync_core/src/genesis.rs | 275 ++++++++++++------ core/lib/zksync_core/src/lib.rs | 80 +---- .../src/metadata_calculator/tests.rs | 2 +- .../src/state_keeper/io/common/tests.rs | 6 +- .../src/state_keeper/mempool_actor.rs | 6 +- .../sync_layer/batch_status_updater/tests.rs | 6 +- .../lib/zksync_core/src/sync_layer/genesis.rs | 26 +- core/lib/zksync_core/src/sync_layer/tests.rs | 2 +- core/lib/zksync_core/src/utils/mod.rs | 2 +- 22 files changed, 311 insertions(+), 277 deletions(-) diff --git a/core/bin/zksync_server/src/main.rs b/core/bin/zksync_server/src/main.rs index 2e40dd73252..03d89a23326 100644 --- a/core/bin/zksync_server/src/main.rs +++ b/core/bin/zksync_server/src/main.rs @@ -18,6 +18,7 @@ use zksync_config::{ GasAdjusterConfig, ObjectStoreConfig, PostgresConfig, }; use zksync_core::{ + genesis::GenesisConfig, genesis_init, initialize_components, is_genesis_needed, setup_sigint_handler, temp_config_store::{decode_yaml, Secrets, TempConfigStore}, Component, Components, @@ -35,13 +36,6 @@ static GLOBAL: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc; #[derive(Debug, Parser)] #[command(author = "Matter Labs", version, about = "zkSync operator node", long_about = None)] struct Cli { - /// Generate genesis block for the first contract deployment using temporary DB. - #[arg(long)] - genesis: bool, - /// Wait for the `setChainId` event during genesis. - /// If `--genesis` is not set, this flag is ignored. - #[arg(long)] - set_chain_id: bool, /// Rebuild tree. #[arg(long)] rebuild_tree: bool, @@ -57,6 +51,9 @@ struct Cli { /// Path to the yaml with secrets. If set, it will be used instead of env vars. #[arg(long)] secrets_path: Option, + /// Path to the yaml with genesis + #[arg(long)] + genesis_path: Option, } #[derive(Debug, Clone)] @@ -155,24 +152,15 @@ async fn main() -> anyhow::Result<()> { let postgres_config = configs.postgres_config.clone().context("PostgresConfig")?; - if opt.genesis || is_genesis_needed(&postgres_config).await { - let network = NetworkConfig::from_env().context("NetworkConfig")?; - let eth_sender = ETHSenderConfig::from_env().context("ETHSenderConfig")?; - let contracts = ContractsConfig::from_env().context("ContractsConfig")?; + if is_genesis_needed(&postgres_config).await { + let genesis = GenesisConfig::from_env().context("Genesis config")?; let eth_client = ETHClientConfig::from_env().context("EthClientConfig")?; - genesis_init( - &postgres_config, - ð_sender, - &network, - &contracts, - ð_client.web3_url, - opt.set_chain_id, - ) - .await - .context("genesis_init")?; - if opt.genesis { - return Ok(()); - } + genesis_init(genesis, &postgres_config, ð_client.web3_url) + .await + .context("genesis_init")?; + // if opt.genesis { + // return Ok(()); + // } } let components = if opt.rebuild_tree { diff --git a/core/lib/config/src/configs/chain.rs b/core/lib/config/src/configs/chain.rs index d35c6ed52b5..e443d92fafc 100644 --- a/core/lib/config/src/configs/chain.rs +++ b/core/lib/config/src/configs/chain.rs @@ -1,7 +1,7 @@ use std::{str::FromStr, time::Duration}; use serde::Deserialize; -use zksync_basic_types::{network::Network, Address, L2ChainId}; +use zksync_basic_types::{network::Network, Address, L2ChainId, H256}; #[derive(Debug, Deserialize, Clone, PartialEq)] pub struct NetworkConfig { @@ -116,6 +116,10 @@ pub struct StateKeeperConfig { /// Number of keys that is processed by enum_index migration in State Keeper each L1 batch. pub enum_index_migration_chunk_size: Option, + + // Base system contract hash, required only for genesis file, it's temporary solution + pub bootloader_hash: Option, + pub default_aa_hash: Option, } impl StateKeeperConfig { @@ -150,6 +154,8 @@ impl StateKeeperConfig { virtual_blocks_per_miniblock: 1, upload_witness_inputs_to_gcs: false, enum_index_migration_chunk_size: None, + bootloader_hash: None, + default_aa_hash: None, } } diff --git a/core/lib/config/src/configs/contracts.rs b/core/lib/config/src/configs/contracts.rs index 70d4e685586..a45e6bd98b0 100644 --- a/core/lib/config/src/configs/contracts.rs +++ b/core/lib/config/src/configs/contracts.rs @@ -2,16 +2,13 @@ use serde::Deserialize; // Workspace uses use zksync_basic_types::{Address, H256}; -#[derive(Debug, Deserialize, Clone, PartialEq)] -#[serde(rename_all = "lowercase")] -pub enum ProverAtGenesis { - Fri, - Old, -} /// Data about deployed contracts. #[derive(Debug, Deserialize, Clone, PartialEq)] pub struct ContractsConfig { + pub genesis_root: Option, + pub genesis_rollup_leaf_index: Option, + pub genesis_batch_commitment: Option, pub governance_addr: Address, pub mailbox_facet_addr: Address, pub executor_facet_addr: Address, @@ -38,7 +35,6 @@ pub struct ContractsConfig { pub fri_recursion_scheduler_level_vk_hash: H256, pub fri_recursion_node_level_vk_hash: H256, pub fri_recursion_leaf_level_vk_hash: H256, - pub prover_at_genesis: ProverAtGenesis, pub snark_wrapper_vk_hash: H256, // These contracts will be used after shared bridge integration. @@ -56,6 +52,8 @@ impl ContractsConfig { /// Same goes for hashes. pub fn for_tests() -> Self { Self { + genesis_root: Some(H256::repeat_byte(0x01)), + genesis_rollup_leaf_index: Some(26), mailbox_facet_addr: Address::repeat_byte(0x01), executor_facet_addr: Address::repeat_byte(0x02), admin_facet_addr: Address::repeat_byte(0x03), @@ -83,12 +81,12 @@ impl ContractsConfig { fri_recursion_node_level_vk_hash: H256::repeat_byte(0x07), fri_recursion_leaf_level_vk_hash: H256::repeat_byte(0x08), governance_addr: Address::repeat_byte(0x13), - prover_at_genesis: ProverAtGenesis::Fri, snark_wrapper_vk_hash: H256::repeat_byte(0x09), bridgehub_proxy_addr: Some(Address::repeat_byte(0x14)), bridgehub_impl_addr: Some(Address::repeat_byte(0x15)), state_transition_proxy_addr: Some(Address::repeat_byte(0x16)), state_transition_impl_addr: Some(Address::repeat_byte(0x17)), + genesis_batch_commitment: Some(H256::repeat_byte(0x17)), } } } diff --git a/core/lib/config/src/testonly.rs b/core/lib/config/src/testonly.rs index ba1da58b826..24989acf7de 100644 --- a/core/lib/config/src/testonly.rs +++ b/core/lib/config/src/testonly.rs @@ -288,6 +288,8 @@ impl RandomConfig for configs::chain::StateKeeperConfig { virtual_blocks_per_miniblock: g.gen(), upload_witness_inputs_to_gcs: g.gen(), enum_index_migration_chunk_size: g.gen(), + bootloader_hash: g.gen(), + default_aa_hash: g.gen(), } } } @@ -334,15 +336,6 @@ impl RandomConfig for configs::ContractVerifierConfig { } } -impl RandomConfig for configs::contracts::ProverAtGenesis { - fn sample(g: &mut Gen) -> Self { - match g.rng.gen_range(0..2) { - 0 => Self::Fri, - _ => Self::Old, - } - } -} - impl RandomConfig for configs::ContractsConfig { fn sample(g: &mut Gen) -> Self { Self { @@ -372,13 +365,15 @@ impl RandomConfig for configs::ContractsConfig { fri_recursion_scheduler_level_vk_hash: g.gen(), fri_recursion_node_level_vk_hash: g.gen(), fri_recursion_leaf_level_vk_hash: g.gen(), - prover_at_genesis: g.gen(), snark_wrapper_vk_hash: g.gen(), bridgehub_impl_addr: g.gen(), bridgehub_proxy_addr: g.gen(), state_transition_proxy_addr: g.gen(), state_transition_impl_addr: g.gen(), transparent_proxy_admin_addr: g.gen(), + genesis_batch_commitment: g.gen(), + genesis_rollup_leaf_index: g.gen(), + genesis_root: g.gen(), } } } diff --git a/core/lib/protobuf_config/src/chain.rs b/core/lib/protobuf_config/src/chain.rs index 8773d6268dd..c7ddd5b6c04 100644 --- a/core/lib/protobuf_config/src/chain.rs +++ b/core/lib/protobuf_config/src/chain.rs @@ -3,7 +3,7 @@ use zksync_basic_types::network::Network; use zksync_config::configs; use zksync_protobuf::{repr::ProtoRepr, required}; -use crate::{parse_h160, proto::chain as proto}; +use crate::{parse_h160, parse_h256, proto::chain as proto}; impl proto::Network { fn new(n: &Network) -> Self { @@ -140,6 +140,18 @@ impl ProtoRepr for proto::StateKeeper { .map(|x| x.try_into()) .transpose() .context("enum_index_migration_chunk_size")?, + bootloader_hash: self + .bootloader_hash + .as_ref() + .map(|a| parse_h256(&a)) + .transpose() + .context("enum_index_migration_chunk_size")?, + default_aa_hash: self + .default_aa_hash + .as_ref() + .map(|a| parse_h256(&a)) + .transpose() + .context("enum_index_migration_chunk_size")?, }) } @@ -176,6 +188,8 @@ impl ProtoRepr for proto::StateKeeper { .enum_index_migration_chunk_size .as_ref() .map(|x| (*x).try_into().unwrap()), + bootloader_hash: this.bootloader_hash.map(|a| a.as_bytes().into()), + default_aa_hash: this.default_aa_hash.map(|a| a.as_bytes().into()), } } } diff --git a/core/lib/protobuf_config/src/contracts.rs b/core/lib/protobuf_config/src/contracts.rs index 1d168a78632..5c7682732e5 100644 --- a/core/lib/protobuf_config/src/contracts.rs +++ b/core/lib/protobuf_config/src/contracts.rs @@ -4,24 +4,6 @@ use zksync_protobuf::{repr::ProtoRepr, required}; use crate::{parse_h160, parse_h256, proto::contracts as proto}; -impl proto::ProverAtGenesis { - fn new(x: &configs::contracts::ProverAtGenesis) -> Self { - use configs::contracts::ProverAtGenesis as From; - match x { - From::Fri => Self::Fri, - From::Old => Self::Old, - } - } - - fn parse(&self) -> configs::contracts::ProverAtGenesis { - use configs::contracts::ProverAtGenesis as To; - match self { - Self::Fri => To::Fri, - Self::Old => To::Old, - } - } -} - impl ProtoRepr for proto::Contracts { type Type = configs::ContractsConfig; fn read(&self) -> anyhow::Result { @@ -115,10 +97,6 @@ impl ProtoRepr for proto::Contracts { fri_recursion_leaf_level_vk_hash: required(&self.fri_recursion_leaf_level_vk_hash) .and_then(|x| parse_h256(x)) .context("fri_recursion_leaf_level_vk_hash")?, - prover_at_genesis: required(&self.prover_at_genesis) - .and_then(|x| Ok(proto::ProverAtGenesis::try_from(*x)?)) - .context("prover_at_genesis")? - .parse(), snark_wrapper_vk_hash: required(&self.snark_wrapper_vk_hash) .and_then(|x| parse_h256(x)) .context("snark_wrapper_vk_hash")?, @@ -152,6 +130,19 @@ impl ProtoRepr for proto::Contracts { .map(|x| parse_h160(x)) .transpose() .context("transparent_proxy_admin_addr")?, + genesis_batch_commitment: self + .genesis_batch_commitment + .as_ref() + .map(|x| parse_h256(x)) + .transpose() + .context("genesis_batch_commitment")?, + genesis_rollup_leaf_index: self.genesis_rollup_leaf_index, + genesis_root: self + .genesis_root + .as_ref() + .map(|x| parse_h256(x)) + .transpose() + .context("genesis_root")?, }) } @@ -202,7 +193,6 @@ impl ProtoRepr for proto::Contracts { fri_recursion_leaf_level_vk_hash: Some( this.fri_recursion_leaf_level_vk_hash.as_bytes().into(), ), - prover_at_genesis: Some(proto::ProverAtGenesis::new(&this.prover_at_genesis).into()), snark_wrapper_vk_hash: Some(this.snark_wrapper_vk_hash.as_bytes().into()), bridgehub_proxy_addr: this .bridgehub_proxy_addr @@ -224,6 +214,12 @@ impl ProtoRepr for proto::Contracts { .transparent_proxy_admin_addr .as_ref() .map(|x| x.as_bytes().into()), + genesis_root: this.genesis_root.as_ref().map(|x| x.as_bytes().into()), + genesis_batch_commitment: this + .genesis_batch_commitment + .as_ref() + .map(|x| x.as_bytes().into()), + genesis_rollup_leaf_index: this.genesis_rollup_leaf_index, } } } diff --git a/core/lib/protobuf_config/src/proto/chain.proto b/core/lib/protobuf_config/src/proto/chain.proto index 3b2569d9899..093303778d2 100644 --- a/core/lib/protobuf_config/src/proto/chain.proto +++ b/core/lib/protobuf_config/src/proto/chain.proto @@ -51,6 +51,8 @@ message StateKeeper { optional uint32 virtual_blocks_per_miniblock = 24; // required optional bool upload_witness_inputs_to_gcs = 25; // required optional uint64 enum_index_migration_chunk_size = 26; // optional + optional bytes bootloader_hash = 27; // required; H256 + optional bytes default_aa_hash = 28; // required; H256 } message OperationsManager { diff --git a/core/lib/protobuf_config/src/proto/contracts.proto b/core/lib/protobuf_config/src/proto/contracts.proto index b84217181fe..6c27c6c8e9b 100644 --- a/core/lib/protobuf_config/src/proto/contracts.proto +++ b/core/lib/protobuf_config/src/proto/contracts.proto @@ -2,11 +2,6 @@ syntax = "proto3"; package zksync.config.contracts; -enum ProverAtGenesis { - FRI = 0; - OLD = 1; -} - message Contracts { optional bytes governance_addr = 1; // required; H160 optional bytes mailbox_facet_addr = 2; // required; H160 @@ -34,11 +29,13 @@ message Contracts { optional bytes fri_recursion_scheduler_level_vk_hash = 24; // required; H256 optional bytes fri_recursion_node_level_vk_hash = 25; // required; H256 optional bytes fri_recursion_leaf_level_vk_hash = 26; // required; H256 - optional ProverAtGenesis prover_at_genesis = 27; // required optional bytes snark_wrapper_vk_hash = 28; // required; H256 optional bytes bridgehub_proxy_addr = 29; // optional; H160 optional bytes bridgehub_impl_addr = 30; // optional; H160 optional bytes state_transition_proxy_addr = 31; // optional; H160 optional bytes state_transition_impl_addr = 32; // optional; H160 - optional bytes transparent_proxy_admin_addr = 33; // optional; H160 + optional bytes transparent_proxy_admin_addr = 33; // optional; h160 + optional bytes genesis_root = 34; // optional; h256 + optional uint64 genesis_rollup_leaf_index = 35; // optional; + optional bytes genesis_batch_commitment = 36; // optional; h256 } diff --git a/core/lib/zksync_core/src/api_server/execution_sandbox/tests.rs b/core/lib/zksync_core/src/api_server/execution_sandbox/tests.rs index 473f3d89742..f234dc76a2e 100644 --- a/core/lib/zksync_core/src/api_server/execution_sandbox/tests.rs +++ b/core/lib/zksync_core/src/api_server/execution_sandbox/tests.rs @@ -13,7 +13,7 @@ use crate::{ async fn creating_block_args() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, L2ChainId::default(), &GenesisParams::mock()) + ensure_genesis_state(&mut storage, &GenesisParams::mock()) .await .unwrap(); let miniblock = create_miniblock(1); @@ -160,7 +160,7 @@ async fn creating_block_args_after_snapshot_recovery() { async fn instantiating_vm() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, L2ChainId::default(), &GenesisParams::mock()) + ensure_genesis_state(&mut storage, &GenesisParams::mock()) .await .unwrap(); diff --git a/core/lib/zksync_core/src/api_server/tx_sender/tests.rs b/core/lib/zksync_core/src/api_server/tx_sender/tests.rs index d3790f82c5a..532b173f0eb 100644 --- a/core/lib/zksync_core/src/api_server/tx_sender/tests.rs +++ b/core/lib/zksync_core/src/api_server/tx_sender/tests.rs @@ -41,7 +41,7 @@ async fn getting_nonce_for_account() { let test_address = Address::repeat_byte(1); let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, l2_chain_id, &GenesisParams::mock()) + ensure_genesis_state(&mut storage, &GenesisParams::mock()) .await .unwrap(); // Manually insert a nonce for the address. diff --git a/core/lib/zksync_core/src/api_server/web3/tests/mod.rs b/core/lib/zksync_core/src/api_server/web3/tests/mod.rs index 9a996bbd687..d83647ee0bc 100644 --- a/core/lib/zksync_core/src/api_server/web3/tests/mod.rs +++ b/core/lib/zksync_core/src/api_server/web3/tests/mod.rs @@ -44,7 +44,7 @@ use crate::{ execution_sandbox::testonly::MockTransactionExecutor, tx_sender::tests::create_test_tx_sender, }, - genesis::{ensure_genesis_state, GenesisParams}, + genesis::{ensure_genesis_state, GenesisConfig, GenesisParams}, utils::testonly::{ create_l1_batch, create_l1_batch_metadata, create_l2_transaction, create_miniblock, l1_batch_metadata_to_commitment_artifacts, prepare_recovery_snapshot, @@ -237,13 +237,14 @@ impl StorageInitialization { ) -> anyhow::Result<()> { match self { Self::Genesis => { + let params = GenesisConfig { + l2_chain_id: network_config.zksync_network_id, + ..GenesisConfig::mock() + } + .load_genesis_params() + .unwrap(); if storage.blocks_dal().is_genesis_needed().await? { - ensure_genesis_state( - storage, - network_config.zksync_network_id, - &GenesisParams::mock(), - ) - .await?; + ensure_genesis_state(storage, ¶ms).await?; } } Self::Recovery { logs, factory_deps } => { diff --git a/core/lib/zksync_core/src/consensus/testonly.rs b/core/lib/zksync_core/src/consensus/testonly.rs index fb099595b03..84c4b424f6c 100644 --- a/core/lib/zksync_core/src/consensus/testonly.rs +++ b/core/lib/zksync_core/src/consensus/testonly.rs @@ -180,7 +180,7 @@ pub(super) async fn new_store(from_snapshot: bool) -> Store { prepare_recovery_snapshot(&mut storage, L1BatchNumber(23), MiniblockNumber(42), &[]) .await; } else { - ensure_genesis_state(&mut storage, L2ChainId::default(), &GenesisParams::mock()) + ensure_genesis_state(&mut storage, &GenesisParams::mock()) .await .unwrap(); } diff --git a/core/lib/zksync_core/src/consistency_checker/tests/mod.rs b/core/lib/zksync_core/src/consistency_checker/tests/mod.rs index b11771ec68e..6255a8d0e29 100644 --- a/core/lib/zksync_core/src/consistency_checker/tests/mod.rs +++ b/core/lib/zksync_core/src/consistency_checker/tests/mod.rs @@ -15,7 +15,7 @@ use zksync_types::{ use super::*; use crate::{ - genesis::{ensure_genesis_state, GenesisParams}, + genesis::{ensure_genesis_state, GenesisConfig, GenesisParams}, utils::testonly::{ create_l1_batch, create_l1_batch_metadata, l1_batch_metadata_to_commitment_artifacts, }, @@ -314,7 +314,7 @@ async fn normal_checker_function( let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, L2ChainId::default(), &GenesisParams::mock()) + ensure_genesis_state(&mut storage, &GenesisParams::mock()) .await .unwrap(); @@ -381,11 +381,13 @@ async fn checker_processes_pre_boojum_batches( let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - let genesis_params = GenesisParams { + let genesis_params = GenesisConfig { protocol_version: PRE_BOOJUM_PROTOCOL_VERSION, - ..GenesisParams::mock() - }; - ensure_genesis_state(&mut storage, L2ChainId::default(), &genesis_params) + ..GenesisConfig::mock() + } + .load_genesis_params() + .unwrap(); + ensure_genesis_state(&mut storage, &genesis_params) .await .unwrap(); storage @@ -592,7 +594,7 @@ async fn checker_detects_incorrect_tx_data(kind: IncorrectDataKind, snapshot_rec .save_protocol_version_with_tx(ProtocolVersion::default()) .await; } else { - ensure_genesis_state(&mut storage, L2ChainId::default(), &GenesisParams::mock()) + ensure_genesis_state(&mut storage, &GenesisParams::mock()) .await .unwrap(); } diff --git a/core/lib/zksync_core/src/genesis.rs b/core/lib/zksync_core/src/genesis.rs index 6a70a796cd4..d95e2623cfc 100644 --- a/core/lib/zksync_core/src/genesis.rs +++ b/core/lib/zksync_core/src/genesis.rs @@ -2,14 +2,20 @@ //! It initializes the Merkle tree with the basic setup (such as fields of special service accounts), //! setups the required databases, and outputs the data required to initialize a smart contract. -use anyhow::Context as _; +use anyhow::{anyhow, Context as _}; use multivm::{ circuit_sequencer_api_latest::sort_storage_access::sort_storage_access_queries, utils::get_max_gas_per_pubdata_byte, zk_evm_latest::aux_structures::{LogQuery as MultiVmLogQuery, Timestamp as MultiVMTimestamp}, }; -use zksync_contracts::{BaseSystemContracts, SET_CHAIN_ID_EVENT}; -use zksync_dal::StorageProcessor; +use serde::{Deserialize, Serialize}; +use zksync_config::{ + configs::chain::{NetworkConfig, StateKeeperConfig}, + ContractsConfig, ETHSenderConfig, PostgresConfig, +}; +use zksync_contracts::{BaseSystemContracts, BaseSystemContractsHashes, SET_CHAIN_ID_EVENT}; +use zksync_dal::{SqlxError, StorageProcessor}; +use zksync_env_config::FromEnv; use zksync_eth_client::{clients::QueryClient, EthInterface}; use zksync_merkle_tree::domain::ZkSyncTree; use zksync_system_constants::PRIORITY_EXPIRATION; @@ -21,82 +27,194 @@ use zksync_types::{ commitment::{CommitmentInput, L1BatchCommitment}, fee_model::BatchFeeInput, get_code_key, get_system_context_init_logs, - protocol_version::{decode_set_chain_id_event, L1VerifierConfig, ProtocolVersion}, + protocol_version::{ + decode_set_chain_id_event, L1VerifierConfig, ProtocolVersion, VerifierParams, + }, + system_contracts::get_system_smart_contracts, tokens::{TokenInfo, TokenMetadata, ETHEREUM_ADDRESS}, web3::types::{BlockNumber, FilterBuilder}, zk_evm_types::{LogQuery, Timestamp}, - AccountTreeId, Address, L1BatchNumber, L2ChainId, MiniblockNumber, ProtocolVersionId, - StorageKey, StorageLog, StorageLogKind, H256, + AccountTreeId, Address, L1BatchNumber, L1ChainId, L2ChainId, MiniblockNumber, + PackedEthSignature, ProtocolVersionId, StorageKey, StorageLog, StorageLogKind, H256, }; use zksync_utils::{be_words_to_bytes, bytecode::hash_bytecode, h256_to_u256, u256_to_h256}; use crate::metadata_calculator::L1BatchWithLogs; +#[derive(Debug, thiserror::Error)] +pub enum GenesisError { + #[error("Root hash mismatched {0:?}")] + RootHash(H256), + #[error("Leaf indexes mismatched {0}")] + LeafIndexes(u64), + #[error("Base system contracts mismatched {0:?}")] + BaseSystemContractsHashes(BaseSystemContractsHashes), + #[error("Commitment mismatched {0:?}")] + Commitment(H256), + #[error("Error: {0}")] + Other(#[from] anyhow::Error), + #[error("Error: {0}")] + DBError(#[from] SqlxError), +} + #[derive(Debug, Clone)] pub struct GenesisParams { - pub first_validator: Address, - pub protocol_version: ProtocolVersionId, - pub base_system_contracts: BaseSystemContracts, - pub system_contracts: Vec, - pub first_verifier_address: Address, - pub first_l1_verifier_config: L1VerifierConfig, + base_system_contracts: BaseSystemContracts, + system_contracts: Vec, + config: GenesisConfig, } impl GenesisParams { + pub fn system_contracts(&self) -> &[DeployedContract] { + &self.system_contracts + } + pub fn base_system_contracts(&self) -> &BaseSystemContracts { + &self.base_system_contracts + } + pub fn config(&self) -> &GenesisConfig { + &self.config + } +} + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct GenesisConfig { + pub protocol_version: ProtocolVersionId, + pub genesis_root_hash: H256, + pub rollup_last_leaf_index: u64, + pub genesis_commitment: H256, + #[serde(flatten)] + pub base_system_contracts_hashes: BaseSystemContractsHashes, + pub verifier_address: Address, + #[serde(flatten)] + pub verifier_config: L1VerifierConfig, + pub fee_account: Address, + pub diamond_proxy: Address, + pub erc20_bridge: Address, + pub state_transition_proxy_addr: Option
, + pub l1_chain_id: L1ChainId, + pub l2_chain_id: L2ChainId, +} + +impl GenesisConfig { + pub fn from_env() -> anyhow::Result { + let network_config = &NetworkConfig::from_env()?; + let contracts_config = &ContractsConfig::from_env()?; + let l1_verifier_config = L1VerifierConfig { + params: VerifierParams { + recursion_node_level_vk_hash: contracts_config.fri_recursion_node_level_vk_hash, + recursion_leaf_level_vk_hash: contracts_config.fri_recursion_leaf_level_vk_hash, + recursion_circuits_set_vks_hash: zksync_types::H256::zero(), + }, + recursion_scheduler_level_vk_hash: contracts_config.snark_wrapper_vk_hash, + }; + + let state_keeper = StateKeeperConfig::from_env()?; + Ok(GenesisConfig { + protocol_version: ProtocolVersionId::latest(), + genesis_root_hash: contracts_config + .genesis_root + .ok_or(anyhow!("genesis_root_hash required for genesis"))?, + rollup_last_leaf_index: contracts_config + .genesis_rollup_leaf_index + .ok_or(anyhow!("rollup_last_leaf_index required for genesis"))?, + genesis_commitment: contracts_config + .genesis_batch_commitment + .ok_or(anyhow!("genesis_commitment required for genesis"))?, + base_system_contracts_hashes: BaseSystemContractsHashes { + bootloader: state_keeper + .bootloader_hash + .ok_or(anyhow!("Bootloader hash required for genesis"))?, + default_aa: state_keeper + .default_aa_hash + .ok_or(anyhow!("Default aa hash required for genesis"))?, + }, + verifier_address: contracts_config.verifier_addr, + verifier_config: l1_verifier_config, + fee_account: state_keeper.fee_account_addr, + diamond_proxy: contracts_config.diamond_proxy_addr, + erc20_bridge: contracts_config.l1_erc20_bridge_proxy_addr, + state_transition_proxy_addr: contracts_config.state_transition_proxy_addr, + l1_chain_id: network_config.network.chain_id(), + l2_chain_id: network_config.zksync_network_id, + }) + } + + pub fn load_genesis_params(self) -> Result { + let base_system_contracts = BaseSystemContracts::load_from_disk(); + let system_contracts = get_system_smart_contracts(); + + if self.base_system_contracts_hashes != base_system_contracts.hashes() { + return Err(GenesisError::BaseSystemContractsHashes( + base_system_contracts.hashes(), + )); + } + + Ok(GenesisParams { + base_system_contracts: BaseSystemContracts::load_from_disk(), + system_contracts, + config: self, + }) + } #[cfg(test)] pub(crate) fn mock() -> Self { - use zksync_types::system_contracts::get_system_smart_contracts; - Self { - first_validator: Address::repeat_byte(0x01), protocol_version: ProtocolVersionId::latest(), + genesis_root_hash: Default::default(), + rollup_last_leaf_index: 0, + genesis_commitment: Default::default(), + base_system_contracts_hashes: BaseSystemContracts::load_from_disk().hashes(), + verifier_address: Default::default(), + verifier_config: Default::default(), + fee_account: Default::default(), + diamond_proxy: Default::default(), + erc20_bridge: Default::default(), + state_transition_proxy_addr: Default::default(), + l1_chain_id: L1ChainId(9), + l2_chain_id: L2ChainId::default(), + set_chain_id: false, + } + } +} + +impl GenesisParams { + #[cfg(test)] + pub(crate) fn mock() -> Self { + Self { base_system_contracts: BaseSystemContracts::load_from_disk(), system_contracts: get_system_smart_contracts(), - first_l1_verifier_config: L1VerifierConfig::default(), - first_verifier_address: Address::zero(), + config: GenesisConfig::mock(), } } } pub async fn ensure_genesis_state( storage: &mut StorageProcessor<'_>, - zksync_chain_id: L2ChainId, genesis_params: &GenesisParams, -) -> anyhow::Result { +) -> Result { let mut transaction = storage.start_transaction().await?; // return if genesis block was already processed if !transaction.blocks_dal().is_genesis_needed().await? { tracing::debug!("genesis is not needed!"); - return transaction + return Ok(transaction .blocks_dal() .get_l1_batch_state_root(L1BatchNumber(0)) .await .context("failed fetching state root hash for genesis L1 batch")? - .context("genesis L1 batch hash is empty"); + .context("genesis L1 batch hash is empty")?); } tracing::info!("running regenesis"); - let GenesisParams { - first_validator, - protocol_version, - base_system_contracts, - system_contracts, - first_verifier_address, - first_l1_verifier_config, - } = genesis_params; - - let base_system_contracts_hashes = base_system_contracts.hashes(); create_genesis_l1_batch( &mut transaction, - *first_validator, - zksync_chain_id, - *protocol_version, - base_system_contracts, - system_contracts, - *first_l1_verifier_config, - *first_verifier_address, + genesis_params.config.fee_account, + genesis_params.config.l2_chain_id, + genesis_params.config().protocol_version, + genesis_params.base_system_contracts(), + genesis_params.system_contracts(), + genesis_params.config().verifier_config, + genesis_params.config().verifier_address, ) .await?; tracing::info!("chain_schema_genesis is complete"); @@ -112,8 +230,8 @@ pub async fn ensure_genesis_state( let commitment_input = CommitmentInput::for_genesis_batch( genesis_root_hash, rollup_last_leaf_index, - base_system_contracts_hashes, - *protocol_version, + genesis_params.config.base_system_contracts_hashes, + genesis_params.config.protocol_version, ); let block_commitment = L1BatchCommitment::new(commitment_input); @@ -128,24 +246,17 @@ pub async fn ensure_genesis_state( transaction.commit().await?; - // We need to `println` this value because it will be used to initialize the smart contract. - println!("CONTRACTS_GENESIS_ROOT={:?}", genesis_root_hash); - println!( - "CONTRACTS_GENESIS_BATCH_COMMITMENT={:?}", - block_commitment.hash().commitment - ); - println!( - "CONTRACTS_GENESIS_ROLLUP_LEAF_INDEX={}", - rollup_last_leaf_index - ); - println!( - "CHAIN_STATE_KEEPER_BOOTLOADER_HASH={:?}", - base_system_contracts_hashes.bootloader - ); - println!( - "CHAIN_STATE_KEEPER_DEFAULT_AA_HASH={:?}", - base_system_contracts_hashes.default_aa - ); + if genesis_params.config.genesis_root_hash != genesis_root_hash { + return Err(GenesisError::RootHash(genesis_root_hash)); + } + + if genesis_params.config.genesis_commitment != block_commitment.hash().commitment { + return Err(GenesisError::Commitment(block_commitment.hash().commitment)); + } + + if genesis_params.config.rollup_last_leaf_index != rollup_last_leaf_index { + return Err(GenesisError::LeafIndexes(rollup_last_leaf_index)); + } Ok(genesis_root_hash) } @@ -472,17 +583,9 @@ mod tests { let mut conn = pool.access_storage().await.unwrap(); conn.blocks_dal().delete_genesis().await.unwrap(); - let params = GenesisParams { - protocol_version: ProtocolVersionId::latest(), - first_validator: Address::random(), - base_system_contracts: BaseSystemContracts::load_from_disk(), - system_contracts: get_system_smart_contracts(), - first_l1_verifier_config: L1VerifierConfig::default(), - first_verifier_address: Address::random(), - }; - ensure_genesis_state(&mut conn, L2ChainId::from(270), ¶ms) - .await - .unwrap(); + let params = GenesisParams::mock(); + + ensure_genesis_state(&mut conn, ¶ms).await.unwrap(); assert!(!conn.blocks_dal().is_genesis_needed().await.unwrap()); let metadata = conn @@ -494,9 +597,7 @@ mod tests { assert_ne!(root_hash, H256::zero()); // Check that `ensure_genesis_state()` doesn't panic on repeated runs. - ensure_genesis_state(&mut conn, L2ChainId::from(270), ¶ms) - .await - .unwrap(); + ensure_genesis_state(&mut conn, ¶ms).await.unwrap(); } #[tokio::test] @@ -505,17 +606,13 @@ mod tests { let mut conn = pool.access_storage().await.unwrap(); conn.blocks_dal().delete_genesis().await.unwrap(); - let params = GenesisParams { - protocol_version: ProtocolVersionId::latest(), - first_validator: Address::random(), - base_system_contracts: BaseSystemContracts::load_from_disk(), - system_contracts: get_system_smart_contracts(), - first_l1_verifier_config: L1VerifierConfig::default(), - first_verifier_address: Address::random(), - }; - ensure_genesis_state(&mut conn, L2ChainId::max(), ¶ms) - .await - .unwrap(); + let params = GenesisConfig { + l2_chain_id: L2ChainId::max(), + ..GenesisConfig::mock() + } + .load_genesis_params() + .unwrap(); + ensure_genesis_state(&mut conn, ¶ms).await.unwrap(); assert!(!conn.blocks_dal().is_genesis_needed().await.unwrap()); let metadata = conn @@ -530,14 +627,14 @@ mod tests { async fn running_genesis_with_non_latest_protocol_version() { let pool = ConnectionPool::test_pool().await; let mut conn = pool.access_storage().await.unwrap(); - let params = GenesisParams { + let params = GenesisConfig { protocol_version: ProtocolVersionId::Version10, - ..GenesisParams::mock() - }; + ..GenesisConfig::mock() + } + .load_genesis_params() + .unwrap(); - ensure_genesis_state(&mut conn, L2ChainId::max(), ¶ms) - .await - .unwrap(); + ensure_genesis_state(&mut conn, ¶ms).await.unwrap(); assert!(!conn.blocks_dal().is_genesis_needed().await.unwrap()); } } diff --git a/core/lib/zksync_core/src/lib.rs b/core/lib/zksync_core/src/lib.rs index 86d9df66010..3794557abed 100644 --- a/core/lib/zksync_core/src/lib.rs +++ b/core/lib/zksync_core/src/lib.rs @@ -26,7 +26,6 @@ use zksync_config::{ CircuitBreakerConfig, MempoolConfig, NetworkConfig, OperationsManagerConfig, StateKeeperConfig, }, - contracts::ProverAtGenesis, database::{MerkleTreeConfig, MerkleTreeMode}, }, ApiConfig, ContractsConfig, DBConfig, ETHSenderConfig, PostgresConfig, @@ -62,6 +61,7 @@ use crate::{ commitment_generator::CommitmentGenerator, eth_sender::{Aggregator, EthTxAggregator, EthTxManager}, eth_watch::start_eth_watch, + genesis::GenesisConfig, house_keeper::{ blocks_state_reporter::L1BatchMetricsReporter, fri_proof_compressor_job_retry_manager::FriProofCompressorJobRetryManager, @@ -107,12 +107,9 @@ mod utils; /// Inserts the initial information about zkSync tokens into the database. pub async fn genesis_init( + genesis_config: GenesisConfig, postgres_config: &PostgresConfig, - eth_sender: ÐSenderConfig, - network_config: &NetworkConfig, - contracts_config: &ContractsConfig, eth_client_url: &str, - wait_for_set_chain_id: bool, ) -> anyhow::Result<()> { let db_url = postgres_config.master_url()?; let pool = ConnectionPool::singleton(db_url) @@ -120,78 +117,15 @@ pub async fn genesis_init( .await .context("failed to build connection_pool")?; let mut storage = pool.access_storage().await.context("access_storage()")?; - let operator_address = PackedEthSignature::address_from_private_key( - ð_sender - .sender - .private_key() - .context("Private key is required for genesis init")?, - ) - .context("Failed to restore operator address from private key")?; - - // Select the first prover to be used during genesis. - // Later we can change provers using the system upgrades, but for genesis - // we should select one using the environment config. - let first_l1_verifier_config = - if matches!(contracts_config.prover_at_genesis, ProverAtGenesis::Fri) { - let l1_verifier_config = L1VerifierConfig { - params: VerifierParams { - recursion_node_level_vk_hash: contracts_config.fri_recursion_node_level_vk_hash, - recursion_leaf_level_vk_hash: contracts_config.fri_recursion_leaf_level_vk_hash, - recursion_circuits_set_vks_hash: zksync_types::H256::zero(), - }, - recursion_scheduler_level_vk_hash: contracts_config.snark_wrapper_vk_hash, - }; - - let eth_client = QueryClient::new(eth_client_url)?; - let args = CallFunctionArgs::new("verificationKeyHash", ()).for_contract( - contracts_config.verifier_addr, - zksync_contracts::verifier_contract(), - ); - let vk_hash = eth_client.call_contract_function(args).await?; - let vk_hash = zksync_types::H256::from_tokens(vk_hash)?; - - assert_eq!( - vk_hash, l1_verifier_config.recursion_scheduler_level_vk_hash, - "L1 verifier key does not match the one in the config" - ); - - l1_verifier_config - } else { - L1VerifierConfig { - params: VerifierParams { - recursion_node_level_vk_hash: contracts_config.recursion_node_level_vk_hash, - recursion_leaf_level_vk_hash: contracts_config.recursion_leaf_level_vk_hash, - recursion_circuits_set_vks_hash: contracts_config - .recursion_circuits_set_vks_hash, - }, - recursion_scheduler_level_vk_hash: contracts_config - .recursion_scheduler_level_vk_hash, - } - }; - - genesis::ensure_genesis_state( - &mut storage, - network_config.zksync_network_id, - &genesis::GenesisParams { - // We consider the operator to be the first validator for now. - first_validator: operator_address, - protocol_version: ProtocolVersionId::latest(), - base_system_contracts: BaseSystemContracts::load_from_disk(), - system_contracts: get_system_smart_contracts(), - first_verifier_address: contracts_config.verifier_addr, - first_l1_verifier_config, - }, - ) - .await?; + let params = genesis_config.load_genesis_params()?; + genesis::ensure_genesis_state(&mut storage, ¶ms).await?; - if wait_for_set_chain_id { + if let Some(state_transition_proxy_addr) = params.config().state_transition_proxy_addr { genesis::save_set_chain_id_tx( eth_client_url, - contracts_config.diamond_proxy_addr, - contracts_config - .state_transition_proxy_addr - .context("state_transition_proxy_addr is not set, but needed for genesis")?, + params.config().diamond_proxy, + state_transition_proxy_addr, &mut storage, ) .await diff --git a/core/lib/zksync_core/src/metadata_calculator/tests.rs b/core/lib/zksync_core/src/metadata_calculator/tests.rs index ece4c4e66fc..085b3744230 100644 --- a/core/lib/zksync_core/src/metadata_calculator/tests.rs +++ b/core/lib/zksync_core/src/metadata_calculator/tests.rs @@ -400,7 +400,7 @@ async fn setup_calculator_with_options( let mut storage = pool.access_storage().await.unwrap(); if storage.blocks_dal().is_genesis_needed().await.unwrap() { - ensure_genesis_state(&mut storage, L2ChainId::from(270), &GenesisParams::mock()) + ensure_genesis_state(&mut storage, &GenesisParams::mock()) .await .unwrap(); } diff --git a/core/lib/zksync_core/src/state_keeper/io/common/tests.rs b/core/lib/zksync_core/src/state_keeper/io/common/tests.rs index a59f711a576..e2f2f01aa39 100644 --- a/core/lib/zksync_core/src/state_keeper/io/common/tests.rs +++ b/core/lib/zksync_core/src/state_keeper/io/common/tests.rs @@ -16,7 +16,7 @@ use zksync_types::{ use super::*; use crate::{ - genesis::{ensure_genesis_state, GenesisParams}, + genesis::{ensure_genesis_state, GenesisConfig, GenesisParams}, utils::testonly::{ create_l1_batch, create_l2_transaction, create_miniblock, execute_l2_transaction, prepare_recovery_snapshot, @@ -443,9 +443,9 @@ async fn loading_pending_batch_after_snapshot_recovery() { async fn getting_batch_version_with_genesis() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - let mut genesis_params = GenesisParams::mock(); + let mut genesis_params = GenesisConfig::mock(); genesis_params.protocol_version = ProtocolVersionId::Version5; - ensure_genesis_state(&mut storage, L2ChainId::default(), &genesis_params) + ensure_genesis_state(&mut storage, &genesis_params) .await .unwrap(); diff --git a/core/lib/zksync_core/src/state_keeper/mempool_actor.rs b/core/lib/zksync_core/src/state_keeper/mempool_actor.rs index 1e864b06347..ca6baf564f7 100644 --- a/core/lib/zksync_core/src/state_keeper/mempool_actor.rs +++ b/core/lib/zksync_core/src/state_keeper/mempool_actor.rs @@ -219,7 +219,7 @@ mod tests { async fn syncing_mempool_basics() { let pool = ConnectionPool::constrained_test_pool(1).await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, L2ChainId::default(), &GenesisParams::mock()) + ensure_genesis_state(&mut storage, &GenesisParams::mock()) .await .unwrap(); drop(storage); @@ -276,7 +276,7 @@ mod tests { async fn ignoring_transaction_with_insufficient_fee() { let pool = ConnectionPool::constrained_test_pool(1).await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, L2ChainId::default(), &GenesisParams::mock()) + ensure_genesis_state(&mut storage, &GenesisParams::mock()) .await .unwrap(); drop(storage); @@ -316,7 +316,7 @@ mod tests { async fn ignoring_transaction_with_old_nonce() { let pool = ConnectionPool::constrained_test_pool(1).await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, L2ChainId::default(), &GenesisParams::mock()) + ensure_genesis_state(&mut storage, &GenesisParams::mock()) .await .unwrap(); drop(storage); diff --git a/core/lib/zksync_core/src/sync_layer/batch_status_updater/tests.rs b/core/lib/zksync_core/src/sync_layer/batch_status_updater/tests.rs index 9922055f42b..1147f78b499 100644 --- a/core/lib/zksync_core/src/sync_layer/batch_status_updater/tests.rs +++ b/core/lib/zksync_core/src/sync_layer/batch_status_updater/tests.rs @@ -226,7 +226,7 @@ fn mock_updater( async fn updater_cursor_for_storage_with_genesis_block() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, L2ChainId::default(), &GenesisParams::mock()) + ensure_genesis_state(&mut storage, &GenesisParams::mock()) .await .unwrap(); for number in [1, 2] { @@ -278,7 +278,7 @@ async fn normal_updater_operation(snapshot_recovery: bool, async_batches: bool) prepare_recovery_snapshot(&mut storage, L1BatchNumber(23), MiniblockNumber(42), &[]).await; L1BatchNumber(24) } else { - ensure_genesis_state(&mut storage, L2ChainId::default(), &GenesisParams::mock()) + ensure_genesis_state(&mut storage, &GenesisParams::mock()) .await .unwrap(); L1BatchNumber(1) @@ -350,7 +350,7 @@ async fn updater_with_gradual_main_node_updates(snapshot_recovery: bool) { prepare_recovery_snapshot(&mut storage, L1BatchNumber(23), MiniblockNumber(42), &[]).await; L1BatchNumber(24) } else { - ensure_genesis_state(&mut storage, L2ChainId::default(), &GenesisParams::mock()) + ensure_genesis_state(&mut storage, &GenesisParams::mock()) .await .unwrap(); L1BatchNumber(1) diff --git a/core/lib/zksync_core/src/sync_layer/genesis.rs b/core/lib/zksync_core/src/sync_layer/genesis.rs index 021d828c966..2d94708c789 100644 --- a/core/lib/zksync_core/src/sync_layer/genesis.rs +++ b/core/lib/zksync_core/src/sync_layer/genesis.rs @@ -19,8 +19,8 @@ pub async fn perform_genesis_if_needed( // We want to check whether the genesis is needed before we create genesis params to not // make the node startup slower. let genesis_block_hash = if transaction.blocks_dal().is_genesis_needed().await? { - let genesis_params = create_genesis_params(client).await?; - ensure_genesis_state(&mut transaction, zksync_chain_id, &genesis_params) + let genesis_params = create_genesis_params(client, zksync_chain_id).await?; + ensure_genesis_state(&mut transaction, &genesis_params) .await .context("ensure_genesis_state")? } else { @@ -36,7 +36,10 @@ pub async fn perform_genesis_if_needed( Ok(()) } -async fn create_genesis_params(client: &dyn MainNodeClient) -> anyhow::Result { +async fn create_genesis_params( + client: &dyn MainNodeClient, + zksync_chain_id: L2ChainId, +) -> anyhow::Result { let genesis_miniblock = client .fetch_l2_block(zksync_types::MiniblockNumber(0), false) .await? @@ -88,14 +91,15 @@ async fn create_genesis_params(client: &dyn MainNodeClient) -> anyhow::Result) { if storage.blocks_dal().is_genesis_needed().await.unwrap() { - ensure_genesis_state(storage, L2ChainId::default(), &GenesisParams::mock()) + ensure_genesis_state(storage, &GenesisParams::mock()) .await .unwrap(); } diff --git a/core/lib/zksync_core/src/utils/mod.rs b/core/lib/zksync_core/src/utils/mod.rs index ad2e4bd0541..0dde25d5436 100644 --- a/core/lib/zksync_core/src/utils/mod.rs +++ b/core/lib/zksync_core/src/utils/mod.rs @@ -188,7 +188,7 @@ mod tests { tokio::spawn(async move { tokio::time::sleep(Duration::from_millis(25)).await; let mut storage = pool_copy.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, L2ChainId::default(), &GenesisParams::mock()) + ensure_genesis_state(&mut storage, &GenesisParams::mock()) .await .unwrap(); }); From fc5a877536b67f69ab1e527d41032a9affb5ea4f Mon Sep 17 00:00:00 2001 From: Danil Date: Wed, 13 Mar 2024 18:09:21 +0100 Subject: [PATCH 11/65] Genesis for EN Signed-off-by: Danil --- core/lib/dal/src/blocks_web3_dal.rs | 2 + core/lib/dal/src/models/storage_block.rs | 4 ++ core/lib/types/src/api/mod.rs | 2 + .../lib/zksync_core/src/consensus/testonly.rs | 11 ++++- core/lib/zksync_core/src/genesis.rs | 12 +++++- core/lib/zksync_core/src/lib.rs | 14 ++----- .../sync_layer/batch_status_updater/tests.rs | 2 + core/lib/zksync_core/src/sync_layer/client.rs | 41 +++++++++++++++---- .../lib/zksync_core/src/sync_layer/genesis.rs | 37 ++++++++++++----- 9 files changed, 94 insertions(+), 31 deletions(-) diff --git a/core/lib/dal/src/blocks_web3_dal.rs b/core/lib/dal/src/blocks_web3_dal.rs index dc3a1cc40d9..f3d82356277 100644 --- a/core/lib/dal/src/blocks_web3_dal.rs +++ b/core/lib/dal/src/blocks_web3_dal.rs @@ -600,6 +600,8 @@ impl BlocksWeb3Dal<'_, '_> { l1_batches.l1_tx_count, l1_batches.l2_tx_count, l1_batches.hash AS "root_hash?", + l1_batches.commitment, + l1_batches.rollup_last_leaf_index, commit_tx.tx_hash AS "commit_tx_hash?", commit_tx.confirmed_at AS "committed_at?", prove_tx.tx_hash AS "prove_tx_hash?", diff --git a/core/lib/dal/src/models/storage_block.rs b/core/lib/dal/src/models/storage_block.rs index c7957162e8c..68a39596bff 100644 --- a/core/lib/dal/src/models/storage_block.rs +++ b/core/lib/dal/src/models/storage_block.rs @@ -345,6 +345,8 @@ pub struct StorageL1BatchDetails { pub l2_fair_gas_price: i64, pub bootloader_code_hash: Option>, pub default_aa_code_hash: Option>, + pub commitment: Option>, + pub rollup_last_leaf_index: Option, } impl From for api::L1BatchDetails { @@ -391,6 +393,8 @@ impl From for api::L1BatchDetails { }; api::L1BatchDetails { base, + commitment: details.commitment.as_deref().map(H256::from_slice), + rollup_last_leaf_index: details.rollup_last_leaf_index.map(|a| a as u64), number: L1BatchNumber(details.number as u32), } } diff --git a/core/lib/types/src/api/mod.rs b/core/lib/types/src/api/mod.rs index 3203687b853..d1a6c2efe29 100644 --- a/core/lib/types/src/api/mod.rs +++ b/core/lib/types/src/api/mod.rs @@ -714,6 +714,8 @@ pub struct BlockDetails { #[serde(rename_all = "camelCase")] pub struct L1BatchDetails { pub number: L1BatchNumber, + pub commitment: Option, + pub rollup_last_leaf_index: Option, #[serde(flatten)] pub base: BlockDetailsBase, } diff --git a/core/lib/zksync_core/src/consensus/testonly.rs b/core/lib/zksync_core/src/consensus/testonly.rs index 84c4b424f6c..a9fb4138d3d 100644 --- a/core/lib/zksync_core/src/consensus/testonly.rs +++ b/core/lib/zksync_core/src/consensus/testonly.rs @@ -9,8 +9,8 @@ use zksync_consensus_roles::validator; use zksync_contracts::BaseSystemContractsHashes; use zksync_dal::ConnectionPool; use zksync_types::{ - api, snapshots::SnapshotRecoveryStatus, Address, L1BatchNumber, L2ChainId, MiniblockNumber, - ProtocolVersionId, H256, + api, api::L1BatchDetails, snapshots::SnapshotRecoveryStatus, Address, L1BatchNumber, L2ChainId, + MiniblockNumber, ProtocolVersionId, H256, }; use zksync_web3_decl::{ error::{EnrichedClientError, EnrichedClientResult}, @@ -143,6 +143,13 @@ impl MainNodeClient for MockMainNodeClient { ) -> EnrichedClientResult> { unimplemented!() } + + async fn fetch_genesis_l1_batch(&self) -> EnrichedClientResult { + Err(EnrichedClientError::custom( + "not implemented", + "fetch_genesis_l1_batch", + )) + } } /// Fake StateKeeper for tests. diff --git a/core/lib/zksync_core/src/genesis.rs b/core/lib/zksync_core/src/genesis.rs index d95e2623cfc..653e21d4489 100644 --- a/core/lib/zksync_core/src/genesis.rs +++ b/core/lib/zksync_core/src/genesis.rs @@ -11,7 +11,7 @@ use multivm::{ use serde::{Deserialize, Serialize}; use zksync_config::{ configs::chain::{NetworkConfig, StateKeeperConfig}, - ContractsConfig, ETHSenderConfig, PostgresConfig, + ContractsConfig, }; use zksync_contracts::{BaseSystemContracts, BaseSystemContractsHashes, SET_CHAIN_ID_EVENT}; use zksync_dal::{SqlxError, StorageProcessor}; @@ -35,7 +35,7 @@ use zksync_types::{ web3::types::{BlockNumber, FilterBuilder}, zk_evm_types::{LogQuery, Timestamp}, AccountTreeId, Address, L1BatchNumber, L1ChainId, L2ChainId, MiniblockNumber, - PackedEthSignature, ProtocolVersionId, StorageKey, StorageLog, StorageLogKind, H256, + ProtocolVersionId, StorageKey, StorageLog, StorageLogKind, H256, }; use zksync_utils::{be_words_to_bytes, bytecode::hash_bytecode, h256_to_u256, u256_to_h256}; @@ -142,7 +142,14 @@ impl GenesisConfig { pub fn load_genesis_params(self) -> Result { let base_system_contracts = BaseSystemContracts::load_from_disk(); let system_contracts = get_system_smart_contracts(); + self.into_genesis_params(base_system_contracts, system_contracts) + } + pub fn into_genesis_params( + self, + base_system_contracts: BaseSystemContracts, + system_contracts: Vec, + ) -> Result { if self.base_system_contracts_hashes != base_system_contracts.hashes() { return Err(GenesisError::BaseSystemContractsHashes( base_system_contracts.hashes(), @@ -155,6 +162,7 @@ impl GenesisConfig { config: self, }) } + #[cfg(test)] pub(crate) fn mock() -> Self { Self { diff --git a/core/lib/zksync_core/src/lib.rs b/core/lib/zksync_core/src/lib.rs index 3794557abed..578793cba15 100644 --- a/core/lib/zksync_core/src/lib.rs +++ b/core/lib/zksync_core/src/lib.rs @@ -28,25 +28,19 @@ use zksync_config::{ }, database::{MerkleTreeConfig, MerkleTreeMode}, }, - ApiConfig, ContractsConfig, DBConfig, ETHSenderConfig, PostgresConfig, + ApiConfig, ContractsConfig, DBConfig, PostgresConfig, }; -use zksync_contracts::{governance_contract, BaseSystemContracts}; +use zksync_contracts::governance_contract; use zksync_dal::{healthcheck::ConnectionPoolHealthCheck, ConnectionPool}; use zksync_eth_client::{ clients::{PKSigningClient, QueryClient}, - BoundEthInterface, CallFunctionArgs, EthInterface, + BoundEthInterface, }; use zksync_health_check::{AppHealthCheck, HealthStatus, ReactiveHealthCheck}; use zksync_object_store::{ObjectStore, ObjectStoreFactory}; use zksync_queued_job_processor::JobProcessor; use zksync_state::PostgresStorageCaches; -use zksync_types::{ - fee_model::FeeModelConfig, - protocol_version::{L1VerifierConfig, VerifierParams}, - system_contracts::get_system_smart_contracts, - web3::contract::tokens::Detokenize, - L2ChainId, PackedEthSignature, ProtocolVersionId, -}; +use zksync_types::{fee_model::FeeModelConfig, L2ChainId}; use crate::{ api_server::{ diff --git a/core/lib/zksync_core/src/sync_layer/batch_status_updater/tests.rs b/core/lib/zksync_core/src/sync_layer/batch_status_updater/tests.rs index 1147f78b499..22f9341a82d 100644 --- a/core/lib/zksync_core/src/sync_layer/batch_status_updater/tests.rs +++ b/core/lib/zksync_core/src/sync_layer/batch_status_updater/tests.rs @@ -163,6 +163,8 @@ fn mock_block_details(number: u32, stage: L1BatchStage) -> api::BlockDetails { l1_gas_price: 1, l2_fair_gas_price: 2, base_system_contracts_hashes: BaseSystemContractsHashes::default(), + commitment: Some(H256::zero()), + rollup_leaf_index: Some(2), }, operator_address: Address::zero(), protocol_version: Some(ProtocolVersionId::default()), diff --git a/core/lib/zksync_core/src/sync_layer/client.rs b/core/lib/zksync_core/src/sync_layer/client.rs index 3528b526097..2fe06db584a 100644 --- a/core/lib/zksync_core/src/sync_layer/client.rs +++ b/core/lib/zksync_core/src/sync_layer/client.rs @@ -5,8 +5,8 @@ use std::fmt; use async_trait::async_trait; use zksync_system_constants::ACCOUNT_CODE_STORAGE_ADDRESS; use zksync_types::{ - api::{self, en}, - get_code_key, Address, L1BatchNumber, MiniblockNumber, ProtocolVersionId, H256, U64, + api::{self, en, BridgeAddresses, L1BatchDetails}, + get_code_key, Address, L1BatchNumber, L1ChainId, MiniblockNumber, ProtocolVersionId, H256, U64, }; use zksync_web3_decl::{ error::{ClientRpcContext, EnrichedClientError, EnrichedClientResult}, @@ -43,6 +43,10 @@ pub trait MainNodeClient: 'static + Send + Sync + fmt::Debug { ) -> EnrichedClientResult>; async fn fetch_consensus_genesis(&self) -> EnrichedClientResult>; + + async fn fetch_genesis_l1_batch(&self) -> EnrichedClientResult; + async fn fetch_l1_chain_id(&self) -> EnrichedClientResult; + async fn fetch_contracts(&self) -> EnrichedClientResult<(Address, BridgeAddresses)>; } impl dyn MainNodeClient { @@ -111,7 +115,14 @@ impl MainNodeClient for HttpClient { } async fn fetch_genesis_l1_batch_hash(&self) -> EnrichedClientResult { - let genesis_l1_batch = self + let genesis_l1_batch = self.fetch_genesis_l1_batch().await?; + genesis_l1_batch.base.root_hash.ok_or_else(|| { + EnrichedClientError::custom("missing genesis L1 batch hash", "get_l1_batch_details") + }) + } + + async fn fetch_genesis_l1_batch(&self) -> EnrichedClientResult { + Ok(self .get_l1_batch_details(L1BatchNumber(0)) .rpc_context("get_l1_batch_details") .await? @@ -120,10 +131,7 @@ impl MainNodeClient for HttpClient { "main node did not return genesis block", "get_l1_batch_details", ) - })?; - genesis_l1_batch.base.root_hash.ok_or_else(|| { - EnrichedClientError::custom("missing genesis L1 batch hash", "get_l1_batch_details") - }) + })?) } async fn fetch_l2_block_number(&self) -> EnrichedClientResult { @@ -153,4 +161,23 @@ impl MainNodeClient for HttpClient { .rpc_context("consensus_genesis") .await } + + async fn fetch_l1_chain_id(&self) -> EnrichedClientResult { + self.l1_chain_id() + .rpc_context("fetch_l1_chain_id") + .await + .map(|l1_chain_id| L1ChainId(l1_chain_id.as_u64())) + } + + async fn fetch_contracts(&self) -> EnrichedClientResult<(Address, BridgeAddresses)> { + let main_contract = self + .get_main_contract() + .rpc_context("get_main_contract") + .await?; + let bridge_contracts = self + .get_bridge_contracts() + .rpc_context("get bridges") + .await?; + Ok((main_contract, bridge_contracts)) + } } diff --git a/core/lib/zksync_core/src/sync_layer/genesis.rs b/core/lib/zksync_core/src/sync_layer/genesis.rs index 2d94708c789..d7086e36c8d 100644 --- a/core/lib/zksync_core/src/sync_layer/genesis.rs +++ b/core/lib/zksync_core/src/sync_layer/genesis.rs @@ -8,7 +8,7 @@ use zksync_types::{ }; use super::client::MainNodeClient; -use crate::genesis::{ensure_genesis_state, GenesisParams}; +use crate::genesis::{ensure_genesis_state, GenesisConfig, GenesisParams}; pub async fn perform_genesis_if_needed( storage: &mut StorageProcessor<'_>, @@ -47,6 +47,9 @@ async fn create_genesis_params( let first_validator = genesis_miniblock.operator_address; let base_system_contracts_hashes = genesis_miniblock.base_system_contracts_hashes; let protocol_version = genesis_miniblock.protocol_version; + let genesis_batch = client.fetch_genesis_l1_batch().await?; + let l1_chain_id = client.fetch_l1_chain_id().await?; + let (main_contract, bridge_contracts) = client.fetch_contracts().await?; // Load the list of addresses that are known to contain system contracts at any point in time. // Not every of these addresses is guaranteed to be present in the genesis state, but we'll iterate through @@ -91,15 +94,29 @@ async fn create_genesis_params( // Use default L1 verifier config and verifier address for genesis as they are not used by EN. let first_l1_verifier_config = L1VerifierConfig::default(); let first_verifier_address = Address::default(); - todo!() - // Ok(GenesisParams { - // protocol_version, - // base_system_contracts, - // system_contracts, - // first_validator, - // first_l1_verifier_config, - // first_verifier_address, - // }) + Ok(GenesisConfig { + protocol_version, + genesis_root_hash: genesis_batch + .base + .root_hash + .context("Genesis can't be pending")?, + rollup_last_leaf_index: genesis_batch + .rollup_last_leaf_index + .context("Genesis can't be pending")?, + genesis_commitment: genesis_batch + .commitment + .context("Genesis can't be pending")?, + base_system_contracts_hashes, + verifier_address: first_verifier_address, + verifier_config: first_l1_verifier_config, + fee_account: first_validator, + diamond_proxy: main_contract, + erc20_bridge: bridge_contracts.l1_erc20_default_bridge, + state_transition_proxy_addr: None, + l1_chain_id, + l2_chain_id: zksync_chain_id, + } + .into_genesis_params(base_system_contracts, system_contracts)?) } async fn fetch_base_system_contracts( From 9aed6ad9561470585eeff2bc88684cf74075a8c2 Mon Sep 17 00:00:00 2001 From: Danil Date: Wed, 13 Mar 2024 22:20:01 +0100 Subject: [PATCH 12/65] Load genesis from env Signed-off-by: Danil --- core/bin/zksync_server/src/main.rs | 14 +- core/lib/config/src/configs/genesis.rs | 23 +++ core/lib/config/src/configs/mod.rs | 2 + core/lib/config/src/lib.rs | 3 +- core/lib/config/src/testonly.rs | 26 ++- core/lib/env_config/src/genesis.rs | 42 +++++ core/lib/env_config/src/lib.rs | 1 + core/lib/zksync_core/src/genesis.rs | 155 +++++------------- core/lib/zksync_core/src/lib.rs | 6 +- .../lib/zksync_core/src/sync_layer/genesis.rs | 26 ++- 10 files changed, 169 insertions(+), 129 deletions(-) create mode 100644 core/lib/config/src/configs/genesis.rs create mode 100644 core/lib/env_config/src/genesis.rs diff --git a/core/bin/zksync_server/src/main.rs b/core/bin/zksync_server/src/main.rs index 03d89a23326..3cf99f750cd 100644 --- a/core/bin/zksync_server/src/main.rs +++ b/core/bin/zksync_server/src/main.rs @@ -15,10 +15,9 @@ use zksync_config::{ PrometheusConfig, ProofDataHandlerConfig, WitnessGeneratorConfig, }, ApiConfig, ContractsConfig, DBConfig, ETHClientConfig, ETHSenderConfig, ETHWatchConfig, - GasAdjusterConfig, ObjectStoreConfig, PostgresConfig, + GasAdjusterConfig, GenesisConfig, ObjectStoreConfig, PostgresConfig, }; use zksync_core::{ - genesis::GenesisConfig, genesis_init, initialize_components, is_genesis_needed, setup_sigint_handler, temp_config_store::{decode_yaml, Secrets, TempConfigStore}, Component, Components, @@ -54,6 +53,9 @@ struct Cli { /// Path to the yaml with genesis #[arg(long)] genesis_path: Option, + /// Generate genesis block for the first contract deployment using temporary DB. + #[arg(long)] + genesis: bool, } #[derive(Debug, Clone)] @@ -152,15 +154,15 @@ async fn main() -> anyhow::Result<()> { let postgres_config = configs.postgres_config.clone().context("PostgresConfig")?; - if is_genesis_needed(&postgres_config).await { + if opt.genesis || is_genesis_needed(&postgres_config).await { let genesis = GenesisConfig::from_env().context("Genesis config")?; let eth_client = ETHClientConfig::from_env().context("EthClientConfig")?; genesis_init(genesis, &postgres_config, ð_client.web3_url) .await .context("genesis_init")?; - // if opt.genesis { - // return Ok(()); - // } + if opt.genesis { + return Ok(()); + } } let components = if opt.rebuild_tree { diff --git a/core/lib/config/src/configs/genesis.rs b/core/lib/config/src/configs/genesis.rs new file mode 100644 index 00000000000..8836c42c37c --- /dev/null +++ b/core/lib/config/src/configs/genesis.rs @@ -0,0 +1,23 @@ +use serde::{Deserialize, Serialize}; +use zksync_basic_types::{Address, L1ChainId, L2ChainId, H256}; + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct GenesisConfig { + pub protocol_version: u16, + pub genesis_root_hash: H256, + pub rollup_last_leaf_index: u64, + pub genesis_commitment: H256, + pub bootloader_hash: H256, + pub default_aa_hash: H256, + pub verifier_address: Address, + pub fee_account: Address, + pub diamond_proxy: Address, + pub erc20_bridge: Address, + pub state_transition_proxy_addr: Option
, + pub l1_chain_id: L1ChainId, + pub l2_chain_id: L2ChainId, + pub recursion_node_level_vk_hash: H256, + pub recursion_leaf_level_vk_hash: H256, + pub recursion_circuits_set_vks_hash: H256, + pub recursion_scheduler_level_vk_hash: H256, +} diff --git a/core/lib/config/src/configs/mod.rs b/core/lib/config/src/configs/mod.rs index f9ad80dbe34..d5b86eed313 100644 --- a/core/lib/config/src/configs/mod.rs +++ b/core/lib/config/src/configs/mod.rs @@ -13,6 +13,7 @@ pub use self::{ fri_prover_gateway::FriProverGatewayConfig, fri_witness_generator::FriWitnessGeneratorConfig, fri_witness_vector_generator::FriWitnessVectorGeneratorConfig, + genesis::GenesisConfig, object_store::ObjectStoreConfig, observability::ObservabilityConfig, proof_data_handler::ProofDataHandlerConfig, @@ -36,6 +37,7 @@ pub mod fri_prover_gateway; pub mod fri_prover_group; pub mod fri_witness_generator; pub mod fri_witness_vector_generator; +pub mod genesis; pub mod house_keeper; pub mod object_store; pub mod observability; diff --git a/core/lib/config/src/lib.rs b/core/lib/config/src/lib.rs index cde1582a1a2..63d1e6f9cc6 100644 --- a/core/lib/config/src/lib.rs +++ b/core/lib/config/src/lib.rs @@ -2,7 +2,8 @@ pub use crate::configs::{ ApiConfig, ContractVerifierConfig, ContractsConfig, DBConfig, ETHClientConfig, ETHSenderConfig, - ETHWatchConfig, GasAdjusterConfig, ObjectStoreConfig, PostgresConfig, SnapshotsCreatorConfig, + ETHWatchConfig, GasAdjusterConfig, GenesisConfig, ObjectStoreConfig, PostgresConfig, + SnapshotsCreatorConfig, }; pub mod configs; diff --git a/core/lib/config/src/testonly.rs b/core/lib/config/src/testonly.rs index 24989acf7de..c275e7d2cfa 100644 --- a/core/lib/config/src/testonly.rs +++ b/core/lib/config/src/testonly.rs @@ -2,7 +2,7 @@ use std::collections::HashSet; use rand::{distributions::Alphanumeric, Rng}; use zksync_basic_types::{ - basic_fri_types::CircuitIdRoundTuple, network::Network, Address, L2ChainId, H256, + basic_fri_types::CircuitIdRoundTuple, network::Network, Address, L1ChainId, L2ChainId, H256, }; use crate::configs::{self, eth_sender::PubdataSendingMode}; @@ -749,3 +749,27 @@ impl RandomConfig for configs::ObservabilityConfig { } } } + +impl RandomConfig for configs::GenesisConfig { + fn sample(g: &mut Gen) -> Self { + Self { + protocol_version: g.gen(), + genesis_root_hash: g.gen(), + rollup_last_leaf_index: g.gen(), + genesis_commitment: g.gen(), + bootloader_hash: g.gen(), + default_aa_hash: g.gen(), + verifier_address: g.gen(), + fee_account: g.gen(), + diamond_proxy: g.gen(), + erc20_bridge: g.gen(), + state_transition_proxy_addr: g.gen(), + l1_chain_id: L1ChainId(g.gen()), + l2_chain_id: L2ChainId::default(), + recursion_node_level_vk_hash: g.gen(), + recursion_leaf_level_vk_hash: g.gen(), + recursion_circuits_set_vks_hash: g.gen(), + recursion_scheduler_level_vk_hash: g.gen(), + } + } +} diff --git a/core/lib/env_config/src/genesis.rs b/core/lib/env_config/src/genesis.rs new file mode 100644 index 00000000000..6a13b18be13 --- /dev/null +++ b/core/lib/env_config/src/genesis.rs @@ -0,0 +1,42 @@ +use crate::FromEnv; +use anyhow::anyhow; +use zksync_basic_types::H256; +use zksync_config::configs::chain::{NetworkConfig, StateKeeperConfig}; +use zksync_config::{ContractsConfig, GenesisConfig}; + +impl FromEnv for GenesisConfig { + fn from_env() -> anyhow::Result { + let network_config = &NetworkConfig::from_env()?; + let contracts_config = &ContractsConfig::from_env()?; + let state_keeper = StateKeeperConfig::from_env()?; + Ok(GenesisConfig { + protocol_version: 20, + genesis_root_hash: contracts_config + .genesis_root + .ok_or(anyhow!("genesis_root_hash required for genesis"))?, + rollup_last_leaf_index: contracts_config + .genesis_rollup_leaf_index + .ok_or(anyhow!("rollup_last_leaf_index required for genesis"))?, + genesis_commitment: contracts_config + .genesis_batch_commitment + .ok_or(anyhow!("genesis_commitment required for genesis"))?, + bootloader_hash: state_keeper + .bootloader_hash + .ok_or(anyhow!("Bootloader hash required for genesis"))?, + default_aa_hash: state_keeper + .default_aa_hash + .ok_or(anyhow!("Default aa hash required for genesis"))?, + verifier_address: contracts_config.verifier_addr, + fee_account: state_keeper.fee_account_addr, + diamond_proxy: contracts_config.diamond_proxy_addr, + erc20_bridge: contracts_config.l1_erc20_bridge_proxy_addr, + state_transition_proxy_addr: contracts_config.state_transition_proxy_addr, + l1_chain_id: network_config.network.chain_id(), + l2_chain_id: network_config.zksync_network_id, + recursion_node_level_vk_hash: contracts_config.fri_recursion_node_level_vk_hash, + recursion_leaf_level_vk_hash: contracts_config.fri_recursion_leaf_level_vk_hash, + recursion_circuits_set_vks_hash: H256::zero(), + recursion_scheduler_level_vk_hash: contracts_config.snark_wrapper_vk_hash, + }) + } +} diff --git a/core/lib/env_config/src/lib.rs b/core/lib/env_config/src/lib.rs index 973e2ff9ae5..edc768b0be0 100644 --- a/core/lib/env_config/src/lib.rs +++ b/core/lib/env_config/src/lib.rs @@ -24,6 +24,7 @@ mod snapshots_creator; mod utils; mod witness_generator; +mod genesis; #[cfg(test)] mod test_utils; diff --git a/core/lib/zksync_core/src/genesis.rs b/core/lib/zksync_core/src/genesis.rs index 653e21d4489..22e9ff47772 100644 --- a/core/lib/zksync_core/src/genesis.rs +++ b/core/lib/zksync_core/src/genesis.rs @@ -2,20 +2,15 @@ //! It initializes the Merkle tree with the basic setup (such as fields of special service accounts), //! setups the required databases, and outputs the data required to initialize a smart contract. -use anyhow::{anyhow, Context as _}; +use anyhow::Context as _; use multivm::{ circuit_sequencer_api_latest::sort_storage_access::sort_storage_access_queries, utils::get_max_gas_per_pubdata_byte, zk_evm_latest::aux_structures::{LogQuery as MultiVmLogQuery, Timestamp as MultiVMTimestamp}, }; -use serde::{Deserialize, Serialize}; -use zksync_config::{ - configs::chain::{NetworkConfig, StateKeeperConfig}, - ContractsConfig, -}; +use zksync_config::GenesisConfig; use zksync_contracts::{BaseSystemContracts, BaseSystemContractsHashes, SET_CHAIN_ID_EVENT}; use zksync_dal::{SqlxError, StorageProcessor}; -use zksync_env_config::FromEnv; use zksync_eth_client::{clients::QueryClient, EthInterface}; use zksync_merkle_tree::domain::ZkSyncTree; use zksync_system_constants::PRIORITY_EXPIRATION; @@ -34,8 +29,8 @@ use zksync_types::{ tokens::{TokenInfo, TokenMetadata, ETHEREUM_ADDRESS}, web3::types::{BlockNumber, FilterBuilder}, zk_evm_types::{LogQuery, Timestamp}, - AccountTreeId, Address, L1BatchNumber, L1ChainId, L2ChainId, MiniblockNumber, - ProtocolVersionId, StorageKey, StorageLog, StorageLogKind, H256, + AccountTreeId, Address, L1BatchNumber, L2ChainId, MiniblockNumber, ProtocolVersionId, + StorageKey, StorageLog, StorageLogKind, H256, }; use zksync_utils::{be_words_to_bytes, bytecode::hash_bytecode, h256_to_u256, u256_to_h256}; @@ -51,6 +46,8 @@ pub enum GenesisError { BaseSystemContractsHashes(BaseSystemContractsHashes), #[error("Commitment mismatched {0:?}")] Commitment(H256), + #[error("Wrong protocol version")] + ProtocolVersion, #[error("Error: {0}")] Other(#[from] anyhow::Error), #[error("Error: {0}")] @@ -74,117 +71,36 @@ impl GenesisParams { pub fn config(&self) -> &GenesisConfig { &self.config } -} - -#[derive(Debug, Serialize, Deserialize, Clone)] -pub struct GenesisConfig { - pub protocol_version: ProtocolVersionId, - pub genesis_root_hash: H256, - pub rollup_last_leaf_index: u64, - pub genesis_commitment: H256, - #[serde(flatten)] - pub base_system_contracts_hashes: BaseSystemContractsHashes, - pub verifier_address: Address, - #[serde(flatten)] - pub verifier_config: L1VerifierConfig, - pub fee_account: Address, - pub diamond_proxy: Address, - pub erc20_bridge: Address, - pub state_transition_proxy_addr: Option
, - pub l1_chain_id: L1ChainId, - pub l2_chain_id: L2ChainId, -} - -impl GenesisConfig { - pub fn from_env() -> anyhow::Result { - let network_config = &NetworkConfig::from_env()?; - let contracts_config = &ContractsConfig::from_env()?; - let l1_verifier_config = L1VerifierConfig { - params: VerifierParams { - recursion_node_level_vk_hash: contracts_config.fri_recursion_node_level_vk_hash, - recursion_leaf_level_vk_hash: contracts_config.fri_recursion_leaf_level_vk_hash, - recursion_circuits_set_vks_hash: zksync_types::H256::zero(), - }, - recursion_scheduler_level_vk_hash: contracts_config.snark_wrapper_vk_hash, - }; - - let state_keeper = StateKeeperConfig::from_env()?; - Ok(GenesisConfig { - protocol_version: ProtocolVersionId::latest(), - genesis_root_hash: contracts_config - .genesis_root - .ok_or(anyhow!("genesis_root_hash required for genesis"))?, - rollup_last_leaf_index: contracts_config - .genesis_rollup_leaf_index - .ok_or(anyhow!("rollup_last_leaf_index required for genesis"))?, - genesis_commitment: contracts_config - .genesis_batch_commitment - .ok_or(anyhow!("genesis_commitment required for genesis"))?, - base_system_contracts_hashes: BaseSystemContractsHashes { - bootloader: state_keeper - .bootloader_hash - .ok_or(anyhow!("Bootloader hash required for genesis"))?, - default_aa: state_keeper - .default_aa_hash - .ok_or(anyhow!("Default aa hash required for genesis"))?, - }, - verifier_address: contracts_config.verifier_addr, - verifier_config: l1_verifier_config, - fee_account: state_keeper.fee_account_addr, - diamond_proxy: contracts_config.diamond_proxy_addr, - erc20_bridge: contracts_config.l1_erc20_bridge_proxy_addr, - state_transition_proxy_addr: contracts_config.state_transition_proxy_addr, - l1_chain_id: network_config.network.chain_id(), - l2_chain_id: network_config.zksync_network_id, - }) - } - - pub fn load_genesis_params(self) -> Result { - let base_system_contracts = BaseSystemContracts::load_from_disk(); - let system_contracts = get_system_smart_contracts(); - self.into_genesis_params(base_system_contracts, system_contracts) - } - pub fn into_genesis_params( - self, + pub fn from_genesis_config( + config: GenesisConfig, base_system_contracts: BaseSystemContracts, system_contracts: Vec, ) -> Result { - if self.base_system_contracts_hashes != base_system_contracts.hashes() { + let base_system_contracts_hashes = BaseSystemContractsHashes { + bootloader: config.bootloader_hash, + default_aa: config.default_aa_hash, + }; + if base_system_contracts_hashes != base_system_contracts.hashes() { return Err(GenesisError::BaseSystemContractsHashes( base_system_contracts.hashes(), )); } - + let _: ProtocolVersionId = config + .protocol_version + .try_into() + .map_err(|_| GenesisError::ProtocolVersion)?; Ok(GenesisParams { - base_system_contracts: BaseSystemContracts::load_from_disk(), + base_system_contracts, system_contracts, - config: self, + config, }) } - - #[cfg(test)] - pub(crate) fn mock() -> Self { - Self { - protocol_version: ProtocolVersionId::latest(), - genesis_root_hash: Default::default(), - rollup_last_leaf_index: 0, - genesis_commitment: Default::default(), - base_system_contracts_hashes: BaseSystemContracts::load_from_disk().hashes(), - verifier_address: Default::default(), - verifier_config: Default::default(), - fee_account: Default::default(), - diamond_proxy: Default::default(), - erc20_bridge: Default::default(), - state_transition_proxy_addr: Default::default(), - l1_chain_id: L1ChainId(9), - l2_chain_id: L2ChainId::default(), - set_chain_id: false, - } + pub fn load_genesis_params(config: GenesisConfig) -> Result { + let base_system_contracts = BaseSystemContracts::load_from_disk(); + let system_contracts = get_system_smart_contracts(); + Self::from_genesis_config(config, base_system_contracts, system_contracts) } -} - -impl GenesisParams { #[cfg(test)] pub(crate) fn mock() -> Self { Self { @@ -193,6 +109,11 @@ impl GenesisParams { config: GenesisConfig::mock(), } } + + pub fn protocol_version(&self) -> ProtocolVersionId { + // It's impossible to instantiate Genesis params with wrong protocol version + self.config.protocol_version.try_into().unwrap() + } } pub async fn ensure_genesis_state( @@ -213,15 +134,23 @@ pub async fn ensure_genesis_state( } tracing::info!("running regenesis"); + let verifier_config = L1VerifierConfig { + params: VerifierParams { + recursion_node_level_vk_hash: genesis_params.config.recursion_node_level_vk_hash, + recursion_leaf_level_vk_hash: genesis_params.config.recursion_leaf_level_vk_hash, + recursion_circuits_set_vks_hash: genesis_params.config.recursion_circuits_set_vks_hash, + }, + recursion_scheduler_level_vk_hash: genesis_params.config.recursion_scheduler_level_vk_hash, + }; create_genesis_l1_batch( &mut transaction, genesis_params.config.fee_account, genesis_params.config.l2_chain_id, - genesis_params.config().protocol_version, + genesis_params.protocol_version(), genesis_params.base_system_contracts(), genesis_params.system_contracts(), - genesis_params.config().verifier_config, + verifier_config, genesis_params.config().verifier_address, ) .await?; @@ -235,11 +164,15 @@ pub async fn ensure_genesis_state( let genesis_root_hash = metadata.root_hash; let rollup_last_leaf_index = metadata.leaf_count + 1; + let base_system_contract_hashes = BaseSystemContractsHashes { + bootloader: genesis_params.config.bootloader_hash, + default_aa: genesis_params.config.default_aa_hash, + }; let commitment_input = CommitmentInput::for_genesis_batch( genesis_root_hash, rollup_last_leaf_index, - genesis_params.config.base_system_contracts_hashes, - genesis_params.config.protocol_version, + base_system_contract_hashes, + genesis_params.protocol_version(), ); let block_commitment = L1BatchCommitment::new(commitment_input); diff --git a/core/lib/zksync_core/src/lib.rs b/core/lib/zksync_core/src/lib.rs index 578793cba15..3b7aabd5d07 100644 --- a/core/lib/zksync_core/src/lib.rs +++ b/core/lib/zksync_core/src/lib.rs @@ -28,7 +28,7 @@ use zksync_config::{ }, database::{MerkleTreeConfig, MerkleTreeMode}, }, - ApiConfig, ContractsConfig, DBConfig, PostgresConfig, + ApiConfig, ContractsConfig, DBConfig, GenesisConfig, PostgresConfig, }; use zksync_contracts::governance_contract; use zksync_dal::{healthcheck::ConnectionPoolHealthCheck, ConnectionPool}; @@ -42,6 +42,7 @@ use zksync_queued_job_processor::JobProcessor; use zksync_state::PostgresStorageCaches; use zksync_types::{fee_model::FeeModelConfig, L2ChainId}; +use crate::genesis::GenesisParams; use crate::{ api_server::{ contract_verification, @@ -55,7 +56,6 @@ use crate::{ commitment_generator::CommitmentGenerator, eth_sender::{Aggregator, EthTxAggregator, EthTxManager}, eth_watch::start_eth_watch, - genesis::GenesisConfig, house_keeper::{ blocks_state_reporter::L1BatchMetricsReporter, fri_proof_compressor_job_retry_manager::FriProofCompressorJobRetryManager, @@ -112,7 +112,7 @@ pub async fn genesis_init( .context("failed to build connection_pool")?; let mut storage = pool.access_storage().await.context("access_storage()")?; - let params = genesis_config.load_genesis_params()?; + let params = GenesisParams::load_genesis_params(genesis_config)?; genesis::ensure_genesis_state(&mut storage, ¶ms).await?; if let Some(state_transition_proxy_addr) = params.config().state_transition_proxy_addr { diff --git a/core/lib/zksync_core/src/sync_layer/genesis.rs b/core/lib/zksync_core/src/sync_layer/genesis.rs index d7086e36c8d..8747110e497 100644 --- a/core/lib/zksync_core/src/sync_layer/genesis.rs +++ b/core/lib/zksync_core/src/sync_layer/genesis.rs @@ -1,4 +1,5 @@ use anyhow::Context as _; +use zksync_config::GenesisConfig; use zksync_contracts::{BaseSystemContracts, BaseSystemContractsHashes, SystemContractCode}; use zksync_dal::StorageProcessor; use zksync_types::{ @@ -8,7 +9,7 @@ use zksync_types::{ }; use super::client::MainNodeClient; -use crate::genesis::{ensure_genesis_state, GenesisConfig, GenesisParams}; +use crate::genesis::{ensure_genesis_state, GenesisParams}; pub async fn perform_genesis_if_needed( storage: &mut StorageProcessor<'_>, @@ -94,8 +95,8 @@ async fn create_genesis_params( // Use default L1 verifier config and verifier address for genesis as they are not used by EN. let first_l1_verifier_config = L1VerifierConfig::default(); let first_verifier_address = Address::default(); - Ok(GenesisConfig { - protocol_version, + let config = GenesisConfig { + protocol_version: protocol_version as u16, genesis_root_hash: genesis_batch .base .root_hash @@ -106,17 +107,28 @@ async fn create_genesis_params( genesis_commitment: genesis_batch .commitment .context("Genesis can't be pending")?, - base_system_contracts_hashes, + bootloader_hash: base_system_contracts_hashes.bootloader, + default_aa_hash: base_system_contracts_hashes.default_aa, verifier_address: first_verifier_address, - verifier_config: first_l1_verifier_config, fee_account: first_validator, diamond_proxy: main_contract, erc20_bridge: bridge_contracts.l1_erc20_default_bridge, state_transition_proxy_addr: None, l1_chain_id, l2_chain_id: zksync_chain_id, - } - .into_genesis_params(base_system_contracts, system_contracts)?) + recursion_node_level_vk_hash: first_l1_verifier_config.params.recursion_node_level_vk_hash, + recursion_leaf_level_vk_hash: first_l1_verifier_config.params.recursion_leaf_level_vk_hash, + recursion_circuits_set_vks_hash: first_l1_verifier_config + .params + .recursion_circuits_set_vks_hash, + recursion_scheduler_level_vk_hash: first_l1_verifier_config + .recursion_scheduler_level_vk_hash, + }; + Ok(GenesisParams::from_genesis_config( + config, + base_system_contracts, + system_contracts, + )?) } async fn fetch_base_system_contracts( From 03b838a0ffed993580a05004b836a1f553c2f3b6 Mon Sep 17 00:00:00 2001 From: Danil Date: Thu, 14 Mar 2024 09:25:37 +0100 Subject: [PATCH 13/65] Update genesis Signed-off-by: Danil --- ...efb23708bfaf77454c2be1d1c52cefcb0c19.json} | 34 +++++++++++++------ core/lib/env_config/src/genesis.rs | 9 +++-- core/lib/zksync_core/src/lib.rs | 2 +- 3 files changed, 30 insertions(+), 15 deletions(-) rename core/lib/dal/.sqlx/{query-44490ad52b8dbcd978a96677ffac5437752a4cf3ac92ec09b334089a8dc5b4ca.json => query-d032e2f4e16902cf04d3c94ab5dfefb23708bfaf77454c2be1d1c52cefcb0c19.json} (58%) diff --git a/core/lib/dal/.sqlx/query-44490ad52b8dbcd978a96677ffac5437752a4cf3ac92ec09b334089a8dc5b4ca.json b/core/lib/dal/.sqlx/query-d032e2f4e16902cf04d3c94ab5dfefb23708bfaf77454c2be1d1c52cefcb0c19.json similarity index 58% rename from core/lib/dal/.sqlx/query-44490ad52b8dbcd978a96677ffac5437752a4cf3ac92ec09b334089a8dc5b4ca.json rename to core/lib/dal/.sqlx/query-d032e2f4e16902cf04d3c94ab5dfefb23708bfaf77454c2be1d1c52cefcb0c19.json index cb2d1b149ec..846b7a1a535 100644 --- a/core/lib/dal/.sqlx/query-44490ad52b8dbcd978a96677ffac5437752a4cf3ac92ec09b334089a8dc5b4ca.json +++ b/core/lib/dal/.sqlx/query-d032e2f4e16902cf04d3c94ab5dfefb23708bfaf77454c2be1d1c52cefcb0c19.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n WITH\n mb AS (\n SELECT\n l1_gas_price,\n l2_fair_gas_price\n FROM\n miniblocks\n WHERE\n l1_batch_number = $1\n LIMIT\n 1\n )\n SELECT\n l1_batches.number,\n l1_batches.timestamp,\n l1_batches.l1_tx_count,\n l1_batches.l2_tx_count,\n l1_batches.hash AS \"root_hash?\",\n commit_tx.tx_hash AS \"commit_tx_hash?\",\n commit_tx.confirmed_at AS \"committed_at?\",\n prove_tx.tx_hash AS \"prove_tx_hash?\",\n prove_tx.confirmed_at AS \"proven_at?\",\n execute_tx.tx_hash AS \"execute_tx_hash?\",\n execute_tx.confirmed_at AS \"executed_at?\",\n mb.l1_gas_price,\n mb.l2_fair_gas_price,\n l1_batches.bootloader_code_hash,\n l1_batches.default_aa_code_hash\n FROM\n l1_batches\n INNER JOIN mb ON TRUE\n LEFT JOIN eth_txs_history AS commit_tx ON (\n l1_batches.eth_commit_tx_id = commit_tx.eth_tx_id\n AND commit_tx.confirmed_at IS NOT NULL\n )\n LEFT JOIN eth_txs_history AS prove_tx ON (\n l1_batches.eth_prove_tx_id = prove_tx.eth_tx_id\n AND prove_tx.confirmed_at IS NOT NULL\n )\n LEFT JOIN eth_txs_history AS execute_tx ON (\n l1_batches.eth_execute_tx_id = execute_tx.eth_tx_id\n AND execute_tx.confirmed_at IS NOT NULL\n )\n WHERE\n l1_batches.number = $1\n ", + "query": "\n WITH\n mb AS (\n SELECT\n l1_gas_price,\n l2_fair_gas_price\n FROM\n miniblocks\n WHERE\n l1_batch_number = $1\n LIMIT\n 1\n )\n SELECT\n l1_batches.number,\n l1_batches.timestamp,\n l1_batches.l1_tx_count,\n l1_batches.l2_tx_count,\n l1_batches.hash AS \"root_hash?\",\n l1_batches.commitment,\n l1_batches.rollup_last_leaf_index,\n commit_tx.tx_hash AS \"commit_tx_hash?\",\n commit_tx.confirmed_at AS \"committed_at?\",\n prove_tx.tx_hash AS \"prove_tx_hash?\",\n prove_tx.confirmed_at AS \"proven_at?\",\n execute_tx.tx_hash AS \"execute_tx_hash?\",\n execute_tx.confirmed_at AS \"executed_at?\",\n mb.l1_gas_price,\n mb.l2_fair_gas_price,\n l1_batches.bootloader_code_hash,\n l1_batches.default_aa_code_hash\n FROM\n l1_batches\n INNER JOIN mb ON TRUE\n LEFT JOIN eth_txs_history AS commit_tx ON (\n l1_batches.eth_commit_tx_id = commit_tx.eth_tx_id\n AND commit_tx.confirmed_at IS NOT NULL\n )\n LEFT JOIN eth_txs_history AS prove_tx ON (\n l1_batches.eth_prove_tx_id = prove_tx.eth_tx_id\n AND prove_tx.confirmed_at IS NOT NULL\n )\n LEFT JOIN eth_txs_history AS execute_tx ON (\n l1_batches.eth_execute_tx_id = execute_tx.eth_tx_id\n AND execute_tx.confirmed_at IS NOT NULL\n )\n WHERE\n l1_batches.number = $1\n ", "describe": { "columns": [ { @@ -30,51 +30,61 @@ }, { "ordinal": 5, + "name": "commitment", + "type_info": "Bytea" + }, + { + "ordinal": 6, + "name": "rollup_last_leaf_index", + "type_info": "Int8" + }, + { + "ordinal": 7, "name": "commit_tx_hash?", "type_info": "Text" }, { - "ordinal": 6, + "ordinal": 8, "name": "committed_at?", "type_info": "Timestamp" }, { - "ordinal": 7, + "ordinal": 9, "name": "prove_tx_hash?", "type_info": "Text" }, { - "ordinal": 8, + "ordinal": 10, "name": "proven_at?", "type_info": "Timestamp" }, { - "ordinal": 9, + "ordinal": 11, "name": "execute_tx_hash?", "type_info": "Text" }, { - "ordinal": 10, + "ordinal": 12, "name": "executed_at?", "type_info": "Timestamp" }, { - "ordinal": 11, + "ordinal": 13, "name": "l1_gas_price", "type_info": "Int8" }, { - "ordinal": 12, + "ordinal": 14, "name": "l2_fair_gas_price", "type_info": "Int8" }, { - "ordinal": 13, + "ordinal": 15, "name": "bootloader_code_hash", "type_info": "Bytea" }, { - "ordinal": 14, + "ordinal": 16, "name": "default_aa_code_hash", "type_info": "Bytea" } @@ -90,6 +100,8 @@ false, false, true, + true, + true, false, true, false, @@ -102,5 +114,5 @@ true ] }, - "hash": "44490ad52b8dbcd978a96677ffac5437752a4cf3ac92ec09b334089a8dc5b4ca" + "hash": "d032e2f4e16902cf04d3c94ab5dfefb23708bfaf77454c2be1d1c52cefcb0c19" } diff --git a/core/lib/env_config/src/genesis.rs b/core/lib/env_config/src/genesis.rs index 6a13b18be13..a0a6a5f2229 100644 --- a/core/lib/env_config/src/genesis.rs +++ b/core/lib/env_config/src/genesis.rs @@ -1,8 +1,11 @@ -use crate::FromEnv; use anyhow::anyhow; use zksync_basic_types::H256; -use zksync_config::configs::chain::{NetworkConfig, StateKeeperConfig}; -use zksync_config::{ContractsConfig, GenesisConfig}; +use zksync_config::{ + configs::chain::{NetworkConfig, StateKeeperConfig}, + ContractsConfig, GenesisConfig, +}; + +use crate::FromEnv; impl FromEnv for GenesisConfig { fn from_env() -> anyhow::Result { diff --git a/core/lib/zksync_core/src/lib.rs b/core/lib/zksync_core/src/lib.rs index 3b7aabd5d07..e3ee37f727a 100644 --- a/core/lib/zksync_core/src/lib.rs +++ b/core/lib/zksync_core/src/lib.rs @@ -42,7 +42,6 @@ use zksync_queued_job_processor::JobProcessor; use zksync_state::PostgresStorageCaches; use zksync_types::{fee_model::FeeModelConfig, L2ChainId}; -use crate::genesis::GenesisParams; use crate::{ api_server::{ contract_verification, @@ -56,6 +55,7 @@ use crate::{ commitment_generator::CommitmentGenerator, eth_sender::{Aggregator, EthTxAggregator, EthTxManager}, eth_watch::start_eth_watch, + genesis::GenesisParams, house_keeper::{ blocks_state_reporter::L1BatchMetricsReporter, fri_proof_compressor_job_retry_manager::FriProofCompressorJobRetryManager, From a9ade5476fb0945b0905a9afaf9ead28e26c36f1 Mon Sep 17 00:00:00 2001 From: Danil Date: Thu, 14 Mar 2024 16:13:50 +0100 Subject: [PATCH 14/65] Create genesis Signed-off-by: Danil --- core/bin/zksync_server/src/main.rs | 14 ++++- core/lib/zksync_core/src/genesis.rs | 5 +- core/lib/zksync_core/src/lib.rs | 22 ++++---- etc/env/base/chain.toml | 77 +++++++++++++------------ etc/env/base/contracts.toml | 88 ++++++++++++++--------------- infrastructure/zk/src/server.ts | 54 ++---------------- 6 files changed, 114 insertions(+), 146 deletions(-) diff --git a/core/bin/zksync_server/src/main.rs b/core/bin/zksync_server/src/main.rs index 3cf99f750cd..bd7b620a099 100644 --- a/core/bin/zksync_server/src/main.rs +++ b/core/bin/zksync_server/src/main.rs @@ -56,6 +56,9 @@ struct Cli { /// Generate genesis block for the first contract deployment using temporary DB. #[arg(long)] genesis: bool, + /// Set chain id + #[arg(long)] + set_chain_id: bool, } #[derive(Debug, Clone)] @@ -157,9 +160,14 @@ async fn main() -> anyhow::Result<()> { if opt.genesis || is_genesis_needed(&postgres_config).await { let genesis = GenesisConfig::from_env().context("Genesis config")?; let eth_client = ETHClientConfig::from_env().context("EthClientConfig")?; - genesis_init(genesis, &postgres_config, ð_client.web3_url) - .await - .context("genesis_init")?; + genesis_init( + genesis, + &postgres_config, + ð_client.web3_url, + opt.set_chain_id, + ) + .await + .context("genesis_init")?; if opt.genesis { return Ok(()); } diff --git a/core/lib/zksync_core/src/genesis.rs b/core/lib/zksync_core/src/genesis.rs index 22e9ff47772..b62762ab969 100644 --- a/core/lib/zksync_core/src/genesis.rs +++ b/core/lib/zksync_core/src/genesis.rs @@ -183,9 +183,6 @@ pub async fn ensure_genesis_state( rollup_last_leaf_index, ) .await?; - tracing::info!("operations_schema_genesis is complete"); - - transaction.commit().await?; if genesis_params.config.genesis_root_hash != genesis_root_hash { return Err(GenesisError::RootHash(genesis_root_hash)); @@ -199,6 +196,8 @@ pub async fn ensure_genesis_state( return Err(GenesisError::LeafIndexes(rollup_last_leaf_index)); } + tracing::info!("operations_schema_genesis is complete"); + transaction.commit().await?; Ok(genesis_root_hash) } diff --git a/core/lib/zksync_core/src/lib.rs b/core/lib/zksync_core/src/lib.rs index e3ee37f727a..9641003a9db 100644 --- a/core/lib/zksync_core/src/lib.rs +++ b/core/lib/zksync_core/src/lib.rs @@ -104,6 +104,7 @@ pub async fn genesis_init( genesis_config: GenesisConfig, postgres_config: &PostgresConfig, eth_client_url: &str, + set_chain_id: bool, ) -> anyhow::Result<()> { let db_url = postgres_config.master_url()?; let pool = ConnectionPool::singleton(db_url) @@ -115,17 +116,18 @@ pub async fn genesis_init( let params = GenesisParams::load_genesis_params(genesis_config)?; genesis::ensure_genesis_state(&mut storage, ¶ms).await?; - if let Some(state_transition_proxy_addr) = params.config().state_transition_proxy_addr { - genesis::save_set_chain_id_tx( - eth_client_url, - params.config().diamond_proxy, - state_transition_proxy_addr, - &mut storage, - ) - .await - .context("Failed to save SetChainId upgrade transaction")?; + if set_chain_id { + if let Some(state_transition_proxy_addr) = params.config().state_transition_proxy_addr { + genesis::save_set_chain_id_tx( + eth_client_url, + params.config().diamond_proxy, + state_transition_proxy_addr, + &mut storage, + ) + .await + .context("Failed to save SetChainId upgrade transaction")?; + } } - Ok(()) } diff --git a/etc/env/base/chain.toml b/etc/env/base/chain.toml index b6c7b5093ba..6aa4f1ba0c1 100644 --- a/etc/env/base/chain.toml +++ b/etc/env/base/chain.toml @@ -2,74 +2,74 @@ [chain.eth] # Name of the used Ethereum network -network="localhost" +network = "localhost" # Name of current zkSync network # Used for Sentry environment -zksync_network="localhost" +zksync_network = "localhost" # ID of current zkSync network treated as ETH network ID. # Used to distinguish zkSync from other Web3-capable networks. -zksync_network_id=270 +zksync_network_id = 270 [chain.state_keeper] -fee_account_addr="0xde03a0B5963f75f1C8485B355fF6D30f3093BDE7" +fee_account_addr = "0xde03a0B5963f75f1C8485B355fF6D30f3093BDE7" # Denotes the amount of slots for transactions in the block. -transaction_slots=250 +transaction_slots = 250 -max_allowed_l2_tx_gas_limit=4000000000 -block_commit_deadline_ms=2500 -miniblock_commit_deadline_ms=1000 -miniblock_seal_queue_capacity=10 +max_allowed_l2_tx_gas_limit = 4000000000 +block_commit_deadline_ms = 2500 +miniblock_commit_deadline_ms = 1000 +miniblock_seal_queue_capacity = 10 # Max gas that can used to include single block in aggregated operation -max_single_tx_gas=6000000 +max_single_tx_gas = 6000000 # Configuration option for block to be sealed in case # it takes more percentage of the max block capacity than this value. -close_block_at_geometry_percentage=0.95 +close_block_at_geometry_percentage = 0.95 # Configuration option for block to be sealed in case # it takes more percentage of the max block capacity than this value. -close_block_at_eth_params_percentage=0.95 +close_block_at_eth_params_percentage = 0.95 # Configuration option for block to be sealed in case # it takes more percentage of the max block capacity than this value. -close_block_at_gas_percentage=0.95 +close_block_at_gas_percentage = 0.95 # Configuration option for tx to be rejected in case # it takes more percentage of the block capacity than this value. -reject_tx_at_geometry_percentage=0.95 +reject_tx_at_geometry_percentage = 0.95 # Configuration option for block to be sealed in case # it takes more percentage of the max block capacity than this value. -reject_tx_at_eth_params_percentage=0.95 +reject_tx_at_eth_params_percentage = 0.95 # Configuration option for block to be sealed in case # it takes more percentage of the max block gas capacity than this value. -reject_tx_at_gas_percentage=0.95 +reject_tx_at_gas_percentage = 0.95 # The minimal acceptable L2 gas price, i.e. the price that should include the cost of computation/proving as well # as potentially premium for congestion. -minimal_l2_gas_price=100000000 +minimal_l2_gas_price = 100000000 # The constant that represents the possibility that a batch can be sealed because of overuse of computation resources. # It has range from 0 to 1. If it is 0, the compute will not depend on the cost for closing the batch. # If it is 1, the gas limit per batch will have to cover the entire cost of closing the batch. -compute_overhead_part=0.0 +compute_overhead_part = 0.0 # The constant that represents the possibility that a batch can be sealed because of overuse of pubdata. # It has range from 0 to 1. If it is 0, the pubdata will not depend on the cost for closing the batch. # If it is 1, the pubdata limit per batch will have to cover the entire cost of closing the batch. -pubdata_overhead_part=1.0 +pubdata_overhead_part = 1.0 # The constant amount of L1 gas that is used as the overhead for the batch. It includes the price for batch verification, etc. -batch_overhead_l1_gas=800000 +batch_overhead_l1_gas = 800000 # The maximum amount of gas that can be used by the batch. This value is derived from the circuits limitation per batch. -max_gas_per_batch=200000000 +max_gas_per_batch = 200000000 # This will also determine how many blobs are used, when enabled. # If the value is less than 126 kb -> Calldata or 1 Blob # If the value is > 126 kb and < 252 kb then 2 blobs are used. # Note, the max at this moment is 252 kb -max_pubdata_per_batch=100000 +max_pubdata_per_batch = 100000 # The version of the fee model to use. # - `V1`, the first model that was used in zkSync Era. In this fee model, the pubdata price must be pegged to the L1 gas price. @@ -78,33 +78,36 @@ max_pubdata_per_batch=100000 # - `V2`, the second model that was used in zkSync Era. There the pubdata price might be independent from the L1 gas price. Also, # The fair L2 gas price is expected to both the proving/computation price for the operator and the costs that come from # processing the batch on L1. -fee_model_version="V1" +fee_model_version = "V1" # Max number of computational gas that validation step is allowed to take. -validation_computational_gas_limit=300000 -save_call_traces=true +validation_computational_gas_limit = 300000 +save_call_traces = true -virtual_blocks_interval=1 -virtual_blocks_per_miniblock=1 +virtual_blocks_interval = 1 +virtual_blocks_per_miniblock = 1 # WARNING! This slows down the statekeeper, forcing mempool to upload to GCS # It is meant as a validation flag to be used in STAGING only. # This variable should not be set to true in any customer facing environment. -upload_witness_inputs_to_gcs=false +upload_witness_inputs_to_gcs = false + +bootloader_hash = "0x010007ede999d096c84553fb514d3d6ca76fbf39789dda76bfeda9f3ae06236e" +default_aa_hash = "0x0100055b041eb28aff6e3a6e0f37c31fd053fc9ef142683b05e5f0aee6934066" [chain.operations_manager] # Sleep time when there is no new input data -delay_interval=100 +delay_interval = 100 [chain.mempool] -delay_interval=100 -sync_interval_ms=10 +delay_interval = 100 +sync_interval_ms = 10 sync_batch_size = 1000 -capacity=10_000_000 -stuck_tx_timeout=86400 # 1 day in seconds -remove_stuck_txs=true +capacity = 10_000_000 +stuck_tx_timeout = 86400 # 1 day in seconds +remove_stuck_txs = true [chain.circuit_breaker] -sync_interval_ms=30000 -http_req_max_retry_number=5 -http_req_retry_interval_sec=2 +sync_interval_ms = 30000 +http_req_max_retry_number = 5 +http_req_retry_interval_sec = 2 diff --git a/etc/env/base/contracts.toml b/etc/env/base/contracts.toml index a9d802aaaf4..5988ef78d25 100644 --- a/etc/env/base/contracts.toml +++ b/etc/env/base/contracts.toml @@ -2,52 +2,52 @@ # Values of this file are updated automatically by the contract deploy script. [contracts] -ADMIN_FACET_ADDR="0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" -DIAMOND_INIT_ADDR="0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" -DIAMOND_UPGRADE_INIT_ADDR="0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" -DEFAULT_UPGRADE_ADDR="0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" -MAILBOX_FACET_ADDR="0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" -EXECUTOR_FACET_ADDR="0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" -GOVERNANCE_ADDR="0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" -GETTERS_FACET_ADDR="0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" -VERIFIER_ADDR="0xDAbb67b676F5b01FcC8997Cc8439846D0d8078ca" -DIAMOND_PROXY_ADDR="0xFC073319977e314F251EAE6ae6bE76B0B3BAeeCF" -L1_MULTICALL3_ADDR="0xcA11bde05977b3631167028862bE2a173976CA11" -L1_ERC20_BRIDGE_PROXY_ADDR="0xFC073319977e314F251EAE6ae6bE76B0B3BAeeCF" -L1_ERC20_BRIDGE_IMPL_ADDR="0xFC073319977e314F251EAE6ae6bE76B0B3BAeeCF" -L2_ERC20_BRIDGE_ADDR="0xFC073319977e314F251EAE6ae6bE76B0B3BAeeCF" -L2_TESTNET_PAYMASTER_ADDR="0xFC073319977e314F251EAE6ae6bE76B0B3BAeeCF" -L1_ALLOW_LIST_ADDR="0xFC073319977e314F251EAE6ae6bE76B0B3BAeeCF" -CREATE2_FACTORY_ADDR="0xce0042B868300000d44A59004Da54A005ffdcf9f" -VALIDATOR_TIMELOCK_ADDR="0xFC073319977e314F251EAE6ae6bE76B0B3BAeeCF" -VALIDATOR_TIMELOCK_EXECUTION_DELAY=0 -RECURSION_SCHEDULER_LEVEL_VK_HASH="0x18518ce15be02847459f304b1567cb914ae357eca82af07c09582e78592b987b" -RECURSION_NODE_LEVEL_VK_HASH="0x1186ec268d49f1905f8d9c1e9d39fc33e98c74f91d91a21b8f7ef78bd09a8db8" -RECURSION_LEAF_LEVEL_VK_HASH="0x101e08b00193e529145ee09823378ef51a3bc8966504064f1f6ba3f1ba863210" -RECURSION_CIRCUITS_SET_VKS_HASH="0x18c1639094f58177409186e8c48d9f577c9410901d2f1d486b3e7d6cf553ae4c" -GENESIS_TX_HASH="0xb99ebfea46cbe05a21cd80fe5597d97b204befc52a16303f579c607dc1ac2e2e" -GENESIS_ROOT="0x2d5ab622df708ab44944bb02377be85b6f27812e9ae520734873b7a193898ba4" -PRIORITY_TX_MAX_GAS_LIMIT=72000000 -DEPLOY_L2_BRIDGE_COUNTERPART_GAS_LIMIT=10000000 -GENESIS_BATCH_COMMITMENT="0x6c7f89335e3ade24a7768ed73c425afd9fac92a094e0681f76cb6feabf8b6223" +ADMIN_FACET_ADDR = "0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" +DIAMOND_INIT_ADDR = "0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" +DIAMOND_UPGRADE_INIT_ADDR = "0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" +DEFAULT_UPGRADE_ADDR = "0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" +MAILBOX_FACET_ADDR = "0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" +EXECUTOR_FACET_ADDR = "0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" +GOVERNANCE_ADDR = "0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" +GETTERS_FACET_ADDR = "0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" +VERIFIER_ADDR = "0xDAbb67b676F5b01FcC8997Cc8439846D0d8078ca" +DIAMOND_PROXY_ADDR = "0xFC073319977e314F251EAE6ae6bE76B0B3BAeeCF" +L1_MULTICALL3_ADDR = "0xcA11bde05977b3631167028862bE2a173976CA11" +L1_ERC20_BRIDGE_PROXY_ADDR = "0xFC073319977e314F251EAE6ae6bE76B0B3BAeeCF" +L1_ERC20_BRIDGE_IMPL_ADDR = "0xFC073319977e314F251EAE6ae6bE76B0B3BAeeCF" +L2_ERC20_BRIDGE_ADDR = "0xFC073319977e314F251EAE6ae6bE76B0B3BAeeCF" +L2_TESTNET_PAYMASTER_ADDR = "0xFC073319977e314F251EAE6ae6bE76B0B3BAeeCF" +L1_ALLOW_LIST_ADDR = "0xFC073319977e314F251EAE6ae6bE76B0B3BAeeCF" +CREATE2_FACTORY_ADDR = "0xce0042B868300000d44A59004Da54A005ffdcf9f" +VALIDATOR_TIMELOCK_ADDR = "0xFC073319977e314F251EAE6ae6bE76B0B3BAeeCF" +VALIDATOR_TIMELOCK_EXECUTION_DELAY = 0 +RECURSION_SCHEDULER_LEVEL_VK_HASH = "0x18518ce15be02847459f304b1567cb914ae357eca82af07c09582e78592b987b" +RECURSION_NODE_LEVEL_VK_HASH = "0x1186ec268d49f1905f8d9c1e9d39fc33e98c74f91d91a21b8f7ef78bd09a8db8" +RECURSION_LEAF_LEVEL_VK_HASH = "0x101e08b00193e529145ee09823378ef51a3bc8966504064f1f6ba3f1ba863210" +RECURSION_CIRCUITS_SET_VKS_HASH = "0x18c1639094f58177409186e8c48d9f577c9410901d2f1d486b3e7d6cf553ae4c" +GENESIS_TX_HASH = "0xb99ebfea46cbe05a21cd80fe5597d97b204befc52a16303f579c607dc1ac2e2e" +GENESIS_ROOT = "0x436cf80dd02a7e1a1df65be6ec9ea231ccec97c44f4c8c9cd2aa26c2feb074cd" +PRIORITY_TX_MAX_GAS_LIMIT = 72000000 +DEPLOY_L2_BRIDGE_COUNTERPART_GAS_LIMIT = 10000000 +GENESIS_BATCH_COMMITMENT = "0x938016208176c5a49d47c8aa582b5d18afc4f159dfa099087770e0796948fd1a" # Current rollup leaf index after genesis -GENESIS_ROLLUP_LEAF_INDEX="21" -L1_WETH_BRIDGE_IMPL_ADDR="0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" -L1_WETH_BRIDGE_PROXY_ADDR="0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" -L1_WETH_TOKEN_ADDR="0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" -L2_WETH_BRIDGE_ADDR="0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" -L2_WETH_TOKEN_IMPL_ADDR="0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" -L2_WETH_TOKEN_PROXY_ADDR="0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" -FRI_RECURSION_LEAF_LEVEL_VK_HASH ="0x400a4b532c6f072c00d1806ef299300d4c104f4ac55bd8698ade78894fcadc0a" -FRI_RECURSION_NODE_LEVEL_VK_HASH ="0x5a3ef282b21e12fe1f4438e5bb158fc5060b160559c5158c6389d62d9fe3d080" -FRI_RECURSION_SCHEDULER_LEVEL_VK_HASH ="0x1405880dc3317d635bddb0ab62bf5d013e5d1f462161c1f7ac3289c7fef956da" -SNARK_WRAPPER_VK_HASH ="0x063c6fb5c70404c2867f413a8e35563ad3d040b1ad8c11786231bfdba7b472c7" -BLOB_VERSIONED_HASH_RETRIEVER_ADDR="0x0000000000000000000000000000000000000000" +GENESIS_ROLLUP_LEAF_INDEX = "25" +L1_WETH_BRIDGE_IMPL_ADDR = "0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" +L1_WETH_BRIDGE_PROXY_ADDR = "0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" +L1_WETH_TOKEN_ADDR = "0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" +L2_WETH_BRIDGE_ADDR = "0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" +L2_WETH_TOKEN_IMPL_ADDR = "0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" +L2_WETH_TOKEN_PROXY_ADDR = "0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" +FRI_RECURSION_LEAF_LEVEL_VK_HASH = "0x400a4b532c6f072c00d1806ef299300d4c104f4ac55bd8698ade78894fcadc0a" +FRI_RECURSION_NODE_LEVEL_VK_HASH = "0x5a3ef282b21e12fe1f4438e5bb158fc5060b160559c5158c6389d62d9fe3d080" +FRI_RECURSION_SCHEDULER_LEVEL_VK_HASH = "0x1405880dc3317d635bddb0ab62bf5d013e5d1f462161c1f7ac3289c7fef956da" +SNARK_WRAPPER_VK_HASH = "0x063c6fb5c70404c2867f413a8e35563ad3d040b1ad8c11786231bfdba7b472c7" +BLOB_VERSIONED_HASH_RETRIEVER_ADDR = "0x0000000000000000000000000000000000000000" # Prover that should be used at genesis. 'fri' or 'snark' -PROVER_AT_GENESIS="fri" +PROVER_AT_GENESIS = "fri" -INITIAL_PROTOCOL_VERSION=18 +INITIAL_PROTOCOL_VERSION = 18 # These are currently not used, but will be used once the shared bridge is up BRIDGEHUB_PROXY_ADDR = "0x0000000000000000000000000000000000000000" @@ -57,6 +57,6 @@ STATE_TRANSITION_IMPL_ADDR = "0x0000000000000000000000000000000000000000" TRANSPARENT_PROXY_ADMIN_ADDR = "0x0000000000000000000000000000000000000000" [contracts.test] -dummy_verifier=true -easy_priority_mode=false +dummy_verifier = true +easy_priority_mode = false diff --git a/infrastructure/zk/src/server.ts b/infrastructure/zk/src/server.ts index aa853bcdc21..841b91e27bd 100644 --- a/infrastructure/zk/src/server.ts +++ b/infrastructure/zk/src/server.ts @@ -1,9 +1,9 @@ -import { Command } from 'commander'; +import {Command} from 'commander'; import * as utils from './utils'; import * as env from './env'; -import { clean } from './clean'; +import {clean} from './clean'; import fs from 'fs'; -import { unloadInit } from './env'; +import {unloadInit} from './env'; import * as path from 'path'; import * as db from './database'; @@ -41,7 +41,7 @@ export async function externalNode(reinit: boolean = false, args: string[]) { // On --reinit we want to reset RocksDB and Postgres before we start. if (reinit) { await utils.confirmAction(); - await db.reset({ server: true, prover: false }); + await db.reset({server: true, prover: false}); clean(path.dirname(process.env.EN_MERKLE_TREE_PATH!)); } @@ -51,45 +51,6 @@ export async function externalNode(reinit: boolean = false, args: string[]) { async function create_genesis(cmd: string) { await utils.confirmAction(); await utils.spawn(`${cmd} | tee genesis.log`); - const genesisContents = fs.readFileSync('genesis.log').toString().split('\n'); - const genesisBlockCommitment = genesisContents.find((line) => line.includes('CONTRACTS_GENESIS_BATCH_COMMITMENT=')); - const genesisBootloaderHash = genesisContents.find((line) => line.includes('CHAIN_STATE_KEEPER_BOOTLOADER_HASH=')); - const genesisDefaultAAHash = genesisContents.find((line) => line.includes('CHAIN_STATE_KEEPER_DEFAULT_AA_HASH=')); - const genesisRoot = genesisContents.find((line) => line.includes('CONTRACTS_GENESIS_ROOT=')); - const genesisRollupLeafIndex = genesisContents.find((line) => - line.includes('CONTRACTS_GENESIS_ROLLUP_LEAF_INDEX=') - ); - if (genesisRoot == null || !/^CONTRACTS_GENESIS_ROOT=0x[a-fA-F0-9]{64}$/.test(genesisRoot)) { - throw Error(`Genesis is not needed (either Postgres DB or tree's Rocks DB is not empty)`); - } - - if ( - genesisBootloaderHash == null || - !/^CHAIN_STATE_KEEPER_BOOTLOADER_HASH=0x[a-fA-F0-9]{64}$/.test(genesisBootloaderHash) - ) { - throw Error(`Genesis is not needed (either Postgres DB or tree's Rocks DB is not empty)`); - } - - if ( - genesisDefaultAAHash == null || - !/^CHAIN_STATE_KEEPER_DEFAULT_AA_HASH=0x[a-fA-F0-9]{64}$/.test(genesisDefaultAAHash) - ) { - throw Error(`Genesis is not needed (either Postgres DB or tree's Rocks DB is not empty)`); - } - - if ( - genesisBlockCommitment == null || - !/^CONTRACTS_GENESIS_BATCH_COMMITMENT=0x[a-fA-F0-9]{64}$/.test(genesisBlockCommitment) - ) { - throw Error(`Genesis is not needed (either Postgres DB or tree's Rocks DB is not empty)`); - } - - if ( - genesisRollupLeafIndex == null || - !/^CONTRACTS_GENESIS_ROLLUP_LEAF_INDEX=([1-9]\d*|0)$/.test(genesisRollupLeafIndex) - ) { - throw Error(`Genesis is not needed (either Postgres DB or tree's Rocks DB is not empty)`); - } const date = new Date(); const [year, month, day, hour, minute, second] = [ @@ -101,13 +62,8 @@ async function create_genesis(cmd: string) { date.getSeconds() ]; const label = `${process.env.ZKSYNC_ENV}-Genesis_gen-${year}-${month}-${day}-${hour}${minute}${second}`; - fs.mkdirSync(`logs/${label}`, { recursive: true }); + fs.mkdirSync(`logs/${label}`, {recursive: true}); fs.copyFileSync('genesis.log', `logs/${label}/genesis.log`); - env.modify('CONTRACTS_GENESIS_ROOT', genesisRoot); - env.modify('CHAIN_STATE_KEEPER_BOOTLOADER_HASH', genesisBootloaderHash); - env.modify('CHAIN_STATE_KEEPER_DEFAULT_AA_HASH', genesisDefaultAAHash); - env.modify('CONTRACTS_GENESIS_BATCH_COMMITMENT', genesisBlockCommitment); - env.modify('CONTRACTS_GENESIS_ROLLUP_LEAF_INDEX', genesisRollupLeafIndex); } export async function genesisFromSources() { From 1695a354331e7023c9b119ef82210a9ed91100c1 Mon Sep 17 00:00:00 2001 From: Danil Date: Thu, 14 Mar 2024 16:50:45 +0100 Subject: [PATCH 15/65] Fix chain id Signed-off-by: Danil --- core/lib/basic_types/src/network.rs | 4 ++-- etc/env/base/contracts.toml | 2 +- etc/env/base/eth_client.toml | 4 ++-- etc/env/base/private.toml | 18 ++++++++-------- etc/env/ext-node.toml | 24 +++++++++++----------- infrastructure/zk/src/hyperchain_wizard.ts | 2 +- infrastructure/zk/src/server.ts | 10 ++++----- 7 files changed, 32 insertions(+), 32 deletions(-) diff --git a/core/lib/basic_types/src/network.rs b/core/lib/basic_types/src/network.rs index 780b78ee2d2..5f4683aeb67 100644 --- a/core/lib/basic_types/src/network.rs +++ b/core/lib/basic_types/src/network.rs @@ -74,7 +74,7 @@ impl Network { 3 => Self::Ropsten, 4 => Self::Rinkeby, 5 => Self::Goerli, - 1337 => Self::Localhost, + 9 => Self::Localhost, 11155111 => Self::Sepolia, _ => Self::Unknown, } @@ -87,7 +87,7 @@ impl Network { Self::Ropsten => L1ChainId(3), Self::Rinkeby => L1ChainId(4), Self::Goerli => L1ChainId(5), - Self::Localhost => L1ChainId(1337), + Self::Localhost => L1ChainId(9), Self::Sepolia => L1ChainId(11155111), Self::Unknown => panic!("Unknown chain ID"), Self::Test => panic!("Test chain ID"), diff --git a/etc/env/base/contracts.toml b/etc/env/base/contracts.toml index 5988ef78d25..06c651c426f 100644 --- a/etc/env/base/contracts.toml +++ b/etc/env/base/contracts.toml @@ -31,7 +31,7 @@ PRIORITY_TX_MAX_GAS_LIMIT = 72000000 DEPLOY_L2_BRIDGE_COUNTERPART_GAS_LIMIT = 10000000 GENESIS_BATCH_COMMITMENT = "0x938016208176c5a49d47c8aa582b5d18afc4f159dfa099087770e0796948fd1a" # Current rollup leaf index after genesis -GENESIS_ROLLUP_LEAF_INDEX = "25" +GENESIS_ROLLUP_LEAF_INDEX = "26" L1_WETH_BRIDGE_IMPL_ADDR = "0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" L1_WETH_BRIDGE_PROXY_ADDR = "0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" L1_WETH_TOKEN_ADDR = "0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" diff --git a/etc/env/base/eth_client.toml b/etc/env/base/eth_client.toml index 61a17d4e97a..3bdef998877 100644 --- a/etc/env/base/eth_client.toml +++ b/etc/env/base/eth_client.toml @@ -1,4 +1,4 @@ [eth_client] -chain_id=1337 +chain_id = 9 # Addresses of the Ethereum node API, separated by comma -web3_url="http://127.0.0.1:8545" +web3_url = "http://127.0.0.1:8545" diff --git a/etc/env/base/private.toml b/etc/env/base/private.toml index 0fbf598df0c..1d6f8dabf82 100644 --- a/etc/env/base/private.toml +++ b/etc/env/base/private.toml @@ -1,20 +1,20 @@ # Sensitive values which MUST be different for production # Values provided here are valid for the development infrastructure only. -database_url="postgres://postgres:notsecurepassword@localhost/zksync_local" -database_prover_url="postgres://postgres:notsecurepassword@localhost/prover_local" -test_database_url="postgres://postgres:notsecurepassword@localhost:5433/zksync_local_test" -test_database_prover_url="postgres://postgres:notsecurepassword@localhost:5433/prover_local_test" +database_url = "postgres://postgres:notsecurepassword@localhost/zksync_local" +database_prover_url = "postgres://postgres:notsecurepassword@localhost/prover_local" +test_database_url = "postgres://postgres:notsecurepassword@localhost:5433/zksync_local_test" +test_database_prover_url = "postgres://postgres:notsecurepassword@localhost:5433/prover_local_test" [eth_sender.sender] # Set in env file for development, production, staging and testnet. -operator_private_key="0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6" +operator_private_key = "0x27593fea79697e947890ecbecce7901b0008345e5d7259710d0dd5e500d040be" # Address to be used for zkSync account managing the interaction with a contract on Ethereum. # Derived from the `OPERATOR_PRIVATE_KEY`. -operator_commit_eth_addr="0xa0Ee7A142d267C1f36714E4a8F75612F20a79720" +operator_commit_eth_addr = "0xde03a0B5963f75f1C8485B355fF6D30f3093BDE7" -operator_blobs_private_key="0x4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356" -operator_blobs_eth_addr="0x14dC79964da2C08b23698B3D3cc7Ca32193d9955" +operator_blobs_private_key = "0xe667e57a9b8aaa6709e51ff7d093f1c5b73b63f9987e4ab4aa9a5c699e024ee8" +operator_blobs_eth_addr = "0x4F9133D1d3F50011A6859807C837bdCB31Aaab13" [consensus] config_path = "etc/env/consensus_config.yaml" @@ -22,4 +22,4 @@ secrets_path = "etc/env/consensus_secrets.yaml" [misc] # Private key for the fee seller account -fee_account_private_key="0x27593fea79697e947890ecbecce7901b0008345e5d7259710d0dd5e500d040be" +fee_account_private_key = "0x27593fea79697e947890ecbecce7901b0008345e5d7259710d0dd5e500d040be" diff --git a/etc/env/ext-node.toml b/etc/env/ext-node.toml index 9309e569e65..8ab989e6cf5 100644 --- a/etc/env/ext-node.toml +++ b/etc/env/ext-node.toml @@ -5,7 +5,7 @@ database_url = "postgres://postgres:notsecurepassword@localhost/zksync_local_ext_node" test_database_url = "postgres://postgres:notsecurepassword@localhost:5433/zksync_local_test_ext_node" database_pool_size = 50 -zksync_action="dont_ask" +zksync_action = "dont_ask" [en] http_port = 3060 @@ -14,7 +14,7 @@ prometheus_port = 3322 healthcheck_port = 3081 threads_per_server = 128 l2_chain_id = 270 -l1_chain_id = 1337 +l1_chain_id = 9 req_entities_limit = 10000 @@ -29,29 +29,29 @@ api_namespaces = ["eth", "web3", "net", "pubsub", "zks", "en", "debug"] # Note: # `bootloader_hash` and `default_aa_hash` are overridden from the `.init.env` values by `zk` tool. -bootloader_hash="0x0100038581be3d0e201b3cc45d151ef5cc59eb3a0f146ad44f0f72abf00b594c" -default_aa_hash="0x0100038dc66b69be75ec31653c64cb931678299b9b659472772b2550b703f41c" +bootloader_hash = "0x0100038581be3d0e201b3cc45d151ef5cc59eb3a0f146ad44f0f72abf00b594c" +default_aa_hash = "0x0100038dc66b69be75ec31653c64cb931678299b9b659472772b2550b703f41c" # Should be the same as chain.state_keeper.fee_account_addr. -operator_addr="0xde03a0B5963f75f1C8485B355fF6D30f3093BDE7" +operator_addr = "0xde03a0B5963f75f1C8485B355fF6D30f3093BDE7" [en.consensus] -config_path="etc/env/en_consensus_config.yaml" -secrets_path="etc/env/en_consensus_secrets.yaml" +config_path = "etc/env/en_consensus_config.yaml" +secrets_path = "etc/env/en_consensus_secrets.yaml" [en.database] long_connection_threshold_ms = 2000 slow_query_threshold_ms = 100 [en.snapshots.object_store] -mode="FileBacked" -file_backed_base_path="artifacts" +mode = "FileBacked" +file_backed_base_path = "artifacts" # ^ Intentionally set to coincide with main node's in order to read locally produced snapshots [rust] # `RUST_LOG` environment variable for `env_logger` # Here we use TOML multiline strings: newlines will be trimmed. -log="""\ +log = """\ warn,\ zksync_consensus_bft=info,\ zksync_consensus_network=info,\ @@ -72,5 +72,5 @@ zksync_snapshots_applier=debug,\ """ # `RUST_BACKTRACE` variable -backtrace="full" -lib_backtrace="1" +backtrace = "full" +lib_backtrace = "1" diff --git a/infrastructure/zk/src/hyperchain_wizard.ts b/infrastructure/zk/src/hyperchain_wizard.ts index 41fc7b7e116..3064b94da46 100644 --- a/infrastructure/zk/src/hyperchain_wizard.ts +++ b/infrastructure/zk/src/hyperchain_wizard.ts @@ -775,7 +775,7 @@ async function configDemoHyperchain(cmd: Command) { env.set('demo'); wrapEnvModify('CHAIN_ETH_ZKSYNC_NETWORK', 'Zeek hyperchain'); - wrapEnvModify('CHAIN_ETH_ZKSYNC_NETWORK_ID', '1337'); + wrapEnvModify('CHAIN_ETH_ZKSYNC_NETWORK_ID', '9'); wrapEnvModify('ETH_SENDER_SENDER_PROOF_SENDING_MODE', 'SkipEveryProof'); wrapEnvModify('ETH_SENDER_SENDER_L1_BATCH_MIN_AGE_BEFORE_EXECUTE_SECONDS', '20'); diff --git a/infrastructure/zk/src/server.ts b/infrastructure/zk/src/server.ts index 841b91e27bd..02889bd9ea4 100644 --- a/infrastructure/zk/src/server.ts +++ b/infrastructure/zk/src/server.ts @@ -1,9 +1,9 @@ -import {Command} from 'commander'; +import { Command } from 'commander'; import * as utils from './utils'; import * as env from './env'; -import {clean} from './clean'; +import { clean } from './clean'; import fs from 'fs'; -import {unloadInit} from './env'; +import { unloadInit } from './env'; import * as path from 'path'; import * as db from './database'; @@ -41,7 +41,7 @@ export async function externalNode(reinit: boolean = false, args: string[]) { // On --reinit we want to reset RocksDB and Postgres before we start. if (reinit) { await utils.confirmAction(); - await db.reset({server: true, prover: false}); + await db.reset({ server: true, prover: false }); clean(path.dirname(process.env.EN_MERKLE_TREE_PATH!)); } @@ -62,7 +62,7 @@ async function create_genesis(cmd: string) { date.getSeconds() ]; const label = `${process.env.ZKSYNC_ENV}-Genesis_gen-${year}-${month}-${day}-${hour}${minute}${second}`; - fs.mkdirSync(`logs/${label}`, {recursive: true}); + fs.mkdirSync(`logs/${label}`, { recursive: true }); fs.copyFileSync('genesis.log', `logs/${label}/genesis.log`); } From 7f7cb8da9960eaf1677180a2090fc7d4022436e1 Mon Sep 17 00:00:00 2001 From: Danil Date: Thu, 14 Mar 2024 18:29:47 +0100 Subject: [PATCH 16/65] Add genesis protocol version Signed-off-by: Danil --- core/lib/config/src/configs/contracts.rs | 2 ++ core/lib/config/src/testonly.rs | 1 + core/lib/env_config/src/genesis.rs | 4 +++- core/lib/protobuf_config/src/contracts.rs | 2 ++ core/lib/protobuf_config/src/proto/contracts.proto | 1 + core/lib/zksync_core/src/genesis.rs | 2 +- etc/env/base/contracts.toml | 1 + 7 files changed, 11 insertions(+), 2 deletions(-) diff --git a/core/lib/config/src/configs/contracts.rs b/core/lib/config/src/configs/contracts.rs index a45e6bd98b0..3d0c0c50c04 100644 --- a/core/lib/config/src/configs/contracts.rs +++ b/core/lib/config/src/configs/contracts.rs @@ -9,6 +9,7 @@ pub struct ContractsConfig { pub genesis_root: Option, pub genesis_rollup_leaf_index: Option, pub genesis_batch_commitment: Option, + pub genesis_protocol_version: Option, pub governance_addr: Address, pub mailbox_facet_addr: Address, pub executor_facet_addr: Address, @@ -87,6 +88,7 @@ impl ContractsConfig { state_transition_proxy_addr: Some(Address::repeat_byte(0x16)), state_transition_impl_addr: Some(Address::repeat_byte(0x17)), genesis_batch_commitment: Some(H256::repeat_byte(0x17)), + genesis_protocol_version: Some(21), } } } diff --git a/core/lib/config/src/testonly.rs b/core/lib/config/src/testonly.rs index c275e7d2cfa..3811813d9dc 100644 --- a/core/lib/config/src/testonly.rs +++ b/core/lib/config/src/testonly.rs @@ -374,6 +374,7 @@ impl RandomConfig for configs::ContractsConfig { genesis_batch_commitment: g.gen(), genesis_rollup_leaf_index: g.gen(), genesis_root: g.gen(), + genesis_protocol_version: g.gen(), } } } diff --git a/core/lib/env_config/src/genesis.rs b/core/lib/env_config/src/genesis.rs index a0a6a5f2229..89d2a11f7f0 100644 --- a/core/lib/env_config/src/genesis.rs +++ b/core/lib/env_config/src/genesis.rs @@ -13,7 +13,9 @@ impl FromEnv for GenesisConfig { let contracts_config = &ContractsConfig::from_env()?; let state_keeper = StateKeeperConfig::from_env()?; Ok(GenesisConfig { - protocol_version: 20, + protocol_version: contracts_config + .genesis_protocol_version + .ok_or(anyhow!("Protocol version is required for genesis"))?, genesis_root_hash: contracts_config .genesis_root .ok_or(anyhow!("genesis_root_hash required for genesis"))?, diff --git a/core/lib/protobuf_config/src/contracts.rs b/core/lib/protobuf_config/src/contracts.rs index 5c7682732e5..05cba0a1578 100644 --- a/core/lib/protobuf_config/src/contracts.rs +++ b/core/lib/protobuf_config/src/contracts.rs @@ -143,6 +143,7 @@ impl ProtoRepr for proto::Contracts { .map(|x| parse_h256(x)) .transpose() .context("genesis_root")?, + genesis_protocol_version: self.genesis_protocol_version.map(|a| a as u16), }) } @@ -220,6 +221,7 @@ impl ProtoRepr for proto::Contracts { .as_ref() .map(|x| x.as_bytes().into()), genesis_rollup_leaf_index: this.genesis_rollup_leaf_index, + genesis_protocol_version: this.genesis_protocol_version.map(|a| a as u32), } } } diff --git a/core/lib/protobuf_config/src/proto/contracts.proto b/core/lib/protobuf_config/src/proto/contracts.proto index 6c27c6c8e9b..99484bc3d5c 100644 --- a/core/lib/protobuf_config/src/proto/contracts.proto +++ b/core/lib/protobuf_config/src/proto/contracts.proto @@ -38,4 +38,5 @@ message Contracts { optional bytes genesis_root = 34; // optional; h256 optional uint64 genesis_rollup_leaf_index = 35; // optional; optional bytes genesis_batch_commitment = 36; // optional; h256 + optional uint32 genesis_protocol_version= 37; // optional; } diff --git a/core/lib/zksync_core/src/genesis.rs b/core/lib/zksync_core/src/genesis.rs index b62762ab969..73b1a01d201 100644 --- a/core/lib/zksync_core/src/genesis.rs +++ b/core/lib/zksync_core/src/genesis.rs @@ -568,7 +568,7 @@ mod tests { let pool = ConnectionPool::test_pool().await; let mut conn = pool.access_storage().await.unwrap(); let params = GenesisConfig { - protocol_version: ProtocolVersionId::Version10, + protocol_version: ProtocolVersionId::Version10 as u16, ..GenesisConfig::mock() } .load_genesis_params() diff --git a/etc/env/base/contracts.toml b/etc/env/base/contracts.toml index 06c651c426f..eb83a958523 100644 --- a/etc/env/base/contracts.toml +++ b/etc/env/base/contracts.toml @@ -32,6 +32,7 @@ DEPLOY_L2_BRIDGE_COUNTERPART_GAS_LIMIT = 10000000 GENESIS_BATCH_COMMITMENT = "0x938016208176c5a49d47c8aa582b5d18afc4f159dfa099087770e0796948fd1a" # Current rollup leaf index after genesis GENESIS_ROLLUP_LEAF_INDEX = "26" +GENESIS_PROTOCOL_VERSION = "21" L1_WETH_BRIDGE_IMPL_ADDR = "0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" L1_WETH_BRIDGE_PROXY_ADDR = "0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" L1_WETH_TOKEN_ADDR = "0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" From 3842bd2624328e1f1d82c57ced7684843148a99a Mon Sep 17 00:00:00 2001 From: Danil Date: Fri, 15 Mar 2024 09:47:56 +0100 Subject: [PATCH 17/65] Fix tests for getting from env structs Signed-off-by: Danil --- core/lib/env_config/src/chain.rs | 10 +++++++++- core/lib/env_config/src/contracts.rs | 14 +++++++++++--- core/lib/protobuf_config/src/chain.rs | 4 ++-- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/core/lib/env_config/src/chain.rs b/core/lib/env_config/src/chain.rs index b5028e99107..ab93c552e65 100644 --- a/core/lib/env_config/src/chain.rs +++ b/core/lib/env_config/src/chain.rs @@ -40,7 +40,7 @@ mod tests { use zksync_config::configs::chain::FeeModelVersion; use super::*; - use crate::test_utils::{addr, EnvMutex}; + use crate::test_utils::{addr, hash, EnvMutex}; static MUTEX: EnvMutex = EnvMutex::new(); @@ -94,6 +94,12 @@ mod tests { virtual_blocks_per_miniblock: 1, upload_witness_inputs_to_gcs: false, enum_index_migration_chunk_size: Some(2_000), + bootloader_hash: Some(hash( + "0x010007ede999d096c84553fb514d3d6ca76fbf39789dda76bfeda9f3ae06236e", + )), + default_aa_hash: Some(hash( + "0x0100055b041eb28aff6e3a6e0f37c31fd053fc9ef142683b05e5f0aee6934066", + )), } } @@ -127,6 +133,8 @@ mod tests { CHAIN_STATE_KEEPER_ENUM_INDEX_MIGRATION_CHUNK_SIZE="2000" CHAIN_STATE_KEEPER_VIRTUAL_BLOCKS_PER_MINIBLOCK="1" CHAIN_STATE_KEEPER_VIRTUAL_BLOCKS_INTERVAL="1" + CHAIN_STATE_KEEPER_BOOTLOADER_HASH=0x010007ede999d096c84553fb514d3d6ca76fbf39789dda76bfeda9f3ae06236e + CHAIN_STATE_KEEPER_DEFAULT_AA_HASH=0x0100055b041eb28aff6e3a6e0f37c31fd053fc9ef142683b05e5f0aee6934066 "#; lock.set_env(config); diff --git a/core/lib/env_config/src/contracts.rs b/core/lib/env_config/src/contracts.rs index bf2dc31d7bb..6c50b830876 100644 --- a/core/lib/env_config/src/contracts.rs +++ b/core/lib/env_config/src/contracts.rs @@ -10,8 +10,6 @@ impl FromEnv for ContractsConfig { #[cfg(test)] mod tests { - use zksync_config::configs::contracts::ProverAtGenesis; - use super::*; use crate::test_utils::{addr, hash, EnvMutex}; @@ -19,6 +17,13 @@ mod tests { fn expected_config() -> ContractsConfig { ContractsConfig { + genesis_root: Some(hash( + "0x436cf80dd02a7e1a1df65be6ec9ea231ccec97c44f4c8c9cd2aa26c2feb074cd", + )), + genesis_rollup_leaf_index: Some(26), + genesis_batch_commitment: Some(hash( + "0x938016208176c5a49d47c8aa582b5d18afc4f159dfa099087770e0796948fd1a", + )), bridgehub_proxy_addr: Some(addr("35ea7f92f4c5f433efe15284e99c040110cf6297")), bridgehub_impl_addr: Some(addr("87d456da9ed212eb49d80d96afb44afddf36adf8")), state_transition_proxy_addr: Some(addr("d90f1c081c6117241624e97cb6147257c3cb2097")), @@ -66,10 +71,10 @@ mod tests { fri_recursion_leaf_level_vk_hash: hash( "0x72167c43a46cf38875b267d67716edc4563861364a3c03ab7aee73498421e828", ), - prover_at_genesis: ProverAtGenesis::Fri, snark_wrapper_vk_hash: hash( "0x4be443afd605a782b6e56d199df2460a025c81b3dea144e135bece83612563f2", ), + genesis_protocol_version: Some(22), } } @@ -110,6 +115,9 @@ CONTRACTS_BRIDGEHUB_IMPL_ADDR="0x87d456da9ed212eb49d80d96afb44afddf36adf8" CONTRACTS_STATE_TRANSITION_PROXY_ADDR="0xd90f1c081c6117241624e97cb6147257c3cb2097" CONTRACTS_STATE_TRANSITION_IMPL_ADDR="0xc957c0e82d3bafb5ad46ffbcc66900648784eb05" CONTRACTS_TRANSPARENT_PROXY_ADMIN_ADDR="0xdd6fa5c14e7550b4caf2aa2818d24c69cbc347e5" +CONTRACTS_GENESIS_ROOT=0x436cf80dd02a7e1a1df65be6ec9ea231ccec97c44f4c8c9cd2aa26c2feb074cd +CONTRACTS_GENESIS_BATCH_COMMITMENT=0x938016208176c5a49d47c8aa582b5d18afc4f159dfa099087770e0796948fd1a +CONTRACTS_GENESIS_ROLLUP_LEAF_INDEX=26 "#; lock.set_env(config); diff --git a/core/lib/protobuf_config/src/chain.rs b/core/lib/protobuf_config/src/chain.rs index c7ddd5b6c04..22fdbcd0bb3 100644 --- a/core/lib/protobuf_config/src/chain.rs +++ b/core/lib/protobuf_config/src/chain.rs @@ -143,13 +143,13 @@ impl ProtoRepr for proto::StateKeeper { bootloader_hash: self .bootloader_hash .as_ref() - .map(|a| parse_h256(&a)) + .map(|a| parse_h256(a)) .transpose() .context("enum_index_migration_chunk_size")?, default_aa_hash: self .default_aa_hash .as_ref() - .map(|a| parse_h256(&a)) + .map(|a| parse_h256(a)) .transpose() .context("enum_index_migration_chunk_size")?, }) From 94bd47d47f3463773ff0a0b68e298e0b8eff2ac4 Mon Sep 17 00:00:00 2001 From: Danil Date: Fri, 15 Mar 2024 11:46:54 +0100 Subject: [PATCH 18/65] Merge --- .../src/api_server/web3/tests/mod.rs | 20 +++++---- .../lib/zksync_core/src/consensus/testonly.rs | 22 ++++++++-- .../src/consistency_checker/tests/mod.rs | 14 +++---- core/lib/zksync_core/src/genesis.rs | 42 ++++++++++++++----- .../src/metadata_calculator/helpers.rs | 9 ++-- .../src/metadata_calculator/recovery/tests.rs | 4 +- .../src/metadata_calculator/tests.rs | 6 +-- .../zksync_core/src/reorg_detector/tests.rs | 39 ++++++++--------- .../src/state_keeper/io/common/tests.rs | 30 +++++++------ .../src/state_keeper/mempool_actor.rs | 4 +- .../sync_layer/batch_status_updater/tests.rs | 4 +- core/lib/zksync_core/src/utils/mod.rs | 1 - core/lib/zksync_core/src/utils/testonly.rs | 2 +- 13 files changed, 116 insertions(+), 81 deletions(-) diff --git a/core/lib/zksync_core/src/api_server/web3/tests/mod.rs b/core/lib/zksync_core/src/api_server/web3/tests/mod.rs index d83647ee0bc..d9dc8e48dfd 100644 --- a/core/lib/zksync_core/src/api_server/web3/tests/mod.rs +++ b/core/lib/zksync_core/src/api_server/web3/tests/mod.rs @@ -10,10 +10,13 @@ use async_trait::async_trait; use jsonrpsee::core::{client::ClientT, params::BatchRequestBuilder, ClientError}; use multivm::zk_evm_latest::ethereum_types::U256; use tokio::sync::watch; -use zksync_config::configs::{ - api::Web3JsonRpcConfig, - chain::{NetworkConfig, StateKeeperConfig}, - ContractsConfig, +use zksync_config::{ + configs::{ + api::Web3JsonRpcConfig, + chain::{NetworkConfig, StateKeeperConfig}, + ContractsConfig, + }, + GenesisConfig, }; use zksync_dal::{transactions_dal::L2TxSubmissionResult, ConnectionPool, StorageProcessor}; use zksync_health_check::CheckHealth; @@ -44,7 +47,7 @@ use crate::{ execution_sandbox::testonly::MockTransactionExecutor, tx_sender::tests::create_test_tx_sender, }, - genesis::{ensure_genesis_state, GenesisConfig, GenesisParams}, + genesis::{ensure_genesis_state, mock_genesis_config, GenesisParams}, utils::testonly::{ create_l1_batch, create_l1_batch_metadata, create_l2_transaction, create_miniblock, l1_batch_metadata_to_commitment_artifacts, prepare_recovery_snapshot, @@ -237,11 +240,10 @@ impl StorageInitialization { ) -> anyhow::Result<()> { match self { Self::Genesis => { - let params = GenesisConfig { + let params = GenesisParams::load_genesis_params(GenesisConfig { l2_chain_id: network_config.zksync_network_id, - ..GenesisConfig::mock() - } - .load_genesis_params() + ..mock_genesis_config() + }) .unwrap(); if storage.blocks_dal().is_genesis_needed().await? { ensure_genesis_state(storage, ¶ms).await?; diff --git a/core/lib/zksync_core/src/consensus/testonly.rs b/core/lib/zksync_core/src/consensus/testonly.rs index a9fb4138d3d..6b99511d794 100644 --- a/core/lib/zksync_core/src/consensus/testonly.rs +++ b/core/lib/zksync_core/src/consensus/testonly.rs @@ -9,8 +9,10 @@ use zksync_consensus_roles::validator; use zksync_contracts::BaseSystemContractsHashes; use zksync_dal::ConnectionPool; use zksync_types::{ - api, api::L1BatchDetails, snapshots::SnapshotRecoveryStatus, Address, L1BatchNumber, L2ChainId, - MiniblockNumber, ProtocolVersionId, H256, + api, + api::{BridgeAddresses, L1BatchDetails}, + snapshots::SnapshotRecoveryStatus, + Address, L1BatchNumber, L1ChainId, L2ChainId, MiniblockNumber, ProtocolVersionId, H256, }; use zksync_web3_decl::{ error::{EnrichedClientError, EnrichedClientResult}, @@ -150,6 +152,20 @@ impl MainNodeClient for MockMainNodeClient { "fetch_genesis_l1_batch", )) } + + async fn fetch_l1_chain_id(&self) -> EnrichedClientResult { + Err(EnrichedClientError::custom( + "not implemented", + "fetch_l1_chain_id", + )) + } + + async fn fetch_contracts(&self) -> EnrichedClientResult<(Address, BridgeAddresses)> { + Err(EnrichedClientError::custom( + "not implemented", + "fetch_contracts", + )) + } } /// Fake StateKeeper for tests. @@ -256,7 +272,7 @@ impl StateKeeper { l1_gas_price: 2, l2_fair_gas_price: 3, fair_pubdata_price: Some(24), - operator_address: GenesisParams::mock().first_validator, + operator_address: GenesisParams::mock().config().fee_account, protocol_version: ProtocolVersionId::latest(), first_miniblock_info: (self.last_block, 1), } diff --git a/core/lib/zksync_core/src/consistency_checker/tests/mod.rs b/core/lib/zksync_core/src/consistency_checker/tests/mod.rs index 59d23f892fb..907b408793a 100644 --- a/core/lib/zksync_core/src/consistency_checker/tests/mod.rs +++ b/core/lib/zksync_core/src/consistency_checker/tests/mod.rs @@ -6,17 +6,18 @@ use assert_matches::assert_matches; use once_cell::sync::Lazy; use test_casing::{test_casing, Product}; use tokio::sync::mpsc; +use zksync_config::GenesisConfig; use zksync_dal::StorageProcessor; use zksync_eth_client::{clients::MockEthereum, Options}; use zksync_l1_contract_interface::i_executor::structures::StoredBatchInfo; use zksync_types::{ - aggregated_operations::AggregatedActionType, commitment::L1BatchWithMetadata, L2ChainId, Log, + aggregated_operations::AggregatedActionType, commitment::L1BatchWithMetadata, Log, ProtocolVersion, ProtocolVersionId, H256, }; use super::*; use crate::{ - genesis::{ensure_genesis_state, GenesisConfig, GenesisParams}, + genesis::{ensure_genesis_state, mock_genesis_config, GenesisParams}, utils::testonly::{ create_l1_batch, create_l1_batch_metadata, l1_batch_metadata_to_commitment_artifacts, }, @@ -433,11 +434,10 @@ async fn checker_processes_pre_boojum_batches( let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - let genesis_params = GenesisConfig { - protocol_version: PRE_BOOJUM_PROTOCOL_VERSION, - ..GenesisConfig::mock() - } - .load_genesis_params() + let genesis_params = GenesisParams::load_genesis_params(GenesisConfig { + protocol_version: PRE_BOOJUM_PROTOCOL_VERSION as u16, + ..mock_genesis_config() + }) .unwrap(); ensure_genesis_state(&mut storage, &genesis_params) .await diff --git a/core/lib/zksync_core/src/genesis.rs b/core/lib/zksync_core/src/genesis.rs index 73b1a01d201..a9c752fe4c3 100644 --- a/core/lib/zksync_core/src/genesis.rs +++ b/core/lib/zksync_core/src/genesis.rs @@ -106,7 +106,7 @@ impl GenesisParams { Self { base_system_contracts: BaseSystemContracts::load_from_disk(), system_contracts: get_system_smart_contracts(), - config: GenesisConfig::mock(), + config: mock_genesis_config(), } } @@ -116,6 +116,30 @@ impl GenesisParams { } } +#[cfg(test)] +pub fn mock_genesis_config() -> GenesisConfig { + use zksync_types::L1ChainId; + GenesisConfig { + protocol_version: ProtocolVersionId::latest() as u16, + genesis_root_hash: Default::default(), + rollup_last_leaf_index: 26, + genesis_commitment: Default::default(), + bootloader_hash: Default::default(), + default_aa_hash: Default::default(), + verifier_address: Default::default(), + fee_account: Default::default(), + diamond_proxy: Default::default(), + erc20_bridge: Default::default(), + state_transition_proxy_addr: None, + l1_chain_id: L1ChainId(9), + l2_chain_id: L2ChainId::default(), + recursion_node_level_vk_hash: Default::default(), + recursion_leaf_level_vk_hash: Default::default(), + recursion_circuits_set_vks_hash: Default::default(), + recursion_scheduler_level_vk_hash: Default::default(), + } +} + pub async fn ensure_genesis_state( storage: &mut StorageProcessor<'_>, genesis_params: &GenesisParams, @@ -512,8 +536,8 @@ pub(crate) async fn save_set_chain_id_tx( #[cfg(test)] mod tests { + use zksync_config::GenesisConfig; use zksync_dal::ConnectionPool; - use zksync_types::system_contracts::get_system_smart_contracts; use super::*; @@ -546,11 +570,10 @@ mod tests { let mut conn = pool.access_storage().await.unwrap(); conn.blocks_dal().delete_genesis().await.unwrap(); - let params = GenesisConfig { + let params = GenesisParams::load_genesis_params(GenesisConfig { l2_chain_id: L2ChainId::max(), - ..GenesisConfig::mock() - } - .load_genesis_params() + ..mock_genesis_config() + }) .unwrap(); ensure_genesis_state(&mut conn, ¶ms).await.unwrap(); @@ -567,11 +590,10 @@ mod tests { async fn running_genesis_with_non_latest_protocol_version() { let pool = ConnectionPool::test_pool().await; let mut conn = pool.access_storage().await.unwrap(); - let params = GenesisConfig { + let params = GenesisParams::load_genesis_params(GenesisConfig { protocol_version: ProtocolVersionId::Version10 as u16, - ..GenesisConfig::mock() - } - .load_genesis_params() + ..mock_genesis_config() + }) .unwrap(); ensure_genesis_state(&mut conn, ¶ms).await.unwrap(); diff --git a/core/lib/zksync_core/src/metadata_calculator/helpers.rs b/core/lib/zksync_core/src/metadata_calculator/helpers.rs index 6137f8e2f1f..180aa3644aa 100644 --- a/core/lib/zksync_core/src/metadata_calculator/helpers.rs +++ b/core/lib/zksync_core/src/metadata_calculator/helpers.rs @@ -480,7 +480,7 @@ mod tests { use tempfile::TempDir; use zksync_dal::ConnectionPool; use zksync_prover_interface::inputs::PrepareBasicCircuitsJob; - use zksync_types::{L2ChainId, StorageKey, StorageLog}; + use zksync_types::{StorageKey, StorageLog}; use super::*; use crate::{ @@ -563,7 +563,6 @@ mod tests { let pool = ConnectionPool::test_pool().await; ensure_genesis_state( &mut pool.access_storage().await.unwrap(), - L2ChainId::from(270), &GenesisParams::mock(), ) .await @@ -587,7 +586,7 @@ mod tests { async fn loaded_logs_equivalence_with_zero_no_op_logs() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, L2ChainId::from(270), &GenesisParams::mock()) + ensure_genesis_state(&mut storage, &GenesisParams::mock()) .await .unwrap(); @@ -678,7 +677,7 @@ mod tests { async fn loaded_logs_equivalence_with_non_zero_no_op_logs() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, L2ChainId::from(270), &GenesisParams::mock()) + ensure_genesis_state(&mut storage, &GenesisParams::mock()) .await .unwrap(); @@ -725,7 +724,7 @@ mod tests { async fn loaded_logs_equivalence_with_protective_reads() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, L2ChainId::from(270), &GenesisParams::mock()) + ensure_genesis_state(&mut storage, &GenesisParams::mock()) .await .unwrap(); diff --git a/core/lib/zksync_core/src/metadata_calculator/recovery/tests.rs b/core/lib/zksync_core/src/metadata_calculator/recovery/tests.rs index af6acfad4c9..eac72bcb100 100644 --- a/core/lib/zksync_core/src/metadata_calculator/recovery/tests.rs +++ b/core/lib/zksync_core/src/metadata_calculator/recovery/tests.rs @@ -12,7 +12,7 @@ use zksync_config::configs::{ }; use zksync_health_check::{CheckHealth, HealthStatus, ReactiveHealthCheck}; use zksync_merkle_tree::{domain::ZkSyncTree, TreeInstruction}; -use zksync_types::{L1BatchNumber, L2ChainId, ProtocolVersionId, StorageLog}; +use zksync_types::{L1BatchNumber, ProtocolVersionId, StorageLog}; use super::*; use crate::{ @@ -97,7 +97,7 @@ async fn prepare_recovery_snapshot_with_genesis( temp_dir: &TempDir, ) -> SnapshotRecoveryStatus { let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, L2ChainId::from(270), &GenesisParams::mock()) + ensure_genesis_state(&mut storage, &GenesisParams::mock()) .await .unwrap(); let mut logs = gen_storage_logs(100..300, 1).pop().unwrap(); diff --git a/core/lib/zksync_core/src/metadata_calculator/tests.rs b/core/lib/zksync_core/src/metadata_calculator/tests.rs index 2ee1ebedfc2..608e3561151 100644 --- a/core/lib/zksync_core/src/metadata_calculator/tests.rs +++ b/core/lib/zksync_core/src/metadata_calculator/tests.rs @@ -16,8 +16,8 @@ use zksync_merkle_tree::domain::ZkSyncTree; use zksync_object_store::{ObjectStore, ObjectStoreFactory}; use zksync_prover_interface::inputs::PrepareBasicCircuitsJob; use zksync_types::{ - block::L1BatchHeader, AccountTreeId, Address, L1BatchNumber, L2ChainId, MiniblockNumber, - StorageKey, StorageLog, H256, + block::L1BatchHeader, AccountTreeId, Address, L1BatchNumber, MiniblockNumber, StorageKey, + StorageLog, H256, }; use zksync_utils::u32_to_h256; @@ -631,7 +631,7 @@ async fn remove_l1_batches( async fn deduplication_works_as_expected() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, L2ChainId::from(270), &GenesisParams::mock()) + ensure_genesis_state(&mut storage, &GenesisParams::mock()) .await .unwrap(); diff --git a/core/lib/zksync_core/src/reorg_detector/tests.rs b/core/lib/zksync_core/src/reorg_detector/tests.rs index 3e306d134c4..2ef80bf0de6 100644 --- a/core/lib/zksync_core/src/reorg_detector/tests.rs +++ b/core/lib/zksync_core/src/reorg_detector/tests.rs @@ -11,7 +11,7 @@ use tokio::sync::mpsc; use zksync_dal::StorageProcessor; use zksync_types::{ block::{MiniblockHasher, MiniblockHeader}, - L2ChainId, ProtocolVersion, + ProtocolVersion, }; use zksync_web3_decl::jsonrpsee::core::ClientError as RpcError; @@ -175,10 +175,9 @@ async fn normal_reorg_function(snapshot_recovery: bool, with_transient_errors: b .save_protocol_version_with_tx(ProtocolVersion::default()) .await; } else { - let genesis_root_hash = - ensure_genesis_state(&mut storage, L2ChainId::default(), &GenesisParams::mock()) - .await - .unwrap(); + let genesis_root_hash = ensure_genesis_state(&mut storage, &GenesisParams::mock()) + .await + .unwrap(); client.miniblock_hashes.insert( MiniblockNumber(0), MiniblockHasher::legacy_hash(MiniblockNumber(0)), @@ -252,7 +251,7 @@ async fn normal_reorg_function(snapshot_recovery: bool, with_transient_errors: b async fn detector_stops_on_fatal_rpc_error() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, L2ChainId::default(), &GenesisParams::mock()) + ensure_genesis_state(&mut storage, &GenesisParams::mock()) .await .unwrap(); @@ -269,10 +268,9 @@ async fn detector_stops_on_fatal_rpc_error() { async fn reorg_is_detected_on_batch_hash_mismatch() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - let genesis_root_hash = - ensure_genesis_state(&mut storage, L2ChainId::default(), &GenesisParams::mock()) - .await - .unwrap(); + let genesis_root_hash = ensure_genesis_state(&mut storage, &GenesisParams::mock()) + .await + .unwrap(); let mut client = MockMainNodeClient::default(); client.miniblock_hashes.insert( MiniblockNumber(0), @@ -316,10 +314,9 @@ async fn reorg_is_detected_on_miniblock_hash_mismatch() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); let mut client = MockMainNodeClient::default(); - let genesis_root_hash = - ensure_genesis_state(&mut storage, L2ChainId::default(), &GenesisParams::mock()) - .await - .unwrap(); + let genesis_root_hash = ensure_genesis_state(&mut storage, &GenesisParams::mock()) + .await + .unwrap(); client.miniblock_hashes.insert( MiniblockNumber(0), MiniblockHasher::legacy_hash(MiniblockNumber(0)), @@ -480,10 +477,9 @@ async fn stopping_reorg_detector_while_waiting_for_l1_batch() { async fn detector_errors_on_earliest_batch_hash_mismatch() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - let genesis_root_hash = - ensure_genesis_state(&mut storage, L2ChainId::default(), &GenesisParams::mock()) - .await - .unwrap(); + let genesis_root_hash = ensure_genesis_state(&mut storage, &GenesisParams::mock()) + .await + .unwrap(); assert_ne!(genesis_root_hash, H256::zero()); let mut client = MockMainNodeClient::default(); @@ -534,10 +530,9 @@ async fn detector_errors_on_earliest_batch_hash_mismatch_with_snapshot_recovery( async fn reorg_is_detected_without_waiting_for_main_node_to_catch_up() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - let genesis_root_hash = - ensure_genesis_state(&mut storage, L2ChainId::default(), &GenesisParams::mock()) - .await - .unwrap(); + let genesis_root_hash = ensure_genesis_state(&mut storage, &GenesisParams::mock()) + .await + .unwrap(); // Fill in local storage with some data, so that it's ahead of the main node. for number in 1..5 { store_miniblock(&mut storage, number, H256::zero()).await; diff --git a/core/lib/zksync_core/src/state_keeper/io/common/tests.rs b/core/lib/zksync_core/src/state_keeper/io/common/tests.rs index e2f2f01aa39..f1b687f3471 100644 --- a/core/lib/zksync_core/src/state_keeper/io/common/tests.rs +++ b/core/lib/zksync_core/src/state_keeper/io/common/tests.rs @@ -7,6 +7,7 @@ use std::{collections::HashMap, ops}; use futures::FutureExt; use vm_utils::storage::L1BatchParamsProvider; +use zksync_config::GenesisConfig; use zksync_contracts::BaseSystemContractsHashes; use zksync_dal::ConnectionPool; use zksync_types::{ @@ -16,7 +17,7 @@ use zksync_types::{ use super::*; use crate::{ - genesis::{ensure_genesis_state, GenesisConfig, GenesisParams}, + genesis::{ensure_genesis_state, mock_genesis_config, GenesisParams}, utils::testonly::{ create_l1_batch, create_l2_transaction, create_miniblock, execute_l2_transaction, prepare_recovery_snapshot, @@ -37,7 +38,7 @@ fn test_poll_iters() { async fn creating_io_cursor_with_genesis() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, L2ChainId::default(), &GenesisParams::mock()) + ensure_genesis_state(&mut storage, &GenesisParams::mock()) .await .unwrap(); @@ -102,10 +103,9 @@ async fn creating_io_cursor_with_snapshot_recovery() { async fn waiting_for_l1_batch_params_with_genesis() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - let genesis_root_hash = - ensure_genesis_state(&mut storage, L2ChainId::default(), &GenesisParams::mock()) - .await - .unwrap(); + let genesis_root_hash = ensure_genesis_state(&mut storage, &GenesisParams::mock()) + .await + .unwrap(); let provider = L1BatchParamsProvider::new(&mut storage).await.unwrap(); let (hash, timestamp) = provider @@ -190,7 +190,7 @@ async fn waiting_for_l1_batch_params_after_snapshot_recovery() { async fn getting_first_miniblock_in_batch_with_genesis() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, L2ChainId::default(), &GenesisParams::mock()) + ensure_genesis_state(&mut storage, &GenesisParams::mock()) .await .unwrap(); @@ -311,13 +311,13 @@ async fn loading_pending_batch_with_genesis() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); let genesis_params = GenesisParams::mock(); - ensure_genesis_state(&mut storage, L2ChainId::default(), &genesis_params) + ensure_genesis_state(&mut storage, &genesis_params) .await .unwrap(); store_pending_miniblocks( &mut storage, 1..=2, - genesis_params.base_system_contracts.hashes(), + genesis_params.base_system_contracts().hashes(), ) .await; @@ -390,7 +390,7 @@ async fn loading_pending_batch_after_snapshot_recovery() { store_pending_miniblocks( &mut storage, starting_miniblock_number..=starting_miniblock_number + 1, - GenesisParams::mock().base_system_contracts.hashes(), + GenesisParams::mock().base_system_contracts().hashes(), ) .await; @@ -443,8 +443,12 @@ async fn loading_pending_batch_after_snapshot_recovery() { async fn getting_batch_version_with_genesis() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - let mut genesis_params = GenesisConfig::mock(); - genesis_params.protocol_version = ProtocolVersionId::Version5; + let genesis_params = GenesisParams::load_genesis_params(GenesisConfig { + protocol_version: ProtocolVersionId::Version5 as u16, + ..mock_genesis_config() + }) + .unwrap(); + ensure_genesis_state(&mut storage, &genesis_params) .await .unwrap(); @@ -454,7 +458,7 @@ async fn getting_batch_version_with_genesis() { .load_l1_batch_protocol_version(&mut storage, L1BatchNumber(0)) .await .unwrap(); - assert_eq!(version, Some(genesis_params.protocol_version)); + assert_eq!(version, Some(genesis_params.protocol_version())); assert!(provider .load_l1_batch_protocol_version(&mut storage, L1BatchNumber(1)) diff --git a/core/lib/zksync_core/src/state_keeper/mempool_actor.rs b/core/lib/zksync_core/src/state_keeper/mempool_actor.rs index ca6baf564f7..3ebc3421343 100644 --- a/core/lib/zksync_core/src/state_keeper/mempool_actor.rs +++ b/core/lib/zksync_core/src/state_keeper/mempool_actor.rs @@ -161,8 +161,8 @@ async fn get_transaction_nonces( #[cfg(test)] mod tests { use zksync_types::{ - fee::TransactionExecutionMetrics, L2ChainId, MiniblockNumber, PriorityOpId, - ProtocolVersionId, StorageLog, H256, + fee::TransactionExecutionMetrics, MiniblockNumber, PriorityOpId, ProtocolVersionId, + StorageLog, H256, }; use zksync_utils::u256_to_h256; diff --git a/core/lib/zksync_core/src/sync_layer/batch_status_updater/tests.rs b/core/lib/zksync_core/src/sync_layer/batch_status_updater/tests.rs index 22f9341a82d..9a3211f515b 100644 --- a/core/lib/zksync_core/src/sync_layer/batch_status_updater/tests.rs +++ b/core/lib/zksync_core/src/sync_layer/batch_status_updater/tests.rs @@ -6,7 +6,7 @@ use chrono::TimeZone; use test_casing::{test_casing, Product}; use tokio::sync::{watch, Mutex}; use zksync_contracts::BaseSystemContractsHashes; -use zksync_types::{Address, L2ChainId, ProtocolVersionId}; +use zksync_types::{Address, ProtocolVersionId}; use super::*; use crate::{ @@ -163,8 +163,6 @@ fn mock_block_details(number: u32, stage: L1BatchStage) -> api::BlockDetails { l1_gas_price: 1, l2_fair_gas_price: 2, base_system_contracts_hashes: BaseSystemContractsHashes::default(), - commitment: Some(H256::zero()), - rollup_leaf_index: Some(2), }, operator_address: Address::zero(), protocol_version: Some(ProtocolVersionId::default()), diff --git a/core/lib/zksync_core/src/utils/mod.rs b/core/lib/zksync_core/src/utils/mod.rs index 0dde25d5436..9174f02dc92 100644 --- a/core/lib/zksync_core/src/utils/mod.rs +++ b/core/lib/zksync_core/src/utils/mod.rs @@ -165,7 +165,6 @@ pub(crate) async fn pending_protocol_version( #[cfg(test)] mod tests { - use zksync_types::L2ChainId; use super::*; use crate::genesis::{ensure_genesis_state, GenesisParams}; diff --git a/core/lib/zksync_core/src/utils/testonly.rs b/core/lib/zksync_core/src/utils/testonly.rs index 978b342a4b8..6a63334ee91 100644 --- a/core/lib/zksync_core/src/utils/testonly.rs +++ b/core/lib/zksync_core/src/utils/testonly.rs @@ -170,7 +170,7 @@ pub(crate) async fn prepare_recovery_snapshot( // Miniblock and L1 batch are intentionally **not** inserted into the storage. // Store factory deps for the base system contracts. - let contracts = GenesisParams::mock().base_system_contracts; + let contracts = GenesisParams::mock().base_system_contracts().clone(); let protocol_version = storage .protocol_versions_dal() From a73d73e41aee0a0dd443d613effbb5f4fe10b521 Mon Sep 17 00:00:00 2001 From: Danil Date: Fri, 15 Mar 2024 11:46:54 +0100 Subject: [PATCH 19/65] Merge --- core/bin/zksync_server/src/main.rs | 12 ++++---- core/lib/protobuf_config/src/chain.rs | 4 +-- .../lib/zksync_core/src/consensus/testonly.rs | 2 +- core/lib/zksync_core/src/genesis.rs | 30 ++++++++++++++++++- core/lib/zksync_core/src/sync_layer/client.rs | 14 +++++++-- .../lib/zksync_core/src/sync_layer/genesis.rs | 11 ++++--- infrastructure/zk/src/hyperchain_wizard.ts | 16 +++++----- 7 files changed, 64 insertions(+), 25 deletions(-) diff --git a/core/bin/zksync_server/src/main.rs b/core/bin/zksync_server/src/main.rs index bd7b620a099..6b9b36517f8 100644 --- a/core/bin/zksync_server/src/main.rs +++ b/core/bin/zksync_server/src/main.rs @@ -35,6 +35,12 @@ static GLOBAL: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc; #[derive(Debug, Parser)] #[command(author = "Matter Labs", version, about = "zkSync operator node", long_about = None)] struct Cli { + /// Generate genesis block for the first contract deployment using temporary DB. + #[arg(long)] + genesis: bool, + /// Set chain id (temporary will be moved to genesis config) + #[arg(long)] + set_chain_id: bool, /// Rebuild tree. #[arg(long)] rebuild_tree: bool, @@ -53,12 +59,6 @@ struct Cli { /// Path to the yaml with genesis #[arg(long)] genesis_path: Option, - /// Generate genesis block for the first contract deployment using temporary DB. - #[arg(long)] - genesis: bool, - /// Set chain id - #[arg(long)] - set_chain_id: bool, } #[derive(Debug, Clone)] diff --git a/core/lib/protobuf_config/src/chain.rs b/core/lib/protobuf_config/src/chain.rs index 22fdbcd0bb3..0fb01b90927 100644 --- a/core/lib/protobuf_config/src/chain.rs +++ b/core/lib/protobuf_config/src/chain.rs @@ -145,13 +145,13 @@ impl ProtoRepr for proto::StateKeeper { .as_ref() .map(|a| parse_h256(a)) .transpose() - .context("enum_index_migration_chunk_size")?, + .context("bootloader_hash")?, default_aa_hash: self .default_aa_hash .as_ref() .map(|a| parse_h256(a)) .transpose() - .context("enum_index_migration_chunk_size")?, + .context("default_aa_hash")?, }) } diff --git a/core/lib/zksync_core/src/consensus/testonly.rs b/core/lib/zksync_core/src/consensus/testonly.rs index 6b99511d794..dd3288beb80 100644 --- a/core/lib/zksync_core/src/consensus/testonly.rs +++ b/core/lib/zksync_core/src/consensus/testonly.rs @@ -160,7 +160,7 @@ impl MainNodeClient for MockMainNodeClient { )) } - async fn fetch_contracts(&self) -> EnrichedClientResult<(Address, BridgeAddresses)> { + async fn fetch_genesis_contracts(&self) -> EnrichedClientResult<(Address, BridgeAddresses)> { Err(EnrichedClientError::custom( "not implemented", "fetch_contracts", diff --git a/core/lib/zksync_core/src/genesis.rs b/core/lib/zksync_core/src/genesis.rs index a9c752fe4c3..6080b0ee681 100644 --- a/core/lib/zksync_core/src/genesis.rs +++ b/core/lib/zksync_core/src/genesis.rs @@ -101,6 +101,7 @@ impl GenesisParams { let system_contracts = get_system_smart_contracts(); Self::from_genesis_config(config, base_system_contracts, system_contracts) } + #[cfg(test)] pub(crate) fn mock() -> Self { Self { @@ -112,7 +113,34 @@ impl GenesisParams { pub fn protocol_version(&self) -> ProtocolVersionId { // It's impossible to instantiate Genesis params with wrong protocol version - self.config.protocol_version.try_into().unwrap() + self.config.protocol_version.try_into().expect( + "Protocol version must be correctly \ + initialized for genesis", + ) + } +} + +#[cfg(test)] +pub fn mock_genesis_config() -> GenesisConfig { + use zksync_types::L1ChainId; + GenesisConfig { + protocol_version: ProtocolVersionId::latest() as u16, + genesis_root_hash: Default::default(), + rollup_last_leaf_index: 26, + genesis_commitment: Default::default(), + bootloader_hash: Default::default(), + default_aa_hash: Default::default(), + verifier_address: Default::default(), + fee_account: Default::default(), + diamond_proxy: Default::default(), + erc20_bridge: Default::default(), + state_transition_proxy_addr: None, + l1_chain_id: L1ChainId(9), + l2_chain_id: L2ChainId::default(), + recursion_node_level_vk_hash: Default::default(), + recursion_leaf_level_vk_hash: Default::default(), + recursion_circuits_set_vks_hash: Default::default(), + recursion_scheduler_level_vk_hash: Default::default(), } } diff --git a/core/lib/zksync_core/src/sync_layer/client.rs b/core/lib/zksync_core/src/sync_layer/client.rs index 2fe06db584a..b343629e563 100644 --- a/core/lib/zksync_core/src/sync_layer/client.rs +++ b/core/lib/zksync_core/src/sync_layer/client.rs @@ -46,7 +46,12 @@ pub trait MainNodeClient: 'static + Send + Sync + fmt::Debug { async fn fetch_genesis_l1_batch(&self) -> EnrichedClientResult; async fn fetch_l1_chain_id(&self) -> EnrichedClientResult; - async fn fetch_contracts(&self) -> EnrichedClientResult<(Address, BridgeAddresses)>; + async fn fetch_genesis_contracts(&self) -> EnrichedClientResult; +} + +pub struct GenesisContracts { + pub diamond_proxy: Address, + pub bridges: BridgeAddresses, } impl dyn MainNodeClient { @@ -169,7 +174,7 @@ impl MainNodeClient for HttpClient { .map(|l1_chain_id| L1ChainId(l1_chain_id.as_u64())) } - async fn fetch_contracts(&self) -> EnrichedClientResult<(Address, BridgeAddresses)> { + async fn fetch_genesis_contracts(&self) -> EnrichedClientResult { let main_contract = self .get_main_contract() .rpc_context("get_main_contract") @@ -178,6 +183,9 @@ impl MainNodeClient for HttpClient { .get_bridge_contracts() .rpc_context("get bridges") .await?; - Ok((main_contract, bridge_contracts)) + Ok(GenesisContracts { + diamond_proxy: main_contract, + bridges: bridge_contracts, + }) } } diff --git a/core/lib/zksync_core/src/sync_layer/genesis.rs b/core/lib/zksync_core/src/sync_layer/genesis.rs index 8747110e497..2c209c6b049 100644 --- a/core/lib/zksync_core/src/sync_layer/genesis.rs +++ b/core/lib/zksync_core/src/sync_layer/genesis.rs @@ -8,7 +8,7 @@ use zksync_types::{ H256, }; -use super::client::MainNodeClient; +use super::client::{GenesisContracts, MainNodeClient}; use crate::genesis::{ensure_genesis_state, GenesisParams}; pub async fn perform_genesis_if_needed( @@ -50,7 +50,10 @@ async fn create_genesis_params( let protocol_version = genesis_miniblock.protocol_version; let genesis_batch = client.fetch_genesis_l1_batch().await?; let l1_chain_id = client.fetch_l1_chain_id().await?; - let (main_contract, bridge_contracts) = client.fetch_contracts().await?; + let GenesisContracts { + diamond_proxy, + bridges, + } = client.fetch_genesis_contracts().await?; // Load the list of addresses that are known to contain system contracts at any point in time. // Not every of these addresses is guaranteed to be present in the genesis state, but we'll iterate through @@ -111,8 +114,8 @@ async fn create_genesis_params( default_aa_hash: base_system_contracts_hashes.default_aa, verifier_address: first_verifier_address, fee_account: first_validator, - diamond_proxy: main_contract, - erc20_bridge: bridge_contracts.l1_erc20_default_bridge, + diamond_proxy, + erc20_bridge: bridges.l1_erc20_default_bridge, state_transition_proxy_addr: None, l1_chain_id, l2_chain_id: zksync_chain_id, diff --git a/infrastructure/zk/src/hyperchain_wizard.ts b/infrastructure/zk/src/hyperchain_wizard.ts index 3064b94da46..65e3dc69656 100644 --- a/infrastructure/zk/src/hyperchain_wizard.ts +++ b/infrastructure/zk/src/hyperchain_wizard.ts @@ -1,18 +1,18 @@ -import { Command } from 'commander'; +import {Command} from 'commander'; import enquirer from 'enquirer'; -import { BigNumber, ethers, utils } from 'ethers'; +import {BigNumber, ethers, utils} from 'ethers'; import chalk from 'chalk'; -import { announced, init, InitArgs } from './init'; +import {announced, init, InitArgs} from './init'; import * as server from './server'; import * as docker from './docker'; import * as db from './database'; import * as env from './env'; -import { compileConfig } from './config'; +import {compileConfig} from './config'; import * as fs from 'fs'; import fetch from 'node-fetch'; -import { up } from './up'; +import {up} from './up'; import * as Handlebars from 'handlebars'; -import { ProverType, setupProver } from './prover_setup'; +import {ProverType, setupProver} from './prover_setup'; const title = chalk.blueBright; const warning = chalk.yellowBright; @@ -290,7 +290,7 @@ async function setHyperchainMetadata(runObservability: boolean) { feeReceiverAddress = richWallets[3].address; await up(runObservability); - await announced('Ensuring databases are up', db.wait({ server: true, prover: false })); + await announced('Ensuring databases are up', db.wait({server: true, prover: false})); } await initializeTestERC20s(); @@ -775,7 +775,7 @@ async function configDemoHyperchain(cmd: Command) { env.set('demo'); wrapEnvModify('CHAIN_ETH_ZKSYNC_NETWORK', 'Zeek hyperchain'); - wrapEnvModify('CHAIN_ETH_ZKSYNC_NETWORK_ID', '9'); + wrapEnvModify('CHAIN_ETH_ZKSYNC_NETWORK_ID', '1337'); wrapEnvModify('ETH_SENDER_SENDER_PROOF_SENDING_MODE', 'SkipEveryProof'); wrapEnvModify('ETH_SENDER_SENDER_L1_BATCH_MIN_AGE_BEFORE_EXECUTE_SECONDS', '20'); From 7c193c79db9273d39e7a237bcbed83a330780ba5 Mon Sep 17 00:00:00 2001 From: Danil Date: Fri, 15 Mar 2024 13:45:50 +0100 Subject: [PATCH 20/65] Introduce ensure_genesis_state_unchecked Signed-off-by: Danil --- .../src/api_server/execution_sandbox/tests.rs | 6 +- .../src/api_server/tx_sender/tests.rs | 4 +- .../src/api_server/web3/tests/mod.rs | 4 +- .../lib/zksync_core/src/consensus/testonly.rs | 13 +- .../src/consistency_checker/tests/mod.rs | 8 +- core/lib/zksync_core/src/genesis.rs | 118 +++++++++--------- .../src/metadata_calculator/helpers.rs | 10 +- .../src/metadata_calculator/recovery/tests.rs | 4 +- .../src/metadata_calculator/tests.rs | 6 +- .../zksync_core/src/reorg_detector/tests.rs | 39 +++--- .../src/state_keeper/io/common/tests.rs | 17 +-- .../src/state_keeper/mempool_actor.rs | 8 +- .../sync_layer/batch_status_updater/tests.rs | 8 +- core/lib/zksync_core/src/sync_layer/client.rs | 9 +- .../lib/zksync_core/src/sync_layer/genesis.rs | 9 +- core/lib/zksync_core/src/sync_layer/tests.rs | 4 +- core/lib/zksync_core/src/utils/mod.rs | 4 +- infrastructure/zk/src/hyperchain_wizard.ts | 14 +-- infrastructure/zk/src/server.ts | 1 - 19 files changed, 149 insertions(+), 137 deletions(-) diff --git a/core/lib/zksync_core/src/api_server/execution_sandbox/tests.rs b/core/lib/zksync_core/src/api_server/execution_sandbox/tests.rs index f234dc76a2e..7670887582d 100644 --- a/core/lib/zksync_core/src/api_server/execution_sandbox/tests.rs +++ b/core/lib/zksync_core/src/api_server/execution_sandbox/tests.rs @@ -5,7 +5,7 @@ use assert_matches::assert_matches; use super::*; use crate::{ api_server::{execution_sandbox::apply::apply_vm_in_sandbox, tx_sender::ApiContracts}, - genesis::{ensure_genesis_state, GenesisParams}, + genesis::{ensure_genesis_state_unchecked, GenesisParams}, utils::testonly::{create_l2_transaction, create_miniblock, prepare_recovery_snapshot}, }; @@ -13,7 +13,7 @@ use crate::{ async fn creating_block_args() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, &GenesisParams::mock()) + ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) .await .unwrap(); let miniblock = create_miniblock(1); @@ -160,7 +160,7 @@ async fn creating_block_args_after_snapshot_recovery() { async fn instantiating_vm() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, &GenesisParams::mock()) + ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) .await .unwrap(); diff --git a/core/lib/zksync_core/src/api_server/tx_sender/tests.rs b/core/lib/zksync_core/src/api_server/tx_sender/tests.rs index 532b173f0eb..0eebdd5e11f 100644 --- a/core/lib/zksync_core/src/api_server/tx_sender/tests.rs +++ b/core/lib/zksync_core/src/api_server/tx_sender/tests.rs @@ -5,7 +5,7 @@ use zksync_types::{get_nonce_key, L1BatchNumber, StorageLog}; use super::*; use crate::{ api_server::execution_sandbox::{testonly::MockTransactionExecutor, VmConcurrencyBarrier}, - genesis::{ensure_genesis_state, GenesisParams}, + genesis::{ensure_genesis_state_unchecked, GenesisParams}, utils::testonly::{create_miniblock, prepare_recovery_snapshot, MockBatchFeeParamsProvider}, }; @@ -41,7 +41,7 @@ async fn getting_nonce_for_account() { let test_address = Address::repeat_byte(1); let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, &GenesisParams::mock()) + ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) .await .unwrap(); // Manually insert a nonce for the address. diff --git a/core/lib/zksync_core/src/api_server/web3/tests/mod.rs b/core/lib/zksync_core/src/api_server/web3/tests/mod.rs index d9dc8e48dfd..6e77124ac77 100644 --- a/core/lib/zksync_core/src/api_server/web3/tests/mod.rs +++ b/core/lib/zksync_core/src/api_server/web3/tests/mod.rs @@ -47,7 +47,7 @@ use crate::{ execution_sandbox::testonly::MockTransactionExecutor, tx_sender::tests::create_test_tx_sender, }, - genesis::{ensure_genesis_state, mock_genesis_config, GenesisParams}, + genesis::{ensure_genesis_state_unchecked, mock_genesis_config, GenesisParams}, utils::testonly::{ create_l1_batch, create_l1_batch_metadata, create_l2_transaction, create_miniblock, l1_batch_metadata_to_commitment_artifacts, prepare_recovery_snapshot, @@ -246,7 +246,7 @@ impl StorageInitialization { }) .unwrap(); if storage.blocks_dal().is_genesis_needed().await? { - ensure_genesis_state(storage, ¶ms).await?; + ensure_genesis_state_unchecked(storage, ¶ms).await?; } } Self::Recovery { logs, factory_deps } => { diff --git a/core/lib/zksync_core/src/consensus/testonly.rs b/core/lib/zksync_core/src/consensus/testonly.rs index dd3288beb80..42494a219c1 100644 --- a/core/lib/zksync_core/src/consensus/testonly.rs +++ b/core/lib/zksync_core/src/consensus/testonly.rs @@ -9,10 +9,8 @@ use zksync_consensus_roles::validator; use zksync_contracts::BaseSystemContractsHashes; use zksync_dal::ConnectionPool; use zksync_types::{ - api, - api::{BridgeAddresses, L1BatchDetails}, - snapshots::SnapshotRecoveryStatus, - Address, L1BatchNumber, L1ChainId, L2ChainId, MiniblockNumber, ProtocolVersionId, H256, + api, api::L1BatchDetails, snapshots::SnapshotRecoveryStatus, Address, L1BatchNumber, L1ChainId, + L2ChainId, MiniblockNumber, ProtocolVersionId, H256, }; use zksync_web3_decl::{ error::{EnrichedClientError, EnrichedClientResult}, @@ -22,13 +20,14 @@ use zksync_web3_decl::{ use crate::{ api_server::web3::{state::InternalApiConfig, tests::spawn_http_server}, consensus::{fetcher::P2PConfig, Fetcher, Store}, - genesis::{ensure_genesis_state, GenesisParams}, + genesis::{ensure_genesis_state_unchecked, GenesisParams}, state_keeper::{ io::common::IoCursor, seal_criteria::NoopSealer, tests::MockBatchExecutor, MiniblockSealer, ZkSyncStateKeeper, }, sync_layer::{ fetcher::FetchedTransaction, + genesis::GenesisContracts, sync_action::{ActionQueue, ActionQueueSender, SyncAction}, ExternalIO, MainNodeClient, SyncState, }, @@ -160,7 +159,7 @@ impl MainNodeClient for MockMainNodeClient { )) } - async fn fetch_genesis_contracts(&self) -> EnrichedClientResult<(Address, BridgeAddresses)> { + async fn fetch_genesis_contracts(&self) -> EnrichedClientResult { Err(EnrichedClientError::custom( "not implemented", "fetch_contracts", @@ -203,7 +202,7 @@ pub(super) async fn new_store(from_snapshot: bool) -> Store { prepare_recovery_snapshot(&mut storage, L1BatchNumber(23), MiniblockNumber(42), &[]) .await; } else { - ensure_genesis_state(&mut storage, &GenesisParams::mock()) + ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) .await .unwrap(); } diff --git a/core/lib/zksync_core/src/consistency_checker/tests/mod.rs b/core/lib/zksync_core/src/consistency_checker/tests/mod.rs index 907b408793a..7d5373a1015 100644 --- a/core/lib/zksync_core/src/consistency_checker/tests/mod.rs +++ b/core/lib/zksync_core/src/consistency_checker/tests/mod.rs @@ -17,7 +17,7 @@ use zksync_types::{ use super::*; use crate::{ - genesis::{ensure_genesis_state, mock_genesis_config, GenesisParams}, + genesis::{ensure_genesis_state_unchecked, mock_genesis_config, GenesisParams}, utils::testonly::{ create_l1_batch, create_l1_batch_metadata, l1_batch_metadata_to_commitment_artifacts, }, @@ -364,7 +364,7 @@ async fn normal_checker_function( let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, &GenesisParams::mock()) + ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) .await .unwrap(); @@ -439,7 +439,7 @@ async fn checker_processes_pre_boojum_batches( ..mock_genesis_config() }) .unwrap(); - ensure_genesis_state(&mut storage, &genesis_params) + ensure_genesis_state_unchecked(&mut storage, &genesis_params) .await .unwrap(); storage @@ -687,7 +687,7 @@ async fn checker_detects_incorrect_tx_data(kind: IncorrectDataKind, snapshot_rec .save_protocol_version_with_tx(ProtocolVersion::default()) .await; } else { - ensure_genesis_state(&mut storage, &GenesisParams::mock()) + ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) .await .unwrap(); } diff --git a/core/lib/zksync_core/src/genesis.rs b/core/lib/zksync_core/src/genesis.rs index 6080b0ee681..78dd8e26242 100644 --- a/core/lib/zksync_core/src/genesis.rs +++ b/core/lib/zksync_core/src/genesis.rs @@ -123,68 +123,42 @@ impl GenesisParams { #[cfg(test)] pub fn mock_genesis_config() -> GenesisConfig { use zksync_types::L1ChainId; - GenesisConfig { - protocol_version: ProtocolVersionId::latest() as u16, - genesis_root_hash: Default::default(), - rollup_last_leaf_index: 26, - genesis_commitment: Default::default(), - bootloader_hash: Default::default(), - default_aa_hash: Default::default(), - verifier_address: Default::default(), - fee_account: Default::default(), - diamond_proxy: Default::default(), - erc20_bridge: Default::default(), - state_transition_proxy_addr: None, - l1_chain_id: L1ChainId(9), - l2_chain_id: L2ChainId::default(), - recursion_node_level_vk_hash: Default::default(), - recursion_leaf_level_vk_hash: Default::default(), - recursion_circuits_set_vks_hash: Default::default(), - recursion_scheduler_level_vk_hash: Default::default(), - } -} -#[cfg(test)] -pub fn mock_genesis_config() -> GenesisConfig { - use zksync_types::L1ChainId; + let base_system_contracts_hashes = BaseSystemContracts::load_from_disk().hashes(); + let first_l1_verifier_config = L1VerifierConfig::default(); + GenesisConfig { protocol_version: ProtocolVersionId::latest() as u16, genesis_root_hash: Default::default(), rollup_last_leaf_index: 26, genesis_commitment: Default::default(), - bootloader_hash: Default::default(), - default_aa_hash: Default::default(), + bootloader_hash: base_system_contracts_hashes.bootloader, + default_aa_hash: base_system_contracts_hashes.default_aa, verifier_address: Default::default(), - fee_account: Default::default(), - diamond_proxy: Default::default(), - erc20_bridge: Default::default(), + fee_account: Address::repeat_byte(0x01), + diamond_proxy: Address::repeat_byte(0x01), + erc20_bridge: Address::repeat_byte(0x02), state_transition_proxy_addr: None, l1_chain_id: L1ChainId(9), l2_chain_id: L2ChainId::default(), - recursion_node_level_vk_hash: Default::default(), - recursion_leaf_level_vk_hash: Default::default(), - recursion_circuits_set_vks_hash: Default::default(), - recursion_scheduler_level_vk_hash: Default::default(), + recursion_node_level_vk_hash: first_l1_verifier_config.params.recursion_node_level_vk_hash, + recursion_leaf_level_vk_hash: first_l1_verifier_config.params.recursion_leaf_level_vk_hash, + recursion_circuits_set_vks_hash: first_l1_verifier_config + .params + .recursion_circuits_set_vks_hash, + recursion_scheduler_level_vk_hash: first_l1_verifier_config + .recursion_scheduler_level_vk_hash, } } -pub async fn ensure_genesis_state( - storage: &mut StorageProcessor<'_>, +// This function is dangerous, +// it doesn't enforce transactions and doesn't verify genesis correctness +// Please, always use ensure_genesis_state instead +pub async fn ensure_genesis_state_unchecked( + transaction: &mut StorageProcessor<'_>, genesis_params: &GenesisParams, -) -> Result { - let mut transaction = storage.start_transaction().await?; - +) -> Result<(H256, H256, u64), GenesisError> { // return if genesis block was already processed - if !transaction.blocks_dal().is_genesis_needed().await? { - tracing::debug!("genesis is not needed!"); - return Ok(transaction - .blocks_dal() - .get_l1_batch_state_root(L1BatchNumber(0)) - .await - .context("failed fetching state root hash for genesis L1 batch")? - .context("genesis L1 batch hash is empty")?); - } - tracing::info!("running regenesis"); let verifier_config = L1VerifierConfig { params: VerifierParams { @@ -196,7 +170,7 @@ pub async fn ensure_genesis_state( }; create_genesis_l1_batch( - &mut transaction, + transaction, genesis_params.config.fee_account, genesis_params.config.l2_chain_id, genesis_params.protocol_version(), @@ -208,7 +182,7 @@ pub async fn ensure_genesis_state( .await?; tracing::info!("chain_schema_genesis is complete"); - let storage_logs = L1BatchWithLogs::new(&mut transaction, L1BatchNumber(0)).await; + let storage_logs = L1BatchWithLogs::new(transaction, L1BatchNumber(0)).await; let storage_logs = storage_logs .context("genesis L1 batch disappeared from Postgres")? .storage_logs; @@ -229,19 +203,43 @@ pub async fn ensure_genesis_state( let block_commitment = L1BatchCommitment::new(commitment_input); save_genesis_l1_batch_metadata( - &mut transaction, + transaction, block_commitment.clone(), genesis_root_hash, rollup_last_leaf_index, ) .await?; + Ok(( + genesis_root_hash, + block_commitment.hash().commitment, + rollup_last_leaf_index, + )) +} + +pub async fn ensure_genesis_state( + storage: &mut StorageProcessor<'_>, + genesis_params: &GenesisParams, +) -> Result { + let mut transaction = storage.start_transaction().await?; + + if !transaction.blocks_dal().is_genesis_needed().await? { + tracing::debug!("genesis is not needed!"); + return Ok(transaction + .blocks_dal() + .get_l1_batch_state_root(L1BatchNumber(0)) + .await + .context("failed fetching state root hash for genesis L1 batch")? + .context("genesis L1 batch hash is empty")?); + } + let (genesis_root_hash, commitment, rollup_last_leaf_index) = + ensure_genesis_state_unchecked(&mut transaction, genesis_params).await?; if genesis_params.config.genesis_root_hash != genesis_root_hash { return Err(GenesisError::RootHash(genesis_root_hash)); } - if genesis_params.config.genesis_commitment != block_commitment.hash().commitment { - return Err(GenesisError::Commitment(block_commitment.hash().commitment)); + if genesis_params.config.genesis_commitment != commitment { + return Err(GenesisError::Commitment(commitment)); } if genesis_params.config.rollup_last_leaf_index != rollup_last_leaf_index { @@ -577,7 +575,9 @@ mod tests { let params = GenesisParams::mock(); - ensure_genesis_state(&mut conn, ¶ms).await.unwrap(); + ensure_genesis_state_unchecked(&mut conn, ¶ms) + .await + .unwrap(); assert!(!conn.blocks_dal().is_genesis_needed().await.unwrap()); let metadata = conn @@ -589,7 +589,9 @@ mod tests { assert_ne!(root_hash, H256::zero()); // Check that `ensure_genesis_state()` doesn't panic on repeated runs. - ensure_genesis_state(&mut conn, ¶ms).await.unwrap(); + ensure_genesis_state_unchecked(&mut conn, ¶ms) + .await + .unwrap(); } #[tokio::test] @@ -603,7 +605,9 @@ mod tests { ..mock_genesis_config() }) .unwrap(); - ensure_genesis_state(&mut conn, ¶ms).await.unwrap(); + ensure_genesis_state_unchecked(&mut conn, ¶ms) + .await + .unwrap(); assert!(!conn.blocks_dal().is_genesis_needed().await.unwrap()); let metadata = conn @@ -624,7 +628,9 @@ mod tests { }) .unwrap(); - ensure_genesis_state(&mut conn, ¶ms).await.unwrap(); + ensure_genesis_state_unchecked(&mut conn, ¶ms) + .await + .unwrap(); assert!(!conn.blocks_dal().is_genesis_needed().await.unwrap()); } } diff --git a/core/lib/zksync_core/src/metadata_calculator/helpers.rs b/core/lib/zksync_core/src/metadata_calculator/helpers.rs index 180aa3644aa..f55010fd209 100644 --- a/core/lib/zksync_core/src/metadata_calculator/helpers.rs +++ b/core/lib/zksync_core/src/metadata_calculator/helpers.rs @@ -484,7 +484,7 @@ mod tests { use super::*; use crate::{ - genesis::{ensure_genesis_state, GenesisParams}, + genesis::{ensure_genesis_state_unchecked, GenesisParams}, metadata_calculator::tests::{extend_db_state, gen_storage_logs, reset_db_state}, }; @@ -561,7 +561,7 @@ mod tests { #[tokio::test] async fn loaded_logs_equivalence_basics() { let pool = ConnectionPool::test_pool().await; - ensure_genesis_state( + ensure_genesis_state_unchecked( &mut pool.access_storage().await.unwrap(), &GenesisParams::mock(), ) @@ -586,7 +586,7 @@ mod tests { async fn loaded_logs_equivalence_with_zero_no_op_logs() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, &GenesisParams::mock()) + ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) .await .unwrap(); @@ -677,7 +677,7 @@ mod tests { async fn loaded_logs_equivalence_with_non_zero_no_op_logs() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, &GenesisParams::mock()) + ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) .await .unwrap(); @@ -724,7 +724,7 @@ mod tests { async fn loaded_logs_equivalence_with_protective_reads() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, &GenesisParams::mock()) + ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) .await .unwrap(); diff --git a/core/lib/zksync_core/src/metadata_calculator/recovery/tests.rs b/core/lib/zksync_core/src/metadata_calculator/recovery/tests.rs index eac72bcb100..bd5fee39d07 100644 --- a/core/lib/zksync_core/src/metadata_calculator/recovery/tests.rs +++ b/core/lib/zksync_core/src/metadata_calculator/recovery/tests.rs @@ -16,7 +16,7 @@ use zksync_types::{L1BatchNumber, ProtocolVersionId, StorageLog}; use super::*; use crate::{ - genesis::{ensure_genesis_state, GenesisParams}, + genesis::{ensure_genesis_state_unchecked, GenesisParams}, metadata_calculator::{ helpers::create_db, tests::{ @@ -97,7 +97,7 @@ async fn prepare_recovery_snapshot_with_genesis( temp_dir: &TempDir, ) -> SnapshotRecoveryStatus { let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, &GenesisParams::mock()) + ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) .await .unwrap(); let mut logs = gen_storage_logs(100..300, 1).pop().unwrap(); diff --git a/core/lib/zksync_core/src/metadata_calculator/tests.rs b/core/lib/zksync_core/src/metadata_calculator/tests.rs index 608e3561151..ce64f6155cd 100644 --- a/core/lib/zksync_core/src/metadata_calculator/tests.rs +++ b/core/lib/zksync_core/src/metadata_calculator/tests.rs @@ -23,7 +23,7 @@ use zksync_utils::u32_to_h256; use super::{GenericAsyncTree, L1BatchWithLogs, MetadataCalculator, MetadataCalculatorConfig}; use crate::{ - genesis::{ensure_genesis_state, GenesisParams}, + genesis::{ensure_genesis_state_unchecked, GenesisParams}, utils::testonly::{create_l1_batch, create_miniblock}, }; @@ -400,7 +400,7 @@ async fn setup_calculator_with_options( let mut storage = pool.access_storage().await.unwrap(); if storage.blocks_dal().is_genesis_needed().await.unwrap() { - ensure_genesis_state(&mut storage, &GenesisParams::mock()) + ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) .await .unwrap(); } @@ -631,7 +631,7 @@ async fn remove_l1_batches( async fn deduplication_works_as_expected() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, &GenesisParams::mock()) + ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) .await .unwrap(); diff --git a/core/lib/zksync_core/src/reorg_detector/tests.rs b/core/lib/zksync_core/src/reorg_detector/tests.rs index 2ef80bf0de6..c646602db3c 100644 --- a/core/lib/zksync_core/src/reorg_detector/tests.rs +++ b/core/lib/zksync_core/src/reorg_detector/tests.rs @@ -17,7 +17,7 @@ use zksync_web3_decl::jsonrpsee::core::ClientError as RpcError; use super::*; use crate::{ - genesis::{ensure_genesis_state, GenesisParams}, + genesis::{ensure_genesis_state_unchecked, GenesisParams}, utils::testonly::{create_l1_batch, create_miniblock}, }; @@ -175,9 +175,10 @@ async fn normal_reorg_function(snapshot_recovery: bool, with_transient_errors: b .save_protocol_version_with_tx(ProtocolVersion::default()) .await; } else { - let genesis_root_hash = ensure_genesis_state(&mut storage, &GenesisParams::mock()) - .await - .unwrap(); + let (genesis_root_hash, ..) = + ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) + .await + .unwrap(); client.miniblock_hashes.insert( MiniblockNumber(0), MiniblockHasher::legacy_hash(MiniblockNumber(0)), @@ -251,7 +252,7 @@ async fn normal_reorg_function(snapshot_recovery: bool, with_transient_errors: b async fn detector_stops_on_fatal_rpc_error() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, &GenesisParams::mock()) + ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) .await .unwrap(); @@ -268,9 +269,10 @@ async fn detector_stops_on_fatal_rpc_error() { async fn reorg_is_detected_on_batch_hash_mismatch() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - let genesis_root_hash = ensure_genesis_state(&mut storage, &GenesisParams::mock()) - .await - .unwrap(); + let (genesis_root_hash, ..) = + ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) + .await + .unwrap(); let mut client = MockMainNodeClient::default(); client.miniblock_hashes.insert( MiniblockNumber(0), @@ -314,9 +316,10 @@ async fn reorg_is_detected_on_miniblock_hash_mismatch() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); let mut client = MockMainNodeClient::default(); - let genesis_root_hash = ensure_genesis_state(&mut storage, &GenesisParams::mock()) - .await - .unwrap(); + let (genesis_root_hash, ..) = + ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) + .await + .unwrap(); client.miniblock_hashes.insert( MiniblockNumber(0), MiniblockHasher::legacy_hash(MiniblockNumber(0)), @@ -477,9 +480,10 @@ async fn stopping_reorg_detector_while_waiting_for_l1_batch() { async fn detector_errors_on_earliest_batch_hash_mismatch() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - let genesis_root_hash = ensure_genesis_state(&mut storage, &GenesisParams::mock()) - .await - .unwrap(); + let (genesis_root_hash, ..) = + ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) + .await + .unwrap(); assert_ne!(genesis_root_hash, H256::zero()); let mut client = MockMainNodeClient::default(); @@ -530,9 +534,10 @@ async fn detector_errors_on_earliest_batch_hash_mismatch_with_snapshot_recovery( async fn reorg_is_detected_without_waiting_for_main_node_to_catch_up() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - let genesis_root_hash = ensure_genesis_state(&mut storage, &GenesisParams::mock()) - .await - .unwrap(); + let (genesis_root_hash, ..) = + ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) + .await + .unwrap(); // Fill in local storage with some data, so that it's ahead of the main node. for number in 1..5 { store_miniblock(&mut storage, number, H256::zero()).await; diff --git a/core/lib/zksync_core/src/state_keeper/io/common/tests.rs b/core/lib/zksync_core/src/state_keeper/io/common/tests.rs index f1b687f3471..0121ff848f0 100644 --- a/core/lib/zksync_core/src/state_keeper/io/common/tests.rs +++ b/core/lib/zksync_core/src/state_keeper/io/common/tests.rs @@ -17,7 +17,7 @@ use zksync_types::{ use super::*; use crate::{ - genesis::{ensure_genesis_state, mock_genesis_config, GenesisParams}, + genesis::{ensure_genesis_state_unchecked, mock_genesis_config, GenesisParams}, utils::testonly::{ create_l1_batch, create_l2_transaction, create_miniblock, execute_l2_transaction, prepare_recovery_snapshot, @@ -38,7 +38,7 @@ fn test_poll_iters() { async fn creating_io_cursor_with_genesis() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, &GenesisParams::mock()) + ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) .await .unwrap(); @@ -103,9 +103,10 @@ async fn creating_io_cursor_with_snapshot_recovery() { async fn waiting_for_l1_batch_params_with_genesis() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - let genesis_root_hash = ensure_genesis_state(&mut storage, &GenesisParams::mock()) - .await - .unwrap(); + let (genesis_root_hash, ..) = + ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) + .await + .unwrap(); let provider = L1BatchParamsProvider::new(&mut storage).await.unwrap(); let (hash, timestamp) = provider @@ -190,7 +191,7 @@ async fn waiting_for_l1_batch_params_after_snapshot_recovery() { async fn getting_first_miniblock_in_batch_with_genesis() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, &GenesisParams::mock()) + ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) .await .unwrap(); @@ -311,7 +312,7 @@ async fn loading_pending_batch_with_genesis() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); let genesis_params = GenesisParams::mock(); - ensure_genesis_state(&mut storage, &genesis_params) + ensure_genesis_state_unchecked(&mut storage, &genesis_params) .await .unwrap(); store_pending_miniblocks( @@ -449,7 +450,7 @@ async fn getting_batch_version_with_genesis() { }) .unwrap(); - ensure_genesis_state(&mut storage, &genesis_params) + ensure_genesis_state_unchecked(&mut storage, &genesis_params) .await .unwrap(); diff --git a/core/lib/zksync_core/src/state_keeper/mempool_actor.rs b/core/lib/zksync_core/src/state_keeper/mempool_actor.rs index 3ebc3421343..890e94cbc9d 100644 --- a/core/lib/zksync_core/src/state_keeper/mempool_actor.rs +++ b/core/lib/zksync_core/src/state_keeper/mempool_actor.rs @@ -168,7 +168,7 @@ mod tests { use super::*; use crate::{ - genesis::{ensure_genesis_state, GenesisParams}, + genesis::{ensure_genesis_state_unchecked, GenesisParams}, utils::testonly::{create_l2_transaction, MockBatchFeeParamsProvider}, }; @@ -219,7 +219,7 @@ mod tests { async fn syncing_mempool_basics() { let pool = ConnectionPool::constrained_test_pool(1).await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, &GenesisParams::mock()) + ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) .await .unwrap(); drop(storage); @@ -276,7 +276,7 @@ mod tests { async fn ignoring_transaction_with_insufficient_fee() { let pool = ConnectionPool::constrained_test_pool(1).await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, &GenesisParams::mock()) + ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) .await .unwrap(); drop(storage); @@ -316,7 +316,7 @@ mod tests { async fn ignoring_transaction_with_old_nonce() { let pool = ConnectionPool::constrained_test_pool(1).await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, &GenesisParams::mock()) + ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) .await .unwrap(); drop(storage); diff --git a/core/lib/zksync_core/src/sync_layer/batch_status_updater/tests.rs b/core/lib/zksync_core/src/sync_layer/batch_status_updater/tests.rs index 9a3211f515b..3bd02297137 100644 --- a/core/lib/zksync_core/src/sync_layer/batch_status_updater/tests.rs +++ b/core/lib/zksync_core/src/sync_layer/batch_status_updater/tests.rs @@ -10,7 +10,7 @@ use zksync_types::{Address, ProtocolVersionId}; use super::*; use crate::{ - genesis::{ensure_genesis_state, GenesisParams}, + genesis::{ensure_genesis_state_unchecked, GenesisParams}, sync_layer::metrics::L1BatchStage, utils::testonly::{create_l1_batch, create_miniblock, prepare_recovery_snapshot}, }; @@ -226,7 +226,7 @@ fn mock_updater( async fn updater_cursor_for_storage_with_genesis_block() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, &GenesisParams::mock()) + ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) .await .unwrap(); for number in [1, 2] { @@ -278,7 +278,7 @@ async fn normal_updater_operation(snapshot_recovery: bool, async_batches: bool) prepare_recovery_snapshot(&mut storage, L1BatchNumber(23), MiniblockNumber(42), &[]).await; L1BatchNumber(24) } else { - ensure_genesis_state(&mut storage, &GenesisParams::mock()) + ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) .await .unwrap(); L1BatchNumber(1) @@ -350,7 +350,7 @@ async fn updater_with_gradual_main_node_updates(snapshot_recovery: bool) { prepare_recovery_snapshot(&mut storage, L1BatchNumber(23), MiniblockNumber(42), &[]).await; L1BatchNumber(24) } else { - ensure_genesis_state(&mut storage, &GenesisParams::mock()) + ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) .await .unwrap(); L1BatchNumber(1) diff --git a/core/lib/zksync_core/src/sync_layer/client.rs b/core/lib/zksync_core/src/sync_layer/client.rs index b343629e563..8bfeffa68a2 100644 --- a/core/lib/zksync_core/src/sync_layer/client.rs +++ b/core/lib/zksync_core/src/sync_layer/client.rs @@ -5,7 +5,7 @@ use std::fmt; use async_trait::async_trait; use zksync_system_constants::ACCOUNT_CODE_STORAGE_ADDRESS; use zksync_types::{ - api::{self, en, BridgeAddresses, L1BatchDetails}, + api::{self, en, L1BatchDetails}, get_code_key, Address, L1BatchNumber, L1ChainId, MiniblockNumber, ProtocolVersionId, H256, U64, }; use zksync_web3_decl::{ @@ -14,6 +14,8 @@ use zksync_web3_decl::{ namespaces::{EnNamespaceClient, EthNamespaceClient, ZksNamespaceClient}, }; +use crate::sync_layer::genesis::GenesisContracts; + /// Client abstracting connection to the main node. #[async_trait] pub trait MainNodeClient: 'static + Send + Sync + fmt::Debug { @@ -49,11 +51,6 @@ pub trait MainNodeClient: 'static + Send + Sync + fmt::Debug { async fn fetch_genesis_contracts(&self) -> EnrichedClientResult; } -pub struct GenesisContracts { - pub diamond_proxy: Address, - pub bridges: BridgeAddresses, -} - impl dyn MainNodeClient { /// Creates a client based on JSON-RPC. pub fn json_rpc(url: &str) -> anyhow::Result { diff --git a/core/lib/zksync_core/src/sync_layer/genesis.rs b/core/lib/zksync_core/src/sync_layer/genesis.rs index 2c209c6b049..c05dc1c9fe6 100644 --- a/core/lib/zksync_core/src/sync_layer/genesis.rs +++ b/core/lib/zksync_core/src/sync_layer/genesis.rs @@ -3,14 +3,19 @@ use zksync_config::GenesisConfig; use zksync_contracts::{BaseSystemContracts, BaseSystemContractsHashes, SystemContractCode}; use zksync_dal::StorageProcessor; use zksync_types::{ - block::DeployedContract, protocol_version::L1VerifierConfig, + api::BridgeAddresses, block::DeployedContract, protocol_version::L1VerifierConfig, system_contracts::get_system_smart_contracts, AccountTreeId, Address, L1BatchNumber, L2ChainId, H256, }; -use super::client::{GenesisContracts, MainNodeClient}; +use super::client::MainNodeClient; use crate::genesis::{ensure_genesis_state, GenesisParams}; +pub struct GenesisContracts { + pub diamond_proxy: Address, + pub bridges: BridgeAddresses, +} + pub async fn perform_genesis_if_needed( storage: &mut StorageProcessor<'_>, zksync_chain_id: L2ChainId, diff --git a/core/lib/zksync_core/src/sync_layer/tests.rs b/core/lib/zksync_core/src/sync_layer/tests.rs index 11c34a8c847..7511d571e8e 100644 --- a/core/lib/zksync_core/src/sync_layer/tests.rs +++ b/core/lib/zksync_core/src/sync_layer/tests.rs @@ -21,7 +21,7 @@ use zksync_types::{ use super::{fetcher::FetchedTransaction, sync_action::SyncAction, *}; use crate::{ consensus::testonly::MockMainNodeClient, - genesis::{ensure_genesis_state, GenesisParams}, + genesis::{ensure_genesis_state_unchecked, GenesisParams}, state_keeper::{ seal_criteria::NoopSealer, tests::TestBatchExecutorBuilder, MiniblockSealer, ZkSyncStateKeeper, @@ -127,7 +127,7 @@ impl StateKeeperHandles { async fn ensure_genesis(storage: &mut StorageProcessor<'_>) { if storage.blocks_dal().is_genesis_needed().await.unwrap() { - ensure_genesis_state(storage, &GenesisParams::mock()) + ensure_genesis_state_unchecked(storage, &GenesisParams::mock()) .await .unwrap(); } diff --git a/core/lib/zksync_core/src/utils/mod.rs b/core/lib/zksync_core/src/utils/mod.rs index 9174f02dc92..57faf0e743a 100644 --- a/core/lib/zksync_core/src/utils/mod.rs +++ b/core/lib/zksync_core/src/utils/mod.rs @@ -167,7 +167,7 @@ pub(crate) async fn pending_protocol_version( mod tests { use super::*; - use crate::genesis::{ensure_genesis_state, GenesisParams}; + use crate::genesis::{ensure_genesis_state_unchecked, GenesisParams}; #[tokio::test] async fn test_binary_search() { @@ -187,7 +187,7 @@ mod tests { tokio::spawn(async move { tokio::time::sleep(Duration::from_millis(25)).await; let mut storage = pool_copy.access_storage().await.unwrap(); - ensure_genesis_state(&mut storage, &GenesisParams::mock()) + ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) .await .unwrap(); }); diff --git a/infrastructure/zk/src/hyperchain_wizard.ts b/infrastructure/zk/src/hyperchain_wizard.ts index 65e3dc69656..41fc7b7e116 100644 --- a/infrastructure/zk/src/hyperchain_wizard.ts +++ b/infrastructure/zk/src/hyperchain_wizard.ts @@ -1,18 +1,18 @@ -import {Command} from 'commander'; +import { Command } from 'commander'; import enquirer from 'enquirer'; -import {BigNumber, ethers, utils} from 'ethers'; +import { BigNumber, ethers, utils } from 'ethers'; import chalk from 'chalk'; -import {announced, init, InitArgs} from './init'; +import { announced, init, InitArgs } from './init'; import * as server from './server'; import * as docker from './docker'; import * as db from './database'; import * as env from './env'; -import {compileConfig} from './config'; +import { compileConfig } from './config'; import * as fs from 'fs'; import fetch from 'node-fetch'; -import {up} from './up'; +import { up } from './up'; import * as Handlebars from 'handlebars'; -import {ProverType, setupProver} from './prover_setup'; +import { ProverType, setupProver } from './prover_setup'; const title = chalk.blueBright; const warning = chalk.yellowBright; @@ -290,7 +290,7 @@ async function setHyperchainMetadata(runObservability: boolean) { feeReceiverAddress = richWallets[3].address; await up(runObservability); - await announced('Ensuring databases are up', db.wait({server: true, prover: false})); + await announced('Ensuring databases are up', db.wait({ server: true, prover: false })); } await initializeTestERC20s(); diff --git a/infrastructure/zk/src/server.ts b/infrastructure/zk/src/server.ts index 02889bd9ea4..859add550f5 100644 --- a/infrastructure/zk/src/server.ts +++ b/infrastructure/zk/src/server.ts @@ -1,6 +1,5 @@ import { Command } from 'commander'; import * as utils from './utils'; -import * as env from './env'; import { clean } from './clean'; import fs from 'fs'; import { unloadInit } from './env'; From ed785b6fb002416e1fcac8407f1cb71873bd7f09 Mon Sep 17 00:00:00 2001 From: Danil Date: Fri, 15 Mar 2024 16:45:28 +0100 Subject: [PATCH 21/65] Remove contracts from genesis Signed-off-by: Danil --- core/bin/zksync_server/src/main.rs | 29 ++++++++++++------- core/lib/config/src/configs/genesis.rs | 4 --- core/lib/config/src/testonly.rs | 4 --- core/lib/env_config/src/genesis.rs | 4 --- .../lib/zksync_core/src/consensus/testonly.rs | 8 ----- core/lib/zksync_core/src/genesis.rs | 23 ++++++++------- core/lib/zksync_core/src/lib.rs | 14 --------- .../batch_executor/tests/tester.rs | 1 - .../src/state_keeper/io/tests/tester.rs | 1 - core/lib/zksync_core/src/sync_layer/client.rs | 18 ------------ .../lib/zksync_core/src/sync_layer/genesis.rs | 19 ++---------- 11 files changed, 33 insertions(+), 92 deletions(-) diff --git a/core/bin/zksync_server/src/main.rs b/core/bin/zksync_server/src/main.rs index 6b9b36517f8..36d6ed6e52d 100644 --- a/core/bin/zksync_server/src/main.rs +++ b/core/bin/zksync_server/src/main.rs @@ -18,7 +18,7 @@ use zksync_config::{ GasAdjusterConfig, GenesisConfig, ObjectStoreConfig, PostgresConfig, }; use zksync_core::{ - genesis_init, initialize_components, is_genesis_needed, setup_sigint_handler, + genesis, genesis_init, initialize_components, is_genesis_needed, setup_sigint_handler, temp_config_store::{decode_yaml, Secrets, TempConfigStore}, Component, Components, }; @@ -159,20 +159,29 @@ async fn main() -> anyhow::Result<()> { if opt.genesis || is_genesis_needed(&postgres_config).await { let genesis = GenesisConfig::from_env().context("Genesis config")?; - let eth_client = ETHClientConfig::from_env().context("EthClientConfig")?; - genesis_init( - genesis, - &postgres_config, - ð_client.web3_url, - opt.set_chain_id, - ) - .await - .context("genesis_init")?; + genesis_init(genesis, &postgres_config) + .await + .context("genesis_init")?; if opt.genesis { return Ok(()); } } + if opt.set_chain_id { + let eth_client = ETHClientConfig::from_env().context("EthClientConfig")?; + let contracts = ContractsConfig::from_env().context("ContractsConfig")?; + if let Some(state_transition_proxy_addr) = contracts.state_transition_proxy_addr { + genesis::save_set_chain_id_tx( + ð_client.web3_url, + contracts.diamond_proxy_addr, + state_transition_proxy_addr, + &postgres_config, + ) + .await + .context("Failed to save SetChainId upgrade transaction")?; + } + } + let components = if opt.rebuild_tree { vec![Component::Tree] } else { diff --git a/core/lib/config/src/configs/genesis.rs b/core/lib/config/src/configs/genesis.rs index 8836c42c37c..21810928097 100644 --- a/core/lib/config/src/configs/genesis.rs +++ b/core/lib/config/src/configs/genesis.rs @@ -9,11 +9,7 @@ pub struct GenesisConfig { pub genesis_commitment: H256, pub bootloader_hash: H256, pub default_aa_hash: H256, - pub verifier_address: Address, pub fee_account: Address, - pub diamond_proxy: Address, - pub erc20_bridge: Address, - pub state_transition_proxy_addr: Option
, pub l1_chain_id: L1ChainId, pub l2_chain_id: L2ChainId, pub recursion_node_level_vk_hash: H256, diff --git a/core/lib/config/src/testonly.rs b/core/lib/config/src/testonly.rs index 3811813d9dc..c45d8d529c7 100644 --- a/core/lib/config/src/testonly.rs +++ b/core/lib/config/src/testonly.rs @@ -760,11 +760,7 @@ impl RandomConfig for configs::GenesisConfig { genesis_commitment: g.gen(), bootloader_hash: g.gen(), default_aa_hash: g.gen(), - verifier_address: g.gen(), fee_account: g.gen(), - diamond_proxy: g.gen(), - erc20_bridge: g.gen(), - state_transition_proxy_addr: g.gen(), l1_chain_id: L1ChainId(g.gen()), l2_chain_id: L2ChainId::default(), recursion_node_level_vk_hash: g.gen(), diff --git a/core/lib/env_config/src/genesis.rs b/core/lib/env_config/src/genesis.rs index 89d2a11f7f0..68883203ba8 100644 --- a/core/lib/env_config/src/genesis.rs +++ b/core/lib/env_config/src/genesis.rs @@ -31,11 +31,7 @@ impl FromEnv for GenesisConfig { default_aa_hash: state_keeper .default_aa_hash .ok_or(anyhow!("Default aa hash required for genesis"))?, - verifier_address: contracts_config.verifier_addr, fee_account: state_keeper.fee_account_addr, - diamond_proxy: contracts_config.diamond_proxy_addr, - erc20_bridge: contracts_config.l1_erc20_bridge_proxy_addr, - state_transition_proxy_addr: contracts_config.state_transition_proxy_addr, l1_chain_id: network_config.network.chain_id(), l2_chain_id: network_config.zksync_network_id, recursion_node_level_vk_hash: contracts_config.fri_recursion_node_level_vk_hash, diff --git a/core/lib/zksync_core/src/consensus/testonly.rs b/core/lib/zksync_core/src/consensus/testonly.rs index 42494a219c1..fffe36afaef 100644 --- a/core/lib/zksync_core/src/consensus/testonly.rs +++ b/core/lib/zksync_core/src/consensus/testonly.rs @@ -27,7 +27,6 @@ use crate::{ }, sync_layer::{ fetcher::FetchedTransaction, - genesis::GenesisContracts, sync_action::{ActionQueue, ActionQueueSender, SyncAction}, ExternalIO, MainNodeClient, SyncState, }, @@ -158,13 +157,6 @@ impl MainNodeClient for MockMainNodeClient { "fetch_l1_chain_id", )) } - - async fn fetch_genesis_contracts(&self) -> EnrichedClientResult { - Err(EnrichedClientError::custom( - "not implemented", - "fetch_contracts", - )) - } } /// Fake StateKeeper for tests. diff --git a/core/lib/zksync_core/src/genesis.rs b/core/lib/zksync_core/src/genesis.rs index 78dd8e26242..70702abef85 100644 --- a/core/lib/zksync_core/src/genesis.rs +++ b/core/lib/zksync_core/src/genesis.rs @@ -8,9 +8,9 @@ use multivm::{ utils::get_max_gas_per_pubdata_byte, zk_evm_latest::aux_structures::{LogQuery as MultiVmLogQuery, Timestamp as MultiVMTimestamp}, }; -use zksync_config::GenesisConfig; +use zksync_config::{GenesisConfig, PostgresConfig}; use zksync_contracts::{BaseSystemContracts, BaseSystemContractsHashes, SET_CHAIN_ID_EVENT}; -use zksync_dal::{SqlxError, StorageProcessor}; +use zksync_dal::{ConnectionPool, SqlxError, StorageProcessor}; use zksync_eth_client::{clients::QueryClient, EthInterface}; use zksync_merkle_tree::domain::ZkSyncTree; use zksync_system_constants::PRIORITY_EXPIRATION; @@ -134,11 +134,7 @@ pub fn mock_genesis_config() -> GenesisConfig { genesis_commitment: Default::default(), bootloader_hash: base_system_contracts_hashes.bootloader, default_aa_hash: base_system_contracts_hashes.default_aa, - verifier_address: Default::default(), fee_account: Address::repeat_byte(0x01), - diamond_proxy: Address::repeat_byte(0x01), - erc20_bridge: Address::repeat_byte(0x02), - state_transition_proxy_addr: None, l1_chain_id: L1ChainId(9), l2_chain_id: L2ChainId::default(), recursion_node_level_vk_hash: first_l1_verifier_config.params.recursion_node_level_vk_hash, @@ -177,7 +173,6 @@ pub async fn ensure_genesis_state_unchecked( genesis_params.base_system_contracts(), genesis_params.system_contracts(), verifier_config, - genesis_params.config().verifier_address, ) .await?; tracing::info!("chain_schema_genesis is complete"); @@ -396,14 +391,13 @@ pub(crate) async fn create_genesis_l1_batch( base_system_contracts: &BaseSystemContracts, system_contracts: &[DeployedContract], l1_verifier_config: L1VerifierConfig, - verifier_address: Address, ) -> anyhow::Result<()> { let version = ProtocolVersion { id: protocol_version, timestamp: 0, l1_verifier_config, base_system_contracts_hashes: base_system_contracts.hashes(), - verifier_address, + verifier_address: Default::default(), tx: None, }; @@ -525,12 +519,19 @@ async fn save_genesis_l1_batch_metadata( Ok(()) } -pub(crate) async fn save_set_chain_id_tx( +pub async fn save_set_chain_id_tx( eth_client_url: &str, diamond_proxy_address: Address, state_transition_manager_address: Address, - storage: &mut StorageProcessor<'_>, + postgres_config: &PostgresConfig, ) -> anyhow::Result<()> { + let db_url = postgres_config.master_url()?; + let pool = ConnectionPool::singleton(db_url) + .build() + .await + .context("failed to build connection_pool")?; + let mut storage = pool.access_storage().await.context("access_storage()")?; + let eth_client = QueryClient::new(eth_client_url)?; let to = eth_client.block_number("fetch_chain_id_tx").await?.as_u64(); let from = to - PRIORITY_EXPIRATION; diff --git a/core/lib/zksync_core/src/lib.rs b/core/lib/zksync_core/src/lib.rs index 9641003a9db..0e89b0fc472 100644 --- a/core/lib/zksync_core/src/lib.rs +++ b/core/lib/zksync_core/src/lib.rs @@ -103,8 +103,6 @@ mod utils; pub async fn genesis_init( genesis_config: GenesisConfig, postgres_config: &PostgresConfig, - eth_client_url: &str, - set_chain_id: bool, ) -> anyhow::Result<()> { let db_url = postgres_config.master_url()?; let pool = ConnectionPool::singleton(db_url) @@ -116,18 +114,6 @@ pub async fn genesis_init( let params = GenesisParams::load_genesis_params(genesis_config)?; genesis::ensure_genesis_state(&mut storage, ¶ms).await?; - if set_chain_id { - if let Some(state_transition_proxy_addr) = params.config().state_transition_proxy_addr { - genesis::save_set_chain_id_tx( - eth_client_url, - params.config().diamond_proxy, - state_transition_proxy_addr, - &mut storage, - ) - .await - .context("Failed to save SetChainId upgrade transaction")?; - } - } Ok(()) } diff --git a/core/lib/zksync_core/src/state_keeper/batch_executor/tests/tester.rs b/core/lib/zksync_core/src/state_keeper/batch_executor/tests/tester.rs index 4769dc8037c..cfcd1caad8b 100644 --- a/core/lib/zksync_core/src/state_keeper/batch_executor/tests/tester.rs +++ b/core/lib/zksync_core/src/state_keeper/batch_executor/tests/tester.rs @@ -171,7 +171,6 @@ impl Tester { &BASE_SYSTEM_CONTRACTS, &get_system_smart_contracts(), Default::default(), - Default::default(), ) .await .unwrap(); diff --git a/core/lib/zksync_core/src/state_keeper/io/tests/tester.rs b/core/lib/zksync_core/src/state_keeper/io/tests/tester.rs index 489b068d320..db1007475ec 100644 --- a/core/lib/zksync_core/src/state_keeper/io/tests/tester.rs +++ b/core/lib/zksync_core/src/state_keeper/io/tests/tester.rs @@ -149,7 +149,6 @@ impl Tester { &self.base_system_contracts, &get_system_smart_contracts(), L1VerifierConfig::default(), - Address::zero(), ) .await .unwrap(); diff --git a/core/lib/zksync_core/src/sync_layer/client.rs b/core/lib/zksync_core/src/sync_layer/client.rs index 8bfeffa68a2..d97aad26f0e 100644 --- a/core/lib/zksync_core/src/sync_layer/client.rs +++ b/core/lib/zksync_core/src/sync_layer/client.rs @@ -14,8 +14,6 @@ use zksync_web3_decl::{ namespaces::{EnNamespaceClient, EthNamespaceClient, ZksNamespaceClient}, }; -use crate::sync_layer::genesis::GenesisContracts; - /// Client abstracting connection to the main node. #[async_trait] pub trait MainNodeClient: 'static + Send + Sync + fmt::Debug { @@ -48,7 +46,6 @@ pub trait MainNodeClient: 'static + Send + Sync + fmt::Debug { async fn fetch_genesis_l1_batch(&self) -> EnrichedClientResult; async fn fetch_l1_chain_id(&self) -> EnrichedClientResult; - async fn fetch_genesis_contracts(&self) -> EnrichedClientResult; } impl dyn MainNodeClient { @@ -170,19 +167,4 @@ impl MainNodeClient for HttpClient { .await .map(|l1_chain_id| L1ChainId(l1_chain_id.as_u64())) } - - async fn fetch_genesis_contracts(&self) -> EnrichedClientResult { - let main_contract = self - .get_main_contract() - .rpc_context("get_main_contract") - .await?; - let bridge_contracts = self - .get_bridge_contracts() - .rpc_context("get bridges") - .await?; - Ok(GenesisContracts { - diamond_proxy: main_contract, - bridges: bridge_contracts, - }) - } } diff --git a/core/lib/zksync_core/src/sync_layer/genesis.rs b/core/lib/zksync_core/src/sync_layer/genesis.rs index c05dc1c9fe6..6d4c457a40f 100644 --- a/core/lib/zksync_core/src/sync_layer/genesis.rs +++ b/core/lib/zksync_core/src/sync_layer/genesis.rs @@ -3,19 +3,13 @@ use zksync_config::GenesisConfig; use zksync_contracts::{BaseSystemContracts, BaseSystemContractsHashes, SystemContractCode}; use zksync_dal::StorageProcessor; use zksync_types::{ - api::BridgeAddresses, block::DeployedContract, protocol_version::L1VerifierConfig, - system_contracts::get_system_smart_contracts, AccountTreeId, Address, L1BatchNumber, L2ChainId, - H256, + block::DeployedContract, protocol_version::L1VerifierConfig, + system_contracts::get_system_smart_contracts, AccountTreeId, L1BatchNumber, L2ChainId, H256, }; use super::client::MainNodeClient; use crate::genesis::{ensure_genesis_state, GenesisParams}; -pub struct GenesisContracts { - pub diamond_proxy: Address, - pub bridges: BridgeAddresses, -} - pub async fn perform_genesis_if_needed( storage: &mut StorageProcessor<'_>, zksync_chain_id: L2ChainId, @@ -55,10 +49,6 @@ async fn create_genesis_params( let protocol_version = genesis_miniblock.protocol_version; let genesis_batch = client.fetch_genesis_l1_batch().await?; let l1_chain_id = client.fetch_l1_chain_id().await?; - let GenesisContracts { - diamond_proxy, - bridges, - } = client.fetch_genesis_contracts().await?; // Load the list of addresses that are known to contain system contracts at any point in time. // Not every of these addresses is guaranteed to be present in the genesis state, but we'll iterate through @@ -102,7 +92,6 @@ async fn create_genesis_params( // Use default L1 verifier config and verifier address for genesis as they are not used by EN. let first_l1_verifier_config = L1VerifierConfig::default(); - let first_verifier_address = Address::default(); let config = GenesisConfig { protocol_version: protocol_version as u16, genesis_root_hash: genesis_batch @@ -117,11 +106,7 @@ async fn create_genesis_params( .context("Genesis can't be pending")?, bootloader_hash: base_system_contracts_hashes.bootloader, default_aa_hash: base_system_contracts_hashes.default_aa, - verifier_address: first_verifier_address, fee_account: first_validator, - diamond_proxy, - erc20_bridge: bridges.l1_erc20_default_bridge, - state_transition_proxy_addr: None, l1_chain_id, l2_chain_id: zksync_chain_id, recursion_node_level_vk_hash: first_l1_verifier_config.params.recursion_node_level_vk_hash, From cac0716fa3e34ef755fc6e032e19d21675953211 Mon Sep 17 00:00:00 2001 From: Danil Date: Fri, 15 Mar 2024 16:50:15 +0100 Subject: [PATCH 22/65] Fix test Signed-off-by: Danil --- core/lib/zksync_core/src/genesis.rs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/core/lib/zksync_core/src/genesis.rs b/core/lib/zksync_core/src/genesis.rs index 70702abef85..2671ae4ba41 100644 --- a/core/lib/zksync_core/src/genesis.rs +++ b/core/lib/zksync_core/src/genesis.rs @@ -149,12 +149,11 @@ pub fn mock_genesis_config() -> GenesisConfig { // This function is dangerous, // it doesn't enforce transactions and doesn't verify genesis correctness -// Please, always use ensure_genesis_state instead +// Please, always use `ensure_genesis_state` instead pub async fn ensure_genesis_state_unchecked( transaction: &mut StorageProcessor<'_>, genesis_params: &GenesisParams, ) -> Result<(H256, H256, u64), GenesisError> { - // return if genesis block was already processed tracing::info!("running regenesis"); let verifier_config = L1VerifierConfig { params: VerifierParams { @@ -589,10 +588,8 @@ mod tests { let root_hash = metadata.unwrap().metadata.root_hash; assert_ne!(root_hash, H256::zero()); - // Check that `ensure_genesis_state()` doesn't panic on repeated runs. - ensure_genesis_state_unchecked(&mut conn, ¶ms) - .await - .unwrap(); + // Check that `genesis is not needed` + assert!(!conn.blocks_dal().is_genesis_needed().await.unwrap()); } #[tokio::test] From 7447a2b808ee9fad6fd42f3a592b97e67aa1d554 Mon Sep 17 00:00:00 2001 From: Danil Date: Fri, 15 Mar 2024 18:17:27 +0100 Subject: [PATCH 23/65] fix(protocol): Remove verifier address from protocol upgrade Signed-off-by: Danil --- ...0e1c07a797cd1d4794007904fef7a5e837ebfb1b502711a1.json} | 5 ++--- core/lib/dal/src/models/storage_protocol_version.rs | 3 +-- core/lib/dal/src/protocol_versions_dal.rs | 8 ++------ core/lib/types/src/protocol_version.rs | 3 --- core/lib/zksync_core/src/genesis.rs | 8 -------- core/lib/zksync_core/src/lib.rs | 1 - .../src/state_keeper/batch_executor/tests/tester.rs | 1 - core/lib/zksync_core/src/state_keeper/io/tests/tester.rs | 1 - core/lib/zksync_core/src/sync_layer/external_io.rs | 2 -- core/lib/zksync_core/src/sync_layer/genesis.rs | 5 +---- 10 files changed, 6 insertions(+), 31 deletions(-) rename core/lib/dal/.sqlx/{query-0a3cb11f5bdcb8da31dbd4e3016fced141fb29dd8b6c32dd2dc3452dc294fe1f.json => query-1f4c123edaf6faf50e1c07a797cd1d4794007904fef7a5e837ebfb1b502711a1.json} (70%) diff --git a/core/lib/dal/.sqlx/query-0a3cb11f5bdcb8da31dbd4e3016fced141fb29dd8b6c32dd2dc3452dc294fe1f.json b/core/lib/dal/.sqlx/query-1f4c123edaf6faf50e1c07a797cd1d4794007904fef7a5e837ebfb1b502711a1.json similarity index 70% rename from core/lib/dal/.sqlx/query-0a3cb11f5bdcb8da31dbd4e3016fced141fb29dd8b6c32dd2dc3452dc294fe1f.json rename to core/lib/dal/.sqlx/query-1f4c123edaf6faf50e1c07a797cd1d4794007904fef7a5e837ebfb1b502711a1.json index 854e34b4f18..58780d59a3b 100644 --- a/core/lib/dal/.sqlx/query-0a3cb11f5bdcb8da31dbd4e3016fced141fb29dd8b6c32dd2dc3452dc294fe1f.json +++ b/core/lib/dal/.sqlx/query-1f4c123edaf6faf50e1c07a797cd1d4794007904fef7a5e837ebfb1b502711a1.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n INSERT INTO\n protocol_versions (\n id,\n timestamp,\n recursion_scheduler_level_vk_hash,\n recursion_node_level_vk_hash,\n recursion_leaf_level_vk_hash,\n recursion_circuits_set_vks_hash,\n bootloader_code_hash,\n default_account_code_hash,\n verifier_address,\n upgrade_tx_hash,\n created_at\n )\n VALUES\n ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, NOW())\n ", + "query": "\n INSERT INTO\n protocol_versions (\n id,\n timestamp,\n recursion_scheduler_level_vk_hash,\n recursion_node_level_vk_hash,\n recursion_leaf_level_vk_hash,\n recursion_circuits_set_vks_hash,\n bootloader_code_hash,\n default_account_code_hash,\n upgrade_tx_hash,\n created_at\n )\n VALUES\n ($1, $2, $3, $4, $5, $6, $7, $8, $9, NOW())\n ", "describe": { "columns": [], "parameters": { @@ -13,11 +13,10 @@ "Bytea", "Bytea", "Bytea", - "Bytea", "Bytea" ] }, "nullable": [] }, - "hash": "0a3cb11f5bdcb8da31dbd4e3016fced141fb29dd8b6c32dd2dc3452dc294fe1f" + "hash": "1f4c123edaf6faf50e1c07a797cd1d4794007904fef7a5e837ebfb1b502711a1" } diff --git a/core/lib/dal/src/models/storage_protocol_version.rs b/core/lib/dal/src/models/storage_protocol_version.rs index 6eb6e94b003..b1ec4a97966 100644 --- a/core/lib/dal/src/models/storage_protocol_version.rs +++ b/core/lib/dal/src/models/storage_protocol_version.rs @@ -5,7 +5,7 @@ use zksync_contracts::BaseSystemContractsHashes; use zksync_types::{ api, protocol_version::{self, L1VerifierConfig, ProtocolUpgradeTx, VerifierParams}, - Address, H256, + H256, }; #[derive(sqlx::FromRow)] @@ -50,7 +50,6 @@ pub(crate) fn protocol_version_from_storage( bootloader: H256::from_slice(&storage_version.bootloader_code_hash), default_aa: H256::from_slice(&storage_version.default_account_code_hash), }, - verifier_address: Address::from_slice(&storage_version.verifier_address), tx, } } diff --git a/core/lib/dal/src/protocol_versions_dal.rs b/core/lib/dal/src/protocol_versions_dal.rs index 6ddb533cb9e..5a9a973893c 100644 --- a/core/lib/dal/src/protocol_versions_dal.rs +++ b/core/lib/dal/src/protocol_versions_dal.rs @@ -4,7 +4,7 @@ use anyhow::Context as _; use zksync_contracts::{BaseSystemContracts, BaseSystemContractsHashes}; use zksync_types::{ protocol_version::{L1VerifierConfig, ProtocolUpgradeTx, ProtocolVersion, VerifierParams}, - Address, ProtocolVersionId, H256, + ProtocolVersionId, H256, }; use crate::{ @@ -24,7 +24,6 @@ impl ProtocolVersionsDal<'_, '_> { timestamp: u64, l1_verifier_config: L1VerifierConfig, base_system_contracts_hashes: BaseSystemContractsHashes, - verifier_address: Address, tx_hash: Option, ) { sqlx::query!( @@ -39,12 +38,11 @@ impl ProtocolVersionsDal<'_, '_> { recursion_circuits_set_vks_hash, bootloader_code_hash, default_account_code_hash, - verifier_address, upgrade_tx_hash, created_at ) VALUES - ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, NOW()) + ($1, $2, $3, $4, $5, $6, $7, $8, $9, NOW()) "#, id as i32, timestamp as i64, @@ -65,7 +63,6 @@ impl ProtocolVersionsDal<'_, '_> { .as_bytes(), base_system_contracts_hashes.bootloader.as_bytes(), base_system_contracts_hashes.default_aa.as_bytes(), - verifier_address.as_bytes(), tx_hash.as_ref().map(H256::as_bytes), ) .execute(self.storage.conn()) @@ -91,7 +88,6 @@ impl ProtocolVersionsDal<'_, '_> { version.timestamp, version.l1_verifier_config, version.base_system_contracts_hashes, - version.verifier_address, tx_hash, ) .await; diff --git a/core/lib/types/src/protocol_version.rs b/core/lib/types/src/protocol_version.rs index 0c515c878db..b204ecc01db 100644 --- a/core/lib/types/src/protocol_version.rs +++ b/core/lib/types/src/protocol_version.rs @@ -688,8 +688,6 @@ pub struct ProtocolVersion { pub l1_verifier_config: L1VerifierConfig, /// Hashes of base system contracts (bootloader and default account) pub base_system_contracts_hashes: BaseSystemContractsHashes, - /// Verifier contract address on L1 - pub verifier_address: Address, /// L2 Upgrade transaction. pub tx: Option, } @@ -719,7 +717,6 @@ impl ProtocolVersion { .default_account_code_hash .unwrap_or(self.base_system_contracts_hashes.default_aa), }, - verifier_address: upgrade.verifier_address.unwrap_or(self.verifier_address), tx: upgrade.tx, } } diff --git a/core/lib/zksync_core/src/genesis.rs b/core/lib/zksync_core/src/genesis.rs index 6a70a796cd4..cfbdee8ed3f 100644 --- a/core/lib/zksync_core/src/genesis.rs +++ b/core/lib/zksync_core/src/genesis.rs @@ -38,7 +38,6 @@ pub struct GenesisParams { pub protocol_version: ProtocolVersionId, pub base_system_contracts: BaseSystemContracts, pub system_contracts: Vec, - pub first_verifier_address: Address, pub first_l1_verifier_config: L1VerifierConfig, } @@ -53,7 +52,6 @@ impl GenesisParams { base_system_contracts: BaseSystemContracts::load_from_disk(), system_contracts: get_system_smart_contracts(), first_l1_verifier_config: L1VerifierConfig::default(), - first_verifier_address: Address::zero(), } } } @@ -82,7 +80,6 @@ pub async fn ensure_genesis_state( protocol_version, base_system_contracts, system_contracts, - first_verifier_address, first_l1_verifier_config, } = genesis_params; @@ -96,7 +93,6 @@ pub async fn ensure_genesis_state( base_system_contracts, system_contracts, *first_l1_verifier_config, - *first_verifier_address, ) .await?; tracing::info!("chain_schema_genesis is complete"); @@ -295,14 +291,12 @@ pub(crate) async fn create_genesis_l1_batch( base_system_contracts: &BaseSystemContracts, system_contracts: &[DeployedContract], l1_verifier_config: L1VerifierConfig, - verifier_address: Address, ) -> anyhow::Result<()> { let version = ProtocolVersion { id: protocol_version, timestamp: 0, l1_verifier_config, base_system_contracts_hashes: base_system_contracts.hashes(), - verifier_address, tx: None, }; @@ -478,7 +472,6 @@ mod tests { base_system_contracts: BaseSystemContracts::load_from_disk(), system_contracts: get_system_smart_contracts(), first_l1_verifier_config: L1VerifierConfig::default(), - first_verifier_address: Address::random(), }; ensure_genesis_state(&mut conn, L2ChainId::from(270), ¶ms) .await @@ -511,7 +504,6 @@ mod tests { base_system_contracts: BaseSystemContracts::load_from_disk(), system_contracts: get_system_smart_contracts(), first_l1_verifier_config: L1VerifierConfig::default(), - first_verifier_address: Address::random(), }; ensure_genesis_state(&mut conn, L2ChainId::max(), ¶ms) .await diff --git a/core/lib/zksync_core/src/lib.rs b/core/lib/zksync_core/src/lib.rs index 86d9df66010..988631f5717 100644 --- a/core/lib/zksync_core/src/lib.rs +++ b/core/lib/zksync_core/src/lib.rs @@ -179,7 +179,6 @@ pub async fn genesis_init( protocol_version: ProtocolVersionId::latest(), base_system_contracts: BaseSystemContracts::load_from_disk(), system_contracts: get_system_smart_contracts(), - first_verifier_address: contracts_config.verifier_addr, first_l1_verifier_config, }, ) diff --git a/core/lib/zksync_core/src/state_keeper/batch_executor/tests/tester.rs b/core/lib/zksync_core/src/state_keeper/batch_executor/tests/tester.rs index 4769dc8037c..cfcd1caad8b 100644 --- a/core/lib/zksync_core/src/state_keeper/batch_executor/tests/tester.rs +++ b/core/lib/zksync_core/src/state_keeper/batch_executor/tests/tester.rs @@ -171,7 +171,6 @@ impl Tester { &BASE_SYSTEM_CONTRACTS, &get_system_smart_contracts(), Default::default(), - Default::default(), ) .await .unwrap(); diff --git a/core/lib/zksync_core/src/state_keeper/io/tests/tester.rs b/core/lib/zksync_core/src/state_keeper/io/tests/tester.rs index 489b068d320..db1007475ec 100644 --- a/core/lib/zksync_core/src/state_keeper/io/tests/tester.rs +++ b/core/lib/zksync_core/src/state_keeper/io/tests/tester.rs @@ -149,7 +149,6 @@ impl Tester { &self.base_system_contracts, &get_system_smart_contracts(), L1VerifierConfig::default(), - Address::zero(), ) .await .unwrap(); diff --git a/core/lib/zksync_core/src/sync_layer/external_io.rs b/core/lib/zksync_core/src/sync_layer/external_io.rs index a35001cb50b..5152e7361d7 100644 --- a/core/lib/zksync_core/src/sync_layer/external_io.rs +++ b/core/lib/zksync_core/src/sync_layer/external_io.rs @@ -177,8 +177,6 @@ impl ExternalIO { protocol_version.timestamp, protocol_version.verification_keys_hashes, protocol_version.base_system_contracts, - // Verifier is not used in the external node, so we can pass an empty - Default::default(), protocol_version.l2_system_upgrade_tx_hash, ) .await; diff --git a/core/lib/zksync_core/src/sync_layer/genesis.rs b/core/lib/zksync_core/src/sync_layer/genesis.rs index 021d828c966..c4a0897c36b 100644 --- a/core/lib/zksync_core/src/sync_layer/genesis.rs +++ b/core/lib/zksync_core/src/sync_layer/genesis.rs @@ -3,8 +3,7 @@ use zksync_contracts::{BaseSystemContracts, BaseSystemContractsHashes, SystemCon use zksync_dal::StorageProcessor; use zksync_types::{ block::DeployedContract, protocol_version::L1VerifierConfig, - system_contracts::get_system_smart_contracts, AccountTreeId, Address, L1BatchNumber, L2ChainId, - H256, + system_contracts::get_system_smart_contracts, AccountTreeId, L1BatchNumber, L2ChainId, H256, }; use super::client::MainNodeClient; @@ -87,14 +86,12 @@ async fn create_genesis_params(client: &dyn MainNodeClient) -> anyhow::Result Date: Fri, 15 Mar 2024 18:34:01 +0100 Subject: [PATCH 24/65] Drop not null from the database Signed-off-by: Danil --- ...4037fd77e0fac2246c68e8e15a831f1a45dc3b2240d5c6809d5ef2.json | 2 +- ...f772075096e69f8665d98a3d9f7df162ae22a98c3c7620fcd13bd2.json | 2 +- ...0478fe0feb367b1d64561347b81f8931cc2addefa907c9aa9355e6.json | 2 +- .../migrations/20240315172816_drop_not_null_verifier.down.sql | 2 ++ .../migrations/20240315172816_drop_not_null_verifier.up.sql | 2 ++ core/lib/dal/src/models/storage_protocol_version.rs | 3 ++- 6 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 core/lib/dal/migrations/20240315172816_drop_not_null_verifier.down.sql create mode 100644 core/lib/dal/migrations/20240315172816_drop_not_null_verifier.up.sql diff --git a/core/lib/dal/.sqlx/query-136569d7eb4037fd77e0fac2246c68e8e15a831f1a45dc3b2240d5c6809d5ef2.json b/core/lib/dal/.sqlx/query-136569d7eb4037fd77e0fac2246c68e8e15a831f1a45dc3b2240d5c6809d5ef2.json index fc33c969303..22d29f0f4d8 100644 --- a/core/lib/dal/.sqlx/query-136569d7eb4037fd77e0fac2246c68e8e15a831f1a45dc3b2240d5c6809d5ef2.json +++ b/core/lib/dal/.sqlx/query-136569d7eb4037fd77e0fac2246c68e8e15a831f1a45dc3b2240d5c6809d5ef2.json @@ -73,7 +73,7 @@ false, false, false, - false, + true, true, false ] diff --git a/core/lib/dal/.sqlx/query-19545806b8f772075096e69f8665d98a3d9f7df162ae22a98c3c7620fcd13bd2.json b/core/lib/dal/.sqlx/query-19545806b8f772075096e69f8665d98a3d9f7df162ae22a98c3c7620fcd13bd2.json index 3273d9654aa..fe7af657ba5 100644 --- a/core/lib/dal/.sqlx/query-19545806b8f772075096e69f8665d98a3d9f7df162ae22a98c3c7620fcd13bd2.json +++ b/core/lib/dal/.sqlx/query-19545806b8f772075096e69f8665d98a3d9f7df162ae22a98c3c7620fcd13bd2.json @@ -71,7 +71,7 @@ false, false, false, - false, + true, true, false ] diff --git a/core/lib/dal/.sqlx/query-99acb091650478fe0feb367b1d64561347b81f8931cc2addefa907c9aa9355e6.json b/core/lib/dal/.sqlx/query-99acb091650478fe0feb367b1d64561347b81f8931cc2addefa907c9aa9355e6.json index 2aa6a538125..2699d19e9e4 100644 --- a/core/lib/dal/.sqlx/query-99acb091650478fe0feb367b1d64561347b81f8931cc2addefa907c9aa9355e6.json +++ b/core/lib/dal/.sqlx/query-99acb091650478fe0feb367b1d64561347b81f8931cc2addefa907c9aa9355e6.json @@ -73,7 +73,7 @@ false, false, false, - false, + true, true, false ] diff --git a/core/lib/dal/migrations/20240315172816_drop_not_null_verifier.down.sql b/core/lib/dal/migrations/20240315172816_drop_not_null_verifier.down.sql new file mode 100644 index 00000000000..83e1c52257e --- /dev/null +++ b/core/lib/dal/migrations/20240315172816_drop_not_null_verifier.down.sql @@ -0,0 +1,2 @@ +ALTER TABLE protocol_versions + ALTER COLUMN verifier_address SET NOT NULL; diff --git a/core/lib/dal/migrations/20240315172816_drop_not_null_verifier.up.sql b/core/lib/dal/migrations/20240315172816_drop_not_null_verifier.up.sql new file mode 100644 index 00000000000..002bdf709c8 --- /dev/null +++ b/core/lib/dal/migrations/20240315172816_drop_not_null_verifier.up.sql @@ -0,0 +1,2 @@ +ALTER TABLE protocol_versions + ALTER COLUMN verifier_address DROP NOT NULL; diff --git a/core/lib/dal/src/models/storage_protocol_version.rs b/core/lib/dal/src/models/storage_protocol_version.rs index b1ec4a97966..09efaabd68f 100644 --- a/core/lib/dal/src/models/storage_protocol_version.rs +++ b/core/lib/dal/src/models/storage_protocol_version.rs @@ -18,7 +18,8 @@ pub struct StorageProtocolVersion { pub recursion_circuits_set_vks_hash: Vec, pub bootloader_code_hash: Vec, pub default_account_code_hash: Vec, - pub verifier_address: Vec, + // deprecated + pub verifier_address: Option>, pub created_at: NaiveDateTime, pub upgrade_tx_hash: Option>, } From ea90b4fb3c14378a065d9c05ba3e80acf47b65cf Mon Sep 17 00:00:00 2001 From: Danil Date: Fri, 15 Mar 2024 18:51:44 +0100 Subject: [PATCH 25/65] add comments Signed-off-by: Danil --- core/lib/config/src/configs/genesis.rs | 2 ++ core/lib/zksync_core/src/genesis.rs | 1 + 2 files changed, 3 insertions(+) diff --git a/core/lib/config/src/configs/genesis.rs b/core/lib/config/src/configs/genesis.rs index 21810928097..1a18de6430c 100644 --- a/core/lib/config/src/configs/genesis.rs +++ b/core/lib/config/src/configs/genesis.rs @@ -1,6 +1,8 @@ use serde::{Deserialize, Serialize}; use zksync_basic_types::{Address, L1ChainId, L2ChainId, H256}; +/// This config represents the genesis state of the chain. +/// Each chain has this config immutable and we update it only during the protocol upgrade #[derive(Debug, Serialize, Deserialize, Clone)] pub struct GenesisConfig { pub protocol_version: u16, diff --git a/core/lib/zksync_core/src/genesis.rs b/core/lib/zksync_core/src/genesis.rs index 762b6292a7b..673ca9f53cb 100644 --- a/core/lib/zksync_core/src/genesis.rs +++ b/core/lib/zksync_core/src/genesis.rs @@ -96,6 +96,7 @@ impl GenesisParams { config, }) } + pub fn load_genesis_params(config: GenesisConfig) -> Result { let base_system_contracts = BaseSystemContracts::load_from_disk(); let system_contracts = get_system_smart_contracts(); From fb64d39714b724abfe0b0915c8b65bb1a0a57e6e Mon Sep 17 00:00:00 2001 From: Danil Date: Mon, 18 Mar 2024 13:07:41 +0100 Subject: [PATCH 26/65] Remove genesis path Signed-off-by: Danil --- core/bin/zksync_server/src/main.rs | 3 --- core/lib/zksync_core/src/genesis.rs | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/core/bin/zksync_server/src/main.rs b/core/bin/zksync_server/src/main.rs index 36d6ed6e52d..1efe717a362 100644 --- a/core/bin/zksync_server/src/main.rs +++ b/core/bin/zksync_server/src/main.rs @@ -56,9 +56,6 @@ struct Cli { /// Path to the yaml with secrets. If set, it will be used instead of env vars. #[arg(long)] secrets_path: Option, - /// Path to the yaml with genesis - #[arg(long)] - genesis_path: Option, } #[derive(Debug, Clone)] diff --git a/core/lib/zksync_core/src/genesis.rs b/core/lib/zksync_core/src/genesis.rs index 12db75c44b2..f3291c4a047 100644 --- a/core/lib/zksync_core/src/genesis.rs +++ b/core/lib/zksync_core/src/genesis.rs @@ -156,7 +156,7 @@ pub async fn ensure_genesis_state_unchecked( genesis_params: &GenesisParams, ) -> Result<(H256, H256, u64), GenesisError> { tracing::info!("running regenesis"); - let transaction = storage.start_transaction().await?; + let mut transaction = storage.start_transaction().await?; let verifier_config = L1VerifierConfig { params: VerifierParams { recursion_node_level_vk_hash: genesis_params.config.recursion_node_level_vk_hash, From 070f11c91fc31604425757fcbcfcaa52a4fec06b Mon Sep 17 00:00:00 2001 From: Danil Date: Mon, 18 Mar 2024 17:07:54 +0100 Subject: [PATCH 27/65] feat(config): Split config to files Signed-off-by: Danil --- .gitignore | 1 + etc/env/file_based/contracts.yaml | 18 ++ etc/env/file_based/general.yaml | 269 ++++++++++++++++++++++++++++++ etc/env/file_based/genesis.yaml | 20 +++ etc/env/file_based/wallets.yaml | 9 + 5 files changed, 317 insertions(+) create mode 100644 etc/env/file_based/contracts.yaml create mode 100644 etc/env/file_based/general.yaml create mode 100644 etc/env/file_based/genesis.yaml create mode 100644 etc/env/file_based/wallets.yaml diff --git a/.gitignore b/.gitignore index f28d1a53983..9869ed855aa 100644 --- a/.gitignore +++ b/.gitignore @@ -33,6 +33,7 @@ Cargo.lock /etc/env/* !/etc/env/base +!/etc/env/file_based !/etc/env/dev.toml !/etc/env/docker.toml !/etc/env/ext-node.toml diff --git a/etc/env/file_based/contracts.yaml b/etc/env/file_based/contracts.yaml new file mode 100644 index 00000000000..3ef4efb4b18 --- /dev/null +++ b/etc/env/file_based/contracts.yaml @@ -0,0 +1,18 @@ +l1: + diamond_proxy_addr: "0xfc073319977e314f251eae6ae6be76b0b3baeecf" + default_upgrade_addr: "0x5e6d086f5ec079adff4fb3774cdf3e8d6a34f7e9" + governance_addr: "0x5e6d086f5ec079adff4fb3774cdf3e8d6a34f7e9" + verifier_addr: "0xdabb67b676f5b01fcc8997cc8439846d0d8078ca" + multicall3_addr: "0xca11bde05977b3631167028862be2a173976ca11" + erc20_bridge_proxy_addr: "0xfc073319977e314f251eae6ae6be76b0b3baeecf" + blob_versioned_hash_retriever_addr: "0x0000000000000000000000000000000000000000" + validator_timelock_addr: "0xfc073319977e314f251eae6ae6be76b0b3baeecf" +l2: + erc20_bridge_addr: "0xfc073319977e314f251eae6ae6be76b0b3baeecf" + testnet_paymaster_addr: "0xfc073319977e314f251eae6ae6be76b0b3baeecf" +weth: + l1_token_addr: "0x5e6d086f5ec079adff4fb3774cdf3e8d6a34f7e9" + l1_bridge_proxy_addr: "0x5e6d086f5ec079adff4fb3774cdf3e8d6a34f7e9" + l2_bridge_addr: "0x5e6d086f5ec079adff4fb3774cdf3e8d6a34f7e9" + l2_token_addr: "0x5e6d086f5ec079adff4fb3774cdf3e8d6a34f7e9" +validator_timelock_execution_delay: 0 \ No newline at end of file diff --git a/etc/env/file_based/general.yaml b/etc/env/file_based/general.yaml new file mode 100644 index 00000000000..1304706b4da --- /dev/null +++ b/etc/env/file_based/general.yaml @@ -0,0 +1,269 @@ +database: + - server_url: postgres://postgres:notsecurepassword@localhost/zksync_local + - prover_url: postgres://postgres:notsecurepassword@localhost/prover_local + - state_keeper_db_path: ./db/main/state_keeper + - backup_count: 5 + - backup_interval_ms: 60000 + - pool_size: 50 + - statement_timeout_sec: 300 + - merkle_tree_path: ./db/main/tree + - merkle_tree_backup_path: ./db/main/backups + - test: + - server_url: postgres://postgres:notsecurepassword@localhost:5433/zksync_local_test + - prover_url: postgres://postgres:notsecurepassword@localhost:5433/prover_local_test +api: + - web3_json_rpc: + - http_port: 3050 + - http_url: http://127.0.0.1:3050 + - ws_port: 3051 + - ws_url: ws://127.0.0.1:3051 + - req_entities_limit: 10000 + - filters_disabled: false + - filters_limit: 10000 + - subscriptions_limit: 10000 + - pubsub_polling_interval: 200 + - threads_per_server: 128 + - max_nonce_ahead: 50 + - gas_price_scale_factor: 1.2 + - l1_to_l2_transactions_compatibility_mode: true + - request_timeout: 10 + - account_pks: "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80,0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d,0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a,0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6,0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a,0x8b3a350cf5c34c9194ca85829a2df0ec3153be0318b5e2d3348e872092edffba,0x92db14e403b83dfe3df233f83dfa3a0d7096f21ca9b0d6d6b8d88b2b4ec1564e,0x4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356,0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97,0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6,0xf214f2b2cd398c806f84e317254e0f0b801d0643303237d97a22a48e01628897,0x701b615bbdfb9de65240bc28bd21bbc0d996645a3dd57e7b12bc2bdf6f192c82,0xa267530f49f8280200edf313ee7af6b827f2a8bce2897751d06a843f644967b1,0x47c99abed3324a2707c28affff1267e45918ec8c3f20b8aa892e8b065d2942dd,0xc526ee95bf44d8fc405a158bb884d9d1238d99f0612e9f33d006bb0789009aaa,0x8166f546bab6da521a8369cab06c5d2b9e46670292d85c875ee9ec20e84ffb61,0xea6c44ac03bff858b476bba40716402b03e41b8e97e276d1baec7c37d42484a0,0x689af8efa8c651a91ad287602527f3af2fe9f6501a7ac4b061667b5a93e037fd,0xde9be858da4a475276426320d5e9262ecfc3ba460bfac56360bfa6c4c28b4ee0,0xdf57089febbacf7ba0bc227dafbffa9fc08a93fdc68e1e42411a14efcf23656e" + - estimate_gas_scale_factor: 1.2 + - estimate_gas_acceptable_overestimation: 1000 + - max_tx_size: 1000000 + - prometheus: + - listener_port: 3312 + - pushgateway_url: http://127.0.0.1:9091 + - push_interval_ms: 100 + - healthcheck_port: 3071 + - merkle_tree_port: 3072 +state_keeper: + - transaction_slots: 250 + - max_allowed_l2_tx_gas_limit: 4000000000 + - block_commit_deadline_ms: 2500 + - miniblock_commit_deadline_ms: 1000 + - miniblock_seal_queue_capacity: 10 + - max_single_tx_gas: 6000000 + - close_block_at_geometry_percentage: 0.95 + - close_block_at_eth_params_percentage: 0.95 + - close_block_at_gas_percentage: 0.95 + - reject_tx_at_geometry_percentage: 0.95 + - reject_tx_at_eth_params_percentage: 0.95 + - reject_tx_at_gas_percentage: 0.95 + - minimal_l2_gas_price: 100000000 + - compute_overhead_part: 0 + - pubdata_overhead_part: 1 + - batch_overhead_l1_gas: 800000 + - max_gas_per_batch: 200000000 + - max_pubdata_per_batch: 100000 + - fee_model_version: V1 + - validation_computational_gas_limit: 300000 + - save_call_traces: true + - virtual_blocks_interval: 1 + - virtual_blocks_per_miniblock: 1 + - upload_witness_inputs_to_gcs: false + - operations_manager_delay_interval: 100 + - mempool_delay_interval: 100 + - mempool_sync_interval_ms: 10 + - mempool_sync_batch_size: 1000 + - mempool_capacity: 10000000 + - mempool_stuck_tx_timeout: 86400 + - mempool_remove_stuck_txs: true +contract_verifier: + - compilation_timeout: 30 + - polling_interval: 1000 + - prometheus_port: 3314 + - port: 3070 + - url: http://127.0.0.1:3070 + - threads_per_server: 128 +circuit_breaker: + - sync_interval_ms: 30000 + - http_req_max_retry_number: 5 + - http_req_retry_interval_sec: 2 +eth: + - web3_url: http://127.0.0.1:8545 + - sender_wait_confirmations: 1 + - expected_wait_time_block: 30 + - tx_poll_period: 1 + - aggregate_tx_poll_period: 1 + - max_txs_in_flight: 30 + - proof_sending_mode: SkipEveryProof + - max_aggregated_blocks_to_commit: 1 + - max_aggregated_blocks_to_execute: 10 + - aggregated_block_commit_deadline: 1 + - aggregated_block_prove_deadline: 10 + - aggregated_block_execute_deadline: 10 + - timestamp_criteria_max_allowed_lag: 30 + - max_eth_tx_data_size: 120000 + - aggregated_proof_sizes: "1,4" + - max_aggregated_tx_gas: 4000000 + - max_single_tx_gas: 6000000 + - max_acceptable_priority_fee_in_gwei: 100000000000 + - proof_loading_mode: OldProofFromDb + - pubdata_sending_mode: Blobs + - gas_adjuster_default_priority_fee_per_gas: 1000000000 + - gas_adjuster_max_base_fee_samples: 10000 + - gas_adjuster_pricing_formula_parameter_a: 1.5 + - gas_adjuster_pricing_formula_parameter_b: 1.0005 + - gas_adjuster_internal_l1_pricing_multiplier: 0.8 + - gas_adjuster_poll_period: 5 + - eth_watch_confirmations_for_eth_event: 0 + - eth_watch_eth_node_poll_interval: 300 + + +object_store: + prover: + - mode: FileBacked + - path: artifacts + snapshot: + - mode: FileBacked + - path: artifacts + +prover: + - nfs_setup_key_mount_path: /home/setup_keys/ + - setup_data_path: /usr/src/setup-data + - prometheus_port: 3315 + - max_attempts: 10 + - generation_timeout_in_secs: 600 + - base_layer_circuit_ids_to_be_verified: 1 + - recursive_layer_circuit_ids_to_be_verified: 1 + - setup_load_mode: FromDisk + - specialized_group_id: 100 + - witness_vector_generator_thread_count: 5 + - queue_capacity: 10 + - witness_vector_receiver_port: 3316 + - zone_read_url: http://metadata.google.internal/computeMetadata/v1/instance/zone + - shall_save_to_public_bucket: true + - witness: + - initial_setup_key_path: ./keys/setup/setup_2^22.key + - key_download_url: https://storage.googleapis.com/matterlabs-setup-keys-us/setup-keys/setup_2^22.key + - max_attempts: 1 + - dump_arguments_for_blocks: 2,3 + - data_source: FromPostgres + - stats_reporting_interval_ms: 10000 + - job_moving_interval_ms: 40000 + - generation_timeout_in_secs: 900 + - max_attempts: 10 + - force_process_block: 1 + - shall_save_to_public_bucket: true + - witness_vector_generator: + - prover_instance_wait_timeout_in_secs: 200 + - prover_instance_poll_time_in_milli_secs: 250 + - prometheus_listener_port: 3314 + - prometheus_pushgateway_url: http://127.0.0.1:9091 + - prometheus_push_interval_ms: 100 + - specialized_group_id: 100 + - max_prover_reservation_duration_in_secs: 1000 + - prover_gateway: + - api_url: http://127.0.0.1:3320 + - api_poll_duration_secs: 1000 + - prometheus_listener_port: 3314 + - prometheus_pushgateway_url: http://127.0.0.1:9091 + - prometheus_push_interval_ms: 100 + - proof_compressor: + - compression_mode: 1 + - prometheus_listener_port: 3321 + - prometheus_pushgateway_url: http://127.0.0.1:9091 + - prometheus_push_interval_ms: 100 + - generation_timeout_in_secs: 3600 + - max_attempts: 5 + - universal_setup_path: keys/setup/setup_2^26.key + - universal_setup_download_url: https://storage.googleapis.com/matterlabs-setup-keys-us/setup-keys/setup_2^26.key + - verify_wrapper_proof: true + - data_handler: + - http_port: 3320 + - proof_generation_timeout_in_secs: 18000 + - protocol_version_loading_mode: FromEnvVar + - fri_protocol_version_id: 2 + - group: + - GROUP_0_0_CIRCUIT_ID: 1 + - GROUP_0_0_AGGREGATION_ROUND: 3 + - GROUP_0_1_CIRCUIT_ID: 2 + - GROUP_0_1_AGGREGATION_ROUND: 2 + - GROUP_1_0_CIRCUIT_ID: 1 + - GROUP_1_0_AGGREGATION_ROUND: 0 + - GROUP_2_0_CIRCUIT_ID: 2 + - GROUP_2_0_AGGREGATION_ROUND: 0 + - GROUP_2_1_CIRCUIT_ID: 4 + - GROUP_2_1_AGGREGATION_ROUND: 0 + - GROUP_2_2_CIRCUIT_ID: 6 + - GROUP_2_2_AGGREGATION_ROUND: 0 + - GROUP_2_3_CIRCUIT_ID: 9 + - GROUP_2_3_AGGREGATION_ROUND: 0 + - GROUP_3_0_CIRCUIT_ID: 3 + - GROUP_3_0_AGGREGATION_ROUND: 0 + - GROUP_4_0_CIRCUIT_ID: 1 + - GROUP_4_0_AGGREGATION_ROUND: 0 + - GROUP_4_1_CIRCUIT_ID: 1 + - GROUP_4_1_AGGREGATION_ROUND: 0 + - GROUP_4_2_CIRCUIT_ID: 1 + - GROUP_4_2_AGGREGATION_ROUND: 0 + - GROUP_4_3_CIRCUIT_ID: 2 + - GROUP_4_3_AGGREGATION_ROUND: 0 + - GROUP_5_0_CIRCUIT_ID: 5 + - GROUP_5_0_AGGREGATION_ROUND: 0 + - GROUP_6_0_CIRCUIT_ID: 3 + - GROUP_6_0_AGGREGATION_ROUND: 1 + - GROUP_7_0_CIRCUIT_ID: 7 + - GROUP_7_0_AGGREGATION_ROUND: 0 + - GROUP_8_0_CIRCUIT_ID: 8 + - GROUP_8_0_AGGREGATION_ROUND: 0 + - GROUP_9_0_CIRCUIT_ID: 1 + - GROUP_9_0_AGGREGATION_ROUND: 1 + - GROUP_9_1_CIRCUIT_ID: 1 + - GROUP_9_1_AGGREGATION_ROUND: 1 + - GROUP_9_2_CIRCUIT_ID: 1 + - GROUP_9_2_AGGREGATION_ROUND: 1 + - GROUP_9_3_CIRCUIT_ID: 1 + - GROUP_9_3_AGGREGATION_ROUND: 1 + - GROUP_10_0_CIRCUIT_ID: 1 + - GROUP_10_0_AGGREGATION_ROUND: 0 + - GROUP_11_0_CIRCUIT_ID: 7 + - GROUP_11_0_AGGREGATION_ROUND: 1 + - GROUP_11_1_CIRCUIT_ID: 8 + - GROUP_11_1_AGGREGATION_ROUND: 1 + - GROUP_11_2_CIRCUIT_ID: 1 + - GROUP_11_2_AGGREGATION_ROUND: 1 + - GROUP_11_3_CIRCUIT_ID: 1 + - GROUP_11_3_AGGREGATION_ROUND: 1 + - GROUP_12_0_CIRCUIT_ID: 4 + - GROUP_12_0_AGGREGATION_ROUND: 1 + - GROUP_12_1_CIRCUIT_ID: 5 + - GROUP_12_1_AGGREGATION_ROUND: 1 + - GROUP_12_2_CIRCUIT_ID: 6 + - GROUP_12_2_AGGREGATION_ROUND: 1 + - GROUP_12_3_CIRCUIT_ID: 9 + - GROUP_12_3_AGGREGATION_ROUND: 1 +house_keeper: + - l1_batch_metrics_reporting_interval_ms: 10000 + - gpu_prover_queue_reporting_interval_ms: 10000 + - prover_job_retrying_interval_ms: 30000 + - witness_generator_job_retrying_interval_ms: 30000 + - prover_db_pool_size: 2 + - prover_stats_reporting_interval_ms: 30000 + - proof_compressor_job_retrying_interval_ms: 30000 + - proof_compressor_stats_reporting_interval_ms: 10000 + +consensus: + - config_path: etc/env/consensus_config.yaml + - secrets_path: etc/env/consensus_secrets.yaml + +monitoring: + log_format: plain + sentry_url: unset + sentry_panic_interval: 1800 + sentry_error_interval: 10800 + otlp_url: unset + sporadic_crypto_errors_substrs: + - "EventDestroyErr" + - "Can't free memory of DeviceBuf" + - "value: PoisonError" + +# Probably we can initialize it without envs +RUST_LOG: zksync_node_framework=info,zksync_consensus_bft=info,zksync_consensus_network=info,zksync_consensus_storage=info,zksync_core=debug,zksync_server=debug,zksync_contract_verifier=debug,zksync_dal=info,zksync_eth_client=info,zksync_storage=info,zksync_db_manager=info,zksync_merkle_tree=info,zksync_state=debug,zksync_utils=debug,zksync_queued_job_processor=info,zksync_types=info,zksync_mempool=debug,loadnext=info,vm=info,zksync_object_store=info,zksync_external_node=info,zksync_witness_generator=info,zksync_prover_fri=info,zksync_witness_vector_generator=info,zksync_health_check=debug,zksync_proof_fri_compressor=info,vise_exporter=debug,snapshots_creator=debug, +RUST_BACKTRACE: full +RUST_LIB_BACKTRACE: 1 + +# No need for server +CONTRACTS_PRIORITY_TX_MAX_GAS_LIMIT: 72000000 +CONTRACTS_TEST_EASY_PRIORITY_MODE: false diff --git a/etc/env/file_based/genesis.yaml b/etc/env/file_based/genesis.yaml new file mode 100644 index 00000000000..dbfdd07a7ec --- /dev/null +++ b/etc/env/file_based/genesis.yaml @@ -0,0 +1,20 @@ +genesis: + bootloader_hash: 0x010007ede999d096c84553fb514d3d6ca76fbf39789dda76bfeda9f3ae06236e + default_aa_hash: 0x0100055b041eb28aff6e3a6e0f37c31fd053fc9ef142683b05e5f0aee6934066 + fee_account_addr: 0xde03a0b5963f75f1c8485b355ff6d30f3093bde7 + root_hash: 0x436cf80dd02a7e1a1df65be6ec9ea231ccec97c44f4c8c9cd2aa26c2feb074cd + batch_commitment: 0x938016208176c5a49d47c8aa582b5d18afc4f159dfa099087770e0796948fd1a + rollup_last_leaf_index: 26 + protocol_version: 21 + l1_chain_id: 9 + l2_chain_id: 270 +prover: + recursion_leaf_level_vk_hash: 0x400a4b532c6f072c00d1806ef299300d4c104f4ac55bd8698ade78894fcadc0a + recursion_node_level_vk_hash: 0x5a3ef282b21e12fe1f4438e5bb158fc5060b160559c5158c6389d62d9fe3d080 + recursion_scheduler_level_vk_hash: 0x1405880dc3317d635bddb0ab62bf5d013e5d1f462161c1f7ac3289c7fef956da + snark_wrapper_vk_hash: 0x063c6fb5c70404c2867f413a8e35563ad3d040b1ad8c11786231bfdba7b472c7 + dummy_verifier: true +shared_bridge: + state_transition_proxy_addr: 0x0000000000000000000000000000000000000000 + bridgehub_proxy_addr: 0x0000000000000000000000000000000000000000 + transparent_proxy_admin_addr: 0x0000000000000000000000000000000000000000 diff --git a/etc/env/file_based/wallets.yaml b/etc/env/file_based/wallets.yaml new file mode 100644 index 00000000000..a4823fcfc15 --- /dev/null +++ b/etc/env/file_based/wallets.yaml @@ -0,0 +1,9 @@ +fee_account: + private_key: 0x27593fea79697e947890ecbecce7901b0008345e5d7259710d0dd5e500d040be + addr: 0x27593fea79697e947890ecbecce7901b0008345e5d7259710d0dd5e500d040be +operator: + private_key: 0x27593fea79697e947890ecbecce7901b0008345e5d7259710d0dd5e500d040be + addr: 0xde03a0b5963f75f1c8485b355ff6d30f3093bde7 +operator_blobs: + private_key: 0xe667e57a9b8aaa6709e51ff7d093f1c5b73b63f9987e4ab4aa9a5c699e024ee8 + addr: 0x4f9133d1d3f50011a6859807c837bdcb31aaab13 \ No newline at end of file From fa3b6b184bf1a79209a164d883e388ed1d050954 Mon Sep 17 00:00:00 2001 From: Danil Date: Tue, 19 Mar 2024 20:05:12 +0100 Subject: [PATCH 28/65] Use array Signed-off-by: Danil --- etc/env/file_based/general.yaml | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/etc/env/file_based/general.yaml b/etc/env/file_based/general.yaml index 1304706b4da..372565d3820 100644 --- a/etc/env/file_based/general.yaml +++ b/etc/env/file_based/general.yaml @@ -27,7 +27,27 @@ api: - gas_price_scale_factor: 1.2 - l1_to_l2_transactions_compatibility_mode: true - request_timeout: 10 - - account_pks: "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80,0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d,0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a,0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6,0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a,0x8b3a350cf5c34c9194ca85829a2df0ec3153be0318b5e2d3348e872092edffba,0x92db14e403b83dfe3df233f83dfa3a0d7096f21ca9b0d6d6b8d88b2b4ec1564e,0x4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356,0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97,0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6,0xf214f2b2cd398c806f84e317254e0f0b801d0643303237d97a22a48e01628897,0x701b615bbdfb9de65240bc28bd21bbc0d996645a3dd57e7b12bc2bdf6f192c82,0xa267530f49f8280200edf313ee7af6b827f2a8bce2897751d06a843f644967b1,0x47c99abed3324a2707c28affff1267e45918ec8c3f20b8aa892e8b065d2942dd,0xc526ee95bf44d8fc405a158bb884d9d1238d99f0612e9f33d006bb0789009aaa,0x8166f546bab6da521a8369cab06c5d2b9e46670292d85c875ee9ec20e84ffb61,0xea6c44ac03bff858b476bba40716402b03e41b8e97e276d1baec7c37d42484a0,0x689af8efa8c651a91ad287602527f3af2fe9f6501a7ac4b061667b5a93e037fd,0xde9be858da4a475276426320d5e9262ecfc3ba460bfac56360bfa6c4c28b4ee0,0xdf57089febbacf7ba0bc227dafbffa9fc08a93fdc68e1e42411a14efcf23656e" + - account_pks: + - 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 + - 0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d + - 0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a + - 0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6 + - 0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a + - 0x8b3a350cf5c34c9194ca85829a2df0ec3153be0318b5e2d3348e872092edffba + - 0x92db14e403b83dfe3df233f83dfa3a0d7096f21ca9b0d6d6b8d88b2b4ec1564e + - 0x4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356 + - 0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97 + - 0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6 + - 0xf214f2b2cd398c806f84e317254e0f0b801d0643303237d97a22a48e01628897 + - 0x701b615bbdfb9de65240bc28bd21bbc0d996645a3dd57e7b12bc2bdf6f192c82 + - 0xa267530f49f8280200edf313ee7af6b827f2a8bce2897751d06a843f644967b1 + - 0x47c99abed3324a2707c28affff1267e45918ec8c3f20b8aa892e8b065d2942dd + - 0xc526ee95bf44d8fc405a158bb884d9d1238d99f0612e9f33d006bb0789009aaa + - 0x8166f546bab6da521a8369cab06c5d2b9e46670292d85c875ee9ec20e84ffb61 + - 0xea6c44ac03bff858b476bba40716402b03e41b8e97e276d1baec7c37d42484a0 + - 0x689af8efa8c651a91ad287602527f3af2fe9f6501a7ac4b061667b5a93e037fd + - 0xde9be858da4a475276426320d5e9262ecfc3ba460bfac56360bfa6c4c28b4ee0 + - 0xdf57089febbacf7ba0bc227dafbffa9fc08a93fdc68e1e42411a14efcf23656e - estimate_gas_scale_factor: 1.2 - estimate_gas_acceptable_overestimation: 1000 - max_tx_size: 1000000 @@ -69,6 +89,7 @@ state_keeper: - mempool_capacity: 10000000 - mempool_stuck_tx_timeout: 86400 - mempool_remove_stuck_txs: true + contract_verifier: - compilation_timeout: 30 - polling_interval: 1000 @@ -76,6 +97,7 @@ contract_verifier: - port: 3070 - url: http://127.0.0.1:3070 - threads_per_server: 128 + circuit_breaker: - sync_interval_ms: 30000 - http_req_max_retry_number: 5 From b4618626ff4d935db8e1026ec4632f173ccefd70 Mon Sep 17 00:00:00 2001 From: Danil Date: Tue, 19 Mar 2024 20:12:12 +0100 Subject: [PATCH 29/65] Apply suggestions Signed-off-by: Danil --- .../src/api_server/execution_sandbox/tests.rs | 6 +- .../src/api_server/tx_sender/tests.rs | 4 +- .../src/api_server/web3/tests/mod.rs | 4 +- .../lib/zksync_core/src/consensus/testonly.rs | 4 +- .../src/consistency_checker/tests/mod.rs | 8 +-- core/lib/zksync_core/src/genesis.rs | 61 ++++++++++--------- .../src/metadata_calculator/helpers.rs | 10 +-- .../src/metadata_calculator/recovery/tests.rs | 4 +- .../src/metadata_calculator/tests.rs | 6 +- .../zksync_core/src/reorg_detector/tests.rs | 39 ++++++------ .../src/state_keeper/io/common/tests.rs | 17 +++--- .../src/state_keeper/mempool_actor.rs | 8 +-- .../sync_layer/batch_status_updater/tests.rs | 8 +-- core/lib/zksync_core/src/sync_layer/tests.rs | 4 +- core/lib/zksync_core/src/utils/mod.rs | 4 +- 15 files changed, 91 insertions(+), 96 deletions(-) diff --git a/core/lib/zksync_core/src/api_server/execution_sandbox/tests.rs b/core/lib/zksync_core/src/api_server/execution_sandbox/tests.rs index 7670887582d..d8eeba8f383 100644 --- a/core/lib/zksync_core/src/api_server/execution_sandbox/tests.rs +++ b/core/lib/zksync_core/src/api_server/execution_sandbox/tests.rs @@ -5,7 +5,7 @@ use assert_matches::assert_matches; use super::*; use crate::{ api_server::{execution_sandbox::apply::apply_vm_in_sandbox, tx_sender::ApiContracts}, - genesis::{ensure_genesis_state_unchecked, GenesisParams}, + genesis::{insert_genesis_batch, GenesisParams}, utils::testonly::{create_l2_transaction, create_miniblock, prepare_recovery_snapshot}, }; @@ -13,7 +13,7 @@ use crate::{ async fn creating_block_args() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) + insert_genesis_batch(&mut storage, &GenesisParams::mock()) .await .unwrap(); let miniblock = create_miniblock(1); @@ -160,7 +160,7 @@ async fn creating_block_args_after_snapshot_recovery() { async fn instantiating_vm() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) + insert_genesis_batch(&mut storage, &GenesisParams::mock()) .await .unwrap(); diff --git a/core/lib/zksync_core/src/api_server/tx_sender/tests.rs b/core/lib/zksync_core/src/api_server/tx_sender/tests.rs index 0eebdd5e11f..29eaa37e6a8 100644 --- a/core/lib/zksync_core/src/api_server/tx_sender/tests.rs +++ b/core/lib/zksync_core/src/api_server/tx_sender/tests.rs @@ -5,7 +5,7 @@ use zksync_types::{get_nonce_key, L1BatchNumber, StorageLog}; use super::*; use crate::{ api_server::execution_sandbox::{testonly::MockTransactionExecutor, VmConcurrencyBarrier}, - genesis::{ensure_genesis_state_unchecked, GenesisParams}, + genesis::{insert_genesis_batch, GenesisParams}, utils::testonly::{create_miniblock, prepare_recovery_snapshot, MockBatchFeeParamsProvider}, }; @@ -41,7 +41,7 @@ async fn getting_nonce_for_account() { let test_address = Address::repeat_byte(1); let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) + insert_genesis_batch(&mut storage, &GenesisParams::mock()) .await .unwrap(); // Manually insert a nonce for the address. diff --git a/core/lib/zksync_core/src/api_server/web3/tests/mod.rs b/core/lib/zksync_core/src/api_server/web3/tests/mod.rs index 6e77124ac77..bc8d0544fb1 100644 --- a/core/lib/zksync_core/src/api_server/web3/tests/mod.rs +++ b/core/lib/zksync_core/src/api_server/web3/tests/mod.rs @@ -47,7 +47,7 @@ use crate::{ execution_sandbox::testonly::MockTransactionExecutor, tx_sender::tests::create_test_tx_sender, }, - genesis::{ensure_genesis_state_unchecked, mock_genesis_config, GenesisParams}, + genesis::{insert_genesis_batch, mock_genesis_config, GenesisParams}, utils::testonly::{ create_l1_batch, create_l1_batch_metadata, create_l2_transaction, create_miniblock, l1_batch_metadata_to_commitment_artifacts, prepare_recovery_snapshot, @@ -246,7 +246,7 @@ impl StorageInitialization { }) .unwrap(); if storage.blocks_dal().is_genesis_needed().await? { - ensure_genesis_state_unchecked(storage, ¶ms).await?; + insert_genesis_batch(storage, ¶ms).await?; } } Self::Recovery { logs, factory_deps } => { diff --git a/core/lib/zksync_core/src/consensus/testonly.rs b/core/lib/zksync_core/src/consensus/testonly.rs index fffe36afaef..547d99c98a3 100644 --- a/core/lib/zksync_core/src/consensus/testonly.rs +++ b/core/lib/zksync_core/src/consensus/testonly.rs @@ -20,7 +20,7 @@ use zksync_web3_decl::{ use crate::{ api_server::web3::{state::InternalApiConfig, tests::spawn_http_server}, consensus::{fetcher::P2PConfig, Fetcher, Store}, - genesis::{ensure_genesis_state_unchecked, GenesisParams}, + genesis::{insert_genesis_batch, GenesisParams}, state_keeper::{ io::common::IoCursor, seal_criteria::NoopSealer, tests::MockBatchExecutor, MiniblockSealer, ZkSyncStateKeeper, @@ -194,7 +194,7 @@ pub(super) async fn new_store(from_snapshot: bool) -> Store { prepare_recovery_snapshot(&mut storage, L1BatchNumber(23), MiniblockNumber(42), &[]) .await; } else { - ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) + insert_genesis_batch(&mut storage, &GenesisParams::mock()) .await .unwrap(); } diff --git a/core/lib/zksync_core/src/consistency_checker/tests/mod.rs b/core/lib/zksync_core/src/consistency_checker/tests/mod.rs index 7d5373a1015..eece47b87d1 100644 --- a/core/lib/zksync_core/src/consistency_checker/tests/mod.rs +++ b/core/lib/zksync_core/src/consistency_checker/tests/mod.rs @@ -17,7 +17,7 @@ use zksync_types::{ use super::*; use crate::{ - genesis::{ensure_genesis_state_unchecked, mock_genesis_config, GenesisParams}, + genesis::{insert_genesis_batch, mock_genesis_config, GenesisParams}, utils::testonly::{ create_l1_batch, create_l1_batch_metadata, l1_batch_metadata_to_commitment_artifacts, }, @@ -364,7 +364,7 @@ async fn normal_checker_function( let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) + insert_genesis_batch(&mut storage, &GenesisParams::mock()) .await .unwrap(); @@ -439,7 +439,7 @@ async fn checker_processes_pre_boojum_batches( ..mock_genesis_config() }) .unwrap(); - ensure_genesis_state_unchecked(&mut storage, &genesis_params) + insert_genesis_batch(&mut storage, &genesis_params) .await .unwrap(); storage @@ -687,7 +687,7 @@ async fn checker_detects_incorrect_tx_data(kind: IncorrectDataKind, snapshot_rec .save_protocol_version_with_tx(ProtocolVersion::default()) .await; } else { - ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) + insert_genesis_batch(&mut storage, &GenesisParams::mock()) .await .unwrap(); } diff --git a/core/lib/zksync_core/src/genesis.rs b/core/lib/zksync_core/src/genesis.rs index f3291c4a047..e2b574e5168 100644 --- a/core/lib/zksync_core/src/genesis.rs +++ b/core/lib/zksync_core/src/genesis.rs @@ -38,14 +38,14 @@ use crate::metadata_calculator::L1BatchWithLogs; #[derive(Debug, thiserror::Error)] pub enum GenesisError { - #[error("Root hash mismatched {0:?}")] - RootHash(H256), - #[error("Leaf indexes mismatched {0}")] - LeafIndexes(u64), - #[error("Base system contracts mismatched {0:?}")] - BaseSystemContractsHashes(BaseSystemContractsHashes), - #[error("Commitment mismatched {0:?}")] - Commitment(H256), + #[error("Root hash mismatched: From Config: {0:?}, Calculated {1:?}")] + RootHash(H256, H256), + #[error("Leaf indexes mismatched: From Config: {0:?}, Calculated {1:?}")] + LeafIndexes(u64, u64), + #[error("Base system contracts mismatched: From Config: {0:?}, Calculated {1:?}")] + BaseSystemContractsHashes(BaseSystemContractsHashes, BaseSystemContractsHashes), + #[error("Commitment mismatched: From Config: {0:?}, Calculated {1:?}")] + Commitment(H256, H256), #[error("Wrong protocol version")] ProtocolVersion, #[error("Error: {0}")] @@ -114,10 +114,10 @@ impl GenesisParams { pub fn protocol_version(&self) -> ProtocolVersionId { // It's impossible to instantiate Genesis params with wrong protocol version - self.config.protocol_version.try_into().expect( - "Protocol version must be correctly \ - initialized for genesis", - ) + self.config + .protocol_version + .try_into() + .expect("Protocol version must be correctly initialized for genesis") } } @@ -148,14 +148,11 @@ pub fn mock_genesis_config() -> GenesisConfig { } } -// This function is dangerous, -// it doesn't enforce genesis correctness -// Please, always use `ensure_genesis_state` instead -pub async fn ensure_genesis_state_unchecked( +// Insert genesis batch into the database +pub async fn insert_genesis_batch( storage: &mut StorageProcessor<'_>, genesis_params: &GenesisParams, ) -> Result<(H256, H256, u64), GenesisError> { - tracing::info!("running regenesis"); let mut transaction = storage.start_transaction().await?; let verifier_config = L1VerifierConfig { params: VerifierParams { @@ -229,18 +226,28 @@ pub async fn ensure_genesis_state( .context("genesis L1 batch hash is empty")?); } + tracing::info!("running regenesis"); let (genesis_root_hash, commitment, rollup_last_leaf_index) = - ensure_genesis_state_unchecked(&mut transaction, genesis_params).await?; + insert_genesis_batch(&mut transaction, genesis_params).await?; if genesis_params.config.genesis_root_hash != genesis_root_hash { - return Err(GenesisError::RootHash(genesis_root_hash)); + return Err(GenesisError::RootHash( + genesis_params.config.genesis_root_hash, + genesis_root_hash, + )); } if genesis_params.config.genesis_commitment != commitment { - return Err(GenesisError::Commitment(commitment)); + return Err(GenesisError::Commitment( + genesis_params.config.genesis_commitment, + commitment, + )); } if genesis_params.config.rollup_last_leaf_index != rollup_last_leaf_index { - return Err(GenesisError::LeafIndexes(rollup_last_leaf_index)); + return Err(GenesisError::LeafIndexes( + genesis_params.config.rollup_last_leaf_index, + rollup_last_leaf_index, + )); } tracing::info!("operations_schema_genesis is complete"); @@ -577,9 +584,7 @@ mod tests { let params = GenesisParams::mock(); - ensure_genesis_state_unchecked(&mut conn, ¶ms) - .await - .unwrap(); + insert_genesis_batch(&mut conn, ¶ms).await.unwrap(); assert!(!conn.blocks_dal().is_genesis_needed().await.unwrap()); let metadata = conn @@ -605,9 +610,7 @@ mod tests { ..mock_genesis_config() }) .unwrap(); - ensure_genesis_state_unchecked(&mut conn, ¶ms) - .await - .unwrap(); + insert_genesis_batch(&mut conn, ¶ms).await.unwrap(); assert!(!conn.blocks_dal().is_genesis_needed().await.unwrap()); let metadata = conn @@ -628,9 +631,7 @@ mod tests { }) .unwrap(); - ensure_genesis_state_unchecked(&mut conn, ¶ms) - .await - .unwrap(); + insert_genesis_batch(&mut conn, ¶ms).await.unwrap(); assert!(!conn.blocks_dal().is_genesis_needed().await.unwrap()); } } diff --git a/core/lib/zksync_core/src/metadata_calculator/helpers.rs b/core/lib/zksync_core/src/metadata_calculator/helpers.rs index f55010fd209..bf9dfea51be 100644 --- a/core/lib/zksync_core/src/metadata_calculator/helpers.rs +++ b/core/lib/zksync_core/src/metadata_calculator/helpers.rs @@ -484,7 +484,7 @@ mod tests { use super::*; use crate::{ - genesis::{ensure_genesis_state_unchecked, GenesisParams}, + genesis::{insert_genesis_batch, GenesisParams}, metadata_calculator::tests::{extend_db_state, gen_storage_logs, reset_db_state}, }; @@ -561,7 +561,7 @@ mod tests { #[tokio::test] async fn loaded_logs_equivalence_basics() { let pool = ConnectionPool::test_pool().await; - ensure_genesis_state_unchecked( + insert_genesis_batch( &mut pool.access_storage().await.unwrap(), &GenesisParams::mock(), ) @@ -586,7 +586,7 @@ mod tests { async fn loaded_logs_equivalence_with_zero_no_op_logs() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) + insert_genesis_batch(&mut storage, &GenesisParams::mock()) .await .unwrap(); @@ -677,7 +677,7 @@ mod tests { async fn loaded_logs_equivalence_with_non_zero_no_op_logs() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) + insert_genesis_batch(&mut storage, &GenesisParams::mock()) .await .unwrap(); @@ -724,7 +724,7 @@ mod tests { async fn loaded_logs_equivalence_with_protective_reads() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) + insert_genesis_batch(&mut storage, &GenesisParams::mock()) .await .unwrap(); diff --git a/core/lib/zksync_core/src/metadata_calculator/recovery/tests.rs b/core/lib/zksync_core/src/metadata_calculator/recovery/tests.rs index bd5fee39d07..c1663c989cd 100644 --- a/core/lib/zksync_core/src/metadata_calculator/recovery/tests.rs +++ b/core/lib/zksync_core/src/metadata_calculator/recovery/tests.rs @@ -16,7 +16,7 @@ use zksync_types::{L1BatchNumber, ProtocolVersionId, StorageLog}; use super::*; use crate::{ - genesis::{ensure_genesis_state_unchecked, GenesisParams}, + genesis::{insert_genesis_batch, GenesisParams}, metadata_calculator::{ helpers::create_db, tests::{ @@ -97,7 +97,7 @@ async fn prepare_recovery_snapshot_with_genesis( temp_dir: &TempDir, ) -> SnapshotRecoveryStatus { let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) + insert_genesis_batch(&mut storage, &GenesisParams::mock()) .await .unwrap(); let mut logs = gen_storage_logs(100..300, 1).pop().unwrap(); diff --git a/core/lib/zksync_core/src/metadata_calculator/tests.rs b/core/lib/zksync_core/src/metadata_calculator/tests.rs index ce64f6155cd..26a855d456e 100644 --- a/core/lib/zksync_core/src/metadata_calculator/tests.rs +++ b/core/lib/zksync_core/src/metadata_calculator/tests.rs @@ -23,7 +23,7 @@ use zksync_utils::u32_to_h256; use super::{GenericAsyncTree, L1BatchWithLogs, MetadataCalculator, MetadataCalculatorConfig}; use crate::{ - genesis::{ensure_genesis_state_unchecked, GenesisParams}, + genesis::{insert_genesis_batch, GenesisParams}, utils::testonly::{create_l1_batch, create_miniblock}, }; @@ -400,7 +400,7 @@ async fn setup_calculator_with_options( let mut storage = pool.access_storage().await.unwrap(); if storage.blocks_dal().is_genesis_needed().await.unwrap() { - ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) + insert_genesis_batch(&mut storage, &GenesisParams::mock()) .await .unwrap(); } @@ -631,7 +631,7 @@ async fn remove_l1_batches( async fn deduplication_works_as_expected() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) + insert_genesis_batch(&mut storage, &GenesisParams::mock()) .await .unwrap(); diff --git a/core/lib/zksync_core/src/reorg_detector/tests.rs b/core/lib/zksync_core/src/reorg_detector/tests.rs index c646602db3c..6ffb23abea6 100644 --- a/core/lib/zksync_core/src/reorg_detector/tests.rs +++ b/core/lib/zksync_core/src/reorg_detector/tests.rs @@ -17,7 +17,7 @@ use zksync_web3_decl::jsonrpsee::core::ClientError as RpcError; use super::*; use crate::{ - genesis::{ensure_genesis_state_unchecked, GenesisParams}, + genesis::{insert_genesis_batch, GenesisParams}, utils::testonly::{create_l1_batch, create_miniblock}, }; @@ -175,10 +175,9 @@ async fn normal_reorg_function(snapshot_recovery: bool, with_transient_errors: b .save_protocol_version_with_tx(ProtocolVersion::default()) .await; } else { - let (genesis_root_hash, ..) = - ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) - .await - .unwrap(); + let (genesis_root_hash, ..) = insert_genesis_batch(&mut storage, &GenesisParams::mock()) + .await + .unwrap(); client.miniblock_hashes.insert( MiniblockNumber(0), MiniblockHasher::legacy_hash(MiniblockNumber(0)), @@ -252,7 +251,7 @@ async fn normal_reorg_function(snapshot_recovery: bool, with_transient_errors: b async fn detector_stops_on_fatal_rpc_error() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) + insert_genesis_batch(&mut storage, &GenesisParams::mock()) .await .unwrap(); @@ -269,10 +268,9 @@ async fn detector_stops_on_fatal_rpc_error() { async fn reorg_is_detected_on_batch_hash_mismatch() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - let (genesis_root_hash, ..) = - ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) - .await - .unwrap(); + let (genesis_root_hash, ..) = insert_genesis_batch(&mut storage, &GenesisParams::mock()) + .await + .unwrap(); let mut client = MockMainNodeClient::default(); client.miniblock_hashes.insert( MiniblockNumber(0), @@ -316,10 +314,9 @@ async fn reorg_is_detected_on_miniblock_hash_mismatch() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); let mut client = MockMainNodeClient::default(); - let (genesis_root_hash, ..) = - ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) - .await - .unwrap(); + let (genesis_root_hash, ..) = insert_genesis_batch(&mut storage, &GenesisParams::mock()) + .await + .unwrap(); client.miniblock_hashes.insert( MiniblockNumber(0), MiniblockHasher::legacy_hash(MiniblockNumber(0)), @@ -480,10 +477,9 @@ async fn stopping_reorg_detector_while_waiting_for_l1_batch() { async fn detector_errors_on_earliest_batch_hash_mismatch() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - let (genesis_root_hash, ..) = - ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) - .await - .unwrap(); + let (genesis_root_hash, ..) = insert_genesis_batch(&mut storage, &GenesisParams::mock()) + .await + .unwrap(); assert_ne!(genesis_root_hash, H256::zero()); let mut client = MockMainNodeClient::default(); @@ -534,10 +530,9 @@ async fn detector_errors_on_earliest_batch_hash_mismatch_with_snapshot_recovery( async fn reorg_is_detected_without_waiting_for_main_node_to_catch_up() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - let (genesis_root_hash, ..) = - ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) - .await - .unwrap(); + let (genesis_root_hash, ..) = insert_genesis_batch(&mut storage, &GenesisParams::mock()) + .await + .unwrap(); // Fill in local storage with some data, so that it's ahead of the main node. for number in 1..5 { store_miniblock(&mut storage, number, H256::zero()).await; diff --git a/core/lib/zksync_core/src/state_keeper/io/common/tests.rs b/core/lib/zksync_core/src/state_keeper/io/common/tests.rs index 0121ff848f0..4fa68e2f647 100644 --- a/core/lib/zksync_core/src/state_keeper/io/common/tests.rs +++ b/core/lib/zksync_core/src/state_keeper/io/common/tests.rs @@ -17,7 +17,7 @@ use zksync_types::{ use super::*; use crate::{ - genesis::{ensure_genesis_state_unchecked, mock_genesis_config, GenesisParams}, + genesis::{insert_genesis_batch, mock_genesis_config, GenesisParams}, utils::testonly::{ create_l1_batch, create_l2_transaction, create_miniblock, execute_l2_transaction, prepare_recovery_snapshot, @@ -38,7 +38,7 @@ fn test_poll_iters() { async fn creating_io_cursor_with_genesis() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) + insert_genesis_batch(&mut storage, &GenesisParams::mock()) .await .unwrap(); @@ -103,10 +103,9 @@ async fn creating_io_cursor_with_snapshot_recovery() { async fn waiting_for_l1_batch_params_with_genesis() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - let (genesis_root_hash, ..) = - ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) - .await - .unwrap(); + let (genesis_root_hash, ..) = insert_genesis_batch(&mut storage, &GenesisParams::mock()) + .await + .unwrap(); let provider = L1BatchParamsProvider::new(&mut storage).await.unwrap(); let (hash, timestamp) = provider @@ -191,7 +190,7 @@ async fn waiting_for_l1_batch_params_after_snapshot_recovery() { async fn getting_first_miniblock_in_batch_with_genesis() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) + insert_genesis_batch(&mut storage, &GenesisParams::mock()) .await .unwrap(); @@ -312,7 +311,7 @@ async fn loading_pending_batch_with_genesis() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); let genesis_params = GenesisParams::mock(); - ensure_genesis_state_unchecked(&mut storage, &genesis_params) + insert_genesis_batch(&mut storage, &genesis_params) .await .unwrap(); store_pending_miniblocks( @@ -450,7 +449,7 @@ async fn getting_batch_version_with_genesis() { }) .unwrap(); - ensure_genesis_state_unchecked(&mut storage, &genesis_params) + insert_genesis_batch(&mut storage, &genesis_params) .await .unwrap(); diff --git a/core/lib/zksync_core/src/state_keeper/mempool_actor.rs b/core/lib/zksync_core/src/state_keeper/mempool_actor.rs index 890e94cbc9d..3d721a6f383 100644 --- a/core/lib/zksync_core/src/state_keeper/mempool_actor.rs +++ b/core/lib/zksync_core/src/state_keeper/mempool_actor.rs @@ -168,7 +168,7 @@ mod tests { use super::*; use crate::{ - genesis::{ensure_genesis_state_unchecked, GenesisParams}, + genesis::{insert_genesis_batch, GenesisParams}, utils::testonly::{create_l2_transaction, MockBatchFeeParamsProvider}, }; @@ -219,7 +219,7 @@ mod tests { async fn syncing_mempool_basics() { let pool = ConnectionPool::constrained_test_pool(1).await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) + insert_genesis_batch(&mut storage, &GenesisParams::mock()) .await .unwrap(); drop(storage); @@ -276,7 +276,7 @@ mod tests { async fn ignoring_transaction_with_insufficient_fee() { let pool = ConnectionPool::constrained_test_pool(1).await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) + insert_genesis_batch(&mut storage, &GenesisParams::mock()) .await .unwrap(); drop(storage); @@ -316,7 +316,7 @@ mod tests { async fn ignoring_transaction_with_old_nonce() { let pool = ConnectionPool::constrained_test_pool(1).await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) + insert_genesis_batch(&mut storage, &GenesisParams::mock()) .await .unwrap(); drop(storage); diff --git a/core/lib/zksync_core/src/sync_layer/batch_status_updater/tests.rs b/core/lib/zksync_core/src/sync_layer/batch_status_updater/tests.rs index 3bd02297137..1a6d90c6343 100644 --- a/core/lib/zksync_core/src/sync_layer/batch_status_updater/tests.rs +++ b/core/lib/zksync_core/src/sync_layer/batch_status_updater/tests.rs @@ -10,7 +10,7 @@ use zksync_types::{Address, ProtocolVersionId}; use super::*; use crate::{ - genesis::{ensure_genesis_state_unchecked, GenesisParams}, + genesis::{insert_genesis_batch, GenesisParams}, sync_layer::metrics::L1BatchStage, utils::testonly::{create_l1_batch, create_miniblock, prepare_recovery_snapshot}, }; @@ -226,7 +226,7 @@ fn mock_updater( async fn updater_cursor_for_storage_with_genesis_block() { let pool = ConnectionPool::test_pool().await; let mut storage = pool.access_storage().await.unwrap(); - ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) + insert_genesis_batch(&mut storage, &GenesisParams::mock()) .await .unwrap(); for number in [1, 2] { @@ -278,7 +278,7 @@ async fn normal_updater_operation(snapshot_recovery: bool, async_batches: bool) prepare_recovery_snapshot(&mut storage, L1BatchNumber(23), MiniblockNumber(42), &[]).await; L1BatchNumber(24) } else { - ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) + insert_genesis_batch(&mut storage, &GenesisParams::mock()) .await .unwrap(); L1BatchNumber(1) @@ -350,7 +350,7 @@ async fn updater_with_gradual_main_node_updates(snapshot_recovery: bool) { prepare_recovery_snapshot(&mut storage, L1BatchNumber(23), MiniblockNumber(42), &[]).await; L1BatchNumber(24) } else { - ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) + insert_genesis_batch(&mut storage, &GenesisParams::mock()) .await .unwrap(); L1BatchNumber(1) diff --git a/core/lib/zksync_core/src/sync_layer/tests.rs b/core/lib/zksync_core/src/sync_layer/tests.rs index 7511d571e8e..1439e500029 100644 --- a/core/lib/zksync_core/src/sync_layer/tests.rs +++ b/core/lib/zksync_core/src/sync_layer/tests.rs @@ -21,7 +21,7 @@ use zksync_types::{ use super::{fetcher::FetchedTransaction, sync_action::SyncAction, *}; use crate::{ consensus::testonly::MockMainNodeClient, - genesis::{ensure_genesis_state_unchecked, GenesisParams}, + genesis::{insert_genesis_batch, GenesisParams}, state_keeper::{ seal_criteria::NoopSealer, tests::TestBatchExecutorBuilder, MiniblockSealer, ZkSyncStateKeeper, @@ -127,7 +127,7 @@ impl StateKeeperHandles { async fn ensure_genesis(storage: &mut StorageProcessor<'_>) { if storage.blocks_dal().is_genesis_needed().await.unwrap() { - ensure_genesis_state_unchecked(storage, &GenesisParams::mock()) + insert_genesis_batch(storage, &GenesisParams::mock()) .await .unwrap(); } diff --git a/core/lib/zksync_core/src/utils/mod.rs b/core/lib/zksync_core/src/utils/mod.rs index 57faf0e743a..fcd98463f91 100644 --- a/core/lib/zksync_core/src/utils/mod.rs +++ b/core/lib/zksync_core/src/utils/mod.rs @@ -167,7 +167,7 @@ pub(crate) async fn pending_protocol_version( mod tests { use super::*; - use crate::genesis::{ensure_genesis_state_unchecked, GenesisParams}; + use crate::genesis::{insert_genesis_batch, GenesisParams}; #[tokio::test] async fn test_binary_search() { @@ -187,7 +187,7 @@ mod tests { tokio::spawn(async move { tokio::time::sleep(Duration::from_millis(25)).await; let mut storage = pool_copy.access_storage().await.unwrap(); - ensure_genesis_state_unchecked(&mut storage, &GenesisParams::mock()) + insert_genesis_batch(&mut storage, &GenesisParams::mock()) .await .unwrap(); }); From 52535a83cf41deae81543ee5afa03006faefde84 Mon Sep 17 00:00:00 2001 From: Danil Date: Wed, 20 Mar 2024 16:01:29 +0100 Subject: [PATCH 30/65] feat(configs): Proto implementation Signed-off-by: Danil --- core/bin/zksync_server/src/main.rs | 36 ++- core/lib/config/src/configs/contracts.rs | 34 +++ core/lib/config/src/configs/genesis.rs | 11 +- core/lib/config/src/configs/mod.rs | 2 +- core/lib/config/src/testonly.rs | 16 +- core/lib/env_config/src/genesis.rs | 4 +- .../eth_client/src/clients/http/signing.rs | 10 +- core/lib/protobuf_config/src/contracts.rs | 228 ++++-------------- core/lib/protobuf_config/src/genesis.rs | 114 +++++++++ core/lib/protobuf_config/src/lib.rs | 1 + .../protobuf_config/src/proto/contracts.proto | 63 +++-- .../protobuf_config/src/proto/genesis.proto | 31 +++ .../zksync_core/src/api_server/web3/state.rs | 9 +- core/lib/zksync_core/src/genesis.rs | 6 +- core/lib/zksync_core/src/lib.rs | 12 +- .../zksync_core/src/proof_data_handler/mod.rs | 20 +- core/lib/zksync_core/src/proto/mod.proto | 2 +- .../batch_executor/tests/tester.rs | 1 - .../src/state_keeper/io/tests/tester.rs | 1 - core/lib/zksync_core/src/state_keeper/mod.rs | 7 +- .../lib/zksync_core/src/sync_layer/genesis.rs | 5 +- .../zksync_core/src/temp_config_store/mod.rs | 9 +- .../node/node_framework/examples/main_node.rs | 1 - .../src/implementations/layers/eth_sender.rs | 7 +- .../layers/pk_signing_eth_client.rs | 8 +- .../layers/proof_data_handler.rs | 10 +- etc/env/file_based/contracts.yaml | 14 +- etc/env/file_based/genesis.yaml | 21 +- 28 files changed, 370 insertions(+), 313 deletions(-) create mode 100644 core/lib/protobuf_config/src/genesis.rs create mode 100644 core/lib/protobuf_config/src/proto/genesis.proto diff --git a/core/bin/zksync_server/src/main.rs b/core/bin/zksync_server/src/main.rs index 1efe717a362..371beaf76e8 100644 --- a/core/bin/zksync_server/src/main.rs +++ b/core/bin/zksync_server/src/main.rs @@ -1,4 +1,4 @@ -use std::{str::FromStr, time::Duration}; +use std::{path::PathBuf, str::FromStr, time::Duration}; use anyhow::Context as _; use clap::Parser; @@ -11,15 +11,16 @@ use zksync_config::{ }, fri_prover_group::FriProverGroupConfig, house_keeper::HouseKeeperConfig, - FriProofCompressorConfig, FriProverConfig, FriWitnessGeneratorConfig, ObservabilityConfig, - PrometheusConfig, ProofDataHandlerConfig, WitnessGeneratorConfig, + ContractsConfigReduced, FriProofCompressorConfig, FriProverConfig, + FriWitnessGeneratorConfig, ObservabilityConfig, PrometheusConfig, ProofDataHandlerConfig, + WitnessGeneratorConfig, }, ApiConfig, ContractsConfig, DBConfig, ETHClientConfig, ETHSenderConfig, ETHWatchConfig, GasAdjusterConfig, GenesisConfig, ObjectStoreConfig, PostgresConfig, }; use zksync_core::{ genesis, genesis_init, initialize_components, is_genesis_needed, setup_sigint_handler, - temp_config_store::{decode_yaml, Secrets, TempConfigStore}, + temp_config_store::{decode_yaml, decode_yaml_repr, Secrets, TempConfigStore}, Component, Components, }; use zksync_env_config::FromEnv; @@ -31,7 +32,6 @@ mod config; #[cfg(not(target_env = "msvc"))] #[global_allocator] static GLOBAL: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc; - #[derive(Debug, Parser)] #[command(author = "Matter Labs", version, about = "zkSync operator node", long_about = None)] struct Cli { @@ -56,6 +56,9 @@ struct Cli { /// Path to the yaml with secrets. If set, it will be used instead of env vars. #[arg(long)] secrets_path: Option, + /// Path to the yaml with secrets. If set, it will be used instead of env vars. + #[arg(long)] + contracts_config_path: Option, } #[derive(Debug, Clone)] @@ -131,7 +134,6 @@ async fn main() -> anyhow::Result<()> { proof_data_handler_config: ProofDataHandlerConfig::from_env().ok(), witness_generator_config: WitnessGeneratorConfig::from_env().ok(), api_config: ApiConfig::from_env().ok(), - contracts_config: ContractsConfig::from_env().ok(), db_config: DBConfig::from_env().ok(), eth_client_config: ETHClientConfig::from_env().ok(), eth_sender_config: ETHSenderConfig::from_env().ok(), @@ -152,6 +154,17 @@ async fn main() -> anyhow::Result<()> { }, }; + let contracts_config: ContractsConfigReduced = match opt.contracts_config_path { + None => ContractsConfig::from_env() + .context("contracts_config")? + .into(), + Some(path) => { + let yaml = + std::fs::read_to_string(&path).with_context(|| path.display().to_string())?; + decode_yaml_repr(&yaml).context("failed decoding YAML config")? + } + }; + // let contracts_config: ContractsConfigReduced = contracts_config.into(); let postgres_config = configs.postgres_config.clone().context("PostgresConfig")?; if opt.genesis || is_genesis_needed(&postgres_config).await { @@ -166,12 +179,13 @@ async fn main() -> anyhow::Result<()> { if opt.set_chain_id { let eth_client = ETHClientConfig::from_env().context("EthClientConfig")?; - let contracts = ContractsConfig::from_env().context("ContractsConfig")?; - if let Some(state_transition_proxy_addr) = contracts.state_transition_proxy_addr { + let genesis = GenesisConfig::from_env().context("Genesis config")?; + + if let Some(bridge) = genesis.shared_bridge { genesis::save_set_chain_id_tx( ð_client.web3_url, - contracts.diamond_proxy_addr, - state_transition_proxy_addr, + contracts_config.diamond_proxy_addr, + bridge.state_transition_proxy_addr, &postgres_config, ) .await @@ -187,7 +201,7 @@ async fn main() -> anyhow::Result<()> { // Run core actors. let (core_task_handles, stop_sender, cb_receiver, health_check_handle) = - initialize_components(&configs, components, &secrets) + initialize_components(&configs, &contracts_config, components, &secrets) .await .context("Unable to start Core actors")?; diff --git a/core/lib/config/src/configs/contracts.rs b/core/lib/config/src/configs/contracts.rs index 3d0c0c50c04..9969271538b 100644 --- a/core/lib/config/src/configs/contracts.rs +++ b/core/lib/config/src/configs/contracts.rs @@ -92,3 +92,37 @@ impl ContractsConfig { } } } + +impl From for ContractsConfigReduced { + fn from(value: ContractsConfig) -> Self { + Self { + governance_addr: value.governance_addr, + verifier_addr: value.verifier_addr, + default_upgrade_addr: value.diamond_upgrade_init_addr, + diamond_proxy_addr: value.diamond_proxy_addr, + validator_timelock_addr: value.validator_timelock_addr, + l1_erc20_bridge_proxy_addr: value.l1_erc20_bridge_proxy_addr, + l2_erc20_bridge_addr: value.l2_erc20_bridge_addr, + l1_weth_bridge_proxy_addr: value.l1_weth_bridge_proxy_addr, + l2_weth_bridge_addr: value.l2_weth_bridge_addr, + l2_testnet_paymaster_addr: value.l2_testnet_paymaster_addr, + l1_multicall3_addr: value.l1_multicall3_addr, + } + } +} + +/// Data about deployed contracts. +#[derive(Debug, Deserialize, Clone, PartialEq)] +pub struct ContractsConfigReduced { + pub governance_addr: Address, + pub verifier_addr: Address, + pub default_upgrade_addr: Address, + pub diamond_proxy_addr: Address, + pub validator_timelock_addr: Address, + pub l1_erc20_bridge_proxy_addr: Address, + pub l2_erc20_bridge_addr: Address, + pub l1_weth_bridge_proxy_addr: Option
, + pub l2_weth_bridge_addr: Option
, + pub l2_testnet_paymaster_addr: Option
, + pub l1_multicall3_addr: Address, +} diff --git a/core/lib/config/src/configs/genesis.rs b/core/lib/config/src/configs/genesis.rs index 1a18de6430c..d5a20d13244 100644 --- a/core/lib/config/src/configs/genesis.rs +++ b/core/lib/config/src/configs/genesis.rs @@ -1,6 +1,13 @@ use serde::{Deserialize, Serialize}; use zksync_basic_types::{Address, L1ChainId, L2ChainId, H256}; +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct SharedBridge { + pub bridgehub_proxy_addr: Address, + pub state_transition_proxy_addr: Address, + pub transparent_proxy_admin_addr: Address, +} + /// This config represents the genesis state of the chain. /// Each chain has this config immutable and we update it only during the protocol upgrade #[derive(Debug, Serialize, Deserialize, Clone)] @@ -11,11 +18,13 @@ pub struct GenesisConfig { pub genesis_commitment: H256, pub bootloader_hash: H256, pub default_aa_hash: H256, - pub fee_account: Address, pub l1_chain_id: L1ChainId, pub l2_chain_id: L2ChainId, pub recursion_node_level_vk_hash: H256, pub recursion_leaf_level_vk_hash: H256, pub recursion_circuits_set_vks_hash: H256, pub recursion_scheduler_level_vk_hash: H256, + pub snark_wrapper_vk_hash: H256, + pub shared_bridge: Option, + pub dummy_prover: bool, } diff --git a/core/lib/config/src/configs/mod.rs b/core/lib/config/src/configs/mod.rs index d5b86eed313..8e725243047 100644 --- a/core/lib/config/src/configs/mod.rs +++ b/core/lib/config/src/configs/mod.rs @@ -3,7 +3,7 @@ pub use self::{ alerts::AlertsConfig, api::ApiConfig, contract_verifier::ContractVerifierConfig, - contracts::ContractsConfig, + contracts::{ContractsConfig, ContractsConfigReduced}, database::{DBConfig, PostgresConfig}, eth_client::ETHClientConfig, eth_sender::{ETHSenderConfig, GasAdjusterConfig}, diff --git a/core/lib/config/src/testonly.rs b/core/lib/config/src/testonly.rs index c45d8d529c7..a659df3fb2e 100644 --- a/core/lib/config/src/testonly.rs +++ b/core/lib/config/src/testonly.rs @@ -5,7 +5,7 @@ use zksync_basic_types::{ basic_fri_types::CircuitIdRoundTuple, network::Network, Address, L1ChainId, L2ChainId, H256, }; -use crate::configs::{self, eth_sender::PubdataSendingMode}; +use crate::configs::{self, eth_sender::PubdataSendingMode, genesis::SharedBridge}; /// Generator of random configs. pub struct Gen<'a, R: Rng> { @@ -760,13 +760,25 @@ impl RandomConfig for configs::GenesisConfig { genesis_commitment: g.gen(), bootloader_hash: g.gen(), default_aa_hash: g.gen(), - fee_account: g.gen(), l1_chain_id: L1ChainId(g.gen()), l2_chain_id: L2ChainId::default(), recursion_node_level_vk_hash: g.gen(), recursion_leaf_level_vk_hash: g.gen(), recursion_circuits_set_vks_hash: g.gen(), recursion_scheduler_level_vk_hash: g.gen(), + snark_wrapper_vk_hash: g.gen(), + shared_bridge: g.gen(), + dummy_prover: g.gen(), + } + } +} + +impl RandomConfig for SharedBridge { + fn sample(g: &mut Gen) -> Self { + Self { + bridgehub_proxy_addr: g.gen(), + state_transition_proxy_addr: g.gen(), + transparent_proxy_admin_addr: g.gen(), } } } diff --git a/core/lib/env_config/src/genesis.rs b/core/lib/env_config/src/genesis.rs index 68883203ba8..f20436015d9 100644 --- a/core/lib/env_config/src/genesis.rs +++ b/core/lib/env_config/src/genesis.rs @@ -31,13 +31,15 @@ impl FromEnv for GenesisConfig { default_aa_hash: state_keeper .default_aa_hash .ok_or(anyhow!("Default aa hash required for genesis"))?, - fee_account: state_keeper.fee_account_addr, l1_chain_id: network_config.network.chain_id(), l2_chain_id: network_config.zksync_network_id, recursion_node_level_vk_hash: contracts_config.fri_recursion_node_level_vk_hash, recursion_leaf_level_vk_hash: contracts_config.fri_recursion_leaf_level_vk_hash, recursion_circuits_set_vks_hash: H256::zero(), recursion_scheduler_level_vk_hash: contracts_config.snark_wrapper_vk_hash, + snark_wrapper_vk_hash: contracts_config.snark_wrapper_vk_hash, + shared_bridge: None, + dummy_prover: false, }) } } diff --git a/core/lib/eth_client/src/clients/http/signing.rs b/core/lib/eth_client/src/clients/http/signing.rs index ef0e29da26d..06b462afa22 100644 --- a/core/lib/eth_client/src/clients/http/signing.rs +++ b/core/lib/eth_client/src/clients/http/signing.rs @@ -1,7 +1,9 @@ use std::{fmt, sync::Arc}; use async_trait::async_trait; -use zksync_config::{ContractsConfig, ETHClientConfig, ETHSenderConfig}; +use zksync_config::{ + configs::ContractsConfigReduced, ContractsConfig, ETHClientConfig, ETHSenderConfig, +}; use zksync_contracts::zksync_contract; use zksync_eth_signer::{raw_ethereum_tx::TransactionParameters, EthereumSigner, PrivateKeySigner}; use zksync_types::{ @@ -31,7 +33,7 @@ pub type PKSigningClient = SigningClient; impl PKSigningClient { pub fn from_config( eth_sender: ÐSenderConfig, - contracts_config: &ContractsConfig, + contracts_config: &ContractsConfigReduced, eth_client: ÐClientConfig, ) -> Self { // Gather required data from the config. @@ -52,7 +54,7 @@ impl PKSigningClient { /// Create an signing client for the blobs account pub fn from_config_blobs( eth_sender: ÐSenderConfig, - contracts_config: &ContractsConfig, + contracts_config: &ContractsConfigReduced, eth_client: ÐClientConfig, ) -> Option { // Gather required data from the config. @@ -69,7 +71,7 @@ impl PKSigningClient { fn from_config_inner( eth_sender: ÐSenderConfig, - contracts_config: &ContractsConfig, + contracts_config: &ContractsConfigReduced, eth_client: ÐClientConfig, operator_private_key: H256, ) -> Self { diff --git a/core/lib/protobuf_config/src/contracts.rs b/core/lib/protobuf_config/src/contracts.rs index 05cba0a1578..15d145b1132 100644 --- a/core/lib/protobuf_config/src/contracts.rs +++ b/core/lib/protobuf_config/src/contracts.rs @@ -1,227 +1,87 @@ use anyhow::Context as _; -use zksync_config::configs; -use zksync_protobuf::{repr::ProtoRepr, required}; +use zksync_config::{configs, configs::ContractsConfigReduced}; +use zksync_protobuf::{repr::ProtoRepr, required, ProtoFmt}; use crate::{parse_h160, parse_h256, proto::contracts as proto}; impl ProtoRepr for proto::Contracts { - type Type = configs::ContractsConfig; + type Type = ContractsConfigReduced; + fn read(&self) -> anyhow::Result { + let l1 = required(&self.l1).context("l1")?; + let l2 = required(&self.l2).context("l2")?; + let bridges = required(&self.bridges).context("bridges")?; + let erc20 = required(&bridges.erc20).context("erc20")?; + let weth_bridge = required(&bridges.weth).context("weth_bridge")?; Ok(Self::Type { - governance_addr: required(&self.governance_addr) + governance_addr: required(&l1.governance_addr) .and_then(|x| parse_h160(x)) .context("governance_addr")?, - mailbox_facet_addr: required(&self.mailbox_facet_addr) - .and_then(|x| parse_h160(x)) - .context("mailbox_facet_addr")?, - executor_facet_addr: required(&self.executor_facet_addr) - .and_then(|x| parse_h160(x)) - .context("executor_facet_addr")?, - admin_facet_addr: required(&self.admin_facet_addr) - .and_then(|x| parse_h160(x)) - .context("admin_facet_addr")?, - getters_facet_addr: required(&self.getters_facet_addr) - .and_then(|x| parse_h160(x)) - .context("getters_facet_addr")?, - verifier_addr: required(&self.verifier_addr) + verifier_addr: required(&l1.verifier_addr) .and_then(|x| parse_h160(x)) .context("verifier_addr")?, - diamond_init_addr: required(&self.diamond_init_addr) + default_upgrade_addr: required(&l1.default_upgrade_addr) .and_then(|x| parse_h160(x)) .context("diamond_init_addr")?, - diamond_upgrade_init_addr: required(&self.diamond_upgrade_init_addr) - .and_then(|x| parse_h160(x)) - .context("diamond_upgrade_init_addr")?, - diamond_proxy_addr: required(&self.diamond_proxy_addr) + diamond_proxy_addr: required(&l1.diamond_proxy_addr) .and_then(|x| parse_h160(x)) .context("diamond_proxy_addr")?, - validator_timelock_addr: required(&self.validator_timelock_addr) + validator_timelock_addr: required(&l1.validator_timelock_addr) .and_then(|x| parse_h160(x)) .context("validator_timelock_addr")?, - genesis_tx_hash: required(&self.genesis_tx_hash) - .and_then(|x| parse_h256(x)) - .context("genesis_tx_hash")?, - l1_erc20_bridge_proxy_addr: required(&self.l1_erc20_bridge_proxy_addr) + l1_erc20_bridge_proxy_addr: required(&erc20.l1_address) .and_then(|x| parse_h160(x)) .context("l1_erc20_bridge_proxy_addr")?, - l1_erc20_bridge_impl_addr: required(&self.l1_erc20_bridge_impl_addr) - .and_then(|x| parse_h160(x)) - .context("l1_erc20_bridge_impl_addr")?, - l2_erc20_bridge_addr: required(&self.l2_erc20_bridge_addr) + l2_erc20_bridge_addr: required(&erc20.l2_address) .and_then(|x| parse_h160(x)) .context("l2_erc20_bridge_addr")?, - l1_weth_bridge_proxy_addr: self - .l1_weth_bridge_proxy_addr + l1_weth_bridge_proxy_addr: weth_bridge + .l1_address .as_ref() .map(|x| parse_h160(x)) .transpose() .context("l1_weth_bridge_proxy_addr")?, - l2_weth_bridge_addr: self - .l2_weth_bridge_addr + l2_weth_bridge_addr: weth_bridge + .l2_address .as_ref() .map(|x| parse_h160(x)) .transpose() .context("l2_weth_bridge_addr")?, - l1_allow_list_addr: required(&self.l1_allow_list_addr) - .and_then(|x| parse_h160(x)) - .context("l1_allow_list_addr")?, - l2_testnet_paymaster_addr: self - .l2_testnet_paymaster_addr + l2_testnet_paymaster_addr: l2 + .testnet_paymaster_addr .as_ref() .map(|x| parse_h160(x)) .transpose() .context("l2_testnet_paymaster_addr")?, - recursion_scheduler_level_vk_hash: required(&self.recursion_scheduler_level_vk_hash) - .and_then(|x| parse_h256(x)) - .context("recursion_scheduler_level_vk_hash")?, - recursion_node_level_vk_hash: required(&self.recursion_node_level_vk_hash) - .and_then(|x| parse_h256(x)) - .context("recursion_node_level_vk_hash")?, - recursion_leaf_level_vk_hash: required(&self.recursion_leaf_level_vk_hash) - .and_then(|x| parse_h256(x)) - .context("recursion_leaf_level_vk_hash")?, - recursion_circuits_set_vks_hash: required(&self.recursion_circuits_set_vks_hash) - .and_then(|x| parse_h256(x)) - .context("recursion_circuits_set_vks_hash")?, - l1_multicall3_addr: required(&self.l1_multicall3_addr) + l1_multicall3_addr: required(&l1.multicall3_addr) .and_then(|x| parse_h160(x)) .context("l1_multicall3_addr")?, - fri_recursion_scheduler_level_vk_hash: required( - &self.fri_recursion_scheduler_level_vk_hash, - ) - .and_then(|x| parse_h256(x)) - .context("fri_recursion_scheduler_level_vk_hash")?, - fri_recursion_node_level_vk_hash: required(&self.fri_recursion_node_level_vk_hash) - .and_then(|x| parse_h256(x)) - .context("fri_recursion_node_level_vk_hash")?, - fri_recursion_leaf_level_vk_hash: required(&self.fri_recursion_leaf_level_vk_hash) - .and_then(|x| parse_h256(x)) - .context("fri_recursion_leaf_level_vk_hash")?, - snark_wrapper_vk_hash: required(&self.snark_wrapper_vk_hash) - .and_then(|x| parse_h256(x)) - .context("snark_wrapper_vk_hash")?, - bridgehub_proxy_addr: self - .bridgehub_proxy_addr - .as_ref() - .map(|x| parse_h160(x)) - .transpose() - .context("bridgehub_proxy_addr")?, - bridgehub_impl_addr: self - .bridgehub_impl_addr - .as_ref() - .map(|x| parse_h160(x)) - .transpose() - .context("bridgehub_impl_addr")?, - state_transition_proxy_addr: self - .state_transition_proxy_addr - .as_ref() - .map(|x| parse_h160(x)) - .transpose() - .context("state_transition_proxy_addr")?, - state_transition_impl_addr: self - .state_transition_impl_addr - .as_ref() - .map(|x| parse_h160(x)) - .transpose() - .context("state_transition_impl_addr")?, - transparent_proxy_admin_addr: self - .transparent_proxy_admin_addr - .as_ref() - .map(|x| parse_h160(x)) - .transpose() - .context("transparent_proxy_admin_addr")?, - genesis_batch_commitment: self - .genesis_batch_commitment - .as_ref() - .map(|x| parse_h256(x)) - .transpose() - .context("genesis_batch_commitment")?, - genesis_rollup_leaf_index: self.genesis_rollup_leaf_index, - genesis_root: self - .genesis_root - .as_ref() - .map(|x| parse_h256(x)) - .transpose() - .context("genesis_root")?, - genesis_protocol_version: self.genesis_protocol_version.map(|a| a as u16), }) } fn build(this: &Self::Type) -> Self { Self { - governance_addr: Some(this.governance_addr.as_bytes().into()), - mailbox_facet_addr: Some(this.mailbox_facet_addr.as_bytes().into()), - executor_facet_addr: Some(this.executor_facet_addr.as_bytes().into()), - admin_facet_addr: Some(this.admin_facet_addr.as_bytes().into()), - getters_facet_addr: Some(this.getters_facet_addr.as_bytes().into()), - verifier_addr: Some(this.verifier_addr.as_bytes().into()), - diamond_init_addr: Some(this.diamond_init_addr.as_bytes().into()), - diamond_upgrade_init_addr: Some(this.diamond_upgrade_init_addr.as_bytes().into()), - diamond_proxy_addr: Some(this.diamond_proxy_addr.as_bytes().into()), - validator_timelock_addr: Some(this.validator_timelock_addr.as_bytes().into()), - genesis_tx_hash: Some(this.genesis_tx_hash.as_bytes().into()), - l1_erc20_bridge_proxy_addr: Some(this.l1_erc20_bridge_proxy_addr.as_bytes().into()), - l1_erc20_bridge_impl_addr: Some(this.l1_erc20_bridge_impl_addr.as_bytes().into()), - l2_erc20_bridge_addr: Some(this.l2_erc20_bridge_addr.as_bytes().into()), - l1_weth_bridge_proxy_addr: this - .l1_weth_bridge_proxy_addr - .as_ref() - .map(|x| x.as_bytes().into()), - l2_weth_bridge_addr: this - .l2_weth_bridge_addr - .as_ref() - .map(|x| x.as_bytes().into()), - l1_allow_list_addr: Some(this.l1_allow_list_addr.as_bytes().into()), - l2_testnet_paymaster_addr: this - .l2_testnet_paymaster_addr - .as_ref() - .map(|x| x.as_bytes().into()), - recursion_scheduler_level_vk_hash: Some( - this.recursion_scheduler_level_vk_hash.as_bytes().into(), - ), - recursion_node_level_vk_hash: Some(this.recursion_node_level_vk_hash.as_bytes().into()), - recursion_leaf_level_vk_hash: Some(this.recursion_leaf_level_vk_hash.as_bytes().into()), - recursion_circuits_set_vks_hash: Some( - this.recursion_circuits_set_vks_hash.as_bytes().into(), - ), - l1_multicall3_addr: Some(this.l1_multicall3_addr.as_bytes().into()), - fri_recursion_scheduler_level_vk_hash: Some( - this.fri_recursion_scheduler_level_vk_hash.as_bytes().into(), - ), - fri_recursion_node_level_vk_hash: Some( - this.fri_recursion_node_level_vk_hash.as_bytes().into(), - ), - fri_recursion_leaf_level_vk_hash: Some( - this.fri_recursion_leaf_level_vk_hash.as_bytes().into(), - ), - snark_wrapper_vk_hash: Some(this.snark_wrapper_vk_hash.as_bytes().into()), - bridgehub_proxy_addr: this - .bridgehub_proxy_addr - .as_ref() - .map(|x| x.as_bytes().into()), - bridgehub_impl_addr: this - .bridgehub_impl_addr - .as_ref() - .map(|x| x.as_bytes().into()), - state_transition_proxy_addr: this - .state_transition_proxy_addr - .as_ref() - .map(|x| x.as_bytes().into()), - state_transition_impl_addr: this - .state_transition_impl_addr - .as_ref() - .map(|x| x.as_bytes().into()), - transparent_proxy_admin_addr: this - .transparent_proxy_admin_addr - .as_ref() - .map(|x| x.as_bytes().into()), - genesis_root: this.genesis_root.as_ref().map(|x| x.as_bytes().into()), - genesis_batch_commitment: this - .genesis_batch_commitment - .as_ref() - .map(|x| x.as_bytes().into()), - genesis_rollup_leaf_index: this.genesis_rollup_leaf_index, - genesis_protocol_version: this.genesis_protocol_version.map(|a| a as u32), + l1: Some(proto::L1 { + governance_addr: Some(this.governance_addr.as_bytes().into()), + verifier_addr: Some(this.verifier_addr.as_bytes().into()), + diamond_proxy_addr: Some(this.diamond_proxy_addr.as_bytes().into()), + validator_timelock_addr: Some(this.validator_timelock_addr.as_bytes().into()), + default_upgrade_addr: Some(this.default_upgrade_addr.as_bytes().into()), + multicall3_addr: Some(this.l1_multicall3_addr.as_bytes().into()), + }), + l2: Some(proto::L2 { + testnet_paymaster_addr: this.l2_testnet_paymaster_addr.map(|a| a.as_bytes().into()), + }), + bridges: Some(proto::Bridges { + erc20: Some(proto::Bridge { + l1_address: Some(this.l1_erc20_bridge_proxy_addr.as_bytes().into()), + l2_address: Some(this.l2_erc20_bridge_addr.as_bytes().into()), + }), + weth: Some(proto::Bridge { + l1_address: this.l1_weth_bridge_proxy_addr.map(|a| a.as_bytes().into()), + l2_address: this.l2_weth_bridge_addr.map(|a| a.as_bytes().into()), + }), + }), } } } diff --git a/core/lib/protobuf_config/src/genesis.rs b/core/lib/protobuf_config/src/genesis.rs new file mode 100644 index 00000000000..0399f21ac42 --- /dev/null +++ b/core/lib/protobuf_config/src/genesis.rs @@ -0,0 +1,114 @@ +use anyhow::Context as _; +use zksync_basic_types::{L1ChainId, L2ChainId}; +use zksync_config::{configs, configs::genesis::SharedBridge}; +use zksync_protobuf::{repr::ProtoRepr, required}; + +use crate::{parse_h160, parse_h256, proto::genesis as proto}; + +impl ProtoRepr for proto::Genesis { + type Type = configs::GenesisConfig; + fn read(&self) -> anyhow::Result { + let prover = required(&self.prover).context("prover")?; + let shared_bridge = if let Some(shared_bridge) = &self.shared_bridge { + Some(SharedBridge { + bridgehub_proxy_addr: required(&shared_bridge.bridgehub_proxy_addr) + .and_then(|x| parse_h160(x)) + .context("bridgehub_proxy_addr")?, + state_transition_proxy_addr: required(&shared_bridge.state_transition_proxy_addr) + .and_then(|x| parse_h160(x)) + .context("state_transition_proxy_addr")?, + transparent_proxy_admin_addr: required(&shared_bridge.transparent_proxy_admin_addr) + .and_then(|x| parse_h160(x)) + .context("transparent_proxy_admin_addr")?, + }) + } else { + None + }; + Ok(Self::Type { + protocol_version: required(&self.genesis_protocol_version) + .and_then(|x| Ok(*x as u16)) + .context("protocol_version")?, + genesis_root_hash: required(&self.genesis_root) + .and_then(|x| parse_h256(x)) + .context("genesis_root_hash")?, + rollup_last_leaf_index: *required(&self.genesis_rollup_leaf_index) + .context("rollup_last_leaf_index")?, + genesis_commitment: required(&self.genesis_batch_commitment) + .and_then(|x| parse_h256(x)) + .context("genesis_commitment")?, + bootloader_hash: required(&self.bootloader_hash) + .and_then(|x| parse_h256(x)) + .context("bootloader_hash")?, + default_aa_hash: required(&self.default_aa_hash) + .and_then(|x| parse_h256(x)) + .context("default_aa_hash")?, + l1_chain_id: required(&self.l1_chain_id) + .and_then(|x| Ok(L1ChainId(*x))) + .context("l1_chain_id")?, + l2_chain_id: required(&self.l2_chain_id) + .and_then(|x| L2ChainId::try_from(*x).map_err(|a| anyhow::anyhow!(a))) + .context("l2_chain_id")?, + recursion_node_level_vk_hash: required(&prover.recursion_node_level_vk_hash) + .and_then(|x| parse_h256(x)) + .context("recursion_node_level_vk_hash")?, + recursion_leaf_level_vk_hash: required(&prover.recursion_leaf_level_vk_hash) + .and_then(|x| parse_h256(x)) + .context("recursion_node_level_vk_hash")?, + recursion_circuits_set_vks_hash: required(&prover.recursion_circuits_set_vks_hash) + .and_then(|x| parse_h256(x)) + .context("recursion_node_level_vk_hash")?, + recursion_scheduler_level_vk_hash: required(&prover.recursion_scheduler_level_vk_hash) + .and_then(|x| parse_h256(x)) + .context("recursion_node_level_vk_hash")?, + snark_wrapper_vk_hash: required(&prover.snark_wrapper_vk_hash) + .and_then(|x| parse_h256(x)) + .context("recursion_node_level_vk_hash")?, + shared_bridge, + dummy_prover: *required(&prover.dummy_verifier).context("dummy_prover")?, + }) + } + + fn build(this: &Self::Type) -> Self { + let shared_bridge = if let Some(shared_bridge) = &this.shared_bridge { + Some(proto::SharedBridge { + bridgehub_proxy_addr: Some(shared_bridge.bridgehub_proxy_addr.as_bytes().into()), + state_transition_proxy_addr: Some( + shared_bridge.state_transition_proxy_addr.as_bytes().into(), + ), + transparent_proxy_admin_addr: Some( + shared_bridge.transparent_proxy_admin_addr.as_bytes().into(), + ), + }) + } else { + None + }; + + Self { + genesis_root: Some(this.genesis_root_hash.as_bytes().into()), + genesis_rollup_leaf_index: Some(this.rollup_last_leaf_index), + genesis_batch_commitment: Some(this.genesis_root_hash.as_bytes().into()), + genesis_protocol_version: Some(this.protocol_version as u32), + default_aa_hash: Some(this.genesis_root_hash.as_bytes().into()), + bootloader_hash: Some(this.genesis_root_hash.as_bytes().into()), + l1_chain_id: Some(this.l1_chain_id.0), + l2_chain_id: Some(this.l2_chain_id.as_u64()), + prover: Some(proto::Prover { + recursion_scheduler_level_vk_hash: Some( + this.recursion_scheduler_level_vk_hash.as_bytes().into(), + ), + recursion_node_level_vk_hash: Some( + this.recursion_node_level_vk_hash.as_bytes().into(), + ), + recursion_leaf_level_vk_hash: Some( + this.recursion_leaf_level_vk_hash.as_bytes().into(), + ), + recursion_circuits_set_vks_hash: Some( + this.recursion_circuits_set_vks_hash.as_bytes().into(), + ), + snark_wrapper_vk_hash: Some(this.snark_wrapper_vk_hash.as_bytes().into()), + dummy_verifier: Some(this.dummy_prover), + }), + shared_bridge, + } + } +} diff --git a/core/lib/protobuf_config/src/lib.rs b/core/lib/protobuf_config/src/lib.rs index e4e39f72226..757ce8f7f80 100644 --- a/core/lib/protobuf_config/src/lib.rs +++ b/core/lib/protobuf_config/src/lib.rs @@ -26,6 +26,7 @@ mod proof_data_handler; mod snapshots_creator; mod witness_generator; +mod genesis; pub mod proto; pub mod testonly; #[cfg(test)] diff --git a/core/lib/protobuf_config/src/proto/contracts.proto b/core/lib/protobuf_config/src/proto/contracts.proto index 99484bc3d5c..ca6fa91a0e2 100644 --- a/core/lib/protobuf_config/src/proto/contracts.proto +++ b/core/lib/protobuf_config/src/proto/contracts.proto @@ -2,41 +2,32 @@ syntax = "proto3"; package zksync.config.contracts; +message L1 { + optional bytes governance_addr = 1; // required; H160 + optional bytes verifier_addr = 6; // required; H160 + optional bytes diamond_proxy_addr = 9; // required; H160 + optional bytes validator_timelock_addr = 10; // required; H160 + optional bytes default_upgrade_addr = 11; // required; H160 + optional bytes multicall3_addr = 12; // required; H160 + +} + +message L2 { + optional bytes testnet_paymaster_addr = 18; // optional; H160 +} + +message Bridge { + optional bytes l1_address = 1; + optional bytes l2_address = 2; +} + +message Bridges { + optional Bridge erc20 = 1; + optional Bridge weth = 2; +} + message Contracts { - optional bytes governance_addr = 1; // required; H160 - optional bytes mailbox_facet_addr = 2; // required; H160 - optional bytes executor_facet_addr = 3; // required; H160 - optional bytes admin_facet_addr = 4; // required; H160 - optional bytes getters_facet_addr = 5; // required; H160 - optional bytes verifier_addr = 6; // required; H160 - optional bytes diamond_init_addr = 7; // required; H160 - optional bytes diamond_upgrade_init_addr = 8; // required; H160 - optional bytes diamond_proxy_addr = 9; // required; H160 - optional bytes validator_timelock_addr = 10; // required; H160 - optional bytes genesis_tx_hash = 11; // required; H256 - optional bytes l1_erc20_bridge_proxy_addr = 12; // required; H160 - optional bytes l1_erc20_bridge_impl_addr = 13; // required; H160 - optional bytes l2_erc20_bridge_addr = 14; // required; H160 - optional bytes l1_weth_bridge_proxy_addr = 15; // optional; H160 - optional bytes l2_weth_bridge_addr = 16; // optional; H160 - optional bytes l1_allow_list_addr = 17; // required; H160 - optional bytes l2_testnet_paymaster_addr = 18; // optional; H160 - optional bytes recursion_scheduler_level_vk_hash = 19; // required; H256 - optional bytes recursion_node_level_vk_hash = 20; // required; H256 - optional bytes recursion_leaf_level_vk_hash = 21; // required; H256 - optional bytes recursion_circuits_set_vks_hash = 22; // required; H256 - optional bytes l1_multicall3_addr = 23; // required; H160 - optional bytes fri_recursion_scheduler_level_vk_hash = 24; // required; H256 - optional bytes fri_recursion_node_level_vk_hash = 25; // required; H256 - optional bytes fri_recursion_leaf_level_vk_hash = 26; // required; H256 - optional bytes snark_wrapper_vk_hash = 28; // required; H256 - optional bytes bridgehub_proxy_addr = 29; // optional; H160 - optional bytes bridgehub_impl_addr = 30; // optional; H160 - optional bytes state_transition_proxy_addr = 31; // optional; H160 - optional bytes state_transition_impl_addr = 32; // optional; H160 - optional bytes transparent_proxy_admin_addr = 33; // optional; h160 - optional bytes genesis_root = 34; // optional; h256 - optional uint64 genesis_rollup_leaf_index = 35; // optional; - optional bytes genesis_batch_commitment = 36; // optional; h256 - optional uint32 genesis_protocol_version= 37; // optional; + optional L1 l1 = 1; + optional L2 l2 = 2; + optional Bridges bridges = 3; } diff --git a/core/lib/protobuf_config/src/proto/genesis.proto b/core/lib/protobuf_config/src/proto/genesis.proto new file mode 100644 index 00000000000..5bfe615ae21 --- /dev/null +++ b/core/lib/protobuf_config/src/proto/genesis.proto @@ -0,0 +1,31 @@ +syntax = "proto3"; + +package zksync.config.genesis; + +message Prover { + optional bytes recursion_scheduler_level_vk_hash = 1; // required; H256 + optional bytes recursion_node_level_vk_hash = 2; // required; H256 + optional bytes recursion_leaf_level_vk_hash = 3; // required; H256 + optional bytes recursion_circuits_set_vks_hash = 4; // required; H256 + optional bytes snark_wrapper_vk_hash = 5; // required; H256 + optional bool dummy_verifier = 6; +} + +message SharedBridge { + optional bytes bridgehub_proxy_addr = 1; // optional; h160 + optional bytes state_transition_proxy_addr = 2; // optional; h160 + optional bytes transparent_proxy_admin_addr = 3; // optional; h160 +} + +message Genesis { + optional bytes genesis_root = 1; // optional; h256 + optional uint64 genesis_rollup_leaf_index = 2; // optional; + optional bytes genesis_batch_commitment = 3; // optional; h256 + optional uint32 genesis_protocol_version = 4; // optional; + optional bytes default_aa_hash = 5; // optional; h256 + optional bytes bootloader_hash = 6; // optional; h256 + optional uint64 l1_chain_id = 7; // optional; + optional uint64 l2_chain_id = 8; // optional; + optional Prover prover = 9; + optional SharedBridge shared_bridge = 10; +} diff --git a/core/lib/zksync_core/src/api_server/web3/state.rs b/core/lib/zksync_core/src/api_server/web3/state.rs index 808f4049f5f..7f5f40d5b26 100644 --- a/core/lib/zksync_core/src/api_server/web3/state.rs +++ b/core/lib/zksync_core/src/api_server/web3/state.rs @@ -11,7 +11,9 @@ use anyhow::Context as _; use lru::LruCache; use tokio::sync::{watch, Mutex}; use vise::GaugeGuard; -use zksync_config::configs::{api::Web3JsonRpcConfig, chain::NetworkConfig, ContractsConfig}; +use zksync_config::configs::{ + api::Web3JsonRpcConfig, chain::NetworkConfig, ContractsConfig, ContractsConfigReduced, +}; use zksync_dal::{ConnectionPool, StorageProcessor}; use zksync_types::{ api, l2::L2Tx, transaction_request::CallRequest, Address, L1BatchNumber, L1ChainId, L2ChainId, @@ -97,7 +99,7 @@ impl InternalApiConfig { pub fn new( eth_config: &NetworkConfig, web3_config: &Web3JsonRpcConfig, - contracts_config: &ContractsConfig, + contracts_config: &ContractsConfigReduced, ) -> Self { Self { l1_chain_id: eth_config.network.chain_id(), @@ -112,7 +114,8 @@ impl InternalApiConfig { l1_weth_bridge: contracts_config.l1_weth_bridge_proxy_addr, l2_weth_bridge: contracts_config.l2_weth_bridge_addr, }, - bridgehub_proxy_addr: contracts_config.bridgehub_proxy_addr, + // TODO move bridgehub proxy + bridgehub_proxy_addr: None, diamond_proxy_addr: contracts_config.diamond_proxy_addr, l2_testnet_paymaster_addr: contracts_config.l2_testnet_paymaster_addr, req_entities_limit: web3_config.req_entities_limit(), diff --git a/core/lib/zksync_core/src/genesis.rs b/core/lib/zksync_core/src/genesis.rs index e2b574e5168..50ca3cbbe0e 100644 --- a/core/lib/zksync_core/src/genesis.rs +++ b/core/lib/zksync_core/src/genesis.rs @@ -84,6 +84,7 @@ impl GenesisParams { if base_system_contracts_hashes != base_system_contracts.hashes() { return Err(GenesisError::BaseSystemContractsHashes( base_system_contracts.hashes(), + base_system_contracts_hashes, )); } let _: ProtocolVersionId = config @@ -135,7 +136,6 @@ pub fn mock_genesis_config() -> GenesisConfig { genesis_commitment: Default::default(), bootloader_hash: base_system_contracts_hashes.bootloader, default_aa_hash: base_system_contracts_hashes.default_aa, - fee_account: Address::repeat_byte(0x01), l1_chain_id: L1ChainId(9), l2_chain_id: L2ChainId::default(), recursion_node_level_vk_hash: first_l1_verifier_config.params.recursion_node_level_vk_hash, @@ -165,7 +165,6 @@ pub async fn insert_genesis_batch( create_genesis_l1_batch( &mut transaction, - genesis_params.config.fee_account, genesis_params.config.l2_chain_id, genesis_params.protocol_version(), genesis_params.base_system_contracts(), @@ -394,7 +393,6 @@ async fn insert_system_contracts( #[allow(clippy::too_many_arguments)] pub(crate) async fn create_genesis_l1_batch( storage: &mut StorageProcessor<'_>, - first_validator_address: Address, chain_id: L2ChainId, protocol_version: ProtocolVersionId, base_system_contracts: &BaseSystemContracts, @@ -422,7 +420,7 @@ pub(crate) async fn create_genesis_l1_batch( hash: MiniblockHasher::legacy_hash(MiniblockNumber(0)), l1_tx_count: 0, l2_tx_count: 0, - fee_account_address: first_validator_address, + fee_account_address: Default::default(), base_fee_per_gas: 0, gas_per_pubdata_limit: get_max_gas_per_pubdata_byte(protocol_version.into()), batch_fee_input: BatchFeeInput::l1_pegged(0, 0), diff --git a/core/lib/zksync_core/src/lib.rs b/core/lib/zksync_core/src/lib.rs index 1f7cc5c9179..7b74e2688a7 100644 --- a/core/lib/zksync_core/src/lib.rs +++ b/core/lib/zksync_core/src/lib.rs @@ -27,6 +27,7 @@ use zksync_config::{ StateKeeperConfig, }, database::{MerkleTreeConfig, MerkleTreeMode}, + ContractsConfigReduced, }, ApiConfig, ContractsConfig, DBConfig, GenesisConfig, PostgresConfig, }; @@ -218,6 +219,7 @@ impl FromStr for Components { pub async fn initialize_components( configs: &TempConfigStore, + contracts_config: &ContractsConfigReduced, components: Vec, secrets: &Secrets, ) -> anyhow::Result<( @@ -261,10 +263,6 @@ pub async fn initialize_components( health_check_config.hard_time_limit(), )); - let contracts_config = configs - .contracts_config - .clone() - .context("contracts_config")?; let eth_client_config = configs .eth_client_config .clone() @@ -680,10 +678,6 @@ pub async fn initialize_components( .proof_data_handler_config .clone() .context("proof_data_handler_config")?, - configs - .contracts_config - .clone() - .context("contracts_config")?, store_factory.create_store().await, connection_pool.clone(), stop_receiver.clone(), @@ -718,7 +712,7 @@ pub async fn initialize_components( async fn add_state_keeper_to_task_futures( task_futures: &mut Vec>>, postgres_config: &PostgresConfig, - contracts_config: &ContractsConfig, + contracts_config: &ContractsConfigReduced, state_keeper_config: StateKeeperConfig, network_config: &NetworkConfig, db_config: &DBConfig, diff --git a/core/lib/zksync_core/src/proof_data_handler/mod.rs b/core/lib/zksync_core/src/proof_data_handler/mod.rs index 9f009328ca0..b0b9c528d66 100644 --- a/core/lib/zksync_core/src/proof_data_handler/mod.rs +++ b/core/lib/zksync_core/src/proof_data_handler/mod.rs @@ -4,7 +4,10 @@ use anyhow::Context as _; use axum::{extract::Path, routing::post, Json, Router}; use tokio::sync::watch; use zksync_config::{ - configs::{proof_data_handler::ProtocolVersionLoadingMode, ProofDataHandlerConfig}, + configs::{ + proof_data_handler::ProtocolVersionLoadingMode, ContractsConfigReduced, + ProofDataHandlerConfig, + }, ContractsConfig, }; use zksync_dal::ConnectionPool; @@ -19,21 +22,8 @@ use crate::proof_data_handler::request_processor::RequestProcessor; mod request_processor; -fn fri_l1_verifier_config(contracts_config: &ContractsConfig) -> L1VerifierConfig { - L1VerifierConfig { - params: VerifierParams { - recursion_node_level_vk_hash: contracts_config.fri_recursion_node_level_vk_hash, - recursion_leaf_level_vk_hash: contracts_config.fri_recursion_leaf_level_vk_hash, - // The base layer commitment is not used in the FRI prover verification. - recursion_circuits_set_vks_hash: H256::zero(), - }, - recursion_scheduler_level_vk_hash: contracts_config.snark_wrapper_vk_hash, - } -} - pub async fn run_server( config: ProofDataHandlerConfig, - contracts_config: ContractsConfig, blob_store: Arc, pool: ConnectionPool, mut stop_receiver: watch::Receiver, @@ -42,7 +32,7 @@ pub async fn run_server( tracing::debug!("Starting proof data handler server on {bind_address}"); let l1_verifier_config: Option = match config.protocol_version_loading_mode { ProtocolVersionLoadingMode::FromDb => None, - ProtocolVersionLoadingMode::FromEnvVar => Some(fri_l1_verifier_config(&contracts_config)), + ProtocolVersionLoadingMode::FromEnvVar => panic!("From Env var is deprecated"), }; let get_proof_gen_processor = RequestProcessor::new(blob_store, pool, config, l1_verifier_config); diff --git a/core/lib/zksync_core/src/proto/mod.proto b/core/lib/zksync_core/src/proto/mod.proto index a5ebe82970d..7aed2adb534 100644 --- a/core/lib/zksync_core/src/proto/mod.proto +++ b/core/lib/zksync_core/src/proto/mod.proto @@ -6,6 +6,7 @@ import "zksync/config/alerts.proto"; import "zksync/config/api.proto"; import "zksync/config/chain.proto"; import "zksync/config/contracts.proto"; +import "zksync/config/genesis.proto"; import "zksync/config/contract_verifier.proto"; import "zksync/config/database.proto"; import "zksync/config/eth_client.proto"; @@ -45,7 +46,6 @@ message TempConfigStore { optional config.proof_data_handler.ProofDataHandler proof_data_handler = 16; optional config.witness_generator.WitnessGenerator witness_generator = 17; optional config.api.Api api = 18; - optional config.contracts.Contracts contracts = 19; optional config.database.DB db = 20; optional config.eth_client.ETHClient eth_client = 21; optional config.eth_sender.ETHSender eth_sender = 22; diff --git a/core/lib/zksync_core/src/state_keeper/batch_executor/tests/tester.rs b/core/lib/zksync_core/src/state_keeper/batch_executor/tests/tester.rs index cfcd1caad8b..7630538b17d 100644 --- a/core/lib/zksync_core/src/state_keeper/batch_executor/tests/tester.rs +++ b/core/lib/zksync_core/src/state_keeper/batch_executor/tests/tester.rs @@ -165,7 +165,6 @@ impl Tester { if storage.blocks_dal().is_genesis_needed().await.unwrap() { create_genesis_l1_batch( &mut storage, - self.fee_account, L2ChainId::from(CHAIN_ID), ProtocolVersionId::latest(), &BASE_SYSTEM_CONTRACTS, diff --git a/core/lib/zksync_core/src/state_keeper/io/tests/tester.rs b/core/lib/zksync_core/src/state_keeper/io/tests/tester.rs index db1007475ec..749299fa3e3 100644 --- a/core/lib/zksync_core/src/state_keeper/io/tests/tester.rs +++ b/core/lib/zksync_core/src/state_keeper/io/tests/tester.rs @@ -143,7 +143,6 @@ impl Tester { if storage.blocks_dal().is_genesis_needed().await.unwrap() { create_genesis_l1_batch( &mut storage, - Address::repeat_byte(0x01), L2ChainId::from(270), ProtocolVersionId::latest(), &self.base_system_contracts, diff --git a/core/lib/zksync_core/src/state_keeper/mod.rs b/core/lib/zksync_core/src/state_keeper/mod.rs index 49c89a9d53b..68a09fb4e97 100644 --- a/core/lib/zksync_core/src/state_keeper/mod.rs +++ b/core/lib/zksync_core/src/state_keeper/mod.rs @@ -2,7 +2,10 @@ use std::sync::Arc; use tokio::sync::watch; use zksync_config::{ - configs::chain::{MempoolConfig, NetworkConfig, StateKeeperConfig}, + configs::{ + chain::{MempoolConfig, NetworkConfig, StateKeeperConfig}, + ContractsConfigReduced, + }, ContractsConfig, DBConfig, }; use zksync_dal::ConnectionPool; @@ -32,7 +35,7 @@ pub(crate) mod updates; #[allow(clippy::too_many_arguments)] pub(crate) async fn create_state_keeper( - contracts_config: &ContractsConfig, + contracts_config: &ContractsConfigReduced, state_keeper_config: StateKeeperConfig, db_config: &DBConfig, network_config: &NetworkConfig, diff --git a/core/lib/zksync_core/src/sync_layer/genesis.rs b/core/lib/zksync_core/src/sync_layer/genesis.rs index 693de8993f5..d8117158061 100644 --- a/core/lib/zksync_core/src/sync_layer/genesis.rs +++ b/core/lib/zksync_core/src/sync_layer/genesis.rs @@ -44,7 +44,6 @@ async fn create_genesis_params( .fetch_l2_block(zksync_types::MiniblockNumber(0), false) .await? .context("No genesis block on the main node")?; - let first_validator = genesis_miniblock.operator_address; let base_system_contracts_hashes = genesis_miniblock.base_system_contracts_hashes; let protocol_version = genesis_miniblock.protocol_version; let genesis_batch = client.fetch_genesis_l1_batch().await?; @@ -106,7 +105,6 @@ async fn create_genesis_params( .context("Genesis batch can't be pending")?, bootloader_hash: base_system_contracts_hashes.bootloader, default_aa_hash: base_system_contracts_hashes.default_aa, - fee_account: first_validator, l1_chain_id, l2_chain_id: zksync_chain_id, recursion_node_level_vk_hash: first_l1_verifier_config.params.recursion_node_level_vk_hash, @@ -116,6 +114,9 @@ async fn create_genesis_params( .recursion_circuits_set_vks_hash, recursion_scheduler_level_vk_hash: first_l1_verifier_config .recursion_scheduler_level_vk_hash, + snark_wrapper_vk_hash: Default::default(), + shared_bridge: None, + dummy_prover: false, }; Ok(GenesisParams::from_genesis_config( config, diff --git a/core/lib/zksync_core/src/temp_config_store/mod.rs b/core/lib/zksync_core/src/temp_config_store/mod.rs index 2b528516d32..daad320604b 100644 --- a/core/lib/zksync_core/src/temp_config_store/mod.rs +++ b/core/lib/zksync_core/src/temp_config_store/mod.rs @@ -41,6 +41,12 @@ pub fn decode_yaml(yaml: &str) -> anyhow::Result { Ok(this) } +pub fn decode_yaml_repr(yaml: &str) -> anyhow::Result { + let d = serde_yaml::Deserializer::from_str(yaml); + let this: T = zksync_protobuf::serde::deserialize(d)?; + Ok(this) +} + // TODO (QIT-22): This structure is going to be removed when components will be responsible for their own configs. /// A temporary config store allowing to pass deserialized configs from `zksync_server` to `zksync_core`. /// All the configs are optional, since for some component combination it is not needed to pass all the configs. @@ -64,7 +70,6 @@ pub struct TempConfigStore { pub proof_data_handler_config: Option, pub witness_generator_config: Option, pub api_config: Option, - pub contracts_config: Option, pub db_config: Option, pub eth_client_config: Option, pub eth_sender_config: Option, @@ -104,7 +109,6 @@ impl ProtoFmt for TempConfigStore { witness_generator_config: read_optional_repr(&r.witness_generator) .context("witness_generator")?, api_config: read_optional_repr(&r.api).context("api")?, - contracts_config: read_optional_repr(&r.contracts).context("contracts")?, db_config: read_optional_repr(&r.db).context("db")?, eth_client_config: read_optional_repr(&r.eth_client).context("eth_client")?, eth_sender_config: read_optional_repr(&r.eth_sender).context("eth_sender")?, @@ -147,7 +151,6 @@ impl ProtoFmt for TempConfigStore { .map(ProtoRepr::build), witness_generator: self.witness_generator_config.as_ref().map(ProtoRepr::build), api: self.api_config.as_ref().map(ProtoRepr::build), - contracts: self.contracts_config.as_ref().map(ProtoRepr::build), db: self.db_config.as_ref().map(ProtoRepr::build), eth_client: self.eth_client_config.as_ref().map(ProtoRepr::build), eth_sender: self.eth_sender_config.as_ref().map(ProtoRepr::build), diff --git a/core/node/node_framework/examples/main_node.rs b/core/node/node_framework/examples/main_node.rs index ef1cec3e54e..49ff14a9f39 100644 --- a/core/node/node_framework/examples/main_node.rs +++ b/core/node/node_framework/examples/main_node.rs @@ -138,7 +138,6 @@ impl MainNodeBuilder { fn add_proof_data_handler_layer(mut self) -> anyhow::Result { self.node.add_layer(ProofDataHandlerLayer::new( ProofDataHandlerConfig::from_env()?, - ContractsConfig::from_env()?, )); Ok(self) } diff --git a/core/node/node_framework/src/implementations/layers/eth_sender.rs b/core/node/node_framework/src/implementations/layers/eth_sender.rs index 248aff886ce..2ce4e071344 100644 --- a/core/node/node_framework/src/implementations/layers/eth_sender.rs +++ b/core/node/node_framework/src/implementations/layers/eth_sender.rs @@ -1,7 +1,8 @@ use std::sync::Arc; use zksync_config::configs::{ - chain::NetworkConfig, eth_sender::ETHSenderConfig, ContractsConfig, ETHClientConfig, + chain::NetworkConfig, eth_sender::ETHSenderConfig, ContractsConfig, ContractsConfigReduced, + ETHClientConfig, }; use zksync_core::eth_sender::{Aggregator, EthTxAggregator, EthTxManager}; use zksync_eth_client::{clients::PKSigningClient, BoundEthInterface}; @@ -19,7 +20,7 @@ use crate::{ #[derive(Debug)] pub struct EthSenderLayer { eth_sender_config: ETHSenderConfig, - contracts_config: ContractsConfig, + contracts_config: ContractsConfigReduced, eth_client_config: ETHClientConfig, network_config: NetworkConfig, } @@ -27,7 +28,7 @@ pub struct EthSenderLayer { impl EthSenderLayer { pub fn new( eth_sender_config: ETHSenderConfig, - contracts_config: ContractsConfig, + contracts_config: ContractsConfigReduced, eth_client_config: ETHClientConfig, network_config: NetworkConfig, ) -> Self { diff --git a/core/node/node_framework/src/implementations/layers/pk_signing_eth_client.rs b/core/node/node_framework/src/implementations/layers/pk_signing_eth_client.rs index 92310ad431f..b7935c0b476 100644 --- a/core/node/node_framework/src/implementations/layers/pk_signing_eth_client.rs +++ b/core/node/node_framework/src/implementations/layers/pk_signing_eth_client.rs @@ -1,6 +1,8 @@ use std::sync::Arc; -use zksync_config::{ContractsConfig, ETHClientConfig, ETHSenderConfig}; +use zksync_config::{ + configs::ContractsConfigReduced, ContractsConfig, ETHClientConfig, ETHSenderConfig, +}; use zksync_eth_client::clients::PKSigningClient; use crate::{ @@ -12,14 +14,14 @@ use crate::{ #[derive(Debug)] pub struct PKSigningEthClientLayer { eth_sender_config: ETHSenderConfig, - contracts_config: ContractsConfig, + contracts_config: ContractsConfigReduced, eth_client_config: ETHClientConfig, } impl PKSigningEthClientLayer { pub fn new( eth_sender_config: ETHSenderConfig, - contracts_config: ContractsConfig, + contracts_config: ContractsConfigReduced, eth_client_config: ETHClientConfig, ) -> Self { Self { diff --git a/core/node/node_framework/src/implementations/layers/proof_data_handler.rs b/core/node/node_framework/src/implementations/layers/proof_data_handler.rs index d9e3d3da19f..2bc3000180e 100644 --- a/core/node/node_framework/src/implementations/layers/proof_data_handler.rs +++ b/core/node/node_framework/src/implementations/layers/proof_data_handler.rs @@ -22,17 +22,12 @@ use crate::{ #[derive(Debug)] pub struct ProofDataHandlerLayer { proof_data_handler_config: ProofDataHandlerConfig, - contracts_config: ContractsConfig, } impl ProofDataHandlerLayer { - pub fn new( - proof_data_handler_config: ProofDataHandlerConfig, - contracts_config: ContractsConfig, - ) -> Self { + pub fn new(proof_data_handler_config: ProofDataHandlerConfig) -> Self { Self { proof_data_handler_config, - contracts_config, } } } @@ -51,7 +46,6 @@ impl WiringLayer for ProofDataHandlerLayer { context.add_task(Box::new(ProofDataHandlerTask { proof_data_handler_config: self.proof_data_handler_config, - contracts_config: self.contracts_config, blob_store: object_store.0, main_pool, })); @@ -63,7 +57,6 @@ impl WiringLayer for ProofDataHandlerLayer { #[derive(Debug)] struct ProofDataHandlerTask { proof_data_handler_config: ProofDataHandlerConfig, - contracts_config: ContractsConfig, blob_store: Arc, main_pool: ConnectionPool, } @@ -77,7 +70,6 @@ impl Task for ProofDataHandlerTask { async fn run(self: Box, stop_receiver: StopReceiver) -> anyhow::Result<()> { proof_data_handler::run_server( self.proof_data_handler_config, - self.contracts_config, self.blob_store, self.main_pool, stop_receiver.0, diff --git a/etc/env/file_based/contracts.yaml b/etc/env/file_based/contracts.yaml index 3ef4efb4b18..8f1a7e7e43b 100644 --- a/etc/env/file_based/contracts.yaml +++ b/etc/env/file_based/contracts.yaml @@ -8,11 +8,15 @@ l1: blob_versioned_hash_retriever_addr: "0x0000000000000000000000000000000000000000" validator_timelock_addr: "0xfc073319977e314f251eae6ae6be76b0b3baeecf" l2: - erc20_bridge_addr: "0xfc073319977e314f251eae6ae6be76b0b3baeecf" testnet_paymaster_addr: "0xfc073319977e314f251eae6ae6be76b0b3baeecf" +bridges: + erc20: + - l1_address: "0xfc073319977e314f251eae6ae6be76b0b3baeecf" + - l2_address: "0xfc073319977e314f251eae6ae6be76b0b3baeecf" + weth: + - l1_address: "0xfc073319977e314f251eae6ae6be76b0b3baeecf" + - l2_address: "0xfc073319977e314f251eae6ae6be76b0b3baeecf" weth: - l1_token_addr: "0x5e6d086f5ec079adff4fb3774cdf3e8d6a34f7e9" - l1_bridge_proxy_addr: "0x5e6d086f5ec079adff4fb3774cdf3e8d6a34f7e9" - l2_bridge_addr: "0x5e6d086f5ec079adff4fb3774cdf3e8d6a34f7e9" - l2_token_addr: "0x5e6d086f5ec079adff4fb3774cdf3e8d6a34f7e9" + l1_address: "0x5e6d086f5ec079adff4fb3774cdf3e8d6a34f7e9" + l2_address: "0x5e6d086f5ec079adff4fb3774cdf3e8d6a34f7e9" validator_timelock_execution_delay: 0 \ No newline at end of file diff --git a/etc/env/file_based/genesis.yaml b/etc/env/file_based/genesis.yaml index dbfdd07a7ec..61728280b00 100644 --- a/etc/env/file_based/genesis.yaml +++ b/etc/env/file_based/genesis.yaml @@ -1,20 +1,19 @@ genesis: bootloader_hash: 0x010007ede999d096c84553fb514d3d6ca76fbf39789dda76bfeda9f3ae06236e default_aa_hash: 0x0100055b041eb28aff6e3a6e0f37c31fd053fc9ef142683b05e5f0aee6934066 - fee_account_addr: 0xde03a0b5963f75f1c8485b355ff6d30f3093bde7 root_hash: 0x436cf80dd02a7e1a1df65be6ec9ea231ccec97c44f4c8c9cd2aa26c2feb074cd batch_commitment: 0x938016208176c5a49d47c8aa582b5d18afc4f159dfa099087770e0796948fd1a rollup_last_leaf_index: 26 protocol_version: 21 l1_chain_id: 9 l2_chain_id: 270 -prover: - recursion_leaf_level_vk_hash: 0x400a4b532c6f072c00d1806ef299300d4c104f4ac55bd8698ade78894fcadc0a - recursion_node_level_vk_hash: 0x5a3ef282b21e12fe1f4438e5bb158fc5060b160559c5158c6389d62d9fe3d080 - recursion_scheduler_level_vk_hash: 0x1405880dc3317d635bddb0ab62bf5d013e5d1f462161c1f7ac3289c7fef956da - snark_wrapper_vk_hash: 0x063c6fb5c70404c2867f413a8e35563ad3d040b1ad8c11786231bfdba7b472c7 - dummy_verifier: true -shared_bridge: - state_transition_proxy_addr: 0x0000000000000000000000000000000000000000 - bridgehub_proxy_addr: 0x0000000000000000000000000000000000000000 - transparent_proxy_admin_addr: 0x0000000000000000000000000000000000000000 + prover: + recursion_leaf_level_vk_hash: 0x400a4b532c6f072c00d1806ef299300d4c104f4ac55bd8698ade78894fcadc0a + recursion_node_level_vk_hash: 0x5a3ef282b21e12fe1f4438e5bb158fc5060b160559c5158c6389d62d9fe3d080 + recursion_scheduler_level_vk_hash: 0x1405880dc3317d635bddb0ab62bf5d013e5d1f462161c1f7ac3289c7fef956da + snark_wrapper_vk_hash: 0x063c6fb5c70404c2867f413a8e35563ad3d040b1ad8c11786231bfdba7b472c7 + dummy_verifier: true + shared_bridge: + state_transition_proxy_addr: 0x0000000000000000000000000000000000000000 + bridgehub_proxy_addr: 0x0000000000000000000000000000000000000000 + transparent_proxy_admin_addr: 0x0000000000000000000000000000000000000000 From 4c79e50da1028fd8ba1163f4e474dd5ec5123b99 Mon Sep 17 00:00:00 2001 From: Grzegorz Prusak Date: Wed, 20 Mar 2024 16:35:54 +0100 Subject: [PATCH 31/65] decode_yaml_repr --- core/lib/zksync_core/src/temp_config_store/mod.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/lib/zksync_core/src/temp_config_store/mod.rs b/core/lib/zksync_core/src/temp_config_store/mod.rs index daad320604b..33c9ac06dff 100644 --- a/core/lib/zksync_core/src/temp_config_store/mod.rs +++ b/core/lib/zksync_core/src/temp_config_store/mod.rs @@ -41,10 +41,10 @@ pub fn decode_yaml(yaml: &str) -> anyhow::Result { Ok(this) } -pub fn decode_yaml_repr(yaml: &str) -> anyhow::Result { +pub fn decode_yaml_repr(yaml: &str) -> anyhow::Result { let d = serde_yaml::Deserializer::from_str(yaml); - let this: T = zksync_protobuf::serde::deserialize(d)?; - Ok(this) + let this: T = zksync_protobuf::serde::deserialize_proto(d)?; + this.read() } // TODO (QIT-22): This structure is going to be removed when components will be responsible for their own configs. From cd99d90b44f2fd4c909578f08f59966214e5d618 Mon Sep 17 00:00:00 2001 From: Grzegorz Prusak Date: Wed, 20 Mar 2024 16:48:47 +0100 Subject: [PATCH 32/65] zksync_server compiles --- Cargo.lock | 1 + core/bin/zksync_server/Cargo.toml | 1 + core/bin/zksync_server/src/main.rs | 4 +++- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index ef43c9a3e47..43d1952b104 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8646,6 +8646,7 @@ dependencies = [ "zksync_consensus_roles", "zksync_core", "zksync_env_config", + "zksync_protobuf_config", "zksync_storage", "zksync_types", "zksync_utils", diff --git a/core/bin/zksync_server/Cargo.toml b/core/bin/zksync_server/Cargo.toml index f2e01aeef58..dc0a6b10493 100644 --- a/core/bin/zksync_server/Cargo.toml +++ b/core/bin/zksync_server/Cargo.toml @@ -12,6 +12,7 @@ publish = false # We don't want to publish our binaries. [dependencies] zksync_config = { path = "../../lib/config" } +zksync_protobuf_config = { path = "../../lib/protobuf_config" } zksync_env_config = { path = "../../lib/env_config" } zksync_storage = { path = "../../lib/storage" } zksync_utils = { path = "../../lib/utils" } diff --git a/core/bin/zksync_server/src/main.rs b/core/bin/zksync_server/src/main.rs index 371beaf76e8..72335b93d45 100644 --- a/core/bin/zksync_server/src/main.rs +++ b/core/bin/zksync_server/src/main.rs @@ -24,6 +24,7 @@ use zksync_core::{ Component, Components, }; use zksync_env_config::FromEnv; +use zksync_protobuf_config; use zksync_storage::RocksDB; use zksync_utils::wait_for_tasks::wait_for_tasks; @@ -161,7 +162,8 @@ async fn main() -> anyhow::Result<()> { Some(path) => { let yaml = std::fs::read_to_string(&path).with_context(|| path.display().to_string())?; - decode_yaml_repr(&yaml).context("failed decoding YAML config")? + decode_yaml_repr::(&yaml) + .context("failed decoding YAML config")? } }; // let contracts_config: ContractsConfigReduced = contracts_config.into(); From 44670aca2a68bfc48984a8403fced67eaea7d0b0 Mon Sep 17 00:00:00 2001 From: Danil Date: Wed, 20 Mar 2024 16:24:41 +0100 Subject: [PATCH 33/65] Add comments Signed-off-by: Danil --- core/lib/zksync_core/src/sync_layer/genesis.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/lib/zksync_core/src/sync_layer/genesis.rs b/core/lib/zksync_core/src/sync_layer/genesis.rs index d8117158061..bc146d26f68 100644 --- a/core/lib/zksync_core/src/sync_layer/genesis.rs +++ b/core/lib/zksync_core/src/sync_layer/genesis.rs @@ -114,8 +114,11 @@ async fn create_genesis_params( .recursion_circuits_set_vks_hash, recursion_scheduler_level_vk_hash: first_l1_verifier_config .recursion_scheduler_level_vk_hash, - snark_wrapper_vk_hash: Default::default(), + // Now it's the same values + snark_wrapper_vk_hash: first_l1_verifier_config.recursion_scheduler_level_vk_hash, + // Shared bridge will be supported later shared_bridge: None, + // For external node prover is always dummy dummy_prover: false, }; Ok(GenesisParams::from_genesis_config( From 85e1a81398dc64c15d1a7bddc1fd0a59752973f3 Mon Sep 17 00:00:00 2001 From: Danil Date: Wed, 20 Mar 2024 18:00:04 +0100 Subject: [PATCH 34/65] Build config from server Signed-off-by: Danil --- core/bin/zksync_server/src/main.rs | 2 +- core/lib/eth_client/src/clients/http/signing.rs | 4 +--- core/lib/protobuf_config/src/contracts.rs | 6 +++--- core/lib/zksync_core/src/api_server/web3/state.rs | 2 +- core/lib/zksync_core/src/lib.rs | 2 +- core/lib/zksync_core/src/proof_data_handler/mod.rs | 13 +++---------- core/lib/zksync_core/src/state_keeper/mod.rs | 2 +- core/lib/zksync_core/src/temp_config_store/mod.rs | 4 ++-- .../src/implementations/layers/eth_sender.rs | 3 +-- .../implementations/layers/pk_signing_eth_client.rs | 4 +--- .../implementations/layers/proof_data_handler.rs | 2 +- 11 files changed, 16 insertions(+), 28 deletions(-) diff --git a/core/bin/zksync_server/src/main.rs b/core/bin/zksync_server/src/main.rs index 72335b93d45..58e155a46b9 100644 --- a/core/bin/zksync_server/src/main.rs +++ b/core/bin/zksync_server/src/main.rs @@ -1,4 +1,4 @@ -use std::{path::PathBuf, str::FromStr, time::Duration}; +use std::{str::FromStr, time::Duration}; use anyhow::Context as _; use clap::Parser; diff --git a/core/lib/eth_client/src/clients/http/signing.rs b/core/lib/eth_client/src/clients/http/signing.rs index 06b462afa22..c8cdf55e462 100644 --- a/core/lib/eth_client/src/clients/http/signing.rs +++ b/core/lib/eth_client/src/clients/http/signing.rs @@ -1,9 +1,7 @@ use std::{fmt, sync::Arc}; use async_trait::async_trait; -use zksync_config::{ - configs::ContractsConfigReduced, ContractsConfig, ETHClientConfig, ETHSenderConfig, -}; +use zksync_config::{configs::ContractsConfigReduced, ETHClientConfig, ETHSenderConfig}; use zksync_contracts::zksync_contract; use zksync_eth_signer::{raw_ethereum_tx::TransactionParameters, EthereumSigner, PrivateKeySigner}; use zksync_types::{ diff --git a/core/lib/protobuf_config/src/contracts.rs b/core/lib/protobuf_config/src/contracts.rs index 15d145b1132..31d9ce0f243 100644 --- a/core/lib/protobuf_config/src/contracts.rs +++ b/core/lib/protobuf_config/src/contracts.rs @@ -1,8 +1,8 @@ use anyhow::Context as _; -use zksync_config::{configs, configs::ContractsConfigReduced}; -use zksync_protobuf::{repr::ProtoRepr, required, ProtoFmt}; +use zksync_config::configs::ContractsConfigReduced; +use zksync_protobuf::{repr::ProtoRepr, required}; -use crate::{parse_h160, parse_h256, proto::contracts as proto}; +use crate::{parse_h160, proto::contracts as proto}; impl ProtoRepr for proto::Contracts { type Type = ContractsConfigReduced; diff --git a/core/lib/zksync_core/src/api_server/web3/state.rs b/core/lib/zksync_core/src/api_server/web3/state.rs index 7f5f40d5b26..38839595162 100644 --- a/core/lib/zksync_core/src/api_server/web3/state.rs +++ b/core/lib/zksync_core/src/api_server/web3/state.rs @@ -12,7 +12,7 @@ use lru::LruCache; use tokio::sync::{watch, Mutex}; use vise::GaugeGuard; use zksync_config::configs::{ - api::Web3JsonRpcConfig, chain::NetworkConfig, ContractsConfig, ContractsConfigReduced, + api::Web3JsonRpcConfig, chain::NetworkConfig, ContractsConfigReduced, }; use zksync_dal::{ConnectionPool, StorageProcessor}; use zksync_types::{ diff --git a/core/lib/zksync_core/src/lib.rs b/core/lib/zksync_core/src/lib.rs index 7b74e2688a7..0884850bc2d 100644 --- a/core/lib/zksync_core/src/lib.rs +++ b/core/lib/zksync_core/src/lib.rs @@ -29,7 +29,7 @@ use zksync_config::{ database::{MerkleTreeConfig, MerkleTreeMode}, ContractsConfigReduced, }, - ApiConfig, ContractsConfig, DBConfig, GenesisConfig, PostgresConfig, + ApiConfig, DBConfig, GenesisConfig, PostgresConfig, }; use zksync_contracts::governance_contract; use zksync_dal::{healthcheck::ConnectionPoolHealthCheck, ConnectionPool}; diff --git a/core/lib/zksync_core/src/proof_data_handler/mod.rs b/core/lib/zksync_core/src/proof_data_handler/mod.rs index b0b9c528d66..ef4ee452548 100644 --- a/core/lib/zksync_core/src/proof_data_handler/mod.rs +++ b/core/lib/zksync_core/src/proof_data_handler/mod.rs @@ -3,20 +3,13 @@ use std::{net::SocketAddr, sync::Arc}; use anyhow::Context as _; use axum::{extract::Path, routing::post, Json, Router}; use tokio::sync::watch; -use zksync_config::{ - configs::{ - proof_data_handler::ProtocolVersionLoadingMode, ContractsConfigReduced, - ProofDataHandlerConfig, - }, - ContractsConfig, +use zksync_config::configs::{ + proof_data_handler::ProtocolVersionLoadingMode, ProofDataHandlerConfig, }; use zksync_dal::ConnectionPool; use zksync_object_store::ObjectStore; use zksync_prover_interface::api::{ProofGenerationDataRequest, SubmitProofRequest}; -use zksync_types::{ - protocol_version::{L1VerifierConfig, VerifierParams}, - H256, -}; +use zksync_types::protocol_version::L1VerifierConfig; use crate::proof_data_handler::request_processor::RequestProcessor; diff --git a/core/lib/zksync_core/src/state_keeper/mod.rs b/core/lib/zksync_core/src/state_keeper/mod.rs index 68a09fb4e97..ab598a7b4d7 100644 --- a/core/lib/zksync_core/src/state_keeper/mod.rs +++ b/core/lib/zksync_core/src/state_keeper/mod.rs @@ -6,7 +6,7 @@ use zksync_config::{ chain::{MempoolConfig, NetworkConfig, StateKeeperConfig}, ContractsConfigReduced, }, - ContractsConfig, DBConfig, + DBConfig, }; use zksync_dal::ConnectionPool; use zksync_object_store::ObjectStore; diff --git a/core/lib/zksync_core/src/temp_config_store/mod.rs b/core/lib/zksync_core/src/temp_config_store/mod.rs index 33c9ac06dff..a5777467f7a 100644 --- a/core/lib/zksync_core/src/temp_config_store/mod.rs +++ b/core/lib/zksync_core/src/temp_config_store/mod.rs @@ -11,8 +11,8 @@ use zksync_config::{ FriProofCompressorConfig, FriProverConfig, FriWitnessGeneratorConfig, PrometheusConfig, ProofDataHandlerConfig, WitnessGeneratorConfig, }, - ApiConfig, ContractsConfig, DBConfig, ETHClientConfig, ETHSenderConfig, ETHWatchConfig, - GasAdjusterConfig, ObjectStoreConfig, PostgresConfig, + ApiConfig, DBConfig, ETHClientConfig, ETHSenderConfig, ETHWatchConfig, GasAdjusterConfig, + ObjectStoreConfig, PostgresConfig, }; use zksync_protobuf::{read_optional, repr::ProtoRepr, ProtoFmt}; diff --git a/core/node/node_framework/src/implementations/layers/eth_sender.rs b/core/node/node_framework/src/implementations/layers/eth_sender.rs index 2ce4e071344..f657c73bc09 100644 --- a/core/node/node_framework/src/implementations/layers/eth_sender.rs +++ b/core/node/node_framework/src/implementations/layers/eth_sender.rs @@ -1,8 +1,7 @@ use std::sync::Arc; use zksync_config::configs::{ - chain::NetworkConfig, eth_sender::ETHSenderConfig, ContractsConfig, ContractsConfigReduced, - ETHClientConfig, + chain::NetworkConfig, eth_sender::ETHSenderConfig, ContractsConfigReduced, ETHClientConfig, }; use zksync_core::eth_sender::{Aggregator, EthTxAggregator, EthTxManager}; use zksync_eth_client::{clients::PKSigningClient, BoundEthInterface}; diff --git a/core/node/node_framework/src/implementations/layers/pk_signing_eth_client.rs b/core/node/node_framework/src/implementations/layers/pk_signing_eth_client.rs index b7935c0b476..1a9a70258ef 100644 --- a/core/node/node_framework/src/implementations/layers/pk_signing_eth_client.rs +++ b/core/node/node_framework/src/implementations/layers/pk_signing_eth_client.rs @@ -1,8 +1,6 @@ use std::sync::Arc; -use zksync_config::{ - configs::ContractsConfigReduced, ContractsConfig, ETHClientConfig, ETHSenderConfig, -}; +use zksync_config::{configs::ContractsConfigReduced, ETHClientConfig, ETHSenderConfig}; use zksync_eth_client::clients::PKSigningClient; use crate::{ diff --git a/core/node/node_framework/src/implementations/layers/proof_data_handler.rs b/core/node/node_framework/src/implementations/layers/proof_data_handler.rs index 2bc3000180e..bd0721e58f0 100644 --- a/core/node/node_framework/src/implementations/layers/proof_data_handler.rs +++ b/core/node/node_framework/src/implementations/layers/proof_data_handler.rs @@ -1,6 +1,6 @@ use std::sync::Arc; -use zksync_config::{configs::ProofDataHandlerConfig, ContractsConfig}; +use zksync_config::configs::ProofDataHandlerConfig; use zksync_core::proof_data_handler; use zksync_dal::ConnectionPool; use zksync_object_store::ObjectStore; From a4e7ce71922500f8b4674b7b91c1ee84c21f8d8a Mon Sep 17 00:00:00 2001 From: Danil Date: Mon, 25 Mar 2024 12:56:41 +0100 Subject: [PATCH 35/65] Add wallets to protobuf config Signed-off-by: Danil --- core/lib/config/src/configs/mod.rs | 1 + core/lib/config/src/configs/wallets.rs | 47 +++++++++++ core/lib/protobuf_config/src/lib.rs | 1 + .../protobuf_config/src/proto/wallets.proto | 15 ++++ core/lib/protobuf_config/src/wallets.rs | 79 +++++++++++++++++++ 5 files changed, 143 insertions(+) create mode 100644 core/lib/config/src/configs/wallets.rs create mode 100644 core/lib/protobuf_config/src/proto/wallets.proto create mode 100644 core/lib/protobuf_config/src/wallets.rs diff --git a/core/lib/config/src/configs/mod.rs b/core/lib/config/src/configs/mod.rs index 8e725243047..fe59dab2b24 100644 --- a/core/lib/config/src/configs/mod.rs +++ b/core/lib/config/src/configs/mod.rs @@ -44,6 +44,7 @@ pub mod observability; pub mod proof_data_handler; pub mod snapshots_creator; pub mod utils; +pub mod wallets; pub mod witness_generator; const BYTES_IN_MEGABYTE: usize = 1_024 * 1_024; diff --git a/core/lib/config/src/configs/wallets.rs b/core/lib/config/src/configs/wallets.rs new file mode 100644 index 00000000000..8d24a59d3ee --- /dev/null +++ b/core/lib/config/src/configs/wallets.rs @@ -0,0 +1,47 @@ +use zksync_basic_types::{Address, H256}; + +pub struct Wallet { + address: Address, + private_key: Option, +} + +impl Wallet { + pub fn from_address(address: Address) -> Self { + Self { + address, + private_key: None, + } + } + + pub fn from_private_key(private_key: H256) -> Self { + // let address = PackedEthSignature::address_from_private_key(&private_key) + // .expect("Failed to get address from private key"); + // TODO fix it + let address = Address::zero(); + Self { + address, + private_key: Some(private_key), + } + } + + pub fn address(&self) -> Address { + self.address + } + pub fn private_key(&self) -> Option { + self.private_key + } +} + +pub struct EthSender { + pub operator: Wallet, + pub blob_operator: Wallet, +} + +pub struct StateKeeper { + pub fee_account: Wallet, +} + +pub struct Wallets { + pub eth_sender: Option, + pub state_keeper: Option, +} diff --git a/core/lib/protobuf_config/src/lib.rs b/core/lib/protobuf_config/src/lib.rs index 757ce8f7f80..964da1a3541 100644 --- a/core/lib/protobuf_config/src/lib.rs +++ b/core/lib/protobuf_config/src/lib.rs @@ -32,6 +32,7 @@ pub mod testonly; #[cfg(test)] mod tests; mod utils; +mod wallets; use anyhow::Context as _; use zksync_types::{H160, H256}; diff --git a/core/lib/protobuf_config/src/proto/wallets.proto b/core/lib/protobuf_config/src/proto/wallets.proto new file mode 100644 index 00000000000..af4c22a17fa --- /dev/null +++ b/core/lib/protobuf_config/src/proto/wallets.proto @@ -0,0 +1,15 @@ +syntax = "proto3"; + +package zksync.config.wallets; + + +message Wallet { + optional bytes private_key = 1; // required + optional bytes address = 2; // required +} + +message Wallets { + optional Wallet operator = 1; // Private key is required + optional Wallet blob_operator = 2; // Private key is required + optional Wallet fee_account = 3; // Only address required for server +} \ No newline at end of file diff --git a/core/lib/protobuf_config/src/wallets.rs b/core/lib/protobuf_config/src/wallets.rs new file mode 100644 index 00000000000..9155980a0d1 --- /dev/null +++ b/core/lib/protobuf_config/src/wallets.rs @@ -0,0 +1,79 @@ +use crate::{parse_h160, parse_h256}; +use zksync_config::configs::wallets::{EthSender, StateKeeper, Wallet}; +use zksync_config::configs::{self}; +use zksync_protobuf::{required, ProtoRepr}; + +use crate::proto::wallets as proto; + +impl ProtoRepr for proto::Wallets { + type Type = configs::wallets::Wallets; + fn read(&self) -> anyhow::Result { + let eth_sender = if self.operator.is_some() && self.blob_operator.is_some() { + Some(EthSender { + operator: Wallet::from_private_key(parse_h256(required( + &self.operator.clone().unwrap().private_key, + )?)?), + blob_operator: Wallet::from_private_key(parse_h256(required( + &self.blob_operator.clone().unwrap().private_key, + )?)?), + }) + } else { + None + }; + + let state_keeper = if let Some(fee_account) = &self.fee_account { + // TODO verify private_key and address + Some(StateKeeper { + fee_account: Wallet::from_address(parse_h160(required(&fee_account.address)?)?), + }) + } else { + None + }; + + Ok(Self::Type { + eth_sender, + state_keeper, + }) + } + + fn build(this: &Self::Type) -> Self { + let (operator, blob_operator) = if let Some(eth_sender) = &this.eth_sender { + ( + Some(proto::Wallet { + address: Some(eth_sender.operator.address().as_bytes().to_vec()), + private_key: eth_sender + .operator + .private_key() + .map(|a| a.as_bytes().to_vec()), + }), + Some(proto::Wallet { + address: Some(eth_sender.blob_operator.address().as_bytes().to_vec()), + private_key: eth_sender + .blob_operator + .private_key() + .map(|a| a.as_bytes().to_vec()), + }), + ) + } else { + (None, None) + }; + + let fee_account = if let Some(state_keeper) = &this.state_keeper { + Some(proto::Wallet { + address: Some(state_keeper.fee_account.address().as_bytes().to_vec()), + private_key: state_keeper + .fee_account + .private_key() + .map(|a| a.as_bytes().to_vec()), + }) + } else { + None + }; + + Self { + blob_operator, + operator, + fee_account, + } + } +} From e696e3b8554083cdf107348ec967986cd98770c8 Mon Sep 17 00:00:00 2001 From: Danil Date: Tue, 26 Mar 2024 16:29:19 +0100 Subject: [PATCH 36/65] Move all configs to protobuf Signed-off-by: Danil --- core/bin/block_reverter/src/main.rs | 4 +- core/bin/zksync_server/src/main.rs | 4 +- core/lib/config/src/configs/api.rs | 2 - .../config/src/configs/contract_verifier.rs | 2 + core/lib/config/src/configs/eth_sender.rs | 13 +- core/lib/config/src/configs/fri_prover.rs | 4 +- core/lib/config/src/configs/general.rs | 32 ++ core/lib/config/src/configs/genesis.rs | 2 +- core/lib/config/src/configs/house_keeper.rs | 9 +- core/lib/config/src/configs/mod.rs | 4 +- core/lib/config/src/configs/observability.rs | 1 + .../config/src/configs/proof_data_handler.rs | 2 - .../config/src/configs/snapshots_creator.rs | 3 + core/lib/config/src/lib.rs | 2 +- core/lib/config/src/testonly.rs | 23 +- core/lib/env_config/src/eth_sender.rs | 10 +- core/lib/env_config/src/genesis.rs | 2 +- core/lib/env_config/src/proof_data_handler.rs | 2 - .../eth_client/src/clients/http/signing.rs | 8 +- core/lib/protobuf_config/src/alerts.rs | 19 - core/lib/protobuf_config/src/api.rs | 21 -- core/lib/protobuf_config/src/chain.rs | 100 +---- .../protobuf_config/src/circuit_breaker.rs | 30 ++ .../protobuf_config/src/contract_verifier.rs | 5 + core/lib/protobuf_config/src/database.rs | 10 +- .../src/{eth_sender.rs => eth.rs} | 38 +- core/lib/protobuf_config/src/eth_client.rs | 22 -- core/lib/protobuf_config/src/eth_watch.rs | 23 -- .../src/fri_proof_compressor.rs | 49 --- core/lib/protobuf_config/src/fri_prover.rs | 98 ----- .../protobuf_config/src/fri_prover_gateway.rs | 34 -- .../protobuf_config/src/fri_prover_group.rs | 81 ---- .../src/fri_witness_generator.rs | 39 -- .../src/fri_witness_vector_generator.rs | 56 --- core/lib/protobuf_config/src/general.rs | 76 ++++ core/lib/protobuf_config/src/genesis.rs | 8 +- core/lib/protobuf_config/src/house_keeper.rs | 45 +-- core/lib/protobuf_config/src/lib.rs | 19 +- core/lib/protobuf_config/src/observability.rs | 26 +- .../protobuf_config/src/proof_data_handler.rs | 30 +- .../protobuf_config/src/proto/alerts.proto | 7 - core/lib/protobuf_config/src/proto/api.proto | 6 +- .../lib/protobuf_config/src/proto/chain.proto | 26 -- .../src/proto/circuit_breaker.proto | 12 + .../src/proto/circuit_breaker.rs | 29 ++ .../protobuf_config/src/proto/consensus.proto | 69 ++++ .../src/proto/contract_verifier.proto | 11 +- .../protobuf_config/src/proto/database.proto | 10 +- .../src/proto/eth_client.proto | 8 - .../src/proto/eth_sender.proto | 14 +- .../protobuf_config/src/proto/eth_watch.proto | 8 - .../src/proto/fri_proof_compressor.proto | 15 - .../src/proto/fri_prover.proto | 24 -- .../src/proto/fri_prover_gateway.proto | 11 - .../src/proto/fri_prover_group.proto | 24 -- .../src/proto/fri_witness_generator.proto | 13 - .../proto/fri_witness_vector_generator.proto | 13 - .../protobuf_config/src/proto/general.proto | 36 ++ .../protobuf_config/src/proto/genesis.proto | 8 +- .../src/proto/house_keeper.proto | 9 +- core/lib/protobuf_config/src/proto/mod.rs | 1 + .../src/proto/observability.proto | 12 +- .../src/proto/proof_data_handler.proto | 15 - .../protobuf_config/src/proto/prover.proto | 94 +++++ .../src/proto/snapshots_creator.proto | 2 + core/lib/protobuf_config/src/prover.rs | 345 ++++++++++++++++++ .../protobuf_config/src/snapshots_creator.rs | 12 + core/lib/zksync_core/build.rs | 2 +- .../src/api_server/web3/namespaces/en.rs | 4 +- .../lib/zksync_core/src/block_reverter/mod.rs | 4 +- core/lib/zksync_core/src/eth_sender/tests.rs | 4 +- .../lib/zksync_core/src/proto/consensus.proto | 69 ---- core/lib/zksync_core/src/proto/mod.proto | 108 +++--- .../zksync_core/src/temp_config_store/mod.rs | 4 +- .../node/node_framework/examples/main_node.rs | 8 +- .../src/implementations/layers/eth_sender.rs | 6 +- .../layers/pk_signing_eth_client.rs | 6 +- etc/env/file_based/general.yaml | 21 +- 78 files changed, 1016 insertions(+), 1012 deletions(-) create mode 100644 core/lib/config/src/configs/general.rs delete mode 100644 core/lib/protobuf_config/src/alerts.rs create mode 100644 core/lib/protobuf_config/src/circuit_breaker.rs rename core/lib/protobuf_config/src/{eth_sender.rs => eth.rs} (91%) delete mode 100644 core/lib/protobuf_config/src/eth_client.rs delete mode 100644 core/lib/protobuf_config/src/eth_watch.rs delete mode 100644 core/lib/protobuf_config/src/fri_proof_compressor.rs delete mode 100644 core/lib/protobuf_config/src/fri_prover.rs delete mode 100644 core/lib/protobuf_config/src/fri_prover_gateway.rs delete mode 100644 core/lib/protobuf_config/src/fri_prover_group.rs delete mode 100644 core/lib/protobuf_config/src/fri_witness_generator.rs delete mode 100644 core/lib/protobuf_config/src/fri_witness_vector_generator.rs create mode 100644 core/lib/protobuf_config/src/general.rs delete mode 100644 core/lib/protobuf_config/src/proto/alerts.proto create mode 100644 core/lib/protobuf_config/src/proto/circuit_breaker.proto create mode 100644 core/lib/protobuf_config/src/proto/circuit_breaker.rs create mode 100644 core/lib/protobuf_config/src/proto/consensus.proto delete mode 100644 core/lib/protobuf_config/src/proto/eth_client.proto delete mode 100644 core/lib/protobuf_config/src/proto/eth_watch.proto delete mode 100644 core/lib/protobuf_config/src/proto/fri_proof_compressor.proto delete mode 100644 core/lib/protobuf_config/src/proto/fri_prover.proto delete mode 100644 core/lib/protobuf_config/src/proto/fri_prover_gateway.proto delete mode 100644 core/lib/protobuf_config/src/proto/fri_prover_group.proto delete mode 100644 core/lib/protobuf_config/src/proto/fri_witness_generator.proto delete mode 100644 core/lib/protobuf_config/src/proto/fri_witness_vector_generator.proto create mode 100644 core/lib/protobuf_config/src/proto/general.proto delete mode 100644 core/lib/protobuf_config/src/proto/proof_data_handler.proto create mode 100644 core/lib/protobuf_config/src/proto/prover.proto create mode 100644 core/lib/protobuf_config/src/prover.rs diff --git a/core/bin/block_reverter/src/main.rs b/core/bin/block_reverter/src/main.rs index 3e5d5595069..d25c915b030 100644 --- a/core/bin/block_reverter/src/main.rs +++ b/core/bin/block_reverter/src/main.rs @@ -2,7 +2,7 @@ use anyhow::Context as _; use clap::{Parser, Subcommand}; use tokio::io::{self, AsyncReadExt}; use zksync_config::{ - configs::ObservabilityConfig, ContractsConfig, DBConfig, ETHClientConfig, ETHSenderConfig, + configs::ObservabilityConfig, ContractsConfig, DBConfig, ETHClientConfig, ETHConfig, PostgresConfig, }; use zksync_core::block_reverter::{ @@ -87,7 +87,7 @@ async fn main() -> anyhow::Result<()> { } let _guard = builder.build(); - let eth_sender = ETHSenderConfig::from_env().context("ETHSenderConfig::from_env()")?; + let eth_sender = ETHConfig::from_env().context("ETHSenderConfig::from_env()")?; let db_config = DBConfig::from_env().context("DBConfig::from_env()")?; let eth_client = ETHClientConfig::from_env().context("ETHClientConfig::from_env()")?; let default_priority_fee_per_gas = diff --git a/core/bin/zksync_server/src/main.rs b/core/bin/zksync_server/src/main.rs index 8d4a992c66d..baa312a3fe0 100644 --- a/core/bin/zksync_server/src/main.rs +++ b/core/bin/zksync_server/src/main.rs @@ -15,7 +15,7 @@ use zksync_config::{ FriWitnessGeneratorConfig, ObservabilityConfig, PrometheusConfig, ProofDataHandlerConfig, WitnessGeneratorConfig, }, - ApiConfig, ContractsConfig, DBConfig, ETHClientConfig, ETHSenderConfig, ETHWatchConfig, + ApiConfig, ContractsConfig, DBConfig, ETHClientConfig, ETHConfig, ETHWatchConfig, GasAdjusterConfig, GenesisConfig, ObjectStoreConfig, PostgresConfig, }; use zksync_core::{ @@ -137,7 +137,7 @@ async fn main() -> anyhow::Result<()> { api_config: ApiConfig::from_env().ok(), db_config: DBConfig::from_env().ok(), eth_client_config: ETHClientConfig::from_env().ok(), - eth_sender_config: ETHSenderConfig::from_env().ok(), + eth_sender_config: ETHConfig::from_env().ok(), eth_watch_config: ETHWatchConfig::from_env().ok(), gas_adjuster_config: GasAdjusterConfig::from_env().ok(), object_store_config: ObjectStoreConfig::from_env().ok(), diff --git a/core/lib/config/src/configs/api.rs b/core/lib/config/src/configs/api.rs index 6e45b33bd2d..31df6fcdc7d 100644 --- a/core/lib/config/src/configs/api.rs +++ b/core/lib/config/src/configs/api.rs @@ -10,8 +10,6 @@ pub use crate::configs::PrometheusConfig; pub struct ApiConfig { /// Configuration options for the Web3 JSON RPC servers. pub web3_json_rpc: Web3JsonRpcConfig, - /// Configuration options for the REST servers. - pub contract_verification: ContractVerificationApiConfig, /// Configuration options for the Prometheus exporter. pub prometheus: PrometheusConfig, /// Configuration options for the Health check. diff --git a/core/lib/config/src/configs/contract_verifier.rs b/core/lib/config/src/configs/contract_verifier.rs index db3c8fa1b52..7b79de4a709 100644 --- a/core/lib/config/src/configs/contract_verifier.rs +++ b/core/lib/config/src/configs/contract_verifier.rs @@ -10,6 +10,8 @@ pub struct ContractVerifierConfig { pub polling_interval: Option, /// Port to which the Prometheus exporter server is listening. pub prometheus_port: u16, + pub port: u32, + pub url: String, } impl ContractVerifierConfig { diff --git a/core/lib/config/src/configs/eth_sender.rs b/core/lib/config/src/configs/eth_sender.rs index 71555649461..8abcd9eebd2 100644 --- a/core/lib/config/src/configs/eth_sender.rs +++ b/core/lib/config/src/configs/eth_sender.rs @@ -3,16 +3,20 @@ use std::time::Duration; use serde::Deserialize; use zksync_basic_types::H256; +use crate::ETHWatchConfig; + /// Configuration for the Ethereum sender crate. #[derive(Debug, Deserialize, Clone, PartialEq)] -pub struct ETHSenderConfig { +pub struct ETHConfig { /// Options related to the Ethereum sender directly. pub sender: SenderConfig, /// Options related to the `GasAdjuster` submodule. pub gas_adjuster: GasAdjusterConfig, + pub watcher: ETHWatchConfig, + pub web3_url: String, } -impl ETHSenderConfig { +impl ETHConfig { /// Creates a mock configuration object suitable for unit tests. /// Values inside match the config used for localhost development. pub fn for_tests() -> Self { @@ -50,6 +54,11 @@ impl ETHSenderConfig { internal_pubdata_pricing_multiplier: 1.0, max_blob_base_fee: None, }, + watcher: ETHWatchConfig { + confirmations_for_eth_event: None, + eth_node_poll_interval: 0, + }, + web3_url: "localhost:8545".to_string(), } } } diff --git a/core/lib/config/src/configs/fri_prover.rs b/core/lib/config/src/configs/fri_prover.rs index a5e99a40737..958b8c5fec2 100644 --- a/core/lib/config/src/configs/fri_prover.rs +++ b/core/lib/config/src/configs/fri_prover.rs @@ -2,6 +2,8 @@ use std::time::Duration; use serde::Deserialize; +use crate::ObjectStoreConfig; + #[derive(Debug, Deserialize, Clone, PartialEq)] pub enum SetupLoadMode { FromDisk, @@ -23,9 +25,9 @@ pub struct FriProverConfig { pub queue_capacity: usize, pub witness_vector_receiver_port: u16, pub zone_read_url: String, - // whether to write to public GCS bucket for https://github.com/matter-labs/era-boojum-validator-cli pub shall_save_to_public_bucket: bool, + pub object_store: Option, } impl FriProverConfig { diff --git a/core/lib/config/src/configs/general.rs b/core/lib/config/src/configs/general.rs new file mode 100644 index 00000000000..b9b63b8a7db --- /dev/null +++ b/core/lib/config/src/configs/general.rs @@ -0,0 +1,32 @@ +use crate::{ + configs::{ + chain::{CircuitBreakerConfig, MempoolConfig, OperationsManagerConfig, StateKeeperConfig}, + fri_prover_group::FriProverGroupConfig, + house_keeper::HouseKeeperConfig, + FriProofCompressorConfig, FriProverConfig, FriProverGatewayConfig, + FriWitnessGeneratorConfig, FriWitnessVectorGeneratorConfig, PrometheusConfig, + ProofDataHandlerConfig, + }, + ApiConfig, DBConfig, ETHConfig, PostgresConfig, +}; + +#[derive(Debug, PartialEq)] +pub struct General { + pub postgres_config: Option, + pub api_config: Option, + pub circuit_breaker_config: Option, + pub mempool_config: Option, + pub operations_manager_config: Option, + pub state_keeper_config: Option, + pub house_keeper_config: Option, + pub proof_compressor_config: Option, + pub prover_config: Option, + pub prover_gateway: Option, + pub witness_vector_generator: Option, + pub prover_group_config: Option, + pub witness_generator: Option, + pub prometheus_config: Option, + pub proof_data_handler_config: Option, + pub db_config: Option, + pub eth: Option, +} diff --git a/core/lib/config/src/configs/genesis.rs b/core/lib/config/src/configs/genesis.rs index d5a20d13244..69d838f48ae 100644 --- a/core/lib/config/src/configs/genesis.rs +++ b/core/lib/config/src/configs/genesis.rs @@ -24,7 +24,7 @@ pub struct GenesisConfig { pub recursion_leaf_level_vk_hash: H256, pub recursion_circuits_set_vks_hash: H256, pub recursion_scheduler_level_vk_hash: H256, - pub snark_wrapper_vk_hash: H256, + pub fee_account: Address, pub shared_bridge: Option, pub dummy_prover: bool, } diff --git a/core/lib/config/src/configs/house_keeper.rs b/core/lib/config/src/configs/house_keeper.rs index 75cd919e2f8..fb37c48d82e 100644 --- a/core/lib/config/src/configs/house_keeper.rs +++ b/core/lib/config/src/configs/house_keeper.rs @@ -9,11 +9,8 @@ pub struct HouseKeeperConfig { pub prover_stats_reporting_interval_ms: u64, pub witness_job_moving_interval_ms: u64, pub witness_generator_stats_reporting_interval_ms: u64, - pub fri_witness_job_moving_interval_ms: u64, - pub fri_prover_job_retrying_interval_ms: u64, - pub fri_witness_generator_job_retrying_interval_ms: u64, + pub witness_generator_job_retrying_interval_ms: u64, pub prover_db_pool_size: u32, - pub fri_prover_stats_reporting_interval_ms: u64, - pub fri_proof_compressor_job_retrying_interval_ms: u64, - pub fri_proof_compressor_stats_reporting_interval_ms: u64, + pub proof_compressor_job_retrying_interval_ms: u64, + pub proof_compressor_stats_reporting_interval_ms: u64, } diff --git a/core/lib/config/src/configs/mod.rs b/core/lib/config/src/configs/mod.rs index 384a4021702..0a368a02643 100644 --- a/core/lib/config/src/configs/mod.rs +++ b/core/lib/config/src/configs/mod.rs @@ -6,13 +6,14 @@ pub use self::{ contracts::{ContractsConfig, ContractsConfigReduced}, database::{DBConfig, PostgresConfig}, eth_client::ETHClientConfig, - eth_sender::{ETHSenderConfig, GasAdjusterConfig}, + eth_sender::{ETHConfig, GasAdjusterConfig}, eth_watch::ETHWatchConfig, fri_proof_compressor::FriProofCompressorConfig, fri_prover::FriProverConfig, fri_prover_gateway::FriProverGatewayConfig, fri_witness_generator::FriWitnessGeneratorConfig, fri_witness_vector_generator::FriWitnessVectorGeneratorConfig, + general::General, genesis::GenesisConfig, object_store::ObjectStoreConfig, observability::{ObservabilityConfig, OpentelemetryConfig}, @@ -37,6 +38,7 @@ pub mod fri_prover_gateway; pub mod fri_prover_group; pub mod fri_witness_generator; pub mod fri_witness_vector_generator; +mod general; pub mod genesis; pub mod house_keeper; pub mod object_store; diff --git a/core/lib/config/src/configs/observability.rs b/core/lib/config/src/configs/observability.rs index ce7a289f0cc..cb748489046 100644 --- a/core/lib/config/src/configs/observability.rs +++ b/core/lib/config/src/configs/observability.rs @@ -11,6 +11,7 @@ pub struct ObservabilityConfig { /// Format of the logs as expected by the `vlog` crate. /// Currently must be either `plain` or `json`. pub log_format: String, + pub sporadic_crypto_errors_substrs: Vec, } #[derive(Debug, Clone, PartialEq)] diff --git a/core/lib/config/src/configs/proof_data_handler.rs b/core/lib/config/src/configs/proof_data_handler.rs index e81e55b8a53..6de531ffc5d 100644 --- a/core/lib/config/src/configs/proof_data_handler.rs +++ b/core/lib/config/src/configs/proof_data_handler.rs @@ -12,8 +12,6 @@ pub enum ProtocolVersionLoadingMode { pub struct ProofDataHandlerConfig { pub http_port: u16, pub proof_generation_timeout_in_secs: u16, - pub protocol_version_loading_mode: ProtocolVersionLoadingMode, - pub fri_protocol_version_id: u16, } impl ProofDataHandlerConfig { diff --git a/core/lib/config/src/configs/snapshots_creator.rs b/core/lib/config/src/configs/snapshots_creator.rs index 2f37c5d3afd..7d297f60780 100644 --- a/core/lib/config/src/configs/snapshots_creator.rs +++ b/core/lib/config/src/configs/snapshots_creator.rs @@ -1,5 +1,7 @@ use serde::Deserialize; +use crate::ObjectStoreConfig; + #[derive(Debug, Clone, PartialEq, Deserialize)] pub struct SnapshotsCreatorConfig { #[serde(default = "snapshots_creator_storage_logs_chunk_size_default")] @@ -7,6 +9,7 @@ pub struct SnapshotsCreatorConfig { #[serde(default = "snapshots_creator_concurrent_queries_count")] pub concurrent_queries_count: u32, + pub object_store: Option, } fn snapshots_creator_storage_logs_chunk_size_default() -> u64 { diff --git a/core/lib/config/src/lib.rs b/core/lib/config/src/lib.rs index 63d1e6f9cc6..4ed375b9f5a 100644 --- a/core/lib/config/src/lib.rs +++ b/core/lib/config/src/lib.rs @@ -1,7 +1,7 @@ #![allow(clippy::upper_case_acronyms, clippy::derive_partial_eq_without_eq)] pub use crate::configs::{ - ApiConfig, ContractVerifierConfig, ContractsConfig, DBConfig, ETHClientConfig, ETHSenderConfig, + ApiConfig, ContractVerifierConfig, ContractsConfig, DBConfig, ETHClientConfig, ETHConfig, ETHWatchConfig, GasAdjusterConfig, GenesisConfig, ObjectStoreConfig, PostgresConfig, SnapshotsCreatorConfig, }; diff --git a/core/lib/config/src/testonly.rs b/core/lib/config/src/testonly.rs index c53e921a492..a6c0eb5f2fc 100644 --- a/core/lib/config/src/testonly.rs +++ b/core/lib/config/src/testonly.rs @@ -172,7 +172,6 @@ impl RandomConfig for configs::ApiConfig { fn sample(g: &mut Gen) -> Self { Self { web3_json_rpc: g.gen(), - contract_verification: g.gen(), prometheus: g.gen(), healthcheck: g.gen(), merkle_tree: g.gen(), @@ -334,6 +333,8 @@ impl RandomConfig for configs::ContractVerifierConfig { compilation_timeout: g.gen(), polling_interval: g.gen(), prometheus_port: g.gen(), + port: g.gen(), + url: g.gen(), } } } @@ -438,11 +439,13 @@ impl RandomConfig for configs::ETHClientConfig { } } -impl RandomConfig for configs::ETHSenderConfig { +impl RandomConfig for configs::ETHConfig { fn sample(g: &mut Gen) -> Self { Self { sender: g.gen(), gas_adjuster: g.gen(), + watcher: g.gen(), + web3_url: g.gen(), } } } @@ -568,6 +571,7 @@ impl RandomConfig for configs::FriProverConfig { witness_vector_receiver_port: g.gen(), zone_read_url: g.gen(), shall_save_to_public_bucket: g.gen(), + object_store: g.gen(), } } } @@ -650,13 +654,10 @@ impl RandomConfig for configs::house_keeper::HouseKeeperConfig { prover_stats_reporting_interval_ms: g.gen(), witness_job_moving_interval_ms: g.gen(), witness_generator_stats_reporting_interval_ms: g.gen(), - fri_witness_job_moving_interval_ms: g.gen(), - fri_prover_job_retrying_interval_ms: g.gen(), - fri_witness_generator_job_retrying_interval_ms: g.gen(), + witness_generator_job_retrying_interval_ms: g.gen(), prover_db_pool_size: g.gen(), - fri_prover_stats_reporting_interval_ms: g.gen(), - fri_proof_compressor_job_retrying_interval_ms: g.gen(), - fri_proof_compressor_stats_reporting_interval_ms: g.gen(), + proof_compressor_job_retrying_interval_ms: g.gen(), + proof_compressor_stats_reporting_interval_ms: g.gen(), } } } @@ -704,8 +705,6 @@ impl RandomConfig for configs::ProofDataHandlerConfig { Self { http_port: g.gen(), proof_generation_timeout_in_secs: g.gen(), - protocol_version_loading_mode: g.gen(), - fri_protocol_version_id: g.gen(), } } } @@ -715,6 +714,7 @@ impl RandomConfig for configs::SnapshotsCreatorConfig { Self { storage_logs_chunk_size: g.gen(), concurrent_queries_count: g.gen(), + object_store: g.gen(), } } } @@ -751,6 +751,7 @@ impl RandomConfig for configs::ObservabilityConfig { sentry_environment: g.gen(), log_format: g.gen(), opentelemetry: g.gen(), + sporadic_crypto_errors_substrs: g.gen(), } } } @@ -779,7 +780,7 @@ impl RandomConfig for configs::GenesisConfig { recursion_leaf_level_vk_hash: g.gen(), recursion_circuits_set_vks_hash: g.gen(), recursion_scheduler_level_vk_hash: g.gen(), - snark_wrapper_vk_hash: g.gen(), + fee_account: g.gen(), shared_bridge: g.gen(), dummy_prover: g.gen(), } diff --git a/core/lib/env_config/src/eth_sender.rs b/core/lib/env_config/src/eth_sender.rs index d42818e305e..7099a4beba2 100644 --- a/core/lib/env_config/src/eth_sender.rs +++ b/core/lib/env_config/src/eth_sender.rs @@ -1,9 +1,9 @@ use anyhow::Context as _; -use zksync_config::{configs::eth_sender::SenderConfig, ETHSenderConfig, GasAdjusterConfig}; +use zksync_config::{configs::eth_sender::SenderConfig, ETHConfig, GasAdjusterConfig}; use crate::{envy_load, FromEnv}; -impl FromEnv for ETHSenderConfig { +impl FromEnv for ETHConfig { fn from_env() -> anyhow::Result { Ok(Self { sender: SenderConfig::from_env().context("SenderConfig")?, @@ -35,8 +35,8 @@ mod tests { static MUTEX: EnvMutex = EnvMutex::new(); - fn expected_config() -> ETHSenderConfig { - ETHSenderConfig { + fn expected_config() -> ETHConfig { + ETHConfig { sender: SenderConfig { aggregated_proof_sizes: vec![1, 5], aggregated_block_commit_deadline: 30, @@ -110,7 +110,7 @@ mod tests { "#; lock.set_env(config); - let actual = ETHSenderConfig::from_env().unwrap(); + let actual = ETHConfig::from_env().unwrap(); assert_eq!(actual, expected_config()); assert_eq!( actual.sender.private_key().unwrap(), diff --git a/core/lib/env_config/src/genesis.rs b/core/lib/env_config/src/genesis.rs index 35b89506a48..0428c90298b 100644 --- a/core/lib/env_config/src/genesis.rs +++ b/core/lib/env_config/src/genesis.rs @@ -40,7 +40,7 @@ impl FromEnv for GenesisConfig { recursion_leaf_level_vk_hash: contracts_config.fri_recursion_leaf_level_vk_hash, recursion_circuits_set_vks_hash: H256::zero(), recursion_scheduler_level_vk_hash: contracts_config.snark_wrapper_vk_hash, - snark_wrapper_vk_hash: contracts_config.snark_wrapper_vk_hash, + fee_account: state_keeper.fee_account_addr, shared_bridge: None, dummy_prover: false, }) diff --git a/core/lib/env_config/src/proof_data_handler.rs b/core/lib/env_config/src/proof_data_handler.rs index 67aad80fbe7..4fcc5951148 100644 --- a/core/lib/env_config/src/proof_data_handler.rs +++ b/core/lib/env_config/src/proof_data_handler.rs @@ -21,8 +21,6 @@ mod tests { ProofDataHandlerConfig { http_port: 3320, proof_generation_timeout_in_secs: 18000, - protocol_version_loading_mode: ProtocolVersionLoadingMode::FromEnvVar, - fri_protocol_version_id: 2, } } diff --git a/core/lib/eth_client/src/clients/http/signing.rs b/core/lib/eth_client/src/clients/http/signing.rs index c8cdf55e462..89ea1828dd1 100644 --- a/core/lib/eth_client/src/clients/http/signing.rs +++ b/core/lib/eth_client/src/clients/http/signing.rs @@ -1,7 +1,7 @@ use std::{fmt, sync::Arc}; use async_trait::async_trait; -use zksync_config::{configs::ContractsConfigReduced, ETHClientConfig, ETHSenderConfig}; +use zksync_config::{configs::ContractsConfigReduced, ETHClientConfig, ETHConfig}; use zksync_contracts::zksync_contract; use zksync_eth_signer::{raw_ethereum_tx::TransactionParameters, EthereumSigner, PrivateKeySigner}; use zksync_types::{ @@ -30,7 +30,7 @@ pub type PKSigningClient = SigningClient; impl PKSigningClient { pub fn from_config( - eth_sender: ÐSenderConfig, + eth_sender: ÐConfig, contracts_config: &ContractsConfigReduced, eth_client: ÐClientConfig, ) -> Self { @@ -51,7 +51,7 @@ impl PKSigningClient { /// Create an signing client for the blobs account pub fn from_config_blobs( - eth_sender: ÐSenderConfig, + eth_sender: ÐConfig, contracts_config: &ContractsConfigReduced, eth_client: ÐClientConfig, ) -> Option { @@ -68,7 +68,7 @@ impl PKSigningClient { } fn from_config_inner( - eth_sender: ÐSenderConfig, + eth_sender: ÐConfig, contracts_config: &ContractsConfigReduced, eth_client: ÐClientConfig, operator_private_key: H256, diff --git a/core/lib/protobuf_config/src/alerts.rs b/core/lib/protobuf_config/src/alerts.rs deleted file mode 100644 index 4d6cfb98390..00000000000 --- a/core/lib/protobuf_config/src/alerts.rs +++ /dev/null @@ -1,19 +0,0 @@ -use zksync_config::configs::AlertsConfig; -use zksync_protobuf::repr::ProtoRepr; - -use crate::proto::alerts as proto; - -impl ProtoRepr for proto::Alerts { - type Type = AlertsConfig; - fn read(&self) -> anyhow::Result { - Ok(Self::Type { - sporadic_crypto_errors_substrs: self.sporadic_crypto_errors_substrs.clone(), - }) - } - - fn build(this: &Self::Type) -> Self { - Self { - sporadic_crypto_errors_substrs: this.sporadic_crypto_errors_substrs.clone(), - } - } -} diff --git a/core/lib/protobuf_config/src/api.rs b/core/lib/protobuf_config/src/api.rs index 2857db84a11..d7fa05f1b65 100644 --- a/core/lib/protobuf_config/src/api.rs +++ b/core/lib/protobuf_config/src/api.rs @@ -12,8 +12,6 @@ impl ProtoRepr for proto::Api { fn read(&self) -> anyhow::Result { Ok(Self::Type { web3_json_rpc: read_required_repr(&self.web3_json_rpc).context("web3_json_rpc")?, - contract_verification: read_required_repr(&self.contract_verification) - .context("contract_verification")?, prometheus: read_required_repr(&self.prometheus).context("prometheus")?, healthcheck: read_required_repr(&self.healthcheck).context("healthcheck")?, merkle_tree: read_required_repr(&self.merkle_tree).context("merkle_tree")?, @@ -23,7 +21,6 @@ impl ProtoRepr for proto::Api { fn build(this: &Self::Type) -> Self { Self { web3_json_rpc: Some(ProtoRepr::build(&this.web3_json_rpc)), - contract_verification: Some(ProtoRepr::build(&this.contract_verification)), prometheus: Some(ProtoRepr::build(&this.prometheus)), healthcheck: Some(ProtoRepr::build(&this.healthcheck)), merkle_tree: Some(ProtoRepr::build(&this.merkle_tree)), @@ -181,24 +178,6 @@ impl ProtoRepr for proto::Web3JsonRpc { } } -impl ProtoRepr for proto::ContractVerificationApi { - type Type = api::ContractVerificationApiConfig; - fn read(&self) -> anyhow::Result { - Ok(Self::Type { - port: required(&self.port) - .and_then(|p| Ok((*p).try_into()?)) - .context("port")?, - url: required(&self.url).context("url")?.clone(), - }) - } - fn build(this: &Self::Type) -> Self { - Self { - port: Some(this.port.into()), - url: Some(this.url.clone()), - } - } -} - impl ProtoRepr for proto::HealthCheck { type Type = api::HealthCheckConfig; diff --git a/core/lib/protobuf_config/src/chain.rs b/core/lib/protobuf_config/src/chain.rs index 0fb01b90927..4e3aa9306b3 100644 --- a/core/lib/protobuf_config/src/chain.rs +++ b/core/lib/protobuf_config/src/chain.rs @@ -1,37 +1,8 @@ use anyhow::Context as _; -use zksync_basic_types::network::Network; use zksync_config::configs; use zksync_protobuf::{repr::ProtoRepr, required}; -use crate::{parse_h160, parse_h256, proto::chain as proto}; - -impl proto::Network { - fn new(n: &Network) -> Self { - match n { - Network::Mainnet => Self::Mainnet, - Network::Rinkeby => Self::Rinkeby, - Network::Ropsten => Self::Ropsten, - Network::Goerli => Self::Goerli, - Network::Sepolia => Self::Sepolia, - Network::Localhost => Self::Localhost, - Network::Unknown => Self::Unknown, - Network::Test => Self::Test, - } - } - - fn parse(&self) -> Network { - match self { - Self::Mainnet => Network::Mainnet, - Self::Rinkeby => Network::Rinkeby, - Self::Ropsten => Network::Ropsten, - Self::Goerli => Network::Goerli, - Self::Sepolia => Network::Sepolia, - Self::Localhost => Network::Localhost, - Self::Unknown => Network::Unknown, - Self::Test => Network::Test, - } - } -} +use crate::{parse_h160, proto::chain as proto}; impl proto::FeeModelVersion { fn new(n: &configs::chain::FeeModelVersion) -> Self { @@ -51,32 +22,6 @@ impl proto::FeeModelVersion { } } -impl ProtoRepr for proto::EthNetwork { - type Type = configs::chain::NetworkConfig; - fn read(&self) -> anyhow::Result { - Ok(Self::Type { - network: required(&self.network) - .and_then(|x| Ok(proto::Network::try_from(*x)?)) - .context("network")? - .parse(), - zksync_network: required(&self.zksync_network) - .context("zksync_network")? - .clone(), - zksync_network_id: required(&self.zksync_network_id) - .and_then(|x| (*x).try_into().map_err(anyhow::Error::msg)) - .context("zksync_network_id")?, - }) - } - - fn build(this: &Self::Type) -> Self { - Self { - network: Some(proto::Network::new(&this.network).into()), - zksync_network: Some(this.zksync_network.clone()), - zksync_network_id: Some(this.zksync_network_id.as_u64()), - } - } -} - impl ProtoRepr for proto::StateKeeper { type Type = configs::chain::StateKeeperConfig; fn read(&self) -> anyhow::Result { @@ -140,18 +85,10 @@ impl ProtoRepr for proto::StateKeeper { .map(|x| x.try_into()) .transpose() .context("enum_index_migration_chunk_size")?, - bootloader_hash: self - .bootloader_hash - .as_ref() - .map(|a| parse_h256(a)) - .transpose() - .context("bootloader_hash")?, - default_aa_hash: self - .default_aa_hash - .as_ref() - .map(|a| parse_h256(a)) - .transpose() - .context("default_aa_hash")?, + // We need this values only for genesis file, so it's not + // needed during the initialization from files + bootloader_hash: None, + default_aa_hash: None, }) } @@ -188,8 +125,6 @@ impl ProtoRepr for proto::StateKeeper { .enum_index_migration_chunk_size .as_ref() .map(|x| (*x).try_into().unwrap()), - bootloader_hash: this.bootloader_hash.map(|a| a.as_bytes().into()), - default_aa_hash: this.default_aa_hash.map(|a| a.as_bytes().into()), } } } @@ -235,28 +170,3 @@ impl ProtoRepr for proto::Mempool { } } } - -impl ProtoRepr for proto::CircuitBreaker { - type Type = configs::chain::CircuitBreakerConfig; - fn read(&self) -> anyhow::Result { - Ok(Self::Type { - sync_interval_ms: *required(&self.sync_interval_ms).context("sync_interval_ms")?, - http_req_max_retry_number: required(&self.http_req_max_retry_number) - .and_then(|x| Ok((*x).try_into()?)) - .context("http_req_max_retry_number")?, - http_req_retry_interval_sec: required(&self.http_req_retry_interval_sec) - .and_then(|x| Ok((*x).try_into()?)) - .context("http_req_retry_interval_sec")?, - replication_lag_limit_sec: self.replication_lag_limit_sec, - }) - } - - fn build(this: &Self::Type) -> Self { - Self { - sync_interval_ms: Some(this.sync_interval_ms), - http_req_max_retry_number: Some(this.http_req_max_retry_number.try_into().unwrap()), - http_req_retry_interval_sec: Some(this.http_req_retry_interval_sec.into()), - replication_lag_limit_sec: this.replication_lag_limit_sec, - } - } -} diff --git a/core/lib/protobuf_config/src/circuit_breaker.rs b/core/lib/protobuf_config/src/circuit_breaker.rs new file mode 100644 index 00000000000..bb51b86888b --- /dev/null +++ b/core/lib/protobuf_config/src/circuit_breaker.rs @@ -0,0 +1,30 @@ +use anyhow::Context as _; +use zksync_config::configs; +use zksync_protobuf::{required, ProtoRepr}; + +use crate::proto::circuit_breaker as proto; + +impl ProtoRepr for proto::CircuitBreaker { + type Type = configs::chain::CircuitBreakerConfig; + fn read(&self) -> anyhow::Result { + Ok(Self::Type { + sync_interval_ms: *required(&self.sync_interval_ms).context("sync_interval_ms")?, + http_req_max_retry_number: required(&self.http_req_max_retry_number) + .and_then(|x| Ok((*x).try_into()?)) + .context("http_req_max_retry_number")?, + http_req_retry_interval_sec: required(&self.http_req_retry_interval_sec) + .and_then(|x| Ok((*x).try_into()?)) + .context("http_req_retry_interval_sec")?, + replication_lag_limit_sec: self.replication_lag_limit_sec, + }) + } + + fn build(this: &Self::Type) -> Self { + Self { + sync_interval_ms: Some(this.sync_interval_ms), + http_req_max_retry_number: Some(this.http_req_max_retry_number.try_into().unwrap()), + http_req_retry_interval_sec: Some(this.http_req_retry_interval_sec.into()), + replication_lag_limit_sec: this.replication_lag_limit_sec, + } + } +} diff --git a/core/lib/protobuf_config/src/contract_verifier.rs b/core/lib/protobuf_config/src/contract_verifier.rs index 4d59f408aba..cc55beaa643 100644 --- a/core/lib/protobuf_config/src/contract_verifier.rs +++ b/core/lib/protobuf_config/src/contract_verifier.rs @@ -14,13 +14,18 @@ impl ProtoRepr for proto::ContractVerifier { prometheus_port: required(&self.prometheus_port) .and_then(|x| Ok((*x).try_into()?)) .context("prometheus_port")?, + url: required(&self.url).cloned().context("url")?, + port: *required(&self.port).context("port")?, }) } fn build(this: &Self::Type) -> Self { Self { + port: Some(this.port), + url: Some(this.url.clone()), compilation_timeout: Some(this.compilation_timeout), polling_interval: this.polling_interval, + threads_per_server: None, prometheus_port: Some(this.prometheus_port.into()), } } diff --git a/core/lib/protobuf_config/src/database.rs b/core/lib/protobuf_config/src/database.rs index 8629729a5b7..0c896617c3d 100644 --- a/core/lib/protobuf_config/src/database.rs +++ b/core/lib/protobuf_config/src/database.rs @@ -88,8 +88,8 @@ impl ProtoRepr for proto::Postgres { fn read(&self) -> anyhow::Result { Ok(Self::Type { - master_url: self.master_url.clone(), - replica_url: self.replica_url.clone(), + master_url: self.server_url.clone(), + replica_url: self.server_replica_url.clone(), prover_url: self.prover_url.clone(), max_connections: self.max_connections, max_connections_master: self.max_connections_master, @@ -102,8 +102,8 @@ impl ProtoRepr for proto::Postgres { fn build(this: &Self::Type) -> Self { Self { - master_url: this.master_url.clone(), - replica_url: this.replica_url.clone(), + server_url: this.master_url.clone(), + server_replica_url: this.replica_url.clone(), prover_url: this.prover_url.clone(), max_connections: this.max_connections, max_connections_master: this.max_connections_master, @@ -111,6 +111,8 @@ impl ProtoRepr for proto::Postgres { statement_timeout_sec: this.statement_timeout_sec, long_connection_threshold_ms: this.long_connection_threshold_ms, slow_query_threshold_ms: this.slow_query_threshold_ms, + // Fill with test data + test: None, } } } diff --git a/core/lib/protobuf_config/src/eth_sender.rs b/core/lib/protobuf_config/src/eth.rs similarity index 91% rename from core/lib/protobuf_config/src/eth_sender.rs rename to core/lib/protobuf_config/src/eth.rs index e5550b09e06..938b8642a3d 100644 --- a/core/lib/protobuf_config/src/eth_sender.rs +++ b/core/lib/protobuf_config/src/eth.rs @@ -2,7 +2,7 @@ use anyhow::Context as _; use zksync_config::configs::{self}; use zksync_protobuf::{read_required_repr, required, ProtoRepr}; -use crate::proto::eth_sender as proto; +use crate::proto::eth as proto; impl proto::ProofSendingMode { fn new(x: &configs::eth_sender::ProofSendingMode) -> Self { @@ -60,12 +60,14 @@ impl proto::PubdataSendingMode { } } -impl ProtoRepr for proto::EthSender { - type Type = configs::eth_sender::ETHSenderConfig; +impl ProtoRepr for proto::Eth { + type Type = configs::eth_sender::ETHConfig; fn read(&self) -> anyhow::Result { Ok(Self::Type { sender: read_required_repr(&self.sender).context("sender")?, gas_adjuster: read_required_repr(&self.gas_adjuster).context("gas_adjuster")?, + watcher: read_required_repr(&self.watcher).context("watcher")?, + web3_url: required(&self.web3_url).context("web3_url")?.clone(), }) } @@ -73,6 +75,8 @@ impl ProtoRepr for proto::EthSender { Self { sender: Some(ProtoRepr::build(&this.sender)), gas_adjuster: Some(ProtoRepr::build(&this.gas_adjuster)), + watcher: Some(ProtoRepr::build(&this.watcher)), + web3_url: Some(this.web3_url.clone()), } } } @@ -120,14 +124,14 @@ impl ProtoRepr for proto::Sender { &self.max_acceptable_priority_fee_in_gwei, ) .context("max_acceptable_priority_fee_in_gwei")?, - proof_loading_mode: required(&self.proof_loading_mode) - .and_then(|x| Ok(proto::ProofLoadingMode::try_from(*x)?)) - .context("proof_loading_mode")? - .parse(), pubdata_sending_mode: required(&self.pubdata_sending_mode) .and_then(|x| Ok(proto::PubdataSendingMode::try_from(*x)?)) .context("pubdata_sending_mode")? .parse(), + proof_loading_mode: required(&self.proof_loading_mode) + .and_then(|x| Ok(proto::ProofLoadingMode::try_from(*x)?)) + .context("proof_loading_mode")? + .parse(), }) } @@ -155,10 +159,10 @@ impl ProtoRepr for proto::Sender { ), l1_batch_min_age_before_execute_seconds: this.l1_batch_min_age_before_execute_seconds, max_acceptable_priority_fee_in_gwei: Some(this.max_acceptable_priority_fee_in_gwei), - proof_loading_mode: Some(proto::ProofLoadingMode::new(&this.proof_loading_mode).into()), pubdata_sending_mode: Some( proto::PubdataSendingMode::new(&this.pubdata_sending_mode).into(), ), + proof_loading_mode: Some(proto::ProofLoadingMode::new(&this.proof_loading_mode).into()), } } } @@ -214,3 +218,21 @@ impl ProtoRepr for proto::GasAdjuster { } } } + +impl ProtoRepr for proto::EthWatch { + type Type = configs::ETHWatchConfig; + fn read(&self) -> anyhow::Result { + Ok(Self::Type { + confirmations_for_eth_event: self.confirmations_for_eth_event, + eth_node_poll_interval: *required(&self.eth_node_poll_interval) + .context("eth_node_poll_interval")?, + }) + } + + fn build(this: &Self::Type) -> Self { + Self { + confirmations_for_eth_event: this.confirmations_for_eth_event, + eth_node_poll_interval: Some(this.eth_node_poll_interval), + } + } +} diff --git a/core/lib/protobuf_config/src/eth_client.rs b/core/lib/protobuf_config/src/eth_client.rs deleted file mode 100644 index 3604ca0ae75..00000000000 --- a/core/lib/protobuf_config/src/eth_client.rs +++ /dev/null @@ -1,22 +0,0 @@ -use anyhow::Context as _; -use zksync_config::configs; -use zksync_protobuf::{repr::ProtoRepr, required}; - -use crate::proto::eth_client as proto; - -impl ProtoRepr for proto::EthClient { - type Type = configs::ETHClientConfig; - fn read(&self) -> anyhow::Result { - Ok(Self::Type { - chain_id: *required(&self.chain_id).context("chain_id")?, - web3_url: required(&self.web3_url).context("web3_url")?.clone(), - }) - } - - fn build(this: &Self::Type) -> Self { - Self { - chain_id: Some(this.chain_id), - web3_url: Some(this.web3_url.clone()), - } - } -} diff --git a/core/lib/protobuf_config/src/eth_watch.rs b/core/lib/protobuf_config/src/eth_watch.rs deleted file mode 100644 index 672ae0875ba..00000000000 --- a/core/lib/protobuf_config/src/eth_watch.rs +++ /dev/null @@ -1,23 +0,0 @@ -use anyhow::Context as _; -use zksync_config::configs; -use zksync_protobuf::{repr::ProtoRepr, required}; - -use crate::proto::eth_watch as proto; - -impl ProtoRepr for proto::EthWatch { - type Type = configs::ETHWatchConfig; - fn read(&self) -> anyhow::Result { - Ok(Self::Type { - confirmations_for_eth_event: self.confirmations_for_eth_event, - eth_node_poll_interval: *required(&self.eth_node_poll_interval) - .context("eth_node_poll_interval")?, - }) - } - - fn build(this: &Self::Type) -> Self { - Self { - confirmations_for_eth_event: this.confirmations_for_eth_event, - eth_node_poll_interval: Some(this.eth_node_poll_interval), - } - } -} diff --git a/core/lib/protobuf_config/src/fri_proof_compressor.rs b/core/lib/protobuf_config/src/fri_proof_compressor.rs deleted file mode 100644 index d68c64f1284..00000000000 --- a/core/lib/protobuf_config/src/fri_proof_compressor.rs +++ /dev/null @@ -1,49 +0,0 @@ -use anyhow::Context as _; -use zksync_config::configs; -use zksync_protobuf::{repr::ProtoRepr, required}; - -use crate::proto::fri_proof_compressor as proto; - -impl ProtoRepr for proto::FriProofCompressor { - type Type = configs::FriProofCompressorConfig; - fn read(&self) -> anyhow::Result { - Ok(Self::Type { - compression_mode: required(&self.compression_mode) - .and_then(|x| Ok((*x).try_into()?)) - .context("compression_mode")?, - prometheus_listener_port: required(&self.prometheus_listener_port) - .and_then(|x| Ok((*x).try_into()?)) - .context("prometheus_listener_port")?, - prometheus_pushgateway_url: required(&self.prometheus_pushgateway_url) - .context("prometheus_pushgateway_url")? - .clone(), - prometheus_push_interval_ms: self.prometheus_push_interval_ms, - generation_timeout_in_secs: required(&self.generation_timeout_in_secs) - .and_then(|x| Ok((*x).try_into()?)) - .context("generation_timeout_in_secs")?, - max_attempts: *required(&self.max_attempts).context("max_attempts")?, - universal_setup_path: required(&self.universal_setup_path) - .context("universal_setup_path")? - .clone(), - universal_setup_download_url: required(&self.universal_setup_download_url) - .context("universal_setup_download_url")? - .clone(), - verify_wrapper_proof: *required(&self.verify_wrapper_proof) - .context("verify_wrapper_proof")?, - }) - } - - fn build(this: &Self::Type) -> Self { - Self { - compression_mode: Some(this.compression_mode.into()), - prometheus_listener_port: Some(this.prometheus_listener_port.into()), - prometheus_pushgateway_url: Some(this.prometheus_pushgateway_url.clone()), - prometheus_push_interval_ms: this.prometheus_push_interval_ms, - generation_timeout_in_secs: Some(this.generation_timeout_in_secs.into()), - max_attempts: Some(this.max_attempts), - universal_setup_path: Some(this.universal_setup_path.clone()), - universal_setup_download_url: Some(this.universal_setup_download_url.clone()), - verify_wrapper_proof: Some(this.verify_wrapper_proof), - } - } -} diff --git a/core/lib/protobuf_config/src/fri_prover.rs b/core/lib/protobuf_config/src/fri_prover.rs deleted file mode 100644 index ffaed23763e..00000000000 --- a/core/lib/protobuf_config/src/fri_prover.rs +++ /dev/null @@ -1,98 +0,0 @@ -use anyhow::Context as _; -use zksync_config::configs; -use zksync_protobuf::{repr::ProtoRepr, required}; - -use crate::proto::fri_prover as proto; - -impl proto::SetupLoadMode { - fn new(x: &configs::fri_prover::SetupLoadMode) -> Self { - use configs::fri_prover::SetupLoadMode as From; - match x { - From::FromDisk => Self::FromDisk, - From::FromMemory => Self::FromMemory, - } - } - - fn parse(&self) -> configs::fri_prover::SetupLoadMode { - use configs::fri_prover::SetupLoadMode as To; - match self { - Self::FromDisk => To::FromDisk, - Self::FromMemory => To::FromMemory, - } - } -} - -impl ProtoRepr for proto::FriProver { - type Type = configs::FriProverConfig; - fn read(&self) -> anyhow::Result { - Ok(Self::Type { - setup_data_path: required(&self.setup_data_path) - .context("setup_data_path")? - .clone(), - prometheus_port: required(&self.prometheus_port) - .and_then(|x| Ok((*x).try_into()?)) - .context("prometheus_port")?, - max_attempts: *required(&self.max_attempts).context("max_attempts")?, - generation_timeout_in_secs: required(&self.generation_timeout_in_secs) - .and_then(|x| Ok((*x).try_into()?)) - .context("generation_timeout_in_secs")?, - base_layer_circuit_ids_to_be_verified: required( - &self.base_layer_circuit_ids_to_be_verified, - ) - .context("base_layer_circuit_ids_to_be_verified")? - .clone(), - recursive_layer_circuit_ids_to_be_verified: required( - &self.recursive_layer_circuit_ids_to_be_verified, - ) - .context("recursive_layer_circuit_ids_to_be_verified")? - .clone(), - setup_load_mode: required(&self.setup_load_mode) - .and_then(|x| Ok(proto::SetupLoadMode::try_from(*x)?)) - .context("setup_load_mode")? - .parse(), - specialized_group_id: required(&self.specialized_group_id) - .and_then(|x| Ok((*x).try_into()?)) - .context("specialized_group_id")?, - witness_vector_generator_thread_count: self - .witness_vector_generator_thread_count - .map(|x| x.try_into()) - .transpose() - .context("witness_vector_generator_thread_count")?, - queue_capacity: required(&self.queue_capacity) - .and_then(|x| Ok((*x).try_into()?)) - .context("queue_capacity")?, - witness_vector_receiver_port: required(&self.witness_vector_receiver_port) - .and_then(|x| Ok((*x).try_into()?)) - .context("witness_vector_receiver_port")?, - zone_read_url: required(&self.zone_read_url) - .context("zone_read_url")? - .clone(), - shall_save_to_public_bucket: *required(&self.shall_save_to_public_bucket) - .context("shall_save_to_public_bucket")?, - }) - } - - fn build(this: &Self::Type) -> Self { - Self { - setup_data_path: Some(this.setup_data_path.clone()), - prometheus_port: Some(this.prometheus_port.into()), - max_attempts: Some(this.max_attempts), - generation_timeout_in_secs: Some(this.generation_timeout_in_secs.into()), - base_layer_circuit_ids_to_be_verified: Some( - this.base_layer_circuit_ids_to_be_verified.clone(), - ), - recursive_layer_circuit_ids_to_be_verified: Some( - this.recursive_layer_circuit_ids_to_be_verified.clone(), - ), - setup_load_mode: Some(proto::SetupLoadMode::new(&this.setup_load_mode).into()), - specialized_group_id: Some(this.specialized_group_id.into()), - witness_vector_generator_thread_count: this - .witness_vector_generator_thread_count - .map(|x| x.try_into().unwrap()), - queue_capacity: Some(this.queue_capacity.try_into().unwrap()), - witness_vector_receiver_port: Some(this.witness_vector_receiver_port.into()), - zone_read_url: Some(this.zone_read_url.clone()), - shall_save_to_public_bucket: Some(this.shall_save_to_public_bucket), - } - } -} diff --git a/core/lib/protobuf_config/src/fri_prover_gateway.rs b/core/lib/protobuf_config/src/fri_prover_gateway.rs deleted file mode 100644 index f4e960ae62c..00000000000 --- a/core/lib/protobuf_config/src/fri_prover_gateway.rs +++ /dev/null @@ -1,34 +0,0 @@ -use anyhow::Context as _; -use zksync_config::configs; -use zksync_protobuf::{repr::ProtoRepr, required}; - -use crate::proto::fri_prover_gateway as proto; - -impl ProtoRepr for proto::FriProverGateway { - type Type = configs::FriProverGatewayConfig; - fn read(&self) -> anyhow::Result { - Ok(Self::Type { - api_url: required(&self.api_url).context("api_url")?.clone(), - api_poll_duration_secs: required(&self.api_poll_duration_secs) - .and_then(|x| Ok((*x).try_into()?)) - .context("api_poll_duration_secs")?, - prometheus_listener_port: required(&self.prometheus_listener_port) - .and_then(|x| Ok((*x).try_into()?)) - .context("prometheus_listener_port")?, - prometheus_pushgateway_url: required(&self.prometheus_pushgateway_url) - .context("prometheus_pushgateway_url")? - .clone(), - prometheus_push_interval_ms: self.prometheus_push_interval_ms, - }) - } - - fn build(this: &Self::Type) -> Self { - Self { - api_url: Some(this.api_url.clone()), - api_poll_duration_secs: Some(this.api_poll_duration_secs.into()), - prometheus_listener_port: Some(this.prometheus_listener_port.into()), - prometheus_pushgateway_url: Some(this.prometheus_pushgateway_url.clone()), - prometheus_push_interval_ms: this.prometheus_push_interval_ms, - } - } -} diff --git a/core/lib/protobuf_config/src/fri_prover_group.rs b/core/lib/protobuf_config/src/fri_prover_group.rs deleted file mode 100644 index c45d1986b6c..00000000000 --- a/core/lib/protobuf_config/src/fri_prover_group.rs +++ /dev/null @@ -1,81 +0,0 @@ -use std::collections::HashSet; - -use anyhow::Context as _; -use zksync_basic_types::basic_fri_types::CircuitIdRoundTuple; -use zksync_config::configs; -use zksync_protobuf::{repr::ProtoRepr, required}; - -use crate::proto::fri_prover_group as proto; - -impl ProtoRepr for proto::CircuitIdRoundTuple { - type Type = CircuitIdRoundTuple; - fn read(&self) -> anyhow::Result { - Ok(Self::Type { - circuit_id: required(&self.circuit_id) - .and_then(|x| Ok((*x).try_into()?)) - .context("circuit_id")?, - aggregation_round: required(&self.aggregation_round) - .and_then(|x| Ok((*x).try_into()?)) - .context("aggregation_round")?, - }) - } - - fn build(this: &Self::Type) -> Self { - Self { - circuit_id: Some(this.circuit_id.into()), - aggregation_round: Some(this.aggregation_round.into()), - } - } -} - -fn read_vec(v: &[proto::CircuitIdRoundTuple]) -> anyhow::Result> { - v.iter() - .enumerate() - .map(|(i, x)| x.read().context(i)) - .collect() -} - -fn build_vec(v: &HashSet) -> Vec { - let mut v: Vec<_> = v.iter().cloned().collect(); - v.sort(); - v.iter().map(ProtoRepr::build).collect() -} - -impl ProtoRepr for proto::FriProverGroup { - type Type = configs::fri_prover_group::FriProverGroupConfig; - fn read(&self) -> anyhow::Result { - Ok(Self::Type { - group_0: read_vec(&self.group_0).context("group_0")?, - group_1: read_vec(&self.group_1).context("group_1")?, - group_2: read_vec(&self.group_2).context("group_2")?, - group_3: read_vec(&self.group_3).context("group_3")?, - group_4: read_vec(&self.group_4).context("group_4")?, - group_5: read_vec(&self.group_5).context("group_5")?, - group_6: read_vec(&self.group_6).context("group_6")?, - group_7: read_vec(&self.group_7).context("group_7")?, - group_8: read_vec(&self.group_8).context("group_8")?, - group_9: read_vec(&self.group_9).context("group_9")?, - group_10: read_vec(&self.group_10).context("group_10")?, - group_11: read_vec(&self.group_11).context("group_11")?, - group_12: read_vec(&self.group_12).context("group_12")?, - }) - } - - fn build(this: &Self::Type) -> Self { - Self { - group_0: build_vec(&this.group_0), - group_1: build_vec(&this.group_1), - group_2: build_vec(&this.group_2), - group_3: build_vec(&this.group_3), - group_4: build_vec(&this.group_4), - group_5: build_vec(&this.group_5), - group_6: build_vec(&this.group_6), - group_7: build_vec(&this.group_7), - group_8: build_vec(&this.group_8), - group_9: build_vec(&this.group_9), - group_10: build_vec(&this.group_10), - group_11: build_vec(&this.group_11), - group_12: build_vec(&this.group_12), - } - } -} diff --git a/core/lib/protobuf_config/src/fri_witness_generator.rs b/core/lib/protobuf_config/src/fri_witness_generator.rs deleted file mode 100644 index dd3dfe72af1..00000000000 --- a/core/lib/protobuf_config/src/fri_witness_generator.rs +++ /dev/null @@ -1,39 +0,0 @@ -use anyhow::Context as _; -use zksync_config::configs; -use zksync_protobuf::{repr::ProtoRepr, required}; - -use crate::proto::fri_witness_generator as proto; - -impl ProtoRepr for proto::FriWitnessGenerator { - type Type = configs::FriWitnessGeneratorConfig; - fn read(&self) -> anyhow::Result { - Ok(Self::Type { - generation_timeout_in_secs: required(&self.generation_timeout_in_secs) - .and_then(|x| Ok((*x).try_into()?)) - .context("generation_timeout_in_secs")?, - max_attempts: *required(&self.max_attempts).context("max_attempts")?, - blocks_proving_percentage: self - .blocks_proving_percentage - .map(|x| x.try_into()) - .transpose() - .context("blocks_proving_percentage")?, - dump_arguments_for_blocks: self.dump_arguments_for_blocks.clone(), - last_l1_batch_to_process: self.last_l1_batch_to_process, - force_process_block: self.force_process_block, - shall_save_to_public_bucket: *required(&self.shall_save_to_public_bucket) - .context("shall_save_to_public_bucket")?, - }) - } - - fn build(this: &Self::Type) -> Self { - Self { - generation_timeout_in_secs: Some(this.generation_timeout_in_secs.into()), - max_attempts: Some(this.max_attempts), - blocks_proving_percentage: this.blocks_proving_percentage.map(|x| x.into()), - dump_arguments_for_blocks: this.dump_arguments_for_blocks.clone(), - last_l1_batch_to_process: this.last_l1_batch_to_process, - force_process_block: this.force_process_block, - shall_save_to_public_bucket: Some(this.shall_save_to_public_bucket), - } - } -} diff --git a/core/lib/protobuf_config/src/fri_witness_vector_generator.rs b/core/lib/protobuf_config/src/fri_witness_vector_generator.rs deleted file mode 100644 index d09a7033b86..00000000000 --- a/core/lib/protobuf_config/src/fri_witness_vector_generator.rs +++ /dev/null @@ -1,56 +0,0 @@ -use anyhow::Context as _; -use zksync_config::configs; -use zksync_protobuf::{repr::ProtoRepr, required}; - -use crate::proto::fri_witness_vector_generator as proto; - -impl ProtoRepr for proto::FriWitnessVectorGenerator { - type Type = configs::FriWitnessVectorGeneratorConfig; - fn read(&self) -> anyhow::Result { - Ok(Self::Type { - max_prover_reservation_duration_in_secs: required( - &self.max_prover_reservation_duration_in_secs, - ) - .and_then(|x| Ok((*x).try_into()?)) - .context("max_prover_reservation_duration_in_secs")?, - prover_instance_wait_timeout_in_secs: required( - &self.prover_instance_wait_timeout_in_secs, - ) - .and_then(|x| Ok((*x).try_into()?)) - .context("prover_instance_wait_timeout_in_secs")?, - prover_instance_poll_time_in_milli_secs: required( - &self.prover_instance_poll_time_in_milli_secs, - ) - .and_then(|x| Ok((*x).try_into()?)) - .context("prover_instance_poll_time_in_milli_secs")?, - prometheus_listener_port: required(&self.prometheus_listener_port) - .and_then(|x| Ok((*x).try_into()?)) - .context("prometheus_listener_port")?, - prometheus_pushgateway_url: required(&self.prometheus_pushgateway_url) - .context("prometheus_pushgateway_url")? - .clone(), - prometheus_push_interval_ms: self.prometheus_push_interval_ms, - specialized_group_id: required(&self.specialized_group_id) - .and_then(|x| Ok((*x).try_into()?)) - .context("specialized_group_id")?, - }) - } - - fn build(this: &Self::Type) -> Self { - Self { - max_prover_reservation_duration_in_secs: Some( - this.max_prover_reservation_duration_in_secs.into(), - ), - prover_instance_wait_timeout_in_secs: Some( - this.prover_instance_wait_timeout_in_secs.into(), - ), - prover_instance_poll_time_in_milli_secs: Some( - this.prover_instance_poll_time_in_milli_secs.into(), - ), - prometheus_listener_port: Some(this.prometheus_listener_port.into()), - prometheus_pushgateway_url: Some(this.prometheus_pushgateway_url.clone()), - prometheus_push_interval_ms: this.prometheus_push_interval_ms, - specialized_group_id: Some(this.specialized_group_id.into()), - } - } -} diff --git a/core/lib/protobuf_config/src/general.rs b/core/lib/protobuf_config/src/general.rs new file mode 100644 index 00000000000..2860090e38e --- /dev/null +++ b/core/lib/protobuf_config/src/general.rs @@ -0,0 +1,76 @@ +use crate::proto::general as proto; +use anyhow::Context as _; + +use crate::read_optional_repr; +use zksync_config::configs::chain::{ + CircuitBreakerConfig, MempoolConfig, OperationsManagerConfig, StateKeeperConfig, +}; +use zksync_config::configs::fri_prover_group::FriProverGroupConfig; +use zksync_config::configs::house_keeper::HouseKeeperConfig; +use zksync_config::configs::{ + FriProofCompressorConfig, FriProverConfig, FriProverGatewayConfig, FriWitnessGeneratorConfig, + FriWitnessVectorGeneratorConfig, General, PrometheusConfig, ProofDataHandlerConfig, +}; +use zksync_config::{ApiConfig, DBConfig, ETHConfig, PostgresConfig}; +use zksync_protobuf::{ProtoFmt, ProtoRepr}; + +impl ProtoRepr for proto::GeneralConfig { + type Type = General; + + fn read(&self) -> anyhow::Result { + Ok(Self::Type { + postgres_config: read_optional_repr(&self.postgres).context("postgres")?, + circuit_breaker_config: read_optional_repr(&self.circuit_breaker) + .context("circuit_breaker")?, + mempool_config: read_optional_repr(&self.mempool).context("mempool")?, + operations_manager_config: read_optional_repr(&self.operations_manager) + .context("operations_manager")?, + state_keeper_config: read_optional_repr(&self.state_keeper).context("state_keeper")?, + house_keeper_config: read_optional_repr(&self.house_keeper).context("house_keeper")?, + proof_compressor_config: read_optional_repr(&self.proof_compressor) + .context("fri_proof_compressor")?, + prover_config: read_optional_repr(&self.prover).context("fri_prover")?, + prover_gateway: read_optional_repr(&self.prover_gateway).context("fri_prover")?, + witness_vector_generator: read_optional_repr(&self.witness_vector_generator) + .context("fri_prover")?, + prover_group_config: read_optional_repr(&self.prover_group) + .context("fri_prover_group")?, + prometheus_config: read_optional_repr(&self.prometheus).context("prometheus")?, + proof_data_handler_config: read_optional_repr(&self.data_handler) + .context("proof_data_handler")?, + witness_generator: read_optional_repr(&self.witness_generator) + .context("witness_generator")?, + api_config: read_optional_repr(&self.api).context("api")?, + db_config: read_optional_repr(&self.db).context("db")?, + eth: read_optional_repr(&self.eth).context("db")?, + }) + } + + fn build(this: &Self::Type) -> Self { + Self { + postgres: this.postgres_config.as_ref().map(ProtoRepr::build), + circuit_breaker: this.circuit_breaker_config.as_ref().map(ProtoRepr::build), + mempool: this.mempool_config.as_ref().map(ProtoRepr::build), + operations_manager: this + .operations_manager_config + .as_ref() + .map(ProtoRepr::build), + state_keeper: this.state_keeper_config.as_ref().map(ProtoRepr::build), + house_keeper: this.house_keeper_config.as_ref().map(ProtoRepr::build), + proof_compressor: this.proof_compressor_config.as_ref().map(ProtoRepr::build), + prover: this.prover_config.as_ref().map(ProtoRepr::build), + prover_group: this.prover_group_config.as_ref().map(ProtoRepr::build), + witness_generator: this.witness_generator.as_ref().map(ProtoRepr::build), + prover_gateway: this.prover_gateway.as_ref().map(ProtoRepr::build), + witness_vector_generator: this.witness_vector_generator.as_ref().map(ProtoRepr::build), + prometheus: this.prometheus_config.as_ref().map(ProtoRepr::build), + data_handler: this + .proof_data_handler_config + .as_ref() + .map(ProtoRepr::build), + api: this.api_config.as_ref().map(ProtoRepr::build), + db: this.db_config.as_ref().map(ProtoRepr::build), + eth: this.eth.as_ref().map(ProtoRepr::build), + } + } +} diff --git a/core/lib/protobuf_config/src/genesis.rs b/core/lib/protobuf_config/src/genesis.rs index 0399f21ac42..83c0e4f9198 100644 --- a/core/lib/protobuf_config/src/genesis.rs +++ b/core/lib/protobuf_config/src/genesis.rs @@ -60,9 +60,9 @@ impl ProtoRepr for proto::Genesis { recursion_scheduler_level_vk_hash: required(&prover.recursion_scheduler_level_vk_hash) .and_then(|x| parse_h256(x)) .context("recursion_node_level_vk_hash")?, - snark_wrapper_vk_hash: required(&prover.snark_wrapper_vk_hash) - .and_then(|x| parse_h256(x)) - .context("recursion_node_level_vk_hash")?, + fee_account: required(&self.fee_account) + .and_then(|x| parse_h160(x)) + .context("fee_account")?, shared_bridge, dummy_prover: *required(&prover.dummy_verifier).context("dummy_prover")?, }) @@ -90,6 +90,7 @@ impl ProtoRepr for proto::Genesis { genesis_protocol_version: Some(this.protocol_version as u32), default_aa_hash: Some(this.genesis_root_hash.as_bytes().into()), bootloader_hash: Some(this.genesis_root_hash.as_bytes().into()), + fee_account: Some(this.fee_account.as_bytes().into()), l1_chain_id: Some(this.l1_chain_id.0), l2_chain_id: Some(this.l2_chain_id.as_u64()), prover: Some(proto::Prover { @@ -105,7 +106,6 @@ impl ProtoRepr for proto::Genesis { recursion_circuits_set_vks_hash: Some( this.recursion_circuits_set_vks_hash.as_bytes().into(), ), - snark_wrapper_vk_hash: Some(this.snark_wrapper_vk_hash.as_bytes().into()), dummy_verifier: Some(this.dummy_prover), }), shared_bridge, diff --git a/core/lib/protobuf_config/src/house_keeper.rs b/core/lib/protobuf_config/src/house_keeper.rs index f83be249ad3..effd7b07838 100644 --- a/core/lib/protobuf_config/src/house_keeper.rs +++ b/core/lib/protobuf_config/src/house_keeper.rs @@ -26,30 +26,20 @@ impl ProtoRepr for proto::HouseKeeper { &self.witness_generator_stats_reporting_interval_ms, ) .context("witness_generator_stats_reporting_interval_ms")?, - fri_witness_job_moving_interval_ms: *required(&self.fri_witness_job_moving_interval_ms) - .context("fri_witness_job_moving_interval_ms")?, - fri_prover_job_retrying_interval_ms: *required( - &self.fri_prover_job_retrying_interval_ms, - ) - .context("fri_prover_job_retrying_interval_ms")?, - fri_witness_generator_job_retrying_interval_ms: *required( - &self.fri_witness_generator_job_retrying_interval_ms, - ) - .context("fri_witness_generator_job_retrying_interval_ms")?, prover_db_pool_size: *required(&self.prover_db_pool_size) .context("prover_db_pool_size")?, - fri_prover_stats_reporting_interval_ms: *required( - &self.fri_prover_stats_reporting_interval_ms, + proof_compressor_job_retrying_interval_ms: *required( + &self.proof_compressor_job_retrying_interval_ms, ) - .context("fri_prover_stats_reporting_interval_ms")?, - fri_proof_compressor_job_retrying_interval_ms: *required( - &self.fri_proof_compressor_job_retrying_interval_ms, + .context("proof_compressor_job_retrying_interval_ms")?, + witness_generator_job_retrying_interval_ms: *required( + &self.witness_generator_job_retrying_interval_ms, ) - .context("fri_proof_compressor_job_retrying_interval_ms")?, - fri_proof_compressor_stats_reporting_interval_ms: *required( - &self.fri_proof_compressor_stats_reporting_interval_ms, + .context("witness_generator_job_retrying_interval_ms")?, + proof_compressor_stats_reporting_interval_ms: *required( + &self.proof_compressor_stats_reporting_interval_ms, ) - .context("fri_proof_compressor_stats_reporting_interval_ms")?, + .context("proof_compressor_stats_reporting_interval_ms")?, }) } @@ -67,20 +57,15 @@ impl ProtoRepr for proto::HouseKeeper { witness_generator_stats_reporting_interval_ms: Some( this.witness_generator_stats_reporting_interval_ms, ), - fri_witness_job_moving_interval_ms: Some(this.fri_witness_job_moving_interval_ms), - fri_prover_job_retrying_interval_ms: Some(this.fri_prover_job_retrying_interval_ms), - fri_witness_generator_job_retrying_interval_ms: Some( - this.fri_witness_generator_job_retrying_interval_ms, + witness_generator_job_retrying_interval_ms: Some( + this.witness_generator_job_retrying_interval_ms, ), prover_db_pool_size: Some(this.prover_db_pool_size), - fri_prover_stats_reporting_interval_ms: Some( - this.fri_prover_stats_reporting_interval_ms, - ), - fri_proof_compressor_job_retrying_interval_ms: Some( - this.fri_proof_compressor_job_retrying_interval_ms, + proof_compressor_job_retrying_interval_ms: Some( + this.proof_compressor_job_retrying_interval_ms, ), - fri_proof_compressor_stats_reporting_interval_ms: Some( - this.fri_proof_compressor_stats_reporting_interval_ms, + proof_compressor_stats_reporting_interval_ms: Some( + this.proof_compressor_stats_reporting_interval_ms, ), } } diff --git a/core/lib/protobuf_config/src/lib.rs b/core/lib/protobuf_config/src/lib.rs index 964da1a3541..4a25108c3b5 100644 --- a/core/lib/protobuf_config/src/lib.rs +++ b/core/lib/protobuf_config/src/lib.rs @@ -4,21 +4,12 @@ //! * protobuf text format //! * protobuf json format -mod alerts; mod api; mod chain; mod contract_verifier; mod contracts; mod database; -mod eth_client; -mod eth_sender; -mod eth_watch; -mod fri_proof_compressor; -mod fri_prover; -mod fri_prover_gateway; -mod fri_prover_group; -mod fri_witness_generator; -mod fri_witness_vector_generator; +mod eth; mod house_keeper; mod object_store; mod observability; @@ -26,8 +17,11 @@ mod proof_data_handler; mod snapshots_creator; mod witness_generator; +mod circuit_breaker; +mod general; mod genesis; pub mod proto; +mod prover; pub mod testonly; #[cfg(test)] mod tests; @@ -35,6 +29,7 @@ mod utils; mod wallets; use anyhow::Context as _; +use zksync_protobuf::ProtoRepr; use zksync_types::{H160, H256}; fn parse_h256(bytes: &[u8]) -> anyhow::Result { @@ -44,3 +39,7 @@ fn parse_h256(bytes: &[u8]) -> anyhow::Result { fn parse_h160(bytes: &[u8]) -> anyhow::Result { Ok(<[u8; 20]>::try_from(bytes).context("invalid size")?.into()) } + +fn read_optional_repr(field: &Option

) -> anyhow::Result> { + field.as_ref().map(|x| x.read()).transpose() +} diff --git a/core/lib/protobuf_config/src/observability.rs b/core/lib/protobuf_config/src/observability.rs index 6ef67ea0beb..f227b106ce7 100644 --- a/core/lib/protobuf_config/src/observability.rs +++ b/core/lib/protobuf_config/src/observability.rs @@ -7,24 +7,42 @@ use crate::proto::observability as proto; impl ProtoRepr for proto::Observability { type Type = configs::ObservabilityConfig; fn read(&self) -> anyhow::Result { + let (sentry_url, sentry_environment) = if let Some(sentry) = &self.sentry { + ( + Some(required(&sentry.url).context("sentry_url")?.clone()), + Some( + required(&sentry.environment) + .context("sentry.environment")? + .clone(), + ), + ) + } else { + (None, None) + }; Ok(Self::Type { - sentry_url: self.sentry_url.clone(), - sentry_environment: self.sentry_environment.clone(), + sentry_url, + sentry_environment, log_format: required(&self.log_format).context("log_format")?.clone(), opentelemetry: self .opentelemetry .as_ref() .map(|cfg| cfg.read().context("opentelemetry")) .transpose()?, + sporadic_crypto_errors_substrs: self.sporadic_crypto_errors_substrs.clone(), }) } fn build(this: &Self::Type) -> Self { Self { - sentry_url: this.sentry_url.clone(), - sentry_environment: this.sentry_environment.clone(), + sentry: Some(proto::Sentry { + url: this.sentry_url.clone(), + environment: this.sentry_url.clone(), + panic_interval: None, + error_interval: None, + }), log_format: Some(this.log_format.clone()), opentelemetry: this.opentelemetry.as_ref().map(ProtoRepr::build), + sporadic_crypto_errors_substrs: this.sporadic_crypto_errors_substrs.clone(), } } } diff --git a/core/lib/protobuf_config/src/proof_data_handler.rs b/core/lib/protobuf_config/src/proof_data_handler.rs index b30b59a47c9..d231e5b46b7 100644 --- a/core/lib/protobuf_config/src/proof_data_handler.rs +++ b/core/lib/protobuf_config/src/proof_data_handler.rs @@ -2,24 +2,7 @@ use anyhow::Context as _; use zksync_config::configs; use zksync_protobuf::{repr::ProtoRepr, required}; -use crate::proto::proof_data_handler as proto; - -impl proto::ProtocolVersionLoadingMode { - fn new(x: &configs::proof_data_handler::ProtocolVersionLoadingMode) -> Self { - type From = configs::proof_data_handler::ProtocolVersionLoadingMode; - match x { - From::FromDb => Self::FromDb, - From::FromEnvVar => Self::FromEnvVar, - } - } - fn parse(&self) -> configs::proof_data_handler::ProtocolVersionLoadingMode { - type To = configs::proof_data_handler::ProtocolVersionLoadingMode; - match self { - Self::FromDb => To::FromDb, - Self::FromEnvVar => To::FromEnvVar, - } - } -} +use crate::proto::prover as proto; impl ProtoRepr for proto::ProofDataHandler { type Type = configs::ProofDataHandlerConfig; @@ -31,13 +14,6 @@ impl ProtoRepr for proto::ProofDataHandler { proof_generation_timeout_in_secs: required(&self.proof_generation_timeout_in_secs) .and_then(|x| Ok((*x).try_into()?)) .context("proof_generation_timeout_in_secs")?, - protocol_version_loading_mode: required(&self.protocol_version_loading_mode) - .and_then(|x| Ok(proto::ProtocolVersionLoadingMode::try_from(*x)?)) - .context("protocol_version_loading_mode")? - .parse(), - fri_protocol_version_id: required(&self.fri_protocol_version_id) - .and_then(|x| Ok((*x).try_into()?)) - .context("fri_protocol_version_id")?, }) } @@ -45,10 +21,6 @@ impl ProtoRepr for proto::ProofDataHandler { Self { http_port: Some(this.http_port.into()), proof_generation_timeout_in_secs: Some(this.proof_generation_timeout_in_secs.into()), - protocol_version_loading_mode: Some( - proto::ProtocolVersionLoadingMode::new(&this.protocol_version_loading_mode).into(), - ), - fri_protocol_version_id: Some(this.fri_protocol_version_id.into()), } } } diff --git a/core/lib/protobuf_config/src/proto/alerts.proto b/core/lib/protobuf_config/src/proto/alerts.proto deleted file mode 100644 index 358778b05a1..00000000000 --- a/core/lib/protobuf_config/src/proto/alerts.proto +++ /dev/null @@ -1,7 +0,0 @@ -syntax = "proto3"; - -package zksync.config.alerts; - -message Alerts { - repeated string sporadic_crypto_errors_substrs = 1; -} diff --git a/core/lib/protobuf_config/src/proto/api.proto b/core/lib/protobuf_config/src/proto/api.proto index bc9e9e420a1..4bb455c8fe9 100644 --- a/core/lib/protobuf_config/src/proto/api.proto +++ b/core/lib/protobuf_config/src/proto/api.proto @@ -40,10 +40,7 @@ message Web3JsonRpc { optional uint64 mempool_cache_size = 29; // optional } -message ContractVerificationApi { - optional uint32 port = 1; // required; u16 - optional string url = 2; // required -} + message HealthCheck { optional uint32 port = 1; // required; u16 @@ -57,7 +54,6 @@ message MerkleTreeApi { message Api { optional Web3JsonRpc web3_json_rpc = 1; // required - optional ContractVerificationApi contract_verification = 2; // required optional utils.Prometheus prometheus = 3; // required optional HealthCheck healthcheck = 4; // required optional MerkleTreeApi merkle_tree = 5; // required diff --git a/core/lib/protobuf_config/src/proto/chain.proto b/core/lib/protobuf_config/src/proto/chain.proto index 093303778d2..8dcd6e1424d 100644 --- a/core/lib/protobuf_config/src/proto/chain.proto +++ b/core/lib/protobuf_config/src/proto/chain.proto @@ -2,27 +2,12 @@ syntax = "proto3"; package zksync.config.chain; -enum Network { - UNKNOWN = 0; - MAINNET = 1; - RINKEBY = 2; - ROPSTEN = 3; - GOERLI = 4; - SEPOLIA = 5; - LOCALHOST = 6; - TEST = 7; -} enum FeeModelVersion { V1 = 0; V2 = 1; } -message EthNetwork { - optional Network network = 1; // required - optional string zksync_network = 2; // required - optional uint64 zksync_network_id = 3; // required; L2ChainId -} message StateKeeper { optional uint64 transaction_slots = 1; // required @@ -51,8 +36,6 @@ message StateKeeper { optional uint32 virtual_blocks_per_miniblock = 24; // required optional bool upload_witness_inputs_to_gcs = 25; // required optional uint64 enum_index_migration_chunk_size = 26; // optional - optional bytes bootloader_hash = 27; // required; H256 - optional bytes default_aa_hash = 28; // required; H256 } message OperationsManager { @@ -67,12 +50,3 @@ message Mempool { optional bool remove_stuck_txs = 5; // required optional uint64 delay_interval = 6; // required; ms } - -message CircuitBreaker { - optional uint64 sync_interval_ms = 1; // required; ms - optional uint64 http_req_max_retry_number = 2; // required - optional uint32 http_req_retry_interval_sec = 3; // required; s - optional uint32 replication_lag_limit_sec = 4; // optional; s -} - - diff --git a/core/lib/protobuf_config/src/proto/circuit_breaker.proto b/core/lib/protobuf_config/src/proto/circuit_breaker.proto new file mode 100644 index 00000000000..58f5c74e552 --- /dev/null +++ b/core/lib/protobuf_config/src/proto/circuit_breaker.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; + +package zksync.config.circuit_breaker; + +message CircuitBreaker { + optional uint64 sync_interval_ms = 1; // required; ms + optional uint64 http_req_max_retry_number = 2; // required + optional uint32 http_req_retry_interval_sec = 3; // required; s + optional uint32 replication_lag_limit_sec = 4; // optional; s +} + + diff --git a/core/lib/protobuf_config/src/proto/circuit_breaker.rs b/core/lib/protobuf_config/src/proto/circuit_breaker.rs new file mode 100644 index 00000000000..c58c20d84a9 --- /dev/null +++ b/core/lib/protobuf_config/src/proto/circuit_breaker.rs @@ -0,0 +1,29 @@ +use crate::{parse_h160, parse_h256, proto::circuit_breaker as proto}; +use anyhow::Context as _; +use zksync_config::configs; +use zksync_protobuf::{required, ProtoRepr}; + +impl ProtoRepr for crate::proto::CircuitBreaker { + type Type = configs::chain::CircuitBreakerConfig; + fn read(&self) -> anyhow::Result { + Ok(Self::Type { + sync_interval_ms: *required(&self.sync_interval_ms).context("sync_interval_ms")?, + http_req_max_retry_number: required(&self.http_req_max_retry_number) + .and_then(|x| Ok((*x).try_into()?)) + .context("http_req_max_retry_number")?, + http_req_retry_interval_sec: required(&self.http_req_retry_interval_sec) + .and_then(|x| Ok((*x).try_into()?)) + .context("http_req_retry_interval_sec")?, + replication_lag_limit_sec: self.replication_lag_limit_sec, + }) + } + + fn build(this: &Self::Type) -> Self { + Self { + sync_interval_ms: Some(this.sync_interval_ms), + http_req_max_retry_number: Some(this.http_req_max_retry_number.try_into().unwrap()), + http_req_retry_interval_sec: Some(this.http_req_retry_interval_sec.into()), + replication_lag_limit_sec: this.replication_lag_limit_sec, + } + } +} diff --git a/core/lib/protobuf_config/src/proto/consensus.proto b/core/lib/protobuf_config/src/proto/consensus.proto new file mode 100644 index 00000000000..acccd146f8f --- /dev/null +++ b/core/lib/protobuf_config/src/proto/consensus.proto @@ -0,0 +1,69 @@ +// For config readability and ease of use, some of the primitive types are +// encoded as strings. Fields of these types have a comment with the name of the type. +// Here is the list of string-encoded types and their corresponding string formats: +// +// IpAddr - TCP socket address, encoded as a string of the form "IP:port". +// Both IPv4 and IPv6 are supported +// (note that opening IPv6 ports may not work depending on the VM capabilities). +// examples: "203.0.113.7:3456", "[2001:DB8::1]:4567" +// +// ValidatorPublicKey - public key of the validator (consensus participant) of the form "validator:public::" +// Currently only bn254 signature scheme is supported for validators. +// example: "validator:public:bn254:4b0c4697f0a35eab30f63684ae4611f3c1d631eecfd97237e2345a9b3d0c472dbb16c49b793beceaab0cdd89cda6ff1099bd1aaf1ad6cabde9a15793cc09b407" +// +// NodePublicKey - public key of the node (gossip network participant) of the form "node:public::" +// Currently only ed25519 signature scheme is supported for nodes. +// example: "node:public:ed25519:d36607699a0a3fbe3de16947928cf299484219ff62ca20f387795b0859dbe501" +// +// ValidatorSecretKey - secret key of the validator (consensus participant) of the form "validator:secret::" +// Currently only bn254 signature scheme is supported for validators. +// example: "validator:secret:bn254:1aaa9c2c5a4f0f75b79127a7207348e33df55869d79622eccf65c91c98861257" +// +// NodeSecretKey - secret key of the node (gossip network participant) of the form "node:secret::" +// Currently only ed25519 signature scheme is supported for nodes. +// example: "node:secret:ed25519:4f761350f4b038f8052d17f0a02e18782be66f16d407e7a073c925d52dcc8f02" + +syntax = "proto3"; + +package zksync.config.consensus; + +// (public key, ip address) of a gossip network node. +message NodeAddr { + optional string key = 1; // required; NodePublicKey + optional string addr = 2; // required; IpAddr +} + +message Config { + // IP:port to listen on, for incoming TCP connections. + // Use `0.0.0.0:` to listen on all network interfaces (i.e. on all IPs exposed by this VM). + optional string server_addr = 1; // required; IpAddr + + // Public IP:port to advertise, should forward to server_addr. + // Can be `127.0.0.1:` for local tests. + optional string public_addr = 2; // required; IpAddr + + // Public keys of all validators. + // Currently it has to be a singleton with a public key corresponding to secret key in CONSENSUS_VALIDATOR_KEY env var. + repeated string validators = 3; // required; ValidatorPublicKey + + // Maximal allowed size of the payload. + optional uint64 max_payload_size = 4; // required; bytes + + // Inbound connections that should be unconditionally accepted on the gossip network. + repeated string gossip_static_inbound = 5; // required; NodePublicKey + + // Limit on the number of gossip network inbound connections outside + // of the `gossip_static_inbound` set. + optional uint64 gossip_dynamic_inbound_limit = 6; // required + + // Outbound gossip network connections that the node should actively try to + // establish and maintain. + repeated NodeAddr gossip_static_outbound = 7; +} + +message Secrets { + optional string validator_key = 1; // required for validator nodes; ValidatorSecretKey + optional string node_key = 2; // required for any node; NodeSecretKey +} + + diff --git a/core/lib/protobuf_config/src/proto/contract_verifier.proto b/core/lib/protobuf_config/src/proto/contract_verifier.proto index 9fa4030c9dc..31b1d3ed2ec 100644 --- a/core/lib/protobuf_config/src/proto/contract_verifier.proto +++ b/core/lib/protobuf_config/src/proto/contract_verifier.proto @@ -2,8 +2,11 @@ syntax = "proto3"; package zksync.config.contract_verifier; -message ContractVerifier { - optional uint64 compilation_timeout = 1; // required; s - optional uint64 polling_interval = 2; // optional; ms - optional uint32 prometheus_port = 3; // required; u16 +message ContractVerifier{ + optional uint32 port = 1; // required; u16 + optional string url = 2; // required + optional uint64 compilation_timeout = 3; + optional uint64 polling_interval = 4; + optional uint32 threads_per_server = 5; + optional uint32 prometheus_port = 6; } diff --git a/core/lib/protobuf_config/src/proto/database.proto b/core/lib/protobuf_config/src/proto/database.proto index 97e5defa23d..205033cc383 100644 --- a/core/lib/protobuf_config/src/proto/database.proto +++ b/core/lib/protobuf_config/src/proto/database.proto @@ -23,8 +23,8 @@ message DB { } message Postgres { - optional string master_url = 1; // optional - optional string replica_url = 2; // optional + optional string server_url = 1; // optional + optional string server_replica_url = 2; // optional optional string prover_url = 3; // optional optional uint32 max_connections = 4; // optional optional uint64 statement_timeout_sec = 5; // optional; s @@ -32,4 +32,10 @@ message Postgres { optional uint64 long_connection_threshold_ms = 7; // optional; ms optional uint64 slow_query_threshold_ms = 8; // optional; ms optional uint32 max_connections_master = 9; // optional + optional TestDatabase test = 10; } + +message TestDatabase { + optional string server_url = 1; // optional + optional string prover_url = 2; // optional +} \ No newline at end of file diff --git a/core/lib/protobuf_config/src/proto/eth_client.proto b/core/lib/protobuf_config/src/proto/eth_client.proto deleted file mode 100644 index cf02d2e78dd..00000000000 --- a/core/lib/protobuf_config/src/proto/eth_client.proto +++ /dev/null @@ -1,8 +0,0 @@ -syntax = "proto3"; - -package zksync.config.eth_client; - -message ETHClient { - optional uint64 chain_id = 1; // required; TODO: shouldn't it be Network? - optional string web3_url = 2; // required -} diff --git a/core/lib/protobuf_config/src/proto/eth_sender.proto b/core/lib/protobuf_config/src/proto/eth_sender.proto index 50f39070531..16e936fc32d 100644 --- a/core/lib/protobuf_config/src/proto/eth_sender.proto +++ b/core/lib/protobuf_config/src/proto/eth_sender.proto @@ -1,10 +1,12 @@ syntax = "proto3"; -package zksync.config.eth_sender; +package zksync.config.eth; -message ETHSender { +message ETH { optional Sender sender = 1; // required optional GasAdjuster gas_adjuster = 2; // required + optional ETHWatch watcher = 3; // required + optional string web3_url = 4; } enum ProofSendingMode { @@ -40,9 +42,8 @@ message Sender { optional uint64 timestamp_criteria_max_allowed_lag = 14; // required; ? optional uint64 l1_batch_min_age_before_execute_seconds = 15; // optional; s optional uint64 max_acceptable_priority_fee_in_gwei = 16; // required; gwei - optional ProofLoadingMode proof_loading_mode = 17; // required - // operator_private_key? optional PubdataSendingMode pubdata_sending_mode = 18; // required + optional ProofLoadingMode proof_loading_mode = 19; } message GasAdjuster { @@ -58,3 +59,8 @@ message GasAdjuster { optional double internal_pubdata_pricing_multiplier = 10; // required; optional uint64 max_blob_base_fee = 11; // optional; wei } + +message ETHWatch { + optional uint64 confirmations_for_eth_event = 1; // optional + optional uint64 eth_node_poll_interval = 2; // required; ms +} diff --git a/core/lib/protobuf_config/src/proto/eth_watch.proto b/core/lib/protobuf_config/src/proto/eth_watch.proto deleted file mode 100644 index 0fb611eec4c..00000000000 --- a/core/lib/protobuf_config/src/proto/eth_watch.proto +++ /dev/null @@ -1,8 +0,0 @@ -syntax = "proto3"; - -package zksync.config.eth_watch; - -message ETHWatch { - optional uint64 confirmations_for_eth_event = 1; // optional - optional uint64 eth_node_poll_interval = 2; // required; ms -} diff --git a/core/lib/protobuf_config/src/proto/fri_proof_compressor.proto b/core/lib/protobuf_config/src/proto/fri_proof_compressor.proto deleted file mode 100644 index 2e36e6aa16c..00000000000 --- a/core/lib/protobuf_config/src/proto/fri_proof_compressor.proto +++ /dev/null @@ -1,15 +0,0 @@ -syntax = "proto3"; - -package zksync.config.fri_proof_compressor; - -message FriProofCompressor { - optional uint32 compression_mode = 1; // required; u8 - optional uint32 prometheus_listener_port = 2; // required; u16 - optional string prometheus_pushgateway_url = 3; // required - optional uint64 prometheus_push_interval_ms = 4; // optional; ms - optional uint32 generation_timeout_in_secs = 5; // required; s - optional uint32 max_attempts = 6; // required - optional string universal_setup_path = 7; // required; fs path - optional string universal_setup_download_url = 8; // required - optional bool verify_wrapper_proof = 9; // required -} diff --git a/core/lib/protobuf_config/src/proto/fri_prover.proto b/core/lib/protobuf_config/src/proto/fri_prover.proto deleted file mode 100644 index 69eb299f960..00000000000 --- a/core/lib/protobuf_config/src/proto/fri_prover.proto +++ /dev/null @@ -1,24 +0,0 @@ -syntax = "proto3"; - -package zksync.config.fri_prover; - -enum SetupLoadMode { - FROM_DISK = 0; - FROM_MEMORY = 1; -} - -message FriProver { - optional string setup_data_path = 1; // required; fs path? - optional uint32 prometheus_port = 2; // required; u16 - optional uint32 max_attempts = 3; // required - optional uint32 generation_timeout_in_secs = 4; // required; s - optional bytes base_layer_circuit_ids_to_be_verified = 5; // required - optional bytes recursive_layer_circuit_ids_to_be_verified = 6; // required - optional SetupLoadMode setup_load_mode = 7; // required - optional uint32 specialized_group_id = 8; // required; u8 - optional uint64 witness_vector_generator_thread_count = 9; // optional - optional uint64 queue_capacity = 10; // required - optional uint32 witness_vector_receiver_port = 11; // required; u16 - optional string zone_read_url = 12; // required - optional bool shall_save_to_public_bucket = 13; // required -} diff --git a/core/lib/protobuf_config/src/proto/fri_prover_gateway.proto b/core/lib/protobuf_config/src/proto/fri_prover_gateway.proto deleted file mode 100644 index f429321f95b..00000000000 --- a/core/lib/protobuf_config/src/proto/fri_prover_gateway.proto +++ /dev/null @@ -1,11 +0,0 @@ -syntax = "proto3"; - -package zksync.config.fri_prover_gateway; - -message FriProverGateway { - optional string api_url = 1; // required - optional uint32 api_poll_duration_secs = 2; // required; s - optional uint32 prometheus_listener_port = 3; // required; u16 - optional string prometheus_pushgateway_url = 4; // required - optional uint64 prometheus_push_interval_ms = 5; // optional; ms -} diff --git a/core/lib/protobuf_config/src/proto/fri_prover_group.proto b/core/lib/protobuf_config/src/proto/fri_prover_group.proto deleted file mode 100644 index 1b883c6f44d..00000000000 --- a/core/lib/protobuf_config/src/proto/fri_prover_group.proto +++ /dev/null @@ -1,24 +0,0 @@ -syntax = "proto3"; - -package zksync.config.fri_prover_group; - -message CircuitIdRoundTuple { - optional uint32 circuit_id = 1; // required; u8 - optional uint32 aggregation_round = 2; // required; u8 -} - -message FriProverGroup { - repeated CircuitIdRoundTuple group_0 = 1; - repeated CircuitIdRoundTuple group_1 = 2; - repeated CircuitIdRoundTuple group_2 = 3; - repeated CircuitIdRoundTuple group_3 = 4; - repeated CircuitIdRoundTuple group_4 = 5; - repeated CircuitIdRoundTuple group_5 = 6; - repeated CircuitIdRoundTuple group_6 = 7; - repeated CircuitIdRoundTuple group_7 = 8; - repeated CircuitIdRoundTuple group_8 = 9; - repeated CircuitIdRoundTuple group_9 = 10; - repeated CircuitIdRoundTuple group_10 = 11; - repeated CircuitIdRoundTuple group_11 = 12; - repeated CircuitIdRoundTuple group_12 = 13; -} diff --git a/core/lib/protobuf_config/src/proto/fri_witness_generator.proto b/core/lib/protobuf_config/src/proto/fri_witness_generator.proto deleted file mode 100644 index f51aaff73e0..00000000000 --- a/core/lib/protobuf_config/src/proto/fri_witness_generator.proto +++ /dev/null @@ -1,13 +0,0 @@ -syntax = "proto3"; - -package zksync.config.fri_witness_generator; - -message FriWitnessGenerator { - optional uint32 generation_timeout_in_secs = 1; // required; s - optional uint32 max_attempts = 2; // required - optional uint32 blocks_proving_percentage = 3; // optional; 0-100 - repeated uint32 dump_arguments_for_blocks = 4; - optional uint32 last_l1_batch_to_process = 5; // optional - optional uint32 force_process_block = 6; // optional - optional bool shall_save_to_public_bucket = 7; // required -} diff --git a/core/lib/protobuf_config/src/proto/fri_witness_vector_generator.proto b/core/lib/protobuf_config/src/proto/fri_witness_vector_generator.proto deleted file mode 100644 index 29249164f2a..00000000000 --- a/core/lib/protobuf_config/src/proto/fri_witness_vector_generator.proto +++ /dev/null @@ -1,13 +0,0 @@ -syntax = "proto3"; - -package zksync.config.fri_witness_vector_generator; - -message FriWitnessVectorGenerator { - optional uint32 max_prover_reservation_duration_in_secs = 1; // required; s - optional uint32 prover_instance_wait_timeout_in_secs = 2; // required; s - optional uint32 prover_instance_poll_time_in_milli_secs = 3; // required; ms - optional uint32 prometheus_listener_port = 4; // required; u16 - optional string prometheus_pushgateway_url = 5; // required - optional uint64 prometheus_push_interval_ms = 6; // optional; ms - optional uint32 specialized_group_id = 7; // required; u8 -} diff --git a/core/lib/protobuf_config/src/proto/general.proto b/core/lib/protobuf_config/src/proto/general.proto new file mode 100644 index 00000000000..5c766244518 --- /dev/null +++ b/core/lib/protobuf_config/src/proto/general.proto @@ -0,0 +1,36 @@ +syntax = "proto3"; + +package zksync.config.general; + +import "zksync/config/prover.proto"; +import "zksync/config/api.proto"; +import "zksync/config/chain.proto"; +import "zksync/config/contract_verifier.proto"; +import "zksync/config/database.proto"; +import "zksync/config/circuit_breaker.proto"; +import "zksync/config/eth_sender.proto"; +import "zksync/config/house_keeper.proto"; +import "zksync/config/observability.proto"; +import "zksync/config/snapshots_creator.proto"; +import "zksync/config/utils.proto"; + +message GeneralConfig { + optional config.database.Postgres postgres = 1; + optional config.api.Api api = 2; + optional config.circuit_breaker.CircuitBreaker circuit_breaker = 5; + optional config.chain.Mempool mempool = 6; + optional config.chain.OperationsManager operations_manager = 8; + optional config.chain.StateKeeper state_keeper = 9; + optional config.house_keeper.HouseKeeper house_keeper = 10; + optional config.prover.Prover prover = 12; + optional config.utils.Prometheus prometheus = 15; + optional config.database.DB db = 20; + optional config.eth.ETH eth = 22; + optional config.prover.WitnessGenerator witness_generator = 24; + optional config.prover.WitnessVectorGenerator witness_vector_generator = 25; + optional config.prover.ProofCompressor proof_compressor = 27; + optional config.prover.ProofDataHandler data_handler = 28; + optional config.prover.ProverGroup prover_group = 29; + optional config.prover.ProverGateway prover_gateway = 30; +} + diff --git a/core/lib/protobuf_config/src/proto/genesis.proto b/core/lib/protobuf_config/src/proto/genesis.proto index 5bfe615ae21..ca051063439 100644 --- a/core/lib/protobuf_config/src/proto/genesis.proto +++ b/core/lib/protobuf_config/src/proto/genesis.proto @@ -7,8 +7,7 @@ message Prover { optional bytes recursion_node_level_vk_hash = 2; // required; H256 optional bytes recursion_leaf_level_vk_hash = 3; // required; H256 optional bytes recursion_circuits_set_vks_hash = 4; // required; H256 - optional bytes snark_wrapper_vk_hash = 5; // required; H256 - optional bool dummy_verifier = 6; + optional bool dummy_verifier = 5; } message SharedBridge { @@ -26,6 +25,7 @@ message Genesis { optional bytes bootloader_hash = 6; // optional; h256 optional uint64 l1_chain_id = 7; // optional; optional uint64 l2_chain_id = 8; // optional; - optional Prover prover = 9; - optional SharedBridge shared_bridge = 10; + optional bytes fee_account = 9; // h160 + optional Prover prover = 10; + optional SharedBridge shared_bridge = 11; } diff --git a/core/lib/protobuf_config/src/proto/house_keeper.proto b/core/lib/protobuf_config/src/proto/house_keeper.proto index 6c186aba554..a83b5c5b60d 100644 --- a/core/lib/protobuf_config/src/proto/house_keeper.proto +++ b/core/lib/protobuf_config/src/proto/house_keeper.proto @@ -9,11 +9,8 @@ message HouseKeeper { optional uint64 prover_stats_reporting_interval_ms = 4; // required ms optional uint64 witness_job_moving_interval_ms = 5; // required; ms optional uint64 witness_generator_stats_reporting_interval_ms = 6; // required; ms - optional uint64 fri_witness_job_moving_interval_ms = 7; // required; ms - optional uint64 fri_prover_job_retrying_interval_ms = 8; // required; ms - optional uint64 fri_witness_generator_job_retrying_interval_ms = 9; // required; ms + optional uint64 witness_generator_job_retrying_interval_ms = 9; // required; ms optional uint32 prover_db_pool_size = 10; // required - optional uint64 fri_prover_stats_reporting_interval_ms = 11; // required; ms - optional uint64 fri_proof_compressor_job_retrying_interval_ms = 12; // required; ms - optional uint64 fri_proof_compressor_stats_reporting_interval_ms = 13; // required; ms + optional uint64 proof_compressor_job_retrying_interval_ms = 12; // required; ms + optional uint64 proof_compressor_stats_reporting_interval_ms = 13; // required; ms } diff --git a/core/lib/protobuf_config/src/proto/mod.rs b/core/lib/protobuf_config/src/proto/mod.rs index 660bf4c5b4c..9f44835b29c 100644 --- a/core/lib/protobuf_config/src/proto/mod.rs +++ b/core/lib/protobuf_config/src/proto/mod.rs @@ -1,2 +1,3 @@ #![allow(warnings)] + include!(concat!(env!("OUT_DIR"), "/src/proto/gen.rs")); diff --git a/core/lib/protobuf_config/src/proto/observability.proto b/core/lib/protobuf_config/src/proto/observability.proto index 04b1c059fb5..d8011e984fa 100644 --- a/core/lib/protobuf_config/src/proto/observability.proto +++ b/core/lib/protobuf_config/src/proto/observability.proto @@ -2,11 +2,19 @@ syntax = "proto3"; package zksync.config.observability; +message Sentry { + optional string url = 1; // optional + optional string environment = 2; // optional + optional uint32 panic_interval = 3; + optional uint32 error_interval = 4; + +} + message Observability { - optional string sentry_url = 1; // optional - optional string sentry_environment = 2; // optional + optional Sentry sentry = 1; optional string log_format = 3; // required optional Opentelemetry opentelemetry = 4; // optional + repeated string sporadic_crypto_errors_substrs = 5; } message Opentelemetry { diff --git a/core/lib/protobuf_config/src/proto/proof_data_handler.proto b/core/lib/protobuf_config/src/proto/proof_data_handler.proto deleted file mode 100644 index 2a8d10ebf6f..00000000000 --- a/core/lib/protobuf_config/src/proto/proof_data_handler.proto +++ /dev/null @@ -1,15 +0,0 @@ -syntax = "proto3"; - -package zksync.config.proof_data_handler; - -enum ProtocolVersionLoadingMode { - FROM_DB = 0; - FROM_ENV_VAR = 1; -} - -message ProofDataHandler { - optional uint32 http_port = 1; // required; u16 - optional uint32 proof_generation_timeout_in_secs = 2; // required; s - optional ProtocolVersionLoadingMode protocol_version_loading_mode = 3; // required - optional uint32 fri_protocol_version_id = 4; // required; u16 -} diff --git a/core/lib/protobuf_config/src/proto/prover.proto b/core/lib/protobuf_config/src/proto/prover.proto new file mode 100644 index 00000000000..bc5dcef7be8 --- /dev/null +++ b/core/lib/protobuf_config/src/proto/prover.proto @@ -0,0 +1,94 @@ +syntax = "proto3"; +import "zksync/config/object_store.proto"; + +package zksync.config.prover; + +message ProofCompressor { + optional uint32 compression_mode = 1; // required; u8 + optional uint32 prometheus_listener_port = 2; // required; u16 + optional string prometheus_pushgateway_url = 3; // required + optional uint64 prometheus_push_interval_ms = 4; // optional; ms + optional uint32 generation_timeout_in_secs = 5; // required; s + optional uint32 max_attempts = 6; // required + optional string universal_setup_path = 7; // required; fs path + optional string universal_setup_download_url = 8; // required + optional bool verify_wrapper_proof = 9; // required +} + +enum SetupLoadMode { + FROM_DISK = 0; + FROM_MEMORY = 1; +} + +message Prover { + optional string setup_data_path = 1; // required; fs path? + optional uint32 prometheus_port = 2; // required; u16 + optional uint32 max_attempts = 3; // required + optional uint32 generation_timeout_in_secs = 4; // required; s + optional bytes base_layer_circuit_ids_to_be_verified = 5; // required + optional bytes recursive_layer_circuit_ids_to_be_verified = 6; // required + optional SetupLoadMode setup_load_mode = 7; // required + optional uint32 specialized_group_id = 8; // required; u8 + optional uint64 witness_vector_generator_thread_count = 9; // optional + optional uint64 queue_capacity = 10; // required + optional uint32 witness_vector_receiver_port = 11; // required; u16 + optional string zone_read_url = 12; // required + optional bool shall_save_to_public_bucket = 13; // required + optional config.object_store.ObjectStore object_store = 20; +} + + +message CircuitIdRoundTuple { + optional uint32 circuit_id = 1; // required; u8 + optional uint32 aggregation_round = 2; // required; u8 +} + +message ProverGroup { + repeated CircuitIdRoundTuple group_0 = 1; + repeated CircuitIdRoundTuple group_1 = 2; + repeated CircuitIdRoundTuple group_2 = 3; + repeated CircuitIdRoundTuple group_3 = 4; + repeated CircuitIdRoundTuple group_4 = 5; + repeated CircuitIdRoundTuple group_5 = 6; + repeated CircuitIdRoundTuple group_6 = 7; + repeated CircuitIdRoundTuple group_7 = 8; + repeated CircuitIdRoundTuple group_8 = 9; + repeated CircuitIdRoundTuple group_9 = 10; + repeated CircuitIdRoundTuple group_10 = 11; + repeated CircuitIdRoundTuple group_11 = 12; + repeated CircuitIdRoundTuple group_12 = 13; +} + +message ProverGateway { + optional string api_url = 1; // required + optional uint32 api_poll_duration_secs = 2; // required; s + optional uint32 prometheus_listener_port = 3; // required; u16 + optional string prometheus_pushgateway_url = 4; // required + optional uint64 prometheus_push_interval_ms = 5; // optional; ms +} + +message WitnessGenerator { + optional uint32 generation_timeout_in_secs = 1; // required; s + optional uint32 max_attempts = 2; // required + optional uint32 blocks_proving_percentage = 3; // optional; 0-100 + repeated uint32 dump_arguments_for_blocks = 4; + optional uint32 last_l1_batch_to_process = 5; // optional + optional uint32 force_process_block = 6; // optional + optional bool shall_save_to_public_bucket = 7; // required +} + +message WitnessVectorGenerator { + optional uint32 max_prover_reservation_duration_in_secs = 1; // required; s + optional uint32 prover_instance_wait_timeout_in_secs = 2; // required; s + optional uint32 prover_instance_poll_time_in_milli_secs = 3; // required; ms + optional uint32 prometheus_listener_port = 4; // required; u16 + optional string prometheus_pushgateway_url = 5; // required + optional uint64 prometheus_push_interval_ms = 6; // optional; ms + optional uint32 specialized_group_id = 7; // required; u8 +} + + +message ProofDataHandler { + optional uint32 http_port = 1; // required; u16 + optional uint32 proof_generation_timeout_in_secs = 2; // required; s +} diff --git a/core/lib/protobuf_config/src/proto/snapshots_creator.proto b/core/lib/protobuf_config/src/proto/snapshots_creator.proto index 86e246f66e2..7aaa39a57f6 100644 --- a/core/lib/protobuf_config/src/proto/snapshots_creator.proto +++ b/core/lib/protobuf_config/src/proto/snapshots_creator.proto @@ -1,8 +1,10 @@ syntax = "proto3"; package zksync.config.snapshot_creator; +import "zksync/config/object_store.proto"; message SnapshotsCreator { optional uint64 storage_logs_chunk_size = 1; // optional optional uint32 concurrent_queries_count = 2; // optional + optional config.object_store.ObjectStore object_store = 3; } diff --git a/core/lib/protobuf_config/src/prover.rs b/core/lib/protobuf_config/src/prover.rs new file mode 100644 index 00000000000..4987c51aabc --- /dev/null +++ b/core/lib/protobuf_config/src/prover.rs @@ -0,0 +1,345 @@ +use std::collections::HashSet; + +use anyhow::Context as _; +use zksync_basic_types::basic_fri_types::CircuitIdRoundTuple; +use zksync_config::configs; +use zksync_protobuf::{repr::ProtoRepr, required}; + +use crate::proto::prover as proto; + +impl ProtoRepr for proto::ProofCompressor { + type Type = configs::FriProofCompressorConfig; + fn read(&self) -> anyhow::Result { + Ok(Self::Type { + compression_mode: required(&self.compression_mode) + .and_then(|x| Ok((*x).try_into()?)) + .context("compression_mode")?, + prometheus_listener_port: required(&self.prometheus_listener_port) + .and_then(|x| Ok((*x).try_into()?)) + .context("prometheus_listener_port")?, + prometheus_pushgateway_url: required(&self.prometheus_pushgateway_url) + .context("prometheus_pushgateway_url")? + .clone(), + prometheus_push_interval_ms: self.prometheus_push_interval_ms, + generation_timeout_in_secs: required(&self.generation_timeout_in_secs) + .and_then(|x| Ok((*x).try_into()?)) + .context("generation_timeout_in_secs")?, + max_attempts: *required(&self.max_attempts).context("max_attempts")?, + universal_setup_path: required(&self.universal_setup_path) + .context("universal_setup_path")? + .clone(), + universal_setup_download_url: required(&self.universal_setup_download_url) + .context("universal_setup_download_url")? + .clone(), + verify_wrapper_proof: *required(&self.verify_wrapper_proof) + .context("verify_wrapper_proof")?, + }) + } + + fn build(this: &Self::Type) -> Self { + Self { + compression_mode: Some(this.compression_mode.into()), + prometheus_listener_port: Some(this.prometheus_listener_port.into()), + prometheus_pushgateway_url: Some(this.prometheus_pushgateway_url.clone()), + prometheus_push_interval_ms: this.prometheus_push_interval_ms, + generation_timeout_in_secs: Some(this.generation_timeout_in_secs.into()), + max_attempts: Some(this.max_attempts), + universal_setup_path: Some(this.universal_setup_path.clone()), + universal_setup_download_url: Some(this.universal_setup_download_url.clone()), + verify_wrapper_proof: Some(this.verify_wrapper_proof), + } + } +} + +impl ProtoRepr for proto::CircuitIdRoundTuple { + type Type = CircuitIdRoundTuple; + fn read(&self) -> anyhow::Result { + Ok(Self::Type { + circuit_id: required(&self.circuit_id) + .and_then(|x| Ok((*x).try_into()?)) + .context("circuit_id")?, + aggregation_round: required(&self.aggregation_round) + .and_then(|x| Ok((*x).try_into()?)) + .context("aggregation_round")?, + }) + } + + fn build(this: &Self::Type) -> Self { + Self { + circuit_id: Some(this.circuit_id.into()), + aggregation_round: Some(this.aggregation_round.into()), + } + } +} + +fn read_vec(v: &[proto::CircuitIdRoundTuple]) -> anyhow::Result> { + v.iter() + .enumerate() + .map(|(i, x)| x.read().context(i)) + .collect() +} + +fn build_vec(v: &HashSet) -> Vec { + let mut v: Vec<_> = v.iter().cloned().collect(); + v.sort(); + v.iter().map(ProtoRepr::build).collect() +} + +impl ProtoRepr for proto::ProverGroup { + type Type = configs::fri_prover_group::FriProverGroupConfig; + fn read(&self) -> anyhow::Result { + Ok(Self::Type { + group_0: read_vec(&self.group_0).context("group_0")?, + group_1: read_vec(&self.group_1).context("group_1")?, + group_2: read_vec(&self.group_2).context("group_2")?, + group_3: read_vec(&self.group_3).context("group_3")?, + group_4: read_vec(&self.group_4).context("group_4")?, + group_5: read_vec(&self.group_5).context("group_5")?, + group_6: read_vec(&self.group_6).context("group_6")?, + group_7: read_vec(&self.group_7).context("group_7")?, + group_8: read_vec(&self.group_8).context("group_8")?, + group_9: read_vec(&self.group_9).context("group_9")?, + group_10: read_vec(&self.group_10).context("group_10")?, + group_11: read_vec(&self.group_11).context("group_11")?, + group_12: read_vec(&self.group_12).context("group_12")?, + }) + } + + fn build(this: &Self::Type) -> Self { + Self { + group_0: build_vec(&this.group_0), + group_1: build_vec(&this.group_1), + group_2: build_vec(&this.group_2), + group_3: build_vec(&this.group_3), + group_4: build_vec(&this.group_4), + group_5: build_vec(&this.group_5), + group_6: build_vec(&this.group_6), + group_7: build_vec(&this.group_7), + group_8: build_vec(&this.group_8), + group_9: build_vec(&this.group_9), + group_10: build_vec(&this.group_10), + group_11: build_vec(&this.group_11), + group_12: build_vec(&this.group_12), + } + } +} + +impl ProtoRepr for proto::ProverGateway { + type Type = configs::FriProverGatewayConfig; + fn read(&self) -> anyhow::Result { + Ok(Self::Type { + api_url: required(&self.api_url).context("api_url")?.clone(), + api_poll_duration_secs: required(&self.api_poll_duration_secs) + .and_then(|x| Ok((*x).try_into()?)) + .context("api_poll_duration_secs")?, + prometheus_listener_port: required(&self.prometheus_listener_port) + .and_then(|x| Ok((*x).try_into()?)) + .context("prometheus_listener_port")?, + prometheus_pushgateway_url: required(&self.prometheus_pushgateway_url) + .context("prometheus_pushgateway_url")? + .clone(), + prometheus_push_interval_ms: self.prometheus_push_interval_ms, + }) + } + + fn build(this: &Self::Type) -> Self { + Self { + api_url: Some(this.api_url.clone()), + api_poll_duration_secs: Some(this.api_poll_duration_secs.into()), + prometheus_listener_port: Some(this.prometheus_listener_port.into()), + prometheus_pushgateway_url: Some(this.prometheus_pushgateway_url.clone()), + prometheus_push_interval_ms: this.prometheus_push_interval_ms, + } + } +} + +impl ProtoRepr for proto::WitnessGenerator { + type Type = configs::FriWitnessGeneratorConfig; + fn read(&self) -> anyhow::Result { + Ok(Self::Type { + generation_timeout_in_secs: required(&self.generation_timeout_in_secs) + .and_then(|x| Ok((*x).try_into()?)) + .context("generation_timeout_in_secs")?, + max_attempts: *required(&self.max_attempts).context("max_attempts")?, + blocks_proving_percentage: self + .blocks_proving_percentage + .map(|x| x.try_into()) + .transpose() + .context("blocks_proving_percentage")?, + dump_arguments_for_blocks: self.dump_arguments_for_blocks.clone(), + last_l1_batch_to_process: self.last_l1_batch_to_process, + force_process_block: self.force_process_block, + shall_save_to_public_bucket: *required(&self.shall_save_to_public_bucket) + .context("shall_save_to_public_bucket")?, + }) + } + + fn build(this: &Self::Type) -> Self { + Self { + generation_timeout_in_secs: Some(this.generation_timeout_in_secs.into()), + max_attempts: Some(this.max_attempts), + blocks_proving_percentage: this.blocks_proving_percentage.map(|x| x.into()), + dump_arguments_for_blocks: this.dump_arguments_for_blocks.clone(), + last_l1_batch_to_process: this.last_l1_batch_to_process, + force_process_block: this.force_process_block, + shall_save_to_public_bucket: Some(this.shall_save_to_public_bucket), + } + } +} + +impl ProtoRepr for proto::WitnessVectorGenerator { + type Type = configs::FriWitnessVectorGeneratorConfig; + fn read(&self) -> anyhow::Result { + Ok(Self::Type { + max_prover_reservation_duration_in_secs: required( + &self.max_prover_reservation_duration_in_secs, + ) + .and_then(|x| Ok((*x).try_into()?)) + .context("max_prover_reservation_duration_in_secs")?, + prover_instance_wait_timeout_in_secs: required( + &self.prover_instance_wait_timeout_in_secs, + ) + .and_then(|x| Ok((*x).try_into()?)) + .context("prover_instance_wait_timeout_in_secs")?, + prover_instance_poll_time_in_milli_secs: required( + &self.prover_instance_poll_time_in_milli_secs, + ) + .and_then(|x| Ok((*x).try_into()?)) + .context("prover_instance_poll_time_in_milli_secs")?, + prometheus_listener_port: required(&self.prometheus_listener_port) + .and_then(|x| Ok((*x).try_into()?)) + .context("prometheus_listener_port")?, + prometheus_pushgateway_url: required(&self.prometheus_pushgateway_url) + .context("prometheus_pushgateway_url")? + .clone(), + prometheus_push_interval_ms: self.prometheus_push_interval_ms, + specialized_group_id: required(&self.specialized_group_id) + .and_then(|x| Ok((*x).try_into()?)) + .context("specialized_group_id")?, + }) + } + + fn build(this: &Self::Type) -> Self { + Self { + max_prover_reservation_duration_in_secs: Some( + this.max_prover_reservation_duration_in_secs.into(), + ), + prover_instance_wait_timeout_in_secs: Some( + this.prover_instance_wait_timeout_in_secs.into(), + ), + prover_instance_poll_time_in_milli_secs: Some( + this.prover_instance_poll_time_in_milli_secs.into(), + ), + prometheus_listener_port: Some(this.prometheus_listener_port.into()), + prometheus_pushgateway_url: Some(this.prometheus_pushgateway_url.clone()), + prometheus_push_interval_ms: this.prometheus_push_interval_ms, + specialized_group_id: Some(this.specialized_group_id.into()), + } + } +} + +impl proto::SetupLoadMode { + fn new(x: &configs::fri_prover::SetupLoadMode) -> Self { + use configs::fri_prover::SetupLoadMode as From; + match x { + From::FromDisk => Self::FromDisk, + From::FromMemory => Self::FromMemory, + } + } + + fn parse(&self) -> configs::fri_prover::SetupLoadMode { + use configs::fri_prover::SetupLoadMode as To; + match self { + Self::FromDisk => To::FromDisk, + Self::FromMemory => To::FromMemory, + } + } +} + +impl ProtoRepr for proto::Prover { + type Type = configs::FriProverConfig; + fn read(&self) -> anyhow::Result { + let object_store = if let Some(object_store) = &self.object_store { + Some(object_store.read()?) + } else { + None + }; + + Ok(Self::Type { + setup_data_path: required(&self.setup_data_path) + .context("setup_data_path")? + .clone(), + prometheus_port: required(&self.prometheus_port) + .and_then(|x| Ok((*x).try_into()?)) + .context("prometheus_port")?, + max_attempts: *required(&self.max_attempts).context("max_attempts")?, + generation_timeout_in_secs: required(&self.generation_timeout_in_secs) + .and_then(|x| Ok((*x).try_into()?)) + .context("generation_timeout_in_secs")?, + base_layer_circuit_ids_to_be_verified: required( + &self.base_layer_circuit_ids_to_be_verified, + ) + .context("base_layer_circuit_ids_to_be_verified")? + .clone(), + recursive_layer_circuit_ids_to_be_verified: required( + &self.recursive_layer_circuit_ids_to_be_verified, + ) + .context("recursive_layer_circuit_ids_to_be_verified")? + .clone(), + setup_load_mode: required(&self.setup_load_mode) + .and_then(|x| Ok(proto::SetupLoadMode::try_from(*x)?)) + .context("setup_load_mode")? + .parse(), + specialized_group_id: required(&self.specialized_group_id) + .and_then(|x| Ok((*x).try_into()?)) + .context("specialized_group_id")?, + witness_vector_generator_thread_count: self + .witness_vector_generator_thread_count + .map(|x| x.try_into()) + .transpose() + .context("witness_vector_generator_thread_count")?, + queue_capacity: required(&self.queue_capacity) + .and_then(|x| Ok((*x).try_into()?)) + .context("queue_capacity")?, + witness_vector_receiver_port: required(&self.witness_vector_receiver_port) + .and_then(|x| Ok((*x).try_into()?)) + .context("witness_vector_receiver_port")?, + zone_read_url: required(&self.zone_read_url) + .context("zone_read_url")? + .clone(), + shall_save_to_public_bucket: *required(&self.shall_save_to_public_bucket) + .context("shall_save_to_public_bucket")?, + object_store, + }) + } + + fn build(this: &Self::Type) -> Self { + let object_store = if let Some(object_store) = &this.object_store { + Some(ProtoRepr::build(object_store)) + } else { + None + }; + Self { + setup_data_path: Some(this.setup_data_path.clone()), + prometheus_port: Some(this.prometheus_port.into()), + max_attempts: Some(this.max_attempts), + generation_timeout_in_secs: Some(this.generation_timeout_in_secs.into()), + base_layer_circuit_ids_to_be_verified: Some( + this.base_layer_circuit_ids_to_be_verified.clone(), + ), + recursive_layer_circuit_ids_to_be_verified: Some( + this.recursive_layer_circuit_ids_to_be_verified.clone(), + ), + setup_load_mode: Some(proto::SetupLoadMode::new(&this.setup_load_mode).into()), + specialized_group_id: Some(this.specialized_group_id.into()), + witness_vector_generator_thread_count: this + .witness_vector_generator_thread_count + .map(|x| x.try_into().unwrap()), + queue_capacity: Some(this.queue_capacity.try_into().unwrap()), + witness_vector_receiver_port: Some(this.witness_vector_receiver_port.into()), + zone_read_url: Some(this.zone_read_url.clone()), + shall_save_to_public_bucket: Some(this.shall_save_to_public_bucket), + object_store, + } + } +} diff --git a/core/lib/protobuf_config/src/snapshots_creator.rs b/core/lib/protobuf_config/src/snapshots_creator.rs index dddfbd0ec53..74cc2695ad1 100644 --- a/core/lib/protobuf_config/src/snapshots_creator.rs +++ b/core/lib/protobuf_config/src/snapshots_creator.rs @@ -7,18 +7,30 @@ use crate::proto::snapshot_creator as proto; impl ProtoRepr for proto::SnapshotsCreator { type Type = configs::SnapshotsCreatorConfig; fn read(&self) -> anyhow::Result { + let object_store = if let Some(object_store) = &self.object_store { + Some(object_store.read()?) + } else { + None + }; Ok(Self::Type { storage_logs_chunk_size: *required(&self.storage_logs_chunk_size) .context("storage_logs_chunk_size")?, concurrent_queries_count: *required(&self.concurrent_queries_count) .context("concurrent_queries_count")?, + object_store, }) } fn build(this: &Self::Type) -> Self { + let object_store = if let Some(object_store) = &this.object_store { + Some(ProtoRepr::build(object_store)) + } else { + None + }; Self { storage_logs_chunk_size: Some(this.storage_logs_chunk_size), concurrent_queries_count: Some(this.concurrent_queries_count), + object_store, } } } diff --git a/core/lib/zksync_core/build.rs b/core/lib/zksync_core/build.rs index 78ad3018e33..cda803150a6 100644 --- a/core/lib/zksync_core/build.rs +++ b/core/lib/zksync_core/build.rs @@ -3,7 +3,7 @@ fn main() { zksync_protobuf_build::Config { input_root: "src/proto".into(), proto_root: "zksync/core".into(), - dependencies: vec!["::zksync_protobuf_config::proto".parse().unwrap()], + dependencies: vec![], protobuf_crate: "::zksync_protobuf".parse().unwrap(), is_public: true, } diff --git a/core/lib/zksync_core/src/api_server/web3/namespaces/en.rs b/core/lib/zksync_core/src/api_server/web3/namespaces/en.rs index 283dd50bef6..d91569dc21a 100644 --- a/core/lib/zksync_core/src/api_server/web3/namespaces/en.rs +++ b/core/lib/zksync_core/src/api_server/web3/namespaces/en.rs @@ -121,8 +121,8 @@ impl EnNamespace { recursion_leaf_level_vk_hash: verifier_config.params.recursion_leaf_level_vk_hash, recursion_circuits_set_vks_hash: Default::default(), recursion_scheduler_level_vk_hash: verifier_config.recursion_scheduler_level_vk_hash, - // TODO set proper values - snark_wrapper_vk_hash: Default::default(), + fee_account, + // TODO Set proper values shared_bridge: None, dummy_prover: false, }; diff --git a/core/lib/zksync_core/src/block_reverter/mod.rs b/core/lib/zksync_core/src/block_reverter/mod.rs index 439ae3fc43f..0dbbd43e171 100644 --- a/core/lib/zksync_core/src/block_reverter/mod.rs +++ b/core/lib/zksync_core/src/block_reverter/mod.rs @@ -3,7 +3,7 @@ use std::{path::Path, time::Duration}; use bitflags::bitflags; use serde::Serialize; use tokio::time::sleep; -use zksync_config::{ContractsConfig, ETHSenderConfig}; +use zksync_config::{ContractsConfig, ETHConfig}; use zksync_contracts::zksync_contract; use zksync_dal::{ConnectionPool, Core, CoreDal}; use zksync_eth_signer::{EthereumSigner, PrivateKeySigner, TransactionParameters}; @@ -53,7 +53,7 @@ pub struct BlockReverterEthConfig { } impl BlockReverterEthConfig { - pub fn new(eth_config: ETHSenderConfig, contract: ContractsConfig, web3_url: String) -> Self { + pub fn new(eth_config: ETHConfig, contract: ContractsConfig, web3_url: String) -> Self { let pk = eth_config .sender .private_key() diff --git a/core/lib/zksync_core/src/eth_sender/tests.rs b/core/lib/zksync_core/src/eth_sender/tests.rs index d2cb198a4eb..219af3a7753 100644 --- a/core/lib/zksync_core/src/eth_sender/tests.rs +++ b/core/lib/zksync_core/src/eth_sender/tests.rs @@ -5,7 +5,7 @@ use once_cell::sync::Lazy; use test_casing::test_casing; use zksync_config::{ configs::eth_sender::{ProofSendingMode, PubdataSendingMode, SenderConfig}, - ContractsConfig, ETHSenderConfig, GasAdjusterConfig, + ContractsConfig, ETHConfig, GasAdjusterConfig, }; use zksync_dal::{Connection, ConnectionPool, Core, CoreDal}; use zksync_eth_client::{clients::MockEthereum, EthInterface}; @@ -81,7 +81,7 @@ impl EthSenderTester { non_ordering_confirmations: bool, aggregator_operate_4844_mode: bool, ) -> Self { - let eth_sender_config = ETHSenderConfig::for_tests(); + let eth_sender_config = ETHConfig::for_tests(); let contracts_config = ContractsConfig::for_tests(); let aggregator_config = SenderConfig { aggregated_proof_sizes: vec![1], diff --git a/core/lib/zksync_core/src/proto/consensus.proto b/core/lib/zksync_core/src/proto/consensus.proto index e77e2ce6b65..e69de29bb2d 100644 --- a/core/lib/zksync_core/src/proto/consensus.proto +++ b/core/lib/zksync_core/src/proto/consensus.proto @@ -1,69 +0,0 @@ -// For config readability and ease of use, some of the primitive types are -// encoded as strings. Fields of these types have a comment with the name of the type. -// Here is the list of string-encoded types and their corresponding string formats: -// -// IpAddr - TCP socket address, encoded as a string of the form "IP:port". -// Both IPv4 and IPv6 are supported -// (note that opening IPv6 ports may not work depending on the VM capabilities). -// examples: "203.0.113.7:3456", "[2001:DB8::1]:4567" -// -// ValidatorPublicKey - public key of the validator (consensus participant) of the form "validator:public::" -// Currently only bn254 signature scheme is supported for validators. -// example: "validator:public:bn254:4b0c4697f0a35eab30f63684ae4611f3c1d631eecfd97237e2345a9b3d0c472dbb16c49b793beceaab0cdd89cda6ff1099bd1aaf1ad6cabde9a15793cc09b407" -// -// NodePublicKey - public key of the node (gossip network participant) of the form "node:public::" -// Currently only ed25519 signature scheme is supported for nodes. -// example: "node:public:ed25519:d36607699a0a3fbe3de16947928cf299484219ff62ca20f387795b0859dbe501" -// -// ValidatorSecretKey - secret key of the validator (consensus participant) of the form "validator:secret::" -// Currently only bn254 signature scheme is supported for validators. -// example: "validator:secret:bn254:1aaa9c2c5a4f0f75b79127a7207348e33df55869d79622eccf65c91c98861257" -// -// NodeSecretKey - secret key of the node (gossip network participant) of the form "node:secret::" -// Currently only ed25519 signature scheme is supported for nodes. -// example: "node:secret:ed25519:4f761350f4b038f8052d17f0a02e18782be66f16d407e7a073c925d52dcc8f02" - -syntax = "proto3"; - -package zksync.core.consensus; - -// (public key, ip address) of a gossip network node. -message NodeAddr { - optional string key = 1; // required; NodePublicKey - optional string addr = 2; // required; IpAddr -} - -message Config { - // IP:port to listen on, for incoming TCP connections. - // Use `0.0.0.0:` to listen on all network interfaces (i.e. on all IPs exposed by this VM). - optional string server_addr = 1; // required; IpAddr - - // Public IP:port to advertise, should forward to server_addr. - // Can be `127.0.0.1:` for local tests. - optional string public_addr = 2; // required; IpAddr - - // Public keys of all validators. - // Currently it has to be a singleton with a public key corresponding to secret key in CONSENSUS_VALIDATOR_KEY env var. - repeated string validators = 3; // required; ValidatorPublicKey - - // Maximal allowed size of the payload. - optional uint64 max_payload_size = 4; // required; bytes - - // Inbound connections that should be unconditionally accepted on the gossip network. - repeated string gossip_static_inbound = 5; // required; NodePublicKey - - // Limit on the number of gossip network inbound connections outside - // of the `gossip_static_inbound` set. - optional uint64 gossip_dynamic_inbound_limit = 6; // required - - // Outbound gossip network connections that the node should actively try to - // establish and maintain. - repeated NodeAddr gossip_static_outbound = 7; -} - -message Secrets { - optional string validator_key = 1; // required for validator nodes; ValidatorSecretKey - optional string node_key = 2; // required for any node; NodeSecretKey -} - - diff --git a/core/lib/zksync_core/src/proto/mod.proto b/core/lib/zksync_core/src/proto/mod.proto index 7aed2adb534..4ecd4a18b09 100644 --- a/core/lib/zksync_core/src/proto/mod.proto +++ b/core/lib/zksync_core/src/proto/mod.proto @@ -2,59 +2,59 @@ syntax = "proto3"; package zksync.core; -import "zksync/config/alerts.proto"; -import "zksync/config/api.proto"; -import "zksync/config/chain.proto"; -import "zksync/config/contracts.proto"; -import "zksync/config/genesis.proto"; -import "zksync/config/contract_verifier.proto"; -import "zksync/config/database.proto"; -import "zksync/config/eth_client.proto"; -import "zksync/config/eth_sender.proto"; -import "zksync/config/eth_watch.proto"; -import "zksync/config/fri_proof_compressor.proto"; -import "zksync/config/fri_prover_gateway.proto"; -import "zksync/config/fri_prover_group.proto"; -import "zksync/config/fri_prover.proto"; -import "zksync/config/fri_witness_generator.proto"; -import "zksync/config/fri_witness_vector_generator.proto"; -import "zksync/config/house_keeper.proto"; -import "zksync/config/object_store.proto"; -import "zksync/config/observability.proto"; -import "zksync/config/proof_data_handler.proto"; -import "zksync/config/snapshots_creator.proto"; -import "zksync/config/utils.proto"; -import "zksync/config/witness_generator.proto"; -import "zksync/core/consensus.proto"; - +//import "zksync/config/alerts.proto"; +//import "zksync/config/api.proto"; +//import "zksync/config/chain.proto"; +//import "zksync/config/contracts.proto"; +//import "zksync/config/genesis.proto"; +//import "zksync/config/contract_verifier.proto"; +//import "zksync/config/database.proto"; +//import "zksync/config/eth_client.proto"; +//import "zksync/config/eth_sender.proto"; +//import "zksync/config/eth_watch.proto"; +//import "zksync/config/fri_proof_compressor.proto"; +//import "zksync/config/fri_prover_gateway.proto"; +//import "zksync/config/fri_prover_group.proto"; +//import "zksync/config/fri_prover.proto"; +//import "zksync/config/fri_witness_generator.proto"; +//import "zksync/config/fri_witness_vector_generator.proto"; +//import "zksync/config/house_keeper.proto"; +//import "zksync/config/object_store.proto"; +//import "zksync/config/observability.proto"; +//import "zksync/config/proof_data_handler.proto"; +//import "zksync/config/snapshots_creator.proto"; +//import "zksync/config/utils.proto"; +//import "zksync/config/witness_generator.proto"; +//import "zksync/core/consensus.proto"; +// message TempConfigStore { - optional config.database.Postgres postgres = 1; - optional config.api.HealthCheck health_check = 2; - optional config.api.MerkleTreeApi merkle_tree_api = 3; - optional config.api.Web3JsonRpc web3_json_rpc = 4; - optional config.chain.CircuitBreaker circuit_breaker = 5; - optional config.chain.Mempool mempool = 6; - optional config.chain.EthNetwork network = 7; - optional config.chain.OperationsManager operations_manager = 8; - optional config.chain.StateKeeper state_keeper = 9; - optional config.house_keeper.HouseKeeper house_keeper = 10; - optional config.fri_proof_compressor.FriProofCompressor fri_proof_compressor = 11; - optional config.fri_prover.FriProver fri_prover = 12; - optional config.fri_prover_group.FriProverGroup fri_prover_group = 13; - optional config.fri_witness_generator.FriWitnessGenerator fri_witness_generator = 14; - optional config.utils.Prometheus prometheus = 15; - optional config.proof_data_handler.ProofDataHandler proof_data_handler = 16; - optional config.witness_generator.WitnessGenerator witness_generator = 17; - optional config.api.Api api = 18; - optional config.database.DB db = 20; - optional config.eth_client.ETHClient eth_client = 21; - optional config.eth_sender.ETHSender eth_sender = 22; - optional config.eth_watch.ETHWatch eth_watch = 23; - optional config.eth_sender.GasAdjuster gas_adjuster = 24; - optional config.object_store.ObjectStore object_store = 25; - optional consensus.Config consensus = 26; -} - -message Secrets { - optional consensus.Secrets consensus = 1; // optional + // optional config.database.Postgres postgres = 1; + // optional config.api.HealthCheck health_check = 2; + // optional config.api.MerkleTreeApi merkle_tree_api = 3; + // optional config.api.Web3JsonRpc web3_json_rpc = 4; + // optional config.chain.CircuitBreaker circuit_breaker = 5; + // optional config.chain.Mempool mempool = 6; + // optional config.chain.EthNetwork network = 7; + // optional config.chain.OperationsManager operations_manager = 8; + // optional config.chain.StateKeeper state_keeper = 9; + // optional config.house_keeper.HouseKeeper house_keeper = 10; + // optional config.fri_proof_compressor.FriProofCompressor fri_proof_compressor = 11; + // optional config.fri_prover.FriProver fri_prover = 12; + // optional config.fri_prover_group.FriProverGroup fri_prover_group = 13; + // optional config.fri_witness_generator.FriWitnessGenerator fri_witness_generator = 14; + // optional config.utils.Prometheus prometheus = 15; + // optional config.proof_data_handler.ProofDataHandler proof_data_handler = 16; + // optional config.witness_generator.WitnessGenerator witness_generator = 17; + // optional config.api.Api api = 18; + // optional config.database.DB db = 20; + // optional config.eth_client.ETHClient eth_client = 21; + // optional config.eth_sender.ETHSender eth_sender = 22; + // optional config.eth_watch.ETHWatch eth_watch = 23; + // optional config.eth_sender.GasAdjuster gas_adjuster = 24; + // optional config.object_store.ObjectStore object_store = 25; + // optional consensus.Config consensus = 26; } +// +//message Secrets { +// optional consensus.Secrets consensus = 1; // optional +//} diff --git a/core/lib/zksync_core/src/temp_config_store/mod.rs b/core/lib/zksync_core/src/temp_config_store/mod.rs index a5777467f7a..127fd326c6b 100644 --- a/core/lib/zksync_core/src/temp_config_store/mod.rs +++ b/core/lib/zksync_core/src/temp_config_store/mod.rs @@ -11,7 +11,7 @@ use zksync_config::{ FriProofCompressorConfig, FriProverConfig, FriWitnessGeneratorConfig, PrometheusConfig, ProofDataHandlerConfig, WitnessGeneratorConfig, }, - ApiConfig, DBConfig, ETHClientConfig, ETHSenderConfig, ETHWatchConfig, GasAdjusterConfig, + ApiConfig, DBConfig, ETHClientConfig, ETHConfig, ETHWatchConfig, GasAdjusterConfig, ObjectStoreConfig, PostgresConfig, }; use zksync_protobuf::{read_optional, repr::ProtoRepr, ProtoFmt}; @@ -72,7 +72,7 @@ pub struct TempConfigStore { pub api_config: Option, pub db_config: Option, pub eth_client_config: Option, - pub eth_sender_config: Option, + pub eth_sender_config: Option, pub eth_watch_config: Option, pub gas_adjuster_config: Option, pub object_store_config: Option, diff --git a/core/node/node_framework/examples/main_node.rs b/core/node/node_framework/examples/main_node.rs index e18b7088d2b..4875c923c30 100644 --- a/core/node/node_framework/examples/main_node.rs +++ b/core/node/node_framework/examples/main_node.rs @@ -11,7 +11,7 @@ use zksync_config::{ FriProofCompressorConfig, FriProverConfig, FriWitnessGeneratorConfig, ObservabilityConfig, ProofDataHandlerConfig, }, - ApiConfig, ContractsConfig, DBConfig, ETHClientConfig, ETHSenderConfig, ETHWatchConfig, + ApiConfig, ContractsConfig, DBConfig, ETHClientConfig, ETHConfig, ETHWatchConfig, GasAdjusterConfig, ObjectStoreConfig, PostgresConfig, }; use zksync_core::{ @@ -81,7 +81,7 @@ impl MainNodeBuilder { fn add_pk_signing_client_layer(mut self) -> anyhow::Result { self.node.add_layer(PKSigningEthClientLayer::new( - ETHSenderConfig::from_env()?, + ETHConfig::from_env()?, ContractsConfig::from_env()?, ETHClientConfig::from_env()?, )); @@ -98,7 +98,7 @@ impl MainNodeBuilder { fn add_sequencer_l1_gas_layer(mut self) -> anyhow::Result { let gas_adjuster_config = GasAdjusterConfig::from_env()?; let state_keeper_config = StateKeeperConfig::from_env()?; - let eth_sender_config = ETHSenderConfig::from_env()?; + let eth_sender_config = ETHConfig::from_env()?; let sequencer_l1_gas_layer = SequencerL1GasLayer::new( gas_adjuster_config, state_keeper_config, @@ -259,7 +259,7 @@ impl MainNodeBuilder { Ok(self) } fn add_eth_sender_layer(mut self) -> anyhow::Result { - let eth_sender_config = ETHSenderConfig::from_env()?; + let eth_sender_config = ETHConfig::from_env()?; let contracts_config = ContractsConfig::from_env()?; let eth_client_config = ETHClientConfig::from_env()?; let network_config = NetworkConfig::from_env()?; diff --git a/core/node/node_framework/src/implementations/layers/eth_sender.rs b/core/node/node_framework/src/implementations/layers/eth_sender.rs index f657c73bc09..2b32c160562 100644 --- a/core/node/node_framework/src/implementations/layers/eth_sender.rs +++ b/core/node/node_framework/src/implementations/layers/eth_sender.rs @@ -1,7 +1,7 @@ use std::sync::Arc; use zksync_config::configs::{ - chain::NetworkConfig, eth_sender::ETHSenderConfig, ContractsConfigReduced, ETHClientConfig, + chain::NetworkConfig, eth_sender::ETHConfig, ContractsConfigReduced, ETHClientConfig, }; use zksync_core::eth_sender::{Aggregator, EthTxAggregator, EthTxManager}; use zksync_eth_client::{clients::PKSigningClient, BoundEthInterface}; @@ -18,7 +18,7 @@ use crate::{ #[derive(Debug)] pub struct EthSenderLayer { - eth_sender_config: ETHSenderConfig, + eth_sender_config: ETHConfig, contracts_config: ContractsConfigReduced, eth_client_config: ETHClientConfig, network_config: NetworkConfig, @@ -26,7 +26,7 @@ pub struct EthSenderLayer { impl EthSenderLayer { pub fn new( - eth_sender_config: ETHSenderConfig, + eth_sender_config: ETHConfig, contracts_config: ContractsConfigReduced, eth_client_config: ETHClientConfig, network_config: NetworkConfig, diff --git a/core/node/node_framework/src/implementations/layers/pk_signing_eth_client.rs b/core/node/node_framework/src/implementations/layers/pk_signing_eth_client.rs index 1a9a70258ef..d56371f34da 100644 --- a/core/node/node_framework/src/implementations/layers/pk_signing_eth_client.rs +++ b/core/node/node_framework/src/implementations/layers/pk_signing_eth_client.rs @@ -1,6 +1,6 @@ use std::sync::Arc; -use zksync_config::{configs::ContractsConfigReduced, ETHClientConfig, ETHSenderConfig}; +use zksync_config::{configs::ContractsConfigReduced, ETHClientConfig, ETHConfig}; use zksync_eth_client::clients::PKSigningClient; use crate::{ @@ -11,14 +11,14 @@ use crate::{ #[derive(Debug)] pub struct PKSigningEthClientLayer { - eth_sender_config: ETHSenderConfig, + eth_sender_config: ETHConfig, contracts_config: ContractsConfigReduced, eth_client_config: ETHClientConfig, } impl PKSigningEthClientLayer { pub fn new( - eth_sender_config: ETHSenderConfig, + eth_sender_config: ETHConfig, contracts_config: ContractsConfigReduced, eth_client_config: ETHClientConfig, ) -> Self { diff --git a/etc/env/file_based/general.yaml b/etc/env/file_based/general.yaml index 372565d3820..2ff7c186ce0 100644 --- a/etc/env/file_based/general.yaml +++ b/etc/env/file_based/general.yaml @@ -102,6 +102,7 @@ circuit_breaker: - sync_interval_ms: 30000 - http_req_max_retry_number: 5 - http_req_retry_interval_sec: 2 + - replication_lag_limit_sec: 100 eth: - web3_url: http://127.0.0.1:8545 - sender_wait_confirmations: 1 @@ -123,14 +124,16 @@ eth: - max_acceptable_priority_fee_in_gwei: 100000000000 - proof_loading_mode: OldProofFromDb - pubdata_sending_mode: Blobs - - gas_adjuster_default_priority_fee_per_gas: 1000000000 - - gas_adjuster_max_base_fee_samples: 10000 - - gas_adjuster_pricing_formula_parameter_a: 1.5 - - gas_adjuster_pricing_formula_parameter_b: 1.0005 - - gas_adjuster_internal_l1_pricing_multiplier: 0.8 - - gas_adjuster_poll_period: 5 - - eth_watch_confirmations_for_eth_event: 0 - - eth_watch_eth_node_poll_interval: 300 + - gas_adjuster: + - default_priority_fee_per_gas: 1000000000 + - max_base_fee_samples: 10000 + - pricing_formula_parameter_a: 1.5 + - pricing_formula_parameter_b: 1.0005 + - internal_l1_pricing_multiplier: 0.8 + - poll_period: 5 + - eth_watch: + - confirmations_for_eth_event: 0 + - eth_node_poll_interval: 300 object_store: @@ -195,8 +198,6 @@ prover: - data_handler: - http_port: 3320 - proof_generation_timeout_in_secs: 18000 - - protocol_version_loading_mode: FromEnvVar - - fri_protocol_version_id: 2 - group: - GROUP_0_0_CIRCUIT_ID: 1 - GROUP_0_0_AGGREGATION_ROUND: 3 From 724174196380b78027261aa78b517ea33199d673 Mon Sep 17 00:00:00 2001 From: Danil Date: Tue, 26 Mar 2024 20:10:52 +0100 Subject: [PATCH 37/65] Intialize everythin with proper config structs Signed-off-by: Danil --- .../external_node/src/config/observability.rs | 1 + core/bin/zksync_server/src/main.rs | 95 ++++--- .../config/src/configs/contract_verifier.rs | 7 +- core/lib/config/src/configs/general.rs | 5 +- core/lib/config/src/configs/mod.rs | 2 +- core/lib/config/src/configs/wallets.rs | 4 + core/lib/env_config/src/api.rs | 2 - core/lib/env_config/src/eth_sender.rs | 11 +- core/lib/env_config/src/observability.rs | 5 + .../eth_client/src/clients/http/signing.rs | 38 ++- .../protobuf_config/src/contract_verifier.rs | 6 +- core/lib/protobuf_config/src/general.rs | 20 +- .../protobuf_config/src/proto/consensus.proto | 69 ----- .../protobuf_config/src/proto/general.proto | 1 + .../api_server/contract_verification/mod.rs | 6 +- .../zksync_core/src/api_server/web3/state.rs | 7 +- core/lib/zksync_core/src/lib.rs | 267 ++++++++++-------- .../zksync_core/src/proof_data_handler/mod.rs | 11 +- .../proof_data_handler/request_processor.rs | 48 ++-- .../lib/zksync_core/src/proto/consensus.proto | 69 +++++ core/lib/zksync_core/src/proto/mod.proto | 59 +--- core/lib/zksync_core/src/state_keeper/mod.rs | 5 +- .../zksync_core/src/temp_config_store/mod.rs | 143 +++------- .../layers/contract_verification_api.rs | 6 +- .../implementations/layers/house_keeper.rs | 15 +- 25 files changed, 422 insertions(+), 480 deletions(-) delete mode 100644 core/lib/protobuf_config/src/proto/consensus.proto diff --git a/core/bin/external_node/src/config/observability.rs b/core/bin/external_node/src/config/observability.rs index 388e75e2947..9440dfa9295 100644 --- a/core/bin/external_node/src/config/observability.rs +++ b/core/bin/external_node/src/config/observability.rs @@ -36,5 +36,6 @@ pub fn observability_config_from_env() -> anyhow::Result { sentry_environment, log_format, opentelemetry: None, + sporadic_crypto_errors_substrs: vec![], }) } diff --git a/core/bin/zksync_server/src/main.rs b/core/bin/zksync_server/src/main.rs index baa312a3fe0..f6f2451d3e3 100644 --- a/core/bin/zksync_server/src/main.rs +++ b/core/bin/zksync_server/src/main.rs @@ -11,12 +11,12 @@ use zksync_config::{ }, fri_prover_group::FriProverGroupConfig, house_keeper::HouseKeeperConfig, - ContractsConfigReduced, FriProofCompressorConfig, FriProverConfig, - FriWitnessGeneratorConfig, ObservabilityConfig, PrometheusConfig, ProofDataHandlerConfig, - WitnessGeneratorConfig, + ContractsConfigReduced, FriProofCompressorConfig, FriProverConfig, FriProverGatewayConfig, + FriWitnessGeneratorConfig, FriWitnessVectorGeneratorConfig, GeneralConfig, + ObservabilityConfig, PrometheusConfig, ProofDataHandlerConfig, WitnessGeneratorConfig, }, - ApiConfig, ContractsConfig, DBConfig, ETHClientConfig, ETHConfig, ETHWatchConfig, - GasAdjusterConfig, GenesisConfig, ObjectStoreConfig, PostgresConfig, + ApiConfig, ContractVerifierConfig, ContractsConfig, DBConfig, ETHClientConfig, ETHConfig, + ETHWatchConfig, GasAdjusterConfig, GenesisConfig, ObjectStoreConfig, PostgresConfig, }; use zksync_core::{ genesis, genesis_init, initialize_components, is_genesis_needed, setup_sigint_handler, @@ -110,39 +110,44 @@ async fn main() -> anyhow::Result<()> { // Right now, we are trying to deserialize all the configs that may be needed by `zksync_core`. // "May" is the key word here, since some configs are only used by certain component configuration, // hence we are using `Option`s. - let configs: TempConfigStore = match opt.config_path { + let (configs, wallets) = match opt.config_path { Some(path) => { - let yaml = - std::fs::read_to_string(&path).with_context(|| path.display().to_string())?; - decode_yaml(&yaml).context("failed decoding YAML config")? + todo!() + } + None => { + let config = TempConfigStore { + postgres_config: PostgresConfig::from_env().ok(), + health_check_config: HealthCheckConfig::from_env().ok(), + merkle_tree_api_config: MerkleTreeApiConfig::from_env().ok(), + web3_json_rpc_config: Web3JsonRpcConfig::from_env().ok(), + circuit_breaker_config: CircuitBreakerConfig::from_env().ok(), + mempool_config: MempoolConfig::from_env().ok(), + network_config: NetworkConfig::from_env().ok(), + contract_verifier: ContractVerifierConfig::from_env().ok(), + operations_manager_config: OperationsManagerConfig::from_env().ok(), + state_keeper_config: StateKeeperConfig::from_env().ok(), + house_keeper_config: HouseKeeperConfig::from_env().ok(), + fri_proof_compressor_config: FriProofCompressorConfig::from_env().ok(), + fri_prover_config: Some(FriProverConfig::from_env().context("fri_prover_config")?), + fri_prover_group_config: FriProverGroupConfig::from_env().ok(), + fri_prover_gateway_config: FriProverGatewayConfig::from_env().ok(), + fri_witness_vector_generator: FriWitnessVectorGeneratorConfig::from_env().ok(), + fri_witness_generator_config: FriWitnessGeneratorConfig::from_env().ok(), + prometheus_config: PrometheusConfig::from_env().ok(), + proof_data_handler_config: ProofDataHandlerConfig::from_env().ok(), + witness_generator_config: WitnessGeneratorConfig::from_env().ok(), + api_config: ApiConfig::from_env().ok(), + db_config: DBConfig::from_env().ok(), + eth_client_config: ETHClientConfig::from_env().ok(), + eth_sender_config: ETHConfig::from_env().ok(), + eth_watch_config: ETHWatchConfig::from_env().ok(), + gas_adjuster_config: GasAdjusterConfig::from_env().ok(), + object_store_config: ObjectStoreConfig::from_env().ok(), + consensus_config: config::read_consensus_config() + .context("read_consensus_config()")?, + }; + (config.general(), config.wallets()) } - None => TempConfigStore { - postgres_config: PostgresConfig::from_env().ok(), - health_check_config: HealthCheckConfig::from_env().ok(), - merkle_tree_api_config: MerkleTreeApiConfig::from_env().ok(), - web3_json_rpc_config: Web3JsonRpcConfig::from_env().ok(), - circuit_breaker_config: CircuitBreakerConfig::from_env().ok(), - mempool_config: MempoolConfig::from_env().ok(), - network_config: NetworkConfig::from_env().ok(), - operations_manager_config: OperationsManagerConfig::from_env().ok(), - state_keeper_config: StateKeeperConfig::from_env().ok(), - house_keeper_config: HouseKeeperConfig::from_env().ok(), - fri_proof_compressor_config: FriProofCompressorConfig::from_env().ok(), - fri_prover_config: Some(FriProverConfig::from_env().context("fri_prover_config")?), - fri_prover_group_config: FriProverGroupConfig::from_env().ok(), - fri_witness_generator_config: FriWitnessGeneratorConfig::from_env().ok(), - prometheus_config: PrometheusConfig::from_env().ok(), - proof_data_handler_config: ProofDataHandlerConfig::from_env().ok(), - witness_generator_config: WitnessGeneratorConfig::from_env().ok(), - api_config: ApiConfig::from_env().ok(), - db_config: DBConfig::from_env().ok(), - eth_client_config: ETHClientConfig::from_env().ok(), - eth_sender_config: ETHConfig::from_env().ok(), - eth_watch_config: ETHWatchConfig::from_env().ok(), - gas_adjuster_config: GasAdjusterConfig::from_env().ok(), - object_store_config: ObjectStoreConfig::from_env().ok(), - consensus_config: config::read_consensus_config().context("read_consensus_config()")?, - }, }; let secrets: Secrets = match opt.secrets_path { Some(path) => { @@ -169,9 +174,9 @@ async fn main() -> anyhow::Result<()> { // let contracts_config: ContractsConfigReduced = contracts_config.into(); let postgres_config = configs.postgres_config.clone().context("PostgresConfig")?; + let genesis = GenesisConfig::from_env().context("Genesis config")?; if opt.genesis || is_genesis_needed(&postgres_config).await { - let genesis = GenesisConfig::from_env().context("Genesis config")?; - genesis_init(genesis, &postgres_config) + genesis_init(genesis.clone(), &postgres_config) .await .context("genesis_init")?; if opt.genesis { @@ -201,10 +206,16 @@ async fn main() -> anyhow::Result<()> { }; // Run core actors. - let (core_task_handles, stop_sender, cb_receiver, health_check_handle) = - initialize_components(&configs, &contracts_config, &components, &secrets) - .await - .context("Unable to start Core actors")?; + let (core_task_handles, stop_sender, cb_receiver, health_check_handle) = initialize_components( + &configs, + wallets, + &genesis, + &contracts_config, + &components, + &secrets, + ) + .await + .context("Unable to start Core actors")?; tracing::info!("Running {} core task handlers", core_task_handles.len()); diff --git a/core/lib/config/src/configs/contract_verifier.rs b/core/lib/config/src/configs/contract_verifier.rs index 7b79de4a709..a7d01a087e7 100644 --- a/core/lib/config/src/configs/contract_verifier.rs +++ b/core/lib/config/src/configs/contract_verifier.rs @@ -1,4 +1,4 @@ -use std::time::Duration; +use std::{net::SocketAddr, time::Duration}; use serde::Deserialize; @@ -10,7 +10,7 @@ pub struct ContractVerifierConfig { pub polling_interval: Option, /// Port to which the Prometheus exporter server is listening. pub prometheus_port: u16, - pub port: u32, + pub port: u16, pub url: String, } @@ -22,4 +22,7 @@ impl ContractVerifierConfig { pub fn polling_interval(&self) -> Duration { Duration::from_millis(self.polling_interval.unwrap_or(1000)) } + pub fn bind_addr(&self) -> SocketAddr { + SocketAddr::new("0.0.0.0".parse().unwrap(), self.port) + } } diff --git a/core/lib/config/src/configs/general.rs b/core/lib/config/src/configs/general.rs index b9b63b8a7db..f50d0eb1bdb 100644 --- a/core/lib/config/src/configs/general.rs +++ b/core/lib/config/src/configs/general.rs @@ -7,13 +7,14 @@ use crate::{ FriWitnessGeneratorConfig, FriWitnessVectorGeneratorConfig, PrometheusConfig, ProofDataHandlerConfig, }, - ApiConfig, DBConfig, ETHConfig, PostgresConfig, + ApiConfig, ContractVerifierConfig, DBConfig, ETHConfig, PostgresConfig, }; #[derive(Debug, PartialEq)] -pub struct General { +pub struct GeneralConfig { pub postgres_config: Option, pub api_config: Option, + pub contract_verifier: Option, pub circuit_breaker_config: Option, pub mempool_config: Option, pub operations_manager_config: Option, diff --git a/core/lib/config/src/configs/mod.rs b/core/lib/config/src/configs/mod.rs index 0a368a02643..a5a3083935a 100644 --- a/core/lib/config/src/configs/mod.rs +++ b/core/lib/config/src/configs/mod.rs @@ -13,7 +13,7 @@ pub use self::{ fri_prover_gateway::FriProverGatewayConfig, fri_witness_generator::FriWitnessGeneratorConfig, fri_witness_vector_generator::FriWitnessVectorGeneratorConfig, - general::General, + general::GeneralConfig, genesis::GenesisConfig, object_store::ObjectStoreConfig, observability::{ObservabilityConfig, OpentelemetryConfig}, diff --git a/core/lib/config/src/configs/wallets.rs b/core/lib/config/src/configs/wallets.rs index 8d24a59d3ee..ec7cb9c4fd0 100644 --- a/core/lib/config/src/configs/wallets.rs +++ b/core/lib/config/src/configs/wallets.rs @@ -1,5 +1,6 @@ use zksync_basic_types::{Address, H256}; +#[derive(Debug, Clone)] pub struct Wallet { address: Address, private_key: Option, @@ -32,15 +33,18 @@ impl Wallet { } } +#[derive(Debug, Clone)] pub struct EthSender { pub operator: Wallet, pub blob_operator: Wallet, } +#[derive(Debug, Clone)] pub struct StateKeeper { pub fee_account: Wallet, } +#[derive(Debug, Clone)] pub struct Wallets { pub eth_sender: Option, pub state_keeper: Option, diff --git a/core/lib/env_config/src/api.rs b/core/lib/env_config/src/api.rs index cfe46d2e0e8..570b5a13af3 100644 --- a/core/lib/env_config/src/api.rs +++ b/core/lib/env_config/src/api.rs @@ -12,8 +12,6 @@ impl FromEnv for ApiConfig { fn from_env() -> anyhow::Result { Ok(Self { web3_json_rpc: Web3JsonRpcConfig::from_env().context("Web3JsonRpcConfig")?, - contract_verification: ContractVerificationApiConfig::from_env() - .context("ContractVerificationApiConfig")?, prometheus: PrometheusConfig::from_env().context("PrometheusConfig")?, healthcheck: HealthCheckConfig::from_env().context("HealthCheckConfig")?, merkle_tree: MerkleTreeApiConfig::from_env().context("MerkleTreeApiConfig")?, diff --git a/core/lib/env_config/src/eth_sender.rs b/core/lib/env_config/src/eth_sender.rs index 7099a4beba2..2f788765e7a 100644 --- a/core/lib/env_config/src/eth_sender.rs +++ b/core/lib/env_config/src/eth_sender.rs @@ -1,5 +1,7 @@ use anyhow::Context as _; -use zksync_config::{configs::eth_sender::SenderConfig, ETHConfig, GasAdjusterConfig}; +use zksync_config::{ + configs::eth_sender::SenderConfig, ETHConfig, ETHWatchConfig, GasAdjusterConfig, +}; use crate::{envy_load, FromEnv}; @@ -8,6 +10,8 @@ impl FromEnv for ETHConfig { Ok(Self { sender: SenderConfig::from_env().context("SenderConfig")?, gas_adjuster: GasAdjusterConfig::from_env().context("GasAdjusterConfig")?, + watcher: ETHWatchConfig::from_env().context("ETHWatchConfig")?, + web3_url: std::env::var("ETH_CLIENT_WEB3_URL").context("ETH_CLIENT_WEB3_URL")?, }) } } @@ -71,6 +75,11 @@ mod tests { internal_pubdata_pricing_multiplier: 1.0, max_blob_base_fee: None, }, + watcher: ETHWatchConfig { + confirmations_for_eth_event: None, + eth_node_poll_interval: 0, + }, + web3_url: "".to_string(), } } diff --git a/core/lib/env_config/src/observability.rs b/core/lib/env_config/src/observability.rs index 48b9c40b96f..213de017ffc 100644 --- a/core/lib/env_config/src/observability.rs +++ b/core/lib/env_config/src/observability.rs @@ -39,12 +39,17 @@ impl FromEnv for ObservabilityConfig { (Some(level), Some(endpoint)) => Some(OpentelemetryConfig { level, endpoint }), _ => None, }; + let sporadic_crypto_errors_substrs = std::env::var("ALERTS_SPORADIC_CRYPTO_ERRORS_SUBSTRS") + .ok() + .map(|a| a.split(",").map(|a| a.to_string()).collect()) + .unwrap_or_default(); Ok(ObservabilityConfig { sentry_url, sentry_environment, log_format, opentelemetry, + sporadic_crypto_errors_substrs, }) } } diff --git a/core/lib/eth_client/src/clients/http/signing.rs b/core/lib/eth_client/src/clients/http/signing.rs index 89ea1828dd1..e048c4e7bb5 100644 --- a/core/lib/eth_client/src/clients/http/signing.rs +++ b/core/lib/eth_client/src/clients/http/signing.rs @@ -67,6 +67,30 @@ impl PKSigningClient { )) } + pub fn new_raw( + operator_private_key: H256, + diamond_proxy_addr: Address, + default_priority_fee_per_gas: u64, + l1_chain_id: L1ChainId, + web3_url: &str, + ) -> Self { + let transport = Http::new(web3_url).expect("Failed to create transport"); + let operator_address = PackedEthSignature::address_from_private_key(&operator_private_key) + .expect("Failed to get address from private key"); + + let signer = PrivateKeySigner::new(operator_private_key); + tracing::info!("Operator address: {:?}", operator_address); + SigningClient::new( + transport, + zksync_contract(), + operator_address, + signer, + diamond_proxy_addr, + default_priority_fee_per_gas.into(), + l1_chain_id, + ) + } + fn from_config_inner( eth_sender: ÐConfig, contracts_config: &ContractsConfigReduced, @@ -78,20 +102,12 @@ impl PKSigningClient { let default_priority_fee_per_gas = eth_sender.gas_adjuster.default_priority_fee_per_gas; let l1_chain_id = eth_client.chain_id; - let transport = Http::new(main_node_url).expect("Failed to create transport"); - let operator_address = PackedEthSignature::address_from_private_key(&operator_private_key) - .expect("Failed to get address from private key"); - - tracing::info!("Operator address: {:?}", operator_address); - - SigningClient::new( - transport, - zksync_contract(), - operator_address, - PrivateKeySigner::new(operator_private_key), + SigningClient::new_raw( + operator_private_key, diamond_proxy_addr, default_priority_fee_per_gas.into(), L1ChainId(l1_chain_id), + main_node_url, ) } } diff --git a/core/lib/protobuf_config/src/contract_verifier.rs b/core/lib/protobuf_config/src/contract_verifier.rs index cc55beaa643..96d937bb144 100644 --- a/core/lib/protobuf_config/src/contract_verifier.rs +++ b/core/lib/protobuf_config/src/contract_verifier.rs @@ -15,13 +15,15 @@ impl ProtoRepr for proto::ContractVerifier { .and_then(|x| Ok((*x).try_into()?)) .context("prometheus_port")?, url: required(&self.url).cloned().context("url")?, - port: *required(&self.port).context("port")?, + port: required(&self.port) + .and_then(|x| Ok(*x as u16)) + .context("port")?, }) } fn build(this: &Self::Type) -> Self { Self { - port: Some(this.port), + port: Some(this.port as u32), url: Some(this.url.clone()), compilation_timeout: Some(this.compilation_timeout), polling_interval: this.polling_interval, diff --git a/core/lib/protobuf_config/src/general.rs b/core/lib/protobuf_config/src/general.rs index 2860090e38e..41b8eea30c3 100644 --- a/core/lib/protobuf_config/src/general.rs +++ b/core/lib/protobuf_config/src/general.rs @@ -1,25 +1,16 @@ -use crate::proto::general as proto; use anyhow::Context as _; +use zksync_config::configs::GeneralConfig; +use zksync_protobuf::ProtoRepr; -use crate::read_optional_repr; -use zksync_config::configs::chain::{ - CircuitBreakerConfig, MempoolConfig, OperationsManagerConfig, StateKeeperConfig, -}; -use zksync_config::configs::fri_prover_group::FriProverGroupConfig; -use zksync_config::configs::house_keeper::HouseKeeperConfig; -use zksync_config::configs::{ - FriProofCompressorConfig, FriProverConfig, FriProverGatewayConfig, FriWitnessGeneratorConfig, - FriWitnessVectorGeneratorConfig, General, PrometheusConfig, ProofDataHandlerConfig, -}; -use zksync_config::{ApiConfig, DBConfig, ETHConfig, PostgresConfig}; -use zksync_protobuf::{ProtoFmt, ProtoRepr}; +use crate::{proto::general as proto, read_optional_repr}; impl ProtoRepr for proto::GeneralConfig { - type Type = General; + type Type = GeneralConfig; fn read(&self) -> anyhow::Result { Ok(Self::Type { postgres_config: read_optional_repr(&self.postgres).context("postgres")?, + contract_verifier: read_optional_repr(&self.contract_verifier).context("postgres")?, circuit_breaker_config: read_optional_repr(&self.circuit_breaker) .context("circuit_breaker")?, mempool_config: read_optional_repr(&self.mempool).context("mempool")?, @@ -51,6 +42,7 @@ impl ProtoRepr for proto::GeneralConfig { postgres: this.postgres_config.as_ref().map(ProtoRepr::build), circuit_breaker: this.circuit_breaker_config.as_ref().map(ProtoRepr::build), mempool: this.mempool_config.as_ref().map(ProtoRepr::build), + contract_verifier: this.contract_verifier.as_ref().map(ProtoRepr::build), operations_manager: this .operations_manager_config .as_ref() diff --git a/core/lib/protobuf_config/src/proto/consensus.proto b/core/lib/protobuf_config/src/proto/consensus.proto deleted file mode 100644 index acccd146f8f..00000000000 --- a/core/lib/protobuf_config/src/proto/consensus.proto +++ /dev/null @@ -1,69 +0,0 @@ -// For config readability and ease of use, some of the primitive types are -// encoded as strings. Fields of these types have a comment with the name of the type. -// Here is the list of string-encoded types and their corresponding string formats: -// -// IpAddr - TCP socket address, encoded as a string of the form "IP:port". -// Both IPv4 and IPv6 are supported -// (note that opening IPv6 ports may not work depending on the VM capabilities). -// examples: "203.0.113.7:3456", "[2001:DB8::1]:4567" -// -// ValidatorPublicKey - public key of the validator (consensus participant) of the form "validator:public::" -// Currently only bn254 signature scheme is supported for validators. -// example: "validator:public:bn254:4b0c4697f0a35eab30f63684ae4611f3c1d631eecfd97237e2345a9b3d0c472dbb16c49b793beceaab0cdd89cda6ff1099bd1aaf1ad6cabde9a15793cc09b407" -// -// NodePublicKey - public key of the node (gossip network participant) of the form "node:public::" -// Currently only ed25519 signature scheme is supported for nodes. -// example: "node:public:ed25519:d36607699a0a3fbe3de16947928cf299484219ff62ca20f387795b0859dbe501" -// -// ValidatorSecretKey - secret key of the validator (consensus participant) of the form "validator:secret::" -// Currently only bn254 signature scheme is supported for validators. -// example: "validator:secret:bn254:1aaa9c2c5a4f0f75b79127a7207348e33df55869d79622eccf65c91c98861257" -// -// NodeSecretKey - secret key of the node (gossip network participant) of the form "node:secret::" -// Currently only ed25519 signature scheme is supported for nodes. -// example: "node:secret:ed25519:4f761350f4b038f8052d17f0a02e18782be66f16d407e7a073c925d52dcc8f02" - -syntax = "proto3"; - -package zksync.config.consensus; - -// (public key, ip address) of a gossip network node. -message NodeAddr { - optional string key = 1; // required; NodePublicKey - optional string addr = 2; // required; IpAddr -} - -message Config { - // IP:port to listen on, for incoming TCP connections. - // Use `0.0.0.0:` to listen on all network interfaces (i.e. on all IPs exposed by this VM). - optional string server_addr = 1; // required; IpAddr - - // Public IP:port to advertise, should forward to server_addr. - // Can be `127.0.0.1:` for local tests. - optional string public_addr = 2; // required; IpAddr - - // Public keys of all validators. - // Currently it has to be a singleton with a public key corresponding to secret key in CONSENSUS_VALIDATOR_KEY env var. - repeated string validators = 3; // required; ValidatorPublicKey - - // Maximal allowed size of the payload. - optional uint64 max_payload_size = 4; // required; bytes - - // Inbound connections that should be unconditionally accepted on the gossip network. - repeated string gossip_static_inbound = 5; // required; NodePublicKey - - // Limit on the number of gossip network inbound connections outside - // of the `gossip_static_inbound` set. - optional uint64 gossip_dynamic_inbound_limit = 6; // required - - // Outbound gossip network connections that the node should actively try to - // establish and maintain. - repeated NodeAddr gossip_static_outbound = 7; -} - -message Secrets { - optional string validator_key = 1; // required for validator nodes; ValidatorSecretKey - optional string node_key = 2; // required for any node; NodeSecretKey -} - - diff --git a/core/lib/protobuf_config/src/proto/general.proto b/core/lib/protobuf_config/src/proto/general.proto index 5c766244518..1fcc00e15b2 100644 --- a/core/lib/protobuf_config/src/proto/general.proto +++ b/core/lib/protobuf_config/src/proto/general.proto @@ -17,6 +17,7 @@ import "zksync/config/utils.proto"; message GeneralConfig { optional config.database.Postgres postgres = 1; optional config.api.Api api = 2; + optional config.contract_verifier.ContractVerifier contract_verifier = 3; optional config.circuit_breaker.CircuitBreaker circuit_breaker = 5; optional config.chain.Mempool mempool = 6; optional config.chain.OperationsManager operations_manager = 8; diff --git a/core/lib/zksync_core/src/api_server/contract_verification/mod.rs b/core/lib/zksync_core/src/api_server/contract_verification/mod.rs index e1aec3752af..45b1a0a596d 100644 --- a/core/lib/zksync_core/src/api_server/contract_verification/mod.rs +++ b/core/lib/zksync_core/src/api_server/contract_verification/mod.rs @@ -1,6 +1,6 @@ use anyhow::Context as _; use tokio::sync::watch; -use zksync_config::configs::api::ContractVerificationApiConfig; +use zksync_config::{configs::api::ContractVerificationApiConfig, ContractVerifierConfig}; use zksync_dal::ConnectionPool; use self::api_decl::RestApi; @@ -12,10 +12,10 @@ mod metrics; pub async fn start_server( master_connection_pool: ConnectionPool, replica_connection_pool: ConnectionPool, - api_config: ContractVerificationApiConfig, + config: ContractVerifierConfig, mut stop_receiver: watch::Receiver, ) -> anyhow::Result<()> { - let bind_address = api_config.bind_addr(); + let bind_address = config.bind_addr(); let api = RestApi::new(master_connection_pool, replica_connection_pool).into_router(); axum::Server::bind(&bind_address) diff --git a/core/lib/zksync_core/src/api_server/web3/state.rs b/core/lib/zksync_core/src/api_server/web3/state.rs index 4672db7940f..ba4a09e9e3b 100644 --- a/core/lib/zksync_core/src/api_server/web3/state.rs +++ b/core/lib/zksync_core/src/api_server/web3/state.rs @@ -100,13 +100,14 @@ pub struct InternalApiConfig { impl InternalApiConfig { pub fn new( - eth_config: &NetworkConfig, + l1_chain_id: L1ChainId, + l2_chain_id: L2ChainId, web3_config: &Web3JsonRpcConfig, contracts_config: &ContractsConfigReduced, ) -> Self { Self { - l1_chain_id: eth_config.network.chain_id(), - l2_chain_id: eth_config.zksync_network_id, + l1_chain_id, + l2_chain_id, max_tx_size: web3_config.max_tx_size, estimate_gas_scale_factor: web3_config.estimate_gas_scale_factor, estimate_gas_acceptable_overestimation: web3_config diff --git a/core/lib/zksync_core/src/lib.rs b/core/lib/zksync_core/src/lib.rs index b2f2384cd91..2306f3bb723 100644 --- a/core/lib/zksync_core/src/lib.rs +++ b/core/lib/zksync_core/src/lib.rs @@ -10,6 +10,7 @@ use std::{ use anyhow::Context as _; use api_server::tx_sender::master_pool_sink::MasterPoolSink; use fee_model::{ApiFeeInputProvider, BatchFeeModelInputProvider, MainNodeFeeInputProvider}; +use multivm::zk_evm_latest::ethereum_types::H256; use prometheus_exporter::PrometheusExporterConfig; use prover_dal::Prover; use temp_config_store::{Secrets, TempConfigStore}; @@ -30,7 +31,8 @@ use zksync_config::{ StateKeeperConfig, }, database::{MerkleTreeConfig, MerkleTreeMode}, - ContractsConfigReduced, + wallets::Wallets, + ContractsConfigReduced, GeneralConfig, }, ApiConfig, DBConfig, GenesisConfig, PostgresConfig, }; @@ -45,7 +47,7 @@ use zksync_health_check::{AppHealthCheck, HealthStatus, ReactiveHealthCheck}; use zksync_object_store::{ObjectStore, ObjectStoreFactory}; use zksync_queued_job_processor::JobProcessor; use zksync_state::PostgresStorageCaches; -use zksync_types::{fee_model::FeeModelConfig, L2ChainId}; +use zksync_types::{fee_model::FeeModelConfig, Address, L1ChainId, L2ChainId, PackedEthSignature}; use crate::{ api_server::{ @@ -222,7 +224,9 @@ impl FromStr for Components { } pub async fn initialize_components( - configs: &TempConfigStore, + configs: &GeneralConfig, + wallets: Option, + genesis_config: &GenesisConfig, contracts_config: &ContractsConfigReduced, components: &[Component], secrets: &Secrets, @@ -233,7 +237,7 @@ pub async fn initialize_components( HealthCheckHandle, )> { tracing::info!("Starting the components: {components:?}"); - + let l2_chain_id = genesis_config.l2_chain_id; let db_config = configs.db_config.clone().context("db_config")?; let postgres_config = configs.postgres_config.clone().context("postgres_config")?; @@ -265,18 +269,17 @@ pub async fn initialize_components( .context("failed to build replica_connection_pool")?; let health_check_config = configs - .health_check_config + .api_config .clone() - .context("health_check_config")?; + .context("api_config")? + .healthcheck; + let app_health = Arc::new(AppHealthCheck::new( health_check_config.slow_time_limit(), health_check_config.hard_time_limit(), )); - let eth_client_config = configs - .eth_client_config - .clone() - .context("eth_client_config")?; + let eth = configs.eth.clone().context("eth")?; let circuit_breaker_config = configs .circuit_breaker_config .clone() @@ -292,17 +295,13 @@ pub async fn initialize_components( panic!("Circuit breaker triggered: {}", err); }); - let query_client = QueryClient::new(ð_client_config.web3_url).unwrap(); - let gas_adjuster_config = configs.gas_adjuster_config.context("gas_adjuster_config")?; + let query_client = QueryClient::new(ð.web3_url).unwrap(); + let gas_adjuster_config = eth.gas_adjuster; - let eth_sender_config = configs - .eth_sender_config - .clone() - .context("eth_sender_config")?; let mut gas_adjuster = GasAdjusterSingleton::new( - eth_client_config.web3_url.clone(), + eth.web3_url.clone(), gas_adjuster_config, - eth_sender_config.sender.pubdata_sending_mode, + eth.sender.pubdata_sending_mode, ); let (stop_sender, stop_receiver) = watch::channel(false); @@ -339,14 +338,11 @@ pub async fn initialize_components( .state_keeper_config .clone() .context("state_keeper_config")?; - let network_config = configs.network_config.clone().context("network_config")?; - let tx_sender_config = TxSenderConfig::new( - &state_keeper_config, - &api_config.web3_json_rpc, - network_config.zksync_network_id, - ); + let tx_sender_config = + TxSenderConfig::new(&state_keeper_config, &api_config.web3_json_rpc, l2_chain_id); let internal_api_config = InternalApiConfig::new( - &network_config, + genesis_config.l1_chain_id, + genesis_config.l2_chain_id, &api_config.web3_json_rpc, &contracts_config, ); @@ -360,7 +356,7 @@ pub async fn initialize_components( if components.contains(&Component::HttpApi) { storage_caches = Some( build_storage_caches( - configs, + &configs.api_config.clone().context("api")?.web3_json_rpc, &replica_connection_pool, &mut task_futures, stop_receiver.clone(), @@ -408,7 +404,7 @@ pub async fn initialize_components( let storage_caches = match storage_caches { Some(storage_caches) => storage_caches, None => build_storage_caches( - configs, + &configs.api_config.clone().context("api")?.web3_json_rpc, &replica_connection_pool, &mut task_futures, stop_receiver.clone(), @@ -457,7 +453,11 @@ pub async fn initialize_components( task_futures.push(tokio::spawn(contract_verification::start_server( connection_pool.clone(), replica_connection_pool.clone(), - api_config.contract_verification.clone(), + configs + .contract_verifier + .clone() + .context("Contract verifier")? + .clone(), stop_receiver.clone(), ))); let elapsed = started_at.elapsed(); @@ -467,7 +467,10 @@ pub async fn initialize_components( } let object_store_config = configs - .object_store_config + .prover_config + .clone() + .context("Prover")? + .object_store .clone() .context("object_store_config")?; let store_factory = ObjectStoreFactory::new(object_store_config); @@ -492,7 +495,7 @@ pub async fn initialize_components( &postgres_config, &contracts_config, state_keeper_config, - &configs.network_config.clone().context("network_config")?, + l2_chain_id, &db_config, &configs.mempool_config.clone().context("mempool_config")?, batch_fee_input_provider, @@ -508,42 +511,43 @@ pub async fn initialize_components( } if components.contains(&Component::Consensus) { - let cfg = configs - .consensus_config - .as_ref() - .context("consensus component's config is missing")? - .main_node( - secrets - .consensus - .as_ref() - .context("consensus secrets are missing")?, - )?; - let started_at = Instant::now(); - tracing::info!("initializing Consensus"); - let pool = connection_pool.clone(); - let mut stop_receiver = stop_receiver.clone(); - task_futures.push(tokio::spawn(async move { - scope::run!(&ctx::root(), |ctx, s| async { - s.spawn_bg(async { - // Consensus is a new component. - // For now in case of error we just log it and allow the server - // to continue running. - if let Err(err) = cfg.run(ctx, consensus::Store(pool)).await { - tracing::error!(%err, "Consensus actor failed"); - } else { - tracing::info!("Consensus actor stopped"); - } - Ok(()) - }); - let _ = stop_receiver.wait_for(|stop| *stop).await?; - Ok(()) - }) - .await - })); - - let elapsed = started_at.elapsed(); - APP_METRICS.init_latency[&InitStage::Consensus].set(elapsed); - tracing::info!("initialized Consensus in {elapsed:?}"); + todo!() + // let cfg = configs + // .consensus_config + // .as_ref() + // .context("consensus component's config is missing")? + // .main_node( + // secrets + // .consensus + // .as_ref() + // .context("consensus secrets are missing")?, + // )?; + // let started_at = Instant::now(); + // tracing::info!("initializing Consensus"); + // let pool = connection_pool.clone(); + // let mut stop_receiver = stop_receiver.clone(); + // task_futures.push(tokio::spawn(async move { + // scope::run!(&ctx::root(), |ctx, s| async { + // s.spawn_bg(async { + // // Consensus is a new component. + // // For now in case of error we just log it and allow the server + // // to continue running. + // if let Err(err) = cfg.run(ctx, consensus::Store(pool)).await { + // tracing::error!(%err, "Consensus actor failed"); + // } else { + // tracing::info!("Consensus actor stopped"); + // } + // Ok(()) + // }); + // let _ = stop_receiver.wait_for(|stop| *stop).await?; + // Ok(()) + // }) + // .await + // })); + // + // let elapsed = started_at.elapsed(); + // APP_METRICS.init_latency[&InitStage::Consensus].set(elapsed); + // tracing::info!("initialized Consensus in {elapsed:?}"); } let main_zksync_contract_address = contracts_config.diamond_proxy_addr; @@ -556,10 +560,7 @@ pub async fn initialize_components( .await .context("failed to build eth_watch_pool")?; let governance = (governance_contract(), contracts_config.governance_addr); - let eth_watch_config = configs - .eth_watch_config - .clone() - .context("eth_watch_config")?; + let eth_watch_config = configs.eth.clone().context("eth_watch_config")?.watcher; task_futures.push( start_eth_watch( eth_watch_config, @@ -585,15 +586,31 @@ pub async fn initialize_components( .await .context("failed to build eth_sender_pool")?; - let eth_sender = configs - .eth_sender_config + let eth_sender = configs.eth.clone().context("eth_sender_config")?; + let eth_sender_wallets = wallets + .clone() + .context("wallets")? + .eth_sender .clone() - .context("eth_sender_config")?; - let eth_client = - PKSigningClient::from_config(ð_sender, &contracts_config, ð_client_config); - let eth_client_blobs_addr = - PKSigningClient::from_config_blobs(ð_sender, &contracts_config, ð_client_config) - .map(|k| k.sender_account()); + .context("eth_sender")?; + let operator_private_key = eth_sender_wallets + .operator + .private_key() + .context("Private_key")?; + let diamond_proxy_addr = contracts_config.diamond_proxy_addr; + let default_priority_fee_per_gas = eth.gas_adjuster.default_priority_fee_per_gas; + let l1_chain_id = genesis_config.l1_chain_id; + let web3_url = ð.web3_url; + + let eth_client = PKSigningClient::new_raw( + operator_private_key, + diamond_proxy_addr, + default_priority_fee_per_gas, + l1_chain_id, + web3_url, + ); + + let operator_blobs_address = Some(eth_sender_wallets.blob_operator.address()); let eth_tx_aggregator_actor = EthTxAggregator::new( eth_sender_pool, @@ -601,19 +618,15 @@ pub async fn initialize_components( Aggregator::new( eth_sender.sender.clone(), store_factory.create_store().await, - eth_client_blobs_addr.is_some(), + operator_blobs_address.is_some(), eth_sender.sender.pubdata_sending_mode.into(), ), Arc::new(eth_client), contracts_config.validator_timelock_addr, contracts_config.l1_multicall3_addr, main_zksync_contract_address, - configs - .network_config - .as_ref() - .context("network_config")? - .zksync_network_id, - eth_client_blobs_addr, + l2_chain_id, + operator_blobs_address, ) .await; task_futures.push(tokio::spawn( @@ -631,14 +644,42 @@ pub async fn initialize_components( .build() .await .context("failed to build eth_manager_pool")?; - let eth_sender = configs - .eth_sender_config + let eth_sender = configs.eth.clone().context("eth_sender_config")?; + let eth_sender_wallets = wallets + .context("wallets")? .clone() - .context("eth_sender_config")?; - let eth_client = - PKSigningClient::from_config(ð_sender, &contracts_config, ð_client_config); - let eth_client_blobs = - PKSigningClient::from_config_blobs(ð_sender, &contracts_config, ð_client_config); + .eth_sender + .context("eth_sender")?; + let operator_private_key = eth_sender_wallets + .operator + .private_key() + .context("Private_key")?; + let diamond_proxy_addr = contracts_config.diamond_proxy_addr; + let default_priority_fee_per_gas = eth.gas_adjuster.default_priority_fee_per_gas; + let l1_chain_id = genesis_config.l1_chain_id; + let web3_url = ð.web3_url; + + let eth_client = PKSigningClient::new_raw( + operator_private_key, + diamond_proxy_addr, + default_priority_fee_per_gas, + l1_chain_id, + web3_url, + ); + + let operator_blob_private_key = eth_sender_wallets + .blob_operator + .private_key() + .context("Private_key")?; + + let eth_client_blobs = Some(PKSigningClient::new_raw( + operator_blob_private_key, + diamond_proxy_addr, + default_priority_fee_per_gas, + l1_chain_id, + &web3_url, + )); + let eth_tx_manager_actor = EthTxManager::new( eth_manager_pool, eth_sender.sender, @@ -674,12 +715,11 @@ pub async fn initialize_components( .build() .await .context("failed to build singleton connection_pool")?; - let network_config = configs.network_config.clone().context("network_config")?; add_basic_witness_input_producer_to_task_futures( &mut task_futures, &singleton_connection_pool, &store_factory, - network_config.zksync_network_id, + l2_chain_id, stop_receiver.clone(), ) .await @@ -740,7 +780,7 @@ async fn add_state_keeper_to_task_futures( postgres_config: &PostgresConfig, contracts_config: &ContractsConfigReduced, state_keeper_config: StateKeeperConfig, - network_config: &NetworkConfig, + l2chain_id: L2ChainId, db_config: &DBConfig, mempool_config: &MempoolConfig, batch_fee_input_provider: Arc, @@ -776,7 +816,7 @@ async fn add_state_keeper_to_task_futures( contracts_config, state_keeper_config, db_config, - network_config, + l2chain_id, mempool_config, state_keeper_pool.clone(), mempool.clone(), @@ -808,7 +848,7 @@ async fn add_state_keeper_to_task_futures( } async fn add_trees_to_task_futures( - configs: &TempConfigStore, + configs: &GeneralConfig, task_futures: &mut Vec>>, app_health: &AppHealthCheck, components: &[Component], @@ -935,7 +975,7 @@ async fn add_basic_witness_input_producer_to_task_futures( } async fn add_house_keeper_to_task_futures( - configs: &TempConfigStore, + configs: &GeneralConfig, task_futures: &mut Vec>>, stop_receiver: watch::Receiver, ) -> anyhow::Result<()> { @@ -982,41 +1022,38 @@ async fn add_house_keeper_to_task_futures( task_futures.push(tokio::spawn(task)); // All FRI Prover related components are configured below. - let fri_prover_config = configs - .fri_prover_config - .clone() - .context("fri_prover_config")?; + let fri_prover_config = configs.prover_config.clone().context("fri_prover_config")?; let fri_prover_job_retry_manager = FriProverJobRetryManager::new( fri_prover_config.max_attempts, fri_prover_config.proof_generation_timeout(), - house_keeper_config.fri_prover_job_retrying_interval_ms, + house_keeper_config.prover_job_retrying_interval_ms, prover_connection_pool.clone(), ); let task = fri_prover_job_retry_manager.run(stop_receiver.clone()); task_futures.push(tokio::spawn(task)); let fri_witness_gen_config = configs - .fri_witness_generator_config + .witness_generator .clone() .context("fri_witness_generator_config")?; let fri_witness_gen_job_retry_manager = FriWitnessGeneratorJobRetryManager::new( fri_witness_gen_config.max_attempts, fri_witness_gen_config.witness_generation_timeout(), - house_keeper_config.fri_witness_generator_job_retrying_interval_ms, + house_keeper_config.witness_generator_job_retrying_interval_ms, prover_connection_pool.clone(), ); let task = fri_witness_gen_job_retry_manager.run(stop_receiver.clone()); task_futures.push(tokio::spawn(task)); let waiting_to_queued_fri_witness_job_mover = WaitingToQueuedFriWitnessJobMover::new( - house_keeper_config.fri_witness_job_moving_interval_ms, + house_keeper_config.witness_job_moving_interval_ms, prover_connection_pool.clone(), ); let task = waiting_to_queued_fri_witness_job_mover.run(stop_receiver.clone()); task_futures.push(tokio::spawn(task)); let scheduler_circuit_queuer = SchedulerCircuitQueuer::new( - house_keeper_config.fri_witness_job_moving_interval_ms, + house_keeper_config.witness_job_moving_interval_ms, prover_connection_pool.clone(), ); let task = scheduler_circuit_queuer.run(stop_receiver.clone()); @@ -1030,11 +1067,11 @@ async fn add_house_keeper_to_task_futures( task_futures.push(tokio::spawn(task)); let fri_prover_group_config = configs - .fri_prover_group_config + .prover_group_config .clone() .context("fri_prover_group_config")?; let fri_prover_stats_reporter = FriProverStatsReporter::new( - house_keeper_config.fri_prover_stats_reporting_interval_ms, + house_keeper_config.prover_stats_reporting_interval_ms, prover_connection_pool.clone(), connection_pool.clone(), fri_prover_group_config, @@ -1043,11 +1080,11 @@ async fn add_house_keeper_to_task_futures( task_futures.push(tokio::spawn(task)); let proof_compressor_config = configs - .fri_proof_compressor_config + .proof_compressor_config .clone() .context("fri_proof_compressor_config")?; let fri_proof_compressor_stats_reporter = FriProofCompressorStatsReporter::new( - house_keeper_config.fri_proof_compressor_stats_reporting_interval_ms, + house_keeper_config.proof_compressor_stats_reporting_interval_ms, prover_connection_pool.clone(), ); let task = fri_proof_compressor_stats_reporter.run(stop_receiver.clone()); @@ -1056,7 +1093,7 @@ async fn add_house_keeper_to_task_futures( let fri_proof_compressor_retry_manager = FriProofCompressorJobRetryManager::new( proof_compressor_config.max_attempts, proof_compressor_config.generation_timeout(), - house_keeper_config.fri_proof_compressor_job_retrying_interval_ms, + house_keeper_config.proof_compressor_job_retrying_interval_ms, prover_connection_pool.clone(), ); let task = fri_proof_compressor_retry_manager.run(stop_receiver); @@ -1065,15 +1102,11 @@ async fn add_house_keeper_to_task_futures( } fn build_storage_caches( - configs: &TempConfigStore, + rpc_config: &Web3JsonRpcConfig, replica_connection_pool: &ConnectionPool, task_futures: &mut Vec>>, stop_receiver: watch::Receiver, ) -> anyhow::Result { - let rpc_config = configs - .web3_json_rpc_config - .clone() - .context("web3_json_rpc_config")?; let factory_deps_capacity = rpc_config.factory_deps_cache_size() as u64; let initial_writes_capacity = rpc_config.initial_writes_cache_size() as u64; let values_capacity = rpc_config.latest_values_cache_size() as u64; diff --git a/core/lib/zksync_core/src/proof_data_handler/mod.rs b/core/lib/zksync_core/src/proof_data_handler/mod.rs index 8e48a250122..4e58a1e8b2b 100644 --- a/core/lib/zksync_core/src/proof_data_handler/mod.rs +++ b/core/lib/zksync_core/src/proof_data_handler/mod.rs @@ -3,9 +3,7 @@ use std::{net::SocketAddr, sync::Arc}; use anyhow::Context as _; use axum::{extract::Path, routing::post, Json, Router}; use tokio::sync::watch; -use zksync_config::configs::{ - proof_data_handler::ProtocolVersionLoadingMode, ProofDataHandlerConfig, -}; +use zksync_config::configs::ProofDataHandlerConfig; use zksync_dal::{ConnectionPool, Core}; use zksync_object_store::ObjectStore; use zksync_prover_interface::api::{ProofGenerationDataRequest, SubmitProofRequest}; @@ -23,12 +21,7 @@ pub async fn run_server( ) -> anyhow::Result<()> { let bind_address = SocketAddr::from(([0, 0, 0, 0], config.http_port)); tracing::debug!("Starting proof data handler server on {bind_address}"); - let l1_verifier_config: Option = match config.protocol_version_loading_mode { - ProtocolVersionLoadingMode::FromDb => None, - ProtocolVersionLoadingMode::FromEnvVar => panic!("From Env var is deprecated"), - }; - let get_proof_gen_processor = - RequestProcessor::new(blob_store, pool, config, l1_verifier_config); + let get_proof_gen_processor = RequestProcessor::new(blob_store, pool, config); let submit_proof_processor = get_proof_gen_processor.clone(); let app = Router::new() .route( diff --git a/core/lib/zksync_core/src/proof_data_handler/request_processor.rs b/core/lib/zksync_core/src/proof_data_handler/request_processor.rs index 3cae0c7428d..e89fbdf8ce4 100644 --- a/core/lib/zksync_core/src/proof_data_handler/request_processor.rs +++ b/core/lib/zksync_core/src/proof_data_handler/request_processor.rs @@ -1,4 +1,4 @@ -use std::{convert::TryFrom, sync::Arc}; +use std::sync::Arc; use axum::{ extract::Path, @@ -6,9 +6,7 @@ use axum::{ response::{IntoResponse, Response}, Json, }; -use zksync_config::configs::{ - proof_data_handler::ProtocolVersionLoadingMode, ProofDataHandlerConfig, -}; +use zksync_config::configs::ProofDataHandlerConfig; use zksync_dal::{ConnectionPool, Core, CoreDal, SqlxError}; use zksync_object_store::{ObjectStore, ObjectStoreError}; use zksync_prover_interface::api::{ @@ -29,7 +27,6 @@ pub(crate) struct RequestProcessor { blob_store: Arc, pool: ConnectionPool, config: ProofDataHandlerConfig, - l1_verifier_config: Option, } pub(crate) enum RequestProcessorError { @@ -69,13 +66,11 @@ impl RequestProcessor { blob_store: Arc, pool: ConnectionPool, config: ProofDataHandlerConfig, - l1_verifier_config: Option, ) -> Self { Self { blob_store, pool, config, - l1_verifier_config, } } @@ -105,10 +100,8 @@ impl RequestProcessor { .await .map_err(RequestProcessorError::ObjectStore)?; - let (l1_verifier_config, fri_protocol_version_id) = match self.config.protocol_version_loading_mode { - ProtocolVersionLoadingMode::FromDb => { - - let header = self + let (l1_verifier_config, fri_protocol_version_id) = { + let header = self .pool .connection() .await @@ -122,26 +115,19 @@ impl RequestProcessor { let protocol_version = header.protocol_version.unwrap(); // TODO: What invariants have to hold such that protocol version = fri protocol version? let fri_protocol_version = FriProtocolVersionId::from(protocol_version); - (self - .pool - .connection() - .await - .unwrap() - .protocol_versions_dal() - .l1_verifier_config_for_version(protocol_version) - .await - .expect(&format!( - "Missing l1 verifier info for protocol version {protocol_version:?}", - )), fri_protocol_version) - - } - ProtocolVersionLoadingMode::FromEnvVar => { - (self.l1_verifier_config - .expect("l1_verifier_config must be set while running ProtocolVersionLoadingMode::FromEnvVar mode"), - FriProtocolVersionId::try_from(self.config.fri_protocol_version_id) - .expect("Invalid FRI protocol version id")) - - } + ( + self.pool + .connection() + .await + .unwrap() + .protocol_versions_dal() + .l1_verifier_config_for_version(protocol_version) + .await + .expect(&format!( + "Missing l1 verifier info for protocol version {protocol_version:?}", + )), + fri_protocol_version, + ) }; let storage_batch = self diff --git a/core/lib/zksync_core/src/proto/consensus.proto b/core/lib/zksync_core/src/proto/consensus.proto index e69de29bb2d..65ffb078904 100644 --- a/core/lib/zksync_core/src/proto/consensus.proto +++ b/core/lib/zksync_core/src/proto/consensus.proto @@ -0,0 +1,69 @@ +// For config readability and ease of use, some of the primitive types are +// encoded as strings. Fields of these types have a comment with the name of the type. +// Here is the list of string-encoded types and their corresponding string formats: +// +// IpAddr - TCP socket address, encoded as a string of the form "IP:port". +// Both IPv4 and IPv6 are supported +// (note that opening IPv6 ports may not work depending on the VM capabilities). +// examples: "203.0.113.7:3456", "[2001:DB8::1]:4567" +// +// ValidatorPublicKey - public key of the validator (consensus participant) of the form "validator:public::" +// Currently only bn254 signature scheme is supported for validators. +// example: "validator:public:bn254:4b0c4697f0a35eab30f63684ae4611f3c1d631eecfd97237e2345a9b3d0c472dbb16c49b793beceaab0cdd89cda6ff1099bd1aaf1ad6cabde9a15793cc09b407" +// +// NodePublicKey - public key of the node (gossip network participant) of the form "node:public::" +// Currently only ed25519 signature scheme is supported for nodes. +// example: "node:public:ed25519:d36607699a0a3fbe3de16947928cf299484219ff62ca20f387795b0859dbe501" +// +// ValidatorSecretKey - secret key of the validator (consensus participant) of the form "validator:secret::" +// Currently only bn254 signature scheme is supported for validators. +// example: "validator:secret:bn254:1aaa9c2c5a4f0f75b79127a7207348e33df55869d79622eccf65c91c98861257" +// +// NodeSecretKey - secret key of the node (gossip network participant) of the form "node:secret::" +// Currently only ed25519 signature scheme is supported for nodes. +// example: "node:secret:ed25519:4f761350f4b038f8052d17f0a02e18782be66f16d407e7a073c925d52dcc8f02" + +syntax = "proto3"; + +package zksync.core.consensus; + +// (public key, ip address) of a gossip network node. +message NodeAddr { + optional string key = 1; // required; NodePublicKey + optional string addr = 2; // required; IpAddr +} + +message Config { + // IP:port to listen on, for incoming TCP connections. + // Use `0.0.0.0:` to listen on all network interfaces (i.e. on all IPs exposed by this VM). + optional string server_addr = 1; // required; IpAddr + + // Public IP:port to advertise, should forward to server_addr. + // Can be `127.0.0.1:` for local tests. + optional string public_addr = 2; // required; IpAddr + + // Public keys of all validators. + // Currently it has to be a singleton with a public key corresponding to secret key in CONSENSUS_VALIDATOR_KEY env var. + repeated string validators = 3; // required; ValidatorPublicKey + + // Maximal allowed size of the payload. + optional uint64 max_payload_size = 4; // required; bytes + + // Inbound connections that should be unconditionally accepted on the gossip network. + repeated string gossip_static_inbound = 5; // required; NodePublicKey + + // Limit on the number of gossip network inbound connections outside + // of the `gossip_static_inbound` set. + optional uint64 gossip_dynamic_inbound_limit = 6; // required + + // Outbound gossip network connections that the node should actively try to + // establish and maintain. + repeated NodeAddr gossip_static_outbound = 7; +} + +message Secrets { + optional string validator_key = 1; // required for validator nodes; ValidatorSecretKey + optional string node_key = 2; // required for any node; NodeSecretKey +} + + diff --git a/core/lib/zksync_core/src/proto/mod.proto b/core/lib/zksync_core/src/proto/mod.proto index 4ecd4a18b09..596eb505db7 100644 --- a/core/lib/zksync_core/src/proto/mod.proto +++ b/core/lib/zksync_core/src/proto/mod.proto @@ -2,59 +2,8 @@ syntax = "proto3"; package zksync.core; -//import "zksync/config/alerts.proto"; -//import "zksync/config/api.proto"; -//import "zksync/config/chain.proto"; -//import "zksync/config/contracts.proto"; -//import "zksync/config/genesis.proto"; -//import "zksync/config/contract_verifier.proto"; -//import "zksync/config/database.proto"; -//import "zksync/config/eth_client.proto"; -//import "zksync/config/eth_sender.proto"; -//import "zksync/config/eth_watch.proto"; -//import "zksync/config/fri_proof_compressor.proto"; -//import "zksync/config/fri_prover_gateway.proto"; -//import "zksync/config/fri_prover_group.proto"; -//import "zksync/config/fri_prover.proto"; -//import "zksync/config/fri_witness_generator.proto"; -//import "zksync/config/fri_witness_vector_generator.proto"; -//import "zksync/config/house_keeper.proto"; -//import "zksync/config/object_store.proto"; -//import "zksync/config/observability.proto"; -//import "zksync/config/proof_data_handler.proto"; -//import "zksync/config/snapshots_creator.proto"; -//import "zksync/config/utils.proto"; -//import "zksync/config/witness_generator.proto"; -//import "zksync/core/consensus.proto"; -// -message TempConfigStore { - // optional config.database.Postgres postgres = 1; - // optional config.api.HealthCheck health_check = 2; - // optional config.api.MerkleTreeApi merkle_tree_api = 3; - // optional config.api.Web3JsonRpc web3_json_rpc = 4; - // optional config.chain.CircuitBreaker circuit_breaker = 5; - // optional config.chain.Mempool mempool = 6; - // optional config.chain.EthNetwork network = 7; - // optional config.chain.OperationsManager operations_manager = 8; - // optional config.chain.StateKeeper state_keeper = 9; - // optional config.house_keeper.HouseKeeper house_keeper = 10; - // optional config.fri_proof_compressor.FriProofCompressor fri_proof_compressor = 11; - // optional config.fri_prover.FriProver fri_prover = 12; - // optional config.fri_prover_group.FriProverGroup fri_prover_group = 13; - // optional config.fri_witness_generator.FriWitnessGenerator fri_witness_generator = 14; - // optional config.utils.Prometheus prometheus = 15; - // optional config.proof_data_handler.ProofDataHandler proof_data_handler = 16; - // optional config.witness_generator.WitnessGenerator witness_generator = 17; - // optional config.api.Api api = 18; - // optional config.database.DB db = 20; - // optional config.eth_client.ETHClient eth_client = 21; - // optional config.eth_sender.ETHSender eth_sender = 22; - // optional config.eth_watch.ETHWatch eth_watch = 23; - // optional config.eth_sender.GasAdjuster gas_adjuster = 24; - // optional config.object_store.ObjectStore object_store = 25; - // optional consensus.Config consensus = 26; +import "zksync/core/consensus.proto"; + +message Secrets { + optional consensus.Secrets consensus = 1; // optional } -// -//message Secrets { -// optional consensus.Secrets consensus = 1; // optional -//} diff --git a/core/lib/zksync_core/src/state_keeper/mod.rs b/core/lib/zksync_core/src/state_keeper/mod.rs index bb70929a5b4..29938c95906 100644 --- a/core/lib/zksync_core/src/state_keeper/mod.rs +++ b/core/lib/zksync_core/src/state_keeper/mod.rs @@ -10,6 +10,7 @@ use zksync_config::{ }; use zksync_dal::{ConnectionPool, Core}; use zksync_object_store::ObjectStore; +use zksync_types::L2ChainId; pub use self::{ batch_executor::{main_executor::MainBatchExecutor, BatchExecutor}, @@ -38,7 +39,7 @@ pub(crate) async fn create_state_keeper( contracts_config: &ContractsConfigReduced, state_keeper_config: StateKeeperConfig, db_config: &DBConfig, - network_config: &NetworkConfig, + l2chain_id: L2ChainId, mempool_config: &MempoolConfig, pool: ConnectionPool, mempool: MempoolGuard, @@ -67,7 +68,7 @@ pub(crate) async fn create_state_keeper( mempool_config.delay_interval(), contracts_config.l2_erc20_bridge_addr, state_keeper_config.validation_computational_gas_limit, - network_config.zksync_network_id, + l2chain_id, ) .await .expect("Failed initializing main node I/O for state keeper"); diff --git a/core/lib/zksync_core/src/temp_config_store/mod.rs b/core/lib/zksync_core/src/temp_config_store/mod.rs index 127fd326c6b..bd4f1dd4f30 100644 --- a/core/lib/zksync_core/src/temp_config_store/mod.rs +++ b/core/lib/zksync_core/src/temp_config_store/mod.rs @@ -8,33 +8,21 @@ use zksync_config::{ }, fri_prover_group::FriProverGroupConfig, house_keeper::HouseKeeperConfig, - FriProofCompressorConfig, FriProverConfig, FriWitnessGeneratorConfig, PrometheusConfig, - ProofDataHandlerConfig, WitnessGeneratorConfig, + wallets::Wallets, + FriProofCompressorConfig, FriProverConfig, FriProverGatewayConfig, + FriWitnessGeneratorConfig, FriWitnessVectorGeneratorConfig, GeneralConfig, + PrometheusConfig, ProofDataHandlerConfig, WitnessGeneratorConfig, }, - ApiConfig, DBConfig, ETHClientConfig, ETHConfig, ETHWatchConfig, GasAdjusterConfig, - ObjectStoreConfig, PostgresConfig, + ApiConfig, ContractVerifierConfig, DBConfig, ETHClientConfig, ETHConfig, ETHWatchConfig, + GasAdjusterConfig, GenesisConfig, ObjectStoreConfig, PostgresConfig, }; use zksync_protobuf::{read_optional, repr::ProtoRepr, ProtoFmt}; -use crate::proto; - -fn read_optional_repr(field: &Option

) -> anyhow::Result> { - field.as_ref().map(|x| x.read()).transpose() -} - -use crate::consensus; +use crate::{consensus, proto}; #[cfg(test)] mod tests; -/// Decodes a proto message from json for arbitrary `ProtoFmt`. -pub fn decode_json(json: &str) -> anyhow::Result { - let mut d = serde_json::Deserializer::from_str(json); - let p: T = zksync_protobuf::serde::deserialize(&mut d)?; - d.end()?; - Ok(p) -} - pub fn decode_yaml(yaml: &str) -> anyhow::Result { let d = serde_yaml::Deserializer::from_str(yaml); let this: T = zksync_protobuf::serde::deserialize(d)?; @@ -46,7 +34,7 @@ pub fn decode_yaml_repr(yaml: &str) -> anyhow::Result { let this: T = zksync_protobuf::serde::deserialize_proto(d)?; this.read() } - +// // TODO (QIT-22): This structure is going to be removed when components will be responsible for their own configs. /// A temporary config store allowing to pass deserialized configs from `zksync_server` to `zksync_core`. /// All the configs are optional, since for some component combination it is not needed to pass all the configs. @@ -59,12 +47,15 @@ pub struct TempConfigStore { pub circuit_breaker_config: Option, pub mempool_config: Option, pub network_config: Option, + pub contract_verifier: Option, pub operations_manager_config: Option, pub state_keeper_config: Option, pub house_keeper_config: Option, pub fri_proof_compressor_config: Option, pub fri_prover_config: Option, pub fri_prover_group_config: Option, + pub fri_prover_gateway_config: Option, + pub fri_witness_vector_generator: Option, pub fri_witness_generator_config: Option, pub prometheus_config: Option, pub proof_data_handler_config: Option, @@ -79,89 +70,6 @@ pub struct TempConfigStore { pub consensus_config: Option, } -impl ProtoFmt for TempConfigStore { - type Proto = proto::TempConfigStore; - fn read(r: &Self::Proto) -> anyhow::Result { - Ok(Self { - postgres_config: read_optional_repr(&r.postgres).context("postgres")?, - health_check_config: read_optional_repr(&r.health_check).context("health_check")?, - merkle_tree_api_config: read_optional_repr(&r.merkle_tree_api) - .context("merkle_tree_api")?, - web3_json_rpc_config: read_optional_repr(&r.web3_json_rpc).context("web3_json_rpc")?, - circuit_breaker_config: read_optional_repr(&r.circuit_breaker) - .context("circuit_breaker")?, - mempool_config: read_optional_repr(&r.mempool).context("mempool")?, - network_config: read_optional_repr(&r.network).context("network")?, - operations_manager_config: read_optional_repr(&r.operations_manager) - .context("operations_manager")?, - state_keeper_config: read_optional_repr(&r.state_keeper).context("state_keeper")?, - house_keeper_config: read_optional_repr(&r.house_keeper).context("house_keeper")?, - fri_proof_compressor_config: read_optional_repr(&r.fri_proof_compressor) - .context("fri_proof_compressor")?, - fri_prover_config: read_optional_repr(&r.fri_prover).context("fri_prover")?, - fri_prover_group_config: read_optional_repr(&r.fri_prover_group) - .context("fri_prover_group")?, - fri_witness_generator_config: read_optional_repr(&r.fri_witness_generator) - .context("fri_witness_generator")?, - prometheus_config: read_optional_repr(&r.prometheus).context("prometheus")?, - proof_data_handler_config: read_optional_repr(&r.proof_data_handler) - .context("proof_data_handler")?, - witness_generator_config: read_optional_repr(&r.witness_generator) - .context("witness_generator")?, - api_config: read_optional_repr(&r.api).context("api")?, - db_config: read_optional_repr(&r.db).context("db")?, - eth_client_config: read_optional_repr(&r.eth_client).context("eth_client")?, - eth_sender_config: read_optional_repr(&r.eth_sender).context("eth_sender")?, - eth_watch_config: read_optional_repr(&r.eth_watch).context("eth_watch")?, - gas_adjuster_config: read_optional_repr(&r.gas_adjuster).context("gas_adjuster")?, - object_store_config: read_optional_repr(&r.object_store).context("object_store")?, - consensus_config: read_optional(&r.consensus).context("consensus")?, - }) - } - - fn build(&self) -> Self::Proto { - Self::Proto { - postgres: self.postgres_config.as_ref().map(ProtoRepr::build), - health_check: self.health_check_config.as_ref().map(ProtoRepr::build), - merkle_tree_api: self.merkle_tree_api_config.as_ref().map(ProtoRepr::build), - web3_json_rpc: self.web3_json_rpc_config.as_ref().map(ProtoRepr::build), - circuit_breaker: self.circuit_breaker_config.as_ref().map(ProtoRepr::build), - mempool: self.mempool_config.as_ref().map(ProtoRepr::build), - network: self.network_config.as_ref().map(ProtoRepr::build), - operations_manager: self - .operations_manager_config - .as_ref() - .map(ProtoRepr::build), - state_keeper: self.state_keeper_config.as_ref().map(ProtoRepr::build), - house_keeper: self.house_keeper_config.as_ref().map(ProtoRepr::build), - fri_proof_compressor: self - .fri_proof_compressor_config - .as_ref() - .map(ProtoRepr::build), - fri_prover: self.fri_prover_config.as_ref().map(ProtoRepr::build), - fri_prover_group: self.fri_prover_group_config.as_ref().map(ProtoRepr::build), - fri_witness_generator: self - .fri_witness_generator_config - .as_ref() - .map(ProtoRepr::build), - prometheus: self.prometheus_config.as_ref().map(ProtoRepr::build), - proof_data_handler: self - .proof_data_handler_config - .as_ref() - .map(ProtoRepr::build), - witness_generator: self.witness_generator_config.as_ref().map(ProtoRepr::build), - api: self.api_config.as_ref().map(ProtoRepr::build), - db: self.db_config.as_ref().map(ProtoRepr::build), - eth_client: self.eth_client_config.as_ref().map(ProtoRepr::build), - eth_sender: self.eth_sender_config.as_ref().map(ProtoRepr::build), - eth_watch: self.eth_watch_config.as_ref().map(ProtoRepr::build), - gas_adjuster: self.gas_adjuster_config.as_ref().map(ProtoRepr::build), - object_store: self.object_store_config.as_ref().map(ProtoRepr::build), - consensus: self.consensus_config.as_ref().map(ProtoFmt::build), - } - } -} - #[derive(Debug)] pub struct Secrets { pub consensus: Option, @@ -181,3 +89,32 @@ impl ProtoFmt for Secrets { } } } + +impl TempConfigStore { + pub fn general(&self) -> GeneralConfig { + GeneralConfig { + postgres_config: self.postgres_config.clone(), + api_config: self.api_config.clone(), + contract_verifier: self.contract_verifier.clone(), + circuit_breaker_config: self.circuit_breaker_config.clone(), + mempool_config: self.mempool_config.clone(), + operations_manager_config: self.operations_manager_config.clone(), + state_keeper_config: self.state_keeper_config.clone(), + house_keeper_config: self.house_keeper_config.clone(), + proof_compressor_config: self.fri_proof_compressor_config.clone(), + prover_config: self.fri_prover_config.clone(), + prover_gateway: self.fri_prover_gateway_config.clone(), + witness_vector_generator: self.fri_witness_vector_generator.clone(), + prover_group_config: self.fri_prover_group_config.clone(), + witness_generator: self.fri_witness_generator_config.clone(), + prometheus_config: self.prometheus_config.clone(), + proof_data_handler_config: self.proof_data_handler_config.clone(), + db_config: self.db_config.clone(), + eth: self.eth_sender_config.clone(), + } + } + + pub fn wallets(&self) -> Option { + todo!() + } +} diff --git a/core/node/node_framework/src/implementations/layers/contract_verification_api.rs b/core/node/node_framework/src/implementations/layers/contract_verification_api.rs index c13366685fb..b1fc26f8521 100644 --- a/core/node/node_framework/src/implementations/layers/contract_verification_api.rs +++ b/core/node/node_framework/src/implementations/layers/contract_verification_api.rs @@ -1,4 +1,4 @@ -use zksync_config::configs::api::ContractVerificationApiConfig; +use zksync_config::ContractVerifierConfig; use zksync_dal::{ConnectionPool, Core}; use crate::{ @@ -9,7 +9,7 @@ use crate::{ }; #[derive(Debug)] -pub struct ContractVerificationApiLayer(pub ContractVerificationApiConfig); +pub struct ContractVerificationApiLayer(pub ContractVerifierConfig); #[async_trait::async_trait] impl WiringLayer for ContractVerificationApiLayer { @@ -41,7 +41,7 @@ impl WiringLayer for ContractVerificationApiLayer { pub struct ContractVerificationApiTask { master_pool: ConnectionPool, replica_pool: ConnectionPool, - config: ContractVerificationApiConfig, + config: ContractVerifierConfig, } #[async_trait::async_trait] diff --git a/core/node/node_framework/src/implementations/layers/house_keeper.rs b/core/node/node_framework/src/implementations/layers/house_keeper.rs index 3bc800725c8..f8636fbf0b4 100644 --- a/core/node/node_framework/src/implementations/layers/house_keeper.rs +++ b/core/node/node_framework/src/implementations/layers/house_keeper.rs @@ -84,7 +84,7 @@ impl WiringLayer for HouseKeeperLayer { let fri_prover_job_retry_manager = FriProverJobRetryManager::new( self.fri_prover_config.max_attempts, self.fri_prover_config.proof_generation_timeout(), - self.house_keeper_config.fri_prover_job_retrying_interval_ms, + self.house_keeper_config.prover_job_retrying_interval_ms, prover_pool.clone(), ); context.add_task(Box::new(FriProverJobRetryManagerTask { @@ -96,7 +96,7 @@ impl WiringLayer for HouseKeeperLayer { self.fri_witness_generator_config .witness_generation_timeout(), self.house_keeper_config - .fri_witness_generator_job_retrying_interval_ms, + .witness_generator_job_retrying_interval_ms, prover_pool.clone(), ); context.add_task(Box::new(FriWitnessGeneratorJobRetryManagerTask { @@ -104,7 +104,7 @@ impl WiringLayer for HouseKeeperLayer { })); let waiting_to_queued_fri_witness_job_mover = WaitingToQueuedFriWitnessJobMover::new( - self.house_keeper_config.fri_witness_job_moving_interval_ms, + self.house_keeper_config.witness_job_moving_interval_ms, prover_pool.clone(), ); context.add_task(Box::new(WaitingToQueuedFriWitnessJobMoverTask { @@ -112,7 +112,7 @@ impl WiringLayer for HouseKeeperLayer { })); let scheduler_circuit_queuer = SchedulerCircuitQueuer::new( - self.house_keeper_config.fri_witness_job_moving_interval_ms, + self.house_keeper_config.witness_job_moving_interval_ms, prover_pool.clone(), ); context.add_task(Box::new(SchedulerCircuitQueuerTask { @@ -129,8 +129,7 @@ impl WiringLayer for HouseKeeperLayer { })); let fri_prover_stats_reporter = FriProverStatsReporter::new( - self.house_keeper_config - .fri_prover_stats_reporting_interval_ms, + self.house_keeper_config.prover_stats_reporting_interval_ms, prover_pool.clone(), replica_pool.clone(), self.fri_prover_group_config, @@ -141,7 +140,7 @@ impl WiringLayer for HouseKeeperLayer { let fri_proof_compressor_stats_reporter = FriProofCompressorStatsReporter::new( self.house_keeper_config - .fri_proof_compressor_stats_reporting_interval_ms, + .proof_compressor_stats_reporting_interval_ms, prover_pool.clone(), ); context.add_task(Box::new(FriProofCompressorStatsReporterTask { @@ -152,7 +151,7 @@ impl WiringLayer for HouseKeeperLayer { self.fri_proof_compressor_config.max_attempts, self.fri_proof_compressor_config.generation_timeout(), self.house_keeper_config - .fri_proof_compressor_job_retrying_interval_ms, + .proof_compressor_job_retrying_interval_ms, prover_pool.clone(), ); context.add_task(Box::new(FriProofCompressorJobRetryManagerTask { From 5367cceaa9955a27e26f0cb521d56de086be7d7d Mon Sep 17 00:00:00 2001 From: Danil Date: Tue, 26 Mar 2024 23:12:05 +0100 Subject: [PATCH 38/65] Use option for blob operator Signed-off-by: Danil --- core/lib/config/src/configs/genesis.rs | 6 ++++ core/lib/config/src/configs/wallets.rs | 2 +- core/lib/env_config/src/api.rs | 4 --- core/lib/env_config/src/contract_verifier.rs | 2 ++ core/lib/env_config/src/house_keeper.rs | 9 ++---- core/lib/env_config/src/observability.rs | 2 +- core/lib/protobuf_config/src/wallets.rs | 32 ++++++++++++------- .../zksync_core/src/api_server/web3/state.rs | 20 +++++++----- .../src/api_server/web3/tests/mod.rs | 7 ++-- core/lib/zksync_core/src/lib.rs | 29 ++++++++--------- 10 files changed, 64 insertions(+), 49 deletions(-) diff --git a/core/lib/config/src/configs/genesis.rs b/core/lib/config/src/configs/genesis.rs index 69d838f48ae..866b5724674 100644 --- a/core/lib/config/src/configs/genesis.rs +++ b/core/lib/config/src/configs/genesis.rs @@ -28,3 +28,9 @@ pub struct GenesisConfig { pub shared_bridge: Option, pub dummy_prover: bool, } + +impl GenesisConfig { + pub fn for_tests() -> Self { + todo!() + } +} diff --git a/core/lib/config/src/configs/wallets.rs b/core/lib/config/src/configs/wallets.rs index ec7cb9c4fd0..69f2aa7c4fa 100644 --- a/core/lib/config/src/configs/wallets.rs +++ b/core/lib/config/src/configs/wallets.rs @@ -36,7 +36,7 @@ impl Wallet { #[derive(Debug, Clone)] pub struct EthSender { pub operator: Wallet, - pub blob_operator: Wallet, + pub blob_operator: Option, } #[derive(Debug, Clone)] diff --git a/core/lib/env_config/src/api.rs b/core/lib/env_config/src/api.rs index 570b5a13af3..30ceb376bda 100644 --- a/core/lib/env_config/src/api.rs +++ b/core/lib/env_config/src/api.rs @@ -89,10 +89,6 @@ mod tests { mempool_cache_update_interval: Some(50), mempool_cache_size: Some(10000), }, - contract_verification: ContractVerificationApiConfig { - port: 3070, - url: "http://127.0.0.1:3070".into(), - }, prometheus: PrometheusConfig { listener_port: 3312, pushgateway_url: "http://127.0.0.1:9091".into(), diff --git a/core/lib/env_config/src/contract_verifier.rs b/core/lib/env_config/src/contract_verifier.rs index 88c462cef2d..09a05ddfb2c 100644 --- a/core/lib/env_config/src/contract_verifier.rs +++ b/core/lib/env_config/src/contract_verifier.rs @@ -20,6 +20,8 @@ mod tests { compilation_timeout: 30, polling_interval: Some(1000), prometheus_port: 3314, + port: 9454, + url: "127.0.0.1:9454".to_string(), } } diff --git a/core/lib/env_config/src/house_keeper.rs b/core/lib/env_config/src/house_keeper.rs index bf995f8238b..eb181a9f2a7 100644 --- a/core/lib/env_config/src/house_keeper.rs +++ b/core/lib/env_config/src/house_keeper.rs @@ -23,13 +23,10 @@ mod tests { prover_stats_reporting_interval_ms: 5_000, witness_job_moving_interval_ms: 30_000, witness_generator_stats_reporting_interval_ms: 10_000, - fri_witness_job_moving_interval_ms: 40_000, - fri_prover_job_retrying_interval_ms: 30_000, - fri_witness_generator_job_retrying_interval_ms: 30_000, + witness_generator_job_retrying_interval_ms: 30_000, prover_db_pool_size: 2, - fri_prover_stats_reporting_interval_ms: 30_000, - fri_proof_compressor_job_retrying_interval_ms: 30_000, - fri_proof_compressor_stats_reporting_interval_ms: 30_000, + proof_compressor_job_retrying_interval_ms: 30_000, + proof_compressor_stats_reporting_interval_ms: 30_000, } } diff --git a/core/lib/env_config/src/observability.rs b/core/lib/env_config/src/observability.rs index 213de017ffc..2176a046879 100644 --- a/core/lib/env_config/src/observability.rs +++ b/core/lib/env_config/src/observability.rs @@ -41,7 +41,7 @@ impl FromEnv for ObservabilityConfig { }; let sporadic_crypto_errors_substrs = std::env::var("ALERTS_SPORADIC_CRYPTO_ERRORS_SUBSTRS") .ok() - .map(|a| a.split(",").map(|a| a.to_string()).collect()) + .map(|a| a.split(',').map(|a| a.to_string()).collect()) .unwrap_or_default(); Ok(ObservabilityConfig { diff --git a/core/lib/protobuf_config/src/wallets.rs b/core/lib/protobuf_config/src/wallets.rs index 2059a3de971..b33b2474f8c 100644 --- a/core/lib/protobuf_config/src/wallets.rs +++ b/core/lib/protobuf_config/src/wallets.rs @@ -1,4 +1,7 @@ +use anyhow::Context; +use zksync_basic_types::web3::signing::Key; use zksync_config::configs::{ + eth_sender, wallets::{EthSender, StateKeeper, Wallet}, {self}, }; @@ -10,13 +13,22 @@ impl ProtoRepr for proto::Wallets { type Type = configs::wallets::Wallets; fn read(&self) -> anyhow::Result { let eth_sender = if self.operator.is_some() && self.blob_operator.is_some() { + let blob_operator = if let Some(blob_operator) = &self.blob_operator { + Some(Wallet::from_private_key(parse_h256( + required(&blob_operator.private_key).context("blob operator")?, + )?)) + } else { + None + }; Some(EthSender { operator: Wallet::from_private_key(parse_h256(required( - &self.operator.clone().unwrap().private_key, - )?)?), - blob_operator: Wallet::from_private_key(parse_h256(required( - &self.blob_operator.clone().unwrap().private_key, + &self + .operator + .clone() + .context("Operator private key")? + .private_key, )?)?), + blob_operator, }) } else { None @@ -39,6 +51,10 @@ impl ProtoRepr for proto::Wallets { fn build(this: &Self::Type) -> Self { let (operator, blob_operator) = if let Some(eth_sender) = &this.eth_sender { + let blob = eth_sender.blob_operator.as_ref().map(|blob| proto::Wallet { + address: Some(blob.address().as_bytes().to_vec()), + private_key: blob.private_key().map(|a| a.as_bytes().to_vec()), + }); ( Some(proto::Wallet { address: Some(eth_sender.operator.address().as_bytes().to_vec()), @@ -47,13 +63,7 @@ impl ProtoRepr for proto::Wallets { .private_key() .map(|a| a.as_bytes().to_vec()), }), - Some(proto::Wallet { - address: Some(eth_sender.blob_operator.address().as_bytes().to_vec()), - private_key: eth_sender - .blob_operator - .private_key() - .map(|a| a.as_bytes().to_vec()), - }), + blob, ) } else { (None, None) diff --git a/core/lib/zksync_core/src/api_server/web3/state.rs b/core/lib/zksync_core/src/api_server/web3/state.rs index ba4a09e9e3b..f2f560eed8b 100644 --- a/core/lib/zksync_core/src/api_server/web3/state.rs +++ b/core/lib/zksync_core/src/api_server/web3/state.rs @@ -11,8 +11,11 @@ use anyhow::Context as _; use lru::LruCache; use tokio::sync::{watch, Mutex}; use vise::GaugeGuard; -use zksync_config::configs::{ - api::Web3JsonRpcConfig, chain::NetworkConfig, ContractsConfigReduced, +use zksync_config::{ + configs::{ + api::Web3JsonRpcConfig, chain::NetworkConfig, genesis::SharedBridge, ContractsConfigReduced, + }, + GenesisConfig, }; use zksync_dal::{Connection, ConnectionPool, Core, CoreDal}; use zksync_state::MempoolCache; @@ -100,14 +103,13 @@ pub struct InternalApiConfig { impl InternalApiConfig { pub fn new( - l1_chain_id: L1ChainId, - l2_chain_id: L2ChainId, web3_config: &Web3JsonRpcConfig, contracts_config: &ContractsConfigReduced, + genesis_config: &GenesisConfig, ) -> Self { Self { - l1_chain_id, - l2_chain_id, + l1_chain_id: genesis_config.l1_chain_id, + l2_chain_id: genesis_config.l2_chain_id, max_tx_size: web3_config.max_tx_size, estimate_gas_scale_factor: web3_config.estimate_gas_scale_factor, estimate_gas_acceptable_overestimation: web3_config @@ -118,8 +120,10 @@ impl InternalApiConfig { l1_weth_bridge: contracts_config.l1_weth_bridge_proxy_addr, l2_weth_bridge: contracts_config.l2_weth_bridge_addr, }, - // TODO move bridgehub proxy - bridgehub_proxy_addr: None, + bridgehub_proxy_addr: genesis_config + .shared_bridge + .as_ref() + .map(|a| a.bridgehub_proxy_addr), diamond_proxy_addr: contracts_config.diamond_proxy_addr, l2_testnet_paymaster_addr: contracts_config.l2_testnet_paymaster_addr, req_entities_limit: web3_config.req_entities_limit(), diff --git a/core/lib/zksync_core/src/api_server/web3/tests/mod.rs b/core/lib/zksync_core/src/api_server/web3/tests/mod.rs index 263e70da954..4116147fdd8 100644 --- a/core/lib/zksync_core/src/api_server/web3/tests/mod.rs +++ b/core/lib/zksync_core/src/api_server/web3/tests/mod.rs @@ -14,7 +14,7 @@ use zksync_config::{ configs::{ api::Web3JsonRpcConfig, chain::{NetworkConfig, StateKeeperConfig}, - ContractsConfig, + ContractsConfig, GeneralConfig, }, GenesisConfig, }; @@ -282,9 +282,10 @@ async fn test_http_server(test: impl HttpTest) { drop(storage); let (stop_sender, stop_receiver) = watch::channel(false); - let contracts_config = ContractsConfig::for_tests(); + let contracts_config = ContractsConfig::for_tests().into(); let web3_config = Web3JsonRpcConfig::for_tests(); - let mut api_config = InternalApiConfig::new(&network_config, &web3_config, &contracts_config); + let genesis = GenesisConfig::for_tests(); + let mut api_config = InternalApiConfig::new(&web3_config, &contracts_config, &genesis); api_config.filters_disabled = test.filters_disabled(); let mut server_handles = spawn_http_server( api_config, diff --git a/core/lib/zksync_core/src/lib.rs b/core/lib/zksync_core/src/lib.rs index 2306f3bb723..2bf2eeeb447 100644 --- a/core/lib/zksync_core/src/lib.rs +++ b/core/lib/zksync_core/src/lib.rs @@ -341,10 +341,9 @@ pub async fn initialize_components( let tx_sender_config = TxSenderConfig::new(&state_keeper_config, &api_config.web3_json_rpc, l2_chain_id); let internal_api_config = InternalApiConfig::new( - genesis_config.l1_chain_id, - genesis_config.l2_chain_id, &api_config.web3_json_rpc, &contracts_config, + &genesis_config, ); // Lazily initialize storage caches only when they are needed (e.g., skip their initialization @@ -610,7 +609,7 @@ pub async fn initialize_components( web3_url, ); - let operator_blobs_address = Some(eth_sender_wallets.blob_operator.address()); + let operator_blobs_address = eth_sender_wallets.blob_operator.map(|x| x.address()); let eth_tx_aggregator_actor = EthTxAggregator::new( eth_sender_pool, @@ -667,18 +666,18 @@ pub async fn initialize_components( web3_url, ); - let operator_blob_private_key = eth_sender_wallets - .blob_operator - .private_key() - .context("Private_key")?; - - let eth_client_blobs = Some(PKSigningClient::new_raw( - operator_blob_private_key, - diamond_proxy_addr, - default_priority_fee_per_gas, - l1_chain_id, - &web3_url, - )); + let eth_client_blobs = if let Some(blob_operator) = eth_sender_wallets.blob_operator { + let operator_blob_private_key = blob_operator.private_key().context("Private_key")?; + Some(PKSigningClient::new_raw( + operator_blob_private_key, + diamond_proxy_addr, + default_priority_fee_per_gas, + l1_chain_id, + &web3_url, + )) + } else { + None + }; let eth_tx_manager_actor = EthTxManager::new( eth_manager_pool, From 11ff010787650a6d3b0eea79e94b2d9d2c5aa162 Mon Sep 17 00:00:00 2001 From: Danil Date: Wed, 27 Mar 2024 11:40:40 +0100 Subject: [PATCH 39/65] Move crypto primitives from types Signed-off-by: Danil --- Cargo.lock | 17 ++++++ Cargo.toml | 4 +- core/lib/config/Cargo.toml | 1 + core/lib/config/src/configs/wallets.rs | 20 ++++--- core/lib/crypto_primitives/Cargo.toml | 23 ++++++++ .../src}/ecdsa_signature.rs | 3 +- .../src}/eip712_signature/member_types.rs | 6 +- .../src}/eip712_signature/mod.rs | 0 .../src}/eip712_signature/struct_builder.rs | 4 +- .../src}/eip712_signature/tests.rs | 0 .../src}/eip712_signature/typed_structure.rs | 8 +-- .../src}/eip712_signature/utils.rs | 4 +- .../mod.rs => crypto_primitives/src/lib.rs} | 0 .../src}/packed_eth_signature.rs | 12 ++-- core/lib/dal/src/blocks_web3_dal.rs | 2 - core/lib/dal/src/models/storage_block.rs | 4 -- core/lib/eth_signer/src/json_rpc_signer.rs | 4 +- core/lib/eth_signer/src/lib.rs | 4 +- core/lib/eth_signer/src/pk_signer.rs | 4 +- core/lib/protobuf_config/src/wallets.rs | 59 ++++++++++++------- core/lib/types/Cargo.toml | 1 + core/lib/types/src/api/mod.rs | 2 - core/lib/types/src/l2/mod.rs | 8 +-- core/lib/types/src/lib.rs | 3 +- core/lib/types/src/tx/mod.rs | 2 +- core/lib/zksync_core/src/lib.rs | 1 - .../zksync_core/src/proof_data_handler/mod.rs | 1 - core/lib/zksync_core/src/state_keeper/mod.rs | 7 +-- 28 files changed, 119 insertions(+), 85 deletions(-) create mode 100644 core/lib/crypto_primitives/Cargo.toml rename core/lib/{types/src/tx/primitives => crypto_primitives/src}/ecdsa_signature.rs (99%) rename core/lib/{types/src/tx/primitives => crypto_primitives/src}/eip712_signature/member_types.rs (95%) rename core/lib/{types/src/tx/primitives => crypto_primitives/src}/eip712_signature/mod.rs (100%) rename core/lib/{types/src/tx/primitives => crypto_primitives/src}/eip712_signature/struct_builder.rs (98%) rename core/lib/{types/src/tx/primitives => crypto_primitives/src}/eip712_signature/tests.rs (100%) rename core/lib/{types/src/tx/primitives => crypto_primitives/src}/eip712_signature/typed_structure.rs (97%) rename core/lib/{types/src/tx/primitives => crypto_primitives/src}/eip712_signature/utils.rs (90%) rename core/lib/{types/src/tx/primitives/mod.rs => crypto_primitives/src/lib.rs} (100%) rename core/lib/{types/src/tx/primitives => crypto_primitives/src}/packed_eth_signature.rs (96%) diff --git a/Cargo.lock b/Cargo.lock index ffdc89d2de2..86a8aaa9d09 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8001,6 +8001,7 @@ dependencies = [ "rand 0.8.5", "serde", "zksync_basic_types", + "zksync_crypto_primitives", ] [[package]] @@ -8284,6 +8285,21 @@ dependencies = [ "zksync_basic_types", ] +[[package]] +name = "zksync_crypto_primitives" +version = "0.1.0" +dependencies = [ + "anyhow", + "hex", + "secp256k1", + "serde", + "serde_json", + "thiserror", + "web3", + "zksync_basic_types", + "zksync_utils", +] + [[package]] name = "zksync_dal" version = "0.1.0" @@ -8757,6 +8773,7 @@ dependencies = [ "zksync_basic_types", "zksync_config", "zksync_contracts", + "zksync_crypto_primitives", "zksync_mini_merkle_tree", "zksync_protobuf", "zksync_protobuf_build", diff --git a/Cargo.toml b/Cargo.toml index fe863832ec7..451ef8b1461 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -43,13 +43,12 @@ members = [ "core/lib/vm_utils", "core/lib/web3_decl", "core/lib/snapshots_applier", - + "core/lib/crypto_primitives", # Test infrastructure "core/tests/test_account", "core/tests/loadnext", "core/tests/vm-benchmark", "core/tests/vm-benchmark/harness", - # SDK section "sdk/zksync-rs", ] @@ -215,3 +214,4 @@ zksync_test_account = { path = "core/tests/test_account" } zksync_types = { path = "core/lib/types" } zksync_utils = { path = "core/lib/utils" } zksync_web3_decl = { path = "core/lib/web3_decl" } +zksync_crypto_primitives = { path = "core/lib/crypto_primitives" } diff --git a/core/lib/config/Cargo.toml b/core/lib/config/Cargo.toml index 24115fc0d87..2be97f491cd 100644 --- a/core/lib/config/Cargo.toml +++ b/core/lib/config/Cargo.toml @@ -11,6 +11,7 @@ categories.workspace = true [dependencies] zksync_basic_types.workspace = true +zksync_crypto_primitives.workspace = true anyhow.workspace = true rand.workspace = true diff --git a/core/lib/config/src/configs/wallets.rs b/core/lib/config/src/configs/wallets.rs index 69f2aa7c4fa..dee4836c3fa 100644 --- a/core/lib/config/src/configs/wallets.rs +++ b/core/lib/config/src/configs/wallets.rs @@ -1,4 +1,5 @@ use zksync_basic_types::{Address, H256}; +use zksync_crypto_primitives::PackedEthSignature; #[derive(Debug, Clone)] pub struct Wallet { @@ -14,15 +15,18 @@ impl Wallet { } } - pub fn from_private_key(private_key: H256) -> Self { - // let address = PackedEthSignature::address_from_private_key(&private_key) - // .expect("Failed to get address from private key"); - // TODO fix it - let address = Address::zero(); - Self { - address, - private_key: Some(private_key), + pub fn from_private_key(private_key: H256, address: Option

) -> anyhow::Result { + let calculated_address = PackedEthSignature::address_from_private_key(&private_key)?; + if let Some(address) = address { + if calculated_address != address { + anyhow::bail!("Malformed wallet, address doesn't correspond private_key") + } } + + Ok(Self { + address: calculated_address, + private_key: Some(private_key), + }) } pub fn address(&self) -> Address { diff --git a/core/lib/crypto_primitives/Cargo.toml b/core/lib/crypto_primitives/Cargo.toml new file mode 100644 index 00000000000..d41a1d73bdc --- /dev/null +++ b/core/lib/crypto_primitives/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "zksync_crypto_primitives" +version.workspace = true +edition.workspace = true +authors.workspace = true +homepage.workspace = true +repository.workspace = true +license.workspace = true +keywords.workspace = true +categories.workspace = true + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +web3.workspace = true +secp256k1.workspace = true +zksync_utils.workspace = true +zksync_basic_types.workspace = true +thiserror.workspace = true +serde_json.workspace = true +serde.workspace = true +hex.workspace = true +anyhow.workspace = true \ No newline at end of file diff --git a/core/lib/types/src/tx/primitives/ecdsa_signature.rs b/core/lib/crypto_primitives/src/ecdsa_signature.rs similarity index 99% rename from core/lib/types/src/tx/primitives/ecdsa_signature.rs rename to core/lib/crypto_primitives/src/ecdsa_signature.rs index 1cf5bec8a3d..ebafaa006eb 100644 --- a/core/lib/types/src/tx/primitives/ecdsa_signature.rs +++ b/core/lib/crypto_primitives/src/ecdsa_signature.rs @@ -32,8 +32,7 @@ use secp256k1::{ ecdsa::{RecoverableSignature, RecoveryId}, Message as SecpMessage, PublicKey, SecretKey, SECP256K1, }; - -use crate::web3::{ +use web3::{ signing::keccak256, types::{Address, H256, H512, H520}, }; diff --git a/core/lib/types/src/tx/primitives/eip712_signature/member_types.rs b/core/lib/crypto_primitives/src/eip712_signature/member_types.rs similarity index 95% rename from core/lib/types/src/tx/primitives/eip712_signature/member_types.rs rename to core/lib/crypto_primitives/src/eip712_signature/member_types.rs index aecece572dd..65ad0140d0c 100644 --- a/core/lib/types/src/tx/primitives/eip712_signature/member_types.rs +++ b/core/lib/crypto_primitives/src/eip712_signature/member_types.rs @@ -1,9 +1,7 @@ +use web3::signing::keccak256; use zksync_basic_types::{Address, H256, U256}; -use crate::{ - tx::primitives::eip712_signature::typed_structure::{EncodedStructureMember, StructMember}, - web3::signing::keccak256, -}; +use crate::eip712_signature::typed_structure::{EncodedStructureMember, StructMember}; impl StructMember for String { const MEMBER_TYPE: &'static str = "string"; diff --git a/core/lib/types/src/tx/primitives/eip712_signature/mod.rs b/core/lib/crypto_primitives/src/eip712_signature/mod.rs similarity index 100% rename from core/lib/types/src/tx/primitives/eip712_signature/mod.rs rename to core/lib/crypto_primitives/src/eip712_signature/mod.rs diff --git a/core/lib/types/src/tx/primitives/eip712_signature/struct_builder.rs b/core/lib/crypto_primitives/src/eip712_signature/struct_builder.rs similarity index 98% rename from core/lib/types/src/tx/primitives/eip712_signature/struct_builder.rs rename to core/lib/crypto_primitives/src/eip712_signature/struct_builder.rs index 1b3260993ea..74bf13c91e8 100644 --- a/core/lib/types/src/tx/primitives/eip712_signature/struct_builder.rs +++ b/core/lib/crypto_primitives/src/eip712_signature/struct_builder.rs @@ -3,9 +3,7 @@ use std::collections::{BTreeMap, VecDeque}; use serde_json::Value; use zksync_basic_types::H256; -use crate::tx::primitives::eip712_signature::typed_structure::{ - EncodedStructureMember, StructMember, -}; +use crate::eip712_signature::typed_structure::{EncodedStructureMember, StructMember}; /// Interface that collects members of the structure into the structure of the EIP-712 standard. pub trait StructBuilder { diff --git a/core/lib/types/src/tx/primitives/eip712_signature/tests.rs b/core/lib/crypto_primitives/src/eip712_signature/tests.rs similarity index 100% rename from core/lib/types/src/tx/primitives/eip712_signature/tests.rs rename to core/lib/crypto_primitives/src/eip712_signature/tests.rs diff --git a/core/lib/types/src/tx/primitives/eip712_signature/typed_structure.rs b/core/lib/crypto_primitives/src/eip712_signature/typed_structure.rs similarity index 97% rename from core/lib/types/src/tx/primitives/eip712_signature/typed_structure.rs rename to core/lib/crypto_primitives/src/eip712_signature/typed_structure.rs index 421944e5d46..45ece03596c 100644 --- a/core/lib/types/src/tx/primitives/eip712_signature/typed_structure.rs +++ b/core/lib/crypto_primitives/src/eip712_signature/typed_structure.rs @@ -1,11 +1,9 @@ use serde::{Deserialize, Serialize}; use serde_json::Value; +use web3::signing::keccak256; +use zksync_basic_types::{L2ChainId, H256, U256}; -use crate::{ - tx::primitives::eip712_signature::struct_builder::{EncodeBuilder, StructBuilder, TypeBuilder}, - web3::signing::keccak256, - L2ChainId, H256, U256, -}; +use crate::eip712_signature::struct_builder::{EncodeBuilder, StructBuilder, TypeBuilder}; #[derive(Debug, Clone)] pub struct EncodedStructureMember { diff --git a/core/lib/types/src/tx/primitives/eip712_signature/utils.rs b/core/lib/crypto_primitives/src/eip712_signature/utils.rs similarity index 90% rename from core/lib/types/src/tx/primitives/eip712_signature/utils.rs rename to core/lib/crypto_primitives/src/eip712_signature/utils.rs index f338c017e2b..743d646ec58 100644 --- a/core/lib/types/src/tx/primitives/eip712_signature/utils.rs +++ b/core/lib/crypto_primitives/src/eip712_signature/utils.rs @@ -1,8 +1,6 @@ use serde_json::{Map, Value}; -use crate::tx::primitives::eip712_signature::typed_structure::{ - EIP712TypedStructure, Eip712Domain, -}; +use crate::eip712_signature::typed_structure::{EIP712TypedStructure, Eip712Domain}; /// Formats the data that needs to be signed in json according to the standard eip-712. /// Compatible with `eth_signTypedData` RPC call. diff --git a/core/lib/types/src/tx/primitives/mod.rs b/core/lib/crypto_primitives/src/lib.rs similarity index 100% rename from core/lib/types/src/tx/primitives/mod.rs rename to core/lib/crypto_primitives/src/lib.rs diff --git a/core/lib/types/src/tx/primitives/packed_eth_signature.rs b/core/lib/crypto_primitives/src/packed_eth_signature.rs similarity index 96% rename from core/lib/types/src/tx/primitives/packed_eth_signature.rs rename to core/lib/crypto_primitives/src/packed_eth_signature.rs index 635dfc8c4bd..d30ca253f67 100644 --- a/core/lib/types/src/tx/primitives/packed_eth_signature.rs +++ b/core/lib/crypto_primitives/src/packed_eth_signature.rs @@ -1,17 +1,15 @@ use serde::{Deserialize, Deserializer, Serialize, Serializer}; use thiserror::Error; +use web3::signing::keccak256; use zksync_basic_types::{Address, H256}; use zksync_utils::ZeroPrefixHexSerde; use crate::{ - tx::primitives::{ - ecdsa_signature::{ - public_to_address, recover, sign, Error as ParityCryptoError, KeyPair, - Signature as ETHSignature, - }, - eip712_signature::typed_structure::{EIP712TypedStructure, Eip712Domain}, + ecdsa_signature::{ + public_to_address, recover, sign, Error as ParityCryptoError, KeyPair, + Signature as ETHSignature, }, - web3::signing::keccak256, + eip712_signature::typed_structure::{EIP712TypedStructure, Eip712Domain}, }; /// Struct used for working with Ethereum signatures created using eth_sign (using geth, ethers.js, etc) diff --git a/core/lib/dal/src/blocks_web3_dal.rs b/core/lib/dal/src/blocks_web3_dal.rs index 4aad18a6686..8839770aee6 100644 --- a/core/lib/dal/src/blocks_web3_dal.rs +++ b/core/lib/dal/src/blocks_web3_dal.rs @@ -602,8 +602,6 @@ impl BlocksWeb3Dal<'_, '_> { l1_batches.l1_tx_count, l1_batches.l2_tx_count, l1_batches.hash AS "root_hash?", - l1_batches.commitment, - l1_batches.rollup_last_leaf_index, commit_tx.tx_hash AS "commit_tx_hash?", commit_tx.confirmed_at AS "committed_at?", prove_tx.tx_hash AS "prove_tx_hash?", diff --git a/core/lib/dal/src/models/storage_block.rs b/core/lib/dal/src/models/storage_block.rs index 68a39596bff..c7957162e8c 100644 --- a/core/lib/dal/src/models/storage_block.rs +++ b/core/lib/dal/src/models/storage_block.rs @@ -345,8 +345,6 @@ pub struct StorageL1BatchDetails { pub l2_fair_gas_price: i64, pub bootloader_code_hash: Option>, pub default_aa_code_hash: Option>, - pub commitment: Option>, - pub rollup_last_leaf_index: Option, } impl From for api::L1BatchDetails { @@ -393,8 +391,6 @@ impl From for api::L1BatchDetails { }; api::L1BatchDetails { base, - commitment: details.commitment.as_deref().map(H256::from_slice), - rollup_last_leaf_index: details.rollup_last_leaf_index.map(|a| a as u64), number: L1BatchNumber(details.number as u32), } } diff --git a/core/lib/eth_signer/src/json_rpc_signer.rs b/core/lib/eth_signer/src/json_rpc_signer.rs index a15749b237e..141fb9cb872 100644 --- a/core/lib/eth_signer/src/json_rpc_signer.rs +++ b/core/lib/eth_signer/src/json_rpc_signer.rs @@ -1,8 +1,6 @@ use jsonrpc_core::types::response::Output; use serde_json::Value; -use zksync_types::{ - tx::primitives::PackedEthSignature, Address, EIP712TypedStructure, Eip712Domain, H256, -}; +use zksync_types::{Address, EIP712TypedStructure, Eip712Domain, PackedEthSignature, H256}; use crate::{ error::{RpcSignerError, SignerError}, diff --git a/core/lib/eth_signer/src/lib.rs b/core/lib/eth_signer/src/lib.rs index a8297af91e2..34e343b69b4 100644 --- a/core/lib/eth_signer/src/lib.rs +++ b/core/lib/eth_signer/src/lib.rs @@ -2,9 +2,7 @@ use async_trait::async_trait; use error::SignerError; pub use json_rpc_signer::JsonRpcSigner; pub use pk_signer::PrivateKeySigner; -use zksync_types::{ - tx::primitives::PackedEthSignature, Address, EIP712TypedStructure, Eip712Domain, -}; +use zksync_types::{Address, EIP712TypedStructure, Eip712Domain, PackedEthSignature}; pub use crate::raw_ethereum_tx::TransactionParameters; diff --git a/core/lib/eth_signer/src/pk_signer.rs b/core/lib/eth_signer/src/pk_signer.rs index 4634046f571..9241b5ca9a1 100644 --- a/core/lib/eth_signer/src/pk_signer.rs +++ b/core/lib/eth_signer/src/pk_signer.rs @@ -1,7 +1,5 @@ use secp256k1::SecretKey; -use zksync_types::{ - tx::primitives::PackedEthSignature, Address, EIP712TypedStructure, Eip712Domain, H256, -}; +use zksync_types::{Address, EIP712TypedStructure, Eip712Domain, PackedEthSignature, H256}; use crate::{ raw_ethereum_tx::{Transaction, TransactionParameters}, diff --git a/core/lib/protobuf_config/src/wallets.rs b/core/lib/protobuf_config/src/wallets.rs index 52f7749c2d9..8ad41f67158 100644 --- a/core/lib/protobuf_config/src/wallets.rs +++ b/core/lib/protobuf_config/src/wallets.rs @@ -1,9 +1,11 @@ use anyhow::Context; +use zksync_basic_types::Address; use zksync_config::configs::{ + self, wallets::{EthSender, StateKeeper, Wallet}, - {self}, }; use zksync_protobuf::{required, ProtoRepr}; +use zksync_types::PackedEthSignature; use crate::{parse_h160, parse_h256, proto::wallets as proto}; @@ -12,20 +14,29 @@ impl ProtoRepr for proto::Wallets { fn read(&self) -> anyhow::Result { let eth_sender = if self.operator.is_some() && self.blob_operator.is_some() { let blob_operator = if let Some(blob_operator) = &self.blob_operator { - Some(Wallet::from_private_key(parse_h256( - required(&blob_operator.private_key).context("blob operator")?, - )?)) + Some(Wallet::from_private_key( + parse_h256(required(&blob_operator.private_key).context("blob operator")?)?, + blob_operator + .address + .as_ref() + .and_then(|a| parse_h160(&a).ok()), + )?) } else { None }; + + let operator_wallet = &self.operator.clone().context("Operator private key")?; + + let operator = Wallet::from_private_key( + parse_h256(required(&operator_wallet.private_key).context("operator")?)?, + operator_wallet + .address + .as_ref() + .and_then(|a| parse_h160(&a).ok()), + )?; + Some(EthSender { - operator: Wallet::from_private_key(parse_h256(required( - &self - .operator - .clone() - .context("Operator private key")? - .private_key, - )?)?), + operator, blob_operator, }) } else { @@ -33,9 +44,19 @@ impl ProtoRepr for proto::Wallets { }; let state_keeper = if let Some(fee_account) = &self.fee_account { - // TODO verify private_key and address + let address = parse_h160(required(&fee_account.address)?)?; + if let Some(private_key) = &fee_account.private_key { + let calculated_address = PackedEthSignature::address_from_private_key( + &parse_h256(private_key).context("Malformed private key")?, + )?; + if calculated_address != address { + anyhow::bail!( + "Malformed fee account wallet, address doesn't correspond private_key" + ) + } + } Some(StateKeeper { - fee_account: Wallet::from_address(parse_h160(required(&fee_account.address)?)?), + fee_account: Wallet::from_address(address), }) } else { None @@ -67,18 +88,16 @@ impl ProtoRepr for proto::Wallets { (None, None) }; - let fee_account = if let Some(state_keeper) = &this.state_keeper { - Some(proto::Wallet { + let fee_account = this + .state_keeper + .as_ref() + .map(|state_keeper| proto::Wallet { address: Some(state_keeper.fee_account.address().as_bytes().to_vec()), private_key: state_keeper .fee_account .private_key() .map(|a| a.as_bytes().to_vec()), - }) - } else { - None - }; - + }); Self { blob_operator, operator, diff --git a/core/lib/types/Cargo.toml b/core/lib/types/Cargo.toml index 2cf62660f52..0ed3646fc88 100644 --- a/core/lib/types/Cargo.toml +++ b/core/lib/types/Cargo.toml @@ -17,6 +17,7 @@ zksync_contracts.workspace = true zksync_mini_merkle_tree.workspace = true zksync_config.workspace = true zksync_protobuf.workspace = true +zksync_crypto_primitives.workspace = true anyhow.workspace = true chrono = { workspace = true, features = ["serde"] } diff --git a/core/lib/types/src/api/mod.rs b/core/lib/types/src/api/mod.rs index d1a6c2efe29..3203687b853 100644 --- a/core/lib/types/src/api/mod.rs +++ b/core/lib/types/src/api/mod.rs @@ -714,8 +714,6 @@ pub struct BlockDetails { #[serde(rename_all = "camelCase")] pub struct L1BatchDetails { pub number: L1BatchNumber, - pub commitment: Option, - pub rollup_last_leaf_index: Option, #[serde(flatten)] pub base: BlockDetailsBase, } diff --git a/core/lib/types/src/l2/mod.rs b/core/lib/types/src/l2/mod.rs index a14374728e3..6dc163a1a86 100644 --- a/core/lib/types/src/l2/mod.rs +++ b/core/lib/types/src/l2/mod.rs @@ -12,12 +12,12 @@ use crate::{ fee::{encoding_len, Fee}, helpers::unix_timestamp_ms, transaction_request::PaymasterParams, - tx::{primitives::PackedEthSignature, Execute}, + tx::Execute, web3::types::U64, Address, Bytes, EIP712TypedStructure, Eip712Domain, ExecuteTransactionCommon, InputData, - L2ChainId, Nonce, StructBuilder, Transaction, EIP_1559_TX_TYPE, EIP_2930_TX_TYPE, - EIP_712_TX_TYPE, H256, LEGACY_TX_TYPE, PRIORITY_OPERATION_L2_TX_TYPE, PROTOCOL_UPGRADE_TX_TYPE, - U256, + L2ChainId, Nonce, PackedEthSignature, StructBuilder, Transaction, EIP_1559_TX_TYPE, + EIP_2930_TX_TYPE, EIP_712_TX_TYPE, H256, LEGACY_TX_TYPE, PRIORITY_OPERATION_L2_TX_TYPE, + PROTOCOL_UPGRADE_TX_TYPE, U256, }; pub mod error; diff --git a/core/lib/types/src/lib.rs b/core/lib/types/src/lib.rs index 1fa4809c37a..6549dcccfc0 100644 --- a/core/lib/types/src/lib.rs +++ b/core/lib/types/src/lib.rs @@ -14,8 +14,9 @@ pub use l2::L2TxCommonData; pub use protocol_upgrade::{ProtocolUpgrade, ProtocolVersion}; use serde::{Deserialize, Serialize}; pub use storage::*; -pub use tx::{primitives::*, Execute}; +pub use tx::Execute; pub use zksync_basic_types::{protocol_version::ProtocolVersionId, vm_version::VmVersion, *}; +pub use zksync_crypto_primitives::*; use crate::{l2::TransactionType, protocol_upgrade::ProtocolUpgradeTxCommonData}; pub use crate::{Nonce, H256, U256, U64}; diff --git a/core/lib/types/src/tx/mod.rs b/core/lib/types/src/tx/mod.rs index 1371fa74ee7..8e40795baf6 100644 --- a/core/lib/types/src/tx/mod.rs +++ b/core/lib/types/src/tx/mod.rs @@ -14,8 +14,8 @@ pub use self::{execute::Execute, tx_execution_info::ExecutionMetrics}; use crate::{vm_trace::Call, Transaction}; pub mod execute; -pub mod primitives; pub mod tx_execution_info; +pub use zksync_crypto_primitives as primitives; #[derive(Debug, Clone, PartialEq)] pub struct TransactionExecutionResult { diff --git a/core/lib/zksync_core/src/lib.rs b/core/lib/zksync_core/src/lib.rs index e4a76ef17fa..e4cb41739b8 100644 --- a/core/lib/zksync_core/src/lib.rs +++ b/core/lib/zksync_core/src/lib.rs @@ -812,7 +812,6 @@ async fn add_state_keeper_to_task_futures( task_futures.push(tokio::spawn(miniblock_sealer.run())); let state_keeper = create_state_keeper( - &contracts_config, state_keeper_config, db_config, l2chain_id, diff --git a/core/lib/zksync_core/src/proof_data_handler/mod.rs b/core/lib/zksync_core/src/proof_data_handler/mod.rs index 4e58a1e8b2b..930c21f47dc 100644 --- a/core/lib/zksync_core/src/proof_data_handler/mod.rs +++ b/core/lib/zksync_core/src/proof_data_handler/mod.rs @@ -7,7 +7,6 @@ use zksync_config::configs::ProofDataHandlerConfig; use zksync_dal::{ConnectionPool, Core}; use zksync_object_store::ObjectStore; use zksync_prover_interface::api::{ProofGenerationDataRequest, SubmitProofRequest}; -use zksync_types::protocol_version::L1VerifierConfig; use crate::proof_data_handler::request_processor::RequestProcessor; diff --git a/core/lib/zksync_core/src/state_keeper/mod.rs b/core/lib/zksync_core/src/state_keeper/mod.rs index 5842e54f04d..d90b1e9e528 100644 --- a/core/lib/zksync_core/src/state_keeper/mod.rs +++ b/core/lib/zksync_core/src/state_keeper/mod.rs @@ -2,14 +2,10 @@ use std::sync::Arc; use tokio::sync::watch; use zksync_config::{ - configs::{ - chain::{MempoolConfig, NetworkConfig, StateKeeperConfig}, - ContractsConfigReduced, - }, + configs::chain::{MempoolConfig, StateKeeperConfig}, DBConfig, }; use zksync_dal::{ConnectionPool, Core}; -use zksync_object_store::ObjectStore; use zksync_types::L2ChainId; pub use self::{ @@ -39,7 +35,6 @@ pub(crate) mod updates; #[allow(clippy::too_many_arguments)] pub(crate) async fn create_state_keeper( - contracts_config: &ContractsConfigReduced, state_keeper_config: StateKeeperConfig, db_config: &DBConfig, l2chain_id: L2ChainId, From d2fcbf1257b71c980bdba2e1811cc898fb2e4a77 Mon Sep 17 00:00:00 2001 From: Danil Date: Wed, 27 Mar 2024 12:12:57 +0100 Subject: [PATCH 40/65] Fix node framework Signed-off-by: Danil --- core/bin/block_reverter/src/main.rs | 6 +- core/bin/zksync_server/src/main.rs | 7 +- core/lib/config/src/configs/eth_client.rs | 11 - core/lib/config/src/configs/mod.rs | 2 - core/lib/config/src/lib.rs | 5 +- core/lib/config/src/testonly.rs | 9 - core/lib/env_config/src/eth_client.rs | 44 --- core/lib/env_config/src/lib.rs | 1 - .../eth_client/src/clients/http/signing.rs | 17 +- core/lib/protobuf_config/src/wallets.rs | 1 - .../src/tx/primitives/ecdsa_signature.rs | 365 ++++++++++++++++++ .../eip712_signature/member_types.rs | 116 ++++++ .../src/tx/primitives/eip712_signature/mod.rs | 14 + .../eip712_signature/struct_builder.rs | 185 +++++++++ .../tx/primitives/eip712_signature/tests.rs | 209 ++++++++++ .../eip712_signature/typed_structure.rs | 186 +++++++++ .../tx/primitives/eip712_signature/utils.rs | 33 ++ core/lib/types/src/tx/primitives/mod.rs | 6 + .../src/tx/primitives/packed_eth_signature.rs | 230 +++++++++++ .../lib/zksync_core/src/block_reverter/mod.rs | 4 +- core/lib/zksync_core/src/lib.rs | 2 +- .../zksync_core/src/temp_config_store/mod.rs | 5 +- .../node/node_framework/examples/main_node.rs | 30 +- .../src/implementations/layers/eth_sender.rs | 13 +- .../layers/pk_signing_eth_client.rs | 11 +- 25 files changed, 1392 insertions(+), 120 deletions(-) delete mode 100644 core/lib/config/src/configs/eth_client.rs delete mode 100644 core/lib/env_config/src/eth_client.rs create mode 100644 core/lib/types/src/tx/primitives/ecdsa_signature.rs create mode 100644 core/lib/types/src/tx/primitives/eip712_signature/member_types.rs create mode 100644 core/lib/types/src/tx/primitives/eip712_signature/mod.rs create mode 100644 core/lib/types/src/tx/primitives/eip712_signature/struct_builder.rs create mode 100644 core/lib/types/src/tx/primitives/eip712_signature/tests.rs create mode 100644 core/lib/types/src/tx/primitives/eip712_signature/typed_structure.rs create mode 100644 core/lib/types/src/tx/primitives/eip712_signature/utils.rs create mode 100644 core/lib/types/src/tx/primitives/mod.rs create mode 100644 core/lib/types/src/tx/primitives/packed_eth_signature.rs diff --git a/core/bin/block_reverter/src/main.rs b/core/bin/block_reverter/src/main.rs index d25c915b030..0c00de87e7c 100644 --- a/core/bin/block_reverter/src/main.rs +++ b/core/bin/block_reverter/src/main.rs @@ -2,8 +2,7 @@ use anyhow::Context as _; use clap::{Parser, Subcommand}; use tokio::io::{self, AsyncReadExt}; use zksync_config::{ - configs::ObservabilityConfig, ContractsConfig, DBConfig, ETHClientConfig, ETHConfig, - PostgresConfig, + configs::ObservabilityConfig, ContractsConfig, DBConfig, ETHConfig, PostgresConfig, }; use zksync_core::block_reverter::{ BlockReverter, BlockReverterEthConfig, BlockReverterFlags, L1ExecutedBatchesRevert, NodeRole, @@ -89,12 +88,11 @@ async fn main() -> anyhow::Result<()> { let eth_sender = ETHConfig::from_env().context("ETHSenderConfig::from_env()")?; let db_config = DBConfig::from_env().context("DBConfig::from_env()")?; - let eth_client = ETHClientConfig::from_env().context("ETHClientConfig::from_env()")?; let default_priority_fee_per_gas = U256::from(eth_sender.gas_adjuster.default_priority_fee_per_gas); let contracts = ContractsConfig::from_env().context("ContractsConfig::from_env()")?; let postgres_config = PostgresConfig::from_env().context("PostgresConfig::from_env()")?; - let config = BlockReverterEthConfig::new(eth_sender, contracts, eth_client.web3_url.clone()); + let config = BlockReverterEthConfig::new(eth_sender, contracts); let connection_pool = ConnectionPool::::builder( postgres_config.master_url()?, diff --git a/core/bin/zksync_server/src/main.rs b/core/bin/zksync_server/src/main.rs index 357c023753c..321dd7ed05e 100644 --- a/core/bin/zksync_server/src/main.rs +++ b/core/bin/zksync_server/src/main.rs @@ -15,8 +15,8 @@ use zksync_config::{ FriWitnessGeneratorConfig, FriWitnessVectorGeneratorConfig, GeneralConfig, ObservabilityConfig, PrometheusConfig, ProofDataHandlerConfig, WitnessGeneratorConfig, }, - ApiConfig, ContractVerifierConfig, ContractsConfig, DBConfig, ETHClientConfig, ETHConfig, - ETHWatchConfig, GasAdjusterConfig, GenesisConfig, ObjectStoreConfig, PostgresConfig, + ApiConfig, ContractVerifierConfig, ContractsConfig, DBConfig, ETHConfig, ETHWatchConfig, + GasAdjusterConfig, GenesisConfig, ObjectStoreConfig, PostgresConfig, }; use zksync_core::{ genesis, genesis_init, initialize_components, is_genesis_needed, setup_sigint_handler, @@ -138,7 +138,6 @@ async fn main() -> anyhow::Result<()> { witness_generator_config: WitnessGeneratorConfig::from_env().ok(), api_config: ApiConfig::from_env().ok(), db_config: DBConfig::from_env().ok(), - eth_client_config: ETHClientConfig::from_env().ok(), eth_sender_config: ETHConfig::from_env().ok(), eth_watch_config: ETHWatchConfig::from_env().ok(), gas_adjuster_config: GasAdjusterConfig::from_env().ok(), @@ -185,7 +184,7 @@ async fn main() -> anyhow::Result<()> { } if opt.set_chain_id { - let eth_client = ETHClientConfig::from_env().context("EthClientConfig")?; + let eth_client = ETHConfig::from_env().context("EthClientConfig")?; let contracts = ContractsConfig::from_env().context("ContractsConfig")?; if let Some(state_transition_proxy_addr) = contracts.state_transition_proxy_addr { genesis::save_set_chain_id_tx( diff --git a/core/lib/config/src/configs/eth_client.rs b/core/lib/config/src/configs/eth_client.rs deleted file mode 100644 index 69b722f1f70..00000000000 --- a/core/lib/config/src/configs/eth_client.rs +++ /dev/null @@ -1,11 +0,0 @@ -// External uses -use serde::Deserialize; - -/// Configuration for the Ethereum gateways. -#[derive(Debug, Deserialize, Clone, PartialEq)] -pub struct ETHClientConfig { - /// Numeric identifier of the L1 network (e.g. `9` for localhost). - pub chain_id: u64, - /// Address of the Ethereum node API. - pub web3_url: String, -} diff --git a/core/lib/config/src/configs/mod.rs b/core/lib/config/src/configs/mod.rs index a5a3083935a..566e9775a56 100644 --- a/core/lib/config/src/configs/mod.rs +++ b/core/lib/config/src/configs/mod.rs @@ -5,7 +5,6 @@ pub use self::{ contract_verifier::ContractVerifierConfig, contracts::{ContractsConfig, ContractsConfigReduced}, database::{DBConfig, PostgresConfig}, - eth_client::ETHClientConfig, eth_sender::{ETHConfig, GasAdjusterConfig}, eth_watch::ETHWatchConfig, fri_proof_compressor::FriProofCompressorConfig, @@ -29,7 +28,6 @@ pub mod chain; pub mod contract_verifier; pub mod contracts; pub mod database; -pub mod eth_client; pub mod eth_sender; pub mod eth_watch; pub mod fri_proof_compressor; diff --git a/core/lib/config/src/lib.rs b/core/lib/config/src/lib.rs index 4ed375b9f5a..1a5c56ab091 100644 --- a/core/lib/config/src/lib.rs +++ b/core/lib/config/src/lib.rs @@ -1,9 +1,8 @@ #![allow(clippy::upper_case_acronyms, clippy::derive_partial_eq_without_eq)] pub use crate::configs::{ - ApiConfig, ContractVerifierConfig, ContractsConfig, DBConfig, ETHClientConfig, ETHConfig, - ETHWatchConfig, GasAdjusterConfig, GenesisConfig, ObjectStoreConfig, PostgresConfig, - SnapshotsCreatorConfig, + ApiConfig, ContractVerifierConfig, ContractsConfig, DBConfig, ETHConfig, ETHWatchConfig, + GasAdjusterConfig, GenesisConfig, ObjectStoreConfig, PostgresConfig, SnapshotsCreatorConfig, }; pub mod configs; diff --git a/core/lib/config/src/testonly.rs b/core/lib/config/src/testonly.rs index 9961d5f76b7..d50c46c9a8d 100644 --- a/core/lib/config/src/testonly.rs +++ b/core/lib/config/src/testonly.rs @@ -430,15 +430,6 @@ impl RandomConfig for configs::database::PostgresConfig { } } -impl RandomConfig for configs::ETHClientConfig { - fn sample(g: &mut Gen) -> Self { - Self { - chain_id: g.gen(), - web3_url: g.gen(), - } - } -} - impl RandomConfig for configs::ETHConfig { fn sample(g: &mut Gen) -> Self { Self { diff --git a/core/lib/env_config/src/eth_client.rs b/core/lib/env_config/src/eth_client.rs deleted file mode 100644 index 378ca84b0e2..00000000000 --- a/core/lib/env_config/src/eth_client.rs +++ /dev/null @@ -1,44 +0,0 @@ -use zksync_config::ETHClientConfig; - -use crate::{envy_load, FromEnv}; - -impl FromEnv for ETHClientConfig { - fn from_env() -> anyhow::Result { - let config: Self = envy_load("eth_client", "ETH_CLIENT_")?; - if config.web3_url.find(',').is_some() { - anyhow::bail!( - "Multiple web3 URLs aren't supported anymore. Provided invalid value: {}", - config.web3_url - ); - } - Ok(config) - } -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::test_utils::EnvMutex; - - static MUTEX: EnvMutex = EnvMutex::new(); - - fn expected_config() -> ETHClientConfig { - ETHClientConfig { - chain_id: 9, - web3_url: "http://127.0.0.1:8545".into(), - } - } - - #[test] - fn from_env() { - let mut lock = MUTEX.lock(); - let config = r#" - ETH_CLIENT_CHAIN_ID="9" - ETH_CLIENT_WEB3_URL="http://127.0.0.1:8545" - "#; - lock.set_env(config); - - let actual = ETHClientConfig::from_env().unwrap(); - assert_eq!(actual, expected_config()); - } -} diff --git a/core/lib/env_config/src/lib.rs b/core/lib/env_config/src/lib.rs index edc768b0be0..bf7d61668b9 100644 --- a/core/lib/env_config/src/lib.rs +++ b/core/lib/env_config/src/lib.rs @@ -7,7 +7,6 @@ mod chain; mod contract_verifier; mod contracts; mod database; -mod eth_client; mod eth_sender; mod eth_watch; mod fri_proof_compressor; diff --git a/core/lib/eth_client/src/clients/http/signing.rs b/core/lib/eth_client/src/clients/http/signing.rs index e048c4e7bb5..9e70ed7a088 100644 --- a/core/lib/eth_client/src/clients/http/signing.rs +++ b/core/lib/eth_client/src/clients/http/signing.rs @@ -1,7 +1,7 @@ use std::{fmt, sync::Arc}; use async_trait::async_trait; -use zksync_config::{configs::ContractsConfigReduced, ETHClientConfig, ETHConfig}; +use zksync_config::{configs::ContractsConfigReduced, ETHConfig}; use zksync_contracts::zksync_contract; use zksync_eth_signer::{raw_ethereum_tx::TransactionParameters, EthereumSigner, PrivateKeySigner}; use zksync_types::{ @@ -32,7 +32,7 @@ impl PKSigningClient { pub fn from_config( eth_sender: ÐConfig, contracts_config: &ContractsConfigReduced, - eth_client: ÐClientConfig, + l1_chain_id: L1ChainId, ) -> Self { // Gather required data from the config. // It's done explicitly to simplify getting rid of this function later. @@ -44,7 +44,7 @@ impl PKSigningClient { Self::from_config_inner( eth_sender, contracts_config, - eth_client, + l1_chain_id, operator_private_key, ) } @@ -53,7 +53,7 @@ impl PKSigningClient { pub fn from_config_blobs( eth_sender: ÐConfig, contracts_config: &ContractsConfigReduced, - eth_client: ÐClientConfig, + l1_chain_id: L1ChainId, ) -> Option { // Gather required data from the config. // It's done explicitly to simplify getting rid of this function later. @@ -62,7 +62,7 @@ impl PKSigningClient { Some(Self::from_config_inner( eth_sender, contracts_config, - eth_client, + l1_chain_id, operator_private_key, )) } @@ -94,19 +94,18 @@ impl PKSigningClient { fn from_config_inner( eth_sender: ÐConfig, contracts_config: &ContractsConfigReduced, - eth_client: ÐClientConfig, + l1_chain_id: L1ChainId, operator_private_key: H256, ) -> Self { - let main_node_url = ð_client.web3_url; let diamond_proxy_addr = contracts_config.diamond_proxy_addr; let default_priority_fee_per_gas = eth_sender.gas_adjuster.default_priority_fee_per_gas; - let l1_chain_id = eth_client.chain_id; + let main_node_url = ð_sender.web3_url; SigningClient::new_raw( operator_private_key, diamond_proxy_addr, default_priority_fee_per_gas.into(), - L1ChainId(l1_chain_id), + l1_chain_id, main_node_url, ) } diff --git a/core/lib/protobuf_config/src/wallets.rs b/core/lib/protobuf_config/src/wallets.rs index 8ad41f67158..0ce67afc763 100644 --- a/core/lib/protobuf_config/src/wallets.rs +++ b/core/lib/protobuf_config/src/wallets.rs @@ -1,5 +1,4 @@ use anyhow::Context; -use zksync_basic_types::Address; use zksync_config::configs::{ self, wallets::{EthSender, StateKeeper, Wallet}, diff --git a/core/lib/types/src/tx/primitives/ecdsa_signature.rs b/core/lib/types/src/tx/primitives/ecdsa_signature.rs new file mode 100644 index 00000000000..1cf5bec8a3d --- /dev/null +++ b/core/lib/types/src/tx/primitives/ecdsa_signature.rs @@ -0,0 +1,365 @@ +// Mostly copy-pasted from parity-crypto 0.9.0: +// https://github.com/paritytech/parity-common/blob/parity-crypto-v0.9.0/parity-crypto/src/publickey/keypair.rs +// https://github.com/paritytech/parity-common/blob/parity-crypto-v0.9.0/parity-crypto/src/publickey/ecdsa_signature.rs +// +// Reason: parity-crypto crate is not maintained, and it provides convenience wrappers over secp256k1 we rely on. +// For the time being, vendoring these files is more convenient than rewriting the rest of the codebase to use +// secp256k1 directly. +// +// Changes made: adapting the code for the newer version of secp256k1, stripping down some code we don't need, +// type replacements for the ease of use. + +// Copyright 2020 Parity Technologies +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Copied from parity-crypto 0.9.0 src/publickey/keypair.rs +// Key pair (public + secret) description. + +use std::{ + cmp::PartialEq, + fmt, + hash::{Hash, Hasher}, + ops::{Deref, DerefMut}, + str::FromStr, +}; + +use secp256k1::{ + ecdsa::{RecoverableSignature, RecoveryId}, + Message as SecpMessage, PublicKey, SecretKey, SECP256K1, +}; + +use crate::web3::{ + signing::keccak256, + types::{Address, H256, H512, H520}, +}; + +type Message = H256; +type Public = H512; +type Secret = H256; + +/// Convert public key into the address +pub(super) fn public_to_address(public: &Public) -> Address { + let hash = keccak256(public.as_bytes()); + let mut result = Address::zero(); + result.as_bytes_mut().copy_from_slice(&hash[12..]); + result +} + +#[derive(Debug, Clone, PartialEq)] +/// secp256k1 key pair +pub(super) struct KeyPair { + secret: Secret, + public: Public, +} + +impl fmt::Display for KeyPair { + fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> { + writeln!(f, "secret: {:x}", self.secret)?; + writeln!(f, "public: {:x}", self.public)?; + write!(f, "address: {:x}", self.address()) + } +} + +impl KeyPair { + /// Create a pair from secret key + pub(super) fn from_secret(secret: Secret) -> Result { + let context = &SECP256K1; + let s: SecretKey = SecretKey::from_slice(secret.as_bytes())?; + let pub_key = PublicKey::from_secret_key(context, &s); + let serialized = pub_key.serialize_uncompressed(); + + let mut public = Public::default(); + public.as_bytes_mut().copy_from_slice(&serialized[1..65]); + + let keypair = KeyPair { secret, public }; + + Ok(keypair) + } + + /// Returns public part of the keypair converted into Address + pub(super) fn address(&self) -> Address { + public_to_address(&self.public) + } +} + +// Copied from parity-crypto 0.9.0 `src/publickey/ecdsa_signature.rs` + +#[derive(Debug, thiserror::Error)] +pub enum Error { + #[error("secp256k1 error: {0}")] + Secp256k1(#[from] secp256k1::Error), + #[error("invalid signature")] + InvalidSignature, + #[error(transparent)] + Custom(anyhow::Error), +} + +/// Signature encoded as RSV components +#[repr(C)] +pub(super) struct Signature([u8; 65]); + +impl Signature { + /// Get a slice into the 'r' portion of the data. + pub(super) fn r(&self) -> &[u8] { + &self.0[0..32] + } + + /// Get a slice into the 's' portion of the data. + pub(super) fn s(&self) -> &[u8] { + &self.0[32..64] + } + + /// Get the recovery byte. + pub(super) fn v(&self) -> u8 { + self.0[64] + } + + /// Encode the signature into RSV array (V altered to be in "Electrum" notation). + pub(super) fn into_electrum(mut self) -> [u8; 65] { + self.0[64] += 27; + self.0 + } + + /// Parse bytes as a signature encoded as RSV (V in "Electrum" notation). + /// May return empty (invalid) signature if given data has invalid length. + #[cfg(test)] + pub(super) fn from_electrum(data: &[u8]) -> Self { + if data.len() != 65 || data[64] < 27 { + // fallback to empty (invalid) signature + return Signature::default(); + } + + let mut sig = [0u8; 65]; + sig.copy_from_slice(data); + sig[64] -= 27; + Signature(sig) + } + + /// Create a signature object from the RSV triple. + pub(super) fn from_rsv(r: &H256, s: &H256, v: u8) -> Self { + let mut sig = [0u8; 65]; + sig[0..32].copy_from_slice(r.as_ref()); + sig[32..64].copy_from_slice(s.as_ref()); + sig[64] = v; + Signature(sig) + } +} + +// manual implementation large arrays don't have trait impls by default. +impl PartialEq for Signature { + fn eq(&self, other: &Self) -> bool { + self.0 == other.0 + } +} + +// manual implementation required in Rust 1.13+, see `std::cmp::AssertParamIsEq`. +impl Eq for Signature {} + +// also manual for the same reason, but the pretty printing might be useful. +impl fmt::Debug for Signature { + fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> { + f.debug_struct("Signature") + .field("r", &hex::encode(&self.0[0..32])) + .field("s", &hex::encode(&self.0[32..64])) + .field("v", &hex::encode(&self.0[64..65])) + .finish() + } +} + +impl fmt::Display for Signature { + fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> { + write!(f, "{}", hex::encode(self.0)) + } +} + +impl FromStr for Signature { + type Err = Error; + + fn from_str(s: &str) -> Result { + match hex::decode(s) { + Ok(ref hex) if hex.len() == 65 => { + let mut data = [0; 65]; + data.copy_from_slice(&hex[0..65]); + Ok(Signature(data)) + } + _ => Err(Error::InvalidSignature), + } + } +} + +impl Default for Signature { + fn default() -> Self { + Signature([0; 65]) + } +} + +impl Hash for Signature { + fn hash(&self, state: &mut H) { + H520::from(self.0).hash(state); + } +} + +impl Clone for Signature { + fn clone(&self) -> Self { + Signature(self.0) + } +} + +impl From<[u8; 65]> for Signature { + fn from(s: [u8; 65]) -> Self { + Signature(s) + } +} + +impl From for H520 { + fn from(s: Signature) -> Self { + H520::from(s.0) + } +} + +impl From for Signature { + fn from(bytes: H520) -> Self { + Signature(bytes.into()) + } +} + +impl Deref for Signature { + type Target = [u8; 65]; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl DerefMut for Signature { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} + +/// Signs message with the given secret key. +/// Returns the corresponding signature. +pub(super) fn sign(secret: &Secret, message: &Message) -> Result { + let context = &SECP256K1; + let sec = SecretKey::from_slice(secret.as_ref())?; + let s = context.sign_ecdsa_recoverable(&SecpMessage::from_slice(&message[..])?, &sec); + let (rec_id, data) = s.serialize_compact(); + let mut data_arr = [0; 65]; + + // no need to check if s is low, it always is + data_arr[0..64].copy_from_slice(&data[0..64]); + data_arr[64] = rec_id.to_i32() as u8; + Ok(Signature(data_arr)) +} + +/// Recovers the public key from the signature for the message +pub(super) fn recover(signature: &Signature, message: &Message) -> Result { + let rsig = RecoverableSignature::from_compact( + &signature[0..64], + RecoveryId::from_i32(signature[64] as i32)?, + )?; + let pubkey = &SECP256K1.recover_ecdsa(&SecpMessage::from_slice(&message[..])?, &rsig)?; + let serialized = pubkey.serialize_uncompressed(); + let mut public = Public::default(); + public.as_bytes_mut().copy_from_slice(&serialized[1..65]); + Ok(public) +} + +#[cfg(test)] +mod tests { + use std::str::FromStr; + + use super::{recover, sign, KeyPair, Message, Secret, Signature}; + + #[test] + fn from_secret() { + let secret = Secret::from_slice( + &hex::decode("a100df7a048e50ed308ea696dc600215098141cb391e9527329df289f9383f65") + .unwrap(), + ); + let _ = KeyPair::from_secret(secret).unwrap(); + } + + #[test] + fn keypair_display() { + let expected = +"secret: a100df7a048e50ed308ea696dc600215098141cb391e9527329df289f9383f65 +public: 8ce0db0b0359ffc5866ba61903cc2518c3675ef2cf380a7e54bde7ea20e6fa1ab45b7617346cd11b7610001ee6ae5b0155c41cad9527cbcdff44ec67848943a4 +address: 5b073e9233944b5e729e46d618f0d8edf3d9c34a".to_owned(); + let secret = Secret::from_slice( + &hex::decode("a100df7a048e50ed308ea696dc600215098141cb391e9527329df289f9383f65") + .unwrap(), + ); + let kp = KeyPair::from_secret(secret).unwrap(); + assert_eq!(format!("{}", kp), expected); + } + + #[test] + fn vrs_conversion() { + // given + let secret = Secret::from_slice(&[1u8; 32]); + let message = + Message::from_str("0000000000000000000000000000000000000000000000000000000000000001") + .unwrap(); + let signature = sign(&secret, &message).expect("can sign a non-zero message"); + + // when + let vrs = signature.clone().into_electrum(); + let from_vrs = Signature::from_electrum(&vrs); + + // then + assert_eq!(signature, from_vrs); + } + + #[test] + fn signature_to_and_from_str() { + let secret = Secret::from_slice(&[1u8; 32]); + let message = + Message::from_str("0000000000000000000000000000000000000000000000000000000000000001") + .unwrap(); + let signature = sign(&secret, &message).expect("can sign a non-zero message"); + let string = format!("{}", signature); + let deserialized = Signature::from_str(&string).unwrap(); + assert_eq!(signature, deserialized); + } + + #[test] + fn sign_and_recover_public() { + let secret = Secret::from_slice(&[1u8; 32]); + let keypair = KeyPair::from_secret(secret).unwrap(); + let message = + Message::from_str("0000000000000000000000000000000000000000000000000000000000000001") + .unwrap(); + let signature = sign(&keypair.secret, &message).unwrap(); + assert_eq!(&keypair.public, &recover(&signature, &message).unwrap()); + } + + #[test] + fn sign_and_recover_public_works_with_zeroed_messages() { + let secret = Secret::from_slice(&[1u8; 32]); + let keypair = KeyPair::from_secret(secret).unwrap(); + let signature = sign(&keypair.secret, &Message::zero()).unwrap(); + let zero_message = Message::zero(); + assert_eq!( + &keypair.public, + &recover(&signature, &zero_message).unwrap() + ); + } + + #[test] + fn recover_allowing_all_zero_message_can_recover_from_all_zero_messages() { + let secret = Secret::from_slice(&[1u8; 32]); + let keypair = KeyPair::from_secret(secret).unwrap(); + let signature = sign(&keypair.secret, &Message::zero()).unwrap(); + let zero_message = Message::zero(); + assert_eq!( + &keypair.public, + &recover(&signature, &zero_message).unwrap() + ) + } +} diff --git a/core/lib/types/src/tx/primitives/eip712_signature/member_types.rs b/core/lib/types/src/tx/primitives/eip712_signature/member_types.rs new file mode 100644 index 00000000000..aecece572dd --- /dev/null +++ b/core/lib/types/src/tx/primitives/eip712_signature/member_types.rs @@ -0,0 +1,116 @@ +use zksync_basic_types::{Address, H256, U256}; + +use crate::{ + tx::primitives::eip712_signature::typed_structure::{EncodedStructureMember, StructMember}, + web3::signing::keccak256, +}; + +impl StructMember for String { + const MEMBER_TYPE: &'static str = "string"; + const IS_REFERENCE_TYPE: bool = false; + + fn get_inner_members(&self) -> Vec { + Vec::new() + } + + fn encode_member_data(&self) -> H256 { + keccak256(self.as_bytes()).into() + } +} + +impl StructMember for Address { + const MEMBER_TYPE: &'static str = "address"; + const IS_REFERENCE_TYPE: bool = false; + + fn get_inner_members(&self) -> Vec { + Vec::new() + } + + fn encode_member_data(&self) -> H256 { + H256::from(*self) + } +} + +impl StructMember for &[u8] { + const MEMBER_TYPE: &'static str = "bytes"; + const IS_REFERENCE_TYPE: bool = false; + + fn get_inner_members(&self) -> Vec { + Vec::new() + } + + fn encode_member_data(&self) -> H256 { + keccak256(self).into() + } +} + +impl StructMember for &[H256] { + const MEMBER_TYPE: &'static str = "bytes32[]"; + const IS_REFERENCE_TYPE: bool = false; + + fn get_inner_members(&self) -> Vec { + Vec::new() + } + + fn encode_member_data(&self) -> H256 { + let bytes: Vec = self + .iter() + .flat_map(|hash| hash.as_bytes().to_vec()) + .collect(); + keccak256(&bytes).into() + } +} + +impl StructMember for U256 { + const MEMBER_TYPE: &'static str = "uint256"; + const IS_REFERENCE_TYPE: bool = false; + + fn get_inner_members(&self) -> Vec { + Vec::new() + } + + fn encode_member_data(&self) -> H256 { + let mut bytes = [0u8; 32]; + self.to_big_endian(&mut bytes); + + bytes.into() + } +} + +impl StructMember for H256 { + const MEMBER_TYPE: &'static str = "uint256"; + const IS_REFERENCE_TYPE: bool = false; + + fn get_inner_members(&self) -> Vec { + Vec::new() + } + + fn encode_member_data(&self) -> H256 { + *self + } +} + +macro_rules! impl_primitive { + ($T: ident, $name:expr, $bit_size:expr) => { + impl StructMember for $T { + const MEMBER_TYPE: &'static str = $name; + const IS_REFERENCE_TYPE: bool = false; + fn get_inner_members(&self) -> Vec { + Vec::new() + } + fn encode_member_data(&self) -> H256 { + let mut bytes = [0u8; 32]; + let bytes_value = self.to_be_bytes(); + bytes[32 - $bit_size / 8..].copy_from_slice(&bytes_value); + + bytes.into() + } + } + }; +} + +impl_primitive!(u8, "uint8", 8); +impl_primitive!(u16, "uint16", 16); +impl_primitive!(u32, "uint32", 32); +impl_primitive!(u64, "uint64", 64); +impl_primitive!(u128, "uint128", 128); diff --git a/core/lib/types/src/tx/primitives/eip712_signature/mod.rs b/core/lib/types/src/tx/primitives/eip712_signature/mod.rs new file mode 100644 index 00000000000..81642cbf615 --- /dev/null +++ b/core/lib/types/src/tx/primitives/eip712_signature/mod.rs @@ -0,0 +1,14 @@ +//! This is implementation of a standard for hashing typed structured data for [EIP-712](https://eips.ethereum.org/EIPS/eip-712) signing standard. +//! +//! This module contains the necessary interfaces for obtaining a hash of the structure, which is later needed for EIP-712 signing. + +mod member_types; +pub mod struct_builder; +pub mod typed_structure; +pub mod utils; + +pub use struct_builder::*; +pub use typed_structure::*; + +#[cfg(test)] +mod tests; diff --git a/core/lib/types/src/tx/primitives/eip712_signature/struct_builder.rs b/core/lib/types/src/tx/primitives/eip712_signature/struct_builder.rs new file mode 100644 index 00000000000..1b3260993ea --- /dev/null +++ b/core/lib/types/src/tx/primitives/eip712_signature/struct_builder.rs @@ -0,0 +1,185 @@ +use std::collections::{BTreeMap, VecDeque}; + +use serde_json::Value; +use zksync_basic_types::H256; + +use crate::tx::primitives::eip712_signature::typed_structure::{ + EncodedStructureMember, StructMember, +}; + +/// Interface that collects members of the structure into the structure of the EIP-712 standard. +pub trait StructBuilder { + fn new() -> Self; + + fn add_member(&mut self, name: &str, member: &MEMBER); +} + +/// Builder for collecting information about types of nested structures. +pub(crate) struct TypeBuilder { + members: Vec, +} + +impl TypeBuilder { + pub fn get_inner_members(&self) -> Vec { + self.members.clone() + } +} + +impl StructBuilder for TypeBuilder { + fn new() -> Self { + Self { + members: Vec::new(), + } + } + + fn add_member(&mut self, name: &str, member: &MEMBER) { + self.members + .push(EncodedStructureMember::encode(name, member)); + } +} + +struct OuterTypeBuilder { + inner_members_queue: VecDeque, +} + +impl OuterTypeBuilder { + fn new() -> Self { + Self { + inner_members_queue: VecDeque::new(), + } + } + + fn add_member(&mut self, encoded_member: EncodedStructureMember) { + // If the type is not used by the structure, then it is possible not + // to process it as it is not included in the list of types of nested structures. + if encoded_member.is_reference_type { + self.inner_members_queue.push_back(encoded_member); + } + } + + fn build(mut self) -> BTreeMap { + // All nested structures must be added to the encoded type alphabetically, + // so we will support a red-black tree with a key by the name of the structure type. + let mut result = BTreeMap::new(); + + while let Some(front_element) = self.inner_members_queue.pop_front() { + if result.get(&front_element.member_type).is_some() { + continue; + } + + result.insert(front_element.member_type.clone(), front_element.clone()); + for inner_member in front_element.inner_members { + if inner_member.is_reference_type && result.get(&inner_member.member_type).is_none() + { + self.inner_members_queue.push_back(inner_member); + } + } + } + result + } +} + +// Builder that encodes type information and structure data for for hashing the structure according to the EIP-712 standard. +pub(crate) struct EncodeBuilder { + members: Vec<(EncodedStructureMember, H256)>, +} + +impl EncodeBuilder { + /// Returns the concatenation of the encoded member values in the order that they appear in the type. + pub fn encode_data(&self) -> Vec { + // `encodeData(s : 𝕊) = enc(value₁) ‖ enc(value₂) ‖ … ‖ enc(valueₙ).` + self.members.iter().map(|(_, data)| *data).collect() + } + + /// Return the encoded structure type as `name ‖ "(" ‖ member₁ ‖ "," ‖ member₂ ‖ "," ‖ … ‖ memberₙ ")"`. + /// + /// If the struct type references other struct types (and these in turn reference even more struct types), + /// then the set of referenced struct types is collected, sorted by name and appended to the encoding. + pub fn encode_type(&self, type_name: &str) -> String { + let mut result = String::new(); + + let mut outer_members_builder = OuterTypeBuilder::new(); + for (member, _) in self.members.iter() { + outer_members_builder.add_member(member.clone()); + } + let outer_members = outer_members_builder.build(); + + // Collecting all members of the structure as a coded structure. + let inner_member = { + let member_type = type_name.to_string(); + let inner_members = self + .members + .iter() + .cloned() + .map(|(encoded_struct, _)| encoded_struct) + .collect::>(); + + EncodedStructureMember { + member_type, + name: String::default(), + is_reference_type: true, + inner_members, + } + }; + + result.push_str(&inner_member.get_encoded_type()); + for (_, outer_member) in outer_members { + result.push_str(&outer_member.get_encoded_type()); + } + + result + } + + /// Return the encoded structure type as `{ member_type: [{"name": member_name₁, "type": member_type₁}, ...] }`. + /// + /// If the struct type references other struct types (and these in turn reference even more struct types), + /// then the set of referenced struct types is collected, sorted by name and appended to the encoding. + pub fn get_json_types(&self, type_name: &str) -> Vec { + let mut result = Vec::new(); + + let mut outer_members_builder = OuterTypeBuilder::new(); + for (member, _) in self.members.iter() { + outer_members_builder.add_member(member.clone()); + } + let outer_members = outer_members_builder.build(); + + // Collecting all members of the structure as a coded structure. + let inner_member = { + let member_type = type_name.to_string(); + let inner_members = self + .members + .iter() + .cloned() + .map(|(encoded_struct, _)| encoded_struct) + .collect::>(); + + EncodedStructureMember { + member_type, + name: String::default(), + is_reference_type: true, + inner_members, + } + }; + + result.push(inner_member.get_json_types()); + for (_, outer_member) in outer_members { + result.push(outer_member.get_json_types()); + } + + result + } +} + +impl StructBuilder for EncodeBuilder { + fn new() -> Self { + Self { + members: Vec::new(), + } + } + + fn add_member(&mut self, name: &str, member: &MEMBER) { + let encoded_data = member.encode_member_data(); + self.members + .push((EncodedStructureMember::encode(name, member), encoded_data)); + } +} diff --git a/core/lib/types/src/tx/primitives/eip712_signature/tests.rs b/core/lib/types/src/tx/primitives/eip712_signature/tests.rs new file mode 100644 index 00000000000..8bfd14b45c4 --- /dev/null +++ b/core/lib/types/src/tx/primitives/eip712_signature/tests.rs @@ -0,0 +1,209 @@ +use std::str::FromStr; + +use serde::Serialize; +use zksync_basic_types::{Address, H256, U256}; + +use crate::{ + tx::primitives::{ + eip712_signature::{ + struct_builder::StructBuilder, + typed_structure::{EIP712TypedStructure, Eip712Domain}, + utils::get_eip712_json, + }, + PackedEthSignature, + }, + web3::signing::keccak256, +}; + +#[derive(Clone, Serialize)] +struct Person { + name: String, + wallet: Address, +} + +impl EIP712TypedStructure for Person { + const TYPE_NAME: &'static str = "Person"; + + fn build_structure(&self, builder: &mut BUILDER) { + builder.add_member("name", &self.name); + builder.add_member("wallet", &self.wallet); + } +} + +#[derive(Clone, Serialize)] +struct Mail { + from: Person, + to: Person, + contents: String, +} + +impl EIP712TypedStructure for Mail { + const TYPE_NAME: &'static str = "Mail"; + fn build_structure(&self, builder: &mut BUILDER) { + builder.add_member("from", &self.from); + builder.add_member("to", &self.to); + builder.add_member("contents", &self.contents); + } +} + +#[test] +fn test_encode_eip712_typed_struct() { + let domain = Eip712Domain { + name: "Ether Mail".to_owned(), + version: "1".to_owned(), + chain_id: U256::from(1u8), + }; + + let message = Mail { + from: Person { + name: "Cow".to_owned(), + wallet: Address::from_str("CD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826").unwrap(), + }, + to: Person { + name: "Bob".to_owned(), + wallet: Address::from_str("bBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB").unwrap(), + }, + contents: "Hello, Bob!".to_string(), + }; + + assert_eq!( + &message.encode_type(), + "Mail(Person from,Person to,string contents)Person(string name,address wallet)" + ); + + assert_eq!( + &message.encode_data()[..], + [ + H256::from_str("fc71e5fa27ff56c350aa531bc129ebdf613b772b6604664f5d8dbe21b85eb0c8") + .unwrap(), + H256::from_str("cd54f074a4af31b4411ff6a60c9719dbd559c221c8ac3492d9d872b041d703d1") + .unwrap(), + H256::from_str("b5aadf3154a261abdd9086fc627b61efca26ae5702701d05cd2305f7c52a2fc8") + .unwrap() + ] + ); + + assert_eq!( + message.hash_struct(), + H256::from_str("c52c0ee5d84264471806290a3f2c4cecfc5490626bf912d01f240d7a274b371e").unwrap() + ); + + assert_eq!( + &domain.encode_type(), + "EIP712Domain(string name,string version,uint256 chainId)" + ); + + assert_eq!( + &domain.encode_data()[..], + [ + H256::from_str("c70ef06638535b4881fafcac8287e210e3769ff1a8e91f1b95d6246e61e4d3c6") + .unwrap(), + H256::from_str("c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6") + .unwrap(), + H256::from_str("0000000000000000000000000000000000000000000000000000000000000001") + .unwrap(), + ] + ); + + assert_eq!( + domain.hash_struct(), + H256::from_str("3b98b16ad068d9d8854a6a416bd476de44a4933ec5104d7c786a422ab262ed14").unwrap() + ); + + let private_key = keccak256(b"cow").into(); + let address_owner = PackedEthSignature::address_from_private_key(&private_key).unwrap(); + + let signature = PackedEthSignature::sign_typed_data(&private_key, &domain, &message).unwrap(); + let signed_bytes = PackedEthSignature::typed_data_to_signed_bytes(&domain, &message); + + assert_eq!( + address_owner, + signature.signature_recover_signer(&signed_bytes).unwrap() + ); +} + +#[test] +fn test_get_eip712_json() { + let domain = Eip712Domain { + name: "Ether Mail".to_owned(), + version: "1".to_owned(), + chain_id: U256::from(1u8), + }; + + let message = Mail { + from: Person { + name: "Cow".to_owned(), + wallet: Address::from_str("d94e3dc39d4cad1dad634e7eb585a57a19dc7efe").unwrap(), + }, + to: Person { + name: "Bob".to_owned(), + wallet: Address::from_str("d94e3dc39d4cad1dad634e7eb585a57a19dc7efe").unwrap(), + }, + contents: "Hello, Bob!".to_string(), + }; + + let expected_value = r#"{ + "domain":{ + "chainId":"0x1", + "name":"Ether Mail", + "version":"1" + }, + "message":{ + "contents":"Hello, Bob!", + "from":{ + "name":"Cow", + "wallet":"0xd94e3dc39d4cad1dad634e7eb585a57a19dc7efe" + }, + "to":{ + "name":"Bob", + "wallet":"0xd94e3dc39d4cad1dad634e7eb585a57a19dc7efe" + } + }, + "primaryType":"Mail", + "types":{ + "EIP712Domain":[ + { + "name":"name", + "type":"string" + }, + { + "name":"version", + "type":"string" + }, + { + "name":"chainId", + "type":"uint256" + } + ], + "Mail":[ + { + "name":"from", + "type":"Person" + }, + { + "name":"to", + "type":"Person" + }, + { + "name":"contents", + "type":"string" + } + ], + "Person":[ + { + "name":"name", + "type":"string" + }, + { + "name":"wallet", + "type":"address" + } + ] + } + }"#; + + assert_eq!( + get_eip712_json(&domain, &message), + serde_json::from_str::(expected_value).unwrap() + ); +} diff --git a/core/lib/types/src/tx/primitives/eip712_signature/typed_structure.rs b/core/lib/types/src/tx/primitives/eip712_signature/typed_structure.rs new file mode 100644 index 00000000000..421944e5d46 --- /dev/null +++ b/core/lib/types/src/tx/primitives/eip712_signature/typed_structure.rs @@ -0,0 +1,186 @@ +use serde::{Deserialize, Serialize}; +use serde_json::Value; + +use crate::{ + tx::primitives::eip712_signature::struct_builder::{EncodeBuilder, StructBuilder, TypeBuilder}, + web3::signing::keccak256, + L2ChainId, H256, U256, +}; + +#[derive(Debug, Clone)] +pub struct EncodedStructureMember { + /// Type identifier. + pub member_type: String, + /// Name identifier. + pub name: String, + /// Flag denoting structure or elementary type. + pub is_reference_type: bool, + // Members that are inside this member. + pub inner_members: Vec, +} + +impl EncodedStructureMember { + pub fn encode(name: &str, member: &MEMBER) -> Self { + Self { + member_type: member.member_type(), + name: name.to_string(), + is_reference_type: member.is_reference_type(), + inner_members: member.get_inner_members(), + } + } + + /// Encodes the structure as `name ‖ "(" ‖ member₁ ‖ "," ‖ member₂ ‖ "," ‖ … ‖ memberₙ ")"`. + pub fn get_encoded_type(&self) -> String { + let mut encoded_type = String::new(); + encoded_type.push_str(&self.member_type); + encoded_type.push('('); + + let mut members = self.inner_members.iter(); + + if let Some(member) = members.next() { + encoded_type.push_str(&member.member_type); + encoded_type.push(' '); + encoded_type.push_str(&member.name); + } + for member in members { + encoded_type.push(','); + encoded_type.push_str(&member.member_type); + encoded_type.push(' '); + encoded_type.push_str(&member.name); + } + + encoded_type.push(')'); + + encoded_type + } + + /// Encodes the structure as json according to principle `{ member_type: [{"name": member_name₁, "type": member_type₁}, ...] }`. + pub fn get_json_types(&self) -> Value { + let mut members = Vec::new(); + for member in &self.inner_members { + let member_value = serde_json::json!({ + "name": member.name, + "type": member.member_type, + }); + members.push(member_value); + } + + serde_json::json!({ &self.member_type: members }) + } +} + +pub trait StructMember { + const MEMBER_TYPE: &'static str; + const IS_REFERENCE_TYPE: bool; + + fn member_type(&self) -> String { + Self::MEMBER_TYPE.to_string() + } + + fn is_reference_type(&self) -> bool { + Self::IS_REFERENCE_TYPE + } + + fn get_inner_members(&self) -> Vec; + + fn encode_member_data(&self) -> H256; +} + +impl StructMember for TypedStructure { + const MEMBER_TYPE: &'static str = Self::TYPE_NAME; + const IS_REFERENCE_TYPE: bool = true; + + fn get_inner_members(&self) -> Vec { + let mut builder = TypeBuilder::new(); + self.build_structure(&mut builder); + + builder.get_inner_members() + } + + fn encode_member_data(&self) -> H256 { + self.hash_struct() + } +} + +/// Interface for defining the structure for the EIP712 signature. +pub trait EIP712TypedStructure: Serialize { + const TYPE_NAME: &'static str; + + fn build_structure(&self, builder: &mut BUILDER); + + fn encode_type(&self) -> String { + let mut builder = EncodeBuilder::new(); + self.build_structure(&mut builder); + + builder.encode_type(Self::TYPE_NAME) + } + + fn encode_data(&self) -> Vec { + let mut builder = EncodeBuilder::new(); + self.build_structure(&mut builder); + + builder.encode_data() + } + + fn hash_struct(&self) -> H256 { + // `hashStruct(s : 𝕊) = keccak256(keccak256(encodeType(typeOf(s))) ‖ encodeData(s)).` + let type_hash = { + let encode_type = self.encode_type(); + keccak256(encode_type.as_bytes()) + }; + let encode_data = self.encode_data(); + + let mut bytes = Vec::new(); + bytes.extend_from_slice(&type_hash); + for data in encode_data { + bytes.extend_from_slice(data.as_bytes()); + } + + keccak256(&bytes).into() + } + + fn get_json_types(&self) -> Vec { + let mut builder = EncodeBuilder::new(); + self.build_structure(&mut builder); + + builder.get_json_types(Self::TYPE_NAME) + } +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct Eip712Domain { + /// The user readable name of signing domain, i.e. the name of the DApp or the protocol. + pub name: String, + /// The current major version of the signing domain. Signatures from different versions are not compatible. + pub version: String, + /// The [EIP-155](https://eips.ethereum.org/EIPS/eip-155) chain id. + pub chain_id: U256, +} + +impl Eip712Domain { + /// Name of the protocol. + pub const NAME: &'static str = "zkSync"; + /// Version of the protocol. While there may be `2.x` releases, the minor release version bump + /// should not be breaking, meaning that clients from the `2.x-1` version should be able to communicate + /// with zkSync server. Thus `VERSION` corresponds to the major version only. + pub const VERSION: &'static str = "2"; + + pub fn new(chain_id: L2ChainId) -> Self { + Self { + name: Self::NAME.to_string(), + version: Self::VERSION.to_string(), + chain_id: U256::from(chain_id.as_u64()), + } + } +} + +impl EIP712TypedStructure for Eip712Domain { + const TYPE_NAME: &'static str = "EIP712Domain"; + + fn build_structure(&self, builder: &mut BUILDER) { + builder.add_member("name", &self.name); + builder.add_member("version", &self.version); + builder.add_member("chainId", &self.chain_id); + } +} diff --git a/core/lib/types/src/tx/primitives/eip712_signature/utils.rs b/core/lib/types/src/tx/primitives/eip712_signature/utils.rs new file mode 100644 index 00000000000..f338c017e2b --- /dev/null +++ b/core/lib/types/src/tx/primitives/eip712_signature/utils.rs @@ -0,0 +1,33 @@ +use serde_json::{Map, Value}; + +use crate::tx::primitives::eip712_signature::typed_structure::{ + EIP712TypedStructure, Eip712Domain, +}; + +/// Formats the data that needs to be signed in json according to the standard eip-712. +/// Compatible with `eth_signTypedData` RPC call. +pub fn get_eip712_json( + eip712_domain: &Eip712Domain, + typed_struct: &T, +) -> Value { + let types = { + let mut res = Map::new(); + + let mut vec_types = eip712_domain.get_json_types(); + vec_types.append(&mut typed_struct.get_json_types()); + + for mut member_type in vec_types { + if let Some(member_type) = member_type.as_object_mut() { + res.append(member_type); + } + } + res + }; + + serde_json::json!({ + "primaryType": T::TYPE_NAME, + "domain": serde_json::to_value(eip712_domain).expect("serialization fail"), + "message": serde_json::to_value(typed_struct).expect("serialization fail"), + "types": serde_json::to_value(types).expect("serialization fail"), + }) +} diff --git a/core/lib/types/src/tx/primitives/mod.rs b/core/lib/types/src/tx/primitives/mod.rs new file mode 100644 index 00000000000..1e486837c96 --- /dev/null +++ b/core/lib/types/src/tx/primitives/mod.rs @@ -0,0 +1,6 @@ +pub(crate) mod ecdsa_signature; +pub mod eip712_signature; +pub mod packed_eth_signature; + +pub use eip712_signature::*; +pub use packed_eth_signature::*; diff --git a/core/lib/types/src/tx/primitives/packed_eth_signature.rs b/core/lib/types/src/tx/primitives/packed_eth_signature.rs new file mode 100644 index 00000000000..635dfc8c4bd --- /dev/null +++ b/core/lib/types/src/tx/primitives/packed_eth_signature.rs @@ -0,0 +1,230 @@ +use serde::{Deserialize, Deserializer, Serialize, Serializer}; +use thiserror::Error; +use zksync_basic_types::{Address, H256}; +use zksync_utils::ZeroPrefixHexSerde; + +use crate::{ + tx::primitives::{ + ecdsa_signature::{ + public_to_address, recover, sign, Error as ParityCryptoError, KeyPair, + Signature as ETHSignature, + }, + eip712_signature::typed_structure::{EIP712TypedStructure, Eip712Domain}, + }, + web3::signing::keccak256, +}; + +/// Struct used for working with Ethereum signatures created using eth_sign (using geth, ethers.js, etc) +/// message is serialized as 65 bytes long `0x` prefixed string. +/// +/// Some notes on implementation of methods of this structure: +/// +/// Ethereum signed message produced by most clients contains v where v = 27 + recovery_id(0,1,2,3), +/// but for some clients v = recovery_id(0,1,2,3). +/// Library that we use for signature verification (written for bitcoin) expects v = recovery_id +/// +/// That is why: +/// 1) when we create this structure by deserialization of message produced by user +/// we subtract 27 from v in `ETHSignature` if necessary and store it in the `ETHSignature` structure this way. +/// 2) When we serialize/create this structure we add 27 to v in `ETHSignature`. +/// +/// This way when we have methods that consumes &self we can be sure that ETHSignature::recover_signer works +/// And we can be sure that we are compatible with Ethereum clients. +/// +#[derive(Debug, Clone, PartialEq, Eq, Default)] +pub struct PackedEthSignature(ETHSignature); + +impl PackedEthSignature { + pub fn serialize_packed(&self) -> [u8; 65] { + // adds 27 to v + self.0.clone().into_electrum() + } + + fn deserialize_signature(bytes: &[u8]) -> Result<[u8; 65], DeserializeError> { + if bytes.len() != 65 { + return Err(DeserializeError::IncorrectSignatureLength); + } + + let mut bytes_array = [0u8; 65]; + bytes_array.copy_from_slice(bytes); + Ok(bytes_array) + } + + pub fn deserialize_packed(bytes: &[u8]) -> Result { + let mut signature = Self::deserialize_signature(bytes)?; + if signature[64] >= 27 { + signature[64] -= 27; + } + + Ok(PackedEthSignature(ETHSignature::from(signature))) + } + + /// Unlike the `deserialize_packed` packed signature, this method does not make sure that the `v` value is in the range [0, 3]. + /// This one should be generally avoided and be used only in places where preservation of the original `v` is important. + pub fn deserialize_packed_no_v_check(bytes: &[u8]) -> Result { + let signature = Self::deserialize_signature(bytes)?; + Ok(PackedEthSignature(ETHSignature::from(signature))) + } + + pub fn sign_raw( + private_key: &H256, + signed_bytes: &H256, + ) -> Result { + let signature = sign(private_key, signed_bytes)?; + Ok(PackedEthSignature(signature)) + } + + /// Signs typed struct using Ethereum private key by EIP-712 signature standard. + /// Result of this function is the equivalent of RPC calling `eth_signTypedData`. + pub fn sign_typed_data( + private_key: &H256, + domain: &Eip712Domain, + typed_struct: &impl EIP712TypedStructure, + ) -> Result { + let signed_bytes = H256::from(Self::typed_data_to_signed_bytes(domain, typed_struct).0); + let signature = sign(private_key, &signed_bytes)?; + Ok(PackedEthSignature(signature)) + } + + pub fn typed_data_to_signed_bytes( + domain: &Eip712Domain, + typed_struct: &impl EIP712TypedStructure, + ) -> H256 { + let mut bytes = Vec::new(); + bytes.extend_from_slice("\x19\x01".as_bytes()); + bytes.extend_from_slice(domain.hash_struct().as_bytes()); + bytes.extend_from_slice(typed_struct.hash_struct().as_bytes()); + keccak256(&bytes).into() + } + + pub fn message_to_signed_bytes(msg: &[u8]) -> H256 { + keccak256(msg).into() + } + + /// Checks signature and returns Ethereum address of the signer. + /// message should be the same message that was passed to `eth.sign`(or similar) method + /// as argument. No hashing and prefixes required. + pub fn signature_recover_signer( + &self, + signed_bytes: &H256, + ) -> Result { + let signed_bytes = H256::from_slice(&signed_bytes.0); + let public_key = recover(&self.0, &signed_bytes)?; + let address = public_to_address(&public_key); + Ok(Address::from(address.0)) + } + + /// Get Ethereum address from private key. + pub fn address_from_private_key(private_key: &H256) -> Result { + let private_key = H256::from_slice(&private_key.0); + let address = KeyPair::from_secret(private_key)?.address(); + Ok(Address::from(address.0)) + } + + pub fn from_rsv(r: &H256, s: &H256, v: u8) -> Self { + let r = H256::from_slice(&r.0); + let s = H256::from_slice(&s.0); + PackedEthSignature(ETHSignature::from_rsv(&r, &s, v)) + } + + pub fn r(&self) -> &[u8] { + self.0.r() + } + pub fn s(&self) -> &[u8] { + self.0.s() + } + pub fn v(&self) -> u8 { + self.0.v() + } + pub fn v_with_chain_id(&self, chain_id: u64) -> u64 { + self.0.v() as u64 + 35 + chain_id * 2 + } + pub fn unpack_v(v: u64) -> Result<(u8, Option), ParityCryptoError> { + if v == 27 { + return Ok((0, None)); + } else if v == 28 { + return Ok((1, None)); + } else if v >= 35 { + let chain_id = (v - 35) >> 1; + let v = v - 35 - chain_id * 2; + if v == 0 { + return Ok((0, Some(chain_id))); + } else if v == 1 { + return Ok((1, Some(chain_id))); + } + } + + Err(ParityCryptoError::Custom(anyhow::format_err!("Invalid v"))) + } +} + +#[derive(Debug, Error, PartialEq)] +pub enum DeserializeError { + #[error("Eth signature length should be 65 bytes")] + IncorrectSignatureLength, +} + +impl Serialize for PackedEthSignature { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + let packed_signature = self.serialize_packed(); + ZeroPrefixHexSerde::serialize(&packed_signature, serializer) + } +} + +impl<'de> Deserialize<'de> for PackedEthSignature { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let bytes = ZeroPrefixHexSerde::deserialize(deserializer)?; + Self::deserialize_packed(&bytes).map_err(serde::de::Error::custom) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn unpack_v_0() { + assert_eq!(PackedEthSignature::unpack_v(27).unwrap(), (0, None)); + } + + #[test] + fn unpack_v_1() { + assert_eq!(PackedEthSignature::unpack_v(28).unwrap(), (1, None)); + } + + #[test] + fn unpack_wrong_v_10_without_chain_id() { + assert!(PackedEthSignature::unpack_v(10).is_err()); + } + + #[test] + fn unpack_wrong_v_30_without_chain_id() { + assert!(PackedEthSignature::unpack_v(30).is_err()); + } + + #[test] + fn unpack_v_0_with_chain_id_0() { + assert_eq!(PackedEthSignature::unpack_v(35).unwrap(), (0, Some(0))); + } + + #[test] + fn unpack_v_1_with_chain_id_0() { + assert_eq!(PackedEthSignature::unpack_v(36).unwrap(), (1, Some(0))); + } + + #[test] + fn unpack_v_1_with_chain_id_11() { + assert_eq!(PackedEthSignature::unpack_v(58).unwrap(), (1, Some(11))); + } + + #[test] + fn unpack_v_1_with_chain_id_270() { + assert_eq!(PackedEthSignature::unpack_v(576).unwrap(), (1, Some(270))); + } +} diff --git a/core/lib/zksync_core/src/block_reverter/mod.rs b/core/lib/zksync_core/src/block_reverter/mod.rs index 0dbbd43e171..08138e48a18 100644 --- a/core/lib/zksync_core/src/block_reverter/mod.rs +++ b/core/lib/zksync_core/src/block_reverter/mod.rs @@ -53,7 +53,7 @@ pub struct BlockReverterEthConfig { } impl BlockReverterEthConfig { - pub fn new(eth_config: ETHConfig, contract: ContractsConfig, web3_url: String) -> Self { + pub fn new(eth_config: ETHConfig, contract: ContractsConfig) -> Self { let pk = eth_config .sender .private_key() @@ -62,7 +62,7 @@ impl BlockReverterEthConfig { .expect("Failed to get address from private key"); Self { - eth_client_url: web3_url, + eth_client_url: eth_config.web3_url, reverter_private_key: pk, reverter_address: operator_address, diamond_proxy_addr: contract.diamond_proxy_addr, diff --git a/core/lib/zksync_core/src/lib.rs b/core/lib/zksync_core/src/lib.rs index e4cb41739b8..27ab3da14bd 100644 --- a/core/lib/zksync_core/src/lib.rs +++ b/core/lib/zksync_core/src/lib.rs @@ -13,7 +13,7 @@ use fee_model::{ApiFeeInputProvider, BatchFeeModelInputProvider, MainNodeFeeInpu use multivm::zk_evm_latest::ethereum_types::H256; use prometheus_exporter::PrometheusExporterConfig; use prover_dal::Prover; -use temp_config_store::{Secrets, TempConfigStore}; +use temp_config_store::Secrets; use tokio::{ sync::{oneshot, watch}, task::JoinHandle, diff --git a/core/lib/zksync_core/src/temp_config_store/mod.rs b/core/lib/zksync_core/src/temp_config_store/mod.rs index b42284b34f4..7f393f48949 100644 --- a/core/lib/zksync_core/src/temp_config_store/mod.rs +++ b/core/lib/zksync_core/src/temp_config_store/mod.rs @@ -13,8 +13,8 @@ use zksync_config::{ FriWitnessGeneratorConfig, FriWitnessVectorGeneratorConfig, GeneralConfig, PrometheusConfig, ProofDataHandlerConfig, WitnessGeneratorConfig, }, - ApiConfig, ContractVerifierConfig, DBConfig, ETHClientConfig, ETHConfig, ETHWatchConfig, - GasAdjusterConfig, ObjectStoreConfig, PostgresConfig, + ApiConfig, ContractVerifierConfig, DBConfig, ETHConfig, ETHWatchConfig, GasAdjusterConfig, + ObjectStoreConfig, PostgresConfig, }; use zksync_protobuf::{read_optional, repr::ProtoRepr, ProtoFmt}; @@ -62,7 +62,6 @@ pub struct TempConfigStore { pub witness_generator_config: Option, pub api_config: Option, pub db_config: Option, - pub eth_client_config: Option, pub eth_sender_config: Option, pub eth_watch_config: Option, pub gas_adjuster_config: Option, diff --git a/core/node/node_framework/examples/main_node.rs b/core/node/node_framework/examples/main_node.rs index f65e5d0e7a2..b87bc075a2d 100644 --- a/core/node/node_framework/examples/main_node.rs +++ b/core/node/node_framework/examples/main_node.rs @@ -14,8 +14,8 @@ use zksync_config::{ FriProofCompressorConfig, FriProverConfig, FriWitnessGeneratorConfig, ObservabilityConfig, ProofDataHandlerConfig, }, - ApiConfig, ContractsConfig, DBConfig, ETHClientConfig, ETHConfig, ETHWatchConfig, - GasAdjusterConfig, ObjectStoreConfig, PostgresConfig, + ApiConfig, ContractVerifierConfig, ContractsConfig, DBConfig, ETHConfig, ETHWatchConfig, + GasAdjusterConfig, GenesisConfig, ObjectStoreConfig, PostgresConfig, }; use zksync_core::{ api_server::{ @@ -84,16 +84,17 @@ impl MainNodeBuilder { } fn add_pk_signing_client_layer(mut self) -> anyhow::Result { + let genesis = GenesisConfig::from_env()?; self.node.add_layer(PKSigningEthClientLayer::new( ETHConfig::from_env()?, - ContractsConfig::from_env()?, - ETHClientConfig::from_env()?, + ContractsConfig::from_env()?.into(), + genesis.l1_chain_id, )); Ok(self) } fn add_query_eth_client_layer(mut self) -> anyhow::Result { - let eth_client_config = ETHClientConfig::from_env()?; + let eth_client_config = ETHConfig::from_env()?; let query_eth_client_layer = QueryEthClientLayer::new(eth_client_config.web3_url); self.node.add_layer(query_eth_client_layer); Ok(self) @@ -203,10 +204,11 @@ impl MainNodeBuilder { fn add_http_web3_api_layer(mut self) -> anyhow::Result { let rpc_config = ApiConfig::from_env()?.web3_json_rpc; - let contracts_config = ContractsConfig::from_env()?; + let contracts_config = ContractsConfig::from_env()?.into(); let network_config = NetworkConfig::from_env()?; let state_keeper_config = StateKeeperConfig::from_env()?; let with_debug_namespace = state_keeper_config.save_call_traces; + let genesis_config = GenesisConfig::from_env()?; let mut namespaces = Namespace::DEFAULT.to_vec(); if with_debug_namespace { @@ -224,7 +226,7 @@ impl MainNodeBuilder { }; self.node.add_layer(Web3ServerLayer::http( rpc_config.http_port, - InternalApiConfig::new(&network_config, &rpc_config, &contracts_config), + InternalApiConfig::new(&rpc_config, &contracts_config, &genesis_config), optional_config, )); @@ -233,8 +235,8 @@ impl MainNodeBuilder { fn add_ws_web3_api_layer(mut self) -> anyhow::Result { let rpc_config = ApiConfig::from_env()?.web3_json_rpc; - let contracts_config = ContractsConfig::from_env()?; - let network_config = NetworkConfig::from_env()?; + let contracts_config = ContractsConfig::from_env()?.into(); + let genesis_config = GenesisConfig::from_env()?; let state_keeper_config = StateKeeperConfig::from_env()?; let circuit_breaker_config = CircuitBreakerConfig::from_env()?; let with_debug_namespace = state_keeper_config.save_call_traces; @@ -258,7 +260,7 @@ impl MainNodeBuilder { }; self.node.add_layer(Web3ServerLayer::ws( rpc_config.ws_port, - InternalApiConfig::new(&network_config, &rpc_config, &contracts_config), + InternalApiConfig::new(&rpc_config, &contracts_config, &genesis_config), optional_config, )); @@ -266,15 +268,15 @@ impl MainNodeBuilder { } fn add_eth_sender_layer(mut self) -> anyhow::Result { let eth_sender_config = ETHConfig::from_env()?; - let contracts_config = ContractsConfig::from_env()?; - let eth_client_config = ETHClientConfig::from_env()?; + let contracts_config = ContractsConfig::from_env()?.into(); let network_config = NetworkConfig::from_env()?; + let genesis_config = GenesisConfig::from_env()?; self.node.add_layer(EthSenderLayer::new( eth_sender_config, contracts_config, - eth_client_config, network_config, + genesis_config.l1_chain_id, )); Ok(self) @@ -313,7 +315,7 @@ impl MainNodeBuilder { } fn add_contract_verification_api_layer(mut self) -> anyhow::Result { - let config = ApiConfig::from_env()?.contract_verification; + let config = ContractVerifierConfig::from_env()?; self.node.add_layer(ContractVerificationApiLayer(config)); Ok(self) } diff --git a/core/node/node_framework/src/implementations/layers/eth_sender.rs b/core/node/node_framework/src/implementations/layers/eth_sender.rs index 757b4511d4b..5db1bc32a1b 100644 --- a/core/node/node_framework/src/implementations/layers/eth_sender.rs +++ b/core/node/node_framework/src/implementations/layers/eth_sender.rs @@ -1,11 +1,10 @@ use std::sync::Arc; use zksync_circuit_breaker::l1_txs::FailedL1TransactionChecker; -use zksync_config::configs::{ - chain::NetworkConfig, eth_sender::ETHConfig, ContractsConfigReduced, ETHClientConfig, -}; +use zksync_config::configs::{chain::NetworkConfig, eth_sender::ETHConfig, ContractsConfigReduced}; use zksync_core::eth_sender::{Aggregator, EthTxAggregator, EthTxManager}; use zksync_eth_client::{clients::PKSigningClient, BoundEthInterface}; +use zksync_types::L1ChainId; use crate::{ implementations::resources::{ @@ -24,22 +23,22 @@ use crate::{ pub struct EthSenderLayer { eth_sender_config: ETHConfig, contracts_config: ContractsConfigReduced, - eth_client_config: ETHClientConfig, network_config: NetworkConfig, + l1chain_id: L1ChainId, } impl EthSenderLayer { pub fn new( eth_sender_config: ETHConfig, contracts_config: ContractsConfigReduced, - eth_client_config: ETHClientConfig, network_config: NetworkConfig, + l1chain_id: L1ChainId, ) -> Self { Self { eth_sender_config, contracts_config, - eth_client_config, network_config, + l1chain_id, } } } @@ -66,7 +65,7 @@ impl WiringLayer for EthSenderLayer { let eth_client_blobs = PKSigningClient::from_config_blobs( &self.eth_sender_config, &self.contracts_config, - &self.eth_client_config, + self.l1chain_id, ); let eth_client_blobs_addr = eth_client_blobs.clone().map(|k| k.sender_account()); diff --git a/core/node/node_framework/src/implementations/layers/pk_signing_eth_client.rs b/core/node/node_framework/src/implementations/layers/pk_signing_eth_client.rs index d56371f34da..33d57c890d5 100644 --- a/core/node/node_framework/src/implementations/layers/pk_signing_eth_client.rs +++ b/core/node/node_framework/src/implementations/layers/pk_signing_eth_client.rs @@ -1,7 +1,8 @@ use std::sync::Arc; -use zksync_config::{configs::ContractsConfigReduced, ETHClientConfig, ETHConfig}; +use zksync_config::{configs::ContractsConfigReduced, ETHConfig}; use zksync_eth_client::clients::PKSigningClient; +use zksync_types::L1ChainId; use crate::{ implementations::resources::eth_interface::BoundEthInterfaceResource, @@ -13,19 +14,19 @@ use crate::{ pub struct PKSigningEthClientLayer { eth_sender_config: ETHConfig, contracts_config: ContractsConfigReduced, - eth_client_config: ETHClientConfig, + l1chain_id: L1ChainId, } impl PKSigningEthClientLayer { pub fn new( eth_sender_config: ETHConfig, contracts_config: ContractsConfigReduced, - eth_client_config: ETHClientConfig, + l1chain_id: L1ChainId, ) -> Self { Self { eth_sender_config, contracts_config, - eth_client_config, + l1chain_id, } } } @@ -46,7 +47,7 @@ impl WiringLayer for PKSigningEthClientLayer { let signing_client = PKSigningClient::from_config( &self.eth_sender_config, &self.contracts_config, - &self.eth_client_config, + self.l1chain_id, ); context.insert_resource(BoundEthInterfaceResource(Arc::new(signing_client)))?; Ok(()) From afe3a3a08efde5aa242605d1b22ea842371234ee Mon Sep 17 00:00:00 2001 From: Danil Date: Wed, 27 Mar 2024 12:32:03 +0100 Subject: [PATCH 41/65] Remove full contracts env config Signed-off-by: Danil --- core/bin/zksync_server/src/main.rs | 14 ++- core/lib/config/src/configs/contracts.rs | 108 ------------------ core/lib/config/src/configs/mod.rs | 2 +- core/lib/config/src/testonly.rs | 27 +---- core/lib/env_config/src/genesis.rs | 33 +++++- .../eth_client/src/clients/http/signing.rs | 8 +- core/lib/protobuf_config/src/contracts.rs | 4 +- .../zksync_core/src/api_server/web3/state.rs | 4 +- core/lib/zksync_core/src/lib.rs | 6 +- .../node/node_framework/examples/main_node.rs | 8 +- .../src/implementations/layers/eth_sender.rs | 6 +- .../layers/pk_signing_eth_client.rs | 6 +- 12 files changed, 61 insertions(+), 165 deletions(-) diff --git a/core/bin/zksync_server/src/main.rs b/core/bin/zksync_server/src/main.rs index 321dd7ed05e..9f1e57df79d 100644 --- a/core/bin/zksync_server/src/main.rs +++ b/core/bin/zksync_server/src/main.rs @@ -11,12 +11,12 @@ use zksync_config::{ }, fri_prover_group::FriProverGroupConfig, house_keeper::HouseKeeperConfig, - ContractsConfigReduced, FriProofCompressorConfig, FriProverConfig, FriProverGatewayConfig, + ContractsConfig, FriProofCompressorConfig, FriProverConfig, FriProverGatewayConfig, FriWitnessGeneratorConfig, FriWitnessVectorGeneratorConfig, GeneralConfig, ObservabilityConfig, PrometheusConfig, ProofDataHandlerConfig, WitnessGeneratorConfig, }, - ApiConfig, ContractVerifierConfig, ContractsConfig, DBConfig, ETHConfig, ETHWatchConfig, - GasAdjusterConfig, GenesisConfig, ObjectStoreConfig, PostgresConfig, + ApiConfig, ContractVerifierConfig, DBConfig, ETHConfig, ETHWatchConfig, GasAdjusterConfig, + GenesisConfig, ObjectStoreConfig, PostgresConfig, }; use zksync_core::{ genesis, genesis_init, initialize_components, is_genesis_needed, setup_sigint_handler, @@ -159,7 +159,7 @@ async fn main() -> anyhow::Result<()> { }, }; - let contracts_config: ContractsConfigReduced = match opt.contracts_config_path { + let contracts_config: ContractsConfig = match opt.contracts_config_path { None => ContractsConfig::from_env() .context("contracts_config")? .into(), @@ -186,11 +186,13 @@ async fn main() -> anyhow::Result<()> { if opt.set_chain_id { let eth_client = ETHConfig::from_env().context("EthClientConfig")?; let contracts = ContractsConfig::from_env().context("ContractsConfig")?; - if let Some(state_transition_proxy_addr) = contracts.state_transition_proxy_addr { + let genesis = GenesisConfig::from_env().context("Genesis config")?; + + if let Some(shared_bridge) = genesis.shared_bridge { genesis::save_set_chain_id_tx( ð_client.web3_url, contracts.diamond_proxy_addr, - state_transition_proxy_addr, + shared_bridge.state_transition_proxy_addr, &postgres_config, ) .await diff --git a/core/lib/config/src/configs/contracts.rs b/core/lib/config/src/configs/contracts.rs index 6a0923b7818..9ca5ee65d67 100644 --- a/core/lib/config/src/configs/contracts.rs +++ b/core/lib/config/src/configs/contracts.rs @@ -6,114 +6,6 @@ use zksync_basic_types::{Address, H256}; /// Data about deployed contracts. #[derive(Debug, Deserialize, Clone, PartialEq)] pub struct ContractsConfig { - pub genesis_root: Option, - pub genesis_rollup_leaf_index: Option, - pub genesis_batch_commitment: Option, - pub genesis_protocol_version: Option, - pub governance_addr: Address, - pub mailbox_facet_addr: Address, - pub executor_facet_addr: Address, - pub admin_facet_addr: Address, - pub getters_facet_addr: Address, - pub verifier_addr: Address, - pub diamond_init_addr: Address, - pub diamond_upgrade_init_addr: Address, - pub diamond_proxy_addr: Address, - pub validator_timelock_addr: Address, - pub genesis_tx_hash: H256, - pub l1_erc20_bridge_proxy_addr: Address, - pub l1_erc20_bridge_impl_addr: Address, - pub l2_erc20_bridge_addr: Address, - pub l1_weth_bridge_proxy_addr: Option
, - pub l2_weth_bridge_addr: Option
, - pub l1_allow_list_addr: Address, - pub l2_testnet_paymaster_addr: Option
, - pub recursion_scheduler_level_vk_hash: H256, - pub recursion_node_level_vk_hash: H256, - pub recursion_leaf_level_vk_hash: H256, - pub recursion_circuits_set_vks_hash: H256, - pub l1_multicall3_addr: Address, - pub fri_recursion_scheduler_level_vk_hash: H256, - pub fri_recursion_node_level_vk_hash: H256, - pub fri_recursion_leaf_level_vk_hash: H256, - pub snark_wrapper_vk_hash: H256, - - // These contracts will be used after shared bridge integration. - pub bridgehub_proxy_addr: Option
, - pub bridgehub_impl_addr: Option
, - pub state_transition_proxy_addr: Option
, - pub state_transition_impl_addr: Option
, - pub transparent_proxy_admin_addr: Option
, -} - -impl ContractsConfig { - /// Creates a mock instance of `ContractsConfig` to be used in tests. - /// No data in the created object is valid. - /// Every contract address is set to a random but unique non-zero value. - /// Same goes for hashes. - pub fn for_tests() -> Self { - Self { - genesis_root: Some(H256::repeat_byte(0x01)), - genesis_rollup_leaf_index: Some(26), - mailbox_facet_addr: Address::repeat_byte(0x01), - executor_facet_addr: Address::repeat_byte(0x02), - admin_facet_addr: Address::repeat_byte(0x03), - transparent_proxy_admin_addr: Some(Address::repeat_byte(0x04)), - getters_facet_addr: Address::repeat_byte(0x05), - verifier_addr: Address::repeat_byte(0x06), - diamond_init_addr: Address::repeat_byte(0x07), - diamond_upgrade_init_addr: Address::repeat_byte(0x08), - diamond_proxy_addr: Address::repeat_byte(0x09), - validator_timelock_addr: Address::repeat_byte(0x0a), - genesis_tx_hash: H256::repeat_byte(0x01), - l1_erc20_bridge_proxy_addr: Address::repeat_byte(0x0b), - l1_erc20_bridge_impl_addr: Address::repeat_byte(0x0c), - l2_erc20_bridge_addr: Address::repeat_byte(0x0d), - l1_weth_bridge_proxy_addr: Some(Address::repeat_byte(0x0e)), - l2_weth_bridge_addr: Some(Address::repeat_byte(0x0f)), - l1_allow_list_addr: Address::repeat_byte(0x10), - l2_testnet_paymaster_addr: Some(Address::repeat_byte(0x11)), - recursion_scheduler_level_vk_hash: H256::repeat_byte(0x02), - recursion_node_level_vk_hash: H256::repeat_byte(0x03), - recursion_leaf_level_vk_hash: H256::repeat_byte(0x04), - recursion_circuits_set_vks_hash: H256::repeat_byte(0x05), - l1_multicall3_addr: Address::repeat_byte(0x12), - fri_recursion_scheduler_level_vk_hash: H256::repeat_byte(0x06), - fri_recursion_node_level_vk_hash: H256::repeat_byte(0x07), - fri_recursion_leaf_level_vk_hash: H256::repeat_byte(0x08), - governance_addr: Address::repeat_byte(0x13), - snark_wrapper_vk_hash: H256::repeat_byte(0x09), - bridgehub_proxy_addr: Some(Address::repeat_byte(0x14)), - bridgehub_impl_addr: Some(Address::repeat_byte(0x15)), - state_transition_proxy_addr: Some(Address::repeat_byte(0x16)), - state_transition_impl_addr: Some(Address::repeat_byte(0x17)), - genesis_batch_commitment: Some(H256::repeat_byte(0x17)), - genesis_protocol_version: Some(22), - } - } -} - -impl From for ContractsConfigReduced { - fn from(value: ContractsConfig) -> Self { - Self { - governance_addr: value.governance_addr, - verifier_addr: value.verifier_addr, - default_upgrade_addr: value.diamond_upgrade_init_addr, - diamond_proxy_addr: value.diamond_proxy_addr, - validator_timelock_addr: value.validator_timelock_addr, - l1_erc20_bridge_proxy_addr: value.l1_erc20_bridge_proxy_addr, - l2_erc20_bridge_addr: value.l2_erc20_bridge_addr, - l1_weth_bridge_proxy_addr: value.l1_weth_bridge_proxy_addr, - l2_weth_bridge_addr: value.l2_weth_bridge_addr, - l2_testnet_paymaster_addr: value.l2_testnet_paymaster_addr, - l1_multicall3_addr: value.l1_multicall3_addr, - } - } -} - -/// Data about deployed contracts. -#[derive(Debug, Deserialize, Clone, PartialEq)] -pub struct ContractsConfigReduced { pub governance_addr: Address, pub verifier_addr: Address, pub default_upgrade_addr: Address, diff --git a/core/lib/config/src/configs/mod.rs b/core/lib/config/src/configs/mod.rs index 566e9775a56..5de0be5aba0 100644 --- a/core/lib/config/src/configs/mod.rs +++ b/core/lib/config/src/configs/mod.rs @@ -3,7 +3,7 @@ pub use self::{ alerts::AlertsConfig, api::ApiConfig, contract_verifier::ContractVerifierConfig, - contracts::{ContractsConfig, ContractsConfigReduced}, + contracts::ContractsConfig, database::{DBConfig, PostgresConfig}, eth_sender::{ETHConfig, GasAdjusterConfig}, eth_watch::ETHWatchConfig, diff --git a/core/lib/config/src/testonly.rs b/core/lib/config/src/testonly.rs index d50c46c9a8d..d0cbcdb8591 100644 --- a/core/lib/config/src/testonly.rs +++ b/core/lib/config/src/testonly.rs @@ -343,41 +343,16 @@ impl RandomConfig for configs::ContractsConfig { fn sample(g: &mut Gen) -> Self { Self { governance_addr: g.gen(), - mailbox_facet_addr: g.gen(), - executor_facet_addr: g.gen(), - admin_facet_addr: g.gen(), - getters_facet_addr: g.gen(), verifier_addr: g.gen(), - diamond_init_addr: g.gen(), - diamond_upgrade_init_addr: g.gen(), + default_upgrade_addr: g.gen(), diamond_proxy_addr: g.gen(), validator_timelock_addr: g.gen(), - genesis_tx_hash: g.gen(), l1_erc20_bridge_proxy_addr: g.gen(), - l1_erc20_bridge_impl_addr: g.gen(), l2_erc20_bridge_addr: g.gen(), l1_weth_bridge_proxy_addr: g.gen(), l2_weth_bridge_addr: g.gen(), - l1_allow_list_addr: g.gen(), l2_testnet_paymaster_addr: g.gen(), - recursion_scheduler_level_vk_hash: g.gen(), - recursion_node_level_vk_hash: g.gen(), - recursion_leaf_level_vk_hash: g.gen(), - recursion_circuits_set_vks_hash: g.gen(), l1_multicall3_addr: g.gen(), - fri_recursion_scheduler_level_vk_hash: g.gen(), - fri_recursion_node_level_vk_hash: g.gen(), - fri_recursion_leaf_level_vk_hash: g.gen(), - snark_wrapper_vk_hash: g.gen(), - bridgehub_impl_addr: g.gen(), - bridgehub_proxy_addr: g.gen(), - state_transition_proxy_addr: g.gen(), - state_transition_impl_addr: g.gen(), - transparent_proxy_admin_addr: g.gen(), - genesis_batch_commitment: g.gen(), - genesis_rollup_leaf_index: g.gen(), - genesis_root: g.gen(), - genesis_protocol_version: g.gen(), } } } diff --git a/core/lib/env_config/src/genesis.rs b/core/lib/env_config/src/genesis.rs index 0428c90298b..c5b461428aa 100644 --- a/core/lib/env_config/src/genesis.rs +++ b/core/lib/env_config/src/genesis.rs @@ -1,11 +1,38 @@ use anyhow::anyhow; -use zksync_basic_types::H256; +use serde::{Deserialize, Serialize}; +use zksync_basic_types::{Address, H256}; use zksync_config::{ configs::chain::{NetworkConfig, StateKeeperConfig}, ContractsConfig, GenesisConfig, }; -use crate::FromEnv; +use crate::{envy_load, FromEnv}; + +// For initializing genesis file from env it's required to have an additional struct, +// because these data is not required as part of the current Conract Config +#[derive(Deserialize, Serialize, Debug, Clone)] +struct ContractsForGenesis { + pub genesis_root: Option, + pub genesis_rollup_leaf_index: Option, + pub genesis_batch_commitment: Option, + pub genesis_protocol_version: Option, + pub fri_recursion_scheduler_level_vk_hash: H256, + pub fri_recursion_node_level_vk_hash: H256, + pub fri_recursion_leaf_level_vk_hash: H256, + pub snark_wrapper_vk_hash: H256, + // These contracts will be used after shared bridge integration. + pub bridgehub_proxy_addr: Option
, + pub bridgehub_impl_addr: Option
, + pub state_transition_proxy_addr: Option
, + pub state_transition_impl_addr: Option
, + pub transparent_proxy_admin_addr: Option
, +} + +impl FromEnv for ContractsForGenesis { + fn from_env() -> anyhow::Result { + envy_load("contracts_for_genesis", "CONTRACTS_") + } +} impl FromEnv for GenesisConfig { fn from_env() -> anyhow::Result { @@ -13,7 +40,7 @@ impl FromEnv for GenesisConfig { // re-implemented and for the sake of simplicity we combine values from different sources // #PLA-811 let network_config = &NetworkConfig::from_env()?; - let contracts_config = &ContractsConfig::from_env()?; + let contracts_config = &ContractsForGenesis::from_env()?; let state_keeper = StateKeeperConfig::from_env()?; Ok(GenesisConfig { protocol_version: contracts_config diff --git a/core/lib/eth_client/src/clients/http/signing.rs b/core/lib/eth_client/src/clients/http/signing.rs index 9e70ed7a088..c8b99904efd 100644 --- a/core/lib/eth_client/src/clients/http/signing.rs +++ b/core/lib/eth_client/src/clients/http/signing.rs @@ -1,7 +1,7 @@ use std::{fmt, sync::Arc}; use async_trait::async_trait; -use zksync_config::{configs::ContractsConfigReduced, ETHConfig}; +use zksync_config::{configs::ContractsConfig, ETHConfig}; use zksync_contracts::zksync_contract; use zksync_eth_signer::{raw_ethereum_tx::TransactionParameters, EthereumSigner, PrivateKeySigner}; use zksync_types::{ @@ -31,7 +31,7 @@ pub type PKSigningClient = SigningClient; impl PKSigningClient { pub fn from_config( eth_sender: ÐConfig, - contracts_config: &ContractsConfigReduced, + contracts_config: &ContractsConfig, l1_chain_id: L1ChainId, ) -> Self { // Gather required data from the config. @@ -52,7 +52,7 @@ impl PKSigningClient { /// Create an signing client for the blobs account pub fn from_config_blobs( eth_sender: ÐConfig, - contracts_config: &ContractsConfigReduced, + contracts_config: &ContractsConfig, l1_chain_id: L1ChainId, ) -> Option { // Gather required data from the config. @@ -93,7 +93,7 @@ impl PKSigningClient { fn from_config_inner( eth_sender: ÐConfig, - contracts_config: &ContractsConfigReduced, + contracts_config: &ContractsConfig, l1_chain_id: L1ChainId, operator_private_key: H256, ) -> Self { diff --git a/core/lib/protobuf_config/src/contracts.rs b/core/lib/protobuf_config/src/contracts.rs index 31d9ce0f243..537efffb45e 100644 --- a/core/lib/protobuf_config/src/contracts.rs +++ b/core/lib/protobuf_config/src/contracts.rs @@ -1,11 +1,11 @@ use anyhow::Context as _; -use zksync_config::configs::ContractsConfigReduced; +use zksync_config::configs::ContractsConfig; use zksync_protobuf::{repr::ProtoRepr, required}; use crate::{parse_h160, proto::contracts as proto}; impl ProtoRepr for proto::Contracts { - type Type = ContractsConfigReduced; + type Type = ContractsConfig; fn read(&self) -> anyhow::Result { let l1 = required(&self.l1).context("l1")?; diff --git a/core/lib/zksync_core/src/api_server/web3/state.rs b/core/lib/zksync_core/src/api_server/web3/state.rs index 0e984309409..b4f1794a473 100644 --- a/core/lib/zksync_core/src/api_server/web3/state.rs +++ b/core/lib/zksync_core/src/api_server/web3/state.rs @@ -13,7 +13,7 @@ use tokio::sync::{watch, Mutex}; use vise::GaugeGuard; use zksync_config::{ configs::{ - api::Web3JsonRpcConfig, chain::NetworkConfig, genesis::SharedBridge, ContractsConfigReduced, + api::Web3JsonRpcConfig, chain::NetworkConfig, genesis::SharedBridge, ContractsConfig, }, GenesisConfig, }; @@ -104,7 +104,7 @@ pub struct InternalApiConfig { impl InternalApiConfig { pub fn new( web3_config: &Web3JsonRpcConfig, - contracts_config: &ContractsConfigReduced, + contracts_config: &ContractsConfig, genesis_config: &GenesisConfig, ) -> Self { Self { diff --git a/core/lib/zksync_core/src/lib.rs b/core/lib/zksync_core/src/lib.rs index 27ab3da14bd..16e602dd391 100644 --- a/core/lib/zksync_core/src/lib.rs +++ b/core/lib/zksync_core/src/lib.rs @@ -32,7 +32,7 @@ use zksync_config::{ }, database::{MerkleTreeConfig, MerkleTreeMode}, wallets::Wallets, - ContractsConfigReduced, GeneralConfig, + ContractsConfig, GeneralConfig, }, ApiConfig, DBConfig, GenesisConfig, PostgresConfig, }; @@ -228,7 +228,7 @@ pub async fn initialize_components( configs: &GeneralConfig, wallets: Option, genesis_config: &GenesisConfig, - contracts_config: &ContractsConfigReduced, + contracts_config: &ContractsConfig, components: &[Component], secrets: &Secrets, ) -> anyhow::Result<( @@ -775,7 +775,7 @@ pub async fn initialize_components( async fn add_state_keeper_to_task_futures( task_futures: &mut Vec>>, postgres_config: &PostgresConfig, - contracts_config: &ContractsConfigReduced, + contracts_config: &ContractsConfig, state_keeper_config: StateKeeperConfig, l2chain_id: L2ChainId, db_config: &DBConfig, diff --git a/core/node/node_framework/examples/main_node.rs b/core/node/node_framework/examples/main_node.rs index b87bc075a2d..8fa7ff7ef10 100644 --- a/core/node/node_framework/examples/main_node.rs +++ b/core/node/node_framework/examples/main_node.rs @@ -87,7 +87,7 @@ impl MainNodeBuilder { let genesis = GenesisConfig::from_env()?; self.node.add_layer(PKSigningEthClientLayer::new( ETHConfig::from_env()?, - ContractsConfig::from_env()?.into(), + ContractsConfig::from_env()?, genesis.l1_chain_id, )); Ok(self) @@ -204,7 +204,7 @@ impl MainNodeBuilder { fn add_http_web3_api_layer(mut self) -> anyhow::Result { let rpc_config = ApiConfig::from_env()?.web3_json_rpc; - let contracts_config = ContractsConfig::from_env()?.into(); + let contracts_config = ContractsConfig::from_env()?; let network_config = NetworkConfig::from_env()?; let state_keeper_config = StateKeeperConfig::from_env()?; let with_debug_namespace = state_keeper_config.save_call_traces; @@ -235,7 +235,7 @@ impl MainNodeBuilder { fn add_ws_web3_api_layer(mut self) -> anyhow::Result { let rpc_config = ApiConfig::from_env()?.web3_json_rpc; - let contracts_config = ContractsConfig::from_env()?.into(); + let contracts_config = ContractsConfig::from_env()?; let genesis_config = GenesisConfig::from_env()?; let state_keeper_config = StateKeeperConfig::from_env()?; let circuit_breaker_config = CircuitBreakerConfig::from_env()?; @@ -268,7 +268,7 @@ impl MainNodeBuilder { } fn add_eth_sender_layer(mut self) -> anyhow::Result { let eth_sender_config = ETHConfig::from_env()?; - let contracts_config = ContractsConfig::from_env()?.into(); + let contracts_config = ContractsConfig::from_env()?; let network_config = NetworkConfig::from_env()?; let genesis_config = GenesisConfig::from_env()?; diff --git a/core/node/node_framework/src/implementations/layers/eth_sender.rs b/core/node/node_framework/src/implementations/layers/eth_sender.rs index 5db1bc32a1b..e15839f7780 100644 --- a/core/node/node_framework/src/implementations/layers/eth_sender.rs +++ b/core/node/node_framework/src/implementations/layers/eth_sender.rs @@ -1,7 +1,7 @@ use std::sync::Arc; use zksync_circuit_breaker::l1_txs::FailedL1TransactionChecker; -use zksync_config::configs::{chain::NetworkConfig, eth_sender::ETHConfig, ContractsConfigReduced}; +use zksync_config::configs::{chain::NetworkConfig, eth_sender::ETHConfig, ContractsConfig}; use zksync_core::eth_sender::{Aggregator, EthTxAggregator, EthTxManager}; use zksync_eth_client::{clients::PKSigningClient, BoundEthInterface}; use zksync_types::L1ChainId; @@ -22,7 +22,7 @@ use crate::{ #[derive(Debug)] pub struct EthSenderLayer { eth_sender_config: ETHConfig, - contracts_config: ContractsConfigReduced, + contracts_config: ContractsConfig, network_config: NetworkConfig, l1chain_id: L1ChainId, } @@ -30,7 +30,7 @@ pub struct EthSenderLayer { impl EthSenderLayer { pub fn new( eth_sender_config: ETHConfig, - contracts_config: ContractsConfigReduced, + contracts_config: ContractsConfig, network_config: NetworkConfig, l1chain_id: L1ChainId, ) -> Self { diff --git a/core/node/node_framework/src/implementations/layers/pk_signing_eth_client.rs b/core/node/node_framework/src/implementations/layers/pk_signing_eth_client.rs index 33d57c890d5..d298a2113d8 100644 --- a/core/node/node_framework/src/implementations/layers/pk_signing_eth_client.rs +++ b/core/node/node_framework/src/implementations/layers/pk_signing_eth_client.rs @@ -1,6 +1,6 @@ use std::sync::Arc; -use zksync_config::{configs::ContractsConfigReduced, ETHConfig}; +use zksync_config::{configs::ContractsConfig, ETHConfig}; use zksync_eth_client::clients::PKSigningClient; use zksync_types::L1ChainId; @@ -13,14 +13,14 @@ use crate::{ #[derive(Debug)] pub struct PKSigningEthClientLayer { eth_sender_config: ETHConfig, - contracts_config: ContractsConfigReduced, + contracts_config: ContractsConfig, l1chain_id: L1ChainId, } impl PKSigningEthClientLayer { pub fn new( eth_sender_config: ETHConfig, - contracts_config: ContractsConfigReduced, + contracts_config: ContractsConfig, l1chain_id: L1ChainId, ) -> Self { Self { From 87c7803cbf30ce2c40cde3447ec538e44ff5045a Mon Sep 17 00:00:00 2001 From: Danil Date: Wed, 27 Mar 2024 13:10:54 +0100 Subject: [PATCH 42/65] Fix lints Signed-off-by: Danil --- core/bin/snapshots_creator/src/tests.rs | 2 + core/lib/config/src/configs/contracts.rs | 20 +++++++- .../src/eip712_signature/tests.rs | 14 +++-- core/lib/env_config/src/contracts.rs | 51 +------------------ core/lib/env_config/src/fri_prover.rs | 19 ++++++- core/lib/env_config/src/genesis.rs | 2 +- .../eth_client/src/clients/http/signing.rs | 2 +- .../protobuf_config/src/contract_verifier.rs | 4 +- core/lib/protobuf_config/src/genesis.rs | 15 +++--- core/lib/protobuf_config/src/prover.rs | 7 +-- .../protobuf_config/src/snapshots_creator.rs | 7 +-- core/lib/protobuf_config/src/tests.rs | 26 ++++------ core/lib/protobuf_config/src/wallets.rs | 4 +- .../api_server/contract_verification/mod.rs | 2 +- .../zksync_core/src/api_server/web3/state.rs | 4 +- .../src/api_server/web3/tests/mod.rs | 4 +- .../src/api_server/web3/tests/ws.rs | 3 +- .../lib/zksync_core/src/consensus/testonly.rs | 9 ++-- core/lib/zksync_core/src/genesis.rs | 6 +++ core/lib/zksync_core/src/lib.rs | 22 +++----- .../src/state_keeper/mempool_actor.rs | 2 +- .../zksync_core/src/temp_config_store/mod.rs | 3 -- .../src/temp_config_store/tests.rs | 44 ---------------- 23 files changed, 95 insertions(+), 177 deletions(-) delete mode 100644 core/lib/zksync_core/src/temp_config_store/tests.rs diff --git a/core/bin/snapshots_creator/src/tests.rs b/core/bin/snapshots_creator/src/tests.rs index ee2251d1f8a..583ffbd8a69 100644 --- a/core/bin/snapshots_creator/src/tests.rs +++ b/core/bin/snapshots_creator/src/tests.rs @@ -27,10 +27,12 @@ use super::*; const TEST_CONFIG: SnapshotsCreatorConfig = SnapshotsCreatorConfig { storage_logs_chunk_size: 1_000_000, concurrent_queries_count: 10, + object_store: None, }; const SEQUENTIAL_TEST_CONFIG: SnapshotsCreatorConfig = SnapshotsCreatorConfig { storage_logs_chunk_size: 1_000_000, concurrent_queries_count: 1, + object_store: None, }; #[derive(Debug)] diff --git a/core/lib/config/src/configs/contracts.rs b/core/lib/config/src/configs/contracts.rs index 9ca5ee65d67..e36155b3f56 100644 --- a/core/lib/config/src/configs/contracts.rs +++ b/core/lib/config/src/configs/contracts.rs @@ -1,7 +1,7 @@ // External uses use serde::Deserialize; // Workspace uses -use zksync_basic_types::{Address, H256}; +use zksync_basic_types::Address; /// Data about deployed contracts. #[derive(Debug, Deserialize, Clone, PartialEq)] @@ -18,3 +18,21 @@ pub struct ContractsConfig { pub l2_testnet_paymaster_addr: Option
, pub l1_multicall3_addr: Address, } + +impl ContractsConfig { + pub fn for_tests() -> Self { + Self { + verifier_addr: Address::repeat_byte(0x06), + default_upgrade_addr: Address::repeat_byte(0x06), + diamond_proxy_addr: Address::repeat_byte(0x09), + validator_timelock_addr: Address::repeat_byte(0x0a), + l1_erc20_bridge_proxy_addr: Address::repeat_byte(0x0b), + l2_erc20_bridge_addr: Address::repeat_byte(0x0d), + l1_weth_bridge_proxy_addr: Some(Address::repeat_byte(0x0e)), + l2_weth_bridge_addr: Some(Address::repeat_byte(0x0f)), + l2_testnet_paymaster_addr: Some(Address::repeat_byte(0x11)), + l1_multicall3_addr: Address::repeat_byte(0x12), + governance_addr: Address::repeat_byte(0x13), + } + } +} diff --git a/core/lib/crypto_primitives/src/eip712_signature/tests.rs b/core/lib/crypto_primitives/src/eip712_signature/tests.rs index 8bfd14b45c4..0314c8cdcfb 100644 --- a/core/lib/crypto_primitives/src/eip712_signature/tests.rs +++ b/core/lib/crypto_primitives/src/eip712_signature/tests.rs @@ -4,16 +4,14 @@ use serde::Serialize; use zksync_basic_types::{Address, H256, U256}; use crate::{ - tx::primitives::{ - eip712_signature::{ - struct_builder::StructBuilder, - typed_structure::{EIP712TypedStructure, Eip712Domain}, - utils::get_eip712_json, - }, - PackedEthSignature, + eip712_signature::{ + struct_builder::StructBuilder, + typed_structure::{EIP712TypedStructure, Eip712Domain}, + utils::get_eip712_json, }, - web3::signing::keccak256, + PackedEthSignature, }; +use web3::signing::keccak256; #[derive(Clone, Serialize)] struct Person { diff --git a/core/lib/env_config/src/contracts.rs b/core/lib/env_config/src/contracts.rs index 6c50b830876..109b9d4c07c 100644 --- a/core/lib/env_config/src/contracts.rs +++ b/core/lib/env_config/src/contracts.rs @@ -11,70 +11,23 @@ impl FromEnv for ContractsConfig { #[cfg(test)] mod tests { use super::*; - use crate::test_utils::{addr, hash, EnvMutex}; + use crate::test_utils::{addr, EnvMutex}; static MUTEX: EnvMutex = EnvMutex::new(); fn expected_config() -> ContractsConfig { ContractsConfig { - genesis_root: Some(hash( - "0x436cf80dd02a7e1a1df65be6ec9ea231ccec97c44f4c8c9cd2aa26c2feb074cd", - )), - genesis_rollup_leaf_index: Some(26), - genesis_batch_commitment: Some(hash( - "0x938016208176c5a49d47c8aa582b5d18afc4f159dfa099087770e0796948fd1a", - )), - bridgehub_proxy_addr: Some(addr("35ea7f92f4c5f433efe15284e99c040110cf6297")), - bridgehub_impl_addr: Some(addr("87d456da9ed212eb49d80d96afb44afddf36adf8")), - state_transition_proxy_addr: Some(addr("d90f1c081c6117241624e97cb6147257c3cb2097")), - state_transition_impl_addr: Some(addr("c957c0e82d3bafb5ad46ffbcc66900648784eb05")), governance_addr: addr("d8dA6BF26964aF9D7eEd9e03E53415D37aA96045"), - mailbox_facet_addr: addr("0f6Fa881EF414Fc6E818180657c2d5CD7Ac6cCAd"), - executor_facet_addr: addr("18B631537801963A964211C0E86645c1aBfbB2d3"), - admin_facet_addr: addr("1e12b20BE86bEc3A0aC95aA52ade345cB9AE7a32"), - getters_facet_addr: addr("8656770FA78c830456B00B4fFCeE6b1De0e1b888"), verifier_addr: addr("34782eE00206EAB6478F2692caa800e4A581687b"), - diamond_init_addr: addr("FFC35A5e767BE36057c34586303498e3de7C62Ba"), - diamond_upgrade_init_addr: addr("FFC35A5e767BE36057c34586303498e3de7C62Ba"), + default_upgrade_addr: addr("0xFFC35A5e767BE36057c34586303498e3de7C62Ba"), diamond_proxy_addr: addr("F00B988a98Ca742e7958DeF9F7823b5908715f4a"), - transparent_proxy_admin_addr: Some(addr("dd6fa5c14e7550b4caf2aa2818d24c69cbc347e5")), validator_timelock_addr: addr("F00B988a98Ca742e7958DeF9F7823b5908715f4a"), - genesis_tx_hash: hash( - "b99ebfea46cbe05a21cd80fe5597d97b204befc52a16303f579c607dc1ac2e2e", - ), l1_erc20_bridge_proxy_addr: addr("8656770FA78c830456B00B4fFCeE6b1De0e1b888"), - l1_erc20_bridge_impl_addr: addr("8656770FA78c830456B00B4fFCeE6b1De0e1b888"), l2_erc20_bridge_addr: addr("8656770FA78c830456B00B4fFCeE6b1De0e1b888"), - l1_allow_list_addr: addr("8656770FA78c830456B00B4fFCeE6b1De0e1b888"), l1_weth_bridge_proxy_addr: Some(addr("8656770FA78c830456B00B4fFCeE6b1De0e1b888")), l2_weth_bridge_addr: Some(addr("8656770FA78c830456B00B4fFCeE6b1De0e1b888")), l2_testnet_paymaster_addr: Some(addr("FC073319977e314F251EAE6ae6bE76B0B3BAeeCF")), - recursion_scheduler_level_vk_hash: hash( - "0x1186ec268d49f1905f8d9c1e9d39fc33e98c74f91d91a21b8f7ef78bd09a8db8", - ), - recursion_node_level_vk_hash: hash( - "0x1186ec268d49f1905f8d9c1e9d39fc33e98c74f91d91a21b8f7ef78bd09a8db8", - ), - recursion_leaf_level_vk_hash: hash( - "0x101e08b00193e529145ee09823378ef51a3bc8966504064f1f6ba3f1ba863210", - ), - recursion_circuits_set_vks_hash: hash( - "0x142a364ef2073132eaf07aa7f3d8495065be5b92a2dc14fda09b4216affed9c0", - ), l1_multicall3_addr: addr("0xcA11bde05977b3631167028862bE2a173976CA11"), - fri_recursion_scheduler_level_vk_hash: hash( - "0x201d4c7d8e781d51a3bbd451a43a8f45240bb765b565ae6ce69192d918c3563d", - ), - fri_recursion_node_level_vk_hash: hash( - "0x5a3ef282b21e12fe1f4438e5bb158fc5060b160559c5158c6389d62d9fe3d080", - ), - fri_recursion_leaf_level_vk_hash: hash( - "0x72167c43a46cf38875b267d67716edc4563861364a3c03ab7aee73498421e828", - ), - snark_wrapper_vk_hash: hash( - "0x4be443afd605a782b6e56d199df2460a025c81b3dea144e135bece83612563f2", - ), - genesis_protocol_version: Some(22), } } diff --git a/core/lib/env_config/src/fri_prover.rs b/core/lib/env_config/src/fri_prover.rs index 7b97df50374..38cc1f73c39 100644 --- a/core/lib/env_config/src/fri_prover.rs +++ b/core/lib/env_config/src/fri_prover.rs @@ -1,16 +1,21 @@ use zksync_config::configs::FriProverConfig; +use zksync_config::ObjectStoreConfig; use crate::{envy_load, FromEnv}; impl FromEnv for FriProverConfig { fn from_env() -> anyhow::Result { - envy_load("fri_prover", "FRI_PROVER_") + let mut prover: FriProverConfig = envy_load("fri_prover", "FRI_PROVER_")?; + prover.object_store = ObjectStoreConfig::from_env().ok(); + Ok(prover) } } #[cfg(test)] mod tests { use zksync_config::configs::fri_prover::SetupLoadMode; + use zksync_config::configs::object_store::ObjectStoreMode; + use zksync_config::ObjectStoreConfig; use super::*; use crate::test_utils::EnvMutex; @@ -33,6 +38,13 @@ mod tests { zone_read_url: "http://metadata.google.internal/computeMetadata/v1/instance/zone" .to_string(), shall_save_to_public_bucket: true, + object_store: Some(ObjectStoreConfig { + mode: ObjectStoreMode::GCSWithCredentialFile { + bucket_base_url: "/base/url".to_owned(), + gcs_credential_file_path: "/path/to/credentials.json".to_owned(), + }, + max_retries: 5, + }), } } @@ -53,6 +65,11 @@ mod tests { FRI_PROVER_WITNESS_VECTOR_RECEIVER_PORT="3316" FRI_PROVER_ZONE_READ_URL="http://metadata.google.internal/computeMetadata/v1/instance/zone" FRI_PROVER_SHALL_SAVE_TO_PUBLIC_BUCKET=true + OBJECT_STORE_BUCKET_BASE_URL="/base/url" + OBJECT_STORE_MODE="GCSWithCredentialFile" + OBJECT_STORE_GCS_CREDENTIAL_FILE_PATH="/path/to/credentials.json" + OBJECT_STORE_MAX_RETRIES="5" + "#; lock.set_env(config); diff --git a/core/lib/env_config/src/genesis.rs b/core/lib/env_config/src/genesis.rs index c5b461428aa..fad506fdeae 100644 --- a/core/lib/env_config/src/genesis.rs +++ b/core/lib/env_config/src/genesis.rs @@ -3,7 +3,7 @@ use serde::{Deserialize, Serialize}; use zksync_basic_types::{Address, H256}; use zksync_config::{ configs::chain::{NetworkConfig, StateKeeperConfig}, - ContractsConfig, GenesisConfig, + GenesisConfig, }; use crate::{envy_load, FromEnv}; diff --git a/core/lib/eth_client/src/clients/http/signing.rs b/core/lib/eth_client/src/clients/http/signing.rs index c8b99904efd..80e4db8e0d8 100644 --- a/core/lib/eth_client/src/clients/http/signing.rs +++ b/core/lib/eth_client/src/clients/http/signing.rs @@ -104,7 +104,7 @@ impl PKSigningClient { SigningClient::new_raw( operator_private_key, diamond_proxy_addr, - default_priority_fee_per_gas.into(), + default_priority_fee_per_gas, l1_chain_id, main_node_url, ) diff --git a/core/lib/protobuf_config/src/contract_verifier.rs b/core/lib/protobuf_config/src/contract_verifier.rs index 96d937bb144..a985e1c3e1c 100644 --- a/core/lib/protobuf_config/src/contract_verifier.rs +++ b/core/lib/protobuf_config/src/contract_verifier.rs @@ -15,9 +15,7 @@ impl ProtoRepr for proto::ContractVerifier { .and_then(|x| Ok((*x).try_into()?)) .context("prometheus_port")?, url: required(&self.url).cloned().context("url")?, - port: required(&self.port) - .and_then(|x| Ok(*x as u16)) - .context("port")?, + port: required(&self.port).map(|x| *x as u16).context("port")?, }) } diff --git a/core/lib/protobuf_config/src/genesis.rs b/core/lib/protobuf_config/src/genesis.rs index 83c0e4f9198..d84797a0d74 100644 --- a/core/lib/protobuf_config/src/genesis.rs +++ b/core/lib/protobuf_config/src/genesis.rs @@ -26,7 +26,7 @@ impl ProtoRepr for proto::Genesis { }; Ok(Self::Type { protocol_version: required(&self.genesis_protocol_version) - .and_then(|x| Ok(*x as u16)) + .map(|x| *x as u16) .context("protocol_version")?, genesis_root_hash: required(&self.genesis_root) .and_then(|x| parse_h256(x)) @@ -43,7 +43,7 @@ impl ProtoRepr for proto::Genesis { .and_then(|x| parse_h256(x)) .context("default_aa_hash")?, l1_chain_id: required(&self.l1_chain_id) - .and_then(|x| Ok(L1ChainId(*x))) + .map(|x| L1ChainId(*x)) .context("l1_chain_id")?, l2_chain_id: required(&self.l2_chain_id) .and_then(|x| L2ChainId::try_from(*x).map_err(|a| anyhow::anyhow!(a))) @@ -69,8 +69,10 @@ impl ProtoRepr for proto::Genesis { } fn build(this: &Self::Type) -> Self { - let shared_bridge = if let Some(shared_bridge) = &this.shared_bridge { - Some(proto::SharedBridge { + let shared_bridge = this + .shared_bridge + .as_ref() + .map(|shared_bridge| proto::SharedBridge { bridgehub_proxy_addr: Some(shared_bridge.bridgehub_proxy_addr.as_bytes().into()), state_transition_proxy_addr: Some( shared_bridge.state_transition_proxy_addr.as_bytes().into(), @@ -78,10 +80,7 @@ impl ProtoRepr for proto::Genesis { transparent_proxy_admin_addr: Some( shared_bridge.transparent_proxy_admin_addr.as_bytes().into(), ), - }) - } else { - None - }; + }); Self { genesis_root: Some(this.genesis_root_hash.as_bytes().into()), diff --git a/core/lib/protobuf_config/src/prover.rs b/core/lib/protobuf_config/src/prover.rs index 4987c51aabc..da0f220e267 100644 --- a/core/lib/protobuf_config/src/prover.rs +++ b/core/lib/protobuf_config/src/prover.rs @@ -314,11 +314,6 @@ impl ProtoRepr for proto::Prover { } fn build(this: &Self::Type) -> Self { - let object_store = if let Some(object_store) = &this.object_store { - Some(ProtoRepr::build(object_store)) - } else { - None - }; Self { setup_data_path: Some(this.setup_data_path.clone()), prometheus_port: Some(this.prometheus_port.into()), @@ -339,7 +334,7 @@ impl ProtoRepr for proto::Prover { witness_vector_receiver_port: Some(this.witness_vector_receiver_port.into()), zone_read_url: Some(this.zone_read_url.clone()), shall_save_to_public_bucket: Some(this.shall_save_to_public_bucket), - object_store, + object_store: this.object_store.as_ref().map(ProtoRepr::build), } } } diff --git a/core/lib/protobuf_config/src/snapshots_creator.rs b/core/lib/protobuf_config/src/snapshots_creator.rs index 74cc2695ad1..b13d11915b1 100644 --- a/core/lib/protobuf_config/src/snapshots_creator.rs +++ b/core/lib/protobuf_config/src/snapshots_creator.rs @@ -22,15 +22,10 @@ impl ProtoRepr for proto::SnapshotsCreator { } fn build(this: &Self::Type) -> Self { - let object_store = if let Some(object_store) = &this.object_store { - Some(ProtoRepr::build(object_store)) - } else { - None - }; Self { storage_logs_chunk_size: Some(this.storage_logs_chunk_size), concurrent_queries_count: Some(this.concurrent_queries_count), - object_store, + object_store: this.object_store.as_ref().map(ProtoRepr::build), } } } diff --git a/core/lib/protobuf_config/src/tests.rs b/core/lib/protobuf_config/src/tests.rs index d21887ccd30..4a467900345 100644 --- a/core/lib/protobuf_config/src/tests.rs +++ b/core/lib/protobuf_config/src/tests.rs @@ -7,38 +7,30 @@ use crate::{ #[test] fn test_encoding() { let rng = &mut rand::thread_rng(); - encode_decode::>(rng); encode_decode::>(rng); - encode_decode::>(rng); encode_decode::>(rng); encode_decode::>(rng); encode_decode::>(rng); encode_decode::>(rng); - encode_decode::>(rng); encode_decode::>(rng); encode_decode::>(rng); encode_decode::>(rng); - encode_decode::>(rng); encode_decode::>(rng); encode_decode::>(rng); encode_decode::>(rng); encode_decode::>(rng); encode_decode::>(rng); - encode_decode::>(rng); - encode_decode::>(rng); - encode_decode::>(rng); - encode_decode::>(rng); - encode_decode::>(rng); - encode_decode::>(rng); - encode_decode::>(rng); - encode_decode::>(rng); - encode_decode::>(rng); - encode_decode::>(rng); - encode_decode::>(rng); - encode_decode::>(rng); + encode_decode::>(rng); + encode_decode::>(rng); + encode_decode::>(rng); + encode_decode::>(rng); + encode_decode::>(rng); + encode_decode::>(rng); + encode_decode::>(rng); + encode_decode::>(rng); encode_decode::>(rng); encode_decode::>(rng); - encode_decode::>(rng); + encode_decode::>(rng); encode_decode::>(rng); encode_decode::>(rng); encode_decode::>(rng); diff --git a/core/lib/protobuf_config/src/wallets.rs b/core/lib/protobuf_config/src/wallets.rs index 0ce67afc763..59a59847a23 100644 --- a/core/lib/protobuf_config/src/wallets.rs +++ b/core/lib/protobuf_config/src/wallets.rs @@ -18,7 +18,7 @@ impl ProtoRepr for proto::Wallets { blob_operator .address .as_ref() - .and_then(|a| parse_h160(&a).ok()), + .and_then(|a| parse_h160(a).ok()), )?) } else { None @@ -31,7 +31,7 @@ impl ProtoRepr for proto::Wallets { operator_wallet .address .as_ref() - .and_then(|a| parse_h160(&a).ok()), + .and_then(|a| parse_h160(a).ok()), )?; Some(EthSender { diff --git a/core/lib/zksync_core/src/api_server/contract_verification/mod.rs b/core/lib/zksync_core/src/api_server/contract_verification/mod.rs index 45b1a0a596d..83a53cfc98f 100644 --- a/core/lib/zksync_core/src/api_server/contract_verification/mod.rs +++ b/core/lib/zksync_core/src/api_server/contract_verification/mod.rs @@ -1,6 +1,6 @@ use anyhow::Context as _; use tokio::sync::watch; -use zksync_config::{configs::api::ContractVerificationApiConfig, ContractVerifierConfig}; +use zksync_config::ContractVerifierConfig; use zksync_dal::ConnectionPool; use self::api_decl::RestApi; diff --git a/core/lib/zksync_core/src/api_server/web3/state.rs b/core/lib/zksync_core/src/api_server/web3/state.rs index b4f1794a473..f1c943f7dd6 100644 --- a/core/lib/zksync_core/src/api_server/web3/state.rs +++ b/core/lib/zksync_core/src/api_server/web3/state.rs @@ -12,9 +12,7 @@ use lru::LruCache; use tokio::sync::{watch, Mutex}; use vise::GaugeGuard; use zksync_config::{ - configs::{ - api::Web3JsonRpcConfig, chain::NetworkConfig, genesis::SharedBridge, ContractsConfig, - }, + configs::{api::Web3JsonRpcConfig, ContractsConfig}, GenesisConfig, }; use zksync_dal::{Connection, ConnectionPool, Core, CoreDal}; diff --git a/core/lib/zksync_core/src/api_server/web3/tests/mod.rs b/core/lib/zksync_core/src/api_server/web3/tests/mod.rs index 4116147fdd8..7b261385682 100644 --- a/core/lib/zksync_core/src/api_server/web3/tests/mod.rs +++ b/core/lib/zksync_core/src/api_server/web3/tests/mod.rs @@ -14,7 +14,7 @@ use zksync_config::{ configs::{ api::Web3JsonRpcConfig, chain::{NetworkConfig, StateKeeperConfig}, - ContractsConfig, GeneralConfig, + ContractsConfig, }, GenesisConfig, }; @@ -282,7 +282,7 @@ async fn test_http_server(test: impl HttpTest) { drop(storage); let (stop_sender, stop_receiver) = watch::channel(false); - let contracts_config = ContractsConfig::for_tests().into(); + let contracts_config = ContractsConfig::for_tests(); let web3_config = Web3JsonRpcConfig::for_tests(); let genesis = GenesisConfig::for_tests(); let mut api_config = InternalApiConfig::new(&web3_config, &contracts_config, &genesis); diff --git a/core/lib/zksync_core/src/api_server/web3/tests/ws.rs b/core/lib/zksync_core/src/api_server/web3/tests/ws.rs index ff0f4237ef3..618c8ca7a6d 100644 --- a/core/lib/zksync_core/src/api_server/web3/tests/ws.rs +++ b/core/lib/zksync_core/src/api_server/web3/tests/ws.rs @@ -166,7 +166,8 @@ async fn test_ws_server(test: impl WsTest) { let network_config = NetworkConfig::for_tests(); let contracts_config = ContractsConfig::for_tests(); let web3_config = Web3JsonRpcConfig::for_tests(); - let api_config = InternalApiConfig::new(&network_config, &web3_config, &contracts_config); + let genesis_config = GenesisConfig::for_tests(); + let api_config = InternalApiConfig::new(&web3_config, &contracts_config, &genesis_config); let mut storage = pool.connection().await.unwrap(); test.storage_initialization() .prepare_storage(&network_config, &mut storage) diff --git a/core/lib/zksync_core/src/consensus/testonly.rs b/core/lib/zksync_core/src/consensus/testonly.rs index 9486e712881..c6236bb8ddd 100644 --- a/core/lib/zksync_core/src/consensus/testonly.rs +++ b/core/lib/zksync_core/src/consensus/testonly.rs @@ -10,18 +10,19 @@ use zksync_consensus_roles::validator; use zksync_contracts::BaseSystemContractsHashes; use zksync_dal::CoreDal; use zksync_types::{ - api, api::L1BatchDetails, snapshots::SnapshotRecoveryStatus, Address, L1BatchNumber, L1ChainId, - L2ChainId, MiniblockNumber, ProtocolVersionId, H256, + api, snapshots::SnapshotRecoveryStatus, Address, L1BatchNumber, L2ChainId, MiniblockNumber, + ProtocolVersionId, H256, }; use zksync_web3_decl::{ error::{EnrichedClientError, EnrichedClientResult}, jsonrpsee::http_client::HttpClient, }; +use crate::genesis::mock_genesis_config; use crate::{ api_server::web3::{state::InternalApiConfig, tests::spawn_http_server}, consensus::{fetcher::P2PConfig, Fetcher, Store}, - genesis::{insert_genesis_batch, GenesisParams}, + genesis::GenesisParams, state_keeper::{ io::{IoCursor, L1BatchParams, MiniblockParams}, seal_criteria::NoopSealer, @@ -414,9 +415,9 @@ impl StateKeeperRunner { s.spawn_bg(async { // Spawn HTTP server. let cfg = InternalApiConfig::new( - &configs::chain::NetworkConfig::for_tests(), &configs::api::Web3JsonRpcConfig::for_tests(), &configs::contracts::ContractsConfig::for_tests(), + &configs::GenesisConfig::for_tests(), ); let mut server = spawn_http_server( cfg, diff --git a/core/lib/zksync_core/src/genesis.rs b/core/lib/zksync_core/src/genesis.rs index 8486a8dd17e..09dd743446b 100644 --- a/core/lib/zksync_core/src/genesis.rs +++ b/core/lib/zksync_core/src/genesis.rs @@ -162,8 +162,14 @@ pub fn mock_genesis_config() -> GenesisConfig { l2_chain_id: L2ChainId::default(), recursion_node_level_vk_hash: first_l1_verifier_config.params.recursion_node_level_vk_hash, recursion_leaf_level_vk_hash: first_l1_verifier_config.params.recursion_leaf_level_vk_hash, + recursion_circuits_set_vks_hash: first_l1_verifier_config + .params + .recursion_circuits_set_vks_hash, recursion_scheduler_level_vk_hash: first_l1_verifier_config .recursion_scheduler_level_vk_hash, + fee_account: Default::default(), + shared_bridge: None, + dummy_prover: false, } } diff --git a/core/lib/zksync_core/src/lib.rs b/core/lib/zksync_core/src/lib.rs index 16e602dd391..9cc6baaad48 100644 --- a/core/lib/zksync_core/src/lib.rs +++ b/core/lib/zksync_core/src/lib.rs @@ -10,7 +10,6 @@ use std::{ use anyhow::Context as _; use api_server::tx_sender::master_pool_sink::MasterPoolSink; use fee_model::{ApiFeeInputProvider, BatchFeeModelInputProvider, MainNodeFeeInputProvider}; -use multivm::zk_evm_latest::ethereum_types::H256; use prometheus_exporter::PrometheusExporterConfig; use prover_dal::Prover; use temp_config_store::Secrets; @@ -22,14 +21,10 @@ use zksync_circuit_breaker::{ l1_txs::FailedL1TransactionChecker, replication_lag::ReplicationLagChecker, CircuitBreakerChecker, CircuitBreakers, }; -use zksync_concurrency::{ctx, scope}; use zksync_config::{ configs::{ api::{MerkleTreeApiConfig, Web3JsonRpcConfig}, - chain::{ - CircuitBreakerConfig, MempoolConfig, NetworkConfig, OperationsManagerConfig, - StateKeeperConfig, - }, + chain::{CircuitBreakerConfig, MempoolConfig, OperationsManagerConfig, StateKeeperConfig}, database::{MerkleTreeConfig, MerkleTreeMode}, wallets::Wallets, ContractsConfig, GeneralConfig, @@ -47,7 +42,7 @@ use zksync_health_check::{AppHealthCheck, HealthStatus, ReactiveHealthCheck}; use zksync_object_store::{ObjectStore, ObjectStoreFactory}; use zksync_queued_job_processor::JobProcessor; use zksync_state::PostgresStorageCaches; -use zksync_types::{fee_model::FeeModelConfig, Address, L1ChainId, L2ChainId, PackedEthSignature}; +use zksync_types::{fee_model::FeeModelConfig, L2ChainId}; use crate::{ api_server::{ @@ -230,7 +225,7 @@ pub async fn initialize_components( genesis_config: &GenesisConfig, contracts_config: &ContractsConfig, components: &[Component], - secrets: &Secrets, + _secrets: &Secrets, ) -> anyhow::Result<( Vec>>, watch::Sender, @@ -342,11 +337,8 @@ pub async fn initialize_components( .context("state_keeper_config")?; let tx_sender_config = TxSenderConfig::new(&state_keeper_config, &api_config.web3_json_rpc, l2_chain_id); - let internal_api_config = InternalApiConfig::new( - &api_config.web3_json_rpc, - &contracts_config, - &genesis_config, - ); + let internal_api_config = + InternalApiConfig::new(&api_config.web3_json_rpc, contracts_config, genesis_config); // Lazily initialize storage caches only when they are needed (e.g., skip their initialization // if we only run the explorer APIs). This is required because the cache update task will @@ -494,7 +486,7 @@ pub async fn initialize_components( add_state_keeper_to_task_futures( &mut task_futures, &postgres_config, - &contracts_config, + contracts_config, state_keeper_config, l2_chain_id, &db_config, @@ -675,7 +667,7 @@ pub async fn initialize_components( diamond_proxy_addr, default_priority_fee_per_gas, l1_chain_id, - &web3_url, + web3_url, )) } else { None diff --git a/core/lib/zksync_core/src/state_keeper/mempool_actor.rs b/core/lib/zksync_core/src/state_keeper/mempool_actor.rs index 15c054b8a97..936d630fc10 100644 --- a/core/lib/zksync_core/src/state_keeper/mempool_actor.rs +++ b/core/lib/zksync_core/src/state_keeper/mempool_actor.rs @@ -218,7 +218,7 @@ mod tests { #[tokio::test] async fn syncing_mempool_basics() { let pool = ConnectionPool::constrained_test_pool(1).await; - let mut storage = pool.access_storage().await.unwrap(); + let mut storage = pool.connection().await.unwrap(); insert_genesis_batch(&mut storage, &GenesisParams::mock()) .await .unwrap(); diff --git a/core/lib/zksync_core/src/temp_config_store/mod.rs b/core/lib/zksync_core/src/temp_config_store/mod.rs index 7f393f48949..a298dce0cc7 100644 --- a/core/lib/zksync_core/src/temp_config_store/mod.rs +++ b/core/lib/zksync_core/src/temp_config_store/mod.rs @@ -20,9 +20,6 @@ use zksync_protobuf::{read_optional, repr::ProtoRepr, ProtoFmt}; use crate::{consensus, proto}; -#[cfg(test)] -mod tests; - pub fn decode_yaml(yaml: &str) -> anyhow::Result { let d = serde_yaml::Deserializer::from_str(yaml); let this: T = zksync_protobuf::serde::deserialize(d)?; diff --git a/core/lib/zksync_core/src/temp_config_store/tests.rs b/core/lib/zksync_core/src/temp_config_store/tests.rs deleted file mode 100644 index f66d96ea153..00000000000 --- a/core/lib/zksync_core/src/temp_config_store/tests.rs +++ /dev/null @@ -1,44 +0,0 @@ -use rand::Rng; -use zksync_config::testonly; -use zksync_protobuf_config::testonly::{encode_decode, FmtConv}; - -use super::*; - -impl testonly::RandomConfig for TempConfigStore { - fn sample(g: &mut testonly::Gen) -> Self { - Self { - postgres_config: g.gen(), - health_check_config: g.gen(), - merkle_tree_api_config: g.gen(), - web3_json_rpc_config: g.gen(), - circuit_breaker_config: g.gen(), - mempool_config: g.gen(), - network_config: g.gen(), - operations_manager_config: g.gen(), - state_keeper_config: g.gen(), - house_keeper_config: g.gen(), - fri_proof_compressor_config: g.gen(), - fri_prover_config: g.gen(), - fri_prover_group_config: g.gen(), - fri_witness_generator_config: g.gen(), - prometheus_config: g.gen(), - proof_data_handler_config: g.gen(), - witness_generator_config: g.gen(), - api_config: g.gen(), - contracts_config: g.gen(), - db_config: g.gen(), - eth_client_config: g.gen(), - eth_sender_config: g.gen(), - eth_watch_config: g.gen(), - gas_adjuster_config: g.gen(), - object_store_config: g.gen(), - consensus_config: g.gen(), - } - } -} - -#[test] -fn test_encoding() { - let rng = &mut rand::thread_rng(); - encode_decode::>(rng); -} From 1ca6ecd323cd856e605475f171452dfeae2e8c5f Mon Sep 17 00:00:00 2001 From: Danil Date: Wed, 27 Mar 2024 14:58:09 +0100 Subject: [PATCH 43/65] Resolve some todos Signed-off-by: Danil --- core/lib/config/src/configs/database.rs | 2 ++ core/lib/config/src/configs/genesis.rs | 22 ++++++++++++++- core/lib/config/src/testonly.rs | 2 ++ .../src/eip712_signature/tests.rs | 2 +- core/lib/env_config/src/database.rs | 4 +++ core/lib/env_config/src/eth_sender.rs | 10 +++++-- core/lib/env_config/src/fri_prover.rs | 10 +++---- core/lib/env_config/src/genesis.rs | 25 +++++++++++++++-- core/lib/protobuf_config/src/database.rs | 13 +++++++-- .../src/api_server/web3/namespaces/en.rs | 28 +++++++++++++++++-- .../zksync_core/src/api_server/web3/state.rs | 10 +++++++ .../lib/zksync_core/src/consensus/testonly.rs | 3 +- 12 files changed, 111 insertions(+), 20 deletions(-) diff --git a/core/lib/config/src/configs/database.rs b/core/lib/config/src/configs/database.rs index b88ccb6d449..ba36d708595 100644 --- a/core/lib/config/src/configs/database.rs +++ b/core/lib/config/src/configs/database.rs @@ -146,6 +146,8 @@ pub struct PostgresConfig { pub long_connection_threshold_ms: Option, /// Threshold in milliseconds to denote a DB query as "slow" and log its details. pub slow_query_threshold_ms: Option, + pub test_server_url: Option, + pub test_prover_url: Option, } impl PostgresConfig { diff --git a/core/lib/config/src/configs/genesis.rs b/core/lib/config/src/configs/genesis.rs index 866b5724674..982b55e3e52 100644 --- a/core/lib/config/src/configs/genesis.rs +++ b/core/lib/config/src/configs/genesis.rs @@ -31,6 +31,26 @@ pub struct GenesisConfig { impl GenesisConfig { pub fn for_tests() -> Self { - todo!() + GenesisConfig { + genesis_root_hash: H256::repeat_byte(0x01), + rollup_last_leaf_index: 26, + recursion_scheduler_level_vk_hash: H256::repeat_byte(0x02), + fee_account: Default::default(), + shared_bridge: Some(SharedBridge { + bridgehub_proxy_addr: Address::repeat_byte(0x14), + state_transition_proxy_addr: Address::repeat_byte(0x16), + transparent_proxy_admin_addr: Address::repeat_byte(0x16), + }), + recursion_node_level_vk_hash: H256::repeat_byte(0x03), + recursion_leaf_level_vk_hash: H256::repeat_byte(0x04), + recursion_circuits_set_vks_hash: H256::repeat_byte(0x05), + genesis_commitment: H256::repeat_byte(0x17), + bootloader_hash: Default::default(), + default_aa_hash: Default::default(), + l1_chain_id: L1ChainId(9), + protocol_version: 22, + l2_chain_id: L2ChainId::default(), + dummy_prover: false, + } } } diff --git a/core/lib/config/src/testonly.rs b/core/lib/config/src/testonly.rs index d0cbcdb8591..c767c015083 100644 --- a/core/lib/config/src/testonly.rs +++ b/core/lib/config/src/testonly.rs @@ -401,6 +401,8 @@ impl RandomConfig for configs::database::PostgresConfig { statement_timeout_sec: g.gen(), long_connection_threshold_ms: g.gen(), slow_query_threshold_ms: g.gen(), + test_server_url: g.gen(), + test_prover_url: g.gen(), } } } diff --git a/core/lib/crypto_primitives/src/eip712_signature/tests.rs b/core/lib/crypto_primitives/src/eip712_signature/tests.rs index 0314c8cdcfb..806df2bd522 100644 --- a/core/lib/crypto_primitives/src/eip712_signature/tests.rs +++ b/core/lib/crypto_primitives/src/eip712_signature/tests.rs @@ -1,6 +1,7 @@ use std::str::FromStr; use serde::Serialize; +use web3::signing::keccak256; use zksync_basic_types::{Address, H256, U256}; use crate::{ @@ -11,7 +12,6 @@ use crate::{ }, PackedEthSignature, }; -use web3::signing::keccak256; #[derive(Clone, Serialize)] struct Person { diff --git a/core/lib/env_config/src/database.rs b/core/lib/env_config/src/database.rs index 6a66f200ec3..448eadde3ad 100644 --- a/core/lib/env_config/src/database.rs +++ b/core/lib/env_config/src/database.rs @@ -37,6 +37,8 @@ impl FromEnv for PostgresConfig { let prover_url = env::var("DATABASE_PROVER_URL") .ok() .or_else(|| master_url.clone()); + let test_server_url = env::var("TEST_DATABASE_URL").ok(); + let test_prover_url = env::var("TEST_DATABASE_PROVER_URL").ok(); let max_connections = parse_optional_var("DATABASE_POOL_SIZE")?; let max_connections_master = parse_optional_var("DATABASE_POOL_SIZE_MASTER")?; let acquire_timeout_sec = parse_optional_var("DATABASE_ACQUIRE_TIMEOUT_SEC")?; @@ -55,6 +57,8 @@ impl FromEnv for PostgresConfig { statement_timeout_sec, long_connection_threshold_ms, slow_query_threshold_ms, + test_server_url, + test_prover_url, }) } } diff --git a/core/lib/env_config/src/eth_sender.rs b/core/lib/env_config/src/eth_sender.rs index 2f788765e7a..09d42128259 100644 --- a/core/lib/env_config/src/eth_sender.rs +++ b/core/lib/env_config/src/eth_sender.rs @@ -76,10 +76,10 @@ mod tests { max_blob_base_fee: None, }, watcher: ETHWatchConfig { - confirmations_for_eth_event: None, - eth_node_poll_interval: 0, + confirmations_for_eth_event: Some(4), + eth_node_poll_interval: 2, }, - web3_url: "".to_string(), + web3_url: "http://127.0.0.1:8545".to_string(), } } @@ -87,6 +87,8 @@ mod tests { fn from_env() { let mut lock = MUTEX.lock(); let config = r#" + ETH_WATCH_CONFIRMATIONS_FOR_ETH_EVENT = "4" + ETH_WATCH_ETH_NODE_POLL_INTERVAL = "2" ETH_SENDER_SENDER_WAIT_CONFIRMATIONS="1" ETH_SENDER_SENDER_TX_POLL_PERIOD="3" ETH_SENDER_SENDER_AGGREGATE_TX_POLL_PERIOD="3" @@ -116,6 +118,8 @@ mod tests { ETH_SENDER_SENDER_MAX_ACCEPTABLE_PRIORITY_FEE_IN_GWEI="100000000000" ETH_SENDER_SENDER_PROOF_LOADING_MODE="OldProofFromDb" ETH_SENDER_SENDER_PUBDATA_SENDING_MODE="Calldata" + ETH_CLIENT_WEB3_URL="http://127.0.0.1:8545" + "#; lock.set_env(config); diff --git a/core/lib/env_config/src/fri_prover.rs b/core/lib/env_config/src/fri_prover.rs index 38cc1f73c39..f888436dc71 100644 --- a/core/lib/env_config/src/fri_prover.rs +++ b/core/lib/env_config/src/fri_prover.rs @@ -1,5 +1,4 @@ -use zksync_config::configs::FriProverConfig; -use zksync_config::ObjectStoreConfig; +use zksync_config::{configs::FriProverConfig, ObjectStoreConfig}; use crate::{envy_load, FromEnv}; @@ -13,9 +12,10 @@ impl FromEnv for FriProverConfig { #[cfg(test)] mod tests { - use zksync_config::configs::fri_prover::SetupLoadMode; - use zksync_config::configs::object_store::ObjectStoreMode; - use zksync_config::ObjectStoreConfig; + use zksync_config::{ + configs::{fri_prover::SetupLoadMode, object_store::ObjectStoreMode}, + ObjectStoreConfig, + }; use super::*; use crate::test_utils::EnvMutex; diff --git a/core/lib/env_config/src/genesis.rs b/core/lib/env_config/src/genesis.rs index fad506fdeae..2eed234eb9f 100644 --- a/core/lib/env_config/src/genesis.rs +++ b/core/lib/env_config/src/genesis.rs @@ -1,8 +1,11 @@ -use anyhow::anyhow; +use anyhow::{anyhow, Context}; use serde::{Deserialize, Serialize}; use zksync_basic_types::{Address, H256}; use zksync_config::{ - configs::chain::{NetworkConfig, StateKeeperConfig}, + configs::{ + chain::{NetworkConfig, StateKeeperConfig}, + genesis::SharedBridge, + }, GenesisConfig, }; @@ -42,6 +45,22 @@ impl FromEnv for GenesisConfig { let network_config = &NetworkConfig::from_env()?; let contracts_config = &ContractsForGenesis::from_env()?; let state_keeper = StateKeeperConfig::from_env()?; + let shared_bridge = if let Some(state_transition_proxy_addr) = + contracts_config.state_transition_proxy_addr + { + Some(SharedBridge { + bridgehub_proxy_addr: contracts_config + .bridgehub_proxy_addr + .context("Must be specified with state_transition_proxy_addr")?, + state_transition_proxy_addr, + transparent_proxy_admin_addr: contracts_config + .transparent_proxy_admin_addr + .context("Must be specified with state_transition_proxy_addr")?, + }) + } else { + None + }; + Ok(GenesisConfig { protocol_version: contracts_config .genesis_protocol_version @@ -68,7 +87,7 @@ impl FromEnv for GenesisConfig { recursion_circuits_set_vks_hash: H256::zero(), recursion_scheduler_level_vk_hash: contracts_config.snark_wrapper_vk_hash, fee_account: state_keeper.fee_account_addr, - shared_bridge: None, + shared_bridge, dummy_prover: false, }) } diff --git a/core/lib/protobuf_config/src/database.rs b/core/lib/protobuf_config/src/database.rs index 0c896617c3d..146ea58e09e 100644 --- a/core/lib/protobuf_config/src/database.rs +++ b/core/lib/protobuf_config/src/database.rs @@ -87,6 +87,11 @@ impl ProtoRepr for proto::Postgres { type Type = configs::database::PostgresConfig; fn read(&self) -> anyhow::Result { + let (test_server_url, test_prover_url) = self + .test + .as_ref() + .map(|x| (x.server_url.clone(), x.prover_url.clone())) + .unwrap_or_default(); Ok(Self::Type { master_url: self.server_url.clone(), replica_url: self.server_replica_url.clone(), @@ -97,6 +102,8 @@ impl ProtoRepr for proto::Postgres { statement_timeout_sec: self.statement_timeout_sec, long_connection_threshold_ms: self.long_connection_threshold_ms, slow_query_threshold_ms: self.slow_query_threshold_ms, + test_server_url, + test_prover_url, }) } @@ -111,8 +118,10 @@ impl ProtoRepr for proto::Postgres { statement_timeout_sec: this.statement_timeout_sec, long_connection_threshold_ms: this.long_connection_threshold_ms, slow_query_threshold_ms: this.slow_query_threshold_ms, - // Fill with test data - test: None, + test: Some(proto::TestDatabase { + server_url: this.test_server_url.clone(), + prover_url: this.prover_url.clone(), + }), } } } diff --git a/core/lib/zksync_core/src/api_server/web3/namespaces/en.rs b/core/lib/zksync_core/src/api_server/web3/namespaces/en.rs index d91569dc21a..563ab6943c0 100644 --- a/core/lib/zksync_core/src/api_server/web3/namespaces/en.rs +++ b/core/lib/zksync_core/src/api_server/web3/namespaces/en.rs @@ -1,5 +1,5 @@ use anyhow::Context as _; -use zksync_config::GenesisConfig; +use zksync_config::{configs::genesis::SharedBridge, GenesisConfig}; use zksync_dal::CoreDal; use zksync_types::{api::en, tokens::TokenInfo, L1BatchNumber, MiniblockNumber, H256}; use zksync_web3_decl::error::Web3Error; @@ -91,6 +91,29 @@ impl EnNamespace { .await .context("genesis_config")? .context("Genesis not finished")?; + + let shared_bridge = if self.state.api_config.state_transition_proxy_addr.is_some() { + Some(SharedBridge { + bridgehub_proxy_addr: self + .state + .api_config + .bridgehub_proxy_addr + .context("Bridge proxy is not set with state_transition")?, + state_transition_proxy_addr: self + .state + .api_config + .state_transition_proxy_addr + .unwrap(), + transparent_proxy_admin_addr: self + .state + .api_config + .transparent_proxy_admin_addr + .context("transparent_proxy_admin_addr is not set with state_transition")?, + }) + } else { + None + }; + let config = GenesisConfig { protocol_version, genesis_root_hash: H256::from_slice( @@ -122,8 +145,7 @@ impl EnNamespace { recursion_circuits_set_vks_hash: Default::default(), recursion_scheduler_level_vk_hash: verifier_config.recursion_scheduler_level_vk_hash, fee_account, - // TODO Set proper values - shared_bridge: None, + shared_bridge, dummy_prover: false, }; Ok(config) diff --git a/core/lib/zksync_core/src/api_server/web3/state.rs b/core/lib/zksync_core/src/api_server/web3/state.rs index f1c943f7dd6..c1a0d8d45d8 100644 --- a/core/lib/zksync_core/src/api_server/web3/state.rs +++ b/core/lib/zksync_core/src/api_server/web3/state.rs @@ -90,6 +90,8 @@ pub struct InternalApiConfig { pub estimate_gas_acceptable_overestimation: u32, pub bridge_addresses: api::BridgeAddresses, pub bridgehub_proxy_addr: Option
, + pub state_transition_proxy_addr: Option
, + pub transparent_proxy_admin_addr: Option
, pub diamond_proxy_addr: Address, pub l2_testnet_paymaster_addr: Option
, pub req_entities_limit: usize, @@ -122,6 +124,14 @@ impl InternalApiConfig { .shared_bridge .as_ref() .map(|a| a.bridgehub_proxy_addr), + state_transition_proxy_addr: genesis_config + .shared_bridge + .as_ref() + .map(|a| a.state_transition_proxy_addr), + transparent_proxy_admin_addr: genesis_config + .shared_bridge + .as_ref() + .map(|a| a.transparent_proxy_admin_addr), diamond_proxy_addr: contracts_config.diamond_proxy_addr, l2_testnet_paymaster_addr: contracts_config.l2_testnet_paymaster_addr, req_entities_limit: web3_config.req_entities_limit(), diff --git a/core/lib/zksync_core/src/consensus/testonly.rs b/core/lib/zksync_core/src/consensus/testonly.rs index c6236bb8ddd..15c85ad636f 100644 --- a/core/lib/zksync_core/src/consensus/testonly.rs +++ b/core/lib/zksync_core/src/consensus/testonly.rs @@ -18,11 +18,10 @@ use zksync_web3_decl::{ jsonrpsee::http_client::HttpClient, }; -use crate::genesis::mock_genesis_config; use crate::{ api_server::web3::{state::InternalApiConfig, tests::spawn_http_server}, consensus::{fetcher::P2PConfig, Fetcher, Store}, - genesis::GenesisParams, + genesis::{mock_genesis_config, GenesisParams}, state_keeper::{ io::{IoCursor, L1BatchParams, MiniblockParams}, seal_criteria::NoopSealer, From 04f1eb6413523505d5e3f3eeb712dbf49505dd99 Mon Sep 17 00:00:00 2001 From: Danil Date: Wed, 27 Mar 2024 16:23:23 +0100 Subject: [PATCH 44/65] Return consensus config Signed-off-by: Danil --- core/bin/external_node/src/config/mod.rs | 3 + core/bin/zksync_server/src/main.rs | 3 + core/lib/crypto_primitives/Cargo.toml | 2 +- .../protobuf_config/src/proto/database.proto | 2 +- .../protobuf_config/src/proto/wallets.proto | 2 +- core/lib/zksync_core/src/lib.rs | 90 ++++++++----------- .../zksync_core/src/temp_config_store/mod.rs | 34 ++++++- 7 files changed, 80 insertions(+), 56 deletions(-) diff --git a/core/bin/external_node/src/config/mod.rs b/core/bin/external_node/src/config/mod.rs index 057d9126c67..81daf7481d2 100644 --- a/core/bin/external_node/src/config/mod.rs +++ b/core/bin/external_node/src/config/mod.rs @@ -633,6 +633,9 @@ impl From for InternalApiConfig { l2_weth_bridge: config.remote.l2_weth_bridge_addr, }, bridgehub_proxy_addr: config.remote.bridgehub_proxy_addr, + // TODO set values + state_transition_proxy_addr: None, + transparent_proxy_admin_addr: None, diamond_proxy_addr: config.remote.diamond_proxy_addr, l2_testnet_paymaster_addr: config.remote.l2_testnet_paymaster_addr, req_entities_limit: config.optional.req_entities_limit, diff --git a/core/bin/zksync_server/src/main.rs b/core/bin/zksync_server/src/main.rs index 9f1e57df79d..1ee245ea839 100644 --- a/core/bin/zksync_server/src/main.rs +++ b/core/bin/zksync_server/src/main.rs @@ -159,6 +159,8 @@ async fn main() -> anyhow::Result<()> { }, }; + let consensus = config::read_consensus_config().context("read_consensus_config()")?; + let contracts_config: ContractsConfig = match opt.contracts_config_path { None => ContractsConfig::from_env() .context("contracts_config")? @@ -214,6 +216,7 @@ async fn main() -> anyhow::Result<()> { &contracts_config, &components, &secrets, + consensus, ) .await .context("Unable to start Core actors")?; diff --git a/core/lib/crypto_primitives/Cargo.toml b/core/lib/crypto_primitives/Cargo.toml index d41a1d73bdc..24fd36ebe33 100644 --- a/core/lib/crypto_primitives/Cargo.toml +++ b/core/lib/crypto_primitives/Cargo.toml @@ -20,4 +20,4 @@ thiserror.workspace = true serde_json.workspace = true serde.workspace = true hex.workspace = true -anyhow.workspace = true \ No newline at end of file +anyhow.workspace = true diff --git a/core/lib/protobuf_config/src/proto/database.proto b/core/lib/protobuf_config/src/proto/database.proto index 205033cc383..2e4821c654a 100644 --- a/core/lib/protobuf_config/src/proto/database.proto +++ b/core/lib/protobuf_config/src/proto/database.proto @@ -38,4 +38,4 @@ message Postgres { message TestDatabase { optional string server_url = 1; // optional optional string prover_url = 2; // optional -} \ No newline at end of file +} diff --git a/core/lib/protobuf_config/src/proto/wallets.proto b/core/lib/protobuf_config/src/proto/wallets.proto index af4c22a17fa..05e67221a13 100644 --- a/core/lib/protobuf_config/src/proto/wallets.proto +++ b/core/lib/protobuf_config/src/proto/wallets.proto @@ -12,4 +12,4 @@ message Wallets { optional Wallet operator = 1; // Private key is required optional Wallet blob_operator = 2; // Private key is required optional Wallet fee_account = 3; // Only address required for server -} \ No newline at end of file +} diff --git a/core/lib/zksync_core/src/lib.rs b/core/lib/zksync_core/src/lib.rs index 9cc6baaad48..0c653e37cd2 100644 --- a/core/lib/zksync_core/src/lib.rs +++ b/core/lib/zksync_core/src/lib.rs @@ -21,6 +21,7 @@ use zksync_circuit_breaker::{ l1_txs::FailedL1TransactionChecker, replication_lag::ReplicationLagChecker, CircuitBreakerChecker, CircuitBreakers, }; +use zksync_concurrency::{ctx, scope}; use zksync_config::{ configs::{ api::{MerkleTreeApiConfig, Web3JsonRpcConfig}, @@ -44,6 +45,7 @@ use zksync_queued_job_processor::JobProcessor; use zksync_state::PostgresStorageCaches; use zksync_types::{fee_model::FeeModelConfig, L2ChainId}; +use crate::consensus::MainNodeConfig; use crate::{ api_server::{ contract_verification, @@ -221,11 +223,12 @@ impl FromStr for Components { pub async fn initialize_components( configs: &GeneralConfig, - wallets: Option, + wallets: Wallets, genesis_config: &GenesisConfig, contracts_config: &ContractsConfig, components: &[Component], - _secrets: &Secrets, + secrets: &Secrets, + consensus_config: Option, ) -> anyhow::Result<( Vec>>, watch::Sender, @@ -504,43 +507,37 @@ pub async fn initialize_components( } if components.contains(&Component::Consensus) { - todo!() - // let cfg = configs - // .consensus_config - // .as_ref() - // .context("consensus component's config is missing")? - // .main_node( - // secrets - // .consensus - // .as_ref() - // .context("consensus secrets are missing")?, - // )?; - // let started_at = Instant::now(); - // tracing::info!("initializing Consensus"); - // let pool = connection_pool.clone(); - // let mut stop_receiver = stop_receiver.clone(); - // task_futures.push(tokio::spawn(async move { - // scope::run!(&ctx::root(), |ctx, s| async { - // s.spawn_bg(async { - // // Consensus is a new component. - // // For now in case of error we just log it and allow the server - // // to continue running. - // if let Err(err) = cfg.run(ctx, consensus::Store(pool)).await { - // tracing::error!(%err, "Consensus actor failed"); - // } else { - // tracing::info!("Consensus actor stopped"); - // } - // Ok(()) - // }); - // let _ = stop_receiver.wait_for(|stop| *stop).await?; - // Ok(()) - // }) - // .await - // })); - // - // let elapsed = started_at.elapsed(); - // APP_METRICS.init_latency[&InitStage::Consensus].set(elapsed); - // tracing::info!("initialized Consensus in {elapsed:?}"); + let secrets = secrets.consensus.as_ref().context("Secrets are missing")?; + let cfg = consensus_config + .clone() + .context("consensus component's config is missing")? + .main_node(secrets)?; + let started_at = Instant::now(); + tracing::info!("initializing Consensus"); + let pool = connection_pool.clone(); + let mut stop_receiver = stop_receiver.clone(); + task_futures.push(tokio::spawn(async move { + scope::run!(&ctx::root(), |ctx, s| async { + s.spawn_bg(async { + // Consensus is a new component. + // For now in case of error we just log it and allow the server + // to continue running. + if let Err(err) = cfg.run(ctx, consensus::Store(pool)).await { + tracing::error!(%err, "Consensus actor failed"); + } else { + tracing::info!("Consensus actor stopped"); + } + Ok(()) + }); + let _ = stop_receiver.wait_for(|stop| *stop).await?; + Ok(()) + }) + .await + })); + + let elapsed = started_at.elapsed(); + APP_METRICS.init_latency[&InitStage::Consensus].set(elapsed); + tracing::info!("initialized Consensus in {elapsed:?}"); } let main_zksync_contract_address = contracts_config.diamond_proxy_addr; @@ -579,13 +576,8 @@ pub async fn initialize_components( .await .context("failed to build eth_sender_pool")?; - let eth_sender = configs.eth.clone().context("eth_sender_config")?; - let eth_sender_wallets = wallets - .clone() - .context("wallets")? - .eth_sender - .clone() - .context("eth_sender")?; + let eth_sender = configs.eth.as_ref().context("eth_sender_config")?; + let eth_sender_wallets = wallets.eth_sender.clone().context("eth_sender")?; let operator_private_key = eth_sender_wallets .operator .private_key() @@ -638,11 +630,7 @@ pub async fn initialize_components( .await .context("failed to build eth_manager_pool")?; let eth_sender = configs.eth.clone().context("eth_sender_config")?; - let eth_sender_wallets = wallets - .context("wallets")? - .clone() - .eth_sender - .context("eth_sender")?; + let eth_sender_wallets = wallets.eth_sender.context("eth_sender")?; let operator_private_key = eth_sender_wallets .operator .private_key() diff --git a/core/lib/zksync_core/src/temp_config_store/mod.rs b/core/lib/zksync_core/src/temp_config_store/mod.rs index a298dce0cc7..dfbe5c05dd5 100644 --- a/core/lib/zksync_core/src/temp_config_store/mod.rs +++ b/core/lib/zksync_core/src/temp_config_store/mod.rs @@ -1,4 +1,5 @@ use anyhow::Context as _; +use zksync_config::configs::wallets::{EthSender, StateKeeper, Wallet}; use zksync_config::{ configs::{ api::{HealthCheckConfig, MerkleTreeApiConfig, Web3JsonRpcConfig}, @@ -110,7 +111,36 @@ impl TempConfigStore { } } - pub fn wallets(&self) -> Option { - todo!() + pub fn wallets(&self) -> Wallets { + let eth_sender = self + .eth_sender_config + .as_ref() + .map(|x| { + let operator = x + .sender + .private_key() + .map(|operator| Wallet::from_private_key(operator, None).ok()) + .flatten(); + let blob_operator = x + .sender + .private_key_blobs() + .map(|operator| Wallet::from_private_key(operator, None).ok()) + .flatten(); + operator.map(|operator| EthSender { + operator, + blob_operator, + }) + }) + .flatten(); + let state_keeper = self + .state_keeper_config + .as_ref() + .map(|state_keeper| StateKeeper { + fee_account: Wallet::from_address(state_keeper.fee_account_addr), + }); + Wallets { + eth_sender, + state_keeper, + } } } From 3d8ef8b9574c0ac5170bade587ad1696bf915858 Mon Sep 17 00:00:00 2001 From: Danil Date: Wed, 27 Mar 2024 16:41:44 +0100 Subject: [PATCH 45/65] Load configs from files Signed-off-by: Danil --- core/bin/zksync_server/src/main.rs | 98 ++++++++++--------- core/lib/zksync_core/src/lib.rs | 1 - .../zksync_core/src/temp_config_store/mod.rs | 36 +++---- 3 files changed, 68 insertions(+), 67 deletions(-) diff --git a/core/bin/zksync_server/src/main.rs b/core/bin/zksync_server/src/main.rs index 1ee245ea839..9b7bc4a573c 100644 --- a/core/bin/zksync_server/src/main.rs +++ b/core/bin/zksync_server/src/main.rs @@ -12,8 +12,8 @@ use zksync_config::{ fri_prover_group::FriProverGroupConfig, house_keeper::HouseKeeperConfig, ContractsConfig, FriProofCompressorConfig, FriProverConfig, FriProverGatewayConfig, - FriWitnessGeneratorConfig, FriWitnessVectorGeneratorConfig, GeneralConfig, - ObservabilityConfig, PrometheusConfig, ProofDataHandlerConfig, WitnessGeneratorConfig, + FriWitnessGeneratorConfig, FriWitnessVectorGeneratorConfig, ObservabilityConfig, + PrometheusConfig, ProofDataHandlerConfig, WitnessGeneratorConfig, }, ApiConfig, ContractVerifierConfig, DBConfig, ETHConfig, ETHWatchConfig, GasAdjusterConfig, GenesisConfig, ObjectStoreConfig, PostgresConfig, @@ -24,7 +24,6 @@ use zksync_core::{ Component, Components, }; use zksync_env_config::FromEnv; -use zksync_protobuf_config; use zksync_storage::RocksDB; use zksync_utils::wait_for_tasks::ManagedTasks; @@ -60,6 +59,9 @@ struct Cli { /// Path to the yaml with secrets. If set, it will be used instead of env vars. #[arg(long)] contracts_config_path: Option, + /// Path to the wallets config. If set, it will be used instead of env vars. + #[arg(long)] + wallets_path: Option, } #[derive(Debug, Clone)] @@ -106,46 +108,25 @@ async fn main() -> anyhow::Result<()> { tracing::info!("No sentry URL was provided"); } - // TODO (QIT-22): Only deserialize configs on demand. - // Right now, we are trying to deserialize all the configs that may be needed by `zksync_core`. - // "May" is the key word here, since some configs are only used by certain component configuration, - // hence we are using `Option`s. - let (configs, wallets) = match opt.config_path { + let tmp_config = load_env_config()?; + + let configs = match opt.config_path { + None => tmp_config.general(), Some(path) => { - todo!() + let yaml = + std::fs::read_to_string(&path).with_context(|| path.display().to_string())?; + decode_yaml_repr::(&yaml) + .context("failed decoding YAML config")? } - None => { - let config = TempConfigStore { - postgres_config: PostgresConfig::from_env().ok(), - health_check_config: HealthCheckConfig::from_env().ok(), - merkle_tree_api_config: MerkleTreeApiConfig::from_env().ok(), - web3_json_rpc_config: Web3JsonRpcConfig::from_env().ok(), - circuit_breaker_config: CircuitBreakerConfig::from_env().ok(), - mempool_config: MempoolConfig::from_env().ok(), - network_config: NetworkConfig::from_env().ok(), - contract_verifier: ContractVerifierConfig::from_env().ok(), - operations_manager_config: OperationsManagerConfig::from_env().ok(), - state_keeper_config: StateKeeperConfig::from_env().ok(), - house_keeper_config: HouseKeeperConfig::from_env().ok(), - fri_proof_compressor_config: FriProofCompressorConfig::from_env().ok(), - fri_prover_config: Some(FriProverConfig::from_env().context("fri_prover_config")?), - fri_prover_group_config: FriProverGroupConfig::from_env().ok(), - fri_prover_gateway_config: FriProverGatewayConfig::from_env().ok(), - fri_witness_vector_generator: FriWitnessVectorGeneratorConfig::from_env().ok(), - fri_witness_generator_config: FriWitnessGeneratorConfig::from_env().ok(), - prometheus_config: PrometheusConfig::from_env().ok(), - proof_data_handler_config: ProofDataHandlerConfig::from_env().ok(), - witness_generator_config: WitnessGeneratorConfig::from_env().ok(), - api_config: ApiConfig::from_env().ok(), - db_config: DBConfig::from_env().ok(), - eth_sender_config: ETHConfig::from_env().ok(), - eth_watch_config: ETHWatchConfig::from_env().ok(), - gas_adjuster_config: GasAdjusterConfig::from_env().ok(), - object_store_config: ObjectStoreConfig::from_env().ok(), - consensus_config: config::read_consensus_config() - .context("read_consensus_config()")?, - }; - (config.general(), config.wallets()) + }; + + let wallets = match opt.wallets_path { + None => tmp_config.wallets(), + Some(path) => { + let yaml = + std::fs::read_to_string(&path).with_context(|| path.display().to_string())?; + decode_yaml_repr::(&yaml) + .context("failed decoding YAML config")? } }; let secrets: Secrets = match opt.secrets_path { @@ -162,9 +143,7 @@ async fn main() -> anyhow::Result<()> { let consensus = config::read_consensus_config().context("read_consensus_config()")?; let contracts_config: ContractsConfig = match opt.contracts_config_path { - None => ContractsConfig::from_env() - .context("contracts_config")? - .into(), + None => ContractsConfig::from_env().context("contracts_config")?, Some(path) => { let yaml = std::fs::read_to_string(&path).with_context(|| path.display().to_string())?; @@ -247,3 +226,34 @@ async fn main() -> anyhow::Result<()> { tracing::info!("Stopped"); Ok(()) } + +fn load_env_config() -> anyhow::Result { + Ok(TempConfigStore { + postgres_config: PostgresConfig::from_env().ok(), + health_check_config: HealthCheckConfig::from_env().ok(), + merkle_tree_api_config: MerkleTreeApiConfig::from_env().ok(), + web3_json_rpc_config: Web3JsonRpcConfig::from_env().ok(), + circuit_breaker_config: CircuitBreakerConfig::from_env().ok(), + mempool_config: MempoolConfig::from_env().ok(), + network_config: NetworkConfig::from_env().ok(), + contract_verifier: ContractVerifierConfig::from_env().ok(), + operations_manager_config: OperationsManagerConfig::from_env().ok(), + state_keeper_config: StateKeeperConfig::from_env().ok(), + house_keeper_config: HouseKeeperConfig::from_env().ok(), + fri_proof_compressor_config: FriProofCompressorConfig::from_env().ok(), + fri_prover_config: Some(FriProverConfig::from_env().context("fri_prover_config")?), + fri_prover_group_config: FriProverGroupConfig::from_env().ok(), + fri_prover_gateway_config: FriProverGatewayConfig::from_env().ok(), + fri_witness_vector_generator: FriWitnessVectorGeneratorConfig::from_env().ok(), + fri_witness_generator_config: FriWitnessGeneratorConfig::from_env().ok(), + prometheus_config: PrometheusConfig::from_env().ok(), + proof_data_handler_config: ProofDataHandlerConfig::from_env().ok(), + witness_generator_config: WitnessGeneratorConfig::from_env().ok(), + api_config: ApiConfig::from_env().ok(), + db_config: DBConfig::from_env().ok(), + eth_sender_config: ETHConfig::from_env().ok(), + eth_watch_config: ETHWatchConfig::from_env().ok(), + gas_adjuster_config: GasAdjusterConfig::from_env().ok(), + object_store_config: ObjectStoreConfig::from_env().ok(), + }) +} diff --git a/core/lib/zksync_core/src/lib.rs b/core/lib/zksync_core/src/lib.rs index 0c653e37cd2..3d5c88bf0df 100644 --- a/core/lib/zksync_core/src/lib.rs +++ b/core/lib/zksync_core/src/lib.rs @@ -45,7 +45,6 @@ use zksync_queued_job_processor::JobProcessor; use zksync_state::PostgresStorageCaches; use zksync_types::{fee_model::FeeModelConfig, L2ChainId}; -use crate::consensus::MainNodeConfig; use crate::{ api_server::{ contract_verification, diff --git a/core/lib/zksync_core/src/temp_config_store/mod.rs b/core/lib/zksync_core/src/temp_config_store/mod.rs index dfbe5c05dd5..a293f7390f8 100644 --- a/core/lib/zksync_core/src/temp_config_store/mod.rs +++ b/core/lib/zksync_core/src/temp_config_store/mod.rs @@ -1,5 +1,4 @@ use anyhow::Context as _; -use zksync_config::configs::wallets::{EthSender, StateKeeper, Wallet}; use zksync_config::{ configs::{ api::{HealthCheckConfig, MerkleTreeApiConfig, Web3JsonRpcConfig}, @@ -9,7 +8,7 @@ use zksync_config::{ }, fri_prover_group::FriProverGroupConfig, house_keeper::HouseKeeperConfig, - wallets::Wallets, + wallets::{EthSender, StateKeeper, Wallet, Wallets}, FriProofCompressorConfig, FriProverConfig, FriProverGatewayConfig, FriWitnessGeneratorConfig, FriWitnessVectorGeneratorConfig, GeneralConfig, PrometheusConfig, ProofDataHandlerConfig, WitnessGeneratorConfig, @@ -64,7 +63,6 @@ pub struct TempConfigStore { pub eth_watch_config: Option, pub gas_adjuster_config: Option, pub object_store_config: Option, - pub consensus_config: Option, } #[derive(Debug)] @@ -112,26 +110,20 @@ impl TempConfigStore { } pub fn wallets(&self) -> Wallets { - let eth_sender = self - .eth_sender_config - .as_ref() - .map(|x| { - let operator = x - .sender - .private_key() - .map(|operator| Wallet::from_private_key(operator, None).ok()) - .flatten(); - let blob_operator = x - .sender - .private_key_blobs() - .map(|operator| Wallet::from_private_key(operator, None).ok()) - .flatten(); - operator.map(|operator| EthSender { - operator, - blob_operator, - }) + let eth_sender = self.eth_sender_config.as_ref().and_then(|x| { + let operator = x + .sender + .private_key() + .and_then(|operator| Wallet::from_private_key(operator, None).ok()); + let blob_operator = x + .sender + .private_key_blobs() + .and_then(|operator| Wallet::from_private_key(operator, None).ok()); + operator.map(|operator| EthSender { + operator, + blob_operator, }) - .flatten(); + }); let state_keeper = self .state_keeper_config .as_ref() From 26a88b5eb6f0984f043c7af49b6291c41d0453f4 Mon Sep 17 00:00:00 2001 From: Danil Date: Wed, 27 Mar 2024 17:33:37 +0100 Subject: [PATCH 46/65] Fix configs Signed-off-by: Danil --- core/bin/zksync_server/src/main.rs | 1 - ...5437752a4cf3ac92ec09b334089a8dc5b4ca.json} | 34 ++++-------- core/tests/ts-integration/src/env.ts | 4 +- etc/env/base/api.toml | 52 ++++++++----------- etc/env/base/contract_verifier.toml | 9 ++-- etc/env/base/contracts.toml | 1 - etc/env/base/house_keeper.toml | 23 ++++---- prover/Cargo.lock | 17 ++++++ 8 files changed, 69 insertions(+), 72 deletions(-) rename core/lib/dal/.sqlx/{query-d032e2f4e16902cf04d3c94ab5dfefb23708bfaf77454c2be1d1c52cefcb0c19.json => query-44490ad52b8dbcd978a96677ffac5437752a4cf3ac92ec09b334089a8dc5b4ca.json} (58%) diff --git a/core/bin/zksync_server/src/main.rs b/core/bin/zksync_server/src/main.rs index 9b7bc4a573c..b5545e34587 100644 --- a/core/bin/zksync_server/src/main.rs +++ b/core/bin/zksync_server/src/main.rs @@ -151,7 +151,6 @@ async fn main() -> anyhow::Result<()> { .context("failed decoding YAML config")? } }; - // let contracts_config: ContractsConfigReduced = contracts_config.into(); let postgres_config = configs.postgres_config.clone().context("PostgresConfig")?; let genesis = GenesisConfig::from_env().context("Genesis config")?; diff --git a/core/lib/dal/.sqlx/query-d032e2f4e16902cf04d3c94ab5dfefb23708bfaf77454c2be1d1c52cefcb0c19.json b/core/lib/dal/.sqlx/query-44490ad52b8dbcd978a96677ffac5437752a4cf3ac92ec09b334089a8dc5b4ca.json similarity index 58% rename from core/lib/dal/.sqlx/query-d032e2f4e16902cf04d3c94ab5dfefb23708bfaf77454c2be1d1c52cefcb0c19.json rename to core/lib/dal/.sqlx/query-44490ad52b8dbcd978a96677ffac5437752a4cf3ac92ec09b334089a8dc5b4ca.json index 846b7a1a535..cb2d1b149ec 100644 --- a/core/lib/dal/.sqlx/query-d032e2f4e16902cf04d3c94ab5dfefb23708bfaf77454c2be1d1c52cefcb0c19.json +++ b/core/lib/dal/.sqlx/query-44490ad52b8dbcd978a96677ffac5437752a4cf3ac92ec09b334089a8dc5b4ca.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n WITH\n mb AS (\n SELECT\n l1_gas_price,\n l2_fair_gas_price\n FROM\n miniblocks\n WHERE\n l1_batch_number = $1\n LIMIT\n 1\n )\n SELECT\n l1_batches.number,\n l1_batches.timestamp,\n l1_batches.l1_tx_count,\n l1_batches.l2_tx_count,\n l1_batches.hash AS \"root_hash?\",\n l1_batches.commitment,\n l1_batches.rollup_last_leaf_index,\n commit_tx.tx_hash AS \"commit_tx_hash?\",\n commit_tx.confirmed_at AS \"committed_at?\",\n prove_tx.tx_hash AS \"prove_tx_hash?\",\n prove_tx.confirmed_at AS \"proven_at?\",\n execute_tx.tx_hash AS \"execute_tx_hash?\",\n execute_tx.confirmed_at AS \"executed_at?\",\n mb.l1_gas_price,\n mb.l2_fair_gas_price,\n l1_batches.bootloader_code_hash,\n l1_batches.default_aa_code_hash\n FROM\n l1_batches\n INNER JOIN mb ON TRUE\n LEFT JOIN eth_txs_history AS commit_tx ON (\n l1_batches.eth_commit_tx_id = commit_tx.eth_tx_id\n AND commit_tx.confirmed_at IS NOT NULL\n )\n LEFT JOIN eth_txs_history AS prove_tx ON (\n l1_batches.eth_prove_tx_id = prove_tx.eth_tx_id\n AND prove_tx.confirmed_at IS NOT NULL\n )\n LEFT JOIN eth_txs_history AS execute_tx ON (\n l1_batches.eth_execute_tx_id = execute_tx.eth_tx_id\n AND execute_tx.confirmed_at IS NOT NULL\n )\n WHERE\n l1_batches.number = $1\n ", + "query": "\n WITH\n mb AS (\n SELECT\n l1_gas_price,\n l2_fair_gas_price\n FROM\n miniblocks\n WHERE\n l1_batch_number = $1\n LIMIT\n 1\n )\n SELECT\n l1_batches.number,\n l1_batches.timestamp,\n l1_batches.l1_tx_count,\n l1_batches.l2_tx_count,\n l1_batches.hash AS \"root_hash?\",\n commit_tx.tx_hash AS \"commit_tx_hash?\",\n commit_tx.confirmed_at AS \"committed_at?\",\n prove_tx.tx_hash AS \"prove_tx_hash?\",\n prove_tx.confirmed_at AS \"proven_at?\",\n execute_tx.tx_hash AS \"execute_tx_hash?\",\n execute_tx.confirmed_at AS \"executed_at?\",\n mb.l1_gas_price,\n mb.l2_fair_gas_price,\n l1_batches.bootloader_code_hash,\n l1_batches.default_aa_code_hash\n FROM\n l1_batches\n INNER JOIN mb ON TRUE\n LEFT JOIN eth_txs_history AS commit_tx ON (\n l1_batches.eth_commit_tx_id = commit_tx.eth_tx_id\n AND commit_tx.confirmed_at IS NOT NULL\n )\n LEFT JOIN eth_txs_history AS prove_tx ON (\n l1_batches.eth_prove_tx_id = prove_tx.eth_tx_id\n AND prove_tx.confirmed_at IS NOT NULL\n )\n LEFT JOIN eth_txs_history AS execute_tx ON (\n l1_batches.eth_execute_tx_id = execute_tx.eth_tx_id\n AND execute_tx.confirmed_at IS NOT NULL\n )\n WHERE\n l1_batches.number = $1\n ", "describe": { "columns": [ { @@ -30,61 +30,51 @@ }, { "ordinal": 5, - "name": "commitment", - "type_info": "Bytea" - }, - { - "ordinal": 6, - "name": "rollup_last_leaf_index", - "type_info": "Int8" - }, - { - "ordinal": 7, "name": "commit_tx_hash?", "type_info": "Text" }, { - "ordinal": 8, + "ordinal": 6, "name": "committed_at?", "type_info": "Timestamp" }, { - "ordinal": 9, + "ordinal": 7, "name": "prove_tx_hash?", "type_info": "Text" }, { - "ordinal": 10, + "ordinal": 8, "name": "proven_at?", "type_info": "Timestamp" }, { - "ordinal": 11, + "ordinal": 9, "name": "execute_tx_hash?", "type_info": "Text" }, { - "ordinal": 12, + "ordinal": 10, "name": "executed_at?", "type_info": "Timestamp" }, { - "ordinal": 13, + "ordinal": 11, "name": "l1_gas_price", "type_info": "Int8" }, { - "ordinal": 14, + "ordinal": 12, "name": "l2_fair_gas_price", "type_info": "Int8" }, { - "ordinal": 15, + "ordinal": 13, "name": "bootloader_code_hash", "type_info": "Bytea" }, { - "ordinal": 16, + "ordinal": 14, "name": "default_aa_code_hash", "type_info": "Bytea" } @@ -100,8 +90,6 @@ false, false, true, - true, - true, false, true, false, @@ -114,5 +102,5 @@ true ] }, - "hash": "d032e2f4e16902cf04d3c94ab5dfefb23708bfaf77454c2be1d1c52cefcb0c19" + "hash": "44490ad52b8dbcd978a96677ffac5437752a4cf3ac92ec09b334089a8dc5b4ca" } diff --git a/core/tests/ts-integration/src/env.ts b/core/tests/ts-integration/src/env.ts index 7d6b6c8d00d..3fe22ecec09 100644 --- a/core/tests/ts-integration/src/env.ts +++ b/core/tests/ts-integration/src/env.ts @@ -69,8 +69,8 @@ export async function loadTestEnvironment(): Promise { 'WS L2 node URL' ); const contractVerificationUrl = process.env.ZKSYNC_ENV!.startsWith('ext-node') - ? process.env.API_CONTRACT_VERIFICATION_URL! - : ensureVariable(process.env.API_CONTRACT_VERIFICATION_URL, 'Contract verification API'); + ? process.env.CONTRACT_VERIFIER_URL! + : ensureVariable(process.env.CONTRACT_VERIFIER_URL, 'Contract verification API'); const tokens = getTokens(process.env.CHAIN_ETH_NETWORK || 'localhost'); // wBTC is chosen because it has decimals different from ETH (8 instead of 18). diff --git a/etc/env/base/api.toml b/etc/env/base/api.toml index 61e53b9a7db..3cbc2180dd8 100644 --- a/etc/env/base/api.toml +++ b/etc/env/base/api.toml @@ -4,23 +4,23 @@ # Configuration for the web3 JSON RPC server [api.web3_json_rpc] # Port for the HTTP RPC API. -http_port=3050 -http_url="http://127.0.0.1:3050" +http_port = 3050 +http_url = "http://127.0.0.1:3050" # Port for the WebSocket RPC API. -ws_port=3051 -ws_url="ws://127.0.0.1:3051" -req_entities_limit=10000 -filters_disabled=false -filters_limit=10000 -subscriptions_limit=10000 +ws_port = 3051 +ws_url = "ws://127.0.0.1:3051" +req_entities_limit = 10000 +filters_disabled = false +filters_limit = 10000 +subscriptions_limit = 10000 # Interval between polling db for pubsub (in ms). -pubsub_polling_interval=200 -threads_per_server=128 -max_nonce_ahead=50 -gas_price_scale_factor=1.2 -l1_to_l2_transactions_compatibility_mode=true -request_timeout=10 -account_pks=[ +pubsub_polling_interval = 200 +threads_per_server = 128 +max_nonce_ahead = 50 +gas_price_scale_factor = 1.2 +l1_to_l2_transactions_compatibility_mode = true +request_timeout = 10 +account_pks = [ "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", "0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d", "0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a", @@ -42,26 +42,20 @@ account_pks=[ "0xde9be858da4a475276426320d5e9262ecfc3ba460bfac56360bfa6c4c28b4ee0", "0xdf57089febbacf7ba0bc227dafbffa9fc08a93fdc68e1e42411a14efcf23656e" ] -estimate_gas_scale_factor=1.2 -estimate_gas_acceptable_overestimation=1000 -max_tx_size=1000000 -# Configuration for the contract verification API -[api.contract_verification] -# Port for the contract verification API. -port=3070 -url="http://127.0.0.1:3070" -threads_per_server=128 +estimate_gas_scale_factor = 1.2 +estimate_gas_acceptable_overestimation = 1000 +max_tx_size = 1000000 # Configuration for the prometheus exporter server. [api.prometheus] -listener_port=3312 -pushgateway_url="http://127.0.0.1:9091" -push_interval_ms=100 +listener_port = 3312 +pushgateway_url = "http://127.0.0.1:9091" +push_interval_ms = 100 # Configuration for the healtcheck server. [api.healthcheck] -port=3071 +port = 3071 # Configuration for the Merkle tree API server [api.merkle_tree] -port=3072 +port = 3072 diff --git a/etc/env/base/contract_verifier.toml b/etc/env/base/contract_verifier.toml index d66cf7e45dc..223e6f166f8 100644 --- a/etc/env/base/contract_verifier.toml +++ b/etc/env/base/contract_verifier.toml @@ -1,4 +1,7 @@ [contract_verifier] -compilation_timeout=30 -polling_interval=1000 -prometheus_port=3314 +compilation_timeout = 30 +polling_interval = 1000 +prometheus_port = 3314 +port = 3070 +url = "http://127.0.0.1:3070" +threads_per_server = 128 diff --git a/etc/env/base/contracts.toml b/etc/env/base/contracts.toml index c2168900d7d..14809bbf672 100644 --- a/etc/env/base/contracts.toml +++ b/etc/env/base/contracts.toml @@ -30,7 +30,6 @@ GENESIS_ROOT = "0x436cf80dd02a7e1a1df65be6ec9ea231ccec97c44f4c8c9cd2aa26c2feb074 PRIORITY_TX_MAX_GAS_LIMIT = 72000000 DEPLOY_L2_BRIDGE_COUNTERPART_GAS_LIMIT = 10000000 GENESIS_BATCH_COMMITMENT = "0x938016208176c5a49d47c8aa582b5d18afc4f159dfa099087770e0796948fd1a" -# Current rollup leaf index after genesis GENESIS_ROLLUP_LEAF_INDEX = "26" GENESIS_PROTOCOL_VERSION = "22" L1_WETH_BRIDGE_IMPL_ADDR = "0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9" diff --git a/etc/env/base/house_keeper.toml b/etc/env/base/house_keeper.toml index d79a93867f3..f8a20c850d5 100644 --- a/etc/env/base/house_keeper.toml +++ b/etc/env/base/house_keeper.toml @@ -1,14 +1,11 @@ [house_keeper] -l1_batch_metrics_reporting_interval_ms=10000 -gpu_prover_queue_reporting_interval_ms=10000 -prover_job_retrying_interval_ms=300000 -prover_stats_reporting_interval_ms=5000 -witness_job_moving_interval_ms=30000 -witness_generator_stats_reporting_interval_ms=10000 -fri_witness_job_moving_interval_ms=40000 -fri_prover_job_retrying_interval_ms=30000 -fri_witness_generator_job_retrying_interval_ms=30000 -prover_db_pool_size=2 -fri_prover_stats_reporting_interval_ms=30000 -fri_proof_compressor_job_retrying_interval_ms=30000 -fri_proof_compressor_stats_reporting_interval_ms=10000 +l1_batch_metrics_reporting_interval_ms = 10000 +gpu_prover_queue_reporting_interval_ms = 10000 +witness_generator_stats_reporting_interval_ms = 10000 +witness_job_moving_interval_ms = 40000 +prover_job_retrying_interval_ms = 30000 +witness_generator_job_retrying_interval_ms = 30000 +prover_db_pool_size = 2 +prover_stats_reporting_interval_ms = 30000 +proof_compressor_job_retrying_interval_ms = 30000 +proof_compressor_stats_reporting_interval_ms = 10000 diff --git a/prover/Cargo.lock b/prover/Cargo.lock index d1ea842fbcb..8c78c495228 100644 --- a/prover/Cargo.lock +++ b/prover/Cargo.lock @@ -7364,6 +7364,7 @@ dependencies = [ "rand 0.8.5", "serde", "zksync_basic_types", + "zksync_crypto_primitives", ] [[package]] @@ -7457,6 +7458,21 @@ dependencies = [ "zksync_basic_types", ] +[[package]] +name = "zksync_crypto_primitives" +version = "0.1.0" +dependencies = [ + "anyhow", + "hex", + "secp256k1", + "serde", + "serde_json", + "thiserror", + "web3", + "zksync_basic_types", + "zksync_utils", +] + [[package]] name = "zksync_dal" version = "0.1.0" @@ -7795,6 +7811,7 @@ dependencies = [ "zksync_basic_types", "zksync_config", "zksync_contracts", + "zksync_crypto_primitives", "zksync_mini_merkle_tree", "zksync_protobuf", "zksync_protobuf_build", From d5d645f0355179a4984387b517dbb5eda4d6df2b Mon Sep 17 00:00:00 2001 From: Danil Date: Wed, 27 Mar 2024 19:49:12 +0100 Subject: [PATCH 47/65] Remove old crypto primitives Signed-off-by: Danil --- .../src/tx/primitives/ecdsa_signature.rs | 365 ------------------ .../eip712_signature/member_types.rs | 116 ------ .../src/tx/primitives/eip712_signature/mod.rs | 14 - .../eip712_signature/struct_builder.rs | 185 --------- .../tx/primitives/eip712_signature/tests.rs | 209 ---------- .../eip712_signature/typed_structure.rs | 186 --------- .../tx/primitives/eip712_signature/utils.rs | 33 -- core/lib/types/src/tx/primitives/mod.rs | 6 - .../src/tx/primitives/packed_eth_signature.rs | 230 ----------- 9 files changed, 1344 deletions(-) delete mode 100644 core/lib/types/src/tx/primitives/ecdsa_signature.rs delete mode 100644 core/lib/types/src/tx/primitives/eip712_signature/member_types.rs delete mode 100644 core/lib/types/src/tx/primitives/eip712_signature/mod.rs delete mode 100644 core/lib/types/src/tx/primitives/eip712_signature/struct_builder.rs delete mode 100644 core/lib/types/src/tx/primitives/eip712_signature/tests.rs delete mode 100644 core/lib/types/src/tx/primitives/eip712_signature/typed_structure.rs delete mode 100644 core/lib/types/src/tx/primitives/eip712_signature/utils.rs delete mode 100644 core/lib/types/src/tx/primitives/mod.rs delete mode 100644 core/lib/types/src/tx/primitives/packed_eth_signature.rs diff --git a/core/lib/types/src/tx/primitives/ecdsa_signature.rs b/core/lib/types/src/tx/primitives/ecdsa_signature.rs deleted file mode 100644 index 1cf5bec8a3d..00000000000 --- a/core/lib/types/src/tx/primitives/ecdsa_signature.rs +++ /dev/null @@ -1,365 +0,0 @@ -// Mostly copy-pasted from parity-crypto 0.9.0: -// https://github.com/paritytech/parity-common/blob/parity-crypto-v0.9.0/parity-crypto/src/publickey/keypair.rs -// https://github.com/paritytech/parity-common/blob/parity-crypto-v0.9.0/parity-crypto/src/publickey/ecdsa_signature.rs -// -// Reason: parity-crypto crate is not maintained, and it provides convenience wrappers over secp256k1 we rely on. -// For the time being, vendoring these files is more convenient than rewriting the rest of the codebase to use -// secp256k1 directly. -// -// Changes made: adapting the code for the newer version of secp256k1, stripping down some code we don't need, -// type replacements for the ease of use. - -// Copyright 2020 Parity Technologies -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -// Copied from parity-crypto 0.9.0 src/publickey/keypair.rs -// Key pair (public + secret) description. - -use std::{ - cmp::PartialEq, - fmt, - hash::{Hash, Hasher}, - ops::{Deref, DerefMut}, - str::FromStr, -}; - -use secp256k1::{ - ecdsa::{RecoverableSignature, RecoveryId}, - Message as SecpMessage, PublicKey, SecretKey, SECP256K1, -}; - -use crate::web3::{ - signing::keccak256, - types::{Address, H256, H512, H520}, -}; - -type Message = H256; -type Public = H512; -type Secret = H256; - -/// Convert public key into the address -pub(super) fn public_to_address(public: &Public) -> Address { - let hash = keccak256(public.as_bytes()); - let mut result = Address::zero(); - result.as_bytes_mut().copy_from_slice(&hash[12..]); - result -} - -#[derive(Debug, Clone, PartialEq)] -/// secp256k1 key pair -pub(super) struct KeyPair { - secret: Secret, - public: Public, -} - -impl fmt::Display for KeyPair { - fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> { - writeln!(f, "secret: {:x}", self.secret)?; - writeln!(f, "public: {:x}", self.public)?; - write!(f, "address: {:x}", self.address()) - } -} - -impl KeyPair { - /// Create a pair from secret key - pub(super) fn from_secret(secret: Secret) -> Result { - let context = &SECP256K1; - let s: SecretKey = SecretKey::from_slice(secret.as_bytes())?; - let pub_key = PublicKey::from_secret_key(context, &s); - let serialized = pub_key.serialize_uncompressed(); - - let mut public = Public::default(); - public.as_bytes_mut().copy_from_slice(&serialized[1..65]); - - let keypair = KeyPair { secret, public }; - - Ok(keypair) - } - - /// Returns public part of the keypair converted into Address - pub(super) fn address(&self) -> Address { - public_to_address(&self.public) - } -} - -// Copied from parity-crypto 0.9.0 `src/publickey/ecdsa_signature.rs` - -#[derive(Debug, thiserror::Error)] -pub enum Error { - #[error("secp256k1 error: {0}")] - Secp256k1(#[from] secp256k1::Error), - #[error("invalid signature")] - InvalidSignature, - #[error(transparent)] - Custom(anyhow::Error), -} - -/// Signature encoded as RSV components -#[repr(C)] -pub(super) struct Signature([u8; 65]); - -impl Signature { - /// Get a slice into the 'r' portion of the data. - pub(super) fn r(&self) -> &[u8] { - &self.0[0..32] - } - - /// Get a slice into the 's' portion of the data. - pub(super) fn s(&self) -> &[u8] { - &self.0[32..64] - } - - /// Get the recovery byte. - pub(super) fn v(&self) -> u8 { - self.0[64] - } - - /// Encode the signature into RSV array (V altered to be in "Electrum" notation). - pub(super) fn into_electrum(mut self) -> [u8; 65] { - self.0[64] += 27; - self.0 - } - - /// Parse bytes as a signature encoded as RSV (V in "Electrum" notation). - /// May return empty (invalid) signature if given data has invalid length. - #[cfg(test)] - pub(super) fn from_electrum(data: &[u8]) -> Self { - if data.len() != 65 || data[64] < 27 { - // fallback to empty (invalid) signature - return Signature::default(); - } - - let mut sig = [0u8; 65]; - sig.copy_from_slice(data); - sig[64] -= 27; - Signature(sig) - } - - /// Create a signature object from the RSV triple. - pub(super) fn from_rsv(r: &H256, s: &H256, v: u8) -> Self { - let mut sig = [0u8; 65]; - sig[0..32].copy_from_slice(r.as_ref()); - sig[32..64].copy_from_slice(s.as_ref()); - sig[64] = v; - Signature(sig) - } -} - -// manual implementation large arrays don't have trait impls by default. -impl PartialEq for Signature { - fn eq(&self, other: &Self) -> bool { - self.0 == other.0 - } -} - -// manual implementation required in Rust 1.13+, see `std::cmp::AssertParamIsEq`. -impl Eq for Signature {} - -// also manual for the same reason, but the pretty printing might be useful. -impl fmt::Debug for Signature { - fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> { - f.debug_struct("Signature") - .field("r", &hex::encode(&self.0[0..32])) - .field("s", &hex::encode(&self.0[32..64])) - .field("v", &hex::encode(&self.0[64..65])) - .finish() - } -} - -impl fmt::Display for Signature { - fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> { - write!(f, "{}", hex::encode(self.0)) - } -} - -impl FromStr for Signature { - type Err = Error; - - fn from_str(s: &str) -> Result { - match hex::decode(s) { - Ok(ref hex) if hex.len() == 65 => { - let mut data = [0; 65]; - data.copy_from_slice(&hex[0..65]); - Ok(Signature(data)) - } - _ => Err(Error::InvalidSignature), - } - } -} - -impl Default for Signature { - fn default() -> Self { - Signature([0; 65]) - } -} - -impl Hash for Signature { - fn hash(&self, state: &mut H) { - H520::from(self.0).hash(state); - } -} - -impl Clone for Signature { - fn clone(&self) -> Self { - Signature(self.0) - } -} - -impl From<[u8; 65]> for Signature { - fn from(s: [u8; 65]) -> Self { - Signature(s) - } -} - -impl From for H520 { - fn from(s: Signature) -> Self { - H520::from(s.0) - } -} - -impl From for Signature { - fn from(bytes: H520) -> Self { - Signature(bytes.into()) - } -} - -impl Deref for Signature { - type Target = [u8; 65]; - - fn deref(&self) -> &Self::Target { - &self.0 - } -} - -impl DerefMut for Signature { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 - } -} - -/// Signs message with the given secret key. -/// Returns the corresponding signature. -pub(super) fn sign(secret: &Secret, message: &Message) -> Result { - let context = &SECP256K1; - let sec = SecretKey::from_slice(secret.as_ref())?; - let s = context.sign_ecdsa_recoverable(&SecpMessage::from_slice(&message[..])?, &sec); - let (rec_id, data) = s.serialize_compact(); - let mut data_arr = [0; 65]; - - // no need to check if s is low, it always is - data_arr[0..64].copy_from_slice(&data[0..64]); - data_arr[64] = rec_id.to_i32() as u8; - Ok(Signature(data_arr)) -} - -/// Recovers the public key from the signature for the message -pub(super) fn recover(signature: &Signature, message: &Message) -> Result { - let rsig = RecoverableSignature::from_compact( - &signature[0..64], - RecoveryId::from_i32(signature[64] as i32)?, - )?; - let pubkey = &SECP256K1.recover_ecdsa(&SecpMessage::from_slice(&message[..])?, &rsig)?; - let serialized = pubkey.serialize_uncompressed(); - let mut public = Public::default(); - public.as_bytes_mut().copy_from_slice(&serialized[1..65]); - Ok(public) -} - -#[cfg(test)] -mod tests { - use std::str::FromStr; - - use super::{recover, sign, KeyPair, Message, Secret, Signature}; - - #[test] - fn from_secret() { - let secret = Secret::from_slice( - &hex::decode("a100df7a048e50ed308ea696dc600215098141cb391e9527329df289f9383f65") - .unwrap(), - ); - let _ = KeyPair::from_secret(secret).unwrap(); - } - - #[test] - fn keypair_display() { - let expected = -"secret: a100df7a048e50ed308ea696dc600215098141cb391e9527329df289f9383f65 -public: 8ce0db0b0359ffc5866ba61903cc2518c3675ef2cf380a7e54bde7ea20e6fa1ab45b7617346cd11b7610001ee6ae5b0155c41cad9527cbcdff44ec67848943a4 -address: 5b073e9233944b5e729e46d618f0d8edf3d9c34a".to_owned(); - let secret = Secret::from_slice( - &hex::decode("a100df7a048e50ed308ea696dc600215098141cb391e9527329df289f9383f65") - .unwrap(), - ); - let kp = KeyPair::from_secret(secret).unwrap(); - assert_eq!(format!("{}", kp), expected); - } - - #[test] - fn vrs_conversion() { - // given - let secret = Secret::from_slice(&[1u8; 32]); - let message = - Message::from_str("0000000000000000000000000000000000000000000000000000000000000001") - .unwrap(); - let signature = sign(&secret, &message).expect("can sign a non-zero message"); - - // when - let vrs = signature.clone().into_electrum(); - let from_vrs = Signature::from_electrum(&vrs); - - // then - assert_eq!(signature, from_vrs); - } - - #[test] - fn signature_to_and_from_str() { - let secret = Secret::from_slice(&[1u8; 32]); - let message = - Message::from_str("0000000000000000000000000000000000000000000000000000000000000001") - .unwrap(); - let signature = sign(&secret, &message).expect("can sign a non-zero message"); - let string = format!("{}", signature); - let deserialized = Signature::from_str(&string).unwrap(); - assert_eq!(signature, deserialized); - } - - #[test] - fn sign_and_recover_public() { - let secret = Secret::from_slice(&[1u8; 32]); - let keypair = KeyPair::from_secret(secret).unwrap(); - let message = - Message::from_str("0000000000000000000000000000000000000000000000000000000000000001") - .unwrap(); - let signature = sign(&keypair.secret, &message).unwrap(); - assert_eq!(&keypair.public, &recover(&signature, &message).unwrap()); - } - - #[test] - fn sign_and_recover_public_works_with_zeroed_messages() { - let secret = Secret::from_slice(&[1u8; 32]); - let keypair = KeyPair::from_secret(secret).unwrap(); - let signature = sign(&keypair.secret, &Message::zero()).unwrap(); - let zero_message = Message::zero(); - assert_eq!( - &keypair.public, - &recover(&signature, &zero_message).unwrap() - ); - } - - #[test] - fn recover_allowing_all_zero_message_can_recover_from_all_zero_messages() { - let secret = Secret::from_slice(&[1u8; 32]); - let keypair = KeyPair::from_secret(secret).unwrap(); - let signature = sign(&keypair.secret, &Message::zero()).unwrap(); - let zero_message = Message::zero(); - assert_eq!( - &keypair.public, - &recover(&signature, &zero_message).unwrap() - ) - } -} diff --git a/core/lib/types/src/tx/primitives/eip712_signature/member_types.rs b/core/lib/types/src/tx/primitives/eip712_signature/member_types.rs deleted file mode 100644 index aecece572dd..00000000000 --- a/core/lib/types/src/tx/primitives/eip712_signature/member_types.rs +++ /dev/null @@ -1,116 +0,0 @@ -use zksync_basic_types::{Address, H256, U256}; - -use crate::{ - tx::primitives::eip712_signature::typed_structure::{EncodedStructureMember, StructMember}, - web3::signing::keccak256, -}; - -impl StructMember for String { - const MEMBER_TYPE: &'static str = "string"; - const IS_REFERENCE_TYPE: bool = false; - - fn get_inner_members(&self) -> Vec { - Vec::new() - } - - fn encode_member_data(&self) -> H256 { - keccak256(self.as_bytes()).into() - } -} - -impl StructMember for Address { - const MEMBER_TYPE: &'static str = "address"; - const IS_REFERENCE_TYPE: bool = false; - - fn get_inner_members(&self) -> Vec { - Vec::new() - } - - fn encode_member_data(&self) -> H256 { - H256::from(*self) - } -} - -impl StructMember for &[u8] { - const MEMBER_TYPE: &'static str = "bytes"; - const IS_REFERENCE_TYPE: bool = false; - - fn get_inner_members(&self) -> Vec { - Vec::new() - } - - fn encode_member_data(&self) -> H256 { - keccak256(self).into() - } -} - -impl StructMember for &[H256] { - const MEMBER_TYPE: &'static str = "bytes32[]"; - const IS_REFERENCE_TYPE: bool = false; - - fn get_inner_members(&self) -> Vec { - Vec::new() - } - - fn encode_member_data(&self) -> H256 { - let bytes: Vec = self - .iter() - .flat_map(|hash| hash.as_bytes().to_vec()) - .collect(); - keccak256(&bytes).into() - } -} - -impl StructMember for U256 { - const MEMBER_TYPE: &'static str = "uint256"; - const IS_REFERENCE_TYPE: bool = false; - - fn get_inner_members(&self) -> Vec { - Vec::new() - } - - fn encode_member_data(&self) -> H256 { - let mut bytes = [0u8; 32]; - self.to_big_endian(&mut bytes); - - bytes.into() - } -} - -impl StructMember for H256 { - const MEMBER_TYPE: &'static str = "uint256"; - const IS_REFERENCE_TYPE: bool = false; - - fn get_inner_members(&self) -> Vec { - Vec::new() - } - - fn encode_member_data(&self) -> H256 { - *self - } -} - -macro_rules! impl_primitive { - ($T: ident, $name:expr, $bit_size:expr) => { - impl StructMember for $T { - const MEMBER_TYPE: &'static str = $name; - const IS_REFERENCE_TYPE: bool = false; - fn get_inner_members(&self) -> Vec { - Vec::new() - } - fn encode_member_data(&self) -> H256 { - let mut bytes = [0u8; 32]; - let bytes_value = self.to_be_bytes(); - bytes[32 - $bit_size / 8..].copy_from_slice(&bytes_value); - - bytes.into() - } - } - }; -} - -impl_primitive!(u8, "uint8", 8); -impl_primitive!(u16, "uint16", 16); -impl_primitive!(u32, "uint32", 32); -impl_primitive!(u64, "uint64", 64); -impl_primitive!(u128, "uint128", 128); diff --git a/core/lib/types/src/tx/primitives/eip712_signature/mod.rs b/core/lib/types/src/tx/primitives/eip712_signature/mod.rs deleted file mode 100644 index 81642cbf615..00000000000 --- a/core/lib/types/src/tx/primitives/eip712_signature/mod.rs +++ /dev/null @@ -1,14 +0,0 @@ -//! This is implementation of a standard for hashing typed structured data for [EIP-712](https://eips.ethereum.org/EIPS/eip-712) signing standard. -//! -//! This module contains the necessary interfaces for obtaining a hash of the structure, which is later needed for EIP-712 signing. - -mod member_types; -pub mod struct_builder; -pub mod typed_structure; -pub mod utils; - -pub use struct_builder::*; -pub use typed_structure::*; - -#[cfg(test)] -mod tests; diff --git a/core/lib/types/src/tx/primitives/eip712_signature/struct_builder.rs b/core/lib/types/src/tx/primitives/eip712_signature/struct_builder.rs deleted file mode 100644 index 1b3260993ea..00000000000 --- a/core/lib/types/src/tx/primitives/eip712_signature/struct_builder.rs +++ /dev/null @@ -1,185 +0,0 @@ -use std::collections::{BTreeMap, VecDeque}; - -use serde_json::Value; -use zksync_basic_types::H256; - -use crate::tx::primitives::eip712_signature::typed_structure::{ - EncodedStructureMember, StructMember, -}; - -/// Interface that collects members of the structure into the structure of the EIP-712 standard. -pub trait StructBuilder { - fn new() -> Self; - - fn add_member(&mut self, name: &str, member: &MEMBER); -} - -/// Builder for collecting information about types of nested structures. -pub(crate) struct TypeBuilder { - members: Vec, -} - -impl TypeBuilder { - pub fn get_inner_members(&self) -> Vec { - self.members.clone() - } -} - -impl StructBuilder for TypeBuilder { - fn new() -> Self { - Self { - members: Vec::new(), - } - } - - fn add_member(&mut self, name: &str, member: &MEMBER) { - self.members - .push(EncodedStructureMember::encode(name, member)); - } -} - -struct OuterTypeBuilder { - inner_members_queue: VecDeque, -} - -impl OuterTypeBuilder { - fn new() -> Self { - Self { - inner_members_queue: VecDeque::new(), - } - } - - fn add_member(&mut self, encoded_member: EncodedStructureMember) { - // If the type is not used by the structure, then it is possible not - // to process it as it is not included in the list of types of nested structures. - if encoded_member.is_reference_type { - self.inner_members_queue.push_back(encoded_member); - } - } - - fn build(mut self) -> BTreeMap { - // All nested structures must be added to the encoded type alphabetically, - // so we will support a red-black tree with a key by the name of the structure type. - let mut result = BTreeMap::new(); - - while let Some(front_element) = self.inner_members_queue.pop_front() { - if result.get(&front_element.member_type).is_some() { - continue; - } - - result.insert(front_element.member_type.clone(), front_element.clone()); - for inner_member in front_element.inner_members { - if inner_member.is_reference_type && result.get(&inner_member.member_type).is_none() - { - self.inner_members_queue.push_back(inner_member); - } - } - } - result - } -} - -// Builder that encodes type information and structure data for for hashing the structure according to the EIP-712 standard. -pub(crate) struct EncodeBuilder { - members: Vec<(EncodedStructureMember, H256)>, -} - -impl EncodeBuilder { - /// Returns the concatenation of the encoded member values in the order that they appear in the type. - pub fn encode_data(&self) -> Vec { - // `encodeData(s : 𝕊) = enc(value₁) ‖ enc(value₂) ‖ … ‖ enc(valueₙ).` - self.members.iter().map(|(_, data)| *data).collect() - } - - /// Return the encoded structure type as `name ‖ "(" ‖ member₁ ‖ "," ‖ member₂ ‖ "," ‖ … ‖ memberₙ ")"`. - /// - /// If the struct type references other struct types (and these in turn reference even more struct types), - /// then the set of referenced struct types is collected, sorted by name and appended to the encoding. - pub fn encode_type(&self, type_name: &str) -> String { - let mut result = String::new(); - - let mut outer_members_builder = OuterTypeBuilder::new(); - for (member, _) in self.members.iter() { - outer_members_builder.add_member(member.clone()); - } - let outer_members = outer_members_builder.build(); - - // Collecting all members of the structure as a coded structure. - let inner_member = { - let member_type = type_name.to_string(); - let inner_members = self - .members - .iter() - .cloned() - .map(|(encoded_struct, _)| encoded_struct) - .collect::>(); - - EncodedStructureMember { - member_type, - name: String::default(), - is_reference_type: true, - inner_members, - } - }; - - result.push_str(&inner_member.get_encoded_type()); - for (_, outer_member) in outer_members { - result.push_str(&outer_member.get_encoded_type()); - } - - result - } - - /// Return the encoded structure type as `{ member_type: [{"name": member_name₁, "type": member_type₁}, ...] }`. - /// - /// If the struct type references other struct types (and these in turn reference even more struct types), - /// then the set of referenced struct types is collected, sorted by name and appended to the encoding. - pub fn get_json_types(&self, type_name: &str) -> Vec { - let mut result = Vec::new(); - - let mut outer_members_builder = OuterTypeBuilder::new(); - for (member, _) in self.members.iter() { - outer_members_builder.add_member(member.clone()); - } - let outer_members = outer_members_builder.build(); - - // Collecting all members of the structure as a coded structure. - let inner_member = { - let member_type = type_name.to_string(); - let inner_members = self - .members - .iter() - .cloned() - .map(|(encoded_struct, _)| encoded_struct) - .collect::>(); - - EncodedStructureMember { - member_type, - name: String::default(), - is_reference_type: true, - inner_members, - } - }; - - result.push(inner_member.get_json_types()); - for (_, outer_member) in outer_members { - result.push(outer_member.get_json_types()); - } - - result - } -} - -impl StructBuilder for EncodeBuilder { - fn new() -> Self { - Self { - members: Vec::new(), - } - } - - fn add_member(&mut self, name: &str, member: &MEMBER) { - let encoded_data = member.encode_member_data(); - self.members - .push((EncodedStructureMember::encode(name, member), encoded_data)); - } -} diff --git a/core/lib/types/src/tx/primitives/eip712_signature/tests.rs b/core/lib/types/src/tx/primitives/eip712_signature/tests.rs deleted file mode 100644 index 8bfd14b45c4..00000000000 --- a/core/lib/types/src/tx/primitives/eip712_signature/tests.rs +++ /dev/null @@ -1,209 +0,0 @@ -use std::str::FromStr; - -use serde::Serialize; -use zksync_basic_types::{Address, H256, U256}; - -use crate::{ - tx::primitives::{ - eip712_signature::{ - struct_builder::StructBuilder, - typed_structure::{EIP712TypedStructure, Eip712Domain}, - utils::get_eip712_json, - }, - PackedEthSignature, - }, - web3::signing::keccak256, -}; - -#[derive(Clone, Serialize)] -struct Person { - name: String, - wallet: Address, -} - -impl EIP712TypedStructure for Person { - const TYPE_NAME: &'static str = "Person"; - - fn build_structure(&self, builder: &mut BUILDER) { - builder.add_member("name", &self.name); - builder.add_member("wallet", &self.wallet); - } -} - -#[derive(Clone, Serialize)] -struct Mail { - from: Person, - to: Person, - contents: String, -} - -impl EIP712TypedStructure for Mail { - const TYPE_NAME: &'static str = "Mail"; - fn build_structure(&self, builder: &mut BUILDER) { - builder.add_member("from", &self.from); - builder.add_member("to", &self.to); - builder.add_member("contents", &self.contents); - } -} - -#[test] -fn test_encode_eip712_typed_struct() { - let domain = Eip712Domain { - name: "Ether Mail".to_owned(), - version: "1".to_owned(), - chain_id: U256::from(1u8), - }; - - let message = Mail { - from: Person { - name: "Cow".to_owned(), - wallet: Address::from_str("CD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826").unwrap(), - }, - to: Person { - name: "Bob".to_owned(), - wallet: Address::from_str("bBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB").unwrap(), - }, - contents: "Hello, Bob!".to_string(), - }; - - assert_eq!( - &message.encode_type(), - "Mail(Person from,Person to,string contents)Person(string name,address wallet)" - ); - - assert_eq!( - &message.encode_data()[..], - [ - H256::from_str("fc71e5fa27ff56c350aa531bc129ebdf613b772b6604664f5d8dbe21b85eb0c8") - .unwrap(), - H256::from_str("cd54f074a4af31b4411ff6a60c9719dbd559c221c8ac3492d9d872b041d703d1") - .unwrap(), - H256::from_str("b5aadf3154a261abdd9086fc627b61efca26ae5702701d05cd2305f7c52a2fc8") - .unwrap() - ] - ); - - assert_eq!( - message.hash_struct(), - H256::from_str("c52c0ee5d84264471806290a3f2c4cecfc5490626bf912d01f240d7a274b371e").unwrap() - ); - - assert_eq!( - &domain.encode_type(), - "EIP712Domain(string name,string version,uint256 chainId)" - ); - - assert_eq!( - &domain.encode_data()[..], - [ - H256::from_str("c70ef06638535b4881fafcac8287e210e3769ff1a8e91f1b95d6246e61e4d3c6") - .unwrap(), - H256::from_str("c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6") - .unwrap(), - H256::from_str("0000000000000000000000000000000000000000000000000000000000000001") - .unwrap(), - ] - ); - - assert_eq!( - domain.hash_struct(), - H256::from_str("3b98b16ad068d9d8854a6a416bd476de44a4933ec5104d7c786a422ab262ed14").unwrap() - ); - - let private_key = keccak256(b"cow").into(); - let address_owner = PackedEthSignature::address_from_private_key(&private_key).unwrap(); - - let signature = PackedEthSignature::sign_typed_data(&private_key, &domain, &message).unwrap(); - let signed_bytes = PackedEthSignature::typed_data_to_signed_bytes(&domain, &message); - - assert_eq!( - address_owner, - signature.signature_recover_signer(&signed_bytes).unwrap() - ); -} - -#[test] -fn test_get_eip712_json() { - let domain = Eip712Domain { - name: "Ether Mail".to_owned(), - version: "1".to_owned(), - chain_id: U256::from(1u8), - }; - - let message = Mail { - from: Person { - name: "Cow".to_owned(), - wallet: Address::from_str("d94e3dc39d4cad1dad634e7eb585a57a19dc7efe").unwrap(), - }, - to: Person { - name: "Bob".to_owned(), - wallet: Address::from_str("d94e3dc39d4cad1dad634e7eb585a57a19dc7efe").unwrap(), - }, - contents: "Hello, Bob!".to_string(), - }; - - let expected_value = r#"{ - "domain":{ - "chainId":"0x1", - "name":"Ether Mail", - "version":"1" - }, - "message":{ - "contents":"Hello, Bob!", - "from":{ - "name":"Cow", - "wallet":"0xd94e3dc39d4cad1dad634e7eb585a57a19dc7efe" - }, - "to":{ - "name":"Bob", - "wallet":"0xd94e3dc39d4cad1dad634e7eb585a57a19dc7efe" - } - }, - "primaryType":"Mail", - "types":{ - "EIP712Domain":[ - { - "name":"name", - "type":"string" - }, - { - "name":"version", - "type":"string" - }, - { - "name":"chainId", - "type":"uint256" - } - ], - "Mail":[ - { - "name":"from", - "type":"Person" - }, - { - "name":"to", - "type":"Person" - }, - { - "name":"contents", - "type":"string" - } - ], - "Person":[ - { - "name":"name", - "type":"string" - }, - { - "name":"wallet", - "type":"address" - } - ] - } - }"#; - - assert_eq!( - get_eip712_json(&domain, &message), - serde_json::from_str::(expected_value).unwrap() - ); -} diff --git a/core/lib/types/src/tx/primitives/eip712_signature/typed_structure.rs b/core/lib/types/src/tx/primitives/eip712_signature/typed_structure.rs deleted file mode 100644 index 421944e5d46..00000000000 --- a/core/lib/types/src/tx/primitives/eip712_signature/typed_structure.rs +++ /dev/null @@ -1,186 +0,0 @@ -use serde::{Deserialize, Serialize}; -use serde_json::Value; - -use crate::{ - tx::primitives::eip712_signature::struct_builder::{EncodeBuilder, StructBuilder, TypeBuilder}, - web3::signing::keccak256, - L2ChainId, H256, U256, -}; - -#[derive(Debug, Clone)] -pub struct EncodedStructureMember { - /// Type identifier. - pub member_type: String, - /// Name identifier. - pub name: String, - /// Flag denoting structure or elementary type. - pub is_reference_type: bool, - // Members that are inside this member. - pub inner_members: Vec, -} - -impl EncodedStructureMember { - pub fn encode(name: &str, member: &MEMBER) -> Self { - Self { - member_type: member.member_type(), - name: name.to_string(), - is_reference_type: member.is_reference_type(), - inner_members: member.get_inner_members(), - } - } - - /// Encodes the structure as `name ‖ "(" ‖ member₁ ‖ "," ‖ member₂ ‖ "," ‖ … ‖ memberₙ ")"`. - pub fn get_encoded_type(&self) -> String { - let mut encoded_type = String::new(); - encoded_type.push_str(&self.member_type); - encoded_type.push('('); - - let mut members = self.inner_members.iter(); - - if let Some(member) = members.next() { - encoded_type.push_str(&member.member_type); - encoded_type.push(' '); - encoded_type.push_str(&member.name); - } - for member in members { - encoded_type.push(','); - encoded_type.push_str(&member.member_type); - encoded_type.push(' '); - encoded_type.push_str(&member.name); - } - - encoded_type.push(')'); - - encoded_type - } - - /// Encodes the structure as json according to principle `{ member_type: [{"name": member_name₁, "type": member_type₁}, ...] }`. - pub fn get_json_types(&self) -> Value { - let mut members = Vec::new(); - for member in &self.inner_members { - let member_value = serde_json::json!({ - "name": member.name, - "type": member.member_type, - }); - members.push(member_value); - } - - serde_json::json!({ &self.member_type: members }) - } -} - -pub trait StructMember { - const MEMBER_TYPE: &'static str; - const IS_REFERENCE_TYPE: bool; - - fn member_type(&self) -> String { - Self::MEMBER_TYPE.to_string() - } - - fn is_reference_type(&self) -> bool { - Self::IS_REFERENCE_TYPE - } - - fn get_inner_members(&self) -> Vec; - - fn encode_member_data(&self) -> H256; -} - -impl StructMember for TypedStructure { - const MEMBER_TYPE: &'static str = Self::TYPE_NAME; - const IS_REFERENCE_TYPE: bool = true; - - fn get_inner_members(&self) -> Vec { - let mut builder = TypeBuilder::new(); - self.build_structure(&mut builder); - - builder.get_inner_members() - } - - fn encode_member_data(&self) -> H256 { - self.hash_struct() - } -} - -/// Interface for defining the structure for the EIP712 signature. -pub trait EIP712TypedStructure: Serialize { - const TYPE_NAME: &'static str; - - fn build_structure(&self, builder: &mut BUILDER); - - fn encode_type(&self) -> String { - let mut builder = EncodeBuilder::new(); - self.build_structure(&mut builder); - - builder.encode_type(Self::TYPE_NAME) - } - - fn encode_data(&self) -> Vec { - let mut builder = EncodeBuilder::new(); - self.build_structure(&mut builder); - - builder.encode_data() - } - - fn hash_struct(&self) -> H256 { - // `hashStruct(s : 𝕊) = keccak256(keccak256(encodeType(typeOf(s))) ‖ encodeData(s)).` - let type_hash = { - let encode_type = self.encode_type(); - keccak256(encode_type.as_bytes()) - }; - let encode_data = self.encode_data(); - - let mut bytes = Vec::new(); - bytes.extend_from_slice(&type_hash); - for data in encode_data { - bytes.extend_from_slice(data.as_bytes()); - } - - keccak256(&bytes).into() - } - - fn get_json_types(&self) -> Vec { - let mut builder = EncodeBuilder::new(); - self.build_structure(&mut builder); - - builder.get_json_types(Self::TYPE_NAME) - } -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct Eip712Domain { - /// The user readable name of signing domain, i.e. the name of the DApp or the protocol. - pub name: String, - /// The current major version of the signing domain. Signatures from different versions are not compatible. - pub version: String, - /// The [EIP-155](https://eips.ethereum.org/EIPS/eip-155) chain id. - pub chain_id: U256, -} - -impl Eip712Domain { - /// Name of the protocol. - pub const NAME: &'static str = "zkSync"; - /// Version of the protocol. While there may be `2.x` releases, the minor release version bump - /// should not be breaking, meaning that clients from the `2.x-1` version should be able to communicate - /// with zkSync server. Thus `VERSION` corresponds to the major version only. - pub const VERSION: &'static str = "2"; - - pub fn new(chain_id: L2ChainId) -> Self { - Self { - name: Self::NAME.to_string(), - version: Self::VERSION.to_string(), - chain_id: U256::from(chain_id.as_u64()), - } - } -} - -impl EIP712TypedStructure for Eip712Domain { - const TYPE_NAME: &'static str = "EIP712Domain"; - - fn build_structure(&self, builder: &mut BUILDER) { - builder.add_member("name", &self.name); - builder.add_member("version", &self.version); - builder.add_member("chainId", &self.chain_id); - } -} diff --git a/core/lib/types/src/tx/primitives/eip712_signature/utils.rs b/core/lib/types/src/tx/primitives/eip712_signature/utils.rs deleted file mode 100644 index f338c017e2b..00000000000 --- a/core/lib/types/src/tx/primitives/eip712_signature/utils.rs +++ /dev/null @@ -1,33 +0,0 @@ -use serde_json::{Map, Value}; - -use crate::tx::primitives::eip712_signature::typed_structure::{ - EIP712TypedStructure, Eip712Domain, -}; - -/// Formats the data that needs to be signed in json according to the standard eip-712. -/// Compatible with `eth_signTypedData` RPC call. -pub fn get_eip712_json( - eip712_domain: &Eip712Domain, - typed_struct: &T, -) -> Value { - let types = { - let mut res = Map::new(); - - let mut vec_types = eip712_domain.get_json_types(); - vec_types.append(&mut typed_struct.get_json_types()); - - for mut member_type in vec_types { - if let Some(member_type) = member_type.as_object_mut() { - res.append(member_type); - } - } - res - }; - - serde_json::json!({ - "primaryType": T::TYPE_NAME, - "domain": serde_json::to_value(eip712_domain).expect("serialization fail"), - "message": serde_json::to_value(typed_struct).expect("serialization fail"), - "types": serde_json::to_value(types).expect("serialization fail"), - }) -} diff --git a/core/lib/types/src/tx/primitives/mod.rs b/core/lib/types/src/tx/primitives/mod.rs deleted file mode 100644 index 1e486837c96..00000000000 --- a/core/lib/types/src/tx/primitives/mod.rs +++ /dev/null @@ -1,6 +0,0 @@ -pub(crate) mod ecdsa_signature; -pub mod eip712_signature; -pub mod packed_eth_signature; - -pub use eip712_signature::*; -pub use packed_eth_signature::*; diff --git a/core/lib/types/src/tx/primitives/packed_eth_signature.rs b/core/lib/types/src/tx/primitives/packed_eth_signature.rs deleted file mode 100644 index 635dfc8c4bd..00000000000 --- a/core/lib/types/src/tx/primitives/packed_eth_signature.rs +++ /dev/null @@ -1,230 +0,0 @@ -use serde::{Deserialize, Deserializer, Serialize, Serializer}; -use thiserror::Error; -use zksync_basic_types::{Address, H256}; -use zksync_utils::ZeroPrefixHexSerde; - -use crate::{ - tx::primitives::{ - ecdsa_signature::{ - public_to_address, recover, sign, Error as ParityCryptoError, KeyPair, - Signature as ETHSignature, - }, - eip712_signature::typed_structure::{EIP712TypedStructure, Eip712Domain}, - }, - web3::signing::keccak256, -}; - -/// Struct used for working with Ethereum signatures created using eth_sign (using geth, ethers.js, etc) -/// message is serialized as 65 bytes long `0x` prefixed string. -/// -/// Some notes on implementation of methods of this structure: -/// -/// Ethereum signed message produced by most clients contains v where v = 27 + recovery_id(0,1,2,3), -/// but for some clients v = recovery_id(0,1,2,3). -/// Library that we use for signature verification (written for bitcoin) expects v = recovery_id -/// -/// That is why: -/// 1) when we create this structure by deserialization of message produced by user -/// we subtract 27 from v in `ETHSignature` if necessary and store it in the `ETHSignature` structure this way. -/// 2) When we serialize/create this structure we add 27 to v in `ETHSignature`. -/// -/// This way when we have methods that consumes &self we can be sure that ETHSignature::recover_signer works -/// And we can be sure that we are compatible with Ethereum clients. -/// -#[derive(Debug, Clone, PartialEq, Eq, Default)] -pub struct PackedEthSignature(ETHSignature); - -impl PackedEthSignature { - pub fn serialize_packed(&self) -> [u8; 65] { - // adds 27 to v - self.0.clone().into_electrum() - } - - fn deserialize_signature(bytes: &[u8]) -> Result<[u8; 65], DeserializeError> { - if bytes.len() != 65 { - return Err(DeserializeError::IncorrectSignatureLength); - } - - let mut bytes_array = [0u8; 65]; - bytes_array.copy_from_slice(bytes); - Ok(bytes_array) - } - - pub fn deserialize_packed(bytes: &[u8]) -> Result { - let mut signature = Self::deserialize_signature(bytes)?; - if signature[64] >= 27 { - signature[64] -= 27; - } - - Ok(PackedEthSignature(ETHSignature::from(signature))) - } - - /// Unlike the `deserialize_packed` packed signature, this method does not make sure that the `v` value is in the range [0, 3]. - /// This one should be generally avoided and be used only in places where preservation of the original `v` is important. - pub fn deserialize_packed_no_v_check(bytes: &[u8]) -> Result { - let signature = Self::deserialize_signature(bytes)?; - Ok(PackedEthSignature(ETHSignature::from(signature))) - } - - pub fn sign_raw( - private_key: &H256, - signed_bytes: &H256, - ) -> Result { - let signature = sign(private_key, signed_bytes)?; - Ok(PackedEthSignature(signature)) - } - - /// Signs typed struct using Ethereum private key by EIP-712 signature standard. - /// Result of this function is the equivalent of RPC calling `eth_signTypedData`. - pub fn sign_typed_data( - private_key: &H256, - domain: &Eip712Domain, - typed_struct: &impl EIP712TypedStructure, - ) -> Result { - let signed_bytes = H256::from(Self::typed_data_to_signed_bytes(domain, typed_struct).0); - let signature = sign(private_key, &signed_bytes)?; - Ok(PackedEthSignature(signature)) - } - - pub fn typed_data_to_signed_bytes( - domain: &Eip712Domain, - typed_struct: &impl EIP712TypedStructure, - ) -> H256 { - let mut bytes = Vec::new(); - bytes.extend_from_slice("\x19\x01".as_bytes()); - bytes.extend_from_slice(domain.hash_struct().as_bytes()); - bytes.extend_from_slice(typed_struct.hash_struct().as_bytes()); - keccak256(&bytes).into() - } - - pub fn message_to_signed_bytes(msg: &[u8]) -> H256 { - keccak256(msg).into() - } - - /// Checks signature and returns Ethereum address of the signer. - /// message should be the same message that was passed to `eth.sign`(or similar) method - /// as argument. No hashing and prefixes required. - pub fn signature_recover_signer( - &self, - signed_bytes: &H256, - ) -> Result { - let signed_bytes = H256::from_slice(&signed_bytes.0); - let public_key = recover(&self.0, &signed_bytes)?; - let address = public_to_address(&public_key); - Ok(Address::from(address.0)) - } - - /// Get Ethereum address from private key. - pub fn address_from_private_key(private_key: &H256) -> Result { - let private_key = H256::from_slice(&private_key.0); - let address = KeyPair::from_secret(private_key)?.address(); - Ok(Address::from(address.0)) - } - - pub fn from_rsv(r: &H256, s: &H256, v: u8) -> Self { - let r = H256::from_slice(&r.0); - let s = H256::from_slice(&s.0); - PackedEthSignature(ETHSignature::from_rsv(&r, &s, v)) - } - - pub fn r(&self) -> &[u8] { - self.0.r() - } - pub fn s(&self) -> &[u8] { - self.0.s() - } - pub fn v(&self) -> u8 { - self.0.v() - } - pub fn v_with_chain_id(&self, chain_id: u64) -> u64 { - self.0.v() as u64 + 35 + chain_id * 2 - } - pub fn unpack_v(v: u64) -> Result<(u8, Option), ParityCryptoError> { - if v == 27 { - return Ok((0, None)); - } else if v == 28 { - return Ok((1, None)); - } else if v >= 35 { - let chain_id = (v - 35) >> 1; - let v = v - 35 - chain_id * 2; - if v == 0 { - return Ok((0, Some(chain_id))); - } else if v == 1 { - return Ok((1, Some(chain_id))); - } - } - - Err(ParityCryptoError::Custom(anyhow::format_err!("Invalid v"))) - } -} - -#[derive(Debug, Error, PartialEq)] -pub enum DeserializeError { - #[error("Eth signature length should be 65 bytes")] - IncorrectSignatureLength, -} - -impl Serialize for PackedEthSignature { - fn serialize(&self, serializer: S) -> Result - where - S: Serializer, - { - let packed_signature = self.serialize_packed(); - ZeroPrefixHexSerde::serialize(&packed_signature, serializer) - } -} - -impl<'de> Deserialize<'de> for PackedEthSignature { - fn deserialize(deserializer: D) -> Result - where - D: Deserializer<'de>, - { - let bytes = ZeroPrefixHexSerde::deserialize(deserializer)?; - Self::deserialize_packed(&bytes).map_err(serde::de::Error::custom) - } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn unpack_v_0() { - assert_eq!(PackedEthSignature::unpack_v(27).unwrap(), (0, None)); - } - - #[test] - fn unpack_v_1() { - assert_eq!(PackedEthSignature::unpack_v(28).unwrap(), (1, None)); - } - - #[test] - fn unpack_wrong_v_10_without_chain_id() { - assert!(PackedEthSignature::unpack_v(10).is_err()); - } - - #[test] - fn unpack_wrong_v_30_without_chain_id() { - assert!(PackedEthSignature::unpack_v(30).is_err()); - } - - #[test] - fn unpack_v_0_with_chain_id_0() { - assert_eq!(PackedEthSignature::unpack_v(35).unwrap(), (0, Some(0))); - } - - #[test] - fn unpack_v_1_with_chain_id_0() { - assert_eq!(PackedEthSignature::unpack_v(36).unwrap(), (1, Some(0))); - } - - #[test] - fn unpack_v_1_with_chain_id_11() { - assert_eq!(PackedEthSignature::unpack_v(58).unwrap(), (1, Some(11))); - } - - #[test] - fn unpack_v_1_with_chain_id_270() { - assert_eq!(PackedEthSignature::unpack_v(576).unwrap(), (1, Some(270))); - } -} From 9e56a3b9d85c21ea021624c7b1027b2caeb4f4db Mon Sep 17 00:00:00 2001 From: Danil Date: Wed, 27 Mar 2024 20:03:10 +0100 Subject: [PATCH 48/65] Review suggestions Signed-off-by: Danil --- core/bin/external_node/src/config/mod.rs | 21 ++++++++++++------- core/bin/zksync_server/src/main.rs | 3 +-- .../config/src/configs/contract_verifier.rs | 7 +++++-- core/lib/crypto_primitives/Cargo.toml | 1 - core/lib/zksync_core/src/lib.rs | 3 +-- 5 files changed, 21 insertions(+), 14 deletions(-) diff --git a/core/bin/external_node/src/config/mod.rs b/core/bin/external_node/src/config/mod.rs index 81daf7481d2..cc97dd2d840 100644 --- a/core/bin/external_node/src/config/mod.rs +++ b/core/bin/external_node/src/config/mod.rs @@ -17,7 +17,7 @@ use zksync_types::{api::BridgeAddresses, fee_model::FeeParams}; use zksync_web3_decl::{ error::ClientRpcContext, jsonrpsee::http_client::{HttpClient, HttpClientBuilder}, - namespaces::{EthNamespaceClient, ZksNamespaceClient}, + namespaces::{EnNamespaceClient, EthNamespaceClient, ZksNamespaceClient}, }; pub(crate) mod observability; @@ -30,6 +30,8 @@ const BYTES_IN_MEGABYTE: usize = 1_024 * 1_024; #[derive(Debug, Deserialize, Clone, PartialEq)] pub struct RemoteENConfig { pub bridgehub_proxy_addr: Option
, + pub state_transition_proxy_addr: Option
, + pub transparent_proxy_admin_addr: Option
, pub diamond_proxy_addr: Address, pub l1_erc20_bridge_proxy_addr: Address, pub l2_erc20_bridge_addr: Address, @@ -51,8 +53,8 @@ impl RemoteENConfig { .get_testnet_paymaster() .rpc_context("get_testnet_paymaster") .await?; - // In case EN is connected to the old server version without `get_bridgehub_contract` method. - let bridgehub_proxy_addr = client.get_bridgehub_contract().await.ok().flatten(); + let genesis = client.genesis_config().rpc_context("genesis").await.ok(); + let shared_bridge = genesis.map(|a| a.shared_bridge).flatten(); let diamond_proxy_addr = client .get_main_contract() .rpc_context("get_main_contract") @@ -77,7 +79,13 @@ impl RemoteENConfig { }; Ok(Self { - bridgehub_proxy_addr, + bridgehub_proxy_addr: shared_bridge.as_ref().map(|a| a.bridgehub_proxy_addr), + state_transition_proxy_addr: shared_bridge + .as_ref() + .map(|a| a.state_transition_proxy_addr), + transparent_proxy_admin_addr: shared_bridge + .as_ref() + .map(|a| a.transparent_proxy_admin_addr), diamond_proxy_addr, l2_testnet_paymaster_addr, l1_erc20_bridge_proxy_addr: bridges.l1_erc20_default_bridge, @@ -633,9 +641,8 @@ impl From for InternalApiConfig { l2_weth_bridge: config.remote.l2_weth_bridge_addr, }, bridgehub_proxy_addr: config.remote.bridgehub_proxy_addr, - // TODO set values - state_transition_proxy_addr: None, - transparent_proxy_admin_addr: None, + state_transition_proxy_addr: config.remote.state_transition_proxy_addr, + transparent_proxy_admin_addr: config.remote.transparent_proxy_admin_addr, diamond_proxy_addr: config.remote.diamond_proxy_addr, l2_testnet_paymaster_addr: config.remote.l2_testnet_paymaster_addr, req_entities_limit: config.optional.req_entities_limit, diff --git a/core/bin/zksync_server/src/main.rs b/core/bin/zksync_server/src/main.rs index b5545e34587..a6e5c589891 100644 --- a/core/bin/zksync_server/src/main.rs +++ b/core/bin/zksync_server/src/main.rs @@ -166,9 +166,8 @@ async fn main() -> anyhow::Result<()> { if opt.set_chain_id { let eth_client = ETHConfig::from_env().context("EthClientConfig")?; let contracts = ContractsConfig::from_env().context("ContractsConfig")?; - let genesis = GenesisConfig::from_env().context("Genesis config")?; - if let Some(shared_bridge) = genesis.shared_bridge { + if let Some(shared_bridge) = &genesis.shared_bridge { genesis::save_set_chain_id_tx( ð_client.web3_url, contracts.diamond_proxy_addr, diff --git a/core/lib/config/src/configs/contract_verifier.rs b/core/lib/config/src/configs/contract_verifier.rs index a7d01a087e7..acd1aa49e34 100644 --- a/core/lib/config/src/configs/contract_verifier.rs +++ b/core/lib/config/src/configs/contract_verifier.rs @@ -1,4 +1,7 @@ -use std::{net::SocketAddr, time::Duration}; +use std::{ + net::{IpAddr, Ipv4Addr, SocketAddr}, + time::Duration, +}; use serde::Deserialize; @@ -23,6 +26,6 @@ impl ContractVerifierConfig { Duration::from_millis(self.polling_interval.unwrap_or(1000)) } pub fn bind_addr(&self) -> SocketAddr { - SocketAddr::new("0.0.0.0".parse().unwrap(), self.port) + SocketAddr::new(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)), self.port) } } diff --git a/core/lib/crypto_primitives/Cargo.toml b/core/lib/crypto_primitives/Cargo.toml index 24fd36ebe33..ca3a4882d87 100644 --- a/core/lib/crypto_primitives/Cargo.toml +++ b/core/lib/crypto_primitives/Cargo.toml @@ -9,7 +9,6 @@ license.workspace = true keywords.workspace = true categories.workspace = true -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] web3.workspace = true diff --git a/core/lib/zksync_core/src/lib.rs b/core/lib/zksync_core/src/lib.rs index 8f1ee2546b7..38358d0c535 100644 --- a/core/lib/zksync_core/src/lib.rs +++ b/core/lib/zksync_core/src/lib.rs @@ -451,8 +451,7 @@ pub async fn initialize_components( configs .contract_verifier .clone() - .context("Contract verifier")? - .clone(), + .context("Contract verifier")?, stop_receiver.clone(), ))); let elapsed = started_at.elapsed(); From 8245c2c285b88489ecf4e1d01995481368beca84 Mon Sep 17 00:00:00 2001 From: Danil Date: Thu, 28 Mar 2024 00:03:31 +0100 Subject: [PATCH 49/65] Fix tests Signed-off-by: Danil --- core/bin/external_node/src/config/mod.rs | 2 +- core/lib/env_config/src/contract_verifier.rs | 8 ++++++-- core/lib/env_config/src/contracts.rs | 2 +- core/lib/env_config/src/eth_sender.rs | 8 ++++---- core/lib/env_config/src/genesis.rs | 2 +- core/lib/env_config/src/house_keeper.rs | 4 ++-- 6 files changed, 15 insertions(+), 11 deletions(-) diff --git a/core/bin/external_node/src/config/mod.rs b/core/bin/external_node/src/config/mod.rs index cc97dd2d840..c6f007a5bb3 100644 --- a/core/bin/external_node/src/config/mod.rs +++ b/core/bin/external_node/src/config/mod.rs @@ -54,7 +54,7 @@ impl RemoteENConfig { .rpc_context("get_testnet_paymaster") .await?; let genesis = client.genesis_config().rpc_context("genesis").await.ok(); - let shared_bridge = genesis.map(|a| a.shared_bridge).flatten(); + let shared_bridge = genesis.and_then(|a| a.shared_bridge); let diamond_proxy_addr = client .get_main_contract() .rpc_context("get_main_contract") diff --git a/core/lib/env_config/src/contract_verifier.rs b/core/lib/env_config/src/contract_verifier.rs index 09a05ddfb2c..fdda564d406 100644 --- a/core/lib/env_config/src/contract_verifier.rs +++ b/core/lib/env_config/src/contract_verifier.rs @@ -20,8 +20,8 @@ mod tests { compilation_timeout: 30, polling_interval: Some(1000), prometheus_port: 3314, - port: 9454, - url: "127.0.0.1:9454".to_string(), + port: 3070, + url: "127.0.0.1:3070".to_string(), } } @@ -32,6 +32,10 @@ mod tests { CONTRACT_VERIFIER_COMPILATION_TIMEOUT=30 CONTRACT_VERIFIER_POLLING_INTERVAL=1000 CONTRACT_VERIFIER_PROMETHEUS_PORT=3314 + CONTRACT_VERIFIER_PORT=3070 + CONTRACT_VERIFIER_URL=127.0.0.1:3070 + + "#; lock.set_env(config); diff --git a/core/lib/env_config/src/contracts.rs b/core/lib/env_config/src/contracts.rs index 109b9d4c07c..31c3a69f9da 100644 --- a/core/lib/env_config/src/contracts.rs +++ b/core/lib/env_config/src/contracts.rs @@ -19,7 +19,7 @@ mod tests { ContractsConfig { governance_addr: addr("d8dA6BF26964aF9D7eEd9e03E53415D37aA96045"), verifier_addr: addr("34782eE00206EAB6478F2692caa800e4A581687b"), - default_upgrade_addr: addr("0xFFC35A5e767BE36057c34586303498e3de7C62Ba"), + default_upgrade_addr: addr("0x5e6d086f5ec079adff4fb3774cdf3e8d6a34f7e9"), diamond_proxy_addr: addr("F00B988a98Ca742e7958DeF9F7823b5908715f4a"), validator_timelock_addr: addr("F00B988a98Ca742e7958DeF9F7823b5908715f4a"), l1_erc20_bridge_proxy_addr: addr("8656770FA78c830456B00B4fFCeE6b1De0e1b888"), diff --git a/core/lib/env_config/src/eth_sender.rs b/core/lib/env_config/src/eth_sender.rs index 09d42128259..d5a4bb1afb8 100644 --- a/core/lib/env_config/src/eth_sender.rs +++ b/core/lib/env_config/src/eth_sender.rs @@ -76,8 +76,8 @@ mod tests { max_blob_base_fee: None, }, watcher: ETHWatchConfig { - confirmations_for_eth_event: Some(4), - eth_node_poll_interval: 2, + confirmations_for_eth_event: Some(0), + eth_node_poll_interval: 300, }, web3_url: "http://127.0.0.1:8545".to_string(), } @@ -87,8 +87,8 @@ mod tests { fn from_env() { let mut lock = MUTEX.lock(); let config = r#" - ETH_WATCH_CONFIRMATIONS_FOR_ETH_EVENT = "4" - ETH_WATCH_ETH_NODE_POLL_INTERVAL = "2" + ETH_WATCH_CONFIRMATIONS_FOR_ETH_EVENT = "0" + ETH_WATCH_ETH_NODE_POLL_INTERVAL = "30" ETH_SENDER_SENDER_WAIT_CONFIRMATIONS="1" ETH_SENDER_SENDER_TX_POLL_PERIOD="3" ETH_SENDER_SENDER_AGGREGATE_TX_POLL_PERIOD="3" diff --git a/core/lib/env_config/src/genesis.rs b/core/lib/env_config/src/genesis.rs index 2eed234eb9f..a6e6b9ef9dc 100644 --- a/core/lib/env_config/src/genesis.rs +++ b/core/lib/env_config/src/genesis.rs @@ -12,7 +12,7 @@ use zksync_config::{ use crate::{envy_load, FromEnv}; // For initializing genesis file from env it's required to have an additional struct, -// because these data is not required as part of the current Conract Config +// because these data is not required as part of the current Contract Config #[derive(Deserialize, Serialize, Debug, Clone)] struct ContractsForGenesis { pub genesis_root: Option, diff --git a/core/lib/env_config/src/house_keeper.rs b/core/lib/env_config/src/house_keeper.rs index eb181a9f2a7..abef23dce5e 100644 --- a/core/lib/env_config/src/house_keeper.rs +++ b/core/lib/env_config/src/house_keeper.rs @@ -19,7 +19,7 @@ mod tests { HouseKeeperConfig { l1_batch_metrics_reporting_interval_ms: 10_000, gpu_prover_queue_reporting_interval_ms: 10_000, - prover_job_retrying_interval_ms: 300_000, + prover_job_retrying_interval_ms: 10000, prover_stats_reporting_interval_ms: 5_000, witness_job_moving_interval_ms: 30_000, witness_generator_stats_reporting_interval_ms: 10_000, @@ -36,7 +36,7 @@ mod tests { let config = r#" HOUSE_KEEPER_L1_BATCH_METRICS_REPORTING_INTERVAL_MS="10000" HOUSE_KEEPER_GPU_PROVER_QUEUE_REPORTING_INTERVAL_MS="10000" - HOUSE_KEEPER_PROVER_JOB_RETRYING_INTERVAL_MS="300000" + HOUSE_KEEPER_PROVER_JOB_RETRYING_INTERVAL_MS="10000" HOUSE_KEEPER_PROVER_STATS_REPORTING_INTERVAL_MS="5000" HOUSE_KEEPER_WITNESS_JOB_MOVING_INTERVAL_MS="30000" HOUSE_KEEPER_WITNESS_GENERATOR_STATS_REPORTING_INTERVAL_MS="10000" From 609807fd923e06a90f8428f4c1b31baad7fbf419 Mon Sep 17 00:00:00 2001 From: Danil Date: Thu, 28 Mar 2024 10:45:04 +0100 Subject: [PATCH 50/65] Use fee address from wallets Signed-off-by: Danil --- core/bin/zksync_server/src/main.rs | 3 ++- core/lib/config/src/configs/chain.rs | 16 +++++++++---- core/lib/config/src/testonly.rs | 3 ++- core/lib/env_config/src/genesis.rs | 5 +++- core/lib/protobuf_config/src/chain.rs | 8 +++---- .../lib/protobuf_config/src/proto/chain.proto | 1 - .../src/api_server/tx_sender/mod.rs | 3 ++- .../src/api_server/tx_sender/tests.rs | 7 +++++- core/lib/zksync_core/src/lib.rs | 24 +++++++++++++++---- .../src/state_keeper/io/mempool.rs | 3 ++- core/lib/zksync_core/src/state_keeper/mod.rs | 7 +++++- .../zksync_core/src/temp_config_store/mod.rs | 8 ++++++- .../layers/state_keeper/mempool_io.rs | 9 ++++++- 13 files changed, 73 insertions(+), 24 deletions(-) diff --git a/core/bin/zksync_server/src/main.rs b/core/bin/zksync_server/src/main.rs index a6e5c589891..8216b1738e3 100644 --- a/core/bin/zksync_server/src/main.rs +++ b/core/bin/zksync_server/src/main.rs @@ -108,6 +108,7 @@ async fn main() -> anyhow::Result<()> { tracing::info!("No sentry URL was provided"); } + // Load env config and use it if file config is not provided let tmp_config = load_env_config()?; let configs = match opt.config_path { @@ -188,7 +189,7 @@ async fn main() -> anyhow::Result<()> { // Run core actors. let (core_task_handles, stop_sender, health_check_handle) = initialize_components( &configs, - wallets, + &wallets, &genesis, &contracts_config, &components, diff --git a/core/lib/config/src/configs/chain.rs b/core/lib/config/src/configs/chain.rs index 1b514ce178d..134ac5c8cf8 100644 --- a/core/lib/config/src/configs/chain.rs +++ b/core/lib/config/src/configs/chain.rs @@ -79,9 +79,9 @@ pub struct StateKeeperConfig { pub close_block_at_eth_params_percentage: f64, /// Denotes the percentage of L1 gas used in L2 block that triggers L2 block seal. pub close_block_at_gas_percentage: f64, - - pub fee_account_addr: Address, - + /// Fee account address, it's optional because it's required only for loading from envs + #[deprecated] + pub fee_account_addr: Option
, /// The minimal acceptable L2 gas price, i.e. the price that should include the cost of computation/proving as well /// as potentially premium for congestion. pub minimal_l2_gas_price: u64, @@ -119,7 +119,9 @@ pub struct StateKeeperConfig { // Base system contract hash, required only for genesis file, it's temporary solution // #PLA-811 + #[deprecated] pub bootloader_hash: Option, + #[deprecated] pub default_aa_hash: Option, } @@ -127,6 +129,7 @@ impl StateKeeperConfig { /// Creates a config object suitable for use in unit tests. /// Values mostly repeat the values used in the localhost environment. pub fn for_tests() -> Self { + #[allow(deprecated)] Self { transaction_slots: 250, block_commit_deadline_ms: 2500, @@ -140,8 +143,9 @@ impl StateKeeperConfig { close_block_at_geometry_percentage: 0.95, close_block_at_eth_params_percentage: 0.95, close_block_at_gas_percentage: 0.95, - fee_account_addr: Address::from_str("0xde03a0B5963f75f1C8485B355fF6D30f3093BDE7") - .unwrap(), + fee_account_addr: Some( + Address::from_str("0xde03a0B5963f75f1C8485B355fF6D30f3093BDE7").unwrap(), + ), compute_overhead_part: 0.0, pubdata_overhead_part: 1.0, batch_overhead_l1_gas: 800_000, @@ -155,7 +159,9 @@ impl StateKeeperConfig { virtual_blocks_per_miniblock: 1, upload_witness_inputs_to_gcs: false, enum_index_migration_chunk_size: None, + #[allow(deprecated)] bootloader_hash: None, + #[allow(deprecated)] default_aa_hash: None, } } diff --git a/core/lib/config/src/testonly.rs b/core/lib/config/src/testonly.rs index 36c6ec92862..6db78ff1b69 100644 --- a/core/lib/config/src/testonly.rs +++ b/core/lib/config/src/testonly.rs @@ -262,6 +262,7 @@ impl RandomConfig for configs::chain::NetworkConfig { impl RandomConfig for configs::chain::StateKeeperConfig { fn sample(g: &mut Gen) -> Self { + #[allow(deprecated)] Self { transaction_slots: g.gen(), block_commit_deadline_ms: g.gen(), @@ -275,7 +276,6 @@ impl RandomConfig for configs::chain::StateKeeperConfig { close_block_at_geometry_percentage: g.gen(), close_block_at_eth_params_percentage: g.gen(), close_block_at_gas_percentage: g.gen(), - fee_account_addr: g.gen(), minimal_l2_gas_price: g.gen(), compute_overhead_part: g.gen(), pubdata_overhead_part: g.gen(), @@ -291,6 +291,7 @@ impl RandomConfig for configs::chain::StateKeeperConfig { enum_index_migration_chunk_size: g.gen(), bootloader_hash: g.gen(), default_aa_hash: g.gen(), + fee_account_addr: g.gen(), } } } diff --git a/core/lib/env_config/src/genesis.rs b/core/lib/env_config/src/genesis.rs index a6e6b9ef9dc..6e423e91ac6 100644 --- a/core/lib/env_config/src/genesis.rs +++ b/core/lib/env_config/src/genesis.rs @@ -61,6 +61,7 @@ impl FromEnv for GenesisConfig { None }; + #[allow(deprecated)] Ok(GenesisConfig { protocol_version: contracts_config .genesis_protocol_version @@ -86,7 +87,9 @@ impl FromEnv for GenesisConfig { recursion_leaf_level_vk_hash: contracts_config.fri_recursion_leaf_level_vk_hash, recursion_circuits_set_vks_hash: H256::zero(), recursion_scheduler_level_vk_hash: contracts_config.snark_wrapper_vk_hash, - fee_account: state_keeper.fee_account_addr, + fee_account: state_keeper + .fee_account_addr + .ok_or(anyhow!("Fee account required for genesis"))?, shared_bridge, dummy_prover: false, }) diff --git a/core/lib/protobuf_config/src/chain.rs b/core/lib/protobuf_config/src/chain.rs index 4e3aa9306b3..e3e430a7813 100644 --- a/core/lib/protobuf_config/src/chain.rs +++ b/core/lib/protobuf_config/src/chain.rs @@ -2,7 +2,7 @@ use anyhow::Context as _; use zksync_config::configs; use zksync_protobuf::{repr::ProtoRepr, required}; -use crate::{parse_h160, proto::chain as proto}; +use crate::proto::chain as proto; impl proto::FeeModelVersion { fn new(n: &configs::chain::FeeModelVersion) -> Self { @@ -25,6 +25,7 @@ impl proto::FeeModelVersion { impl ProtoRepr for proto::StateKeeper { type Type = configs::chain::StateKeeperConfig; fn read(&self) -> anyhow::Result { + #[allow(deprecated)] Ok(Self::Type { transaction_slots: required(&self.transaction_slots) .and_then(|x| Ok((*x).try_into()?)) @@ -53,9 +54,6 @@ impl ProtoRepr for proto::StateKeeper { .context("close_block_at_eth_params_percentage")?, close_block_at_gas_percentage: *required(&self.close_block_at_gas_percentage) .context("close_block_at_gas_percentage")?, - fee_account_addr: required(&self.fee_account_addr) - .and_then(|a| parse_h160(a)) - .context("fee_account_addr")?, minimal_l2_gas_price: *required(&self.minimal_l2_gas_price) .context("minimal_l2_gas_price")?, compute_overhead_part: *required(&self.compute_overhead_part) @@ -89,6 +87,7 @@ impl ProtoRepr for proto::StateKeeper { // needed during the initialization from files bootloader_hash: None, default_aa_hash: None, + fee_account_addr: None, }) } @@ -108,7 +107,6 @@ impl ProtoRepr for proto::StateKeeper { close_block_at_geometry_percentage: Some(this.close_block_at_geometry_percentage), close_block_at_eth_params_percentage: Some(this.close_block_at_eth_params_percentage), close_block_at_gas_percentage: Some(this.close_block_at_gas_percentage), - fee_account_addr: Some(this.fee_account_addr.as_bytes().into()), minimal_l2_gas_price: Some(this.minimal_l2_gas_price), compute_overhead_part: Some(this.compute_overhead_part), pubdata_overhead_part: Some(this.pubdata_overhead_part), diff --git a/core/lib/protobuf_config/src/proto/chain.proto b/core/lib/protobuf_config/src/proto/chain.proto index 8dcd6e1424d..8d2931ddff3 100644 --- a/core/lib/protobuf_config/src/proto/chain.proto +++ b/core/lib/protobuf_config/src/proto/chain.proto @@ -22,7 +22,6 @@ message StateKeeper { optional double close_block_at_geometry_percentage = 10; // required; % optional double close_block_at_eth_params_percentage = 11; // required; % optional double close_block_at_gas_percentage = 12; // required; % - optional bytes fee_account_addr = 13; // required; H160 optional uint64 minimal_l2_gas_price = 14; // required; wei? optional double compute_overhead_part = 15; // required; [0,1] optional double pubdata_overhead_part = 16; // required; [0,1] diff --git a/core/lib/zksync_core/src/api_server/tx_sender/mod.rs b/core/lib/zksync_core/src/api_server/tx_sender/mod.rs index e052474ff34..6e44815cf25 100644 --- a/core/lib/zksync_core/src/api_server/tx_sender/mod.rs +++ b/core/lib/zksync_core/src/api_server/tx_sender/mod.rs @@ -220,10 +220,11 @@ impl TxSenderConfig { pub fn new( state_keeper_config: &StateKeeperConfig, web3_json_config: &Web3JsonRpcConfig, + fee_account_addr: Address, chain_id: L2ChainId, ) -> Self { Self { - fee_account_addr: state_keeper_config.fee_account_addr, + fee_account_addr, gas_price_scale_factor: web3_json_config.gas_price_scale_factor, max_nonce_ahead: web3_json_config.max_nonce_ahead, max_allowed_l2_tx_gas_limit: state_keeper_config.max_allowed_l2_tx_gas_limit, diff --git a/core/lib/zksync_core/src/api_server/tx_sender/tests.rs b/core/lib/zksync_core/src/api_server/tx_sender/tests.rs index 73dcaf98e4d..92bec6a57ee 100644 --- a/core/lib/zksync_core/src/api_server/tx_sender/tests.rs +++ b/core/lib/zksync_core/src/api_server/tx_sender/tests.rs @@ -16,7 +16,12 @@ pub(crate) async fn create_test_tx_sender( ) -> (TxSender, VmConcurrencyBarrier) { let web3_config = Web3JsonRpcConfig::for_tests(); let state_keeper_config = StateKeeperConfig::for_tests(); - let tx_sender_config = TxSenderConfig::new(&state_keeper_config, &web3_config, l2_chain_id); + let tx_sender_config = TxSenderConfig::new( + &state_keeper_config, + &web3_config, + state_keeper_config.fee_account_addr.unwrap(), + l2_chain_id, + ); let storage_caches = PostgresStorageCaches::new(1, 1); let batch_fee_model_input_provider = Arc::new(MockBatchFeeParamsProvider::default()); diff --git a/core/lib/zksync_core/src/lib.rs b/core/lib/zksync_core/src/lib.rs index 38358d0c535..58c427b0570 100644 --- a/core/lib/zksync_core/src/lib.rs +++ b/core/lib/zksync_core/src/lib.rs @@ -27,6 +27,7 @@ use zksync_config::{ api::{MerkleTreeApiConfig, Web3JsonRpcConfig}, chain::{CircuitBreakerConfig, MempoolConfig, OperationsManagerConfig, StateKeeperConfig}, database::{MerkleTreeConfig, MerkleTreeMode}, + wallets, wallets::Wallets, ContractsConfig, GeneralConfig, }, @@ -222,7 +223,7 @@ impl FromStr for Components { pub async fn initialize_components( configs: &GeneralConfig, - wallets: Wallets, + wallets: &Wallets, genesis_config: &GenesisConfig, contracts_config: &ContractsConfig, components: &[Component], @@ -337,8 +338,17 @@ pub async fn initialize_components( .state_keeper_config .clone() .context("state_keeper_config")?; - let tx_sender_config = - TxSenderConfig::new(&state_keeper_config, &api_config.web3_json_rpc, l2_chain_id); + let tx_sender_config = TxSenderConfig::new( + &state_keeper_config, + &api_config.web3_json_rpc, + wallets + .state_keeper + .clone() + .context("Fee account")? + .fee_account + .address(), + l2_chain_id, + ); let internal_api_config = InternalApiConfig::new(&api_config.web3_json_rpc, contracts_config, genesis_config); @@ -489,6 +499,10 @@ pub async fn initialize_components( &postgres_config, contracts_config, state_keeper_config, + wallets + .state_keeper + .clone() + .context("State keeper wallets")?, l2_chain_id, &db_config, &configs.mempool_config.clone().context("mempool_config")?, @@ -628,7 +642,7 @@ pub async fn initialize_components( .await .context("failed to build eth_manager_pool")?; let eth_sender = configs.eth.clone().context("eth_sender_config")?; - let eth_sender_wallets = wallets.eth_sender.context("eth_sender")?; + let eth_sender_wallets = wallets.eth_sender.clone().context("eth_sender")?; let operator_private_key = eth_sender_wallets .operator .private_key() @@ -755,6 +769,7 @@ async fn add_state_keeper_to_task_futures( postgres_config: &PostgresConfig, contracts_config: &ContractsConfig, state_keeper_config: StateKeeperConfig, + state_keeper_wallets: wallets::StateKeeper, l2chain_id: L2ChainId, db_config: &DBConfig, mempool_config: &MempoolConfig, @@ -791,6 +806,7 @@ async fn add_state_keeper_to_task_futures( let (state_keeper, async_catchup_task) = create_state_keeper( state_keeper_config, + state_keeper_wallets, db_config, l2chain_id, mempool_config, diff --git a/core/lib/zksync_core/src/state_keeper/io/mempool.rs b/core/lib/zksync_core/src/state_keeper/io/mempool.rs index 606090a2bb5..24d6f8f928e 100644 --- a/core/lib/zksync_core/src/state_keeper/io/mempool.rs +++ b/core/lib/zksync_core/src/state_keeper/io/mempool.rs @@ -400,6 +400,7 @@ impl MempoolIO { batch_fee_input_provider: Arc, pool: ConnectionPool, config: &StateKeeperConfig, + fee_account: Address, delay_interval: Duration, chain_id: L2ChainId, ) -> anyhow::Result { @@ -426,7 +427,7 @@ impl MempoolIO { filter: L2TxFilter::default(), // ^ Will be initialized properly on the first newly opened batch l1_batch_params_provider, - fee_account: config.fee_account_addr, + fee_account, validation_computational_gas_limit: config.validation_computational_gas_limit, max_allowed_tx_gas_limit: config.max_allowed_l2_tx_gas_limit.into(), delay_interval, diff --git a/core/lib/zksync_core/src/state_keeper/mod.rs b/core/lib/zksync_core/src/state_keeper/mod.rs index de8a5331b22..108da642c9d 100644 --- a/core/lib/zksync_core/src/state_keeper/mod.rs +++ b/core/lib/zksync_core/src/state_keeper/mod.rs @@ -2,7 +2,10 @@ use std::sync::Arc; use tokio::sync::watch; use zksync_config::{ - configs::chain::{MempoolConfig, StateKeeperConfig}, + configs::{ + chain::{MempoolConfig, StateKeeperConfig}, + wallets, + }, DBConfig, }; use zksync_dal::{ConnectionPool, Core}; @@ -38,6 +41,7 @@ pub(crate) mod updates; #[allow(clippy::too_many_arguments)] pub(crate) async fn create_state_keeper( state_keeper_config: StateKeeperConfig, + wallets: wallets::StateKeeper, db_config: &DBConfig, l2chain_id: L2ChainId, mempool_config: &MempoolConfig, @@ -64,6 +68,7 @@ pub(crate) async fn create_state_keeper( batch_fee_input_provider, pool, &state_keeper_config, + wallets.fee_account.address(), mempool_config.delay_interval(), l2chain_id, ) diff --git a/core/lib/zksync_core/src/temp_config_store/mod.rs b/core/lib/zksync_core/src/temp_config_store/mod.rs index a293f7390f8..744af8133e2 100644 --- a/core/lib/zksync_core/src/temp_config_store/mod.rs +++ b/core/lib/zksync_core/src/temp_config_store/mod.rs @@ -124,11 +124,17 @@ impl TempConfigStore { blob_operator, }) }); + #[allow(deprecated)] let state_keeper = self .state_keeper_config .as_ref() .map(|state_keeper| StateKeeper { - fee_account: Wallet::from_address(state_keeper.fee_account_addr), + fee_account: Wallet::from_address( + state_keeper + .fee_account_addr + .clone() + .expect("Must be presented in env variables"), + ), }); Wallets { eth_sender, diff --git a/core/node/node_framework/src/implementations/layers/state_keeper/mempool_io.rs b/core/node/node_framework/src/implementations/layers/state_keeper/mempool_io.rs index 76a444c3b6d..6aef99837e1 100644 --- a/core/node/node_framework/src/implementations/layers/state_keeper/mempool_io.rs +++ b/core/node/node_framework/src/implementations/layers/state_keeper/mempool_io.rs @@ -2,7 +2,10 @@ use std::sync::Arc; use anyhow::Context as _; use zksync_config::{ - configs::chain::{MempoolConfig, NetworkConfig, StateKeeperConfig}, + configs::{ + chain::{MempoolConfig, NetworkConfig, StateKeeperConfig}, + wallets, + }, ContractsConfig, }; use zksync_core::state_keeper::{ @@ -29,6 +32,7 @@ pub struct MempoolIOLayer { contracts_config: ContractsConfig, state_keeper_config: StateKeeperConfig, mempool_config: MempoolConfig, + wallets: wallets::StateKeeper, } impl MempoolIOLayer { @@ -37,12 +41,14 @@ impl MempoolIOLayer { contracts_config: ContractsConfig, state_keeper_config: StateKeeperConfig, mempool_config: MempoolConfig, + wallets: wallets::StateKeeper, ) -> Self { Self { network_config, contracts_config, state_keeper_config, mempool_config, + wallets, } } @@ -114,6 +120,7 @@ impl WiringLayer for MempoolIOLayer { batch_fee_input_provider, mempool_db_pool, &self.state_keeper_config, + self.wallets.fee_account.address(), self.mempool_config.delay_interval(), self.network_config.zksync_network_id, ) From 538c0fb70af8819a2052508305ffd81d9d04f175 Mon Sep 17 00:00:00 2001 From: Danil Date: Thu, 28 Mar 2024 11:39:28 +0100 Subject: [PATCH 51/65] Load wallets correctly Signed-off-by: Danil --- core/lib/config/src/configs/eth_sender.rs | 2 + core/lib/config/src/configs/wallets.rs | 16 +++++++ core/lib/env_config/src/chain.rs | 3 +- core/lib/env_config/src/eth_sender.rs | 1 + core/lib/env_config/src/lib.rs | 1 + core/lib/env_config/src/wallets.rs | 46 +++++++++++++++++++ .../eth_client/src/clients/http/signing.rs | 26 +---------- .../src/api_server/tx_sender/tests.rs | 4 +- .../lib/zksync_core/src/block_reverter/mod.rs | 2 + .../src/state_keeper/io/tests/tester.rs | 7 +-- .../zksync_core/src/temp_config_store/mod.rs | 3 +- .../node/node_framework/examples/main_node.rs | 16 ++++++- .../src/implementations/layers/eth_sender.rs | 23 +++++++--- .../layers/pk_signing_eth_client.rs | 21 ++++++--- 14 files changed, 126 insertions(+), 45 deletions(-) create mode 100644 core/lib/env_config/src/wallets.rs diff --git a/core/lib/config/src/configs/eth_sender.rs b/core/lib/config/src/configs/eth_sender.rs index 8abcd9eebd2..7afe79d501d 100644 --- a/core/lib/config/src/configs/eth_sender.rs +++ b/core/lib/config/src/configs/eth_sender.rs @@ -133,6 +133,7 @@ impl SenderConfig { } // Don't load private key, if it's not required. + #[deprecated] pub fn private_key(&self) -> Option { std::env::var("ETH_SENDER_SENDER_OPERATOR_PRIVATE_KEY") .ok() @@ -140,6 +141,7 @@ impl SenderConfig { } // Don't load blobs private key, if it's not required + #[deprecated] pub fn private_key_blobs(&self) -> Option { std::env::var("ETH_SENDER_SENDER_OPERATOR_BLOBS_PRIVATE_KEY") .ok() diff --git a/core/lib/config/src/configs/wallets.rs b/core/lib/config/src/configs/wallets.rs index dee4836c3fa..40f267ce47e 100644 --- a/core/lib/config/src/configs/wallets.rs +++ b/core/lib/config/src/configs/wallets.rs @@ -53,3 +53,19 @@ pub struct Wallets { pub eth_sender: Option, pub state_keeper: Option, } + +impl Wallets { + pub fn for_tests() -> Wallets { + Wallets { + eth_sender: Some(EthSender { + operator: Wallet::from_private_key(H256::repeat_byte(0x1), None).unwrap(), + blob_operator: Some( + Wallet::from_private_key(H256::repeat_byte(0x2), None).unwrap(), + ), + }), + state_keeper: Some(StateKeeper { + fee_account: Wallet::from_private_key(H256::repeat_byte(0x3), None).unwrap(), + }), + } + } +} diff --git a/core/lib/env_config/src/chain.rs b/core/lib/env_config/src/chain.rs index ab93c552e65..5838b792d2e 100644 --- a/core/lib/env_config/src/chain.rs +++ b/core/lib/env_config/src/chain.rs @@ -66,6 +66,7 @@ mod tests { assert_eq!(actual, expected_network_config()); } + #[allow(deprecated)] fn expected_state_keeper_config() -> StateKeeperConfig { StateKeeperConfig { transaction_slots: 50, @@ -79,7 +80,7 @@ mod tests { close_block_at_geometry_percentage: 0.5, reject_tx_at_eth_params_percentage: 0.8, reject_tx_at_geometry_percentage: 0.3, - fee_account_addr: addr("de03a0B5963f75f1C8485B355fF6D30f3093BDE7"), + fee_account_addr: Some(addr("de03a0B5963f75f1C8485B355fF6D30f3093BDE7")), reject_tx_at_gas_percentage: 0.5, minimal_l2_gas_price: 100000000, compute_overhead_part: 0.0, diff --git a/core/lib/env_config/src/eth_sender.rs b/core/lib/env_config/src/eth_sender.rs index d5a4bb1afb8..0cab3289282 100644 --- a/core/lib/env_config/src/eth_sender.rs +++ b/core/lib/env_config/src/eth_sender.rs @@ -84,6 +84,7 @@ mod tests { } #[test] + #[allow(deprecated)] fn from_env() { let mut lock = MUTEX.lock(); let config = r#" diff --git a/core/lib/env_config/src/lib.rs b/core/lib/env_config/src/lib.rs index bf7d61668b9..91c487f9714 100644 --- a/core/lib/env_config/src/lib.rs +++ b/core/lib/env_config/src/lib.rs @@ -26,6 +26,7 @@ mod witness_generator; mod genesis; #[cfg(test)] mod test_utils; +mod wallets; pub trait FromEnv: Sized { fn from_env() -> anyhow::Result; diff --git a/core/lib/env_config/src/wallets.rs b/core/lib/env_config/src/wallets.rs new file mode 100644 index 00000000000..48385c3bfda --- /dev/null +++ b/core/lib/env_config/src/wallets.rs @@ -0,0 +1,46 @@ +use std::str::FromStr; + +use zksync_basic_types::Address; +use zksync_config::configs::wallets::{EthSender, StateKeeper, Wallet, Wallets}; + +use crate::FromEnv; + +impl FromEnv for Wallets { + fn from_env() -> anyhow::Result { + let operator = std::env::var("ETH_SENDER_SENDER_OPERATOR_PRIVATE_KEY") + .ok() + .map(|pk| pk.parse().unwrap()); + + let blob_operator = std::env::var("ETH_SENDER_SENDER_OPERATOR_BLOBS_PRIVATE_KEY") + .ok() + .map(|pk| pk.parse().unwrap()); + + let eth_sender = if let Some(operator) = operator { + let operator = Wallet::from_private_key(operator, None)?; + let blob_operator = if let Some(blob_operator) = blob_operator { + Some(Wallet::from_private_key(blob_operator, None)?) + } else { + None + }; + Some(EthSender { + operator, + blob_operator, + }) + } else { + None + }; + + let fee_account = std::env::var("CHAIN_STATE_KEEPER_FEE_ACCOUNT_ADDR").ok(); + let state_keeper = if let Some(fee_account) = fee_account { + let fee_account = Wallet::from_address(Address::from_str(&fee_account)?); + Some(StateKeeper { fee_account }) + } else { + None + }; + + Ok(Self { + eth_sender, + state_keeper, + }) + } +} diff --git a/core/lib/eth_client/src/clients/http/signing.rs b/core/lib/eth_client/src/clients/http/signing.rs index 80e4db8e0d8..5d01c3ae0c8 100644 --- a/core/lib/eth_client/src/clients/http/signing.rs +++ b/core/lib/eth_client/src/clients/http/signing.rs @@ -33,14 +33,8 @@ impl PKSigningClient { eth_sender: ÐConfig, contracts_config: &ContractsConfig, l1_chain_id: L1ChainId, + operator_private_key: H256, ) -> Self { - // Gather required data from the config. - // It's done explicitly to simplify getting rid of this function later. - let operator_private_key = eth_sender - .sender - .private_key() - .expect("Operator private key is required for signing client"); - Self::from_config_inner( eth_sender, contracts_config, @@ -49,24 +43,6 @@ impl PKSigningClient { ) } - /// Create an signing client for the blobs account - pub fn from_config_blobs( - eth_sender: ÐConfig, - contracts_config: &ContractsConfig, - l1_chain_id: L1ChainId, - ) -> Option { - // Gather required data from the config. - // It's done explicitly to simplify getting rid of this function later. - let operator_private_key = eth_sender.sender.private_key_blobs()?; - - Some(Self::from_config_inner( - eth_sender, - contracts_config, - l1_chain_id, - operator_private_key, - )) - } - pub fn new_raw( operator_private_key: H256, diamond_proxy_addr: Address, diff --git a/core/lib/zksync_core/src/api_server/tx_sender/tests.rs b/core/lib/zksync_core/src/api_server/tx_sender/tests.rs index 92bec6a57ee..85c90b88e71 100644 --- a/core/lib/zksync_core/src/api_server/tx_sender/tests.rs +++ b/core/lib/zksync_core/src/api_server/tx_sender/tests.rs @@ -1,5 +1,6 @@ //! Tests for the transaction sender. +use zksync_config::configs::wallets::Wallets; use zksync_types::{get_nonce_key, L1BatchNumber, StorageLog}; use super::*; @@ -16,10 +17,11 @@ pub(crate) async fn create_test_tx_sender( ) -> (TxSender, VmConcurrencyBarrier) { let web3_config = Web3JsonRpcConfig::for_tests(); let state_keeper_config = StateKeeperConfig::for_tests(); + let wallets = Wallets::for_tests(); let tx_sender_config = TxSenderConfig::new( &state_keeper_config, &web3_config, - state_keeper_config.fee_account_addr.unwrap(), + wallets.state_keeper.unwrap().fee_account.address(), l2_chain_id, ); diff --git a/core/lib/zksync_core/src/block_reverter/mod.rs b/core/lib/zksync_core/src/block_reverter/mod.rs index 08138e48a18..ed474c2d428 100644 --- a/core/lib/zksync_core/src/block_reverter/mod.rs +++ b/core/lib/zksync_core/src/block_reverter/mod.rs @@ -54,6 +54,8 @@ pub struct BlockReverterEthConfig { impl BlockReverterEthConfig { pub fn new(eth_config: ETHConfig, contract: ContractsConfig) -> Self { + #[allow(deprecated)] + // `BlockReverter` doesn't support non env configs yet let pk = eth_config .sender .private_key() diff --git a/core/lib/zksync_core/src/state_keeper/io/tests/tester.rs b/core/lib/zksync_core/src/state_keeper/io/tests/tester.rs index 27cb9c42f74..8f0abb2e3d6 100644 --- a/core/lib/zksync_core/src/state_keeper/io/tests/tester.rs +++ b/core/lib/zksync_core/src/state_keeper/io/tests/tester.rs @@ -4,7 +4,7 @@ use std::{slice, sync::Arc, time::Duration}; use multivm::vm_latest::constants::BLOCK_GAS_LIMIT; use zksync_config::{ - configs::{chain::StateKeeperConfig, eth_sender::PubdataSendingMode}, + configs::{chain::StateKeeperConfig, eth_sender::PubdataSendingMode, wallets::Wallets}, GasAdjusterConfig, }; use zksync_contracts::BaseSystemContracts; @@ -18,7 +18,7 @@ use zksync_types::{ protocol_version::L1VerifierConfig, system_contracts::get_system_smart_contracts, tx::TransactionExecutionResult, - Address, L2ChainId, MiniblockNumber, PriorityOpId, ProtocolVersionId, H256, + L2ChainId, MiniblockNumber, PriorityOpId, ProtocolVersionId, H256, }; use crate::{ @@ -105,15 +105,16 @@ impl Tester { minimal_l2_gas_price: self.minimal_l2_gas_price(), virtual_blocks_interval: 1, virtual_blocks_per_miniblock: 1, - fee_account_addr: Address::repeat_byte(0x11), // Maintain implicit invariant: fee address is never `Address::zero()` validation_computational_gas_limit: BLOCK_GAS_LIMIT, ..StateKeeperConfig::for_tests() }; + let wallets = Wallets::for_tests(); let io = MempoolIO::new( mempool.clone(), Arc::new(batch_fee_input_provider), pool, &config, + wallets.state_keeper.unwrap().fee_account.address(), Duration::from_secs(1), L2ChainId::from(270), ) diff --git a/core/lib/zksync_core/src/temp_config_store/mod.rs b/core/lib/zksync_core/src/temp_config_store/mod.rs index 744af8133e2..2814cbc70ee 100644 --- a/core/lib/zksync_core/src/temp_config_store/mod.rs +++ b/core/lib/zksync_core/src/temp_config_store/mod.rs @@ -109,6 +109,7 @@ impl TempConfigStore { } } + #[allow(deprecated)] pub fn wallets(&self) -> Wallets { let eth_sender = self.eth_sender_config.as_ref().and_then(|x| { let operator = x @@ -124,7 +125,6 @@ impl TempConfigStore { blob_operator, }) }); - #[allow(deprecated)] let state_keeper = self .state_keeper_config .as_ref() @@ -132,7 +132,6 @@ impl TempConfigStore { fee_account: Wallet::from_address( state_keeper .fee_account_addr - .clone() .expect("Must be presented in env variables"), ), }); diff --git a/core/node/node_framework/examples/main_node.rs b/core/node/node_framework/examples/main_node.rs index 8fa7ff7ef10..6a32431da5d 100644 --- a/core/node/node_framework/examples/main_node.rs +++ b/core/node/node_framework/examples/main_node.rs @@ -11,6 +11,7 @@ use zksync_config::{ }, fri_prover_group::FriProverGroupConfig, house_keeper::HouseKeeperConfig, + wallets::Wallets, FriProofCompressorConfig, FriProverConfig, FriWitnessGeneratorConfig, ObservabilityConfig, ProofDataHandlerConfig, }, @@ -85,10 +86,13 @@ impl MainNodeBuilder { fn add_pk_signing_client_layer(mut self) -> anyhow::Result { let genesis = GenesisConfig::from_env()?; + let eth_config = ETHConfig::from_env()?; + let wallets = Wallets::from_env()?; self.node.add_layer(PKSigningEthClientLayer::new( - ETHConfig::from_env()?, + eth_config, ContractsConfig::from_env()?, genesis.l1_chain_id, + wallets.eth_sender.context("Eth sender configs")?, )); Ok(self) } @@ -133,11 +137,13 @@ impl MainNodeBuilder { } fn add_state_keeper_layer(mut self) -> anyhow::Result { + let wallets = Wallets::from_env()?; let mempool_io_layer = MempoolIOLayer::new( NetworkConfig::from_env()?, ContractsConfig::from_env()?, StateKeeperConfig::from_env()?, MempoolConfig::from_env()?, + wallets.state_keeper.context("State keeper wallets")?, ); let main_node_batch_executor_builder_layer = MainBatchExecutorLayer::new(DBConfig::from_env()?, StateKeeperConfig::from_env()?); @@ -179,6 +185,7 @@ impl MainNodeBuilder { initial_writes_cache_size: rpc_config.initial_writes_cache_size() as u64, latest_values_cache_size: rpc_config.latest_values_cache_size() as u64, }; + let wallets = Wallets::from_env()?; // On main node we always use master pool sink. self.node.add_layer(TxSinkLayer::MasterPoolSink); @@ -186,6 +193,11 @@ impl MainNodeBuilder { TxSenderConfig::new( &state_keeper_config, &rpc_config, + wallets + .state_keeper + .context("StateKeeper wallets")? + .fee_account + .address(), network_config.zksync_network_id, ), postgres_storage_caches_config, @@ -271,12 +283,14 @@ impl MainNodeBuilder { let contracts_config = ContractsConfig::from_env()?; let network_config = NetworkConfig::from_env()?; let genesis_config = GenesisConfig::from_env()?; + let wallets = Wallets::from_env()?; self.node.add_layer(EthSenderLayer::new( eth_sender_config, contracts_config, network_config, genesis_config.l1_chain_id, + wallets.eth_sender.context("Eth sender wallets")?, )); Ok(self) diff --git a/core/node/node_framework/src/implementations/layers/eth_sender.rs b/core/node/node_framework/src/implementations/layers/eth_sender.rs index e15839f7780..469ce6a302e 100644 --- a/core/node/node_framework/src/implementations/layers/eth_sender.rs +++ b/core/node/node_framework/src/implementations/layers/eth_sender.rs @@ -1,7 +1,9 @@ use std::sync::Arc; use zksync_circuit_breaker::l1_txs::FailedL1TransactionChecker; -use zksync_config::configs::{chain::NetworkConfig, eth_sender::ETHConfig, ContractsConfig}; +use zksync_config::configs::{ + chain::NetworkConfig, eth_sender::ETHConfig, wallets, ContractsConfig, +}; use zksync_core::eth_sender::{Aggregator, EthTxAggregator, EthTxManager}; use zksync_eth_client::{clients::PKSigningClient, BoundEthInterface}; use zksync_types::L1ChainId; @@ -25,6 +27,7 @@ pub struct EthSenderLayer { contracts_config: ContractsConfig, network_config: NetworkConfig, l1chain_id: L1ChainId, + wallets: wallets::EthSender, } impl EthSenderLayer { @@ -33,12 +36,14 @@ impl EthSenderLayer { contracts_config: ContractsConfig, network_config: NetworkConfig, l1chain_id: L1ChainId, + wallets: wallets::EthSender, ) -> Self { Self { eth_sender_config, contracts_config, network_config, l1chain_id, + wallets, } } } @@ -62,11 +67,17 @@ impl WiringLayer for EthSenderLayer { let object_store = context.get_resource::().await?.0; // Create and add tasks. - let eth_client_blobs = PKSigningClient::from_config_blobs( - &self.eth_sender_config, - &self.contracts_config, - self.l1chain_id, - ); + + let eth_client_blobs = self.wallets.blob_operator.and_then(|wallet| { + wallet.private_key().map(|pk| { + PKSigningClient::from_config( + &self.eth_sender_config, + &self.contracts_config, + self.l1chain_id, + pk, + ) + }) + }); let eth_client_blobs_addr = eth_client_blobs.clone().map(|k| k.sender_account()); let aggregator = Aggregator::new( diff --git a/core/node/node_framework/src/implementations/layers/pk_signing_eth_client.rs b/core/node/node_framework/src/implementations/layers/pk_signing_eth_client.rs index d298a2113d8..34c928f2bb8 100644 --- a/core/node/node_framework/src/implementations/layers/pk_signing_eth_client.rs +++ b/core/node/node_framework/src/implementations/layers/pk_signing_eth_client.rs @@ -1,6 +1,9 @@ use std::sync::Arc; -use zksync_config::{configs::ContractsConfig, ETHConfig}; +use zksync_config::{ + configs::{wallets, ContractsConfig}, + ETHConfig, +}; use zksync_eth_client::clients::PKSigningClient; use zksync_types::L1ChainId; @@ -15,6 +18,7 @@ pub struct PKSigningEthClientLayer { eth_sender_config: ETHConfig, contracts_config: ContractsConfig, l1chain_id: L1ChainId, + wallets: wallets::EthSender, } impl PKSigningEthClientLayer { @@ -22,11 +26,13 @@ impl PKSigningEthClientLayer { eth_sender_config: ETHConfig, contracts_config: ContractsConfig, l1chain_id: L1ChainId, + wallets: wallets::EthSender, ) -> Self { Self { eth_sender_config, contracts_config, l1chain_id, + wallets, } } } @@ -38,16 +44,19 @@ impl WiringLayer for PKSigningEthClientLayer { } async fn wire(self: Box, mut context: ServiceContext<'_>) -> Result<(), WiringError> { - if self.eth_sender_config.sender.private_key().is_none() { - return Err(WiringError::Configuration( - "Private key is missing in ETHSenderConfig".to_string(), - )); - } + let private_key = self + .wallets + .operator + .private_key() + .ok_or(WiringError::Configuration( + "Private key is missing in Wallets".to_string(), + ))?; let signing_client = PKSigningClient::from_config( &self.eth_sender_config, &self.contracts_config, self.l1chain_id, + private_key, ); context.insert_resource(BoundEthInterfaceResource(Arc::new(signing_client)))?; Ok(()) From 5458fa49a685fe6c793d47568365e2bb79b07e0c Mon Sep 17 00:00:00 2001 From: Danil Date: Thu, 28 Mar 2024 12:07:36 +0100 Subject: [PATCH 52/65] Fix Signed-off-by: Danil --- core/lib/config/src/configs/chain.rs | 4 ++-- core/lib/config/src/configs/contract_verifier.rs | 1 + core/lib/config/src/testonly.rs | 1 + core/lib/env_config/src/contract_verifier.rs | 3 ++- core/lib/protobuf_config/src/chain.rs | 2 +- core/lib/protobuf_config/src/contract_verifier.rs | 3 ++- 6 files changed, 9 insertions(+), 5 deletions(-) diff --git a/core/lib/config/src/configs/chain.rs b/core/lib/config/src/configs/chain.rs index 134ac5c8cf8..5de587951a7 100644 --- a/core/lib/config/src/configs/chain.rs +++ b/core/lib/config/src/configs/chain.rs @@ -79,7 +79,7 @@ pub struct StateKeeperConfig { pub close_block_at_eth_params_percentage: f64, /// Denotes the percentage of L1 gas used in L2 block that triggers L2 block seal. pub close_block_at_gas_percentage: f64, - /// Fee account address, it's optional because it's required only for loading from envs + /// Fee account address. Value is deprecated and it's used only for generating wallets struct #[deprecated] pub fee_account_addr: Option
, /// The minimal acceptable L2 gas price, i.e. the price that should include the cost of computation/proving as well @@ -117,7 +117,7 @@ pub struct StateKeeperConfig { /// Number of keys that is processed by enum_index migration in State Keeper each L1 batch. pub enum_index_migration_chunk_size: Option, - // Base system contract hash, required only for genesis file, it's temporary solution + // Base system contract hashes, required only for generating genesis config. // #PLA-811 #[deprecated] pub bootloader_hash: Option, diff --git a/core/lib/config/src/configs/contract_verifier.rs b/core/lib/config/src/configs/contract_verifier.rs index acd1aa49e34..0016e1255de 100644 --- a/core/lib/config/src/configs/contract_verifier.rs +++ b/core/lib/config/src/configs/contract_verifier.rs @@ -13,6 +13,7 @@ pub struct ContractVerifierConfig { pub polling_interval: Option, /// Port to which the Prometheus exporter server is listening. pub prometheus_port: u16, + pub threads_per_server: Option, pub port: u16, pub url: String, } diff --git a/core/lib/config/src/testonly.rs b/core/lib/config/src/testonly.rs index 6db78ff1b69..6085e3529c0 100644 --- a/core/lib/config/src/testonly.rs +++ b/core/lib/config/src/testonly.rs @@ -334,6 +334,7 @@ impl RandomConfig for configs::ContractVerifierConfig { compilation_timeout: g.gen(), polling_interval: g.gen(), prometheus_port: g.gen(), + threads_per_server: g.gen(), port: g.gen(), url: g.gen(), } diff --git a/core/lib/env_config/src/contract_verifier.rs b/core/lib/env_config/src/contract_verifier.rs index fdda564d406..9244eda910f 100644 --- a/core/lib/env_config/src/contract_verifier.rs +++ b/core/lib/env_config/src/contract_verifier.rs @@ -20,6 +20,7 @@ mod tests { compilation_timeout: 30, polling_interval: Some(1000), prometheus_port: 3314, + threads_per_server: Some(128), port: 3070, url: "127.0.0.1:3070".to_string(), } @@ -34,8 +35,8 @@ mod tests { CONTRACT_VERIFIER_PROMETHEUS_PORT=3314 CONTRACT_VERIFIER_PORT=3070 CONTRACT_VERIFIER_URL=127.0.0.1:3070 + CONTRACT_THREADS_PER_SERVER=128 - "#; lock.set_env(config); diff --git a/core/lib/protobuf_config/src/chain.rs b/core/lib/protobuf_config/src/chain.rs index e3e430a7813..1f6603e626c 100644 --- a/core/lib/protobuf_config/src/chain.rs +++ b/core/lib/protobuf_config/src/chain.rs @@ -83,7 +83,7 @@ impl ProtoRepr for proto::StateKeeper { .map(|x| x.try_into()) .transpose() .context("enum_index_migration_chunk_size")?, - // We need this values only for genesis file, so it's not + // We need these values only for instantiating configs from envs, so it's not // needed during the initialization from files bootloader_hash: None, default_aa_hash: None, diff --git a/core/lib/protobuf_config/src/contract_verifier.rs b/core/lib/protobuf_config/src/contract_verifier.rs index a985e1c3e1c..f47872234a8 100644 --- a/core/lib/protobuf_config/src/contract_verifier.rs +++ b/core/lib/protobuf_config/src/contract_verifier.rs @@ -16,6 +16,7 @@ impl ProtoRepr for proto::ContractVerifier { .context("prometheus_port")?, url: required(&self.url).cloned().context("url")?, port: required(&self.port).map(|x| *x as u16).context("port")?, + threads_per_server: self.threads_per_server.map(|a| a as u16), }) } @@ -25,7 +26,7 @@ impl ProtoRepr for proto::ContractVerifier { url: Some(this.url.clone()), compilation_timeout: Some(this.compilation_timeout), polling_interval: this.polling_interval, - threads_per_server: None, + threads_per_server: this.threads_per_server.map(|a| a as u32), prometheus_port: Some(this.prometheus_port.into()), } } From ce615cc32c15ce75c60fd80a9a3e6619a1a8768f Mon Sep 17 00:00:00 2001 From: Danil Date: Thu, 28 Mar 2024 19:34:28 +0100 Subject: [PATCH 53/65] Fix general config file only monitoring and snapshot creator Signed-off-by: Danil --- Cargo.lock | 38 +- Cargo.toml | 20 +- core/bin/zksync_server/src/main.rs | 28 +- core/lib/protobuf_config/Cargo.toml | 1 + core/lib/protobuf_config/src/api.rs | 30 +- core/lib/protobuf_config/src/contracts.rs | 22 +- core/lib/protobuf_config/src/database.rs | 11 +- core/lib/protobuf_config/src/general.rs | 13 +- core/lib/protobuf_config/src/genesis.rs | 42 +- core/lib/protobuf_config/src/lib.rs | 11 +- core/lib/protobuf_config/src/proto/api.proto | 6 +- .../protobuf_config/src/proto/contracts.proto | 18 +- .../protobuf_config/src/proto/general.proto | 2 + .../protobuf_config/src/proto/genesis.proto | 24 +- .../protobuf_config/src/proto/prover.proto | 4 +- .../protobuf_config/src/proto/wallets.proto | 4 +- core/lib/protobuf_config/src/prover.rs | 36 +- core/lib/protobuf_config/src/wallets.rs | 20 +- core/lib/zksync_core/src/consensus/config.rs | 9 +- .../zksync_core/src/temp_config_store/mod.rs | 2 +- etc/env/file_based/general.yaml | 570 +++++++++--------- etc/env/file_based/genesis.yaml | 37 +- etc/env/file_based/wallets.yaml | 8 +- 23 files changed, 508 insertions(+), 448 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 86a8aaa9d09..6657a780afb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2598,6 +2598,12 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + [[package]] name = "hermit-abi" version = "0.1.19" @@ -4175,7 +4181,7 @@ dependencies = [ [[package]] name = "pairing_ce" version = "0.28.5" -source = "git+https://github.com/matter-labs/pairing.git?rev=f55393fd366596eac792d78525d26e9c4d6ed1ca#f55393fd366596eac792d78525d26e9c4d6ed1ca" +source = "git+https://github.com/matter-labs/pairing.git?rev=d24f2c5871089c4cd4f54c0ca266bb9fef6115eb#d24f2c5871089c4cd4f54c0ca266bb9fef6115eb" dependencies = [ "byteorder", "cfg-if 1.0.0", @@ -7978,7 +7984,7 @@ dependencies = [ [[package]] name = "zksync_concurrency" version = "0.1.0" -source = "git+https://github.com/matter-labs/era-consensus.git?rev=5329a809cfc06d4939fb5ece26c9ad1e1741c50a#5329a809cfc06d4939fb5ece26c9ad1e1741c50a" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=8833a9b7fef89d1ffc5c08d53a3560164bc1c694#8833a9b7fef89d1ffc5c08d53a3560164bc1c694" dependencies = [ "anyhow", "once_cell", @@ -8007,7 +8013,7 @@ dependencies = [ [[package]] name = "zksync_consensus_bft" version = "0.1.0" -source = "git+https://github.com/matter-labs/era-consensus.git?rev=5329a809cfc06d4939fb5ece26c9ad1e1741c50a#5329a809cfc06d4939fb5ece26c9ad1e1741c50a" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=8833a9b7fef89d1ffc5c08d53a3560164bc1c694#8833a9b7fef89d1ffc5c08d53a3560164bc1c694" dependencies = [ "anyhow", "async-trait", @@ -8028,14 +8034,14 @@ dependencies = [ [[package]] name = "zksync_consensus_crypto" version = "0.1.0" -source = "git+https://github.com/matter-labs/era-consensus.git?rev=5329a809cfc06d4939fb5ece26c9ad1e1741c50a#5329a809cfc06d4939fb5ece26c9ad1e1741c50a" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=8833a9b7fef89d1ffc5c08d53a3560164bc1c694#8833a9b7fef89d1ffc5c08d53a3560164bc1c694" dependencies = [ "anyhow", "blst", "ed25519-dalek", "ff_ce", "hex", - "pairing_ce 0.28.5 (git+https://github.com/matter-labs/pairing.git?rev=f55393fd366596eac792d78525d26e9c4d6ed1ca)", + "pairing_ce 0.28.5 (git+https://github.com/matter-labs/pairing.git?rev=d24f2c5871089c4cd4f54c0ca266bb9fef6115eb)", "rand 0.4.6", "rand 0.8.5", "sha3 0.10.8", @@ -8046,7 +8052,7 @@ dependencies = [ [[package]] name = "zksync_consensus_executor" version = "0.1.0" -source = "git+https://github.com/matter-labs/era-consensus.git?rev=5329a809cfc06d4939fb5ece26c9ad1e1741c50a#5329a809cfc06d4939fb5ece26c9ad1e1741c50a" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=8833a9b7fef89d1ffc5c08d53a3560164bc1c694#8833a9b7fef89d1ffc5c08d53a3560164bc1c694" dependencies = [ "anyhow", "rand 0.8.5", @@ -8066,7 +8072,7 @@ dependencies = [ [[package]] name = "zksync_consensus_network" version = "0.1.0" -source = "git+https://github.com/matter-labs/era-consensus.git?rev=5329a809cfc06d4939fb5ece26c9ad1e1741c50a#5329a809cfc06d4939fb5ece26c9ad1e1741c50a" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=8833a9b7fef89d1ffc5c08d53a3560164bc1c694#8833a9b7fef89d1ffc5c08d53a3560164bc1c694" dependencies = [ "anyhow", "async-trait", @@ -8091,7 +8097,7 @@ dependencies = [ [[package]] name = "zksync_consensus_roles" version = "0.1.0" -source = "git+https://github.com/matter-labs/era-consensus.git?rev=5329a809cfc06d4939fb5ece26c9ad1e1741c50a#5329a809cfc06d4939fb5ece26c9ad1e1741c50a" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=8833a9b7fef89d1ffc5c08d53a3560164bc1c694#8833a9b7fef89d1ffc5c08d53a3560164bc1c694" dependencies = [ "anyhow", "bit-vec", @@ -8111,7 +8117,7 @@ dependencies = [ [[package]] name = "zksync_consensus_storage" version = "0.1.0" -source = "git+https://github.com/matter-labs/era-consensus.git?rev=5329a809cfc06d4939fb5ece26c9ad1e1741c50a#5329a809cfc06d4939fb5ece26c9ad1e1741c50a" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=8833a9b7fef89d1ffc5c08d53a3560164bc1c694#8833a9b7fef89d1ffc5c08d53a3560164bc1c694" dependencies = [ "anyhow", "async-trait", @@ -8129,7 +8135,7 @@ dependencies = [ [[package]] name = "zksync_consensus_sync_blocks" version = "0.1.0" -source = "git+https://github.com/matter-labs/era-consensus.git?rev=5329a809cfc06d4939fb5ece26c9ad1e1741c50a#5329a809cfc06d4939fb5ece26c9ad1e1741c50a" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=8833a9b7fef89d1ffc5c08d53a3560164bc1c694#8833a9b7fef89d1ffc5c08d53a3560164bc1c694" dependencies = [ "anyhow", "thiserror", @@ -8144,8 +8150,9 @@ dependencies = [ [[package]] name = "zksync_consensus_utils" version = "0.1.0" -source = "git+https://github.com/matter-labs/era-consensus.git?rev=5329a809cfc06d4939fb5ece26c9ad1e1741c50a#5329a809cfc06d4939fb5ece26c9ad1e1741c50a" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=8833a9b7fef89d1ffc5c08d53a3560164bc1c694#8833a9b7fef89d1ffc5c08d53a3560164bc1c694" dependencies = [ + "rand 0.8.5", "thiserror", "zksync_concurrency", ] @@ -8573,7 +8580,7 @@ dependencies = [ [[package]] name = "zksync_protobuf" version = "0.1.0" -source = "git+https://github.com/matter-labs/era-consensus.git?rev=5329a809cfc06d4939fb5ece26c9ad1e1741c50a#5329a809cfc06d4939fb5ece26c9ad1e1741c50a" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=8833a9b7fef89d1ffc5c08d53a3560164bc1c694#8833a9b7fef89d1ffc5c08d53a3560164bc1c694" dependencies = [ "anyhow", "bit-vec", @@ -8584,17 +8591,19 @@ dependencies = [ "rand 0.8.5", "serde", "serde_json", + "serde_yaml", "zksync_concurrency", + "zksync_consensus_utils", "zksync_protobuf_build", ] [[package]] name = "zksync_protobuf_build" version = "0.1.0" -source = "git+https://github.com/matter-labs/era-consensus.git?rev=5329a809cfc06d4939fb5ece26c9ad1e1741c50a#5329a809cfc06d4939fb5ece26c9ad1e1741c50a" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=8833a9b7fef89d1ffc5c08d53a3560164bc1c694#8833a9b7fef89d1ffc5c08d53a3560164bc1c694" dependencies = [ "anyhow", - "heck 0.4.1", + "heck 0.5.0", "prettyplease", "proc-macro2 1.0.69", "prost-build", @@ -8609,6 +8618,7 @@ name = "zksync_protobuf_config" version = "0.1.0" dependencies = [ "anyhow", + "hex", "pretty_assertions", "prost 0.12.1", "rand 0.8.5", diff --git a/Cargo.toml b/Cargo.toml index 451ef8b1461..50bde4a95cd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -166,16 +166,16 @@ zk_evm_1_3_1 = { package = "zk_evm", git = "https://github.com/matter-labs/era-z zk_evm_1_3_3 = { package = "zk_evm", git = "https://github.com/matter-labs/era-zk_evm.git", tag = "v1.3.3-rc2" } zk_evm_1_4_0 = { package = "zk_evm", git = "https://github.com/matter-labs/era-zk_evm.git", branch = "v1.4.0" } zk_evm_1_4_1 = { package = "zk_evm", git = "https://github.com/matter-labs/era-zk_evm.git", branch = "v1.4.1" } -zksync_concurrency = { version = "0.1.0", git = "https://github.com/matter-labs/era-consensus.git", rev = "5329a809cfc06d4939fb5ece26c9ad1e1741c50a" } -zksync_consensus_bft = { version = "0.1.0", git = "https://github.com/matter-labs/era-consensus.git", rev = "5329a809cfc06d4939fb5ece26c9ad1e1741c50a" } -zksync_consensus_crypto = { version = "0.1.0", git = "https://github.com/matter-labs/era-consensus.git", rev = "5329a809cfc06d4939fb5ece26c9ad1e1741c50a" } -zksync_consensus_executor = { version = "0.1.0", git = "https://github.com/matter-labs/era-consensus.git", rev = "5329a809cfc06d4939fb5ece26c9ad1e1741c50a" } -zksync_consensus_network = { version = "0.1.0", git = "https://github.com/matter-labs/era-consensus.git", rev = "5329a809cfc06d4939fb5ece26c9ad1e1741c50a" } -zksync_consensus_roles = { version = "0.1.0", git = "https://github.com/matter-labs/era-consensus.git", rev = "5329a809cfc06d4939fb5ece26c9ad1e1741c50a" } -zksync_consensus_storage = { version = "0.1.0", git = "https://github.com/matter-labs/era-consensus.git", rev = "5329a809cfc06d4939fb5ece26c9ad1e1741c50a" } -zksync_consensus_utils = { version = "0.1.0", git = "https://github.com/matter-labs/era-consensus.git", rev = "5329a809cfc06d4939fb5ece26c9ad1e1741c50a" } -zksync_protobuf = { version = "0.1.0", git = "https://github.com/matter-labs/era-consensus.git", rev = "5329a809cfc06d4939fb5ece26c9ad1e1741c50a" } -zksync_protobuf_build = { version = "0.1.0", git = "https://github.com/matter-labs/era-consensus.git", rev = "5329a809cfc06d4939fb5ece26c9ad1e1741c50a" } +zksync_concurrency = { version = "0.1.0", git = "https://github.com/matter-labs/era-consensus.git", rev = "8833a9b7fef89d1ffc5c08d53a3560164bc1c694" } +zksync_consensus_bft = { version = "0.1.0", git = "https://github.com/matter-labs/era-consensus.git", rev = "8833a9b7fef89d1ffc5c08d53a3560164bc1c694" } +zksync_consensus_crypto = { version = "0.1.0", git = "https://github.com/matter-labs/era-consensus.git", rev = "8833a9b7fef89d1ffc5c08d53a3560164bc1c694" } +zksync_consensus_executor = { version = "0.1.0", git = "https://github.com/matter-labs/era-consensus.git", rev = "8833a9b7fef89d1ffc5c08d53a3560164bc1c694" } +zksync_consensus_network = { version = "0.1.0", git = "https://github.com/matter-labs/era-consensus.git", rev = "8833a9b7fef89d1ffc5c08d53a3560164bc1c694" } +zksync_consensus_roles = { version = "0.1.0", git = "https://github.com/matter-labs/era-consensus.git", rev = "8833a9b7fef89d1ffc5c08d53a3560164bc1c694" } +zksync_consensus_storage = { version = "0.1.0", git = "https://github.com/matter-labs/era-consensus.git", rev = "8833a9b7fef89d1ffc5c08d53a3560164bc1c694" } +zksync_consensus_utils = { version = "0.1.0", git = "https://github.com/matter-labs/era-consensus.git", rev = "8833a9b7fef89d1ffc5c08d53a3560164bc1c694" } +zksync_protobuf = { version = "0.1.0", git = "https://github.com/matter-labs/era-consensus.git", rev = "8833a9b7fef89d1ffc5c08d53a3560164bc1c694" } +zksync_protobuf_build = { version = "0.1.0", git = "https://github.com/matter-labs/era-consensus.git", rev = "8833a9b7fef89d1ffc5c08d53a3560164bc1c694" } # "Local" dependencies multivm = { path = "core/lib/multivm" } diff --git a/core/bin/zksync_server/src/main.rs b/core/bin/zksync_server/src/main.rs index 8216b1738e3..da3688e6068 100644 --- a/core/bin/zksync_server/src/main.rs +++ b/core/bin/zksync_server/src/main.rs @@ -62,6 +62,9 @@ struct Cli { /// Path to the wallets config. If set, it will be used instead of env vars. #[arg(long)] wallets_path: Option, + /// Path to the yaml with secrets. If set, it will be used instead of env vars. + #[arg(long)] + genesis_path: Option, } #[derive(Debug, Clone)] @@ -117,24 +120,27 @@ async fn main() -> anyhow::Result<()> { let yaml = std::fs::read_to_string(&path).with_context(|| path.display().to_string())?; decode_yaml_repr::(&yaml) - .context("failed decoding YAML config")? + .context("failed decoding general YAML config")? } }; + dbg!(&configs); + let wallets = match opt.wallets_path { None => tmp_config.wallets(), Some(path) => { let yaml = std::fs::read_to_string(&path).with_context(|| path.display().to_string())?; decode_yaml_repr::(&yaml) - .context("failed decoding YAML config")? + .context("failed decoding wallets YAML config")? } }; + let secrets: Secrets = match opt.secrets_path { Some(path) => { let yaml = std::fs::read_to_string(&path).with_context(|| path.display().to_string())?; - decode_yaml(&yaml).context("failed decoding YAML config")? + decode_yaml(&yaml).context("failed decoding secrets YAML config")? } None => Secrets { consensus: config::read_consensus_secrets().context("read_consensus_secrets()")?, @@ -143,18 +149,28 @@ async fn main() -> anyhow::Result<()> { let consensus = config::read_consensus_config().context("read_consensus_config()")?; - let contracts_config: ContractsConfig = match opt.contracts_config_path { + let contracts_config = match opt.contracts_config_path { None => ContractsConfig::from_env().context("contracts_config")?, Some(path) => { let yaml = std::fs::read_to_string(&path).with_context(|| path.display().to_string())?; decode_yaml_repr::(&yaml) - .context("failed decoding YAML config")? + .context("failed decoding contracts YAML config")? } }; + + let genesis = match opt.genesis_path { + None => GenesisConfig::from_env().context("Genesis config")?, + Some(path) => { + let yaml = + std::fs::read_to_string(&path).with_context(|| path.display().to_string())?; + decode_yaml_repr::(&yaml) + .context("failed decoding genesis YAML config")? + } + }; + let postgres_config = configs.postgres_config.clone().context("PostgresConfig")?; - let genesis = GenesisConfig::from_env().context("Genesis config")?; if opt.genesis || is_genesis_needed(&postgres_config).await { genesis_init(genesis.clone(), &postgres_config) .await diff --git a/core/lib/protobuf_config/Cargo.toml b/core/lib/protobuf_config/Cargo.toml index 80c4493ddb8..f8b3d020241 100644 --- a/core/lib/protobuf_config/Cargo.toml +++ b/core/lib/protobuf_config/Cargo.toml @@ -23,6 +23,7 @@ anyhow.workspace = true pretty_assertions.workspace = true prost.workspace = true rand.workspace = true +hex = "0.4.3" [build-dependencies] zksync_protobuf_build.workspace = true diff --git a/core/lib/protobuf_config/src/api.rs b/core/lib/protobuf_config/src/api.rs index d7fa05f1b65..cd6dfefb3c2 100644 --- a/core/lib/protobuf_config/src/api.rs +++ b/core/lib/protobuf_config/src/api.rs @@ -49,19 +49,15 @@ impl ProtoRepr for proto::Web3JsonRpc { gas_price_scale_factor: *required(&self.gas_price_scale_factor) .context("gas_price_scale_factor")?, request_timeout: self.request_timeout, - account_pks: self - .account_pks - .as_ref() - .map(|keys| { - keys.keys - .iter() - .enumerate() - .map(|(i, k)| parse_h256(k).context(i)) - .collect::>() - .context("keys") - }) - .transpose() - .context("account_pks")?, + account_pks: Some( + self.account_pks + .iter() + .enumerate() + .map(|(i, k)| parse_h256(k).context(i)) + .collect::>() + .context("keys")?, + ), + estimate_gas_scale_factor: *required(&self.estimate_gas_scale_factor) .context("estimate_gas_scale_factor")?, estimate_gas_acceptable_overestimation: *required( @@ -141,9 +137,11 @@ impl ProtoRepr for proto::Web3JsonRpc { max_nonce_ahead: Some(this.max_nonce_ahead), gas_price_scale_factor: Some(this.gas_price_scale_factor), request_timeout: this.request_timeout, - account_pks: this.account_pks.as_ref().map(|keys| proto::PrivateKeys { - keys: keys.iter().map(|k| k.as_bytes().into()).collect(), - }), + account_pks: this + .account_pks + .as_ref() + .map(|keys| keys.iter().map(|k| k.to_string()).collect()) + .unwrap_or_default(), estimate_gas_scale_factor: Some(this.estimate_gas_scale_factor), estimate_gas_acceptable_overestimation: Some( this.estimate_gas_acceptable_overestimation, diff --git a/core/lib/protobuf_config/src/contracts.rs b/core/lib/protobuf_config/src/contracts.rs index 537efffb45e..c70c828403b 100644 --- a/core/lib/protobuf_config/src/contracts.rs +++ b/core/lib/protobuf_config/src/contracts.rs @@ -62,24 +62,24 @@ impl ProtoRepr for proto::Contracts { fn build(this: &Self::Type) -> Self { Self { l1: Some(proto::L1 { - governance_addr: Some(this.governance_addr.as_bytes().into()), - verifier_addr: Some(this.verifier_addr.as_bytes().into()), - diamond_proxy_addr: Some(this.diamond_proxy_addr.as_bytes().into()), - validator_timelock_addr: Some(this.validator_timelock_addr.as_bytes().into()), - default_upgrade_addr: Some(this.default_upgrade_addr.as_bytes().into()), - multicall3_addr: Some(this.l1_multicall3_addr.as_bytes().into()), + governance_addr: Some(this.governance_addr.to_string()), + verifier_addr: Some(this.verifier_addr.to_string()), + diamond_proxy_addr: Some(this.diamond_proxy_addr.to_string()), + validator_timelock_addr: Some(this.validator_timelock_addr.to_string()), + default_upgrade_addr: Some(this.default_upgrade_addr.to_string()), + multicall3_addr: Some(this.l1_multicall3_addr.to_string()), }), l2: Some(proto::L2 { - testnet_paymaster_addr: this.l2_testnet_paymaster_addr.map(|a| a.as_bytes().into()), + testnet_paymaster_addr: this.l2_testnet_paymaster_addr.map(|a| a.to_string()), }), bridges: Some(proto::Bridges { erc20: Some(proto::Bridge { - l1_address: Some(this.l1_erc20_bridge_proxy_addr.as_bytes().into()), - l2_address: Some(this.l2_erc20_bridge_addr.as_bytes().into()), + l1_address: Some(this.l1_erc20_bridge_proxy_addr.to_string()), + l2_address: Some(this.l2_erc20_bridge_addr.to_string()), }), weth: Some(proto::Bridge { - l1_address: this.l1_weth_bridge_proxy_addr.map(|a| a.as_bytes().into()), - l2_address: this.l2_weth_bridge_addr.map(|a| a.as_bytes().into()), + l1_address: this.l1_weth_bridge_proxy_addr.map(|a| a.to_string()), + l2_address: this.l2_weth_bridge_addr.map(|a| a.to_string()), }), }), } diff --git a/core/lib/protobuf_config/src/database.rs b/core/lib/protobuf_config/src/database.rs index 146ea58e09e..bd7a52d67a0 100644 --- a/core/lib/protobuf_config/src/database.rs +++ b/core/lib/protobuf_config/src/database.rs @@ -92,9 +92,18 @@ impl ProtoRepr for proto::Postgres { .as_ref() .map(|x| (x.server_url.clone(), x.prover_url.clone())) .unwrap_or_default(); + let replica_url = if let Some(replica_url) = self.server_replica_url.clone() { + Some(replica_url) + } else { + if let Some(server_url) = self.server_url.clone() { + Some(server_url) + } else { + None + } + }; Ok(Self::Type { master_url: self.server_url.clone(), - replica_url: self.server_replica_url.clone(), + replica_url, prover_url: self.prover_url.clone(), max_connections: self.max_connections, max_connections_master: self.max_connections_master, diff --git a/core/lib/protobuf_config/src/general.rs b/core/lib/protobuf_config/src/general.rs index 41b8eea30c3..5af524c3502 100644 --- a/core/lib/protobuf_config/src/general.rs +++ b/core/lib/protobuf_config/src/general.rs @@ -19,13 +19,13 @@ impl ProtoRepr for proto::GeneralConfig { state_keeper_config: read_optional_repr(&self.state_keeper).context("state_keeper")?, house_keeper_config: read_optional_repr(&self.house_keeper).context("house_keeper")?, proof_compressor_config: read_optional_repr(&self.proof_compressor) - .context("fri_proof_compressor")?, - prover_config: read_optional_repr(&self.prover).context("fri_prover")?, - prover_gateway: read_optional_repr(&self.prover_gateway).context("fri_prover")?, + .context("proof_compressor_config")?, + prover_config: read_optional_repr(&self.prover).context("prover_config")?, + prover_gateway: read_optional_repr(&self.prover_gateway).context("prover_gateway")?, witness_vector_generator: read_optional_repr(&self.witness_vector_generator) - .context("fri_prover")?, + .context("witness_vector_generator")?, prover_group_config: read_optional_repr(&self.prover_group) - .context("fri_prover_group")?, + .context("prover_group_config")?, prometheus_config: read_optional_repr(&self.prometheus).context("prometheus")?, proof_data_handler_config: read_optional_repr(&self.data_handler) .context("proof_data_handler")?, @@ -33,7 +33,7 @@ impl ProtoRepr for proto::GeneralConfig { .context("witness_generator")?, api_config: read_optional_repr(&self.api).context("api")?, db_config: read_optional_repr(&self.db).context("db")?, - eth: read_optional_repr(&self.eth).context("db")?, + eth: read_optional_repr(&self.eth).context("eth")?, }) } @@ -63,6 +63,7 @@ impl ProtoRepr for proto::GeneralConfig { api: this.api_config.as_ref().map(ProtoRepr::build), db: this.db_config.as_ref().map(ProtoRepr::build), eth: this.eth.as_ref().map(ProtoRepr::build), + snapshot_creator: None, } } } diff --git a/core/lib/protobuf_config/src/genesis.rs b/core/lib/protobuf_config/src/genesis.rs index d84797a0d74..1cad830d2bb 100644 --- a/core/lib/protobuf_config/src/genesis.rs +++ b/core/lib/protobuf_config/src/genesis.rs @@ -53,13 +53,17 @@ impl ProtoRepr for proto::Genesis { .context("recursion_node_level_vk_hash")?, recursion_leaf_level_vk_hash: required(&prover.recursion_leaf_level_vk_hash) .and_then(|x| parse_h256(x)) - .context("recursion_node_level_vk_hash")?, - recursion_circuits_set_vks_hash: required(&prover.recursion_circuits_set_vks_hash) - .and_then(|x| parse_h256(x)) - .context("recursion_node_level_vk_hash")?, + .context("recursion_leaf_level_vk_hash")?, + recursion_circuits_set_vks_hash: prover + .recursion_circuits_set_vks_hash + .as_ref() + .map(|x| parse_h256(x)) + .transpose() + .context("recursion_circuits_set_vks_hash")? + .unwrap_or_default(), recursion_scheduler_level_vk_hash: required(&prover.recursion_scheduler_level_vk_hash) .and_then(|x| parse_h256(x)) - .context("recursion_node_level_vk_hash")?, + .context("recursion_scheduler_level_vk_hash")?, fee_account: required(&self.fee_account) .and_then(|x| parse_h160(x)) .context("fee_account")?, @@ -73,37 +77,33 @@ impl ProtoRepr for proto::Genesis { .shared_bridge .as_ref() .map(|shared_bridge| proto::SharedBridge { - bridgehub_proxy_addr: Some(shared_bridge.bridgehub_proxy_addr.as_bytes().into()), + bridgehub_proxy_addr: Some(shared_bridge.bridgehub_proxy_addr.to_string()), state_transition_proxy_addr: Some( - shared_bridge.state_transition_proxy_addr.as_bytes().into(), + shared_bridge.state_transition_proxy_addr.to_string(), ), transparent_proxy_admin_addr: Some( - shared_bridge.transparent_proxy_admin_addr.as_bytes().into(), + shared_bridge.transparent_proxy_admin_addr.to_string(), ), }); Self { - genesis_root: Some(this.genesis_root_hash.as_bytes().into()), + genesis_root: Some(this.genesis_root_hash.to_string()), genesis_rollup_leaf_index: Some(this.rollup_last_leaf_index), - genesis_batch_commitment: Some(this.genesis_root_hash.as_bytes().into()), + genesis_batch_commitment: Some(this.genesis_root_hash.to_string()), genesis_protocol_version: Some(this.protocol_version as u32), - default_aa_hash: Some(this.genesis_root_hash.as_bytes().into()), - bootloader_hash: Some(this.genesis_root_hash.as_bytes().into()), - fee_account: Some(this.fee_account.as_bytes().into()), + default_aa_hash: Some(this.genesis_root_hash.to_string()), + bootloader_hash: Some(this.genesis_root_hash.to_string()), + fee_account: Some(this.fee_account.to_string()), l1_chain_id: Some(this.l1_chain_id.0), l2_chain_id: Some(this.l2_chain_id.as_u64()), prover: Some(proto::Prover { recursion_scheduler_level_vk_hash: Some( - this.recursion_scheduler_level_vk_hash.as_bytes().into(), - ), - recursion_node_level_vk_hash: Some( - this.recursion_node_level_vk_hash.as_bytes().into(), - ), - recursion_leaf_level_vk_hash: Some( - this.recursion_leaf_level_vk_hash.as_bytes().into(), + this.recursion_scheduler_level_vk_hash.to_string(), ), + recursion_node_level_vk_hash: Some(this.recursion_node_level_vk_hash.to_string()), + recursion_leaf_level_vk_hash: Some(this.recursion_leaf_level_vk_hash.to_string()), recursion_circuits_set_vks_hash: Some( - this.recursion_circuits_set_vks_hash.as_bytes().into(), + this.recursion_circuits_set_vks_hash.to_string(), ), dummy_verifier: Some(this.dummy_prover), }), diff --git a/core/lib/protobuf_config/src/lib.rs b/core/lib/protobuf_config/src/lib.rs index d90eb338b22..ffd0b1ff1a2 100644 --- a/core/lib/protobuf_config/src/lib.rs +++ b/core/lib/protobuf_config/src/lib.rs @@ -26,16 +26,17 @@ mod tests; mod utils; mod wallets; -use anyhow::Context as _; +use std::str::FromStr; + use zksync_protobuf::ProtoRepr; use zksync_types::{H160, H256}; -fn parse_h256(bytes: &[u8]) -> anyhow::Result { - Ok(<[u8; 32]>::try_from(bytes).context("invalid size")?.into()) +fn parse_h256(bytes: &str) -> anyhow::Result { + Ok(H256::from_str(&bytes)?) } -fn parse_h160(bytes: &[u8]) -> anyhow::Result { - Ok(<[u8; 20]>::try_from(bytes).context("invalid size")?.into()) +fn parse_h160(bytes: &str) -> anyhow::Result { + Ok(H160::from_str(&bytes)?) } fn read_optional_repr(field: &Option

) -> anyhow::Result> { diff --git a/core/lib/protobuf_config/src/proto/api.proto b/core/lib/protobuf_config/src/proto/api.proto index 4bb455c8fe9..e596e9473f8 100644 --- a/core/lib/protobuf_config/src/proto/api.proto +++ b/core/lib/protobuf_config/src/proto/api.proto @@ -4,10 +4,6 @@ package zksync.config.api; import "zksync/config/utils.proto"; -message PrivateKeys { - repeated bytes keys = 1; // H256 -} - message Web3JsonRpc { optional uint32 http_port = 1; // required; u16 optional string http_url = 2; // required @@ -20,7 +16,7 @@ message Web3JsonRpc { optional uint32 max_nonce_ahead = 9; // required optional double gas_price_scale_factor = 10; // required optional uint64 request_timeout = 11; // seconds - optional PrivateKeys account_pks = 12; // optional + repeated string account_pks = 12; // optional optional double estimate_gas_scale_factor = 13; // required optional uint32 estimate_gas_acceptable_overestimation = 14; // required optional bool l1_to_l2_transactions_compatibility_mode = 15; // required diff --git a/core/lib/protobuf_config/src/proto/contracts.proto b/core/lib/protobuf_config/src/proto/contracts.proto index ca6fa91a0e2..e3a34fe8a5a 100644 --- a/core/lib/protobuf_config/src/proto/contracts.proto +++ b/core/lib/protobuf_config/src/proto/contracts.proto @@ -3,22 +3,22 @@ syntax = "proto3"; package zksync.config.contracts; message L1 { - optional bytes governance_addr = 1; // required; H160 - optional bytes verifier_addr = 6; // required; H160 - optional bytes diamond_proxy_addr = 9; // required; H160 - optional bytes validator_timelock_addr = 10; // required; H160 - optional bytes default_upgrade_addr = 11; // required; H160 - optional bytes multicall3_addr = 12; // required; H160 + optional string governance_addr = 1; // required; H160 + optional string verifier_addr = 6; // required; H160 + optional string diamond_proxy_addr = 9; // required; H160 + optional string validator_timelock_addr = 10; // required; H160 + optional string default_upgrade_addr = 11; // required; H160 + optional string multicall3_addr = 12; // required; H160 } message L2 { - optional bytes testnet_paymaster_addr = 18; // optional; H160 + optional string testnet_paymaster_addr = 18; // optional; H160 } message Bridge { - optional bytes l1_address = 1; - optional bytes l2_address = 2; + optional string l1_address = 1; + optional string l2_address = 2; } message Bridges { diff --git a/core/lib/protobuf_config/src/proto/general.proto b/core/lib/protobuf_config/src/proto/general.proto index 1fcc00e15b2..cab0a770831 100644 --- a/core/lib/protobuf_config/src/proto/general.proto +++ b/core/lib/protobuf_config/src/proto/general.proto @@ -33,5 +33,7 @@ message GeneralConfig { optional config.prover.ProofDataHandler data_handler = 28; optional config.prover.ProverGroup prover_group = 29; optional config.prover.ProverGateway prover_gateway = 30; + optional config.snapshot_creator.SnapshotsCreator snapshot_creator = 31; + } diff --git a/core/lib/protobuf_config/src/proto/genesis.proto b/core/lib/protobuf_config/src/proto/genesis.proto index ca051063439..ad63ab6b9b6 100644 --- a/core/lib/protobuf_config/src/proto/genesis.proto +++ b/core/lib/protobuf_config/src/proto/genesis.proto @@ -3,29 +3,29 @@ syntax = "proto3"; package zksync.config.genesis; message Prover { - optional bytes recursion_scheduler_level_vk_hash = 1; // required; H256 - optional bytes recursion_node_level_vk_hash = 2; // required; H256 - optional bytes recursion_leaf_level_vk_hash = 3; // required; H256 - optional bytes recursion_circuits_set_vks_hash = 4; // required; H256 + optional string recursion_scheduler_level_vk_hash = 1; // required; H256 + optional string recursion_node_level_vk_hash = 2; // required; H256 + optional string recursion_leaf_level_vk_hash = 3; // required; H256 + optional string recursion_circuits_set_vks_hash = 4; // required; H256 optional bool dummy_verifier = 5; } message SharedBridge { - optional bytes bridgehub_proxy_addr = 1; // optional; h160 - optional bytes state_transition_proxy_addr = 2; // optional; h160 - optional bytes transparent_proxy_admin_addr = 3; // optional; h160 + optional string bridgehub_proxy_addr = 1; // optional; h160 + optional string state_transition_proxy_addr = 2; // optional; h160 + optional string transparent_proxy_admin_addr = 3; // optional; h160 } message Genesis { - optional bytes genesis_root = 1; // optional; h256 + optional string genesis_root = 1; // optional; h256 optional uint64 genesis_rollup_leaf_index = 2; // optional; - optional bytes genesis_batch_commitment = 3; // optional; h256 + optional string genesis_batch_commitment = 3; // optional; h256 optional uint32 genesis_protocol_version = 4; // optional; - optional bytes default_aa_hash = 5; // optional; h256 - optional bytes bootloader_hash = 6; // optional; h256 + optional string default_aa_hash = 5; // optional; h256 + optional string bootloader_hash = 6; // optional; h256 optional uint64 l1_chain_id = 7; // optional; optional uint64 l2_chain_id = 8; // optional; - optional bytes fee_account = 9; // h160 + optional string fee_account = 9; // h160 optional Prover prover = 10; optional SharedBridge shared_bridge = 11; } diff --git a/core/lib/protobuf_config/src/proto/prover.proto b/core/lib/protobuf_config/src/proto/prover.proto index 483c36a2b7f..d6cf538b83a 100644 --- a/core/lib/protobuf_config/src/proto/prover.proto +++ b/core/lib/protobuf_config/src/proto/prover.proto @@ -25,8 +25,8 @@ message Prover { optional uint32 prometheus_port = 2; // required; u16 optional uint32 max_attempts = 3; // required optional uint32 generation_timeout_in_secs = 4; // required; s - optional bytes base_layer_circuit_ids_to_be_verified = 5; // required - optional bytes recursive_layer_circuit_ids_to_be_verified = 6; // required + repeated uint32 base_layer_circuit_ids_to_be_verified = 5; // required + repeated uint32 recursive_layer_circuit_ids_to_be_verified = 6; // required optional SetupLoadMode setup_load_mode = 7; // required optional uint32 specialized_group_id = 8; // required; u8 optional uint64 witness_vector_generator_thread_count = 9; // optional diff --git a/core/lib/protobuf_config/src/proto/wallets.proto b/core/lib/protobuf_config/src/proto/wallets.proto index 05e67221a13..55399e4e91d 100644 --- a/core/lib/protobuf_config/src/proto/wallets.proto +++ b/core/lib/protobuf_config/src/proto/wallets.proto @@ -4,8 +4,8 @@ package zksync.config.wallets; message Wallet { - optional bytes private_key = 1; // required - optional bytes address = 2; // required + optional string private_key = 1; // required + optional string address = 2; // required } message Wallets { diff --git a/core/lib/protobuf_config/src/prover.rs b/core/lib/protobuf_config/src/prover.rs index 2596b9183e7..3dd582fb206 100644 --- a/core/lib/protobuf_config/src/prover.rs +++ b/core/lib/protobuf_config/src/prover.rs @@ -304,16 +304,16 @@ impl ProtoRepr for proto::Prover { generation_timeout_in_secs: required(&self.generation_timeout_in_secs) .and_then(|x| Ok((*x).try_into()?)) .context("generation_timeout_in_secs")?, - base_layer_circuit_ids_to_be_verified: required( - &self.base_layer_circuit_ids_to_be_verified, - ) - .context("base_layer_circuit_ids_to_be_verified")? - .clone(), - recursive_layer_circuit_ids_to_be_verified: required( - &self.recursive_layer_circuit_ids_to_be_verified, - ) - .context("recursive_layer_circuit_ids_to_be_verified")? - .clone(), + base_layer_circuit_ids_to_be_verified: self + .base_layer_circuit_ids_to_be_verified + .iter() + .map(|a| *a as u8) + .collect(), + recursive_layer_circuit_ids_to_be_verified: self + .recursive_layer_circuit_ids_to_be_verified + .iter() + .map(|a| *a as u8) + .collect(), setup_load_mode: required(&self.setup_load_mode) .and_then(|x| Ok(proto::SetupLoadMode::try_from(*x)?)) .context("setup_load_mode")? @@ -347,12 +347,16 @@ impl ProtoRepr for proto::Prover { prometheus_port: Some(this.prometheus_port.into()), max_attempts: Some(this.max_attempts), generation_timeout_in_secs: Some(this.generation_timeout_in_secs.into()), - base_layer_circuit_ids_to_be_verified: Some( - this.base_layer_circuit_ids_to_be_verified.clone(), - ), - recursive_layer_circuit_ids_to_be_verified: Some( - this.recursive_layer_circuit_ids_to_be_verified.clone(), - ), + base_layer_circuit_ids_to_be_verified: this + .base_layer_circuit_ids_to_be_verified + .iter() + .map(|a| *a as u32) + .collect(), + recursive_layer_circuit_ids_to_be_verified: this + .recursive_layer_circuit_ids_to_be_verified + .iter() + .map(|a| *a as u32) + .collect(), setup_load_mode: Some(proto::SetupLoadMode::new(&this.setup_load_mode).into()), specialized_group_id: Some(this.specialized_group_id.into()), witness_vector_generator_thread_count: this diff --git a/core/lib/protobuf_config/src/wallets.rs b/core/lib/protobuf_config/src/wallets.rs index 59a59847a23..b75863580a5 100644 --- a/core/lib/protobuf_config/src/wallets.rs +++ b/core/lib/protobuf_config/src/wallets.rs @@ -43,7 +43,10 @@ impl ProtoRepr for proto::Wallets { }; let state_keeper = if let Some(fee_account) = &self.fee_account { - let address = parse_h160(required(&fee_account.address)?)?; + let address = parse_h160( + required(&fee_account.address).context("fee_account.address requireed")?, + ) + .context("fee_account.address")?; if let Some(private_key) = &fee_account.private_key { let calculated_address = PackedEthSignature::address_from_private_key( &parse_h256(private_key).context("Malformed private key")?, @@ -70,16 +73,13 @@ impl ProtoRepr for proto::Wallets { fn build(this: &Self::Type) -> Self { let (operator, blob_operator) = if let Some(eth_sender) = &this.eth_sender { let blob = eth_sender.blob_operator.as_ref().map(|blob| proto::Wallet { - address: Some(blob.address().as_bytes().to_vec()), - private_key: blob.private_key().map(|a| a.as_bytes().to_vec()), + address: Some(blob.address().to_string()), + private_key: blob.private_key().map(|a| a.to_string()), }); ( Some(proto::Wallet { - address: Some(eth_sender.operator.address().as_bytes().to_vec()), - private_key: eth_sender - .operator - .private_key() - .map(|a| a.as_bytes().to_vec()), + address: Some(eth_sender.operator.address().to_string()), + private_key: eth_sender.operator.private_key().map(|a| a.to_string()), }), blob, ) @@ -91,11 +91,11 @@ impl ProtoRepr for proto::Wallets { .state_keeper .as_ref() .map(|state_keeper| proto::Wallet { - address: Some(state_keeper.fee_account.address().as_bytes().to_vec()), + address: Some(state_keeper.fee_account.address().to_string()), private_key: state_keeper .fee_account .private_key() - .map(|a| a.as_bytes().to_vec()), + .map(|a| a.to_string()), }); Self { blob_operator, diff --git a/core/lib/zksync_core/src/consensus/config.rs b/core/lib/zksync_core/src/consensus/config.rs index 1907922833b..300856e3b78 100644 --- a/core/lib/zksync_core/src/consensus/config.rs +++ b/core/lib/zksync_core/src/consensus/config.rs @@ -63,12 +63,17 @@ impl Config { fn executor_config(&self, node_key: node::SecretKey) -> executor::Config { executor::Config { server_addr: self.server_addr, - public_addr: self.public_addr, + public_addr: self.public_addr.into(), max_payload_size: self.max_payload_size, node_key, gossip_dynamic_inbound_limit: self.gossip_dynamic_inbound_limit, gossip_static_inbound: self.gossip_static_inbound.clone().into_iter().collect(), - gossip_static_outbound: self.gossip_static_outbound.clone().into_iter().collect(), + gossip_static_outbound: self + .gossip_static_outbound + .clone() + .into_iter() + .map(|(key, address)| (key, address.into())) + .collect(), } } } diff --git a/core/lib/zksync_core/src/temp_config_store/mod.rs b/core/lib/zksync_core/src/temp_config_store/mod.rs index 2814cbc70ee..14b35dd5c86 100644 --- a/core/lib/zksync_core/src/temp_config_store/mod.rs +++ b/core/lib/zksync_core/src/temp_config_store/mod.rs @@ -28,7 +28,7 @@ pub fn decode_yaml(yaml: &str) -> anyhow::Result { pub fn decode_yaml_repr(yaml: &str) -> anyhow::Result { let d = serde_yaml::Deserializer::from_str(yaml); - let this: T = zksync_protobuf::serde::deserialize_proto(d)?; + let this: T = zksync_protobuf::serde::deserialize_proto_with_options(d, false)?; this.read() } // diff --git a/etc/env/file_based/general.yaml b/etc/env/file_based/general.yaml index 2ff7c186ce0..fa93891fc4a 100644 --- a/etc/env/file_based/general.yaml +++ b/etc/env/file_based/general.yaml @@ -1,292 +1,310 @@ -database: - - server_url: postgres://postgres:notsecurepassword@localhost/zksync_local - - prover_url: postgres://postgres:notsecurepassword@localhost/prover_local - - state_keeper_db_path: ./db/main/state_keeper - - backup_count: 5 - - backup_interval_ms: 60000 - - pool_size: 50 - - statement_timeout_sec: 300 - - merkle_tree_path: ./db/main/tree - - merkle_tree_backup_path: ./db/main/backups - - test: - - server_url: postgres://postgres:notsecurepassword@localhost:5433/zksync_local_test - - prover_url: postgres://postgres:notsecurepassword@localhost:5433/prover_local_test +postgres: + server_url: postgres://postgres:notsecurepassword@localhost/zksync_local + prover_url: postgres://postgres:notsecurepassword@localhost/prover_local + max_connections: 100 + statement_timeout_sec: 300 + test: + server_url: postgres://postgres:notsecurepassword@localhost:5433/zksync_local_test + prover_url: postgres://postgres:notsecurepassword@localhost:5433/prover_local_test +db: + state_keeper_db_path: ./db/main/state_keeper + merkle_tree: + multi_get_chunk_size: 1000 + block_cache_size_mb: 32 + memtable_capacity_mb: 512 + stalled_writes_timeout_sec: 50 + max_l1_batches_per_iter: 50 + path: "./db/main/tree" + mode: FULL + api: - - web3_json_rpc: - - http_port: 3050 - - http_url: http://127.0.0.1:3050 - - ws_port: 3051 - - ws_url: ws://127.0.0.1:3051 - - req_entities_limit: 10000 - - filters_disabled: false - - filters_limit: 10000 - - subscriptions_limit: 10000 - - pubsub_polling_interval: 200 - - threads_per_server: 128 - - max_nonce_ahead: 50 - - gas_price_scale_factor: 1.2 - - l1_to_l2_transactions_compatibility_mode: true - - request_timeout: 10 - - account_pks: - - 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 - - 0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d - - 0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a - - 0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6 - - 0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a - - 0x8b3a350cf5c34c9194ca85829a2df0ec3153be0318b5e2d3348e872092edffba - - 0x92db14e403b83dfe3df233f83dfa3a0d7096f21ca9b0d6d6b8d88b2b4ec1564e - - 0x4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356 - - 0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97 - - 0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6 - - 0xf214f2b2cd398c806f84e317254e0f0b801d0643303237d97a22a48e01628897 - - 0x701b615bbdfb9de65240bc28bd21bbc0d996645a3dd57e7b12bc2bdf6f192c82 - - 0xa267530f49f8280200edf313ee7af6b827f2a8bce2897751d06a843f644967b1 - - 0x47c99abed3324a2707c28affff1267e45918ec8c3f20b8aa892e8b065d2942dd - - 0xc526ee95bf44d8fc405a158bb884d9d1238d99f0612e9f33d006bb0789009aaa - - 0x8166f546bab6da521a8369cab06c5d2b9e46670292d85c875ee9ec20e84ffb61 - - 0xea6c44ac03bff858b476bba40716402b03e41b8e97e276d1baec7c37d42484a0 - - 0x689af8efa8c651a91ad287602527f3af2fe9f6501a7ac4b061667b5a93e037fd - - 0xde9be858da4a475276426320d5e9262ecfc3ba460bfac56360bfa6c4c28b4ee0 - - 0xdf57089febbacf7ba0bc227dafbffa9fc08a93fdc68e1e42411a14efcf23656e - - estimate_gas_scale_factor: 1.2 - - estimate_gas_acceptable_overestimation: 1000 - - max_tx_size: 1000000 - - prometheus: - - listener_port: 3312 - - pushgateway_url: http://127.0.0.1:9091 - - push_interval_ms: 100 - - healthcheck_port: 3071 - - merkle_tree_port: 3072 + prometheus: + listener_port: 3312 + pushgateway_url: http://127.0.0.1:9091 + push_interval_ms: 100 + healthcheck: + port: 3071 + merkle_tree: + port: 3072 + web3_json_rpc: + http_port: 3050 + http_url: http://127.0.0.1:3050 + ws_port: 3051 + ws_url: ws://127.0.0.1:3051 + req_entities_limit: 10000 + filters_disabled: false + filters_limit: 10000 + subscriptions_limit: 10000 + pubsub_polling_interval: 200 + max_nonce_ahead: 50 + gas_price_scale_factor: 1.2 + l1_to_l2_transactions_compatibility_mode: true + request_timeout: 10 + account_pks: + - 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 + - 0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d + - 0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a + - 0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6 + - 0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a + - 0x8b3a350cf5c34c9194ca85829a2df0ec3153be0318b5e2d3348e872092edffba + - 0x92db14e403b83dfe3df233f83dfa3a0d7096f21ca9b0d6d6b8d88b2b4ec1564e + - 0x4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356 + - 0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97 + - 0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6 + - 0xf214f2b2cd398c806f84e317254e0f0b801d0643303237d97a22a48e01628897 + - 0x701b615bbdfb9de65240bc28bd21bbc0d996645a3dd57e7b12bc2bdf6f192c82 + - 0xa267530f49f8280200edf313ee7af6b827f2a8bce2897751d06a843f644967b1 + - 0x47c99abed3324a2707c28affff1267e45918ec8c3f20b8aa892e8b065d2942dd + - 0xc526ee95bf44d8fc405a158bb884d9d1238d99f0612e9f33d006bb0789009aaa + - 0x8166f546bab6da521a8369cab06c5d2b9e46670292d85c875ee9ec20e84ffb61 + - 0xea6c44ac03bff858b476bba40716402b03e41b8e97e276d1baec7c37d42484a0 + - 0x689af8efa8c651a91ad287602527f3af2fe9f6501a7ac4b061667b5a93e037fd + - 0xde9be858da4a475276426320d5e9262ecfc3ba460bfac56360bfa6c4c28b4ee0 + - 0xdf57089febbacf7ba0bc227dafbffa9fc08a93fdc68e1e42411a14efcf23656e + estimate_gas_scale_factor: 1.2 + estimate_gas_acceptable_overestimation: 1000 + max_tx_size: 1000000 state_keeper: - - transaction_slots: 250 - - max_allowed_l2_tx_gas_limit: 4000000000 - - block_commit_deadline_ms: 2500 - - miniblock_commit_deadline_ms: 1000 - - miniblock_seal_queue_capacity: 10 - - max_single_tx_gas: 6000000 - - close_block_at_geometry_percentage: 0.95 - - close_block_at_eth_params_percentage: 0.95 - - close_block_at_gas_percentage: 0.95 - - reject_tx_at_geometry_percentage: 0.95 - - reject_tx_at_eth_params_percentage: 0.95 - - reject_tx_at_gas_percentage: 0.95 - - minimal_l2_gas_price: 100000000 - - compute_overhead_part: 0 - - pubdata_overhead_part: 1 - - batch_overhead_l1_gas: 800000 - - max_gas_per_batch: 200000000 - - max_pubdata_per_batch: 100000 - - fee_model_version: V1 - - validation_computational_gas_limit: 300000 - - save_call_traces: true - - virtual_blocks_interval: 1 - - virtual_blocks_per_miniblock: 1 - - upload_witness_inputs_to_gcs: false - - operations_manager_delay_interval: 100 - - mempool_delay_interval: 100 - - mempool_sync_interval_ms: 10 - - mempool_sync_batch_size: 1000 - - mempool_capacity: 10000000 - - mempool_stuck_tx_timeout: 86400 - - mempool_remove_stuck_txs: true + transaction_slots: 250 + max_allowed_l2_tx_gas_limit: 4000000000 + block_commit_deadline_ms: 2500 + miniblock_commit_deadline_ms: 1000 + miniblock_seal_queue_capacity: 10 + max_single_tx_gas: 6000000 + close_block_at_geometry_percentage: 0.95 + close_block_at_eth_params_percentage: 0.95 + close_block_at_gas_percentage: 0.95 + reject_tx_at_geometry_percentage: 0.95 + reject_tx_at_eth_params_percentage: 0.95 + reject_tx_at_gas_percentage: 0.95 + minimal_l2_gas_price: 100000000 + compute_overhead_part: 0 + pubdata_overhead_part: 1 + batch_overhead_l1_gas: 800000 + max_gas_per_batch: 200000000 + max_pubdata_per_batch: 100000 + fee_model_version: V1 + validation_computational_gas_limit: 300000 + save_call_traces: true + virtual_blocks_interval: 1 + virtual_blocks_per_miniblock: 1 + upload_witness_inputs_to_gcs: false +mempool: + delay_interval: 100 + sync_interval_ms: 10 + sync_batch_size: 1000 + capacity: 10000000 + stuck_tx_timeout: 86400 + remove_stuck_txs: true +operations_manager: + delay_interval: 100 contract_verifier: - - compilation_timeout: 30 - - polling_interval: 1000 - - prometheus_port: 3314 - - port: 3070 - - url: http://127.0.0.1:3070 - - threads_per_server: 128 + compilation_timeout: 30 + polling_interval: 1000 + prometheus_port: 3314 + port: 3070 + url: http://127.0.0.1:3070 + threads_per_server: 128 circuit_breaker: - - sync_interval_ms: 30000 - - http_req_max_retry_number: 5 - - http_req_retry_interval_sec: 2 - - replication_lag_limit_sec: 100 + sync_interval_ms: 30000 + http_req_max_retry_number: 5 + replication_lag_limit_sec: 100 + http_req_retry_interval_sec: 2 eth: - - web3_url: http://127.0.0.1:8545 - - sender_wait_confirmations: 1 - - expected_wait_time_block: 30 - - tx_poll_period: 1 - - aggregate_tx_poll_period: 1 - - max_txs_in_flight: 30 - - proof_sending_mode: SkipEveryProof - - max_aggregated_blocks_to_commit: 1 - - max_aggregated_blocks_to_execute: 10 - - aggregated_block_commit_deadline: 1 - - aggregated_block_prove_deadline: 10 - - aggregated_block_execute_deadline: 10 - - timestamp_criteria_max_allowed_lag: 30 - - max_eth_tx_data_size: 120000 - - aggregated_proof_sizes: "1,4" - - max_aggregated_tx_gas: 4000000 - - max_single_tx_gas: 6000000 - - max_acceptable_priority_fee_in_gwei: 100000000000 - - proof_loading_mode: OldProofFromDb - - pubdata_sending_mode: Blobs - - gas_adjuster: - - default_priority_fee_per_gas: 1000000000 - - max_base_fee_samples: 10000 - - pricing_formula_parameter_a: 1.5 - - pricing_formula_parameter_b: 1.0005 - - internal_l1_pricing_multiplier: 0.8 - - poll_period: 5 - - eth_watch: - - confirmations_for_eth_event: 0 - - eth_node_poll_interval: 300 + web3_url: http://127.0.0.1:8545 + sender: + wait_confirmations: 1 + tx_poll_period: 1 + aggregate_tx_poll_period: 1 + max_txs_in_flight: 30 + proof_sending_mode: SKIP_EVERY_PROOF + max_aggregated_blocks_to_commit: 1 + max_aggregated_blocks_to_execute: 10 + aggregated_block_commit_deadline: 1 + aggregated_block_prove_deadline: 10 + aggregated_block_execute_deadline: 10 + timestamp_criteria_max_allowed_lag: 30 + max_eth_tx_data_size: 120000 + aggregated_proof_sizes: [ 1,4 ] + max_aggregated_tx_gas: 4000000 + max_acceptable_priority_fee_in_gwei: 100000000000 + proof_loading_mode: OLD_PROOF_FROM_DB + pubdata_sending_mode: BLOBS + gas_adjuster: + default_priority_fee_per_gas: 1000000000 + max_base_fee_samples: 10000 + pricing_formula_parameter_a: 1.5 + pricing_formula_parameter_b: 1.0005 + internal_l1_pricing_multiplier: 0.8 + num_samples_for_blob_base_fee_estimate: 10 + internal_pubdata_pricing_multiplier: 1.0 + poll_period: 5 + watcher: + confirmations_for_eth_event: 0 + eth_node_poll_interval: 300 + +snapshot_creator: + object_store: + file_backed: + file_backed_base_path: artifacts + max_retries: 10 + concurrent_queries_count: 1 + storage_logs_chunk_size: 2 -object_store: - prover: - - mode: FileBacked - - path: artifacts - snapshot: - - mode: FileBacked - - path: artifacts prover: - - nfs_setup_key_mount_path: /home/setup_keys/ - - setup_data_path: /usr/src/setup-data - - prometheus_port: 3315 - - max_attempts: 10 - - generation_timeout_in_secs: 600 - - base_layer_circuit_ids_to_be_verified: 1 - - recursive_layer_circuit_ids_to_be_verified: 1 - - setup_load_mode: FromDisk - - specialized_group_id: 100 - - witness_vector_generator_thread_count: 5 - - queue_capacity: 10 - - witness_vector_receiver_port: 3316 - - zone_read_url: http://metadata.google.internal/computeMetadata/v1/instance/zone - - shall_save_to_public_bucket: true - - witness: - - initial_setup_key_path: ./keys/setup/setup_2^22.key - - key_download_url: https://storage.googleapis.com/matterlabs-setup-keys-us/setup-keys/setup_2^22.key - - max_attempts: 1 - - dump_arguments_for_blocks: 2,3 - - data_source: FromPostgres - - stats_reporting_interval_ms: 10000 - - job_moving_interval_ms: 40000 - - generation_timeout_in_secs: 900 - - max_attempts: 10 - - force_process_block: 1 - - shall_save_to_public_bucket: true - - witness_vector_generator: - - prover_instance_wait_timeout_in_secs: 200 - - prover_instance_poll_time_in_milli_secs: 250 - - prometheus_listener_port: 3314 - - prometheus_pushgateway_url: http://127.0.0.1:9091 - - prometheus_push_interval_ms: 100 - - specialized_group_id: 100 - - max_prover_reservation_duration_in_secs: 1000 - - prover_gateway: - - api_url: http://127.0.0.1:3320 - - api_poll_duration_secs: 1000 - - prometheus_listener_port: 3314 - - prometheus_pushgateway_url: http://127.0.0.1:9091 - - prometheus_push_interval_ms: 100 - - proof_compressor: - - compression_mode: 1 - - prometheus_listener_port: 3321 - - prometheus_pushgateway_url: http://127.0.0.1:9091 - - prometheus_push_interval_ms: 100 - - generation_timeout_in_secs: 3600 - - max_attempts: 5 - - universal_setup_path: keys/setup/setup_2^26.key - - universal_setup_download_url: https://storage.googleapis.com/matterlabs-setup-keys-us/setup-keys/setup_2^26.key - - verify_wrapper_proof: true - - data_handler: - - http_port: 3320 - - proof_generation_timeout_in_secs: 18000 - - group: - - GROUP_0_0_CIRCUIT_ID: 1 - - GROUP_0_0_AGGREGATION_ROUND: 3 - - GROUP_0_1_CIRCUIT_ID: 2 - - GROUP_0_1_AGGREGATION_ROUND: 2 - - GROUP_1_0_CIRCUIT_ID: 1 - - GROUP_1_0_AGGREGATION_ROUND: 0 - - GROUP_2_0_CIRCUIT_ID: 2 - - GROUP_2_0_AGGREGATION_ROUND: 0 - - GROUP_2_1_CIRCUIT_ID: 4 - - GROUP_2_1_AGGREGATION_ROUND: 0 - - GROUP_2_2_CIRCUIT_ID: 6 - - GROUP_2_2_AGGREGATION_ROUND: 0 - - GROUP_2_3_CIRCUIT_ID: 9 - - GROUP_2_3_AGGREGATION_ROUND: 0 - - GROUP_3_0_CIRCUIT_ID: 3 - - GROUP_3_0_AGGREGATION_ROUND: 0 - - GROUP_4_0_CIRCUIT_ID: 1 - - GROUP_4_0_AGGREGATION_ROUND: 0 - - GROUP_4_1_CIRCUIT_ID: 1 - - GROUP_4_1_AGGREGATION_ROUND: 0 - - GROUP_4_2_CIRCUIT_ID: 1 - - GROUP_4_2_AGGREGATION_ROUND: 0 - - GROUP_4_3_CIRCUIT_ID: 2 - - GROUP_4_3_AGGREGATION_ROUND: 0 - - GROUP_5_0_CIRCUIT_ID: 5 - - GROUP_5_0_AGGREGATION_ROUND: 0 - - GROUP_6_0_CIRCUIT_ID: 3 - - GROUP_6_0_AGGREGATION_ROUND: 1 - - GROUP_7_0_CIRCUIT_ID: 7 - - GROUP_7_0_AGGREGATION_ROUND: 0 - - GROUP_8_0_CIRCUIT_ID: 8 - - GROUP_8_0_AGGREGATION_ROUND: 0 - - GROUP_9_0_CIRCUIT_ID: 1 - - GROUP_9_0_AGGREGATION_ROUND: 1 - - GROUP_9_1_CIRCUIT_ID: 1 - - GROUP_9_1_AGGREGATION_ROUND: 1 - - GROUP_9_2_CIRCUIT_ID: 1 - - GROUP_9_2_AGGREGATION_ROUND: 1 - - GROUP_9_3_CIRCUIT_ID: 1 - - GROUP_9_3_AGGREGATION_ROUND: 1 - - GROUP_10_0_CIRCUIT_ID: 1 - - GROUP_10_0_AGGREGATION_ROUND: 0 - - GROUP_11_0_CIRCUIT_ID: 7 - - GROUP_11_0_AGGREGATION_ROUND: 1 - - GROUP_11_1_CIRCUIT_ID: 8 - - GROUP_11_1_AGGREGATION_ROUND: 1 - - GROUP_11_2_CIRCUIT_ID: 1 - - GROUP_11_2_AGGREGATION_ROUND: 1 - - GROUP_11_3_CIRCUIT_ID: 1 - - GROUP_11_3_AGGREGATION_ROUND: 1 - - GROUP_12_0_CIRCUIT_ID: 4 - - GROUP_12_0_AGGREGATION_ROUND: 1 - - GROUP_12_1_CIRCUIT_ID: 5 - - GROUP_12_1_AGGREGATION_ROUND: 1 - - GROUP_12_2_CIRCUIT_ID: 6 - - GROUP_12_2_AGGREGATION_ROUND: 1 - - GROUP_12_3_CIRCUIT_ID: 9 - - GROUP_12_3_AGGREGATION_ROUND: 1 + object_store: + file_backed: + file_backed_base_path: artifacts + max_retries: 10 + setup_data_path: /usr/src/setup-data + prometheus_port: 3315 + max_attempts: 10 + generation_timeout_in_secs: 600 + base_layer_circuit_ids_to_be_verified: [ 1 ] + recursive_layer_circuit_ids_to_be_verified: [ 1 ] + setup_load_mode: FROM_DISK + specialized_group_id: 100 + witness_vector_generator_thread_count: 5 + queue_capacity: 10 + witness_vector_receiver_port: 3316 + zone_read_url: http://metadata.google.internal/computeMetadata/v1/instance/zone + shall_save_to_public_bucket: true +witness_generator: + dump_arguments_for_blocks: [ 2,3 ] + generation_timeout_in_secs: 900 + max_attempts: 10 + force_process_block: 1 + shall_save_to_public_bucket: true +witness_vector_generator: + prover_instance_wait_timeout_in_secs: 200 + prover_instance_poll_time_in_milli_secs: 250 + prometheus_listener_port: 3314 + prometheus_pushgateway_url: http://127.0.0.1:9091 + prometheus_push_interval_ms: 100 + specialized_group_id: 100 + max_prover_reservation_duration_in_secs: 1000 +prover_gateway: + api_url: http://127.0.0.1:3320 + api_poll_duration_secs: 1000 + prometheus_listener_port: 3314 + prometheus_pushgateway_url: http://127.0.0.1:9091 + prometheus_push_interval_ms: 100 +proof_compressor: + compression_mode: 1 + prometheus_listener_port: 3321 + prometheus_pushgateway_url: http://127.0.0.1:9091 + prometheus_push_interval_ms: 100 + generation_timeout_in_secs: 3600 + max_attempts: 5 + universal_setup_path: keys/setup/setup_2^26.key + universal_setup_download_url: https://storage.googleapis.com/matterlabs-setup-keys-us/setup-keys/setup_2^26.key + verify_wrapper_proof: true +prover_group: + group_0: + - circuit_id: 1 + aggregation_round: 3 + - circuit_id: 2 + aggregation_round: 2 + group_1: + - circuit_id: 1 + aggregation_round: 0 + group_2: + - circuit_id: 2 + aggregation_round: 0 + - circuit_id: 4 + aggregation_round: 0 + - circuit_id: 6 + aggregation_round: 0 + - circuit_id: 9 + aggregation_round: 0 + group_3: + - circuit_id: 3 + aggregation_round: 0 + group_4: + - circuit_id: 11 + aggregation_round: 0 + - circuit_id: 12 + aggregation_round: 0 + - circuit_id: 13 + aggregation_round: 0 + - circuit_id: 255 + aggregation_round: 0 + group_5: + - circuit_id: 5 + aggregation_round: 0 + group_6: + - circuit_id: 3 + aggregation_round: 1 + group_7: + - circuit_id: 7 + aggregation_round: 0 + group_8: + - circuit_id: 8 + aggregation_round: 0 + group_9: + - circuit_id: 12 + aggregation_round: 1 + - circuit_id: 13 + aggregation_round: 1 + - circuit_id: 14 + aggregation_round: 1 + - circuit_id: 15 + aggregation_round: 1 + group_10: + - circuit_id: 10 + aggregation_round: 0 + group_11: + - circuit_id: 7 + aggregation_round: 1 + - circuit_id: 8 + aggregation_round: 1 + - circuit_id: 10 + aggregation_round: 1 + - circuit_id: 11 + aggregation_round: 1 + group_12: + - circuit_id: 4 + aggregation_round: 1 + - circuit_id: 5 + aggregation_round: 1 + - circuit_id: 6 + aggregation_round: 1 + - circuit_id: 9 + aggregation_round: 1 + house_keeper: - - l1_batch_metrics_reporting_interval_ms: 10000 - - gpu_prover_queue_reporting_interval_ms: 10000 - - prover_job_retrying_interval_ms: 30000 - - witness_generator_job_retrying_interval_ms: 30000 - - prover_db_pool_size: 2 - - prover_stats_reporting_interval_ms: 30000 - - proof_compressor_job_retrying_interval_ms: 30000 - - proof_compressor_stats_reporting_interval_ms: 10000 + l1_batch_metrics_reporting_interval_ms: 10000 + gpu_prover_queue_reporting_interval_ms: 10000 + prover_job_retrying_interval_ms: 30000 + witness_generator_job_retrying_interval_ms: 30000 + witness_generator_stats_reporting_interval_ms: 10000 + witness_job_moving_interval_ms: 40000 + prover_db_pool_size: 2 + prover_stats_reporting_interval_ms: 30000 + proof_compressor_job_retrying_interval_ms: 30000 + proof_compressor_stats_reporting_interval_ms: 10000 -consensus: - - config_path: etc/env/consensus_config.yaml - - secrets_path: etc/env/consensus_secrets.yaml +prometheus: + listener_port: 3312 + pushgateway_url: http://127.0.0.1:9091 + push_interval_ms: 100 -monitoring: - log_format: plain - sentry_url: unset - sentry_panic_interval: 1800 - sentry_error_interval: 10800 - otlp_url: unset - sporadic_crypto_errors_substrs: - - "EventDestroyErr" - - "Can't free memory of DeviceBuf" - - "value: PoisonError" +#monitoring: +# log_format: plain +# sentry_url: unset +# sentry_panic_interval: 1800 +# sentry_error_interval: 10800 +# otlp_url: unset +# sporadic_crypto_errors_substrs: +# - "EventDestroyErr" +# - "Can't free memory of DeviceBuf" +# - "value: PoisonError" # Probably we can initialize it without envs -RUST_LOG: zksync_node_framework=info,zksync_consensus_bft=info,zksync_consensus_network=info,zksync_consensus_storage=info,zksync_core=debug,zksync_server=debug,zksync_contract_verifier=debug,zksync_dal=info,zksync_eth_client=info,zksync_storage=info,zksync_db_manager=info,zksync_merkle_tree=info,zksync_state=debug,zksync_utils=debug,zksync_queued_job_processor=info,zksync_types=info,zksync_mempool=debug,loadnext=info,vm=info,zksync_object_store=info,zksync_external_node=info,zksync_witness_generator=info,zksync_prover_fri=info,zksync_witness_vector_generator=info,zksync_health_check=debug,zksync_proof_fri_compressor=info,vise_exporter=debug,snapshots_creator=debug, -RUST_BACKTRACE: full -RUST_LIB_BACKTRACE: 1 - -# No need for server -CONTRACTS_PRIORITY_TX_MAX_GAS_LIMIT: 72000000 -CONTRACTS_TEST_EASY_PRIORITY_MODE: false +#RUST_LOG: zksync_node_framework=info,zksync_consensus_bft=info,zksync_consensus_network=info,zksync_consensus_storage=info,zksync_core=debug,zksync_server=debug,zksync_contract_verifier=debug,zksync_dal=info,zksync_eth_client=info,zksync_storage=info,zksync_db_manager=info,zksync_merkle_tree=info,zksync_state=debug,zksync_utils=debug,zksync_queued_job_processor=info,zksync_types=info,zksync_mempool=debug,loadnext=info,vm=info,zksync_object_store=info,zksync_external_node=info,zksync_witness_generator=info,zksync_prover_fri=info,zksync_witness_vector_generator=info,zksync_health_check=debug,zksync_proof_fri_compressor=info,vise_exporter=debug,snapshots_creator=debug, +#RUST_BACKTRACE: full +#RUST_LIB_BACKTRACE: 1 diff --git a/etc/env/file_based/genesis.yaml b/etc/env/file_based/genesis.yaml index 61728280b00..366128db9e4 100644 --- a/etc/env/file_based/genesis.yaml +++ b/etc/env/file_based/genesis.yaml @@ -1,19 +1,18 @@ -genesis: - bootloader_hash: 0x010007ede999d096c84553fb514d3d6ca76fbf39789dda76bfeda9f3ae06236e - default_aa_hash: 0x0100055b041eb28aff6e3a6e0f37c31fd053fc9ef142683b05e5f0aee6934066 - root_hash: 0x436cf80dd02a7e1a1df65be6ec9ea231ccec97c44f4c8c9cd2aa26c2feb074cd - batch_commitment: 0x938016208176c5a49d47c8aa582b5d18afc4f159dfa099087770e0796948fd1a - rollup_last_leaf_index: 26 - protocol_version: 21 - l1_chain_id: 9 - l2_chain_id: 270 - prover: - recursion_leaf_level_vk_hash: 0x400a4b532c6f072c00d1806ef299300d4c104f4ac55bd8698ade78894fcadc0a - recursion_node_level_vk_hash: 0x5a3ef282b21e12fe1f4438e5bb158fc5060b160559c5158c6389d62d9fe3d080 - recursion_scheduler_level_vk_hash: 0x1405880dc3317d635bddb0ab62bf5d013e5d1f462161c1f7ac3289c7fef956da - snark_wrapper_vk_hash: 0x063c6fb5c70404c2867f413a8e35563ad3d040b1ad8c11786231bfdba7b472c7 - dummy_verifier: true - shared_bridge: - state_transition_proxy_addr: 0x0000000000000000000000000000000000000000 - bridgehub_proxy_addr: 0x0000000000000000000000000000000000000000 - transparent_proxy_admin_addr: 0x0000000000000000000000000000000000000000 +bootloader_hash: 0x010007ede999d096c84553fb514d3d6ca76fbf39789dda76bfeda9f3ae06236e +default_aa_hash: 0x0100055b041eb28aff6e3a6e0f37c31fd053fc9ef142683b05e5f0aee6934066 +genesis_root: 0x436cf80dd02a7e1a1df65be6ec9ea231ccec97c44f4c8c9cd2aa26c2feb074cd +genesis_batch_commitment: 0x938016208176c5a49d47c8aa582b5d18afc4f159dfa099087770e0796948fd1a +genesis_rollup_leaf_index: 26 +genesis_protocol_version: 21 +l1_chain_id: 9 +l2_chain_id: 270 +fee_account: 0x0000000000000000000000000000000000000001 +prover: + recursion_leaf_level_vk_hash: 0x400a4b532c6f072c00d1806ef299300d4c104f4ac55bd8698ade78894fcadc0a + recursion_node_level_vk_hash: 0x5a3ef282b21e12fe1f4438e5bb158fc5060b160559c5158c6389d62d9fe3d080 + recursion_scheduler_level_vk_hash: 0x063c6fb5c70404c2867f413a8e35563ad3d040b1ad8c11786231bfdba7b472c7 + dummy_verifier: true +shared_bridge: + state_transition_proxy_addr: 0x87d456da9ed212eb49d80d96afb44afddf36adf8 + bridgehub_proxy_addr: 0xdd6fa5c14e7550b4caf2aa2818d24c69cbc347e5 + transparent_proxy_admin_addr: 0xc957c0e82d3bafb5ad46ffbcc66900648784eb05 diff --git a/etc/env/file_based/wallets.yaml b/etc/env/file_based/wallets.yaml index a4823fcfc15..27a9a123693 100644 --- a/etc/env/file_based/wallets.yaml +++ b/etc/env/file_based/wallets.yaml @@ -1,9 +1,9 @@ fee_account: private_key: 0x27593fea79697e947890ecbecce7901b0008345e5d7259710d0dd5e500d040be - addr: 0x27593fea79697e947890ecbecce7901b0008345e5d7259710d0dd5e500d040be + address: 0xde03a0B5963f75f1C8485B355fF6D30f3093BDE7 operator: private_key: 0x27593fea79697e947890ecbecce7901b0008345e5d7259710d0dd5e500d040be - addr: 0xde03a0b5963f75f1c8485b355ff6d30f3093bde7 -operator_blobs: + address: 0xde03a0b5963f75f1c8485b355ff6d30f3093bde7 +blob_operator: private_key: 0xe667e57a9b8aaa6709e51ff7d093f1c5b73b63f9987e4ab4aa9a5c699e024ee8 - addr: 0x4f9133d1d3f50011a6859807c837bdcb31aaab13 \ No newline at end of file + address: 0x4f9133d1d3f50011a6859807c837bdcb31aaab13 \ No newline at end of file From ccd05469bdcf309819c4fa8cb116aaf6e70a779d Mon Sep 17 00:00:00 2001 From: Danil Date: Thu, 28 Mar 2024 19:44:37 +0100 Subject: [PATCH 54/65] Add snapshot creator Signed-off-by: Danil --- core/lib/config/src/configs/general.rs | 3 ++- core/lib/protobuf_config/src/general.rs | 4 +++- core/lib/zksync_core/src/temp_config_store/mod.rs | 1 + 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/core/lib/config/src/configs/general.rs b/core/lib/config/src/configs/general.rs index f50d0eb1bdb..be679c14f50 100644 --- a/core/lib/config/src/configs/general.rs +++ b/core/lib/config/src/configs/general.rs @@ -7,7 +7,7 @@ use crate::{ FriWitnessGeneratorConfig, FriWitnessVectorGeneratorConfig, PrometheusConfig, ProofDataHandlerConfig, }, - ApiConfig, ContractVerifierConfig, DBConfig, ETHConfig, PostgresConfig, + ApiConfig, ContractVerifierConfig, DBConfig, ETHConfig, PostgresConfig, SnapshotsCreatorConfig, }; #[derive(Debug, PartialEq)] @@ -30,4 +30,5 @@ pub struct GeneralConfig { pub proof_data_handler_config: Option, pub db_config: Option, pub eth: Option, + pub snapshot_creator: Option, } diff --git a/core/lib/protobuf_config/src/general.rs b/core/lib/protobuf_config/src/general.rs index 5af524c3502..ab330444141 100644 --- a/core/lib/protobuf_config/src/general.rs +++ b/core/lib/protobuf_config/src/general.rs @@ -34,6 +34,8 @@ impl ProtoRepr for proto::GeneralConfig { api_config: read_optional_repr(&self.api).context("api")?, db_config: read_optional_repr(&self.db).context("db")?, eth: read_optional_repr(&self.eth).context("eth")?, + snapshot_creator: read_optional_repr(&self.snapshot_creator) + .context("snapshot_creator")?, }) } @@ -63,7 +65,7 @@ impl ProtoRepr for proto::GeneralConfig { api: this.api_config.as_ref().map(ProtoRepr::build), db: this.db_config.as_ref().map(ProtoRepr::build), eth: this.eth.as_ref().map(ProtoRepr::build), - snapshot_creator: None, + snapshot_creator: this.snapshot_creator.as_ref().map(ProtoRepr::build), } } } diff --git a/core/lib/zksync_core/src/temp_config_store/mod.rs b/core/lib/zksync_core/src/temp_config_store/mod.rs index 14b35dd5c86..c350d56641e 100644 --- a/core/lib/zksync_core/src/temp_config_store/mod.rs +++ b/core/lib/zksync_core/src/temp_config_store/mod.rs @@ -106,6 +106,7 @@ impl TempConfigStore { proof_data_handler_config: self.proof_data_handler_config.clone(), db_config: self.db_config.clone(), eth: self.eth_sender_config.clone(), + snapshot_creator: None, } } From bc99057615c0bd3bf197990b83664980fb6eca84 Mon Sep 17 00:00:00 2001 From: Danil Date: Fri, 29 Mar 2024 11:12:19 +0100 Subject: [PATCH 55/65] Add observability and snatpshot creator Signed-off-by: Danil --- core/bin/zksync_server/src/main.rs | 4 +- core/lib/config/src/configs/alerts.rs | 8 ---- core/lib/config/src/configs/general.rs | 5 ++- core/lib/config/src/configs/mod.rs | 2 - core/lib/config/src/testonly.rs | 8 ---- core/lib/env_config/src/alerts.rs | 38 ------------------- core/lib/env_config/src/lib.rs | 1 - core/lib/protobuf_config/src/general.rs | 2 + .../protobuf_config/src/proto/general.proto | 1 + .../zksync_core/src/temp_config_store/mod.rs | 8 +++- etc/env/file_based/general.yaml | 20 +++++----- 11 files changed, 25 insertions(+), 72 deletions(-) delete mode 100644 core/lib/config/src/configs/alerts.rs delete mode 100644 core/lib/env_config/src/alerts.rs diff --git a/core/bin/zksync_server/src/main.rs b/core/bin/zksync_server/src/main.rs index da3688e6068..dc3a563d81e 100644 --- a/core/bin/zksync_server/src/main.rs +++ b/core/bin/zksync_server/src/main.rs @@ -16,7 +16,7 @@ use zksync_config::{ PrometheusConfig, ProofDataHandlerConfig, WitnessGeneratorConfig, }, ApiConfig, ContractVerifierConfig, DBConfig, ETHConfig, ETHWatchConfig, GasAdjusterConfig, - GenesisConfig, ObjectStoreConfig, PostgresConfig, + GenesisConfig, ObjectStoreConfig, PostgresConfig, SnapshotsCreatorConfig, }; use zksync_core::{ genesis, genesis_init, initialize_components, is_genesis_needed, setup_sigint_handler, @@ -270,5 +270,7 @@ fn load_env_config() -> anyhow::Result { eth_watch_config: ETHWatchConfig::from_env().ok(), gas_adjuster_config: GasAdjusterConfig::from_env().ok(), object_store_config: ObjectStoreConfig::from_env().ok(), + observability: ObservabilityConfig::from_env().ok(), + snapshot_creator: SnapshotsCreatorConfig::from_env().ok(), }) } diff --git a/core/lib/config/src/configs/alerts.rs b/core/lib/config/src/configs/alerts.rs deleted file mode 100644 index 070ebb970fe..00000000000 --- a/core/lib/config/src/configs/alerts.rs +++ /dev/null @@ -1,8 +0,0 @@ -use serde::Deserialize; - -#[derive(Debug, Deserialize, Clone, PartialEq)] -pub struct AlertsConfig { - /// List of panics' messages from external crypto code, - /// that are sporadic and needed to be handled separately - pub sporadic_crypto_errors_substrs: Vec, -} diff --git a/core/lib/config/src/configs/general.rs b/core/lib/config/src/configs/general.rs index be679c14f50..e3097bdf5f5 100644 --- a/core/lib/config/src/configs/general.rs +++ b/core/lib/config/src/configs/general.rs @@ -4,8 +4,8 @@ use crate::{ fri_prover_group::FriProverGroupConfig, house_keeper::HouseKeeperConfig, FriProofCompressorConfig, FriProverConfig, FriProverGatewayConfig, - FriWitnessGeneratorConfig, FriWitnessVectorGeneratorConfig, PrometheusConfig, - ProofDataHandlerConfig, + FriWitnessGeneratorConfig, FriWitnessVectorGeneratorConfig, ObservabilityConfig, + PrometheusConfig, ProofDataHandlerConfig, }, ApiConfig, ContractVerifierConfig, DBConfig, ETHConfig, PostgresConfig, SnapshotsCreatorConfig, }; @@ -31,4 +31,5 @@ pub struct GeneralConfig { pub db_config: Option, pub eth: Option, pub snapshot_creator: Option, + pub observability: Option, } diff --git a/core/lib/config/src/configs/mod.rs b/core/lib/config/src/configs/mod.rs index 5de0be5aba0..492592fe2bd 100644 --- a/core/lib/config/src/configs/mod.rs +++ b/core/lib/config/src/configs/mod.rs @@ -1,6 +1,5 @@ // Public re-exports pub use self::{ - alerts::AlertsConfig, api::ApiConfig, contract_verifier::ContractVerifierConfig, contracts::ContractsConfig, @@ -22,7 +21,6 @@ pub use self::{ witness_generator::WitnessGeneratorConfig, }; -pub mod alerts; pub mod api; pub mod chain; pub mod contract_verifier; diff --git a/core/lib/config/src/testonly.rs b/core/lib/config/src/testonly.rs index 6085e3529c0..efb1782f6d2 100644 --- a/core/lib/config/src/testonly.rs +++ b/core/lib/config/src/testonly.rs @@ -160,14 +160,6 @@ impl RandomConfig for configs::chain::FeeModelVersion { } } -impl RandomConfig for configs::AlertsConfig { - fn sample(g: &mut Gen) -> Self { - Self { - sporadic_crypto_errors_substrs: g.gen(), - } - } -} - impl RandomConfig for configs::ApiConfig { fn sample(g: &mut Gen) -> Self { Self { diff --git a/core/lib/env_config/src/alerts.rs b/core/lib/env_config/src/alerts.rs deleted file mode 100644 index 63cbde48bdf..00000000000 --- a/core/lib/env_config/src/alerts.rs +++ /dev/null @@ -1,38 +0,0 @@ -use zksync_config::configs::AlertsConfig; - -use crate::{envy_load, FromEnv}; - -impl FromEnv for AlertsConfig { - fn from_env() -> anyhow::Result { - envy_load("sporadic_crypto_errors_substrs", "ALERTS_") - } -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::test_utils::EnvMutex; - - static MUTEX: EnvMutex = EnvMutex::new(); - - fn expected_config() -> AlertsConfig { - AlertsConfig { - sporadic_crypto_errors_substrs: vec![ - "EventDestroyErr".to_string(), - "Can't free memory of DeviceBuf".to_string(), - "value: PoisonError".to_string(), - ], - } - } - - #[test] - fn test_from_env() { - let mut lock = MUTEX.lock(); - let config = r#" - ALERTS_SPORADIC_CRYPTO_ERRORS_SUBSTRS="EventDestroyErr,Can't free memory of DeviceBuf,value: PoisonError" - "#; - lock.set_env(config); - - assert_eq!(AlertsConfig::from_env().unwrap(), expected_config()); - } -} diff --git a/core/lib/env_config/src/lib.rs b/core/lib/env_config/src/lib.rs index 91c487f9714..a937cc89a3f 100644 --- a/core/lib/env_config/src/lib.rs +++ b/core/lib/env_config/src/lib.rs @@ -1,7 +1,6 @@ use anyhow::Context as _; use serde::de::DeserializeOwned; -mod alerts; mod api; mod chain; mod contract_verifier; diff --git a/core/lib/protobuf_config/src/general.rs b/core/lib/protobuf_config/src/general.rs index ab330444141..ccd55a71c2e 100644 --- a/core/lib/protobuf_config/src/general.rs +++ b/core/lib/protobuf_config/src/general.rs @@ -36,6 +36,7 @@ impl ProtoRepr for proto::GeneralConfig { eth: read_optional_repr(&self.eth).context("eth")?, snapshot_creator: read_optional_repr(&self.snapshot_creator) .context("snapshot_creator")?, + observability: read_optional_repr(&self.observability).context("observability")?, }) } @@ -66,6 +67,7 @@ impl ProtoRepr for proto::GeneralConfig { db: this.db_config.as_ref().map(ProtoRepr::build), eth: this.eth.as_ref().map(ProtoRepr::build), snapshot_creator: this.snapshot_creator.as_ref().map(ProtoRepr::build), + observability: this.observability.as_ref().map(ProtoRepr::build), } } } diff --git a/core/lib/protobuf_config/src/proto/general.proto b/core/lib/protobuf_config/src/proto/general.proto index cab0a770831..179f3c7ed90 100644 --- a/core/lib/protobuf_config/src/proto/general.proto +++ b/core/lib/protobuf_config/src/proto/general.proto @@ -34,6 +34,7 @@ message GeneralConfig { optional config.prover.ProverGroup prover_group = 29; optional config.prover.ProverGateway prover_gateway = 30; optional config.snapshot_creator.SnapshotsCreator snapshot_creator = 31; + optional config.observability.Observability observability = 32; } diff --git a/core/lib/zksync_core/src/temp_config_store/mod.rs b/core/lib/zksync_core/src/temp_config_store/mod.rs index c350d56641e..edda22ba53b 100644 --- a/core/lib/zksync_core/src/temp_config_store/mod.rs +++ b/core/lib/zksync_core/src/temp_config_store/mod.rs @@ -1,4 +1,5 @@ use anyhow::Context as _; +use zksync_config::configs::ObservabilityConfig; use zksync_config::{ configs::{ api::{HealthCheckConfig, MerkleTreeApiConfig, Web3JsonRpcConfig}, @@ -14,7 +15,7 @@ use zksync_config::{ PrometheusConfig, ProofDataHandlerConfig, WitnessGeneratorConfig, }, ApiConfig, ContractVerifierConfig, DBConfig, ETHConfig, ETHWatchConfig, GasAdjusterConfig, - ObjectStoreConfig, PostgresConfig, + ObjectStoreConfig, PostgresConfig, SnapshotsCreatorConfig, }; use zksync_protobuf::{read_optional, repr::ProtoRepr, ProtoFmt}; @@ -63,6 +64,8 @@ pub struct TempConfigStore { pub eth_watch_config: Option, pub gas_adjuster_config: Option, pub object_store_config: Option, + pub observability: Option, + pub snapshot_creator: Option, } #[derive(Debug)] @@ -106,7 +109,8 @@ impl TempConfigStore { proof_data_handler_config: self.proof_data_handler_config.clone(), db_config: self.db_config.clone(), eth: self.eth_sender_config.clone(), - snapshot_creator: None, + snapshot_creator: self.snapshot_creator.clone(), + observability: self.observability.clone(), } } diff --git a/etc/env/file_based/general.yaml b/etc/env/file_based/general.yaml index fa93891fc4a..80f9faebfd7 100644 --- a/etc/env/file_based/general.yaml +++ b/etc/env/file_based/general.yaml @@ -293,16 +293,16 @@ prometheus: pushgateway_url: http://127.0.0.1:9091 push_interval_ms: 100 -#monitoring: -# log_format: plain -# sentry_url: unset -# sentry_panic_interval: 1800 -# sentry_error_interval: 10800 -# otlp_url: unset -# sporadic_crypto_errors_substrs: -# - "EventDestroyErr" -# - "Can't free memory of DeviceBuf" -# - "value: PoisonError" +observability: + log_format: plain + sentry_url: unset + sentry_panic_interval: 1800 + sentry_error_interval: 10800 + otlp_url: unset + sporadic_crypto_errors_substrs: + - "EventDestroyErr" + - "Can't free memory of DeviceBuf" + - "value: PoisonError" # Probably we can initialize it without envs #RUST_LOG: zksync_node_framework=info,zksync_consensus_bft=info,zksync_consensus_network=info,zksync_consensus_storage=info,zksync_core=debug,zksync_server=debug,zksync_contract_verifier=debug,zksync_dal=info,zksync_eth_client=info,zksync_storage=info,zksync_db_manager=info,zksync_merkle_tree=info,zksync_state=debug,zksync_utils=debug,zksync_queued_job_processor=info,zksync_types=info,zksync_mempool=debug,loadnext=info,vm=info,zksync_object_store=info,zksync_external_node=info,zksync_witness_generator=info,zksync_prover_fri=info,zksync_witness_vector_generator=info,zksync_health_check=debug,zksync_proof_fri_compressor=info,vise_exporter=debug,snapshots_creator=debug, From 5086645a20f4b1bd01085072915e44b74ee33bfc Mon Sep 17 00:00:00 2001 From: Danil Date: Fri, 29 Mar 2024 12:25:47 +0100 Subject: [PATCH 56/65] make eth configs optional Signed-off-by: Danil --- core/bin/block_reverter/src/main.rs | 8 +++- core/bin/zksync_server/src/main.rs | 40 +++++++++---------- core/lib/config/src/configs/eth_sender.rs | 18 ++++----- core/lib/env_config/src/eth_sender.rs | 20 +++++----- .../eth_client/src/clients/http/signing.rs | 5 ++- core/lib/protobuf_config/src/database.rs | 16 ++++---- core/lib/protobuf_config/src/eth.rs | 16 ++++---- core/lib/protobuf_config/src/lib.rs | 4 +- .../lib/zksync_core/src/block_reverter/mod.rs | 6 ++- core/lib/zksync_core/src/consensus/tests.rs | 2 +- .../zksync_core/src/eth_sender/aggregator.rs | 3 +- core/lib/zksync_core/src/eth_sender/tests.rs | 11 ++--- core/lib/zksync_core/src/lib.rs | 33 ++++++++++----- .../zksync_core/src/temp_config_store/mod.rs | 25 ++++++------ .../src/implementations/layers/eth_sender.rs | 7 ++-- 15 files changed, 118 insertions(+), 96 deletions(-) diff --git a/core/bin/block_reverter/src/main.rs b/core/bin/block_reverter/src/main.rs index 0c00de87e7c..75ea089e72f 100644 --- a/core/bin/block_reverter/src/main.rs +++ b/core/bin/block_reverter/src/main.rs @@ -88,8 +88,12 @@ async fn main() -> anyhow::Result<()> { let eth_sender = ETHConfig::from_env().context("ETHSenderConfig::from_env()")?; let db_config = DBConfig::from_env().context("DBConfig::from_env()")?; - let default_priority_fee_per_gas = - U256::from(eth_sender.gas_adjuster.default_priority_fee_per_gas); + let default_priority_fee_per_gas = U256::from( + eth_sender + .gas_adjuster + .context("gas_adjuster")? + .default_priority_fee_per_gas, + ); let contracts = ContractsConfig::from_env().context("ContractsConfig::from_env()")?; let postgres_config = PostgresConfig::from_env().context("PostgresConfig::from_env()")?; let config = BlockReverterEthConfig::new(eth_sender, contracts); diff --git a/core/bin/zksync_server/src/main.rs b/core/bin/zksync_server/src/main.rs index dc3a563d81e..c655657aabb 100644 --- a/core/bin/zksync_server/src/main.rs +++ b/core/bin/zksync_server/src/main.rs @@ -88,8 +88,24 @@ async fn main() -> anyhow::Result<()> { let opt = Cli::parse(); let sigint_receiver = setup_sigint_handler(); - let observability_config = - ObservabilityConfig::from_env().context("ObservabilityConfig::from_env()")?; + // Load env config and use it if file config is not provided + let tmp_config = load_env_config()?; + + let configs = match opt.config_path { + None => tmp_config.general(), + Some(path) => { + let yaml = + std::fs::read_to_string(&path).with_context(|| path.display().to_string())?; + decode_yaml_repr::(&yaml) + .context("failed decoding general YAML config")? + } + }; + + let observability_config = configs + .observability + .clone() + .context("observability config")?; + let log_format: vlog::LogFormat = observability_config .log_format .parse() @@ -111,21 +127,6 @@ async fn main() -> anyhow::Result<()> { tracing::info!("No sentry URL was provided"); } - // Load env config and use it if file config is not provided - let tmp_config = load_env_config()?; - - let configs = match opt.config_path { - None => tmp_config.general(), - Some(path) => { - let yaml = - std::fs::read_to_string(&path).with_context(|| path.display().to_string())?; - decode_yaml_repr::(&yaml) - .context("failed decoding general YAML config")? - } - }; - - dbg!(&configs); - let wallets = match opt.wallets_path { None => tmp_config.wallets(), Some(path) => { @@ -181,13 +182,12 @@ async fn main() -> anyhow::Result<()> { } if opt.set_chain_id { - let eth_client = ETHConfig::from_env().context("EthClientConfig")?; - let contracts = ContractsConfig::from_env().context("ContractsConfig")?; + let eth_client = configs.eth.as_ref().context("eth config")?; if let Some(shared_bridge) = &genesis.shared_bridge { genesis::save_set_chain_id_tx( ð_client.web3_url, - contracts.diamond_proxy_addr, + contracts_config.diamond_proxy_addr, shared_bridge.state_transition_proxy_addr, &postgres_config, ) diff --git a/core/lib/config/src/configs/eth_sender.rs b/core/lib/config/src/configs/eth_sender.rs index 7afe79d501d..203e7b30b58 100644 --- a/core/lib/config/src/configs/eth_sender.rs +++ b/core/lib/config/src/configs/eth_sender.rs @@ -9,10 +9,10 @@ use crate::ETHWatchConfig; #[derive(Debug, Deserialize, Clone, PartialEq)] pub struct ETHConfig { /// Options related to the Ethereum sender directly. - pub sender: SenderConfig, + pub sender: Option, /// Options related to the `GasAdjuster` submodule. - pub gas_adjuster: GasAdjusterConfig, - pub watcher: ETHWatchConfig, + pub gas_adjuster: Option, + pub watcher: Option, pub web3_url: String, } @@ -21,7 +21,7 @@ impl ETHConfig { /// Values inside match the config used for localhost development. pub fn for_tests() -> Self { Self { - sender: SenderConfig { + sender: Some(SenderConfig { aggregated_proof_sizes: vec![1, 4], wait_confirmations: Some(1), tx_poll_period: 1, @@ -40,8 +40,8 @@ impl ETHConfig { max_acceptable_priority_fee_in_gwei: 100000000000, proof_loading_mode: ProofLoadingMode::OldProofFromDb, pubdata_sending_mode: PubdataSendingMode::Calldata, - }, - gas_adjuster: GasAdjusterConfig { + }), + gas_adjuster: Some(GasAdjusterConfig { default_priority_fee_per_gas: 1000000000, max_base_fee_samples: 10000, pricing_formula_parameter_a: 1.5, @@ -53,11 +53,11 @@ impl ETHConfig { num_samples_for_blob_base_fee_estimate: 10, internal_pubdata_pricing_multiplier: 1.0, max_blob_base_fee: None, - }, - watcher: ETHWatchConfig { + }), + watcher: Some(ETHWatchConfig { confirmations_for_eth_event: None, eth_node_poll_interval: 0, - }, + }), web3_url: "localhost:8545".to_string(), } } diff --git a/core/lib/env_config/src/eth_sender.rs b/core/lib/env_config/src/eth_sender.rs index 0cab3289282..5c825f12c90 100644 --- a/core/lib/env_config/src/eth_sender.rs +++ b/core/lib/env_config/src/eth_sender.rs @@ -8,9 +8,9 @@ use crate::{envy_load, FromEnv}; impl FromEnv for ETHConfig { fn from_env() -> anyhow::Result { Ok(Self { - sender: SenderConfig::from_env().context("SenderConfig")?, - gas_adjuster: GasAdjusterConfig::from_env().context("GasAdjusterConfig")?, - watcher: ETHWatchConfig::from_env().context("ETHWatchConfig")?, + sender: SenderConfig::from_env().ok(), + gas_adjuster: GasAdjusterConfig::from_env().ok(), + watcher: ETHWatchConfig::from_env().ok(), web3_url: std::env::var("ETH_CLIENT_WEB3_URL").context("ETH_CLIENT_WEB3_URL")?, }) } @@ -41,7 +41,7 @@ mod tests { fn expected_config() -> ETHConfig { ETHConfig { - sender: SenderConfig { + sender: Some(SenderConfig { aggregated_proof_sizes: vec![1, 5], aggregated_block_commit_deadline: 30, aggregated_block_prove_deadline: 3_000, @@ -61,8 +61,8 @@ mod tests { max_acceptable_priority_fee_in_gwei: 100_000_000_000, proof_loading_mode: ProofLoadingMode::OldProofFromDb, pubdata_sending_mode: PubdataSendingMode::Calldata, - }, - gas_adjuster: GasAdjusterConfig { + }), + gas_adjuster: Some(GasAdjusterConfig { default_priority_fee_per_gas: 20000000000, max_base_fee_samples: 10000, pricing_formula_parameter_a: 1.5, @@ -74,11 +74,11 @@ mod tests { num_samples_for_blob_base_fee_estimate: 10, internal_pubdata_pricing_multiplier: 1.0, max_blob_base_fee: None, - }, - watcher: ETHWatchConfig { + }), + watcher: Some(ETHWatchConfig { confirmations_for_eth_event: Some(0), eth_node_poll_interval: 300, - }, + }), web3_url: "http://127.0.0.1:8545".to_string(), } } @@ -127,7 +127,7 @@ mod tests { let actual = ETHConfig::from_env().unwrap(); assert_eq!(actual, expected_config()); assert_eq!( - actual.sender.private_key().unwrap(), + actual.sender.unwrap().private_key().unwrap(), hash("27593fea79697e947890ecbecce7901b0008345e5d7259710d0dd5e500d040be") ); } diff --git a/core/lib/eth_client/src/clients/http/signing.rs b/core/lib/eth_client/src/clients/http/signing.rs index 5d01c3ae0c8..8c36f41a6e0 100644 --- a/core/lib/eth_client/src/clients/http/signing.rs +++ b/core/lib/eth_client/src/clients/http/signing.rs @@ -74,7 +74,10 @@ impl PKSigningClient { operator_private_key: H256, ) -> Self { let diamond_proxy_addr = contracts_config.diamond_proxy_addr; - let default_priority_fee_per_gas = eth_sender.gas_adjuster.default_priority_fee_per_gas; + let default_priority_fee_per_gas = eth_sender + .gas_adjuster + .expect("Gas adjuster") + .default_priority_fee_per_gas; let main_node_url = ð_sender.web3_url; SigningClient::new_raw( diff --git a/core/lib/protobuf_config/src/database.rs b/core/lib/protobuf_config/src/database.rs index bd7a52d67a0..eb5b814522b 100644 --- a/core/lib/protobuf_config/src/database.rs +++ b/core/lib/protobuf_config/src/database.rs @@ -92,15 +92,13 @@ impl ProtoRepr for proto::Postgres { .as_ref() .map(|x| (x.server_url.clone(), x.prover_url.clone())) .unwrap_or_default(); - let replica_url = if let Some(replica_url) = self.server_replica_url.clone() { - Some(replica_url) - } else { - if let Some(server_url) = self.server_url.clone() { - Some(server_url) - } else { - None - } - }; + + let mut replica_url = self.server_replica_url.clone(); + + if replica_url.is_none() { + replica_url = self.server_url.clone(); + } + Ok(Self::Type { master_url: self.server_url.clone(), replica_url, diff --git a/core/lib/protobuf_config/src/eth.rs b/core/lib/protobuf_config/src/eth.rs index 938b8642a3d..f0106de3433 100644 --- a/core/lib/protobuf_config/src/eth.rs +++ b/core/lib/protobuf_config/src/eth.rs @@ -1,8 +1,8 @@ use anyhow::Context as _; use zksync_config::configs::{self}; -use zksync_protobuf::{read_required_repr, required, ProtoRepr}; +use zksync_protobuf::{required, ProtoRepr}; -use crate::proto::eth as proto; +use crate::{proto::eth as proto, read_optional_repr}; impl proto::ProofSendingMode { fn new(x: &configs::eth_sender::ProofSendingMode) -> Self { @@ -64,18 +64,18 @@ impl ProtoRepr for proto::Eth { type Type = configs::eth_sender::ETHConfig; fn read(&self) -> anyhow::Result { Ok(Self::Type { - sender: read_required_repr(&self.sender).context("sender")?, - gas_adjuster: read_required_repr(&self.gas_adjuster).context("gas_adjuster")?, - watcher: read_required_repr(&self.watcher).context("watcher")?, + sender: read_optional_repr(&self.sender).context("sender")?, + gas_adjuster: read_optional_repr(&self.gas_adjuster).context("gas_adjuster")?, + watcher: read_optional_repr(&self.watcher).context("watcher")?, web3_url: required(&self.web3_url).context("web3_url")?.clone(), }) } fn build(this: &Self::Type) -> Self { Self { - sender: Some(ProtoRepr::build(&this.sender)), - gas_adjuster: Some(ProtoRepr::build(&this.gas_adjuster)), - watcher: Some(ProtoRepr::build(&this.watcher)), + sender: this.sender.as_ref().map(ProtoRepr::build), + gas_adjuster: this.gas_adjuster.as_ref().map(ProtoRepr::build), + watcher: this.watcher.as_ref().map(ProtoRepr::build), web3_url: Some(this.web3_url.clone()), } } diff --git a/core/lib/protobuf_config/src/lib.rs b/core/lib/protobuf_config/src/lib.rs index ffd0b1ff1a2..94b9317e961 100644 --- a/core/lib/protobuf_config/src/lib.rs +++ b/core/lib/protobuf_config/src/lib.rs @@ -32,11 +32,11 @@ use zksync_protobuf::ProtoRepr; use zksync_types::{H160, H256}; fn parse_h256(bytes: &str) -> anyhow::Result { - Ok(H256::from_str(&bytes)?) + Ok(H256::from_str(bytes)?) } fn parse_h160(bytes: &str) -> anyhow::Result { - Ok(H160::from_str(&bytes)?) + Ok(H160::from_str(bytes)?) } fn read_optional_repr(field: &Option

) -> anyhow::Result> { diff --git a/core/lib/zksync_core/src/block_reverter/mod.rs b/core/lib/zksync_core/src/block_reverter/mod.rs index ed474c2d428..adf2dd62e34 100644 --- a/core/lib/zksync_core/src/block_reverter/mod.rs +++ b/core/lib/zksync_core/src/block_reverter/mod.rs @@ -58,6 +58,7 @@ impl BlockReverterEthConfig { // `BlockReverter` doesn't support non env configs yet let pk = eth_config .sender + .expect("eth_sender_config") .private_key() .expect("Private key is required for block reversion"); let operator_address = PackedEthSignature::address_from_private_key(&pk) @@ -69,7 +70,10 @@ impl BlockReverterEthConfig { reverter_address: operator_address, diamond_proxy_addr: contract.diamond_proxy_addr, validator_timelock_addr: contract.validator_timelock_addr, - default_priority_fee_per_gas: eth_config.gas_adjuster.default_priority_fee_per_gas, + default_priority_fee_per_gas: eth_config + .gas_adjuster + .expect("gas adjuster") + .default_priority_fee_per_gas, } } } diff --git a/core/lib/zksync_core/src/consensus/tests.rs b/core/lib/zksync_core/src/consensus/tests.rs index 3cc4535c67f..835e08b4721 100644 --- a/core/lib/zksync_core/src/consensus/tests.rs +++ b/core/lib/zksync_core/src/consensus/tests.rs @@ -78,7 +78,7 @@ async fn test_validator_block_store() { fn executor_config(cfg: &network::Config) -> executor::Config { executor::Config { server_addr: *cfg.server_addr, - public_addr: cfg.public_addr, + public_addr: cfg.public_addr.clone(), max_payload_size: usize::MAX, node_key: cfg.gossip.key.clone(), gossip_dynamic_inbound_limit: cfg.gossip.dynamic_inbound_limit, diff --git a/core/lib/zksync_core/src/eth_sender/aggregator.rs b/core/lib/zksync_core/src/eth_sender/aggregator.rs index 8c6bd7cd861..a0b40401070 100644 --- a/core/lib/zksync_core/src/eth_sender/aggregator.rs +++ b/core/lib/zksync_core/src/eth_sender/aggregator.rs @@ -43,8 +43,9 @@ impl Aggregator { config: SenderConfig, blob_store: Arc, operate_4844_mode: bool, - pubdata_da: PubdataDA, ) -> Self { + let pubdata_da = config.pubdata_sending_mode.into(); + Self { commit_criteria: vec![ Box::from(NumberCriterion { diff --git a/core/lib/zksync_core/src/eth_sender/tests.rs b/core/lib/zksync_core/src/eth_sender/tests.rs index 219af3a7753..a125222c141 100644 --- a/core/lib/zksync_core/src/eth_sender/tests.rs +++ b/core/lib/zksync_core/src/eth_sender/tests.rs @@ -85,7 +85,7 @@ impl EthSenderTester { let contracts_config = ContractsConfig::for_tests(); let aggregator_config = SenderConfig { aggregated_proof_sizes: vec![1], - ..eth_sender_config.sender.clone() + ..eth_sender_config.clone().sender.unwrap() }; let gateway = MockEthereum::default() @@ -110,7 +110,7 @@ impl EthSenderTester { max_base_fee_samples: Self::MAX_BASE_FEE_SAMPLES, pricing_formula_parameter_a: 3.0, pricing_formula_parameter_b: 2.0, - ..eth_sender_config.gas_adjuster + ..eth_sender_config.gas_adjuster.unwrap() }, PubdataSendingMode::Calldata, ) @@ -119,18 +119,19 @@ impl EthSenderTester { ); let store_factory = ObjectStoreFactory::mock(); + let eth_sender = eth_sender_config.sender.clone().unwrap(); let aggregator = EthTxAggregator::new( connection_pool.clone(), SenderConfig { proof_sending_mode: ProofSendingMode::SkipEveryProof, - ..eth_sender_config.sender.clone() + pubdata_sending_mode: PubdataSendingMode::Calldata, + ..eth_sender.clone() }, // Aggregator - unused Aggregator::new( aggregator_config.clone(), store_factory.create_store().await, aggregator_operate_4844_mode, - PubdataDA::Calldata, ), gateway.clone(), // zkSync contract address @@ -144,7 +145,7 @@ impl EthSenderTester { let manager = EthTxManager::new( connection_pool.clone(), - eth_sender_config.sender, + eth_sender.clone(), gas_adjuster.clone(), gateway.clone(), None, diff --git a/core/lib/zksync_core/src/lib.rs b/core/lib/zksync_core/src/lib.rs index 58c427b0570..3716c0981a4 100644 --- a/core/lib/zksync_core/src/lib.rs +++ b/core/lib/zksync_core/src/lib.rs @@ -296,12 +296,13 @@ pub async fn initialize_components( }); let query_client = QueryClient::new(ð.web3_url).unwrap(); - let gas_adjuster_config = eth.gas_adjuster; + let gas_adjuster_config = eth.gas_adjuster.context("gas_adjuster")?; + let sender = eth.sender.as_ref().context("sender")?; let mut gas_adjuster = GasAdjusterSingleton::new( eth.web3_url.clone(), gas_adjuster_config, - eth.sender.pubdata_sending_mode, + sender.pubdata_sending_mode, ); let (stop_sender, stop_receiver) = watch::channel(false); @@ -562,7 +563,12 @@ pub async fn initialize_components( .await .context("failed to build eth_watch_pool")?; let governance = (governance_contract(), contracts_config.governance_addr); - let eth_watch_config = configs.eth.clone().context("eth_watch_config")?.watcher; + let eth_watch_config = configs + .eth + .clone() + .context("eth_config")? + .watcher + .context("watcher")?; task_futures.push( start_eth_watch( eth_watch_config, @@ -588,14 +594,17 @@ pub async fn initialize_components( .await .context("failed to build eth_sender_pool")?; - let eth_sender = configs.eth.as_ref().context("eth_sender_config")?; let eth_sender_wallets = wallets.eth_sender.clone().context("eth_sender")?; let operator_private_key = eth_sender_wallets .operator .private_key() .context("Private_key")?; let diamond_proxy_addr = contracts_config.diamond_proxy_addr; - let default_priority_fee_per_gas = eth.gas_adjuster.default_priority_fee_per_gas; + let default_priority_fee_per_gas = eth + .gas_adjuster + .as_ref() + .context("gas_adjuster")? + .default_priority_fee_per_gas; let l1_chain_id = genesis_config.l1_chain_id; let web3_url = ð.web3_url; @@ -609,14 +618,14 @@ pub async fn initialize_components( let operator_blobs_address = eth_sender_wallets.blob_operator.map(|x| x.address()); + let sender_config = eth.sender.clone().context("eth_sender")?; let eth_tx_aggregator_actor = EthTxAggregator::new( eth_sender_pool, - eth_sender.sender.clone(), + sender_config.clone(), Aggregator::new( - eth_sender.sender.clone(), + sender_config.clone(), store_factory.create_store().await, operator_blobs_address.is_some(), - eth_sender.sender.pubdata_sending_mode.into(), ), Arc::new(eth_client), contracts_config.validator_timelock_addr, @@ -648,7 +657,11 @@ pub async fn initialize_components( .private_key() .context("Private_key")?; let diamond_proxy_addr = contracts_config.diamond_proxy_addr; - let default_priority_fee_per_gas = eth.gas_adjuster.default_priority_fee_per_gas; + let default_priority_fee_per_gas = eth + .gas_adjuster + .as_ref() + .context("gas_adjuster")? + .default_priority_fee_per_gas; let l1_chain_id = genesis_config.l1_chain_id; let web3_url = ð.web3_url; @@ -675,7 +688,7 @@ pub async fn initialize_components( let eth_tx_manager_actor = EthTxManager::new( eth_manager_pool, - eth_sender.sender, + eth_sender.sender.clone().context("eth_sender")?, gas_adjuster .get_or_init() .await diff --git a/core/lib/zksync_core/src/temp_config_store/mod.rs b/core/lib/zksync_core/src/temp_config_store/mod.rs index edda22ba53b..2fa2f8925a6 100644 --- a/core/lib/zksync_core/src/temp_config_store/mod.rs +++ b/core/lib/zksync_core/src/temp_config_store/mod.rs @@ -1,5 +1,4 @@ use anyhow::Context as _; -use zksync_config::configs::ObservabilityConfig; use zksync_config::{ configs::{ api::{HealthCheckConfig, MerkleTreeApiConfig, Web3JsonRpcConfig}, @@ -12,7 +11,7 @@ use zksync_config::{ wallets::{EthSender, StateKeeper, Wallet, Wallets}, FriProofCompressorConfig, FriProverConfig, FriProverGatewayConfig, FriWitnessGeneratorConfig, FriWitnessVectorGeneratorConfig, GeneralConfig, - PrometheusConfig, ProofDataHandlerConfig, WitnessGeneratorConfig, + ObservabilityConfig, PrometheusConfig, ProofDataHandlerConfig, WitnessGeneratorConfig, }, ApiConfig, ContractVerifierConfig, DBConfig, ETHConfig, ETHWatchConfig, GasAdjusterConfig, ObjectStoreConfig, PostgresConfig, SnapshotsCreatorConfig, @@ -117,17 +116,17 @@ impl TempConfigStore { #[allow(deprecated)] pub fn wallets(&self) -> Wallets { let eth_sender = self.eth_sender_config.as_ref().and_then(|x| { - let operator = x - .sender - .private_key() - .and_then(|operator| Wallet::from_private_key(operator, None).ok()); - let blob_operator = x - .sender - .private_key_blobs() - .and_then(|operator| Wallet::from_private_key(operator, None).ok()); - operator.map(|operator| EthSender { - operator, - blob_operator, + x.sender.as_ref().and_then(|sender| { + let operator = sender + .private_key() + .and_then(|operator| Wallet::from_private_key(operator, None).ok()); + let blob_operator = sender + .private_key_blobs() + .and_then(|operator| Wallet::from_private_key(operator, None).ok()); + operator.map(|operator| EthSender { + operator, + blob_operator, + }) }) }); let state_keeper = self diff --git a/core/node/node_framework/src/implementations/layers/eth_sender.rs b/core/node/node_framework/src/implementations/layers/eth_sender.rs index 469ce6a302e..4bcdc53825c 100644 --- a/core/node/node_framework/src/implementations/layers/eth_sender.rs +++ b/core/node/node_framework/src/implementations/layers/eth_sender.rs @@ -1,5 +1,6 @@ use std::sync::Arc; +use anyhow::Context; use zksync_circuit_breaker::l1_txs::FailedL1TransactionChecker; use zksync_config::configs::{ chain::NetworkConfig, eth_sender::ETHConfig, wallets, ContractsConfig, @@ -80,15 +81,13 @@ impl WiringLayer for EthSenderLayer { }); let eth_client_blobs_addr = eth_client_blobs.clone().map(|k| k.sender_account()); + let config = self.eth_sender_config.sender.context("sender")?; let aggregator = Aggregator::new( - self.eth_sender_config.sender.clone(), + config.clone(), object_store, eth_client_blobs_addr.is_some(), - self.eth_sender_config.sender.pubdata_sending_mode.into(), ); - let config = self.eth_sender_config.sender; - let eth_tx_aggregator_actor = EthTxAggregator::new( master_pool.clone(), config.clone(), From 18a95178dd2090c7787c0b4ff7ecef69a34ffe79 Mon Sep 17 00:00:00 2001 From: Danil Date: Fri, 29 Mar 2024 14:02:42 +0100 Subject: [PATCH 57/65] Move l1_batch_commit_data_to_genesis Signed-off-by: Danil --- core/lib/config/src/configs/chain.rs | 11 +++---- core/lib/config/src/configs/genesis.rs | 3 ++ core/lib/config/src/testonly.rs | 1 + core/lib/env_config/src/genesis.rs | 3 ++ core/lib/protobuf_config/src/chain.rs | 30 +------------------ core/lib/protobuf_config/src/genesis.rs | 29 ++++++++++++++++++ .../lib/protobuf_config/src/proto/chain.proto | 5 ---- .../protobuf_config/src/proto/genesis.proto | 6 ++++ .../src/api_server/web3/namespaces/en.rs | 2 ++ core/lib/zksync_core/src/lib.rs | 12 ++++---- .../src/implementations/layers/l1_gas.rs | 11 ++++--- 11 files changed, 63 insertions(+), 50 deletions(-) diff --git a/core/lib/config/src/configs/chain.rs b/core/lib/config/src/configs/chain.rs index 5343a95ef44..f828e09cdf4 100644 --- a/core/lib/config/src/configs/chain.rs +++ b/core/lib/config/src/configs/chain.rs @@ -1,6 +1,6 @@ use std::{str::FromStr, time::Duration}; -use serde::Deserialize; +use serde::{Deserialize, Serialize}; use zksync_basic_types::{ network::Network, web3::{ @@ -52,7 +52,7 @@ impl Default for FeeModelVersion { } } -#[derive(Debug, Clone, Copy, Deserialize, PartialEq, Eq, Default)] +#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Default)] pub enum L1BatchCommitDataGeneratorMode { #[default] Rollup, @@ -161,9 +161,9 @@ pub struct StateKeeperConfig { pub bootloader_hash: Option, #[deprecated] pub default_aa_hash: Option, - #[serde(default)] - pub l1_batch_commit_data_generator_mode: L1BatchCommitDataGeneratorMode, + #[deprecated] + pub l1_batch_commit_data_generator_mode: Option, } impl StateKeeperConfig { @@ -203,7 +203,8 @@ impl StateKeeperConfig { bootloader_hash: None, #[allow(deprecated)] default_aa_hash: None, - l1_batch_commit_data_generator_mode: L1BatchCommitDataGeneratorMode::Rollup, + #[allow(deprecated)] + l1_batch_commit_data_generator_mode: None, } } diff --git a/core/lib/config/src/configs/genesis.rs b/core/lib/config/src/configs/genesis.rs index 982b55e3e52..593d65dce66 100644 --- a/core/lib/config/src/configs/genesis.rs +++ b/core/lib/config/src/configs/genesis.rs @@ -1,3 +1,4 @@ +use crate::configs::chain::L1BatchCommitDataGeneratorMode; use serde::{Deserialize, Serialize}; use zksync_basic_types::{Address, L1ChainId, L2ChainId, H256}; @@ -27,6 +28,7 @@ pub struct GenesisConfig { pub fee_account: Address, pub shared_bridge: Option, pub dummy_prover: bool, + pub l1_batch_commit_data_generator_mode: L1BatchCommitDataGeneratorMode, } impl GenesisConfig { @@ -51,6 +53,7 @@ impl GenesisConfig { protocol_version: 22, l2_chain_id: L2ChainId::default(), dummy_prover: false, + l1_batch_commit_data_generator_mode: L1BatchCommitDataGeneratorMode::Rollup, } } } diff --git a/core/lib/config/src/testonly.rs b/core/lib/config/src/testonly.rs index 32efa345f16..00cce57fe2c 100644 --- a/core/lib/config/src/testonly.rs +++ b/core/lib/config/src/testonly.rs @@ -683,6 +683,7 @@ impl Distribution for EncodeDist { recursion_circuits_set_vks_hash: rng.gen(), shared_bridge: self.sample(rng), dummy_prover: rng.gen(), + l1_batch_commit_data_generator_mode: self.sample(rng), } } } diff --git a/core/lib/env_config/src/genesis.rs b/core/lib/env_config/src/genesis.rs index 6e423e91ac6..9174c6f53df 100644 --- a/core/lib/env_config/src/genesis.rs +++ b/core/lib/env_config/src/genesis.rs @@ -92,6 +92,9 @@ impl FromEnv for GenesisConfig { .ok_or(anyhow!("Fee account required for genesis"))?, shared_bridge, dummy_prover: false, + l1_batch_commit_data_generator_mode: state_keeper + .l1_batch_commit_data_generator_mode + .unwrap_or_default(), }) } } diff --git a/core/lib/protobuf_config/src/chain.rs b/core/lib/protobuf_config/src/chain.rs index 013f57d20c2..1ccd8a8e225 100644 --- a/core/lib/protobuf_config/src/chain.rs +++ b/core/lib/protobuf_config/src/chain.rs @@ -22,23 +22,6 @@ impl proto::FeeModelVersion { } } -impl proto::L1BatchCommitDataGeneratorMode { - fn new(n: &configs::chain::L1BatchCommitDataGeneratorMode) -> Self { - use configs::chain::L1BatchCommitDataGeneratorMode as From; - match n { - From::Rollup => Self::Rollup, - From::Validium => Self::Validium, - } - } - - fn parse(&self) -> configs::chain::L1BatchCommitDataGeneratorMode { - use configs::chain::L1BatchCommitDataGeneratorMode as To; - match self { - Self::Rollup => To::Rollup, - Self::Validium => To::Validium, - } - } -} impl ProtoRepr for proto::StateKeeper { type Type = configs::chain::StateKeeperConfig; fn read(&self) -> anyhow::Result { @@ -98,18 +81,13 @@ impl ProtoRepr for proto::StateKeeper { .map(|x| x.try_into()) .transpose() .context("enum_index_migration_chunk_size")?, - l1_batch_commit_data_generator_mode: required( - &self.l1_batch_commit_data_generator_mode, - ) - .and_then(|x| Ok(proto::L1BatchCommitDataGeneratorMode::try_from(*x)?)) - .context("l1_batch_commit_data_generator_mode")? - .parse(), // We need these values only for instantiating configs from envs, so it's not // needed during the initialization from files bootloader_hash: None, default_aa_hash: None, fee_account_addr: None, + l1_batch_commit_data_generator_mode: None, }) } @@ -144,12 +122,6 @@ impl ProtoRepr for proto::StateKeeper { .enum_index_migration_chunk_size .as_ref() .map(|x| (*x).try_into().unwrap()), - l1_batch_commit_data_generator_mode: Some( - proto::L1BatchCommitDataGeneratorMode::new( - &this.l1_batch_commit_data_generator_mode, - ) - .into(), - ), } } } diff --git a/core/lib/protobuf_config/src/genesis.rs b/core/lib/protobuf_config/src/genesis.rs index 1cad830d2bb..02e66d8bcc3 100644 --- a/core/lib/protobuf_config/src/genesis.rs +++ b/core/lib/protobuf_config/src/genesis.rs @@ -5,6 +5,23 @@ use zksync_protobuf::{repr::ProtoRepr, required}; use crate::{parse_h160, parse_h256, proto::genesis as proto}; +impl proto::L1BatchCommitDataGeneratorMode { + fn new(n: &configs::chain::L1BatchCommitDataGeneratorMode) -> Self { + use configs::chain::L1BatchCommitDataGeneratorMode as From; + match n { + From::Rollup => Self::Rollup, + From::Validium => Self::Validium, + } + } + + fn parse(&self) -> configs::chain::L1BatchCommitDataGeneratorMode { + use configs::chain::L1BatchCommitDataGeneratorMode as To; + match self { + Self::Rollup => To::Rollup, + Self::Validium => To::Validium, + } + } +} impl ProtoRepr for proto::Genesis { type Type = configs::GenesisConfig; fn read(&self) -> anyhow::Result { @@ -69,6 +86,12 @@ impl ProtoRepr for proto::Genesis { .context("fee_account")?, shared_bridge, dummy_prover: *required(&prover.dummy_verifier).context("dummy_prover")?, + l1_batch_commit_data_generator_mode: required( + &self.l1_batch_commit_data_generator_mode, + ) + .and_then(|x| Ok(proto::L1BatchCommitDataGeneratorMode::try_from(*x)?)) + .context("l1_batch_commit_data_generator_mode")? + .parse(), }) } @@ -108,6 +131,12 @@ impl ProtoRepr for proto::Genesis { dummy_verifier: Some(this.dummy_prover), }), shared_bridge, + l1_batch_commit_data_generator_mode: Some( + proto::L1BatchCommitDataGeneratorMode::new( + &this.l1_batch_commit_data_generator_mode, + ) + .into(), + ), } } } diff --git a/core/lib/protobuf_config/src/proto/chain.proto b/core/lib/protobuf_config/src/proto/chain.proto index e629b99d6fa..c22032f72c8 100644 --- a/core/lib/protobuf_config/src/proto/chain.proto +++ b/core/lib/protobuf_config/src/proto/chain.proto @@ -8,10 +8,6 @@ enum FeeModelVersion { V2 = 1; } -enum L1BatchCommitDataGeneratorMode { - Rollup = 0; - Validium = 1; -} message StateKeeper { optional uint64 transaction_slots = 1; // required @@ -38,7 +34,6 @@ message StateKeeper { optional uint32 virtual_blocks_interval = 23; // required optional uint32 virtual_blocks_per_miniblock = 24; // required optional uint64 enum_index_migration_chunk_size = 26; // optional - optional L1BatchCommitDataGeneratorMode l1_batch_commit_data_generator_mode = 29; // optional, default to rollup } message OperationsManager { diff --git a/core/lib/protobuf_config/src/proto/genesis.proto b/core/lib/protobuf_config/src/proto/genesis.proto index ad63ab6b9b6..4f823849f4b 100644 --- a/core/lib/protobuf_config/src/proto/genesis.proto +++ b/core/lib/protobuf_config/src/proto/genesis.proto @@ -2,6 +2,11 @@ syntax = "proto3"; package zksync.config.genesis; +enum L1BatchCommitDataGeneratorMode { + Rollup = 0; + Validium = 1; +} + message Prover { optional string recursion_scheduler_level_vk_hash = 1; // required; H256 optional string recursion_node_level_vk_hash = 2; // required; H256 @@ -28,4 +33,5 @@ message Genesis { optional string fee_account = 9; // h160 optional Prover prover = 10; optional SharedBridge shared_bridge = 11; + optional L1BatchCommitDataGeneratorMode l1_batch_commit_data_generator_mode = 29; // optional, default to rollup } diff --git a/core/lib/zksync_core/src/api_server/web3/namespaces/en.rs b/core/lib/zksync_core/src/api_server/web3/namespaces/en.rs index 563ab6943c0..5a286e1fc95 100644 --- a/core/lib/zksync_core/src/api_server/web3/namespaces/en.rs +++ b/core/lib/zksync_core/src/api_server/web3/namespaces/en.rs @@ -147,6 +147,8 @@ impl EnNamespace { fee_account, shared_bridge, dummy_prover: false, + // TODO set correct value + l1_batch_commit_data_generator_mode: Default::default(), }; Ok(config) } diff --git a/core/lib/zksync_core/src/lib.rs b/core/lib/zksync_core/src/lib.rs index 907ab97e0c5..33caf25f150 100644 --- a/core/lib/zksync_core/src/lib.rs +++ b/core/lib/zksync_core/src/lib.rs @@ -310,12 +310,8 @@ pub async fn initialize_components( let query_client = QueryClient::new(ð.web3_url).unwrap(); let gas_adjuster_config = eth.gas_adjuster.context("gas_adjuster")?; let sender = eth.sender.as_ref().context("sender")?; - let state_keeper_config = configs - .state_keeper_config - .as_ref() - .context("state_keeper")?; let pubdata_pricing: Arc = - match state_keeper_config.l1_batch_commit_data_generator_mode { + match genesis_config.l1_batch_commit_data_generator_mode { L1BatchCommitDataGeneratorMode::Rollup => Arc::new(RollupPubdataPricing {}), L1BatchCommitDataGeneratorMode::Validium => Arc::new(ValidiumPubdataPricing {}), }; @@ -637,15 +633,17 @@ pub async fn initialize_components( web3_url, ); + let l1_batch_commit_data_generator_mode = + genesis_config.l1_batch_commit_data_generator_mode; ensure_l1_batch_commit_data_generation_mode( - state_keeper_config.l1_batch_commit_data_generator_mode, + l1_batch_commit_data_generator_mode, contracts_config.diamond_proxy_addr, ð_client, ) .await?; let l1_batch_commit_data_generator: Arc = - match state_keeper_config.l1_batch_commit_data_generator_mode { + match l1_batch_commit_data_generator_mode { L1BatchCommitDataGeneratorMode::Rollup => { Arc::new(RollupModeL1BatchCommitDataGenerator {}) } diff --git a/core/node/node_framework/src/implementations/layers/l1_gas.rs b/core/node/node_framework/src/implementations/layers/l1_gas.rs index 9132fe942de..5d956a306da 100644 --- a/core/node/node_framework/src/implementations/layers/l1_gas.rs +++ b/core/node/node_framework/src/implementations/layers/l1_gas.rs @@ -6,7 +6,7 @@ use zksync_config::{ chain::{L1BatchCommitDataGeneratorMode, StateKeeperConfig}, eth_sender::PubdataSendingMode, }, - GasAdjusterConfig, + GasAdjusterConfig, GenesisConfig, }; use zksync_core::{ fee_model::MainNodeFeeInputProvider, @@ -27,20 +27,23 @@ use crate::{ #[derive(Debug)] pub struct SequencerL1GasLayer { gas_adjuster_config: GasAdjusterConfig, - state_keeper_config: StateKeeperConfig, + genesis_config: GenesisConfig, pubdata_sending_mode: PubdataSendingMode, + state_keeper_config: StateKeeperConfig, } impl SequencerL1GasLayer { pub fn new( gas_adjuster_config: GasAdjusterConfig, + genesis_config: GenesisConfig, state_keeper_config: StateKeeperConfig, pubdata_sending_mode: PubdataSendingMode, ) -> Self { Self { gas_adjuster_config, - state_keeper_config, + genesis_config, pubdata_sending_mode, + state_keeper_config, } } } @@ -53,7 +56,7 @@ impl WiringLayer for SequencerL1GasLayer { async fn wire(self: Box, mut context: ServiceContext<'_>) -> Result<(), WiringError> { let pubdata_pricing: Arc = - match self.state_keeper_config.l1_batch_commit_data_generator_mode { + match self.genesis_config.l1_batch_commit_data_generator_mode { L1BatchCommitDataGeneratorMode::Rollup => Arc::new(RollupPubdataPricing {}), L1BatchCommitDataGeneratorMode::Validium => Arc::new(ValidiumPubdataPricing {}), }; From 7bf97957aa1425bf39613cf148c7ad49d1fa67a9 Mon Sep 17 00:00:00 2001 From: Danil Date: Fri, 29 Mar 2024 14:25:55 +0100 Subject: [PATCH 58/65] Add test for config verification Signed-off-by: Danil --- core/bin/external_node/src/config/mod.rs | 11 ++++- core/lib/config/src/configs/chain.rs | 9 ++-- core/lib/config/src/configs/genesis.rs | 3 +- core/lib/env_config/src/chain.rs | 1 + core/lib/env_config/src/genesis.rs | 4 +- core/lib/protobuf_config/src/chain.rs | 4 +- .../protobuf_config/src/proto/contracts.proto | 1 - core/lib/protobuf_config/src/tests.rs | 29 ++++++++++- .../src/api_server/web3/namespaces/en.rs | 8 +-- .../zksync_core/src/api_server/web3/state.rs | 6 ++- core/lib/zksync_core/src/genesis.rs | 1 + .../node/node_framework/examples/main_node.rs | 10 ++-- etc/env/file_based/contracts.yaml | 14 ++---- etc/env/file_based/general.yaml | 13 +++-- etc/env/file_based/genesis.yaml | 1 + prover/Cargo.lock | 49 +++++++++++++++---- 16 files changed, 117 insertions(+), 47 deletions(-) diff --git a/core/bin/external_node/src/config/mod.rs b/core/bin/external_node/src/config/mod.rs index ddd991aec2d..827d3d94c06 100644 --- a/core/bin/external_node/src/config/mod.rs +++ b/core/bin/external_node/src/config/mod.rs @@ -41,6 +41,8 @@ pub struct RemoteENConfig { pub l2_chain_id: L2ChainId, pub l1_chain_id: L1ChainId, pub max_pubdata_per_batch: u64, + pub l1_batch_commit_data_generator_mode: L1BatchCommitDataGeneratorMode, + pub dummy_prover: bool, } impl RemoteENConfig { @@ -54,7 +56,7 @@ impl RemoteENConfig { .rpc_context("get_testnet_paymaster") .await?; let genesis = client.genesis_config().rpc_context("genesis").await.ok(); - let shared_bridge = genesis.and_then(|a| a.shared_bridge); + let shared_bridge = genesis.as_ref().and_then(|a| a.shared_bridge.clone()); let diamond_proxy_addr = client .get_main_contract() .rpc_context("get_main_contract") @@ -95,6 +97,11 @@ impl RemoteENConfig { l2_chain_id, l1_chain_id, max_pubdata_per_batch, + l1_batch_commit_data_generator_mode: genesis + .as_ref() + .map(|a| a.l1_batch_commit_data_generator_mode) + .unwrap_or_default(), + dummy_prover: genesis.as_ref().map(|a| a.dummy_prover).unwrap_or_default(), }) } } @@ -658,6 +665,8 @@ impl From for InternalApiConfig { filters_disabled: config.optional.filters_disabled, mempool_cache_update_interval: config.optional.mempool_cache_update_interval(), mempool_cache_size: config.optional.mempool_cache_size, + dummy_prover: config.remote.dummy_prover, + l1_batch_commit_data_generator_mode: config.remote.l1_batch_commit_data_generator_mode, } } } diff --git a/core/lib/config/src/configs/chain.rs b/core/lib/config/src/configs/chain.rs index f828e09cdf4..24c3b495247 100644 --- a/core/lib/config/src/configs/chain.rs +++ b/core/lib/config/src/configs/chain.rs @@ -161,9 +161,9 @@ pub struct StateKeeperConfig { pub bootloader_hash: Option, #[deprecated] pub default_aa_hash: Option, - #[serde(default)] #[deprecated] - pub l1_batch_commit_data_generator_mode: Option, + #[serde(default)] + pub l1_batch_commit_data_generator_mode: L1BatchCommitDataGeneratorMode, } impl StateKeeperConfig { @@ -199,12 +199,9 @@ impl StateKeeperConfig { virtual_blocks_interval: 1, virtual_blocks_per_miniblock: 1, enum_index_migration_chunk_size: None, - #[allow(deprecated)] bootloader_hash: None, - #[allow(deprecated)] default_aa_hash: None, - #[allow(deprecated)] - l1_batch_commit_data_generator_mode: None, + l1_batch_commit_data_generator_mode: L1BatchCommitDataGeneratorMode::Rollup, } } diff --git a/core/lib/config/src/configs/genesis.rs b/core/lib/config/src/configs/genesis.rs index 593d65dce66..b376a91c591 100644 --- a/core/lib/config/src/configs/genesis.rs +++ b/core/lib/config/src/configs/genesis.rs @@ -1,7 +1,8 @@ -use crate::configs::chain::L1BatchCommitDataGeneratorMode; use serde::{Deserialize, Serialize}; use zksync_basic_types::{Address, L1ChainId, L2ChainId, H256}; +use crate::configs::chain::L1BatchCommitDataGeneratorMode; + #[derive(Debug, Serialize, Deserialize, Clone)] pub struct SharedBridge { pub bridgehub_proxy_addr: Address, diff --git a/core/lib/env_config/src/chain.rs b/core/lib/env_config/src/chain.rs index 22160f27cbf..b8554541c9c 100644 --- a/core/lib/env_config/src/chain.rs +++ b/core/lib/env_config/src/chain.rs @@ -216,6 +216,7 @@ mod tests { } #[test] + #[allow(deprecated)] fn default_state_keeper_mode() { assert_eq!( StateKeeperConfig::default().l1_batch_commit_data_generator_mode, diff --git a/core/lib/env_config/src/genesis.rs b/core/lib/env_config/src/genesis.rs index 9174c6f53df..bdf97f0f0fc 100644 --- a/core/lib/env_config/src/genesis.rs +++ b/core/lib/env_config/src/genesis.rs @@ -92,9 +92,7 @@ impl FromEnv for GenesisConfig { .ok_or(anyhow!("Fee account required for genesis"))?, shared_bridge, dummy_prover: false, - l1_batch_commit_data_generator_mode: state_keeper - .l1_batch_commit_data_generator_mode - .unwrap_or_default(), + l1_batch_commit_data_generator_mode: state_keeper.l1_batch_commit_data_generator_mode, }) } } diff --git a/core/lib/protobuf_config/src/chain.rs b/core/lib/protobuf_config/src/chain.rs index 1ccd8a8e225..c3a25385921 100644 --- a/core/lib/protobuf_config/src/chain.rs +++ b/core/lib/protobuf_config/src/chain.rs @@ -82,12 +82,12 @@ impl ProtoRepr for proto::StateKeeper { .transpose() .context("enum_index_migration_chunk_size")?, - // We need these values only for instantiating configs from envs, so it's not + // We need these values only for instantiating configs from environmental variables, so it's not // needed during the initialization from files bootloader_hash: None, default_aa_hash: None, fee_account_addr: None, - l1_batch_commit_data_generator_mode: None, + l1_batch_commit_data_generator_mode: Default::default(), }) } diff --git a/core/lib/protobuf_config/src/proto/contracts.proto b/core/lib/protobuf_config/src/proto/contracts.proto index e3a34fe8a5a..75836564836 100644 --- a/core/lib/protobuf_config/src/proto/contracts.proto +++ b/core/lib/protobuf_config/src/proto/contracts.proto @@ -9,7 +9,6 @@ message L1 { optional string validator_timelock_addr = 10; // required; H160 optional string default_upgrade_addr = 11; // required; H160 optional string multicall3_addr = 12; // required; H160 - } message L2 { diff --git a/core/lib/protobuf_config/src/tests.rs b/core/lib/protobuf_config/src/tests.rs index 4e29e7aac60..36151d11d3c 100644 --- a/core/lib/protobuf_config/src/tests.rs +++ b/core/lib/protobuf_config/src/tests.rs @@ -1,4 +1,10 @@ -use zksync_protobuf::testonly::{test_encode_all_formats, ReprConv}; +use std::{path::PathBuf, str::FromStr}; + +use anyhow::Context; +use zksync_protobuf::{ + testonly::{test_encode_all_formats, ReprConv}, + ProtoRepr, +}; use crate::proto; @@ -32,3 +38,24 @@ fn test_encoding() { test_encode_all_formats::>(rng); test_encode_all_formats::>(rng); } + +pub fn decode_yaml_repr( + path: &PathBuf, + deny_unknown_fields: bool, +) -> anyhow::Result { + let yaml = std::fs::read_to_string(path).with_context(|| path.display().to_string())?; + let d = serde_yaml::Deserializer::from_str(&yaml); + let this: T = zksync_protobuf::serde::deserialize_proto_with_options(d, deny_unknown_fields)?; + this.read() +} + +#[test] +fn verify_file_parsing() { + let base_path = PathBuf::from_str("../../../etc/env/file_based/").unwrap(); + decode_yaml_repr::(&base_path.join("general.yaml"), true) + .unwrap(); + decode_yaml_repr::(&base_path.join("wallets.yaml"), true).unwrap(); + decode_yaml_repr::(&base_path.join("genesis.yaml"), true).unwrap(); + decode_yaml_repr::(&base_path.join("contracts.yaml"), true) + .unwrap(); +} diff --git a/core/lib/zksync_core/src/api_server/web3/namespaces/en.rs b/core/lib/zksync_core/src/api_server/web3/namespaces/en.rs index 5a286e1fc95..680e0961f16 100644 --- a/core/lib/zksync_core/src/api_server/web3/namespaces/en.rs +++ b/core/lib/zksync_core/src/api_server/web3/namespaces/en.rs @@ -146,9 +146,11 @@ impl EnNamespace { recursion_scheduler_level_vk_hash: verifier_config.recursion_scheduler_level_vk_hash, fee_account, shared_bridge, - dummy_prover: false, - // TODO set correct value - l1_batch_commit_data_generator_mode: Default::default(), + dummy_prover: self.state.api_config.dummy_prover, + l1_batch_commit_data_generator_mode: self + .state + .api_config + .l1_batch_commit_data_generator_mode, }; Ok(config) } diff --git a/core/lib/zksync_core/src/api_server/web3/state.rs b/core/lib/zksync_core/src/api_server/web3/state.rs index c1a0d8d45d8..ce3cc7df3bb 100644 --- a/core/lib/zksync_core/src/api_server/web3/state.rs +++ b/core/lib/zksync_core/src/api_server/web3/state.rs @@ -12,7 +12,7 @@ use lru::LruCache; use tokio::sync::{watch, Mutex}; use vise::GaugeGuard; use zksync_config::{ - configs::{api::Web3JsonRpcConfig, ContractsConfig}, + configs::{api::Web3JsonRpcConfig, chain::L1BatchCommitDataGeneratorMode, ContractsConfig}, GenesisConfig, }; use zksync_dal::{Connection, ConnectionPool, Core, CoreDal}; @@ -99,6 +99,8 @@ pub struct InternalApiConfig { pub filters_disabled: bool, pub mempool_cache_update_interval: Duration, pub mempool_cache_size: usize, + pub dummy_prover: bool, + pub l1_batch_commit_data_generator_mode: L1BatchCommitDataGeneratorMode, } impl InternalApiConfig { @@ -139,6 +141,8 @@ impl InternalApiConfig { filters_disabled: web3_config.filters_disabled, mempool_cache_update_interval: web3_config.mempool_cache_update_interval(), mempool_cache_size: web3_config.mempool_cache_size(), + dummy_prover: genesis_config.dummy_prover, + l1_batch_commit_data_generator_mode: genesis_config.l1_batch_commit_data_generator_mode, } } } diff --git a/core/lib/zksync_core/src/genesis.rs b/core/lib/zksync_core/src/genesis.rs index 09dd743446b..b444c55300e 100644 --- a/core/lib/zksync_core/src/genesis.rs +++ b/core/lib/zksync_core/src/genesis.rs @@ -170,6 +170,7 @@ pub fn mock_genesis_config() -> GenesisConfig { fee_account: Default::default(), shared_bridge: None, dummy_prover: false, + l1_batch_commit_data_generator_mode: Default::default(), } } diff --git a/core/node/node_framework/examples/main_node.rs b/core/node/node_framework/examples/main_node.rs index 23f5f48c45a..8b79c121e52 100644 --- a/core/node/node_framework/examples/main_node.rs +++ b/core/node/node_framework/examples/main_node.rs @@ -107,11 +107,16 @@ impl MainNodeBuilder { fn add_sequencer_l1_gas_layer(mut self) -> anyhow::Result { let gas_adjuster_config = GasAdjusterConfig::from_env()?; let state_keeper_config = StateKeeperConfig::from_env()?; + let genesis_config = GenesisConfig::from_env()?; let eth_sender_config = ETHConfig::from_env()?; let sequencer_l1_gas_layer = SequencerL1GasLayer::new( gas_adjuster_config, + genesis_config, state_keeper_config, - eth_sender_config.sender.pubdata_sending_mode, + eth_sender_config + .sender + .context("eth_sender")? + .pubdata_sending_mode, ); self.node.add_layer(sequencer_l1_gas_layer); Ok(self) @@ -217,7 +222,6 @@ impl MainNodeBuilder { fn add_http_web3_api_layer(mut self) -> anyhow::Result { let rpc_config = ApiConfig::from_env()?.web3_json_rpc; let contracts_config = ContractsConfig::from_env()?; - let network_config = NetworkConfig::from_env()?; let state_keeper_config = StateKeeperConfig::from_env()?; let with_debug_namespace = state_keeper_config.save_call_traces; let genesis_config = GenesisConfig::from_env()?; @@ -292,7 +296,7 @@ impl MainNodeBuilder { network_config, genesis_config.l1_chain_id, wallets.eth_sender.context("Eth sender wallets")?, - state_keeper_config.l1_batch_commit_data_generator_mode, + genesis_config.l1_batch_commit_data_generator_mode, )); Ok(self) diff --git a/etc/env/file_based/contracts.yaml b/etc/env/file_based/contracts.yaml index 8f1a7e7e43b..5d3c46e3f82 100644 --- a/etc/env/file_based/contracts.yaml +++ b/etc/env/file_based/contracts.yaml @@ -4,19 +4,13 @@ l1: governance_addr: "0x5e6d086f5ec079adff4fb3774cdf3e8d6a34f7e9" verifier_addr: "0xdabb67b676f5b01fcc8997cc8439846d0d8078ca" multicall3_addr: "0xca11bde05977b3631167028862be2a173976ca11" - erc20_bridge_proxy_addr: "0xfc073319977e314f251eae6ae6be76b0b3baeecf" - blob_versioned_hash_retriever_addr: "0x0000000000000000000000000000000000000000" validator_timelock_addr: "0xfc073319977e314f251eae6ae6be76b0b3baeecf" l2: testnet_paymaster_addr: "0xfc073319977e314f251eae6ae6be76b0b3baeecf" bridges: erc20: - - l1_address: "0xfc073319977e314f251eae6ae6be76b0b3baeecf" - - l2_address: "0xfc073319977e314f251eae6ae6be76b0b3baeecf" + l1_address: "0xfc073319977e314f251eae6ae6be76b0b3baeecf" + l2_address: "0xfc073319977e314f251eae6ae6be76b0b3baeecf" weth: - - l1_address: "0xfc073319977e314f251eae6ae6be76b0b3baeecf" - - l2_address: "0xfc073319977e314f251eae6ae6be76b0b3baeecf" -weth: - l1_address: "0x5e6d086f5ec079adff4fb3774cdf3e8d6a34f7e9" - l2_address: "0x5e6d086f5ec079adff4fb3774cdf3e8d6a34f7e9" -validator_timelock_execution_delay: 0 \ No newline at end of file + l1_address: "0xfc073319977e314f251eae6ae6be76b0b3baeecf" + l2_address: "0xfc073319977e314f251eae6ae6be76b0b3baeecf" \ No newline at end of file diff --git a/etc/env/file_based/general.yaml b/etc/env/file_based/general.yaml index 80f9faebfd7..eab34b478ff 100644 --- a/etc/env/file_based/general.yaml +++ b/etc/env/file_based/general.yaml @@ -88,7 +88,6 @@ state_keeper: save_call_traces: true virtual_blocks_interval: 1 virtual_blocks_per_miniblock: 1 - upload_witness_inputs_to_gcs: false mempool: delay_interval: 100 sync_interval_ms: 10 @@ -295,10 +294,14 @@ prometheus: observability: log_format: plain - sentry_url: unset - sentry_panic_interval: 1800 - sentry_error_interval: 10800 - otlp_url: unset + sentry: + url: unset + panic_interval: 1800 + error_interval: 10800 + environment: localhost + opentelemetry: + endpoint: unset + level: debug sporadic_crypto_errors_substrs: - "EventDestroyErr" - "Can't free memory of DeviceBuf" diff --git a/etc/env/file_based/genesis.yaml b/etc/env/file_based/genesis.yaml index 366128db9e4..a49bae26edc 100644 --- a/etc/env/file_based/genesis.yaml +++ b/etc/env/file_based/genesis.yaml @@ -7,6 +7,7 @@ genesis_protocol_version: 21 l1_chain_id: 9 l2_chain_id: 270 fee_account: 0x0000000000000000000000000000000000000001 +l1_batch_commit_data_generator_mode: prover: recursion_leaf_level_vk_hash: 0x400a4b532c6f072c00d1806ef299300d4c104f4ac55bd8698ade78894fcadc0a recursion_node_level_vk_hash: 0x5a3ef282b21e12fe1f4438e5bb158fc5060b160559c5158c6389d62d9fe3d080 diff --git a/prover/Cargo.lock b/prover/Cargo.lock index 8c78c495228..2cb0d0b2d78 100644 --- a/prover/Cargo.lock +++ b/prover/Cargo.lock @@ -2409,6 +2409,12 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + [[package]] name = "hermit-abi" version = "0.1.19" @@ -3777,7 +3783,7 @@ dependencies = [ [[package]] name = "pairing_ce" version = "0.28.5" -source = "git+https://github.com/matter-labs/pairing.git?rev=f55393fd366596eac792d78525d26e9c4d6ed1ca#f55393fd366596eac792d78525d26e9c4d6ed1ca" +source = "git+https://github.com/matter-labs/pairing.git?rev=d24f2c5871089c4cd4f54c0ca266bb9fef6115eb#d24f2c5871089c4cd4f54c0ca266bb9fef6115eb" dependencies = [ "byteorder", "cfg-if 1.0.0", @@ -5158,6 +5164,19 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap 2.2.3", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + [[package]] name = "sha-1" version = "0.9.8" @@ -6448,6 +6467,12 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "unsafe-libyaml" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" + [[package]] name = "untrusted" version = "0.7.1" @@ -7341,7 +7366,7 @@ dependencies = [ [[package]] name = "zksync_concurrency" version = "0.1.0" -source = "git+https://github.com/matter-labs/era-consensus.git?rev=5329a809cfc06d4939fb5ece26c9ad1e1741c50a#5329a809cfc06d4939fb5ece26c9ad1e1741c50a" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=8833a9b7fef89d1ffc5c08d53a3560164bc1c694#8833a9b7fef89d1ffc5c08d53a3560164bc1c694" dependencies = [ "anyhow", "once_cell", @@ -7364,20 +7389,21 @@ dependencies = [ "rand 0.8.5", "serde", "zksync_basic_types", + "zksync_consensus_utils", "zksync_crypto_primitives", ] [[package]] name = "zksync_consensus_crypto" version = "0.1.0" -source = "git+https://github.com/matter-labs/era-consensus.git?rev=5329a809cfc06d4939fb5ece26c9ad1e1741c50a#5329a809cfc06d4939fb5ece26c9ad1e1741c50a" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=8833a9b7fef89d1ffc5c08d53a3560164bc1c694#8833a9b7fef89d1ffc5c08d53a3560164bc1c694" dependencies = [ "anyhow", "blst", "ed25519-dalek", "ff_ce", "hex", - "pairing_ce 0.28.5 (git+https://github.com/matter-labs/pairing.git?rev=f55393fd366596eac792d78525d26e9c4d6ed1ca)", + "pairing_ce 0.28.5 (git+https://github.com/matter-labs/pairing.git?rev=d24f2c5871089c4cd4f54c0ca266bb9fef6115eb)", "rand 0.4.6", "rand 0.8.5", "sha3 0.10.8", @@ -7388,7 +7414,7 @@ dependencies = [ [[package]] name = "zksync_consensus_roles" version = "0.1.0" -source = "git+https://github.com/matter-labs/era-consensus.git?rev=5329a809cfc06d4939fb5ece26c9ad1e1741c50a#5329a809cfc06d4939fb5ece26c9ad1e1741c50a" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=8833a9b7fef89d1ffc5c08d53a3560164bc1c694#8833a9b7fef89d1ffc5c08d53a3560164bc1c694" dependencies = [ "anyhow", "bit-vec", @@ -7408,7 +7434,7 @@ dependencies = [ [[package]] name = "zksync_consensus_storage" version = "0.1.0" -source = "git+https://github.com/matter-labs/era-consensus.git?rev=5329a809cfc06d4939fb5ece26c9ad1e1741c50a#5329a809cfc06d4939fb5ece26c9ad1e1741c50a" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=8833a9b7fef89d1ffc5c08d53a3560164bc1c694#8833a9b7fef89d1ffc5c08d53a3560164bc1c694" dependencies = [ "anyhow", "async-trait", @@ -7426,8 +7452,9 @@ dependencies = [ [[package]] name = "zksync_consensus_utils" version = "0.1.0" -source = "git+https://github.com/matter-labs/era-consensus.git?rev=5329a809cfc06d4939fb5ece26c9ad1e1741c50a#5329a809cfc06d4939fb5ece26c9ad1e1741c50a" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=8833a9b7fef89d1ffc5c08d53a3560164bc1c694#8833a9b7fef89d1ffc5c08d53a3560164bc1c694" dependencies = [ + "rand 0.8.5", "thiserror", "zksync_concurrency", ] @@ -7610,7 +7637,7 @@ dependencies = [ [[package]] name = "zksync_protobuf" version = "0.1.0" -source = "git+https://github.com/matter-labs/era-consensus.git?rev=5329a809cfc06d4939fb5ece26c9ad1e1741c50a#5329a809cfc06d4939fb5ece26c9ad1e1741c50a" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=8833a9b7fef89d1ffc5c08d53a3560164bc1c694#8833a9b7fef89d1ffc5c08d53a3560164bc1c694" dependencies = [ "anyhow", "bit-vec", @@ -7621,17 +7648,19 @@ dependencies = [ "rand 0.8.5", "serde", "serde_json", + "serde_yaml", "zksync_concurrency", + "zksync_consensus_utils", "zksync_protobuf_build", ] [[package]] name = "zksync_protobuf_build" version = "0.1.0" -source = "git+https://github.com/matter-labs/era-consensus.git?rev=5329a809cfc06d4939fb5ece26c9ad1e1741c50a#5329a809cfc06d4939fb5ece26c9ad1e1741c50a" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=8833a9b7fef89d1ffc5c08d53a3560164bc1c694#8833a9b7fef89d1ffc5c08d53a3560164bc1c694" dependencies = [ "anyhow", - "heck 0.4.1", + "heck 0.5.0", "prettyplease", "proc-macro2 1.0.78", "prost-build", From 3755d9e4f21e2269759bac7faa8247678a2e6d3d Mon Sep 17 00:00:00 2001 From: Danil Date: Fri, 29 Mar 2024 16:57:09 +0100 Subject: [PATCH 59/65] Fix review Signed-off-by: Danil --- core/bin/zksync_server/src/main.rs | 8 +++++--- core/lib/config/src/testonly.rs | 2 +- core/lib/env_config/src/genesis.rs | 16 ++++++++-------- core/lib/env_config/src/house_keeper.rs | 4 ++-- core/lib/env_config/src/wallets.rs | 7 +++++-- .../lib/protobuf_config/src/contract_verifier.rs | 10 ++++++++-- .../protobuf_config/src/proto/contracts.proto | 12 ++++++------ core/lib/protobuf_config/src/proto/prover.proto | 8 ++++---- core/lib/zksync_core/src/consensus/config.rs | 7 +------ 9 files changed, 40 insertions(+), 34 deletions(-) diff --git a/core/bin/zksync_server/src/main.rs b/core/bin/zksync_server/src/main.rs index c655657aabb..e209c21646e 100644 --- a/core/bin/zksync_server/src/main.rs +++ b/core/bin/zksync_server/src/main.rs @@ -56,13 +56,13 @@ struct Cli { /// Path to the yaml with secrets. If set, it will be used instead of env vars. #[arg(long)] secrets_path: Option, - /// Path to the yaml with secrets. If set, it will be used instead of env vars. + /// Path to the yaml with contracts. If set, it will be used instead of env vars. #[arg(long)] contracts_config_path: Option, /// Path to the wallets config. If set, it will be used instead of env vars. #[arg(long)] wallets_path: Option, - /// Path to the yaml with secrets. If set, it will be used instead of env vars. + /// Path to the yaml with genesis. If set, it will be used instead of env vars. #[arg(long)] genesis_path: Option, } @@ -256,7 +256,9 @@ fn load_env_config() -> anyhow::Result { state_keeper_config: StateKeeperConfig::from_env().ok(), house_keeper_config: HouseKeeperConfig::from_env().ok(), fri_proof_compressor_config: FriProofCompressorConfig::from_env().ok(), - fri_prover_config: Some(FriProverConfig::from_env().context("fri_prover_config")?), + fri_prover_config: FriProverConfig::from_env() + .context("fri_prover_config") + .ok(), fri_prover_group_config: FriProverGroupConfig::from_env().ok(), fri_prover_gateway_config: FriProverGatewayConfig::from_env().ok(), fri_witness_vector_generator: FriWitnessVectorGeneratorConfig::from_env().ok(), diff --git a/core/lib/config/src/testonly.rs b/core/lib/config/src/testonly.rs index 00cce57fe2c..0fec9dfcd3b 100644 --- a/core/lib/config/src/testonly.rs +++ b/core/lib/config/src/testonly.rs @@ -651,7 +651,7 @@ impl Distribution for EncodeDist { sentry_environment: self.sample(rng), log_format: self.sample(rng), opentelemetry: self.sample(rng), - sporadic_crypto_errors_substrs: vec![self.sample(rng)], + sporadic_crypto_errors_substrs: self.sample_collect(rng), } } } diff --git a/core/lib/env_config/src/genesis.rs b/core/lib/env_config/src/genesis.rs index bdf97f0f0fc..52a6f205f17 100644 --- a/core/lib/env_config/src/genesis.rs +++ b/core/lib/env_config/src/genesis.rs @@ -1,4 +1,4 @@ -use anyhow::{anyhow, Context}; +use anyhow::Context; use serde::{Deserialize, Serialize}; use zksync_basic_types::{Address, H256}; use zksync_config::{ @@ -65,22 +65,22 @@ impl FromEnv for GenesisConfig { Ok(GenesisConfig { protocol_version: contracts_config .genesis_protocol_version - .ok_or(anyhow!("Protocol version is required for genesis"))?, + .context("Protocol version is required for genesis")?, genesis_root_hash: contracts_config .genesis_root - .ok_or(anyhow!("genesis_root_hash required for genesis"))?, + .context("genesis_root_hash required for genesis")?, rollup_last_leaf_index: contracts_config .genesis_rollup_leaf_index - .ok_or(anyhow!("rollup_last_leaf_index required for genesis"))?, + .context("rollup_last_leaf_index required for genesis")?, genesis_commitment: contracts_config .genesis_batch_commitment - .ok_or(anyhow!("genesis_commitment required for genesis"))?, + .context("genesis_commitment required for genesis")?, bootloader_hash: state_keeper .bootloader_hash - .ok_or(anyhow!("Bootloader hash required for genesis"))?, + .context("Bootloader hash required for genesis")?, default_aa_hash: state_keeper .default_aa_hash - .ok_or(anyhow!("Default aa hash required for genesis"))?, + .context("Default aa hash required for genesis")?, l1_chain_id: network_config.network.chain_id(), l2_chain_id: network_config.zksync_network_id, recursion_node_level_vk_hash: contracts_config.fri_recursion_node_level_vk_hash, @@ -89,7 +89,7 @@ impl FromEnv for GenesisConfig { recursion_scheduler_level_vk_hash: contracts_config.snark_wrapper_vk_hash, fee_account: state_keeper .fee_account_addr - .ok_or(anyhow!("Fee account required for genesis"))?, + .context("Fee account required for genesis")?, shared_bridge, dummy_prover: false, l1_batch_commit_data_generator_mode: state_keeper.l1_batch_commit_data_generator_mode, diff --git a/core/lib/env_config/src/house_keeper.rs b/core/lib/env_config/src/house_keeper.rs index abef23dce5e..207257c7a9b 100644 --- a/core/lib/env_config/src/house_keeper.rs +++ b/core/lib/env_config/src/house_keeper.rs @@ -26,7 +26,7 @@ mod tests { witness_generator_job_retrying_interval_ms: 30_000, prover_db_pool_size: 2, proof_compressor_job_retrying_interval_ms: 30_000, - proof_compressor_stats_reporting_interval_ms: 30_000, + proof_compressor_stats_reporting_interval_ms: 10_000, } } @@ -45,7 +45,7 @@ mod tests { HOUSE_KEEPER_FRI_WITNESS_GENERATOR_JOB_RETRYING_INTERVAL_MS="30000" HOUSE_KEEPER_PROVER_DB_POOL_SIZE="2" HOUSE_KEEPER_FRI_PROVER_STATS_REPORTING_INTERVAL_MS="30000" - HOUSE_KEEPER_FRI_PROOF_COMPRESSOR_STATS_REPORTING_INTERVAL_MS="30000" + HOUSE_KEEPER_FRI_PROOF_COMPRESSOR_STATS_REPORTING_INTERVAL_MS="10000" HOUSE_KEEPER_FRI_PROOF_COMPRESSOR_JOB_RETRYING_INTERVAL_MS="30000" "#; lock.set_env(config); diff --git a/core/lib/env_config/src/wallets.rs b/core/lib/env_config/src/wallets.rs index 48385c3bfda..2f754895fe3 100644 --- a/core/lib/env_config/src/wallets.rs +++ b/core/lib/env_config/src/wallets.rs @@ -1,5 +1,6 @@ use std::str::FromStr; +use anyhow::Context; use zksync_basic_types::Address; use zksync_config::configs::wallets::{EthSender, StateKeeper, Wallet, Wallets}; @@ -9,11 +10,13 @@ impl FromEnv for Wallets { fn from_env() -> anyhow::Result { let operator = std::env::var("ETH_SENDER_SENDER_OPERATOR_PRIVATE_KEY") .ok() - .map(|pk| pk.parse().unwrap()); + .map(|pk| pk.parse().context("Malformed pk")) + .transpose()?; let blob_operator = std::env::var("ETH_SENDER_SENDER_OPERATOR_BLOBS_PRIVATE_KEY") .ok() - .map(|pk| pk.parse().unwrap()); + .map(|pk| pk.parse().context("Malformed pk")) + .transpose()?; let eth_sender = if let Some(operator) = operator { let operator = Wallet::from_private_key(operator, None)?; diff --git a/core/lib/protobuf_config/src/contract_verifier.rs b/core/lib/protobuf_config/src/contract_verifier.rs index f47872234a8..e0b0517ea0f 100644 --- a/core/lib/protobuf_config/src/contract_verifier.rs +++ b/core/lib/protobuf_config/src/contract_verifier.rs @@ -15,8 +15,14 @@ impl ProtoRepr for proto::ContractVerifier { .and_then(|x| Ok((*x).try_into()?)) .context("prometheus_port")?, url: required(&self.url).cloned().context("url")?, - port: required(&self.port).map(|x| *x as u16).context("port")?, - threads_per_server: self.threads_per_server.map(|a| a as u16), + port: required(&self.port) + .and_then(|x| (*x).try_into().context("overflow")) + .context("port")?, + threads_per_server: self + .threads_per_server + .map(|a| a.try_into()) + .transpose() + .context("threads_per_server")?, }) } diff --git a/core/lib/protobuf_config/src/proto/contracts.proto b/core/lib/protobuf_config/src/proto/contracts.proto index 75836564836..bcdb4dd9ffc 100644 --- a/core/lib/protobuf_config/src/proto/contracts.proto +++ b/core/lib/protobuf_config/src/proto/contracts.proto @@ -4,15 +4,15 @@ package zksync.config.contracts; message L1 { optional string governance_addr = 1; // required; H160 - optional string verifier_addr = 6; // required; H160 - optional string diamond_proxy_addr = 9; // required; H160 - optional string validator_timelock_addr = 10; // required; H160 - optional string default_upgrade_addr = 11; // required; H160 - optional string multicall3_addr = 12; // required; H160 + optional string verifier_addr = 2; // required; H160 + optional string diamond_proxy_addr = 3; // required; H160 + optional string validator_timelock_addr = 4; // required; H160 + optional string default_upgrade_addr = 5; // required; H160 + optional string multicall3_addr = 6; // required; H160 } message L2 { - optional string testnet_paymaster_addr = 18; // optional; H160 + optional string testnet_paymaster_addr = 1; // optional; H160 } message Bridge { diff --git a/core/lib/protobuf_config/src/proto/prover.proto b/core/lib/protobuf_config/src/proto/prover.proto index d6cf538b83a..da1f295a582 100644 --- a/core/lib/protobuf_config/src/proto/prover.proto +++ b/core/lib/protobuf_config/src/proto/prover.proto @@ -70,16 +70,16 @@ message ProverGateway { message WitnessGenerator { optional uint32 generation_timeout_in_secs = 1; // required; - optional uint32 basic_generation_timeout_in_secs = 8; // optional; - optional uint32 leaf_generation_timeout_in_secs = 9; // optional; - optional uint32 node_generation_timeout_in_secs = 10; // optional; - optional uint32 scheduler_generation_timeout_in_secs = 11; // optional; optional uint32 max_attempts = 2; // required optional uint32 blocks_proving_percentage = 3; // optional; 0-100 repeated uint32 dump_arguments_for_blocks = 4; optional uint32 last_l1_batch_to_process = 5; // optional optional uint32 force_process_block = 6; // optional optional bool shall_save_to_public_bucket = 7; // required + optional uint32 basic_generation_timeout_in_secs = 8; // optional; + optional uint32 leaf_generation_timeout_in_secs = 9; // optional; + optional uint32 node_generation_timeout_in_secs = 10; // optional; + optional uint32 scheduler_generation_timeout_in_secs = 11; // optional; } message WitnessVectorGenerator { diff --git a/core/lib/zksync_core/src/consensus/config.rs b/core/lib/zksync_core/src/consensus/config.rs index a78c023fcc6..2a6d8e85f8e 100644 --- a/core/lib/zksync_core/src/consensus/config.rs +++ b/core/lib/zksync_core/src/consensus/config.rs @@ -69,12 +69,7 @@ impl Config { node_key, gossip_dynamic_inbound_limit: self.gossip_dynamic_inbound_limit, gossip_static_inbound: self.gossip_static_inbound.clone().into_iter().collect(), - gossip_static_outbound: self - .gossip_static_outbound - .clone() - .into_iter() - .map(|(key, address)| (key, address)) - .collect(), + gossip_static_outbound: self.gossip_static_outbound.clone().into_iter().collect(), } } } From 8d429252f2dab2053ce68ece2d6dd424bed1d342 Mon Sep 17 00:00:00 2001 From: Danil Date: Mon, 1 Apr 2024 10:07:08 +0200 Subject: [PATCH 60/65] fix tests Signed-off-by: Danil --- core/lib/env_config/src/contracts.rs | 1 + core/lib/env_config/src/house_keeper.rs | 3 +-- core/node/node_framework/examples/main_node.rs | 1 - etc/env/base/house_keeper.toml | 2 +- etc/env/file_based/general.yaml | 2 +- 5 files changed, 4 insertions(+), 5 deletions(-) diff --git a/core/lib/env_config/src/contracts.rs b/core/lib/env_config/src/contracts.rs index 31c3a69f9da..96914a24ca5 100644 --- a/core/lib/env_config/src/contracts.rs +++ b/core/lib/env_config/src/contracts.rs @@ -43,6 +43,7 @@ CONTRACTS_GETTERS_FACET_ADDR="0x8656770FA78c830456B00B4fFCeE6b1De0e1b888" CONTRACTS_VERIFIER_ADDR="0x34782eE00206EAB6478F2692caa800e4A581687b" CONTRACTS_DIAMOND_INIT_ADDR="0xFFC35A5e767BE36057c34586303498e3de7C62Ba" CONTRACTS_DIAMOND_UPGRADE_INIT_ADDR="0xFFC35A5e767BE36057c34586303498e3de7C62Ba" +CONTRACTS_DEFAULT_UPGRADE_ADDR="0x5e6d086f5ec079adff4fb3774cdf3e8d6a34f7e9" CONTRACTS_DIAMOND_PROXY_ADDR="0xF00B988a98Ca742e7958DeF9F7823b5908715f4a" CONTRACTS_VALIDATOR_TIMELOCK_ADDR="0xF00B988a98Ca742e7958DeF9F7823b5908715f4a" CONTRACTS_GENESIS_TX_HASH="0xb99ebfea46cbe05a21cd80fe5597d97b204befc52a16303f579c607dc1ac2e2e" diff --git a/core/lib/env_config/src/house_keeper.rs b/core/lib/env_config/src/house_keeper.rs index 7feb3c4e516..5adccc5f0d4 100644 --- a/core/lib/env_config/src/house_keeper.rs +++ b/core/lib/env_config/src/house_keeper.rs @@ -39,14 +39,13 @@ mod tests { HOUSE_KEEPER_L1_BATCH_METRICS_REPORTING_INTERVAL_MS="10000" HOUSE_KEEPER_GPU_PROVER_QUEUE_REPORTING_INTERVAL_MS="10000" HOUSE_KEEPER_PROVER_JOB_RETRYING_INTERVAL_MS="10000" - HOUSE_KEEPER_PROVER_STATS_REPORTING_INTERVAL_MS="5000" HOUSE_KEEPER_WITNESS_JOB_MOVING_INTERVAL_MS="30000" HOUSE_KEEPER_WITNESS_GENERATOR_STATS_REPORTING_INTERVAL_MS="10000" HOUSE_KEEPER_FRI_WITNESS_JOB_MOVING_INTERVAL_MS="40000" HOUSE_KEEPER_FRI_PROVER_JOB_RETRYING_INTERVAL_MS="30000" HOUSE_KEEPER_FRI_WITNESS_GENERATOR_JOB_RETRYING_INTERVAL_MS="30000" HOUSE_KEEPER_PROVER_DB_POOL_SIZE="2" - HOUSE_KEEPER_PROVER_STATS_REPORTING_INTERVAL_MS="30000" + HOUSE_KEEPER_PROVER_STATS_REPORTING_INTERVAL_MS="5000" HOUSE_KEEPER_PROOF_COMPRESSOR_STATS_REPORTING_INTERVAL_MS="10000" HOUSE_KEEPER_PROOF_COMPRESSOR_JOB_RETRYING_INTERVAL_MS="30000" HOUSE_KEEPER_PROVER_JOB_ARCHIVER_REPORTING_INTERVAL_MS="1800000" diff --git a/core/node/node_framework/examples/main_node.rs b/core/node/node_framework/examples/main_node.rs index 8b79c121e52..abfbcc58704 100644 --- a/core/node/node_framework/examples/main_node.rs +++ b/core/node/node_framework/examples/main_node.rs @@ -283,7 +283,6 @@ impl MainNodeBuilder { Ok(self) } fn add_eth_sender_layer(mut self) -> anyhow::Result { - let state_keeper_config = StateKeeperConfig::from_env()?; let eth_sender_config = ETHConfig::from_env()?; let contracts_config = ContractsConfig::from_env()?; let network_config = NetworkConfig::from_env()?; diff --git a/etc/env/base/house_keeper.toml b/etc/env/base/house_keeper.toml index 2dcb0832624..ff5616c4d3f 100644 --- a/etc/env/base/house_keeper.toml +++ b/etc/env/base/house_keeper.toml @@ -6,7 +6,7 @@ witness_job_moving_interval_ms = 40000 prover_job_retrying_interval_ms = 30000 witness_generator_job_retrying_interval_ms = 30000 prover_db_pool_size = 2 -prover_stats_reporting_interval_ms = 30000 +prover_stats_reporting_interval_ms = 50000 proof_compressor_job_retrying_interval_ms = 30000 proof_compressor_stats_reporting_interval_ms = 10000 prover_job_archiver_reporting_interval_ms = 1800000 diff --git a/etc/env/file_based/general.yaml b/etc/env/file_based/general.yaml index f81323f43ba..67fb6f6afdb 100644 --- a/etc/env/file_based/general.yaml +++ b/etc/env/file_based/general.yaml @@ -283,7 +283,7 @@ house_keeper: witness_generator_stats_reporting_interval_ms: 10000 witness_job_moving_interval_ms: 40000 prover_db_pool_size: 2 - prover_stats_reporting_interval_ms: 30000 + prover_stats_reporting_interval_ms: 5000 proof_compressor_job_retrying_interval_ms: 30000 proof_compressor_stats_reporting_interval_ms: 10000 prover_job_archiver_reporting_interval_ms: 1800000 From 057de9aeb4ba706cbb932e8a0ae137e6aa4a266d Mon Sep 17 00:00:00 2001 From: Danil Date: Mon, 1 Apr 2024 12:12:10 +0200 Subject: [PATCH 61/65] Change prover to verifier Signed-off-by: Danil --- core/bin/external_node/src/config/mod.rs | 9 ++++++--- core/lib/config/src/configs/genesis.rs | 4 ++-- core/lib/config/src/testonly.rs | 2 +- core/lib/env_config/src/genesis.rs | 2 +- core/lib/protobuf_config/src/genesis.rs | 4 ++-- .../lib/zksync_core/src/api_server/web3/namespaces/en.rs | 2 +- core/lib/zksync_core/src/api_server/web3/state.rs | 4 ++-- core/lib/zksync_core/src/genesis.rs | 2 +- etc/env/file_based/general.yaml | 2 +- infrastructure/zk/src/run.ts | 2 +- 10 files changed, 18 insertions(+), 15 deletions(-) diff --git a/core/bin/external_node/src/config/mod.rs b/core/bin/external_node/src/config/mod.rs index 827d3d94c06..e2b8f84c986 100644 --- a/core/bin/external_node/src/config/mod.rs +++ b/core/bin/external_node/src/config/mod.rs @@ -42,7 +42,7 @@ pub struct RemoteENConfig { pub l1_chain_id: L1ChainId, pub max_pubdata_per_batch: u64, pub l1_batch_commit_data_generator_mode: L1BatchCommitDataGeneratorMode, - pub dummy_prover: bool, + pub dummy_verifier: bool, } impl RemoteENConfig { @@ -101,7 +101,10 @@ impl RemoteENConfig { .as_ref() .map(|a| a.l1_batch_commit_data_generator_mode) .unwrap_or_default(), - dummy_prover: genesis.as_ref().map(|a| a.dummy_prover).unwrap_or_default(), + dummy_verifier: genesis + .as_ref() + .map(|a| a.dummy_verifier) + .unwrap_or_default(), }) } } @@ -665,7 +668,7 @@ impl From for InternalApiConfig { filters_disabled: config.optional.filters_disabled, mempool_cache_update_interval: config.optional.mempool_cache_update_interval(), mempool_cache_size: config.optional.mempool_cache_size, - dummy_prover: config.remote.dummy_prover, + dummy_verifier: config.remote.dummy_verifier, l1_batch_commit_data_generator_mode: config.remote.l1_batch_commit_data_generator_mode, } } diff --git a/core/lib/config/src/configs/genesis.rs b/core/lib/config/src/configs/genesis.rs index b376a91c591..0246c0e639c 100644 --- a/core/lib/config/src/configs/genesis.rs +++ b/core/lib/config/src/configs/genesis.rs @@ -28,7 +28,7 @@ pub struct GenesisConfig { pub recursion_scheduler_level_vk_hash: H256, pub fee_account: Address, pub shared_bridge: Option, - pub dummy_prover: bool, + pub dummy_verifier: bool, pub l1_batch_commit_data_generator_mode: L1BatchCommitDataGeneratorMode, } @@ -53,7 +53,7 @@ impl GenesisConfig { l1_chain_id: L1ChainId(9), protocol_version: 22, l2_chain_id: L2ChainId::default(), - dummy_prover: false, + dummy_verifier: false, l1_batch_commit_data_generator_mode: L1BatchCommitDataGeneratorMode::Rollup, } } diff --git a/core/lib/config/src/testonly.rs b/core/lib/config/src/testonly.rs index 85a6b989f2b..332fbc1d59e 100644 --- a/core/lib/config/src/testonly.rs +++ b/core/lib/config/src/testonly.rs @@ -684,7 +684,7 @@ impl Distribution for EncodeDist { recursion_scheduler_level_vk_hash: rng.gen(), recursion_circuits_set_vks_hash: rng.gen(), shared_bridge: self.sample(rng), - dummy_prover: rng.gen(), + dummy_verifier: rng.gen(), l1_batch_commit_data_generator_mode: self.sample(rng), } } diff --git a/core/lib/env_config/src/genesis.rs b/core/lib/env_config/src/genesis.rs index 52a6f205f17..18b771ab980 100644 --- a/core/lib/env_config/src/genesis.rs +++ b/core/lib/env_config/src/genesis.rs @@ -91,7 +91,7 @@ impl FromEnv for GenesisConfig { .fee_account_addr .context("Fee account required for genesis")?, shared_bridge, - dummy_prover: false, + dummy_verifier: false, l1_batch_commit_data_generator_mode: state_keeper.l1_batch_commit_data_generator_mode, }) } diff --git a/core/lib/protobuf_config/src/genesis.rs b/core/lib/protobuf_config/src/genesis.rs index 02e66d8bcc3..74ec2f59d82 100644 --- a/core/lib/protobuf_config/src/genesis.rs +++ b/core/lib/protobuf_config/src/genesis.rs @@ -85,7 +85,7 @@ impl ProtoRepr for proto::Genesis { .and_then(|x| parse_h160(x)) .context("fee_account")?, shared_bridge, - dummy_prover: *required(&prover.dummy_verifier).context("dummy_prover")?, + dummy_verifier: *required(&prover.dummy_verifier).context("dummy_verifier")?, l1_batch_commit_data_generator_mode: required( &self.l1_batch_commit_data_generator_mode, ) @@ -128,7 +128,7 @@ impl ProtoRepr for proto::Genesis { recursion_circuits_set_vks_hash: Some( this.recursion_circuits_set_vks_hash.to_string(), ), - dummy_verifier: Some(this.dummy_prover), + dummy_verifier: Some(this.dummy_verifier), }), shared_bridge, l1_batch_commit_data_generator_mode: Some( diff --git a/core/lib/zksync_core/src/api_server/web3/namespaces/en.rs b/core/lib/zksync_core/src/api_server/web3/namespaces/en.rs index 680e0961f16..6df5125acde 100644 --- a/core/lib/zksync_core/src/api_server/web3/namespaces/en.rs +++ b/core/lib/zksync_core/src/api_server/web3/namespaces/en.rs @@ -146,7 +146,7 @@ impl EnNamespace { recursion_scheduler_level_vk_hash: verifier_config.recursion_scheduler_level_vk_hash, fee_account, shared_bridge, - dummy_prover: self.state.api_config.dummy_prover, + dummy_verifier: self.state.api_config.dummy_verifier, l1_batch_commit_data_generator_mode: self .state .api_config diff --git a/core/lib/zksync_core/src/api_server/web3/state.rs b/core/lib/zksync_core/src/api_server/web3/state.rs index ce3cc7df3bb..5eb1fbfc1a5 100644 --- a/core/lib/zksync_core/src/api_server/web3/state.rs +++ b/core/lib/zksync_core/src/api_server/web3/state.rs @@ -99,7 +99,7 @@ pub struct InternalApiConfig { pub filters_disabled: bool, pub mempool_cache_update_interval: Duration, pub mempool_cache_size: usize, - pub dummy_prover: bool, + pub dummy_verifier: bool, pub l1_batch_commit_data_generator_mode: L1BatchCommitDataGeneratorMode, } @@ -141,7 +141,7 @@ impl InternalApiConfig { filters_disabled: web3_config.filters_disabled, mempool_cache_update_interval: web3_config.mempool_cache_update_interval(), mempool_cache_size: web3_config.mempool_cache_size(), - dummy_prover: genesis_config.dummy_prover, + dummy_verifier: genesis_config.dummy_verifier, l1_batch_commit_data_generator_mode: genesis_config.l1_batch_commit_data_generator_mode, } } diff --git a/core/lib/zksync_core/src/genesis.rs b/core/lib/zksync_core/src/genesis.rs index b444c55300e..26fc71297ea 100644 --- a/core/lib/zksync_core/src/genesis.rs +++ b/core/lib/zksync_core/src/genesis.rs @@ -169,7 +169,7 @@ pub fn mock_genesis_config() -> GenesisConfig { .recursion_scheduler_level_vk_hash, fee_account: Default::default(), shared_bridge: None, - dummy_prover: false, + dummy_verifier: false, l1_batch_commit_data_generator_mode: Default::default(), } } diff --git a/etc/env/file_based/general.yaml b/etc/env/file_based/general.yaml index 67fb6f6afdb..eb52db083a1 100644 --- a/etc/env/file_based/general.yaml +++ b/etc/env/file_based/general.yaml @@ -287,7 +287,7 @@ house_keeper: proof_compressor_job_retrying_interval_ms: 30000 proof_compressor_stats_reporting_interval_ms: 10000 prover_job_archiver_reporting_interval_ms: 1800000 - prover_job_archiver_archiving_interval_ms: 172800 + prover_job_archiver_archiving_interval_secs: 15 prometheus: listener_port: 3312 diff --git a/infrastructure/zk/src/run.ts b/infrastructure/zk/src/run.ts index 486d254163d..50313df5fd0 100644 --- a/infrastructure/zk/src/run.ts +++ b/infrastructure/zk/src/run.ts @@ -51,7 +51,7 @@ export async function revertReason(txHash: string, web3url?: string) { export async function catLogs(exitCode?: number) { utils.allowFailSync(() => { console.log('\nSERVER LOGS:\n', fs.readFileSync('server.log').toString()); - console.log('\nPROVER LOGS:\n', fs.readFileSync('dummy_prover.log').toString()); + console.log('\nPROVER LOGS:\n', fs.readFileSync('dummy_verifier.log').toString()); }); if (exitCode !== undefined) { process.exit(exitCode); From 4b480cee5f999093558a0309adce961bc5b368f3 Mon Sep 17 00:00:00 2001 From: Danil Date: Mon, 1 Apr 2024 13:51:59 +0200 Subject: [PATCH 62/65] Fix encode decode Signed-off-by: Danil --- core/lib/config/src/testonly.rs | 9 ++-- core/lib/protobuf_config/src/api.rs | 25 ++++++---- core/lib/protobuf_config/src/contracts.rs | 22 ++++---- core/lib/protobuf_config/src/database.rs | 2 +- core/lib/protobuf_config/src/genesis.rs | 50 +++++++++++-------- core/lib/protobuf_config/src/observability.rs | 13 +++-- core/lib/protobuf_config/src/wallets.rs | 15 +++--- 7 files changed, 80 insertions(+), 56 deletions(-) diff --git a/core/lib/config/src/testonly.rs b/core/lib/config/src/testonly.rs index 332fbc1d59e..d92590f466b 100644 --- a/core/lib/config/src/testonly.rs +++ b/core/lib/config/src/testonly.rs @@ -159,7 +159,6 @@ impl Distribution for EncodeDist { close_block_at_geometry_percentage: self.sample(rng), close_block_at_eth_params_percentage: self.sample(rng), close_block_at_gas_percentage: self.sample(rng), - fee_account_addr: rng.gen(), minimal_l2_gas_price: self.sample(rng), compute_overhead_part: self.sample(rng), pubdata_overhead_part: self.sample(rng), @@ -172,9 +171,11 @@ impl Distribution for EncodeDist { virtual_blocks_interval: self.sample(rng), virtual_blocks_per_miniblock: self.sample(rng), enum_index_migration_chunk_size: self.sample(rng), - bootloader_hash: rng.gen(), - default_aa_hash: rng.gen(), - l1_batch_commit_data_generator_mode: self.sample(rng), + // These values are not involved into files serialization skip them + fee_account_addr: None, + bootloader_hash: None, + default_aa_hash: None, + l1_batch_commit_data_generator_mode: Default::default(), } } } diff --git a/core/lib/protobuf_config/src/api.rs b/core/lib/protobuf_config/src/api.rs index cd6dfefb3c2..41deb5103a4 100644 --- a/core/lib/protobuf_config/src/api.rs +++ b/core/lib/protobuf_config/src/api.rs @@ -31,6 +31,19 @@ impl ProtoRepr for proto::Api { impl ProtoRepr for proto::Web3JsonRpc { type Type = api::Web3JsonRpcConfig; fn read(&self) -> anyhow::Result { + let account_pks = self + .account_pks + .iter() + .enumerate() + .map(|(i, k)| parse_h256(k).context(i)) + .collect::, _>>() + .context("account_pks")?; + let account_pks = if account_pks.is_empty() { + None + } else { + Some(account_pks) + }; + Ok(Self::Type { http_port: required(&self.http_port) .and_then(|p| Ok((*p).try_into()?)) @@ -49,15 +62,7 @@ impl ProtoRepr for proto::Web3JsonRpc { gas_price_scale_factor: *required(&self.gas_price_scale_factor) .context("gas_price_scale_factor")?, request_timeout: self.request_timeout, - account_pks: Some( - self.account_pks - .iter() - .enumerate() - .map(|(i, k)| parse_h256(k).context(i)) - .collect::>() - .context("keys")?, - ), - + account_pks, estimate_gas_scale_factor: *required(&self.estimate_gas_scale_factor) .context("estimate_gas_scale_factor")?, estimate_gas_acceptable_overestimation: *required( @@ -140,7 +145,7 @@ impl ProtoRepr for proto::Web3JsonRpc { account_pks: this .account_pks .as_ref() - .map(|keys| keys.iter().map(|k| k.to_string()).collect()) + .map(|keys| keys.iter().map(|k| format!("{:?}", k)).collect()) .unwrap_or_default(), estimate_gas_scale_factor: Some(this.estimate_gas_scale_factor), estimate_gas_acceptable_overestimation: Some( diff --git a/core/lib/protobuf_config/src/contracts.rs b/core/lib/protobuf_config/src/contracts.rs index c70c828403b..7a5e7553e36 100644 --- a/core/lib/protobuf_config/src/contracts.rs +++ b/core/lib/protobuf_config/src/contracts.rs @@ -62,24 +62,24 @@ impl ProtoRepr for proto::Contracts { fn build(this: &Self::Type) -> Self { Self { l1: Some(proto::L1 { - governance_addr: Some(this.governance_addr.to_string()), - verifier_addr: Some(this.verifier_addr.to_string()), - diamond_proxy_addr: Some(this.diamond_proxy_addr.to_string()), - validator_timelock_addr: Some(this.validator_timelock_addr.to_string()), - default_upgrade_addr: Some(this.default_upgrade_addr.to_string()), - multicall3_addr: Some(this.l1_multicall3_addr.to_string()), + governance_addr: Some(format!("{:?}", this.governance_addr)), + verifier_addr: Some(format!("{:?}", this.verifier_addr)), + diamond_proxy_addr: Some(format!("{:?}", this.diamond_proxy_addr)), + validator_timelock_addr: Some(format!("{:?}", this.validator_timelock_addr)), + default_upgrade_addr: Some(format!("{:?}", this.default_upgrade_addr)), + multicall3_addr: Some(format!("{:?}", this.l1_multicall3_addr)), }), l2: Some(proto::L2 { - testnet_paymaster_addr: this.l2_testnet_paymaster_addr.map(|a| a.to_string()), + testnet_paymaster_addr: this.l2_testnet_paymaster_addr.map(|a| format!("{:?}", a)), }), bridges: Some(proto::Bridges { erc20: Some(proto::Bridge { - l1_address: Some(this.l1_erc20_bridge_proxy_addr.to_string()), - l2_address: Some(this.l2_erc20_bridge_addr.to_string()), + l1_address: Some(format!("{:?}", this.l1_erc20_bridge_proxy_addr)), + l2_address: Some(format!("{:?}", this.l2_erc20_bridge_addr)), }), weth: Some(proto::Bridge { - l1_address: this.l1_weth_bridge_proxy_addr.map(|a| a.to_string()), - l2_address: this.l2_weth_bridge_addr.map(|a| a.to_string()), + l1_address: this.l1_weth_bridge_proxy_addr.map(|a| format!("{:?}", a)), + l2_address: this.l2_weth_bridge_addr.map(|a| format!("{:?}", a)), }), }), } diff --git a/core/lib/protobuf_config/src/database.rs b/core/lib/protobuf_config/src/database.rs index eb5b814522b..0489c43512b 100644 --- a/core/lib/protobuf_config/src/database.rs +++ b/core/lib/protobuf_config/src/database.rs @@ -127,7 +127,7 @@ impl ProtoRepr for proto::Postgres { slow_query_threshold_ms: this.slow_query_threshold_ms, test: Some(proto::TestDatabase { server_url: this.test_server_url.clone(), - prover_url: this.prover_url.clone(), + prover_url: this.test_prover_url.clone(), }), } } diff --git a/core/lib/protobuf_config/src/genesis.rs b/core/lib/protobuf_config/src/genesis.rs index 74ec2f59d82..c7de6bb6f7c 100644 --- a/core/lib/protobuf_config/src/genesis.rs +++ b/core/lib/protobuf_config/src/genesis.rs @@ -100,34 +100,44 @@ impl ProtoRepr for proto::Genesis { .shared_bridge .as_ref() .map(|shared_bridge| proto::SharedBridge { - bridgehub_proxy_addr: Some(shared_bridge.bridgehub_proxy_addr.to_string()), - state_transition_proxy_addr: Some( - shared_bridge.state_transition_proxy_addr.to_string(), - ), - transparent_proxy_admin_addr: Some( - shared_bridge.transparent_proxy_admin_addr.to_string(), - ), + bridgehub_proxy_addr: Some(format!("{:?}", shared_bridge.bridgehub_proxy_addr)), + state_transition_proxy_addr: Some(format!( + "{:?}", + shared_bridge.state_transition_proxy_addr + )), + transparent_proxy_admin_addr: Some(format!( + "{:?}", + shared_bridge.transparent_proxy_admin_addr, + )), }); Self { - genesis_root: Some(this.genesis_root_hash.to_string()), + genesis_root: Some(format!("{:?}", this.genesis_root_hash)), genesis_rollup_leaf_index: Some(this.rollup_last_leaf_index), - genesis_batch_commitment: Some(this.genesis_root_hash.to_string()), + genesis_batch_commitment: Some(format!("{:?}", this.genesis_root_hash)), genesis_protocol_version: Some(this.protocol_version as u32), - default_aa_hash: Some(this.genesis_root_hash.to_string()), - bootloader_hash: Some(this.genesis_root_hash.to_string()), - fee_account: Some(this.fee_account.to_string()), + default_aa_hash: Some(format!("{:?}", this.default_aa_hash)), + bootloader_hash: Some(format!("{:?}", this.bootloader_hash)), + fee_account: Some(format!("{:?}", this.fee_account)), l1_chain_id: Some(this.l1_chain_id.0), l2_chain_id: Some(this.l2_chain_id.as_u64()), prover: Some(proto::Prover { - recursion_scheduler_level_vk_hash: Some( - this.recursion_scheduler_level_vk_hash.to_string(), - ), - recursion_node_level_vk_hash: Some(this.recursion_node_level_vk_hash.to_string()), - recursion_leaf_level_vk_hash: Some(this.recursion_leaf_level_vk_hash.to_string()), - recursion_circuits_set_vks_hash: Some( - this.recursion_circuits_set_vks_hash.to_string(), - ), + recursion_scheduler_level_vk_hash: Some(format!( + "{:?}", + this.recursion_scheduler_level_vk_hash + )), + recursion_node_level_vk_hash: Some(format!( + "{:?}", + this.recursion_node_level_vk_hash + )), + recursion_leaf_level_vk_hash: Some(format!( + "{:?}", + this.recursion_leaf_level_vk_hash + )), + recursion_circuits_set_vks_hash: Some(format!( + "{:?}", + this.recursion_circuits_set_vks_hash + )), dummy_verifier: Some(this.dummy_verifier), }), shared_bridge, diff --git a/core/lib/protobuf_config/src/observability.rs b/core/lib/protobuf_config/src/observability.rs index f227b106ce7..9acf095a9a7 100644 --- a/core/lib/protobuf_config/src/observability.rs +++ b/core/lib/protobuf_config/src/observability.rs @@ -33,13 +33,18 @@ impl ProtoRepr for proto::Observability { } fn build(this: &Self::Type) -> Self { - Self { - sentry: Some(proto::Sentry { + let sentry = if this.sentry_url.is_none() || this.sentry_environment.is_none() { + None + } else { + Some(proto::Sentry { url: this.sentry_url.clone(), - environment: this.sentry_url.clone(), + environment: this.sentry_environment.clone(), panic_interval: None, error_interval: None, - }), + }) + }; + Self { + sentry, log_format: Some(this.log_format.clone()), opentelemetry: this.opentelemetry.as_ref().map(ProtoRepr::build), sporadic_crypto_errors_substrs: this.sporadic_crypto_errors_substrs.clone(), diff --git a/core/lib/protobuf_config/src/wallets.rs b/core/lib/protobuf_config/src/wallets.rs index b75863580a5..dd6831939b4 100644 --- a/core/lib/protobuf_config/src/wallets.rs +++ b/core/lib/protobuf_config/src/wallets.rs @@ -73,13 +73,16 @@ impl ProtoRepr for proto::Wallets { fn build(this: &Self::Type) -> Self { let (operator, blob_operator) = if let Some(eth_sender) = &this.eth_sender { let blob = eth_sender.blob_operator.as_ref().map(|blob| proto::Wallet { - address: Some(blob.address().to_string()), - private_key: blob.private_key().map(|a| a.to_string()), + address: Some(format!("{:?}", blob.address())), + private_key: blob.private_key().map(|a| format!("{:?}", a)), }); ( Some(proto::Wallet { - address: Some(eth_sender.operator.address().to_string()), - private_key: eth_sender.operator.private_key().map(|a| a.to_string()), + address: Some(format!("{:?}", eth_sender.operator.address())), + private_key: eth_sender + .operator + .private_key() + .map(|a| format!("{:?}", a)), }), blob, ) @@ -91,11 +94,11 @@ impl ProtoRepr for proto::Wallets { .state_keeper .as_ref() .map(|state_keeper| proto::Wallet { - address: Some(state_keeper.fee_account.address().to_string()), + address: Some(format!("{:?}", state_keeper.fee_account.address())), private_key: state_keeper .fee_account .private_key() - .map(|a| a.to_string()), + .map(|a| format!("{:?}", a)), }); Self { blob_operator, From 80b98c803dc59942aef1ccff6af2a9a5b337a7fb Mon Sep 17 00:00:00 2001 From: Danil Date: Mon, 1 Apr 2024 15:32:50 +0200 Subject: [PATCH 63/65] add deprecation note Signed-off-by: Danil --- ...a7db7673811ac181e801a16a7aefc984d60b0.json | 0 ...4e7dfacfcf625e057b99924c245de03c2888c.json | 0 ...f6e1df560ab1e8935564355236e90b6147d2f.json | 15 ++ ...381d82925556a4801f678b8786235d525d784.json | 0 ...07703b2581dda4fe3c00be6c5422c78980c4b.json | 0 ...e57a83f37da8999849377dfad60b44989be39.json | 107 ++++++++++++++ ...a1b4ba7fe355ebc02ea49a054aa073ce324ba.json | 0 ...c2563a3e061bcc6505d8c295b1b2517f85f1b.json | 0 ...c7e3b6bdb2a08149d5f443310607d3c78988c.json | 0 ...2b5ea100f59295cd693d14ee0d5ee089c7981.json | 0 ...994723ebe57b3ed209069bd3db906921ef1a3.json | 0 ...a2803cd147dec7450d1f81a41aea8dcf3be93.json | 0 ...80112ce326bcf4bb38a00366bd24e38881bb2.json | 0 ...33d196907ebd599e926d305e5ef9f26afa2fa.json | 0 ...4710daa723e2d9a23317c347f6081465c3643.json | 0 ...5d95fc47eb6bedc32f4d824aac9b2b6f96faf.json | 0 ...1e4ee6682a89fb86f3b715a240805d44e6d87.json | 0 ...c6f03469d78bf4f45f5fd1eaf37171db2f04a.json | 0 ...e5f7edcafa4fc6757264a96a46dbf7dd1f9cc.json | 0 ...bc6e326e15dca141050bc9d7dacae98a430e8.json | 0 ...dfbf962636347864fc365fafa46c7a2da5f30.json | 0 ...a52daa202279bf612a9278f663deb78bc6e41.json | 0 ...986511265c541d81b1d21f0a751ae1399c626.json | 72 ++++++++++ ...b96b711e8667df7a3c87a5ddf062842a0da6c.json | 0 ...661a097308d9f81024fdfef24a14418202730.json | 0 ...5f7cef0d50c4938105684971e8adc86bb6366.json | 0 ...700a95e4c37a7a18531b3cdf120394cb055b9.json | 0 ...aff3a06b7a9c1866132d62e4449fa9436c7c4.json | 15 ++ ...c68e8e15a831f1a45dc3b2240d5c6809d5ef2.json | 0 ...9ed36420c15081ff5f60da0a1c769c2dbc542.json | 0 ...50dd2778c0da29697d31710e8b507629ba5c4.json | 0 ...28a20420763a3a22899ad0e5f4b953b615a9e.json | 25 ++++ ...a2d505a1aabf52ff4136d2ed1b39c70dd1632.json | 0 ...bfdf10fb1cb43781219586c169fb976204331.json | 0 ...9f3f0b5d629fdb5c36ea1bfb93ed246be968e.json | 0 ...7ea964610e131d45f720f7a7b2a130fe9ed89.json | 0 ...5d98a3d9f7df162ae22a98c3c7620fcd13bd2.json | 0 ...62786c58e54f132588c48f07d9537cf21d3ed.json | 0 ...0a01a6c7cbe9297cbb55d42533fddc18719b6.json | 0 ...1610ffa7f169d560e79e89b99eedf681c6773.json | 16 +++ ...68cee71742b732112038a642e2a07305053c2.json | 0 ...4d26e48e968c79834858c98b7a7f9dfc81910.json | 0 ...099c4591ce3f8d51f3df99db0165e086f96af.json | 0 ...5fc7f60618209d0132e7937a1347b7e94b212.json | 0 ...710ce910d0c9138d85cb55e16459c757dea03.json | 0 ...de995ddddc621ee2149f08f905af2d8aadd03.json | 0 ...d1d4794007904fef7a5e837ebfb1b502711a1.json | 0 ...cd9b0128f82306e27e4c7258116082a54ab95.json | 0 ...4d3648b75bf01ff336bbd77d15f9aa5fd6443.json | 20 +++ ...8eeab159533211d2ddbef41e6ff0ba937d04a.json | 0 ...16065fcad42c6b621efb3a135a16b477dcfd9.json | 0 ...6ca08324bc86a72e4ea85c9c7962a6c8c9e30.json | 0 ...5234d536b064951a67d826ac49b7a3a095a1a.json | 0 ...717b0dd3cec64b0b29f59b273f1c6952e01da.json | 0 ...ae942bab5d71daaed7017e3fa62dc5e42ab0a.json | 0 ...98012b034605dfb4c48379844085b71e9e381.json | 0 ...7a66d1e38fb6ca706c2affd4607d77be38de9.json | 0 ...a45f005141b01eac26946251bba68e9276acf.json | 0 ...727233a36e018fe5c0651995b876053a6a054.json | 0 ...07997b7e24682da56f84d812da2b9aeb14ca2.json | 0 ...6381a9c4165e2727542eaeef3bbedd13a4f20.json | 0 ...42d4ef93ca238fd2fbc9155e6d012d0d1e113.json | 0 ...095596297be0d728a0aa2d9b180fb72de222b.json | 0 ...83f115cd97586bd795ee31f58fc14e56d58cb.json | 0 ...52964b268b93c32fd280c49bf9f932884300d.json | 0 ...cf831d63d692111d87282aed8e85df6b0411f.json | 0 ...a8c13d04079683e09c65f7f4e76a9987e2ab4.json | 0 ...fe400fcba3bfc5cf1b7c2b801508f6673d94e.json | 0 ...ed5d8007789c0fc1eab948f6d7339dfb69147.json | 0 ...52554ccfb5b83f00efdc12bed0f60ef439785.json | 25 ++++ ...00f7b1176d59a83520288f5428b67ebd52130.json | 0 ...f45d57f1f8b2558fdb374bf02e84d3c825a23.json | 0 ...bffc78d92adb3c1e3ca60b12163e38c67047e.json | 0 ...feb5f094160627bc09db4bda2dda9a8c11c44.json | 0 ...5fb7a093b73727f75e0cb7db9cea480c95f5c.json | 35 +++++ ...76085385c3a79d72f49669b4215a9454323c2.json | 0 ...40e73a2778633bbf9d8e591ec912634639af9.json | 0 ...eb89c728357c0744f209090824695a5d35fa3.json | 0 ...119a0a60dc9804175b2baf8b45939c74bd583.json | 0 ...05d7d1c9e649663f6e9444c4425821d0a5b71.json | 0 ...87ed365c0369f94bc457cb162a5c876a123c7.json | 0 ...95f3823926f69cb1d54874878e6d6c301bfd8.json | 0 ...b04ba5868d1897553df85aac15b169ebb0732.json | 0 ...22ff6372f63ecadb504a329499b02e7d3550e.json | 26 ++++ ...26b0b3185a231bbf0b8b132a1a95bc157e827.json | 0 ...b51dea32e37cb8c51f1dd5d82c15eddc48e6b.json | 0 ...f9044ae85b579c7051301b40bd5f94df1f530.json | 15 ++ ...ea7a878613cf62f7fb9b94c5145dc8d1da674.json | 0 ...e2f7e49cd6600bd3d56cf41795c2c9e082e4c.json | 0 ...2c495462e5aa430fe135d1db1f9bad1e72156.json | 0 ...17a7ffc993cf436ad3aeeae82ed3e330b07bd.json | 0 ...ac77b63879ab97a32eed8392b48cc46116a28.json | 0 ...96ec397767a063dc21aa3add974cb9b070361.json | 0 ...38fc90b18155e3435f58d9888fa50d92042f7.json | 0 ...d51c3c1cbd9ba8df9d44a29ff96186e35b700.json | 0 ...6769dbb04d3a61cf232892236c974660ffe64.json | 35 +++++ ...9360a7eab2efc70d97b901f8948f6909d4cd2.json | 0 ...b249026665c9fb17b6f53a2154473547cbbfd.json | 0 ...fccb19a2f9663a73306dbf61a257050e2b634.json | 0 ...bcae561c0eea2b1cd8beb245b0cc66ebffcaa.json | 0 ...8b87ead36f593488437c6f67da629ca81e4fa.json | 14 ++ ...2484f0a0d76a8097b61ead5f1f20301ce524d.json | 0 ...e03def94f4bf4674def1893e2232be80f57a0.json | 0 ...4cee5c602d275bb812022cc8fdabf0a60e151.json | 0 ...4de79b67833f17d252b5b0e8e00cd6e75b5c1.json | 0 ...c5437752a4cf3ac92ec09b334089a8dc5b4ca.json | 0 ...5da82065836fe17687ffad04126a6a8b2b27c.json | 15 ++ ...ee38f07b52a709bfd5f3dbab5b4cfef463f1f.json | 0 ...159cf509cf27adf9afdbe61bd867e536b7e47.json | 0 ...d772d8801b0ae673b7173ae08a1fa6cbf67b2.json | 59 ++++++++ ...6ea7ef2c1178b1b0394a17442185b79f2d77d.json | 0 ...afca34d61347e0e2e29fb07ca3d1b8b1f309c.json | 18 +++ ...de366f88c20d00a8d928b6cf4caae0702b333.json | 17 +++ ...c026c3181f42a49f1f4b6e227c95641931a54.json | 0 ...58ee0e803255aa612a124289f53fbb78bd64a.json | 0 ...ec427a099492905a1feee512dc43f39d10047.json | 0 ...9a8f447824a5ab466bb6eea1710e8aeaa2c56.json | 15 ++ ...d94f28b7b2b60d551d552a9b0bab1f1791e39.json | 22 +++ ...162d717ffcf46fdf5d2ce5d32555353b6da6b.json | 0 ...a8d4768c6a803a1a90889e5a1b8254c315231.json | 0 ...1397212b4767039a6c0e22697cf40969729af.json | 0 ...ecd50a04799ffd36be0e17c56f47fcdbc8f60.json | 0 ...cfb3ba0659b6fcc582e174ee80601b54f89d9.json | 0 ...325fad494a512ba92df95439d2d7fe0f3a285.json | 0 ...40e7eb9f598999c28015a504605f88bf84b33.json | 0 ...662bf3bfdda11bb57f65db4980982a4200bed.json | 0 ...6009503182c300877e74a8539f231050e6f85.json | 15 ++ ...5bb2036d21f60d4c6934f9145730ac35c04de.json | 0 ...677d57040037da0e07cef2c7b7246851a3703.json | 0 ...97b16599abaf51df0f19effe1a536376cf6a6.json | 0 ...7effac442434c6e734d977e6682a7484abe7f.json | 35 +++++ ...fa5c8bf46bc0cea4ac2b25ecde236c30ae32d.json | 0 ...52aeb5f06c26f68d131dd242f6ed68816c513.json | 22 +++ ...f00e82b0b3ad9ae36bf4fe44d7e85b74c6f49.json | 0 ...4d21d399f860a7b986738d193871fe5cf913d.json | 0 ...b5b5cc7e37dd6a607e9453e822e34ba77cdc3.json | 0 ...8f24785ae8bd2b4579203f05379e757a56f2b.json | 0 ...c171cd0e4d38bd6e9cfec58b2d7f53a3204e1.json | 0 ...528f012c2ecaebf6622ca1ae481045604e58d.json | 0 ...3ce80f9b2b27758651ccfc09df61a4ae8a363.json | 0 ...2e14fa4c1c4fdad16eff011011878af897946.json | 0 ...fadbcfc343374fad173df0cc8db38419a9726.json | 0 ...70d67840b2484ea3a03ac49eb3d50ea153163.json | 0 ...e7ee767e4c98706246eb113498c0f817f5f38.json | 17 +++ ...7526a96dd032a34a20e789308a9b94b9e94df.json | 0 ...91a8d67abcdb743a619ed0d1b9c16206a3c20.json | 0 ...3260b49ce42daaf9dbe8075daf0a8e0ad9914.json | 0 ...ab01cb2c55bf86d2c8c99abb1b7ca21cf75c0.json | 0 ...a82f1af696fcc8f7484eaf255d5311589ee39.json | 0 ...f28f7b515cf894e63fc95165c9211f71daa36.json | 0 ...9d0c658093dede5eb61489205aa751ad5b8ec.json | 22 +++ ...54a701146f4b2dc92361f42598a5f9a72c36b.json | 0 ...f45ef713ef7f9909ce26653faceddb549a383.json | 0 ...8a58479487686d774e6b2b1391347bdafe06d.json | 0 ...2826095e9290f0c1157094bd0c44e06012e42.json | 0 ...f396f9d193615d70184d4327378a7fc8a5665.json | 0 ...26313c255ce356a9a4e25c098484d3129c914.json | 0 ...7f92c4cfad9313b1461e12242d9becb59e0b0.json | 0 ...8bf92c7f2c55386c8208e3a82b30456abd5b4.json | 96 +++++++++++++ ...4a42b4ead6964edd17bfcacb4a828492bba60.json | 0 ...dcf2324f380932698386aa8f9751b1fa24a7b.json | 0 ...6bf94a013e49bf50ce23f4de4968781df0796.json | 0 ...715e903f3b399886c2c73e838bd924fed6776.json | 18 +++ ...50d625f057acf1440b6550375ce5509a816a6.json | 107 ++++++++++++++ ...29bf769829991c7d732b13f96bcd1293263ea.json | 0 ...d7d59a34f97285e855d5bd67f28f6f4ff1d4e.json | 0 ...b139e943f3ad2a41387b610606a42b7f03283.json | 0 ...222806762c640b7de7bf6ecdbf9c3f9842d6f.json | 0 ...7227120a8279db1875d26ccae5ee0785f46a9.json | 22 +++ ...1578db18c29cdca85b8b6aad86fe2a9bf6bbe.json | 32 +++++ ...77b39429d56072f63b3530c576fb31d7a56f9.json | 0 ...87f1fb2f138d9a2231477fcaae148c50dbb8a.json | 0 ...99f9b8679d770b3d1ca755c42ee264342da03.json | 0 ...534014b9ab9ca7725e14fb17aa050d9f35eb8.json | 0 ...0c5f885240d99ea69140a4636b00469d08497.json | 0 ...edac2f0db60c263c1564b64c717f8ae53e44d.json | 0 ...c70aff49e60b7def3d93b9206e650c259168b.json | 0 ...30198c2651022c65eb9e04125356fcf52ddfc.json | 0 ...f2aed7049c3f44a6d25556967ea867e0caf25.json | 0 ...1af63b86e8da6d908d48998012231e1d66a60.json | 0 ...b4207b69cc48b4ba648e797211631be612b69.json | 0 ...567e2667c63a033baa6b427bd8a0898c08bf2.json | 0 ...02c690c33686c889d318b1d64bdd7fa6374db.json | 0 ...c8dc4bd57e32dfefe1017acba9a15fc14b895.json | 0 ...0a54653a5c06c665433718f7ccbbf936f76ca.json | 0 ...cbb724af0f0216433a70f19d784e3f2afbc9f.json | 22 +++ ...98fa893dbc9654d15753e4a538f021af67b60.json | 0 ...2767e112b95f4d103c27acd6f7ede108bd300.json | 0 ...4125a2633ddb6abaa129f2b12389140d83c3f.json | 0 ...f0a9676e26f422506545ccc90b7e8a36c8d47.json | 0 ...4561347b81f8931cc2addefa907c9aa9355e6.json | 0 ...1e30606fddf6631c859ab03819ec476bcf005.json | 0 ...578179e6269c6ff36877cedee264067ccdafc.json | 0 ...e3b0fd67aa1f5f7ea0de673a2fbe1f742db86.json | 0 ...c9317c01d6e35db3b07d0a31f436e7e3c7c40.json | 0 ...8e221a8ef9014458cc7f1dbc60c056a0768a0.json | 0 ...6a834aeac9156b974ff225d734683c1905469.json | 0 ...a36532fee1450733849852dfd20e18ded1f03.json | 15 ++ ...71bd180729779a0e98ae7a6bb4386aca99716.json | 0 ...d2e2326d7ace079b095def52723a45b65d3f3.json | 15 ++ ...5094de508af93f4085be7cf3b54b1e8ecdadd.json | 0 ...4470914b52e2d714e9deb903d62a5d66f0e04.json | 0 ...2cfbaf09164aecfa5eed8d7142518ad96abea.json | 0 ...5ca679a0459a012899a373c67393d30d12601.json | 14 ++ ...d92f5a547150590b8c221c4065eab11175c7a.json | 0 ...d7cbb0bc526ebe61a07f735d4ab587058b22c.json | 0 ...a69138206dfeb41f3daff4a3eef1de0bed4e4.json | 0 ...5d93e391600ab9da2e5fd4e8b139ab3d77583.json | 0 ...c9a64904026506914abae2946e5d353d6a604.json | 23 ++++ ...de45f8f3f3b6cf2e4136f25a1c3ab85d92668.json | 0 ...e2757dbc13be6b30f5840744e5e0569adc66e.json | 0 ...9f41220c51f58a03c61d6b7789eab0504e320.json | 32 +++++ ...2bef649a6db197a36aca098cd8054909d82e9.json | 0 ...477dcf21955e0921ba648ba2e751dbfc3cb45.json | 38 +++++ ...877866bbdd1f8c359d97538125756fd05a2ab.json | 0 ...9bdc9efc6b89fc0444caf8271edd7dfe4a3bc.json | 0 ...43a892f5a0427ca2635946c4f9dfafa8bf0db.json | 0 ...cd6ca26aa2fa565fcf208b6985f461c1868f2.json | 0 ...0457113e073b392c569c077d719941d1e37aa.json | 0 ...63f436a4f16dbeb784d0d28be392ad96b1c49.json | 0 ...895006e23ec73018f4b4e0a364a741f5c9781.json | 0 ...f724216807ffd481cd6f7f19968e42e52b284.json | 14 ++ ...1ac4ab2d73bda6022700aeb0a630a2563a4b4.json | 15 ++ ...f8dcbcb014b4f808c6232abd9a83354c995ac.json | 35 +++++ ...663a9c5ea62ea7c99a77941eb8f05d4454125.json | 18 +++ ...8cc77bd2dcee4a04d1afc9779714854623a79.json | 0 ...7b56187686173327498ac75424593547c19c5.json | 22 +++ ...f8c12deeca6b8843fe3869cc2b02b30da5de6.json | 22 +++ ...49b6370c211a7fc24ad03a5f0e327f9d18040.json | 22 +++ ...d964d4bb39b9dcd18fb03bc11ce2fb32b7fb3.json | 83 +++++++++++ ...61b86b1abd915739533f9982fea9d8e21b9e9.json | 0 ...0103263af3ff5cb6c9dc5df59d3cd2a5e56b4.json | 17 +++ ...d1f5e03924dbf6dd1e824d4aca837e604b7e9.json | 0 ...0c2cfff08e6fef3c3824d20dfdf2d0f73e671.json | 0 ...5386a2fd53492f3df05545edbfb0ec0f059d2.json | 0 ...697e36b3c2a997038c30553f7727cdfa17361.json | 0 ...1973d18d45c4a200a60d318cdb1222d63ccaa.json | 0 ...c332a122d0b88271ae0127c65c4612b41a619.json | 0 ...180abbd76956e073432af8d8500327b74e488.json | 0 ...9c9a85e3c24fca1bf87905f7fc68fe2ce3276.json | 0 ...1cc9d3523a392fd2011491c6017400f313a16.json | 0 ...85c5196c431363802b6b988939c99853b9c97.json | 0 ...1731a10b332fec68f4a1e56edec4df71ccaff.json | 0 ...f67d2ef1428c61ae84003c9b52b03204d1f0a.json | 0 ...61f3a71f5c6737e08745a37b41b22f4dfd030.json | 0 ...a4b4e2af48907fa9321064ddb24ac02ab17cd.json | 0 ...f1719fd1284af1dbb60ea128550224b52da93.json | 0 ...912d57f8eb2a38bdb7884fc812a2897a3a660.json | 35 +++++ ...709dbee508ad6d1cae43e477cf1bef8cb4aa9.json | 0 ...abda70cb9c56ae3e30dc0a8257e43d6714155.json | 0 ...379f3b2e9ff1bc6e8e38f473fb4950c8e4b77.json | 0 ...a653852f7e43670076eb2ebcd49542a870539.json | 14 ++ ...c1d66aeaeb6e2d36fddcf96775f01716a8a74.json | 0 ...432d865852afe0c60e11a2c1800d30599aa61.json | 0 ...7956350786f3596c7302bdeb8d813f9fbf621.json | 0 ...e899e360650afccb34f5cc301b5cbac4a3d36.json | 15 ++ ...9d0e2d571533d4d5f683919987b6f8cbb00e0.json | 0 ...38d60d6e93bcb34fd20422e227714fccbf6b7.json | 0 ...0fb28594859564a0f888eae748ad1f9fcede5.json | 0 ...8d43c31ec7441a7f6c5040e120810ebbb72f7.json | 21 +++ ...c116162becce06841476128f864b6028129df.json | 0 ...2b7c4d79cbd404e0267794ec203df0cbb169d.json | 0 ...0d7eaeeb4549ed59b58f8d984be2a22a80355.json | 0 ...ac429aac3c030f7e226a1264243d8cdae038d.json | 17 +++ ...03d8bd356f2f9cc249cd8b90caa5a8b5918e3.json | 0 ...16f8cc32e365e2ffbd17dc99885de427f2777.json | 0 ...bed26c831730944237b74bed98869c83b3ca5.json | 0 ...cb21a635037d89ce24dd3ad58ffaadb59594a.json | 20 +++ ...b3b22ea2cd184932fcd59f5931239c7a78003.json | 0 ...b4afd384063ae394a847b26304dd18d490ab4.json | 0 ...3e67f08f2ead5f55bfb6594e50346bf9cf2ef.json | 32 +++++ ...2929e051270056ebf113a657a464f89c7fd57.json | 0 ...32432295b2f7ee40bf13522a6edbd236f1970.json | 0 ...1885d320c146cd8fad77c107ef12fa38e6c98.json | 0 ...3b438f14b68535111cf2cedd363fc646aac99.json | 0 ...8242aad3e9a47400f6d6837a35f4c54a216b9.json | 0 ...253eb340a21afd7d65ce6d2f523aeded8dfc0.json | 0 ...05ed6a7335a7092c7dc2b81337535e4d489d5.json | 0 ...f75260c7afaf110870656061a04079c35c2d8.json | 0 ...fd17f833fb15b58b0110c7cc566946db98e76.json | 0 ...3d2839f0f928c06b8020eecec38e895f99b42.json | 0 ...813d2b2d411bd5faf8306cd48db500532b711.json | 29 ++++ ...33c83477d65a6f8cb2673f67b3148cd95b436.json | 0 ...7e88abd0f8164c2413dc83c91c29665ca645e.json | 35 +++++ ...e8ee5e54b170de9da863bbdbc79e3f206640b.json | 0 ...c66fc73c2d4f35a5dc40e117903dba4e7edb2.json | 0 ...2060fbea775dc185f639139fbfd23e4d5f3c6.json | 15 ++ ...18128cae1b40ea2ee34b9d5269c12f8b5738a.json | 0 ...76fb01e6629e8c982c265f2af1d5000090572.json | 0 ...c82627a936f7ea9f6c354eca4bea76fac6b10.json | 0 ...550b8db817630d1a9341db4a1f453f12e64fb.json | 0 ...bf58b311d81c5fc0a6fbaccf204976f76f378.json | 0 ...3aa4239d3a8be71b47178b4b8fb11fe898b31.json | 0 ...70a4e629b2a1cde641e74e4e55bb100df809f.json | 22 +++ ...e5c6feb8059722149a747c4b6bd46731e2536.json | 0 ...f35d55901fb1e6805f23413ea43e3637540a0.json | 0 ...b957e92cd375ec33fe16f855f319ffc0b208e.json | 130 ++++++++++++++++++ ...f3f9dd37b771cf76261762ae18fd14cf0efc5.json | 0 ...71ababa66e4a443fbefbfffca72b7540b075b.json | 15 ++ ...be152ead3d4a7f22bc3584803288e8d639c13.json | 0 ...91a9984685eaaaa0a8b223410d560a15a3034.json | 61 ++++++++ ...6686e655206601854799139c22c017a214744.json | 19 +++ ...e6ecbe96475e83dfed603bd305e72460f52c2.json | 0 ...78a8a0ec739f4ddec8ffeb3a87253aeb18d30.json | 0 ...c0d68195346daf5f38d102eab1c1b73b0f82f.json | 0 ...b1fcdd02ba2ae2104a0ef972fe809bf136425.json | 0 ...c3465e2211ef3013386feb12d4cc04e0eade9.json | 60 ++++++++ ...15aaade450980719933089824eb8c494d64a4.json | 15 ++ ...d056cc9bae25bc070c5de8424f88fab20e5ea.json | 0 ...bae63443c51deb818dd0affd1a0949b161737.json | 16 +++ ...5ff66f2c3b2b83d45360818a8782e56aa3d66.json | 0 ...85ec6ec1e522bc058710560ef78e75f94ddac.json | 0 ...ae6d629a74f255a31284ce6707d219c9a0510.json | 0 ...6efe8d41759bbdcdd6d39db93208f2664f03a.json | 0 ...741e2713748a17c96af5485423bfe9aaa84ec.json | 0 ...92dfb0d28a797bee69872634f3105d2d51996.json | 0 ...1fac675dd7b078df61758df382e1038cb4987.json | 0 ...17db60405a887f9f7fa0ca60aa7fc879ce630.json | 16 +++ ...a780c75468aa36615bcfcf7f7d8ace23cd1aa.json | 0 ...d5509f57ae415719f99c6d523c81c20d2bffb.json | 0 ...5618fd95722a77cc44a2e0519f3740191dc75.json | 0 ...227ecaa45d76d1ba260074898fe57c059a15a.json | 0 ...5e6f8b7f88a0894a7f9e27fc26f93997d37c7.json | 24 ++++ ...99a1f6ee5a046ece2ef949aee7ab3d2549975.json | 0 ...63a1e89945f8d5e0f4da42ecf6313c4f5967e.json | 0 ...c7dfb7aad7261e5fc402d845aedc3b91a4e99.json | 0 ...304e8a35fd65bf37e976b7106f57c57e70b9b.json | 16 +++ ...5d9ec9b3f628c3a4cf5e10580ea6e5e3a2429.json | 0 ...8dd6c2ad2793c06071f4a067dcc31306adebc.json | 0 ...eb09b538a67d1c39fda052c4f4ddb23ce0084.json | 0 ...5223f4599d4128db588d8645f3d106de5f50b.json | 0 core/lib/config/src/configs/chain.rs | 8 +- core/lib/config/src/configs/eth_sender.rs | 2 +- core/lib/config/src/configs/eth_watch.rs | 2 +- 334 files changed, 1992 insertions(+), 6 deletions(-) rename {core/lib/dal/.sqlx => .sqlx}/query-00220170d8f9e577321a0522337a7db7673811ac181e801a16a7aefc984d60b0.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-0034bc1041d9ba7d3c681be6dfc4e7dfacfcf625e057b99924c245de03c2888c.json (100%) create mode 100644 .sqlx/query-00b88ec7fcf40bb18e0018b7c76f6e1df560ab1e8935564355236e90b6147d2f.json rename {core/lib/dal/.sqlx => .sqlx}/query-012bed5d34240ed28c331c8515c381d82925556a4801f678b8786235d525d784.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-015350f8d729ef490553550a68f07703b2581dda4fe3c00be6c5422c78980c4b.json (100%) create mode 100644 .sqlx/query-01ac5343beb09ec5bd45b39d560e57a83f37da8999849377dfad60b44989be39.json rename {core/lib/dal/.sqlx => .sqlx}/query-01f72dfc1eee6360a8ef7809874a1b4ba7fe355ebc02ea49a054aa073ce324ba.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-026ab7dd7407f10074a2966b5eac2563a3e061bcc6505d8c295b1b2517f85f1b.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-03c585c7e9f918e608757496088c7e3b6bdb2a08149d5f443310607d3c78988c.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-040eaa878c3473f5edc73b77e572b5ea100f59295cd693d14ee0d5ee089c7981.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-04fbbd198108d2614a3b29fa795994723ebe57b3ed209069bd3db906921ef1a3.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-0535c87d0ae694d5f10e529742ba2803cd147dec7450d1f81a41aea8dcf3be93.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-06ce3e5c10d6ae327fc2e45fd9080112ce326bcf4bb38a00366bd24e38881bb2.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-07310d96fc7e258154ad510684e33d196907ebd599e926d305e5ef9f26afa2fa.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-083991abb3f1c2183d1bd1fb2ad4710daa723e2d9a23317c347f6081465c3643.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-08737d11b3e5067a2468013ec6e5d95fc47eb6bedc32f4d824aac9b2b6f96faf.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-08e59ed8e2fd1a74e19d8bf0d131e4ee6682a89fb86f3b715a240805d44e6d87.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-0914f0ad03d6a8c55d287f94917c6f03469d78bf4f45f5fd1eaf37171db2f04a.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-0a53fc3c90a14038c9f3f32c3e2e5f7edcafa4fc6757264a96a46dbf7dd1f9cc.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-0bdcf87f6910c7222b621f76f71bc6e326e15dca141050bc9d7dacae98a430e8.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-0c899c68886f76a232ffac0454cdfbf962636347864fc365fafa46c7a2da5f30.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-0c95fbfb3a816bd49fd06e3a4f0a52daa202279bf612a9278f663deb78bc6e41.json (100%) create mode 100644 .sqlx/query-0d13b8947b1bafa9e5bc6fdc70a986511265c541d81b1d21f0a751ae1399c626.json rename {core/lib/dal/.sqlx => .sqlx}/query-0f381418ac79762b4573bf5b440b96b711e8667df7a3c87a5ddf062842a0da6c.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-10959c91f01ce0da196f4c6eaf0661a097308d9f81024fdfef24a14418202730.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-10b8981f7aa47ce5d3507571af45f7cef0d50c4938105684971e8adc86bb6366.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-11af69fc254e54449b64c086667700a95e4c37a7a18531b3cdf120394cb055b9.json (100%) create mode 100644 .sqlx/query-12ab208f416e2875f89e558f0d4aff3a06b7a9c1866132d62e4449fa9436c7c4.json rename {core/lib/dal/.sqlx => .sqlx}/query-136569d7eb4037fd77e0fac2246c68e8e15a831f1a45dc3b2240d5c6809d5ef2.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-14c0caee921199f799400dbea719ed36420c15081ff5f60da0a1c769c2dbc542.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-14e5a66ee9a2b7bc56e41c3925150dd2778c0da29697d31710e8b507629ba5c4.json (100%) create mode 100644 .sqlx/query-15858168fea6808c6d59d0e6d8f28a20420763a3a22899ad0e5f4b953b615a9e.json rename {core/lib/dal/.sqlx => .sqlx}/query-1689c212d411ebd99a22210519ea2d505a1aabf52ff4136d2ed1b39c70dd1632.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-1766c0a21ba5918dd08f4babd8dbfdf10fb1cb43781219586c169fb976204331.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-1862d3a78e4e9068df1b8ce3bbe9f3f0b5d629fdb5c36ea1bfb93ed246be968e.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-19314d74e94b610e2da6d728ca37ea964610e131d45f720f7a7b2a130fe9ed89.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-19545806b8f772075096e69f8665d98a3d9f7df162ae22a98c3c7620fcd13bd2.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-19b89495be8aa735db039ccc8a262786c58e54f132588c48f07d9537cf21d3ed.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-1b4ebbfc96b4fd66ecbe64a6be80a01a6c7cbe9297cbb55d42533fddc18719b6.json (100%) create mode 100644 .sqlx/query-1bc6597117db032b87df33040d61610ffa7f169d560e79e89b99eedf681c6773.json rename {core/lib/dal/.sqlx => .sqlx}/query-1c14d2def60fa5ff91788ddb55e68cee71742b732112038a642e2a07305053c2.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-1c994d418ada78586de829fc2d34d26e48e968c79834858c98b7a7f9dfc81910.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-1dcb3afb0c1947f92981f61d95c099c4591ce3f8d51f3df99db0165e086f96af.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-1ea37ef1c3df72e5e9c50cfa1675fc7f60618209d0132e7937a1347b7e94b212.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-1ed2d7e5e98b15420a21650809d710ce910d0c9138d85cb55e16459c757dea03.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-1f46524410ce0f193dc6547499bde995ddddc621ee2149f08f905af2d8aadd03.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-1f4c123edaf6faf50e1c07a797cd1d4794007904fef7a5e837ebfb1b502711a1.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-2003dcf7bc807c7d345368538accd9b0128f82306e27e4c7258116082a54ab95.json (100%) create mode 100644 .sqlx/query-204cfd593c62a5a1582215a5f0f4d3648b75bf01ff336bbd77d15f9aa5fd6443.json rename {core/lib/dal/.sqlx => .sqlx}/query-20f84f9ec21459d8c7ad53241758eeab159533211d2ddbef41e6ff0ba937d04a.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-23be43bf705d679ca751c89353716065fcad42c6b621efb3a135a16b477dcfd9.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-245dc5bb82cc82df38e4440a7746ca08324bc86a72e4ea85c9c7962a6c8c9e30.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-24722ee4ced7f03e60b1b5ecaaa5234d536b064951a67d826ac49b7a3a095a1a.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-249cb862d44196cb6dc3945e907717b0dd3cec64b0b29f59b273f1c6952e01da.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-2506e9edfd4b41ca1e187909631ae942bab5d71daaed7017e3fa62dc5e42ab0a.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-254d17b5402c123cca0edd6fcdc98012b034605dfb4c48379844085b71e9e381.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-25646383ecacf72e3f63b5c93a57a66d1e38fb6ca706c2affd4607d77be38de9.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-268d27c427a69c5e35e6004380da45f005141b01eac26946251bba68e9276acf.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-26bc9b315c4c57bcff1f46da956727233a36e018fe5c0651995b876053a6a054.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-26cb272c2a46a267c47681e0f1f07997b7e24682da56f84d812da2b9aeb14ca2.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-26e0b7eb1871d94ddc98254fece6381a9c4165e2727542eaeef3bbedd13a4f20.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-2737fea02599cdc163854b1395c42d4ef93ca238fd2fbc9155e6d012d0d1e113.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-280cf015e40353e2833c0a70b77095596297be0d728a0aa2d9b180fb72de222b.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-293258ecb299be5f5e81696d14883f115cd97586bd795ee31f58fc14e56d58cb.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-2955e976281f9cbd98b7378c5ab52964b268b93c32fd280c49bf9f932884300d.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-2979b6c9ce76a4e6eaaa3f9bad5cf831d63d692111d87282aed8e85df6b0411f.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-2a2680234c38904e5c19df45193a8c13d04079683e09c65f7f4e76a9987e2ab4.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-2b1136c7781bcdbd9d5d1e6f900fe400fcba3bfc5cf1b7c2b801508f6673d94e.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-2b1aa207a058f66265acf2c21b8ed5d8007789c0fc1eab948f6d7339dfb69147.json (100%) create mode 100644 .sqlx/query-2b626262c8003817ee02978f77452554ccfb5b83f00efdc12bed0f60ef439785.json rename {core/lib/dal/.sqlx => .sqlx}/query-2c71a819c6ed22a3ab79675840e00f7b1176d59a83520288f5428b67ebd52130.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-2c827c1c3cfa3552b90d4746c5df45d57f1f8b2558fdb374bf02e84d3c825a23.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-2d0c2e9ec4187641baef8a33229bffc78d92adb3c1e3ca60b12163e38c67047e.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-2d1e0f2e043c193052c9cc20f9efeb5f094160627bc09db4bda2dda9a8c11c44.json (100%) create mode 100644 .sqlx/query-2d31fcce581975a82d6156b52e35fb7a093b73727f75e0cb7db9cea480c95f5c.json rename {core/lib/dal/.sqlx => .sqlx}/query-2d862097cfae49a1fb28ec0a05176085385c3a79d72f49669b4215a9454323c2.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-2dd7dbaeb2572404451e78a96f540e73a2778633bbf9d8e591ec912634639af9.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-2ddba807ac8ec5260bf92c77073eb89c728357c0744f209090824695a5d35fa3.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-2e5b9ae1b81b0abfe7a962c93b3119a0a60dc9804175b2baf8b45939c74bd583.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-2eb25bfcfc1114de825dc4eeb0605d7d1c9e649663f6e9444c4425821d0a5b71.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-307f15e00a97440868189f25e4487ed365c0369f94bc457cb162a5c876a123c7.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-31f12a8c44124bb2ce31889ac5295f3823926f69cb1d54874878e6d6c301bfd8.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-32792c6aee69cb8c8b928a209a3b04ba5868d1897553df85aac15b169ebb0732.json (100%) create mode 100644 .sqlx/query-33d6be45b246523ad76f9ae512322ff6372f63ecadb504a329499b02e7d3550e.json rename {core/lib/dal/.sqlx => .sqlx}/query-3490fe0b778a03c73111bf8cbf426b0b3185a231bbf0b8b132a1a95bc157e827.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-3596a70433e4e27fcda18f37073b51dea32e37cb8c51f1dd5d82c15eddc48e6b.json (100%) create mode 100644 .sqlx/query-35b87a3b7db0af87c6a95e9fe7ef9044ae85b579c7051301b40bd5f94df1f530.json rename {core/lib/dal/.sqlx => .sqlx}/query-3743b41751a141c21f1674fa581ea7a878613cf62f7fb9b94c5145dc8d1da674.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-38a8b00e320b16e99f6ea0e5954e2f7e49cd6600bd3d56cf41795c2c9e082e4c.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-39849c30cdfa1827d69313357f92c495462e5aa430fe135d1db1f9bad1e72156.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-3b013b93ea4a6766162c9f0c60517a7ffc993cf436ad3aeeae82ed3e330b07bd.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-3b3fbcffd2702047045c2f358e8ac77b63879ab97a32eed8392b48cc46116a28.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-3b4d5009ec22f54cc7d305aa11d96ec397767a063dc21aa3add974cb9b070361.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-3ba9bc85e3e286aadef8aad27eb38fc90b18155e3435f58d9888fa50d92042f7.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-3bc70707863d7be1158de1bfb4bd51c3c1cbd9ba8df9d44a29ff96186e35b700.json (100%) create mode 100644 .sqlx/query-3c3abbf689fa64c6da7de69fd916769dbb04d3a61cf232892236c974660ffe64.json rename {core/lib/dal/.sqlx => .sqlx}/query-3c531ad0631090934ed46c538249360a7eab2efc70d97b901f8948f6909d4cd2.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-3c60ca71b8a3b544f5fe9d7f2fbb249026665c9fb17b6f53a2154473547cbbfd.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-3d2d005b59ba9931286452e029cfccb19a2f9663a73306dbf61a257050e2b634.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-3d7536cfe7d88dceebff2125a51bcae561c0eea2b1cd8beb245b0cc66ebffcaa.json (100%) create mode 100644 .sqlx/query-3ec365c5c81f4678a905ae5bbd48b87ead36f593488437c6f67da629ca81e4fa.json rename {core/lib/dal/.sqlx => .sqlx}/query-406e51d7884cdff36632ccf97912484f0a0d76a8097b61ead5f1f20301ce524d.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-40c17194a2089a7d3fa6b7923c9e03def94f4bf4674def1893e2232be80f57a0.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-41c9f45d6eb727aafad0d8c18024cee5c602d275bb812022cc8fdabf0a60e151.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-43c7e352d09f69de1a182196aea4de79b67833f17d252b5b0e8e00cd6e75b5c1.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-44490ad52b8dbcd978a96677ffac5437752a4cf3ac92ec09b334089a8dc5b4ca.json (100%) create mode 100644 .sqlx/query-46c4696fff5a4b8cc5cb46b05645da82065836fe17687ffad04126a6a8b2b27c.json rename {core/lib/dal/.sqlx => .sqlx}/query-48c03061a662861818e3b0072caee38f07b52a709bfd5f3dbab5b4cfef463f1f.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-4aef05b8864484c6979c93d7ce3159cf509cf27adf9afdbe61bd867e536b7e47.json (100%) create mode 100644 .sqlx/query-4d263992ed6d5abbd7d3ca43af9d772d8801b0ae673b7173ae08a1fa6cbf67b2.json rename {core/lib/dal/.sqlx => .sqlx}/query-4d50dabc25d392e6b9d0dbe0e386ea7ef2c1178b1b0394a17442185b79f2d77d.json (100%) create mode 100644 .sqlx/query-4d92a133a36afd682a84fbfd75aafca34d61347e0e2e29fb07ca3d1b8b1f309c.json create mode 100644 .sqlx/query-510bfea2346a8c63e74222e1159de366f88c20d00a8d928b6cf4caae0702b333.json rename {core/lib/dal/.sqlx => .sqlx}/query-51891ab674b8f5cf2d7c12420d1c026c3181f42a49f1f4b6e227c95641931a54.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-53182f70d83de1482110c767a8d58ee0e803255aa612a124289f53fbb78bd64a.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-532a80b0873871896dd318beba5ec427a099492905a1feee512dc43f39d10047.json (100%) create mode 100644 .sqlx/query-534822a226068cde83ad8c30b569a8f447824a5ab466bb6eea1710e8aeaa2c56.json create mode 100644 .sqlx/query-53f78fdee39b113d2f55f6f951bd94f28b7b2b60d551d552a9b0bab1f1791e39.json rename {core/lib/dal/.sqlx => .sqlx}/query-546c729829083b7eba94fea742c162d717ffcf46fdf5d2ce5d32555353b6da6b.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-5503575d9377785894de6cf6139a8d4768c6a803a1a90889e5a1b8254c315231.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-555f396946bdb8b84a5d77abbfc1397212b4767039a6c0e22697cf40969729af.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-55b0b4c569c0aaf9741afc85400ecd50a04799ffd36be0e17c56f47fcdbc8f60.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-55e6f5ea121090034c8920dffb7cfb3ba0659b6fcc582e174ee80601b54f89d9.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-55f4585be3d0f1a147cb10f6e59325fad494a512ba92df95439d2d7fe0f3a285.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-5659480e5d79dab3399e35539b240e7eb9f598999c28015a504605f88bf84b33.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-57fe009542ca9dc763e3823ee73662bf3bfdda11bb57f65db4980982a4200bed.json (100%) create mode 100644 .sqlx/query-5821f1446983260168cec366af26009503182c300877e74a8539f231050e6f85.json rename {core/lib/dal/.sqlx => .sqlx}/query-58aed39245c72d231b268ce83105bb2036d21f60d4c6934f9145730ac35c04de.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-5d341e334cbc2d38efc8a060325677d57040037da0e07cef2c7b7246851a3703.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-5d493cbce749cc5b56d4069423597b16599abaf51df0f19effe1a536376cf6a6.json (100%) create mode 100644 .sqlx/query-5e781f84ec41edd0941fa84de837effac442434c6e734d977e6682a7484abe7f.json rename {core/lib/dal/.sqlx => .sqlx}/query-5f7034d22251a893249208c5ff8fa5c8bf46bc0cea4ac2b25ecde236c30ae32d.json (100%) create mode 100644 .sqlx/query-61b2b858d4636809c21838635aa52aeb5f06c26f68d131dd242f6ed68816c513.json rename {core/lib/dal/.sqlx => .sqlx}/query-61bc330d6d1b5fddec78342c1b0f00e82b0b3ad9ae36bf4fe44d7e85b74c6f49.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-6213f642c89d2c0a470c93b94714d21d399f860a7b986738d193871fe5cf913d.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-63f5f9bff4b2c15fa4230af2c73b5b5cc7e37dd6a607e9453e822e34ba77cdc3.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-65736a5b9b4ad364797dbedfc828f24785ae8bd2b4579203f05379e757a56f2b.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-6621de90a024cc85946f17948e5c171cd0e4d38bd6e9cfec58b2d7f53a3204e1.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-66510caa7683ed90729cb545ac8528f012c2ecaebf6622ca1ae481045604e58d.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-6692ff6c0fbb2fc94f5cd2837a43ce80f9b2b27758651ccfc09df61a4ae8a363.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-67ac33ad0ad912e8db6d141e21c2e14fa4c1c4fdad16eff011011878af897946.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-6849be0788a509e4e68acc2da4bfadbcfc343374fad173df0cc8db38419a9726.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-6874b501c82e6062ab22622095070d67840b2484ea3a03ac49eb3d50ea153163.json (100%) create mode 100644 .sqlx/query-6ae2ed34230beae0e86c584e293e7ee767e4c98706246eb113498c0f817f5f38.json rename {core/lib/dal/.sqlx => .sqlx}/query-6ae7d3c1a3e7bd5388c39e3cc847526a96dd032a34a20e789308a9b94b9e94df.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-6b327df84d2b3b31d02db35fd5d91a8d67abcdb743a619ed0d1b9c16206a3c20.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-6bd3094be764e6378fe52b5bb533260b49ce42daaf9dbe8075daf0a8e0ad9914.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-6c0d03b1fbe6f47546bc34c6b2eab01cb2c55bf86d2c8c99abb1b7ca21cf75c0.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-6c46fb3d51aeb069c09ff0cae3ea82f1af696fcc8f7484eaf255d5311589ee39.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-6c6b8045f9dd7bdb9ada0d71974f28f7b515cf894e63fc95165c9211f71daa36.json (100%) create mode 100644 .sqlx/query-6cfc59d2fc039c706f30ae91b7d9d0c658093dede5eb61489205aa751ad5b8ec.json rename {core/lib/dal/.sqlx => .sqlx}/query-6d08cadce92f03b0596e068884854a701146f4b2dc92361f42598a5f9a72c36b.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-6ed5cc84e8097c4febf6c935193f45ef713ef7f9909ce26653faceddb549a383.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-708b2b3e40887e6d8d2d7aa20448a58479487686d774e6b2b1391347bdafe06d.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-72a4f50355324cce85ebaef9fa32826095e9290f0c1157094bd0c44e06012e42.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-73c4bf1e35d49faaab9f7828e80f396f9d193615d70184d4327378a7fc8a5665.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-7560ba61643a8ec8eeefbe6034226313c255ce356a9a4e25c098484d3129c914.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-759b80414b5bcbfe03a0e1e15b37f92c4cfad9313b1461e12242d9becb59e0b0.json (100%) create mode 100644 .sqlx/query-75f6eaa518e7840374c4e44b0788bf92c7f2c55386c8208e3a82b30456abd5b4.json rename {core/lib/dal/.sqlx => .sqlx}/query-75fa24c29dc312cbfa89bf1f4a04a42b4ead6964edd17bfcacb4a828492bba60.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-76cb9ad97b70d584b19af194576dcf2324f380932698386aa8f9751b1fa24a7b.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-77a43830ca31eac85a3c03d87696bf94a013e49bf50ce23f4de4968781df0796.json (100%) create mode 100644 .sqlx/query-7a2145e2234a7896031bbc1ce82715e903f3b399886c2c73e838bd924fed6776.json create mode 100644 .sqlx/query-7a8fffe8d4e3085e00c98f770d250d625f057acf1440b6550375ce5509a816a6.json rename {core/lib/dal/.sqlx => .sqlx}/query-7af52a220958d790bd8b5b06a6e29bf769829991c7d732b13f96bcd1293263ea.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-7b908340613dadbbef46e2160d2d7d59a34f97285e855d5bd67f28f6f4ff1d4e.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-7fccc28bd829bce334f37197ee6b139e943f3ad2a41387b610606a42b7f03283.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-80684de323c47ade36e5a52b99a222806762c640b7de7bf6ecdbf9c3f9842d6f.json (100%) create mode 100644 .sqlx/query-806b82a9effd885ba537a2a1c7d7227120a8279db1875d26ccae5ee0785f46a9.json create mode 100644 .sqlx/query-8182690d0326b820d23fba49d391578db18c29cdca85b8b6aad86fe2a9bf6bbe.json rename {core/lib/dal/.sqlx => .sqlx}/query-81869cb392e9fcbb71ceaa857af77b39429d56072f63b3530c576fb31d7a56f9.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-8255d112d3929fd8355ba2ac9bc87f1fb2f138d9a2231477fcaae148c50dbb8a.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-82ed556807bcd7dd5872c220b3399f9b8679d770b3d1ca755c42ee264342da03.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-83a931ceddf34e1c760649d613f534014b9ab9ca7725e14fb17aa050d9f35eb8.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-8625ca45ce76b8c8633d390e35e0c5f885240d99ea69140a4636b00469d08497.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-86cbe509988c8775bcf738d5cb1edac2f0db60c263c1564b64c717f8ae53e44d.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-877d20634068170326ab5801b69c70aff49e60b7def3d93b9206e650c259168b.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-87b3c0cb253a19ba181406bab5f30198c2651022c65eb9e04125356fcf52ddfc.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-87f27295de500591f01ed76731df2aed7049c3f44a6d25556967ea867e0caf25.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-88c629334e30bb9f5c81c858aa51af63b86e8da6d908d48998012231e1d66a60.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-8903ba5db3f87851c12da133573b4207b69cc48b4ba648e797211631be612b69.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-894665c2c467bd1aaeb331b112c567e2667c63a033baa6b427bd8a0898c08bf2.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-8a7a57ca3d4d65da3e0877c003902c690c33686c889d318b1d64bdd7fa6374db.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-8b9e5d525c026de97c0a732b1adc8dc4bd57e32dfefe1017acba9a15fc14b895.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-8ce0812420fbf35cbbbb0f77f850a54653a5c06c665433718f7ccbbf936f76ca.json (100%) create mode 100644 .sqlx/query-8f5e89ccadd4ea1da7bfe9793a1cbb724af0f0216433a70f19d784e3f2afbc9f.json rename {core/lib/dal/.sqlx => .sqlx}/query-93725851350146c6ec253a59af598fa893dbc9654d15753e4a538f021af67b60.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-95ea0522a3eff6c0d2d0b1c58fd2767e112b95f4d103c27acd6f7ede108bd300.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-966dddc881bfe6fd94b56f587424125a2633ddb6abaa129f2b12389140d83c3f.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-9955b9215096f781442153518c4f0a9676e26f422506545ccc90b7e8a36c8d47.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-99acb091650478fe0feb367b1d64561347b81f8931cc2addefa907c9aa9355e6.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-99d9ee2a0d0450acefa0d9b6c031e30606fddf6631c859ab03819ec476bcf005.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-99dd6f04e82585d81ac23bc4871578179e6269c6ff36877cedee264067ccdafc.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-9c2a5f32c627d3a5c6f1e87b31ce3b0fd67aa1f5f7ea0de673a2fbe1f742db86.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-9cfcde703a48b110791d2ae1103c9317c01d6e35db3b07d0a31f436e7e3c7c40.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-9de5acb3de1b96ff8eb62a6324e8e221a8ef9014458cc7f1dbc60c056a0768a0.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-9ee07a22405279e1e44d47ec5226a834aeac9156b974ff225d734683c1905469.json (100%) create mode 100644 .sqlx/query-9ef2f43e6201cc00a0e1425a666a36532fee1450733849852dfd20e18ded1f03.json rename {core/lib/dal/.sqlx => .sqlx}/query-9f637f37dc3a29ce7412ab4347071bd180729779a0e98ae7a6bb4386aca99716.json (100%) create mode 100644 .sqlx/query-a0e2b2c034cc5f668f0b3d43b94d2e2326d7ace079b095def52723a45b65d3f3.json rename {core/lib/dal/.sqlx => .sqlx}/query-a115f795672787fe25bfaa8fd345094de508af93f4085be7cf3b54b1e8ecdadd.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-a1f4334b6bc1642c1bc0ff4ffa34470914b52e2d714e9deb903d62a5d66f0e04.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-a2d02b71e3dcc29a2c0c20b44392cfbaf09164aecfa5eed8d7142518ad96abea.json (100%) create mode 100644 .sqlx/query-a4861c931e84d897c27f666de1c5ca679a0459a012899a373c67393d30d12601.json rename {core/lib/dal/.sqlx => .sqlx}/query-a48c92f557e5e3a2674ce0dee9cd92f5a547150590b8c221c4065eab11175c7a.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-a4a4b0bfbe05eac100c42a717e8d7cbb0bc526ebe61a07f735d4ab587058b22c.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-a4fcd075b68467bb119e49e6b20a69138206dfeb41f3daff4a3eef1de0bed4e4.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-a74d029f58801ec05d8d14a3b065d93e391600ab9da2e5fd4e8b139ab3d77583.json (100%) create mode 100644 .sqlx/query-a84ee70bec8c03bd51e1c6bad44c9a64904026506914abae2946e5d353d6a604.json rename {core/lib/dal/.sqlx => .sqlx}/query-a8dad09a54cc991706141da557dde45f8f3f3b6cf2e4136f25a1c3ab85d92668.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-a91c23c4d33771122cec2589c6fe2757dbc13be6b30f5840744e5e0569adc66e.json (100%) create mode 100644 .sqlx/query-aa91697157517322b0dbb53dca99f41220c51f58a03c61d6b7789eab0504e320.json rename {core/lib/dal/.sqlx => .sqlx}/query-aac861efb4acb81d5cefa598c822bef649a6db197a36aca098cd8054909d82e9.json (100%) create mode 100644 .sqlx/query-aaf4fb97c95a5290fb1620cd868477dcf21955e0921ba648ba2e751dbfc3cb45.json rename {core/lib/dal/.sqlx => .sqlx}/query-ab68f07dc6f3ec66200df109527877866bbdd1f8c359d97538125756fd05a2ab.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-ac505ae6cfc744b07b52997db789bdc9efc6b89fc0444caf8271edd7dfe4a3bc.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-acc8925d50a4205c0bc8b98647e43a892f5a0427ca2635946c4f9dfafa8bf0db.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-ada54322a28012b1b761f3631c4cd6ca26aa2fa565fcf208b6985f461c1868f2.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-ae204503b0a682a9edc4d7bd7430457113e073b392c569c077d719941d1e37aa.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-aeda34b1beadca72e3e600ea9ae63f436a4f16dbeb784d0d28be392ad96b1c49.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-aefea1f3e87f28791cc547f193a895006e23ec73018f4b4e0a364a741f5c9781.json (100%) create mode 100644 .sqlx/query-af72fabd90eb43fb315f46d7fe9f724216807ffd481cd6f7f19968e42e52b284.json create mode 100644 .sqlx/query-afc24bd1407dba82cd3dc9e7ee71ac4ab2d73bda6022700aeb0a630a2563a4b4.json create mode 100644 .sqlx/query-b17c71983da060f08616e001b42f8dcbcb014b4f808c6232abd9a83354c995ac.json create mode 100644 .sqlx/query-b23ddb16513d69331056b94d466663a9c5ea62ea7c99a77941eb8f05d4454125.json rename {core/lib/dal/.sqlx => .sqlx}/query-b259e6bacd98fa68003e0c87bb28cc77bd2dcee4a04d1afc9779714854623a79.json (100%) create mode 100644 .sqlx/query-b321c5ba22358cbb1fd9c627f1e7b56187686173327498ac75424593547c19c5.json create mode 100644 .sqlx/query-b367ecb1ebee86ec598c4079591f8c12deeca6b8843fe3869cc2b02b30da5de6.json create mode 100644 .sqlx/query-b3d71dbe14bcd94131b29b64dcb49b6370c211a7fc24ad03a5f0e327f9d18040.json create mode 100644 .sqlx/query-b4304b9afb9f838eee1fe95af5fd964d4bb39b9dcd18fb03bc11ce2fb32b7fb3.json rename {core/lib/dal/.sqlx => .sqlx}/query-b452354c888bfc19b5f4012582061b86b1abd915739533f9982fea9d8e21b9e9.json (100%) create mode 100644 .sqlx/query-b4794e6a0c2366d5d95ab373c310103263af3ff5cb6c9dc5df59d3cd2a5e56b4.json rename {core/lib/dal/.sqlx => .sqlx}/query-b47a2961dc2f1347864682c572dd1f5e03924dbf6dd1e824d4aca837e604b7e9.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-b49478150dbc8731c531ef3eddc0c2cfff08e6fef3c3824d20dfdf2d0f73e671.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-b4a0444897b60c7061363a48b2b5386a2fd53492f3df05545edbfb0ec0f059d2.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-b5fd77f515fe168908cc90e44d0697e36b3c2a997038c30553f7727cdfa17361.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-b63ee98d4708c8121a287becb7e1973d18d45c4a200a60d318cdb1222d63ccaa.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-b6837d2deed935da748339538c2c332a122d0b88271ae0127c65c4612b41a619.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-b75e3d2fecbf5d85e93848b7a35180abbd76956e073432af8d8500327b74e488.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-b7bf6999002dd89dc1224468ca79c9a85e3c24fca1bf87905f7fc68fe2ce3276.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-b95b63f22afee3b186da4284a0a1cc9d3523a392fd2011491c6017400f313a16.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-b9f77e6c15f9e635024b73f1fc985c5196c431363802b6b988939c99853b9c97.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-ba1b6c4588ea3d3b138e03a63ef1731a10b332fec68f4a1e56edec4df71ccaff.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-ba2343a38e37d104786f9276d91f67d2ef1428c61ae84003c9b52b03204d1f0a.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-bab1857df66bbef57705ae7796161f3a71f5c6737e08745a37b41b22f4dfd030.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-bd51c9d93b103292f5acbdb266ba4b4e2af48907fa9321064ddb24ac02ab17cd.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-be2c8e525d6867c0d2bd254c73ef1719fd1284af1dbb60ea128550224b52da93.json (100%) create mode 100644 .sqlx/query-bfb80956a18eabf266f5b5a9d62912d57f8eb2a38bdb7884fc812a2897a3a660.json rename {core/lib/dal/.sqlx => .sqlx}/query-bfc84bcf0985446b337467dd1da709dbee508ad6d1cae43e477cf1bef8cb4aa9.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-c02f404ce9b0f92b8052ef6f3eaabda70cb9c56ae3e30dc0a8257e43d6714155.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-c03df29f4661fa47c1412bd82ba379f3b2e9ff1bc6e8e38f473fb4950c8e4b77.json (100%) create mode 100644 .sqlx/query-c10cf20825de4d24300c7ec50d4a653852f7e43670076eb2ebcd49542a870539.json rename {core/lib/dal/.sqlx => .sqlx}/query-c139df45a977290d1c2c7987fb9c1d66aeaeb6e2d36fddcf96775f01716a8a74.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-c14837e92dbb02f2fde7109f524432d865852afe0c60e11a2c1800d30599aa61.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-c195037dcf6031a90f407f652657956350786f3596c7302bdeb8d813f9fbf621.json (100%) create mode 100644 .sqlx/query-c23d5ff919ade5898c6a912780ae899e360650afccb34f5cc301b5cbac4a3d36.json rename {core/lib/dal/.sqlx => .sqlx}/query-c2fe6a5476e69c9588eec73baba9d0e2d571533d4d5f683919987b6f8cbb00e0.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-c36abacc705a2244d423599779e38d60d6e93bcb34fd20422e227714fccbf6b7.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-c37432fabd092fa235fc70e11430fb28594859564a0f888eae748ad1f9fcede5.json (100%) create mode 100644 .sqlx/query-c41312e01aa66897552e8be9acc8d43c31ec7441a7f6c5040e120810ebbb72f7.json rename {core/lib/dal/.sqlx => .sqlx}/query-c4426ae84862e720673485e3b59c116162becce06841476128f864b6028129df.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-c5656667e5610ffb33e7b977ac92b7c4d79cbd404e0267794ec203df0cbb169d.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-c6d523c6ae857022318350a2f210d7eaeeb4549ed59b58f8d984be2a22a80355.json (100%) create mode 100644 .sqlx/query-c706a49ff54f6b424e24d061fe7ac429aac3c030f7e226a1264243d8cdae038d.json rename {core/lib/dal/.sqlx => .sqlx}/query-c809f42a221b18a767e9dd0286503d8bd356f2f9cc249cd8b90caa5a8b5918e3.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-c8155c4e4701fc771918ac1bb4d16f8cc32e365e2ffbd17dc99885de427f2777.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-c9e05ebc7b61c1f409c330bc110bed26c831730944237b74bed98869c83b3ca5.json (100%) create mode 100644 .sqlx/query-ca9d06141265b8524ee28c55569cb21a635037d89ce24dd3ad58ffaadb59594a.json rename {core/lib/dal/.sqlx => .sqlx}/query-cb0a9f6137fb6bee5d17d644714b3b22ea2cd184932fcd59f5931239c7a78003.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-cb98d84fc34af1e4a4c2f427c5bb4afd384063ae394a847b26304dd18d490ab4.json (100%) create mode 100644 .sqlx/query-ce5779092feb8a3d3e2c5e395783e67f08f2ead5f55bfb6594e50346bf9cf2ef.json rename {core/lib/dal/.sqlx => .sqlx}/query-cea366a9d0da60bf03c71be26862929e051270056ebf113a657a464f89c7fd57.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-cea9fe027a6a0ada827f23b48ac32432295b2f7ee40bf13522a6edbd236f1970.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-cf8cff1e6d277088519ef7dfbdb1885d320c146cd8fad77c107ef12fa38e6c98.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-d14b52df2cd9f9e484c60ba00383b438f14b68535111cf2cedd363fc646aac99.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-d3b09cbcddf6238b358d32d57678242aad3e9a47400f6d6837a35f4c54a216b9.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-d3f9202d665ef4fcb028dae6484253eb340a21afd7d65ce6d2f523aeded8dfc0.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-d50555b3b7a1feadd34a2fe90b205ed6a7335a7092c7dc2b81337535e4d489d5.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-d6b70256793417a949081899eccf75260c7afaf110870656061a04079c35c2d8.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-d70cfc158e31dd2d5c942d24f81fd17f833fb15b58b0110c7cc566946db98e76.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-d712707e47e143c52330ea6e0513d2839f0f928c06b8020eecec38e895f99b42.json (100%) create mode 100644 .sqlx/query-d7e8eabd7b43ff62838fbc847e4813d2b2d411bd5faf8306cd48db500532b711.json rename {core/lib/dal/.sqlx => .sqlx}/query-d7ed82f0d012f72374edb2ebcec33c83477d65a6f8cb2673f67b3148cd95b436.json (100%) create mode 100644 .sqlx/query-d8e3ee346375e4b6a8b2c73a3827e88abd0f8164c2413dc83c91c29665ca645e.json rename {core/lib/dal/.sqlx => .sqlx}/query-da51a5220c2b964303292592c34e8ee5e54b170de9da863bbdbc79e3f206640b.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-da72486421d60d3d633e19632a8c66fc73c2d4f35a5dc40e117903dba4e7edb2.json (100%) create mode 100644 .sqlx/query-db3e74f0e83ffbf84a6d61e560f2060fbea775dc185f639139fbfd23e4d5f3c6.json rename {core/lib/dal/.sqlx => .sqlx}/query-db41e2480bdef66e1c89347402418128cae1b40ea2ee34b9d5269c12f8b5738a.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-dc16d0fac093a52480b66dfcb5976fb01e6629e8c982c265f2af1d5000090572.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-dc481f59aae632ff6f5fa23f5c5c82627a936f7ea9f6c354eca4bea76fac6b10.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-dd55e46dfa5ba3692d9620088a3550b8db817630d1a9341db4a1f453f12e64fb.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-de3a5a35b111bd831bebe6d9391bf58b311d81c5fc0a6fbaccf204976f76f378.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-dea22358feed1418430505767d03aa4239d3a8be71b47178b4b8fb11fe898b31.json (100%) create mode 100644 .sqlx/query-df00e33809768120e395d8f740770a4e629b2a1cde641e74e4e55bb100df809f.json rename {core/lib/dal/.sqlx => .sqlx}/query-df3256c012f86a9cd3b9260b97be5c6feb8059722149a747c4b6bd46731e2536.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-e073cfdc7a00559994ce04eca15f35d55901fb1e6805f23413ea43e3637540a0.json (100%) create mode 100644 .sqlx/query-e3479d12d9dc97001cf03dc42d9b957e92cd375ec33fe16f855f319ffc0b208e.json rename {core/lib/dal/.sqlx => .sqlx}/query-e673789d5b4a7aae11feccb085bf3f9dd37b771cf76261762ae18fd14cf0efc5.json (100%) create mode 100644 .sqlx/query-e74a34a59e6afda689b0ec9e19071ababa66e4a443fbefbfffca72b7540b075b.json rename {core/lib/dal/.sqlx => .sqlx}/query-e7d47990db585af7cbf096155babe152ead3d4a7f22bc3584803288e8d639c13.json (100%) create mode 100644 .sqlx/query-e9adf5b5a1ab84c20a514a7775f91a9984685eaaaa0a8b223410d560a15a3034.json create mode 100644 .sqlx/query-e9ca863d6e77edd39a9fc55700a6686e655206601854799139c22c017a214744.json rename {core/lib/dal/.sqlx => .sqlx}/query-ea682d41219feda3514336f4c1ae6ecbe96475e83dfed603bd305e72460f52c2.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-ea904aa930d602d33b6fbc1bf1178a8a0ec739f4ddec8ffeb3a87253aeb18d30.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-eab03e888f20020462ede2cd59fc0d68195346daf5f38d102eab1c1b73b0f82f.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-eb9cd837842490dcb8ab8894ccdb1fcdd02ba2ae2104a0ef972fe809bf136425.json (100%) create mode 100644 .sqlx/query-ec04b89218111a5dc8d5ade506ac3465e2211ef3013386feb12d4cc04e0eade9.json create mode 100644 .sqlx/query-edc61e1285bf6d3837acc67af4f15aaade450980719933089824eb8c494d64a4.json rename {core/lib/dal/.sqlx => .sqlx}/query-ef331469f78c6ff68a254a15b55d056cc9bae25bc070c5de8424f88fab20e5ea.json (100%) create mode 100644 .sqlx/query-ef687be83e496d6647e4dfef9eabae63443c51deb818dd0affd1a0949b161737.json rename {core/lib/dal/.sqlx => .sqlx}/query-f012d0922265269746396dac8f25ff66f2c3b2b83d45360818a8782e56aa3d66.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-f1541a8d970d57ed118ee603e7285ec6ec1e522bc058710560ef78e75f94ddac.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-f19c20325298647177a86a3f9c4ae6d629a74f255a31284ce6707d219c9a0510.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-f1a90090c192d68367e799188356efe8d41759bbdcdd6d39db93208f2664f03a.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-f2606e792f08f65d15bdab66a83741e2713748a17c96af5485423bfe9aaa84ec.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-f2f852a340c45ff69cbca42d7c592dfb0d28a797bee69872634f3105d2d51996.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-f3a695b0179ffdacd4baf9eeb6c1fac675dd7b078df61758df382e1038cb4987.json (100%) create mode 100644 .sqlx/query-f4362a61ab05af3d71a3232d2f017db60405a887f9f7fa0ca60aa7fc879ce630.json rename {core/lib/dal/.sqlx => .sqlx}/query-f4e7e2dd109aab2714845b028eba780c75468aa36615bcfcf7f7d8ace23cd1aa.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-f4f400606cd3875ed1be393107dd5509f57ae415719f99c6d523c81c20d2bffb.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-f5854ce2c37bc66d38b05c9fb985618fd95722a77cc44a2e0519f3740191dc75.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-f63586d59264eab7388ad1de823227ecaa45d76d1ba260074898fe57c059a15a.json (100%) create mode 100644 .sqlx/query-f717ca5d0890759496739a678955e6f8b7f88a0894a7f9e27fc26f93997d37c7.json rename {core/lib/dal/.sqlx => .sqlx}/query-f87c50d37f78d6b3c5a752ea88799a1f6ee5a046ece2ef949aee7ab3d2549975.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-f91790ae5cc4b087bf942ba52dd63a1e89945f8d5e0f4da42ecf6313c4f5967e.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-fcc108fd59203644ff86ded0505c7dfb7aad7261e5fc402d845aedc3b91a4e99.json (100%) create mode 100644 .sqlx/query-fcddeb96dcd1611dedb2091c1be304e8a35fd65bf37e976b7106f57c57e70b9b.json rename {core/lib/dal/.sqlx => .sqlx}/query-fdffa5841554286a924b217b5885d9ec9b3f628c3a4cf5e10580ea6e5e3a2429.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-fe06e06c04466429bb85709e6fe8dd6c2ad2793c06071f4a067dcc31306adebc.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-fe501f86f4bf6c5b8ccc2e039a4eb09b538a67d1c39fda052c4f4ddb23ce0084.json (100%) rename {core/lib/dal/.sqlx => .sqlx}/query-fec7b791e371a4c58350b6537065223f4599d4128db588d8645f3d106de5f50b.json (100%) diff --git a/core/lib/dal/.sqlx/query-00220170d8f9e577321a0522337a7db7673811ac181e801a16a7aefc984d60b0.json b/.sqlx/query-00220170d8f9e577321a0522337a7db7673811ac181e801a16a7aefc984d60b0.json similarity index 100% rename from core/lib/dal/.sqlx/query-00220170d8f9e577321a0522337a7db7673811ac181e801a16a7aefc984d60b0.json rename to .sqlx/query-00220170d8f9e577321a0522337a7db7673811ac181e801a16a7aefc984d60b0.json diff --git a/core/lib/dal/.sqlx/query-0034bc1041d9ba7d3c681be6dfc4e7dfacfcf625e057b99924c245de03c2888c.json b/.sqlx/query-0034bc1041d9ba7d3c681be6dfc4e7dfacfcf625e057b99924c245de03c2888c.json similarity index 100% rename from core/lib/dal/.sqlx/query-0034bc1041d9ba7d3c681be6dfc4e7dfacfcf625e057b99924c245de03c2888c.json rename to .sqlx/query-0034bc1041d9ba7d3c681be6dfc4e7dfacfcf625e057b99924c245de03c2888c.json diff --git a/.sqlx/query-00b88ec7fcf40bb18e0018b7c76f6e1df560ab1e8935564355236e90b6147d2f.json b/.sqlx/query-00b88ec7fcf40bb18e0018b7c76f6e1df560ab1e8935564355236e90b6147d2f.json new file mode 100644 index 00000000000..49a533897ce --- /dev/null +++ b/.sqlx/query-00b88ec7fcf40bb18e0018b7c76f6e1df560ab1e8935564355236e90b6147d2f.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE scheduler_witness_jobs_fri\n SET\n status = 'successful',\n updated_at = NOW(),\n time_taken = $1\n WHERE\n l1_batch_number = $2\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Time", + "Int8" + ] + }, + "nullable": [] + }, + "hash": "00b88ec7fcf40bb18e0018b7c76f6e1df560ab1e8935564355236e90b6147d2f" +} diff --git a/core/lib/dal/.sqlx/query-012bed5d34240ed28c331c8515c381d82925556a4801f678b8786235d525d784.json b/.sqlx/query-012bed5d34240ed28c331c8515c381d82925556a4801f678b8786235d525d784.json similarity index 100% rename from core/lib/dal/.sqlx/query-012bed5d34240ed28c331c8515c381d82925556a4801f678b8786235d525d784.json rename to .sqlx/query-012bed5d34240ed28c331c8515c381d82925556a4801f678b8786235d525d784.json diff --git a/core/lib/dal/.sqlx/query-015350f8d729ef490553550a68f07703b2581dda4fe3c00be6c5422c78980c4b.json b/.sqlx/query-015350f8d729ef490553550a68f07703b2581dda4fe3c00be6c5422c78980c4b.json similarity index 100% rename from core/lib/dal/.sqlx/query-015350f8d729ef490553550a68f07703b2581dda4fe3c00be6c5422c78980c4b.json rename to .sqlx/query-015350f8d729ef490553550a68f07703b2581dda4fe3c00be6c5422c78980c4b.json diff --git a/.sqlx/query-01ac5343beb09ec5bd45b39d560e57a83f37da8999849377dfad60b44989be39.json b/.sqlx/query-01ac5343beb09ec5bd45b39d560e57a83f37da8999849377dfad60b44989be39.json new file mode 100644 index 00000000000..8ca4bb693c2 --- /dev/null +++ b/.sqlx/query-01ac5343beb09ec5bd45b39d560e57a83f37da8999849377dfad60b44989be39.json @@ -0,0 +1,107 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE node_aggregation_witness_jobs_fri\n SET\n status = 'in_progress',\n attempts = attempts + 1,\n updated_at = NOW(),\n processing_started_at = NOW(),\n picked_by = $2\n WHERE\n id = (\n SELECT\n id\n FROM\n node_aggregation_witness_jobs_fri\n WHERE\n status = 'queued'\n AND protocol_version = ANY ($1)\n ORDER BY\n l1_batch_number ASC,\n depth ASC,\n id ASC\n LIMIT\n 1\n FOR UPDATE\n SKIP LOCKED\n )\n RETURNING\n node_aggregation_witness_jobs_fri.*\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "l1_batch_number", + "type_info": "Int8" + }, + { + "ordinal": 2, + "name": "circuit_id", + "type_info": "Int2" + }, + { + "ordinal": 3, + "name": "depth", + "type_info": "Int4" + }, + { + "ordinal": 4, + "name": "status", + "type_info": "Text" + }, + { + "ordinal": 5, + "name": "attempts", + "type_info": "Int2" + }, + { + "ordinal": 6, + "name": "aggregations_url", + "type_info": "Text" + }, + { + "ordinal": 7, + "name": "processing_started_at", + "type_info": "Timestamp" + }, + { + "ordinal": 8, + "name": "time_taken", + "type_info": "Time" + }, + { + "ordinal": 9, + "name": "error", + "type_info": "Text" + }, + { + "ordinal": 10, + "name": "created_at", + "type_info": "Timestamp" + }, + { + "ordinal": 11, + "name": "updated_at", + "type_info": "Timestamp" + }, + { + "ordinal": 12, + "name": "number_of_dependent_jobs", + "type_info": "Int4" + }, + { + "ordinal": 13, + "name": "protocol_version", + "type_info": "Int4" + }, + { + "ordinal": 14, + "name": "picked_by", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Int4Array", + "Text" + ] + }, + "nullable": [ + false, + false, + false, + false, + false, + false, + true, + true, + true, + true, + false, + false, + true, + true, + true + ] + }, + "hash": "01ac5343beb09ec5bd45b39d560e57a83f37da8999849377dfad60b44989be39" +} diff --git a/core/lib/dal/.sqlx/query-01f72dfc1eee6360a8ef7809874a1b4ba7fe355ebc02ea49a054aa073ce324ba.json b/.sqlx/query-01f72dfc1eee6360a8ef7809874a1b4ba7fe355ebc02ea49a054aa073ce324ba.json similarity index 100% rename from core/lib/dal/.sqlx/query-01f72dfc1eee6360a8ef7809874a1b4ba7fe355ebc02ea49a054aa073ce324ba.json rename to .sqlx/query-01f72dfc1eee6360a8ef7809874a1b4ba7fe355ebc02ea49a054aa073ce324ba.json diff --git a/core/lib/dal/.sqlx/query-026ab7dd7407f10074a2966b5eac2563a3e061bcc6505d8c295b1b2517f85f1b.json b/.sqlx/query-026ab7dd7407f10074a2966b5eac2563a3e061bcc6505d8c295b1b2517f85f1b.json similarity index 100% rename from core/lib/dal/.sqlx/query-026ab7dd7407f10074a2966b5eac2563a3e061bcc6505d8c295b1b2517f85f1b.json rename to .sqlx/query-026ab7dd7407f10074a2966b5eac2563a3e061bcc6505d8c295b1b2517f85f1b.json diff --git a/core/lib/dal/.sqlx/query-03c585c7e9f918e608757496088c7e3b6bdb2a08149d5f443310607d3c78988c.json b/.sqlx/query-03c585c7e9f918e608757496088c7e3b6bdb2a08149d5f443310607d3c78988c.json similarity index 100% rename from core/lib/dal/.sqlx/query-03c585c7e9f918e608757496088c7e3b6bdb2a08149d5f443310607d3c78988c.json rename to .sqlx/query-03c585c7e9f918e608757496088c7e3b6bdb2a08149d5f443310607d3c78988c.json diff --git a/core/lib/dal/.sqlx/query-040eaa878c3473f5edc73b77e572b5ea100f59295cd693d14ee0d5ee089c7981.json b/.sqlx/query-040eaa878c3473f5edc73b77e572b5ea100f59295cd693d14ee0d5ee089c7981.json similarity index 100% rename from core/lib/dal/.sqlx/query-040eaa878c3473f5edc73b77e572b5ea100f59295cd693d14ee0d5ee089c7981.json rename to .sqlx/query-040eaa878c3473f5edc73b77e572b5ea100f59295cd693d14ee0d5ee089c7981.json diff --git a/core/lib/dal/.sqlx/query-04fbbd198108d2614a3b29fa795994723ebe57b3ed209069bd3db906921ef1a3.json b/.sqlx/query-04fbbd198108d2614a3b29fa795994723ebe57b3ed209069bd3db906921ef1a3.json similarity index 100% rename from core/lib/dal/.sqlx/query-04fbbd198108d2614a3b29fa795994723ebe57b3ed209069bd3db906921ef1a3.json rename to .sqlx/query-04fbbd198108d2614a3b29fa795994723ebe57b3ed209069bd3db906921ef1a3.json diff --git a/core/lib/dal/.sqlx/query-0535c87d0ae694d5f10e529742ba2803cd147dec7450d1f81a41aea8dcf3be93.json b/.sqlx/query-0535c87d0ae694d5f10e529742ba2803cd147dec7450d1f81a41aea8dcf3be93.json similarity index 100% rename from core/lib/dal/.sqlx/query-0535c87d0ae694d5f10e529742ba2803cd147dec7450d1f81a41aea8dcf3be93.json rename to .sqlx/query-0535c87d0ae694d5f10e529742ba2803cd147dec7450d1f81a41aea8dcf3be93.json diff --git a/core/lib/dal/.sqlx/query-06ce3e5c10d6ae327fc2e45fd9080112ce326bcf4bb38a00366bd24e38881bb2.json b/.sqlx/query-06ce3e5c10d6ae327fc2e45fd9080112ce326bcf4bb38a00366bd24e38881bb2.json similarity index 100% rename from core/lib/dal/.sqlx/query-06ce3e5c10d6ae327fc2e45fd9080112ce326bcf4bb38a00366bd24e38881bb2.json rename to .sqlx/query-06ce3e5c10d6ae327fc2e45fd9080112ce326bcf4bb38a00366bd24e38881bb2.json diff --git a/core/lib/dal/.sqlx/query-07310d96fc7e258154ad510684e33d196907ebd599e926d305e5ef9f26afa2fa.json b/.sqlx/query-07310d96fc7e258154ad510684e33d196907ebd599e926d305e5ef9f26afa2fa.json similarity index 100% rename from core/lib/dal/.sqlx/query-07310d96fc7e258154ad510684e33d196907ebd599e926d305e5ef9f26afa2fa.json rename to .sqlx/query-07310d96fc7e258154ad510684e33d196907ebd599e926d305e5ef9f26afa2fa.json diff --git a/core/lib/dal/.sqlx/query-083991abb3f1c2183d1bd1fb2ad4710daa723e2d9a23317c347f6081465c3643.json b/.sqlx/query-083991abb3f1c2183d1bd1fb2ad4710daa723e2d9a23317c347f6081465c3643.json similarity index 100% rename from core/lib/dal/.sqlx/query-083991abb3f1c2183d1bd1fb2ad4710daa723e2d9a23317c347f6081465c3643.json rename to .sqlx/query-083991abb3f1c2183d1bd1fb2ad4710daa723e2d9a23317c347f6081465c3643.json diff --git a/core/lib/dal/.sqlx/query-08737d11b3e5067a2468013ec6e5d95fc47eb6bedc32f4d824aac9b2b6f96faf.json b/.sqlx/query-08737d11b3e5067a2468013ec6e5d95fc47eb6bedc32f4d824aac9b2b6f96faf.json similarity index 100% rename from core/lib/dal/.sqlx/query-08737d11b3e5067a2468013ec6e5d95fc47eb6bedc32f4d824aac9b2b6f96faf.json rename to .sqlx/query-08737d11b3e5067a2468013ec6e5d95fc47eb6bedc32f4d824aac9b2b6f96faf.json diff --git a/core/lib/dal/.sqlx/query-08e59ed8e2fd1a74e19d8bf0d131e4ee6682a89fb86f3b715a240805d44e6d87.json b/.sqlx/query-08e59ed8e2fd1a74e19d8bf0d131e4ee6682a89fb86f3b715a240805d44e6d87.json similarity index 100% rename from core/lib/dal/.sqlx/query-08e59ed8e2fd1a74e19d8bf0d131e4ee6682a89fb86f3b715a240805d44e6d87.json rename to .sqlx/query-08e59ed8e2fd1a74e19d8bf0d131e4ee6682a89fb86f3b715a240805d44e6d87.json diff --git a/core/lib/dal/.sqlx/query-0914f0ad03d6a8c55d287f94917c6f03469d78bf4f45f5fd1eaf37171db2f04a.json b/.sqlx/query-0914f0ad03d6a8c55d287f94917c6f03469d78bf4f45f5fd1eaf37171db2f04a.json similarity index 100% rename from core/lib/dal/.sqlx/query-0914f0ad03d6a8c55d287f94917c6f03469d78bf4f45f5fd1eaf37171db2f04a.json rename to .sqlx/query-0914f0ad03d6a8c55d287f94917c6f03469d78bf4f45f5fd1eaf37171db2f04a.json diff --git a/core/lib/dal/.sqlx/query-0a53fc3c90a14038c9f3f32c3e2e5f7edcafa4fc6757264a96a46dbf7dd1f9cc.json b/.sqlx/query-0a53fc3c90a14038c9f3f32c3e2e5f7edcafa4fc6757264a96a46dbf7dd1f9cc.json similarity index 100% rename from core/lib/dal/.sqlx/query-0a53fc3c90a14038c9f3f32c3e2e5f7edcafa4fc6757264a96a46dbf7dd1f9cc.json rename to .sqlx/query-0a53fc3c90a14038c9f3f32c3e2e5f7edcafa4fc6757264a96a46dbf7dd1f9cc.json diff --git a/core/lib/dal/.sqlx/query-0bdcf87f6910c7222b621f76f71bc6e326e15dca141050bc9d7dacae98a430e8.json b/.sqlx/query-0bdcf87f6910c7222b621f76f71bc6e326e15dca141050bc9d7dacae98a430e8.json similarity index 100% rename from core/lib/dal/.sqlx/query-0bdcf87f6910c7222b621f76f71bc6e326e15dca141050bc9d7dacae98a430e8.json rename to .sqlx/query-0bdcf87f6910c7222b621f76f71bc6e326e15dca141050bc9d7dacae98a430e8.json diff --git a/core/lib/dal/.sqlx/query-0c899c68886f76a232ffac0454cdfbf962636347864fc365fafa46c7a2da5f30.json b/.sqlx/query-0c899c68886f76a232ffac0454cdfbf962636347864fc365fafa46c7a2da5f30.json similarity index 100% rename from core/lib/dal/.sqlx/query-0c899c68886f76a232ffac0454cdfbf962636347864fc365fafa46c7a2da5f30.json rename to .sqlx/query-0c899c68886f76a232ffac0454cdfbf962636347864fc365fafa46c7a2da5f30.json diff --git a/core/lib/dal/.sqlx/query-0c95fbfb3a816bd49fd06e3a4f0a52daa202279bf612a9278f663deb78bc6e41.json b/.sqlx/query-0c95fbfb3a816bd49fd06e3a4f0a52daa202279bf612a9278f663deb78bc6e41.json similarity index 100% rename from core/lib/dal/.sqlx/query-0c95fbfb3a816bd49fd06e3a4f0a52daa202279bf612a9278f663deb78bc6e41.json rename to .sqlx/query-0c95fbfb3a816bd49fd06e3a4f0a52daa202279bf612a9278f663deb78bc6e41.json diff --git a/.sqlx/query-0d13b8947b1bafa9e5bc6fdc70a986511265c541d81b1d21f0a751ae1399c626.json b/.sqlx/query-0d13b8947b1bafa9e5bc6fdc70a986511265c541d81b1d21f0a751ae1399c626.json new file mode 100644 index 00000000000..8b5605f078a --- /dev/null +++ b/.sqlx/query-0d13b8947b1bafa9e5bc6fdc70a986511265c541d81b1d21f0a751ae1399c626.json @@ -0,0 +1,72 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE gpu_prover_queue_fri\n SET\n instance_status = 'reserved',\n updated_at = NOW(),\n processing_started_at = NOW()\n WHERE\n id IN (\n SELECT\n id\n FROM\n gpu_prover_queue_fri\n WHERE\n specialized_prover_group_id = $2\n AND zone = $3\n AND (\n instance_status = 'available'\n OR (\n instance_status = 'reserved'\n AND processing_started_at < NOW() - $1::INTERVAL\n )\n )\n ORDER BY\n updated_at ASC\n LIMIT\n 1\n FOR UPDATE\n SKIP LOCKED\n )\n RETURNING\n gpu_prover_queue_fri.*\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "instance_host", + "type_info": "Inet" + }, + { + "ordinal": 2, + "name": "instance_port", + "type_info": "Int4" + }, + { + "ordinal": 3, + "name": "instance_status", + "type_info": "Text" + }, + { + "ordinal": 4, + "name": "specialized_prover_group_id", + "type_info": "Int2" + }, + { + "ordinal": 5, + "name": "zone", + "type_info": "Text" + }, + { + "ordinal": 6, + "name": "created_at", + "type_info": "Timestamp" + }, + { + "ordinal": 7, + "name": "updated_at", + "type_info": "Timestamp" + }, + { + "ordinal": 8, + "name": "processing_started_at", + "type_info": "Timestamp" + } + ], + "parameters": { + "Left": [ + "Interval", + "Int2", + "Text" + ] + }, + "nullable": [ + false, + false, + false, + false, + false, + true, + false, + false, + true + ] + }, + "hash": "0d13b8947b1bafa9e5bc6fdc70a986511265c541d81b1d21f0a751ae1399c626" +} diff --git a/core/lib/dal/.sqlx/query-0f381418ac79762b4573bf5b440b96b711e8667df7a3c87a5ddf062842a0da6c.json b/.sqlx/query-0f381418ac79762b4573bf5b440b96b711e8667df7a3c87a5ddf062842a0da6c.json similarity index 100% rename from core/lib/dal/.sqlx/query-0f381418ac79762b4573bf5b440b96b711e8667df7a3c87a5ddf062842a0da6c.json rename to .sqlx/query-0f381418ac79762b4573bf5b440b96b711e8667df7a3c87a5ddf062842a0da6c.json diff --git a/core/lib/dal/.sqlx/query-10959c91f01ce0da196f4c6eaf0661a097308d9f81024fdfef24a14418202730.json b/.sqlx/query-10959c91f01ce0da196f4c6eaf0661a097308d9f81024fdfef24a14418202730.json similarity index 100% rename from core/lib/dal/.sqlx/query-10959c91f01ce0da196f4c6eaf0661a097308d9f81024fdfef24a14418202730.json rename to .sqlx/query-10959c91f01ce0da196f4c6eaf0661a097308d9f81024fdfef24a14418202730.json diff --git a/core/lib/dal/.sqlx/query-10b8981f7aa47ce5d3507571af45f7cef0d50c4938105684971e8adc86bb6366.json b/.sqlx/query-10b8981f7aa47ce5d3507571af45f7cef0d50c4938105684971e8adc86bb6366.json similarity index 100% rename from core/lib/dal/.sqlx/query-10b8981f7aa47ce5d3507571af45f7cef0d50c4938105684971e8adc86bb6366.json rename to .sqlx/query-10b8981f7aa47ce5d3507571af45f7cef0d50c4938105684971e8adc86bb6366.json diff --git a/core/lib/dal/.sqlx/query-11af69fc254e54449b64c086667700a95e4c37a7a18531b3cdf120394cb055b9.json b/.sqlx/query-11af69fc254e54449b64c086667700a95e4c37a7a18531b3cdf120394cb055b9.json similarity index 100% rename from core/lib/dal/.sqlx/query-11af69fc254e54449b64c086667700a95e4c37a7a18531b3cdf120394cb055b9.json rename to .sqlx/query-11af69fc254e54449b64c086667700a95e4c37a7a18531b3cdf120394cb055b9.json diff --git a/.sqlx/query-12ab208f416e2875f89e558f0d4aff3a06b7a9c1866132d62e4449fa9436c7c4.json b/.sqlx/query-12ab208f416e2875f89e558f0d4aff3a06b7a9c1866132d62e4449fa9436c7c4.json new file mode 100644 index 00000000000..5441bce3e01 --- /dev/null +++ b/.sqlx/query-12ab208f416e2875f89e558f0d4aff3a06b7a9c1866132d62e4449fa9436c7c4.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE node_aggregation_witness_jobs_fri\n SET\n status = 'failed',\n error = $1,\n updated_at = NOW()\n WHERE\n id = $2\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Int8" + ] + }, + "nullable": [] + }, + "hash": "12ab208f416e2875f89e558f0d4aff3a06b7a9c1866132d62e4449fa9436c7c4" +} diff --git a/core/lib/dal/.sqlx/query-136569d7eb4037fd77e0fac2246c68e8e15a831f1a45dc3b2240d5c6809d5ef2.json b/.sqlx/query-136569d7eb4037fd77e0fac2246c68e8e15a831f1a45dc3b2240d5c6809d5ef2.json similarity index 100% rename from core/lib/dal/.sqlx/query-136569d7eb4037fd77e0fac2246c68e8e15a831f1a45dc3b2240d5c6809d5ef2.json rename to .sqlx/query-136569d7eb4037fd77e0fac2246c68e8e15a831f1a45dc3b2240d5c6809d5ef2.json diff --git a/core/lib/dal/.sqlx/query-14c0caee921199f799400dbea719ed36420c15081ff5f60da0a1c769c2dbc542.json b/.sqlx/query-14c0caee921199f799400dbea719ed36420c15081ff5f60da0a1c769c2dbc542.json similarity index 100% rename from core/lib/dal/.sqlx/query-14c0caee921199f799400dbea719ed36420c15081ff5f60da0a1c769c2dbc542.json rename to .sqlx/query-14c0caee921199f799400dbea719ed36420c15081ff5f60da0a1c769c2dbc542.json diff --git a/core/lib/dal/.sqlx/query-14e5a66ee9a2b7bc56e41c3925150dd2778c0da29697d31710e8b507629ba5c4.json b/.sqlx/query-14e5a66ee9a2b7bc56e41c3925150dd2778c0da29697d31710e8b507629ba5c4.json similarity index 100% rename from core/lib/dal/.sqlx/query-14e5a66ee9a2b7bc56e41c3925150dd2778c0da29697d31710e8b507629ba5c4.json rename to .sqlx/query-14e5a66ee9a2b7bc56e41c3925150dd2778c0da29697d31710e8b507629ba5c4.json diff --git a/.sqlx/query-15858168fea6808c6d59d0e6d8f28a20420763a3a22899ad0e5f4b953b615a9e.json b/.sqlx/query-15858168fea6808c6d59d0e6d8f28a20420763a3a22899ad0e5f4b953b615a9e.json new file mode 100644 index 00000000000..ac0e433a919 --- /dev/null +++ b/.sqlx/query-15858168fea6808c6d59d0e6d8f28a20420763a3a22899ad0e5f4b953b615a9e.json @@ -0,0 +1,25 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n id\n FROM\n prover_fri_protocol_versions\n WHERE\n recursion_circuits_set_vks_hash = $1\n AND recursion_leaf_level_vk_hash = $2\n AND recursion_node_level_vk_hash = $3\n AND recursion_scheduler_level_vk_hash = $4\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Bytea", + "Bytea", + "Bytea", + "Bytea" + ] + }, + "nullable": [ + false + ] + }, + "hash": "15858168fea6808c6d59d0e6d8f28a20420763a3a22899ad0e5f4b953b615a9e" +} diff --git a/core/lib/dal/.sqlx/query-1689c212d411ebd99a22210519ea2d505a1aabf52ff4136d2ed1b39c70dd1632.json b/.sqlx/query-1689c212d411ebd99a22210519ea2d505a1aabf52ff4136d2ed1b39c70dd1632.json similarity index 100% rename from core/lib/dal/.sqlx/query-1689c212d411ebd99a22210519ea2d505a1aabf52ff4136d2ed1b39c70dd1632.json rename to .sqlx/query-1689c212d411ebd99a22210519ea2d505a1aabf52ff4136d2ed1b39c70dd1632.json diff --git a/core/lib/dal/.sqlx/query-1766c0a21ba5918dd08f4babd8dbfdf10fb1cb43781219586c169fb976204331.json b/.sqlx/query-1766c0a21ba5918dd08f4babd8dbfdf10fb1cb43781219586c169fb976204331.json similarity index 100% rename from core/lib/dal/.sqlx/query-1766c0a21ba5918dd08f4babd8dbfdf10fb1cb43781219586c169fb976204331.json rename to .sqlx/query-1766c0a21ba5918dd08f4babd8dbfdf10fb1cb43781219586c169fb976204331.json diff --git a/core/lib/dal/.sqlx/query-1862d3a78e4e9068df1b8ce3bbe9f3f0b5d629fdb5c36ea1bfb93ed246be968e.json b/.sqlx/query-1862d3a78e4e9068df1b8ce3bbe9f3f0b5d629fdb5c36ea1bfb93ed246be968e.json similarity index 100% rename from core/lib/dal/.sqlx/query-1862d3a78e4e9068df1b8ce3bbe9f3f0b5d629fdb5c36ea1bfb93ed246be968e.json rename to .sqlx/query-1862d3a78e4e9068df1b8ce3bbe9f3f0b5d629fdb5c36ea1bfb93ed246be968e.json diff --git a/core/lib/dal/.sqlx/query-19314d74e94b610e2da6d728ca37ea964610e131d45f720f7a7b2a130fe9ed89.json b/.sqlx/query-19314d74e94b610e2da6d728ca37ea964610e131d45f720f7a7b2a130fe9ed89.json similarity index 100% rename from core/lib/dal/.sqlx/query-19314d74e94b610e2da6d728ca37ea964610e131d45f720f7a7b2a130fe9ed89.json rename to .sqlx/query-19314d74e94b610e2da6d728ca37ea964610e131d45f720f7a7b2a130fe9ed89.json diff --git a/core/lib/dal/.sqlx/query-19545806b8f772075096e69f8665d98a3d9f7df162ae22a98c3c7620fcd13bd2.json b/.sqlx/query-19545806b8f772075096e69f8665d98a3d9f7df162ae22a98c3c7620fcd13bd2.json similarity index 100% rename from core/lib/dal/.sqlx/query-19545806b8f772075096e69f8665d98a3d9f7df162ae22a98c3c7620fcd13bd2.json rename to .sqlx/query-19545806b8f772075096e69f8665d98a3d9f7df162ae22a98c3c7620fcd13bd2.json diff --git a/core/lib/dal/.sqlx/query-19b89495be8aa735db039ccc8a262786c58e54f132588c48f07d9537cf21d3ed.json b/.sqlx/query-19b89495be8aa735db039ccc8a262786c58e54f132588c48f07d9537cf21d3ed.json similarity index 100% rename from core/lib/dal/.sqlx/query-19b89495be8aa735db039ccc8a262786c58e54f132588c48f07d9537cf21d3ed.json rename to .sqlx/query-19b89495be8aa735db039ccc8a262786c58e54f132588c48f07d9537cf21d3ed.json diff --git a/core/lib/dal/.sqlx/query-1b4ebbfc96b4fd66ecbe64a6be80a01a6c7cbe9297cbb55d42533fddc18719b6.json b/.sqlx/query-1b4ebbfc96b4fd66ecbe64a6be80a01a6c7cbe9297cbb55d42533fddc18719b6.json similarity index 100% rename from core/lib/dal/.sqlx/query-1b4ebbfc96b4fd66ecbe64a6be80a01a6c7cbe9297cbb55d42533fddc18719b6.json rename to .sqlx/query-1b4ebbfc96b4fd66ecbe64a6be80a01a6c7cbe9297cbb55d42533fddc18719b6.json diff --git a/.sqlx/query-1bc6597117db032b87df33040d61610ffa7f169d560e79e89b99eedf681c6773.json b/.sqlx/query-1bc6597117db032b87df33040d61610ffa7f169d560e79e89b99eedf681c6773.json new file mode 100644 index 00000000000..0351691c395 --- /dev/null +++ b/.sqlx/query-1bc6597117db032b87df33040d61610ffa7f169d560e79e89b99eedf681c6773.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "\n INSERT INTO\n scheduler_witness_jobs_fri (\n l1_batch_number,\n scheduler_partial_input_blob_url,\n protocol_version,\n status,\n created_at,\n updated_at\n )\n VALUES\n ($1, $2, $3, 'waiting_for_proofs', NOW(), NOW())\n ON CONFLICT (l1_batch_number) DO\n UPDATE\n SET\n updated_at = NOW()\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8", + "Text", + "Int4" + ] + }, + "nullable": [] + }, + "hash": "1bc6597117db032b87df33040d61610ffa7f169d560e79e89b99eedf681c6773" +} diff --git a/core/lib/dal/.sqlx/query-1c14d2def60fa5ff91788ddb55e68cee71742b732112038a642e2a07305053c2.json b/.sqlx/query-1c14d2def60fa5ff91788ddb55e68cee71742b732112038a642e2a07305053c2.json similarity index 100% rename from core/lib/dal/.sqlx/query-1c14d2def60fa5ff91788ddb55e68cee71742b732112038a642e2a07305053c2.json rename to .sqlx/query-1c14d2def60fa5ff91788ddb55e68cee71742b732112038a642e2a07305053c2.json diff --git a/core/lib/dal/.sqlx/query-1c994d418ada78586de829fc2d34d26e48e968c79834858c98b7a7f9dfc81910.json b/.sqlx/query-1c994d418ada78586de829fc2d34d26e48e968c79834858c98b7a7f9dfc81910.json similarity index 100% rename from core/lib/dal/.sqlx/query-1c994d418ada78586de829fc2d34d26e48e968c79834858c98b7a7f9dfc81910.json rename to .sqlx/query-1c994d418ada78586de829fc2d34d26e48e968c79834858c98b7a7f9dfc81910.json diff --git a/core/lib/dal/.sqlx/query-1dcb3afb0c1947f92981f61d95c099c4591ce3f8d51f3df99db0165e086f96af.json b/.sqlx/query-1dcb3afb0c1947f92981f61d95c099c4591ce3f8d51f3df99db0165e086f96af.json similarity index 100% rename from core/lib/dal/.sqlx/query-1dcb3afb0c1947f92981f61d95c099c4591ce3f8d51f3df99db0165e086f96af.json rename to .sqlx/query-1dcb3afb0c1947f92981f61d95c099c4591ce3f8d51f3df99db0165e086f96af.json diff --git a/core/lib/dal/.sqlx/query-1ea37ef1c3df72e5e9c50cfa1675fc7f60618209d0132e7937a1347b7e94b212.json b/.sqlx/query-1ea37ef1c3df72e5e9c50cfa1675fc7f60618209d0132e7937a1347b7e94b212.json similarity index 100% rename from core/lib/dal/.sqlx/query-1ea37ef1c3df72e5e9c50cfa1675fc7f60618209d0132e7937a1347b7e94b212.json rename to .sqlx/query-1ea37ef1c3df72e5e9c50cfa1675fc7f60618209d0132e7937a1347b7e94b212.json diff --git a/core/lib/dal/.sqlx/query-1ed2d7e5e98b15420a21650809d710ce910d0c9138d85cb55e16459c757dea03.json b/.sqlx/query-1ed2d7e5e98b15420a21650809d710ce910d0c9138d85cb55e16459c757dea03.json similarity index 100% rename from core/lib/dal/.sqlx/query-1ed2d7e5e98b15420a21650809d710ce910d0c9138d85cb55e16459c757dea03.json rename to .sqlx/query-1ed2d7e5e98b15420a21650809d710ce910d0c9138d85cb55e16459c757dea03.json diff --git a/core/lib/dal/.sqlx/query-1f46524410ce0f193dc6547499bde995ddddc621ee2149f08f905af2d8aadd03.json b/.sqlx/query-1f46524410ce0f193dc6547499bde995ddddc621ee2149f08f905af2d8aadd03.json similarity index 100% rename from core/lib/dal/.sqlx/query-1f46524410ce0f193dc6547499bde995ddddc621ee2149f08f905af2d8aadd03.json rename to .sqlx/query-1f46524410ce0f193dc6547499bde995ddddc621ee2149f08f905af2d8aadd03.json diff --git a/core/lib/dal/.sqlx/query-1f4c123edaf6faf50e1c07a797cd1d4794007904fef7a5e837ebfb1b502711a1.json b/.sqlx/query-1f4c123edaf6faf50e1c07a797cd1d4794007904fef7a5e837ebfb1b502711a1.json similarity index 100% rename from core/lib/dal/.sqlx/query-1f4c123edaf6faf50e1c07a797cd1d4794007904fef7a5e837ebfb1b502711a1.json rename to .sqlx/query-1f4c123edaf6faf50e1c07a797cd1d4794007904fef7a5e837ebfb1b502711a1.json diff --git a/core/lib/dal/.sqlx/query-2003dcf7bc807c7d345368538accd9b0128f82306e27e4c7258116082a54ab95.json b/.sqlx/query-2003dcf7bc807c7d345368538accd9b0128f82306e27e4c7258116082a54ab95.json similarity index 100% rename from core/lib/dal/.sqlx/query-2003dcf7bc807c7d345368538accd9b0128f82306e27e4c7258116082a54ab95.json rename to .sqlx/query-2003dcf7bc807c7d345368538accd9b0128f82306e27e4c7258116082a54ab95.json diff --git a/.sqlx/query-204cfd593c62a5a1582215a5f0f4d3648b75bf01ff336bbd77d15f9aa5fd6443.json b/.sqlx/query-204cfd593c62a5a1582215a5f0f4d3648b75bf01ff336bbd77d15f9aa5fd6443.json new file mode 100644 index 00000000000..3927e21728e --- /dev/null +++ b/.sqlx/query-204cfd593c62a5a1582215a5f0f4d3648b75bf01ff336bbd77d15f9aa5fd6443.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE scheduler_dependency_tracker_fri\n SET\n status = 'queuing'\n WHERE\n l1_batch_number IN (\n SELECT\n l1_batch_number\n FROM\n scheduler_dependency_tracker_fri\n WHERE\n status != 'queued'\n AND circuit_1_final_prover_job_id IS NOT NULL\n AND circuit_2_final_prover_job_id IS NOT NULL\n AND circuit_3_final_prover_job_id IS NOT NULL\n AND circuit_4_final_prover_job_id IS NOT NULL\n AND circuit_5_final_prover_job_id IS NOT NULL\n AND circuit_6_final_prover_job_id IS NOT NULL\n AND circuit_7_final_prover_job_id IS NOT NULL\n AND circuit_8_final_prover_job_id IS NOT NULL\n AND circuit_9_final_prover_job_id IS NOT NULL\n AND circuit_10_final_prover_job_id IS NOT NULL\n AND circuit_11_final_prover_job_id IS NOT NULL\n AND circuit_12_final_prover_job_id IS NOT NULL\n AND circuit_13_final_prover_job_id IS NOT NULL\n AND eip_4844_final_prover_job_id_0 IS NOT NULL\n AND eip_4844_final_prover_job_id_1 IS NOT NULL\n )\n RETURNING\n l1_batch_number;\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "l1_batch_number", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false + ] + }, + "hash": "204cfd593c62a5a1582215a5f0f4d3648b75bf01ff336bbd77d15f9aa5fd6443" +} diff --git a/core/lib/dal/.sqlx/query-20f84f9ec21459d8c7ad53241758eeab159533211d2ddbef41e6ff0ba937d04a.json b/.sqlx/query-20f84f9ec21459d8c7ad53241758eeab159533211d2ddbef41e6ff0ba937d04a.json similarity index 100% rename from core/lib/dal/.sqlx/query-20f84f9ec21459d8c7ad53241758eeab159533211d2ddbef41e6ff0ba937d04a.json rename to .sqlx/query-20f84f9ec21459d8c7ad53241758eeab159533211d2ddbef41e6ff0ba937d04a.json diff --git a/core/lib/dal/.sqlx/query-23be43bf705d679ca751c89353716065fcad42c6b621efb3a135a16b477dcfd9.json b/.sqlx/query-23be43bf705d679ca751c89353716065fcad42c6b621efb3a135a16b477dcfd9.json similarity index 100% rename from core/lib/dal/.sqlx/query-23be43bf705d679ca751c89353716065fcad42c6b621efb3a135a16b477dcfd9.json rename to .sqlx/query-23be43bf705d679ca751c89353716065fcad42c6b621efb3a135a16b477dcfd9.json diff --git a/core/lib/dal/.sqlx/query-245dc5bb82cc82df38e4440a7746ca08324bc86a72e4ea85c9c7962a6c8c9e30.json b/.sqlx/query-245dc5bb82cc82df38e4440a7746ca08324bc86a72e4ea85c9c7962a6c8c9e30.json similarity index 100% rename from core/lib/dal/.sqlx/query-245dc5bb82cc82df38e4440a7746ca08324bc86a72e4ea85c9c7962a6c8c9e30.json rename to .sqlx/query-245dc5bb82cc82df38e4440a7746ca08324bc86a72e4ea85c9c7962a6c8c9e30.json diff --git a/core/lib/dal/.sqlx/query-24722ee4ced7f03e60b1b5ecaaa5234d536b064951a67d826ac49b7a3a095a1a.json b/.sqlx/query-24722ee4ced7f03e60b1b5ecaaa5234d536b064951a67d826ac49b7a3a095a1a.json similarity index 100% rename from core/lib/dal/.sqlx/query-24722ee4ced7f03e60b1b5ecaaa5234d536b064951a67d826ac49b7a3a095a1a.json rename to .sqlx/query-24722ee4ced7f03e60b1b5ecaaa5234d536b064951a67d826ac49b7a3a095a1a.json diff --git a/core/lib/dal/.sqlx/query-249cb862d44196cb6dc3945e907717b0dd3cec64b0b29f59b273f1c6952e01da.json b/.sqlx/query-249cb862d44196cb6dc3945e907717b0dd3cec64b0b29f59b273f1c6952e01da.json similarity index 100% rename from core/lib/dal/.sqlx/query-249cb862d44196cb6dc3945e907717b0dd3cec64b0b29f59b273f1c6952e01da.json rename to .sqlx/query-249cb862d44196cb6dc3945e907717b0dd3cec64b0b29f59b273f1c6952e01da.json diff --git a/core/lib/dal/.sqlx/query-2506e9edfd4b41ca1e187909631ae942bab5d71daaed7017e3fa62dc5e42ab0a.json b/.sqlx/query-2506e9edfd4b41ca1e187909631ae942bab5d71daaed7017e3fa62dc5e42ab0a.json similarity index 100% rename from core/lib/dal/.sqlx/query-2506e9edfd4b41ca1e187909631ae942bab5d71daaed7017e3fa62dc5e42ab0a.json rename to .sqlx/query-2506e9edfd4b41ca1e187909631ae942bab5d71daaed7017e3fa62dc5e42ab0a.json diff --git a/core/lib/dal/.sqlx/query-254d17b5402c123cca0edd6fcdc98012b034605dfb4c48379844085b71e9e381.json b/.sqlx/query-254d17b5402c123cca0edd6fcdc98012b034605dfb4c48379844085b71e9e381.json similarity index 100% rename from core/lib/dal/.sqlx/query-254d17b5402c123cca0edd6fcdc98012b034605dfb4c48379844085b71e9e381.json rename to .sqlx/query-254d17b5402c123cca0edd6fcdc98012b034605dfb4c48379844085b71e9e381.json diff --git a/core/lib/dal/.sqlx/query-25646383ecacf72e3f63b5c93a57a66d1e38fb6ca706c2affd4607d77be38de9.json b/.sqlx/query-25646383ecacf72e3f63b5c93a57a66d1e38fb6ca706c2affd4607d77be38de9.json similarity index 100% rename from core/lib/dal/.sqlx/query-25646383ecacf72e3f63b5c93a57a66d1e38fb6ca706c2affd4607d77be38de9.json rename to .sqlx/query-25646383ecacf72e3f63b5c93a57a66d1e38fb6ca706c2affd4607d77be38de9.json diff --git a/core/lib/dal/.sqlx/query-268d27c427a69c5e35e6004380da45f005141b01eac26946251bba68e9276acf.json b/.sqlx/query-268d27c427a69c5e35e6004380da45f005141b01eac26946251bba68e9276acf.json similarity index 100% rename from core/lib/dal/.sqlx/query-268d27c427a69c5e35e6004380da45f005141b01eac26946251bba68e9276acf.json rename to .sqlx/query-268d27c427a69c5e35e6004380da45f005141b01eac26946251bba68e9276acf.json diff --git a/core/lib/dal/.sqlx/query-26bc9b315c4c57bcff1f46da956727233a36e018fe5c0651995b876053a6a054.json b/.sqlx/query-26bc9b315c4c57bcff1f46da956727233a36e018fe5c0651995b876053a6a054.json similarity index 100% rename from core/lib/dal/.sqlx/query-26bc9b315c4c57bcff1f46da956727233a36e018fe5c0651995b876053a6a054.json rename to .sqlx/query-26bc9b315c4c57bcff1f46da956727233a36e018fe5c0651995b876053a6a054.json diff --git a/core/lib/dal/.sqlx/query-26cb272c2a46a267c47681e0f1f07997b7e24682da56f84d812da2b9aeb14ca2.json b/.sqlx/query-26cb272c2a46a267c47681e0f1f07997b7e24682da56f84d812da2b9aeb14ca2.json similarity index 100% rename from core/lib/dal/.sqlx/query-26cb272c2a46a267c47681e0f1f07997b7e24682da56f84d812da2b9aeb14ca2.json rename to .sqlx/query-26cb272c2a46a267c47681e0f1f07997b7e24682da56f84d812da2b9aeb14ca2.json diff --git a/core/lib/dal/.sqlx/query-26e0b7eb1871d94ddc98254fece6381a9c4165e2727542eaeef3bbedd13a4f20.json b/.sqlx/query-26e0b7eb1871d94ddc98254fece6381a9c4165e2727542eaeef3bbedd13a4f20.json similarity index 100% rename from core/lib/dal/.sqlx/query-26e0b7eb1871d94ddc98254fece6381a9c4165e2727542eaeef3bbedd13a4f20.json rename to .sqlx/query-26e0b7eb1871d94ddc98254fece6381a9c4165e2727542eaeef3bbedd13a4f20.json diff --git a/core/lib/dal/.sqlx/query-2737fea02599cdc163854b1395c42d4ef93ca238fd2fbc9155e6d012d0d1e113.json b/.sqlx/query-2737fea02599cdc163854b1395c42d4ef93ca238fd2fbc9155e6d012d0d1e113.json similarity index 100% rename from core/lib/dal/.sqlx/query-2737fea02599cdc163854b1395c42d4ef93ca238fd2fbc9155e6d012d0d1e113.json rename to .sqlx/query-2737fea02599cdc163854b1395c42d4ef93ca238fd2fbc9155e6d012d0d1e113.json diff --git a/core/lib/dal/.sqlx/query-280cf015e40353e2833c0a70b77095596297be0d728a0aa2d9b180fb72de222b.json b/.sqlx/query-280cf015e40353e2833c0a70b77095596297be0d728a0aa2d9b180fb72de222b.json similarity index 100% rename from core/lib/dal/.sqlx/query-280cf015e40353e2833c0a70b77095596297be0d728a0aa2d9b180fb72de222b.json rename to .sqlx/query-280cf015e40353e2833c0a70b77095596297be0d728a0aa2d9b180fb72de222b.json diff --git a/core/lib/dal/.sqlx/query-293258ecb299be5f5e81696d14883f115cd97586bd795ee31f58fc14e56d58cb.json b/.sqlx/query-293258ecb299be5f5e81696d14883f115cd97586bd795ee31f58fc14e56d58cb.json similarity index 100% rename from core/lib/dal/.sqlx/query-293258ecb299be5f5e81696d14883f115cd97586bd795ee31f58fc14e56d58cb.json rename to .sqlx/query-293258ecb299be5f5e81696d14883f115cd97586bd795ee31f58fc14e56d58cb.json diff --git a/core/lib/dal/.sqlx/query-2955e976281f9cbd98b7378c5ab52964b268b93c32fd280c49bf9f932884300d.json b/.sqlx/query-2955e976281f9cbd98b7378c5ab52964b268b93c32fd280c49bf9f932884300d.json similarity index 100% rename from core/lib/dal/.sqlx/query-2955e976281f9cbd98b7378c5ab52964b268b93c32fd280c49bf9f932884300d.json rename to .sqlx/query-2955e976281f9cbd98b7378c5ab52964b268b93c32fd280c49bf9f932884300d.json diff --git a/core/lib/dal/.sqlx/query-2979b6c9ce76a4e6eaaa3f9bad5cf831d63d692111d87282aed8e85df6b0411f.json b/.sqlx/query-2979b6c9ce76a4e6eaaa3f9bad5cf831d63d692111d87282aed8e85df6b0411f.json similarity index 100% rename from core/lib/dal/.sqlx/query-2979b6c9ce76a4e6eaaa3f9bad5cf831d63d692111d87282aed8e85df6b0411f.json rename to .sqlx/query-2979b6c9ce76a4e6eaaa3f9bad5cf831d63d692111d87282aed8e85df6b0411f.json diff --git a/core/lib/dal/.sqlx/query-2a2680234c38904e5c19df45193a8c13d04079683e09c65f7f4e76a9987e2ab4.json b/.sqlx/query-2a2680234c38904e5c19df45193a8c13d04079683e09c65f7f4e76a9987e2ab4.json similarity index 100% rename from core/lib/dal/.sqlx/query-2a2680234c38904e5c19df45193a8c13d04079683e09c65f7f4e76a9987e2ab4.json rename to .sqlx/query-2a2680234c38904e5c19df45193a8c13d04079683e09c65f7f4e76a9987e2ab4.json diff --git a/core/lib/dal/.sqlx/query-2b1136c7781bcdbd9d5d1e6f900fe400fcba3bfc5cf1b7c2b801508f6673d94e.json b/.sqlx/query-2b1136c7781bcdbd9d5d1e6f900fe400fcba3bfc5cf1b7c2b801508f6673d94e.json similarity index 100% rename from core/lib/dal/.sqlx/query-2b1136c7781bcdbd9d5d1e6f900fe400fcba3bfc5cf1b7c2b801508f6673d94e.json rename to .sqlx/query-2b1136c7781bcdbd9d5d1e6f900fe400fcba3bfc5cf1b7c2b801508f6673d94e.json diff --git a/core/lib/dal/.sqlx/query-2b1aa207a058f66265acf2c21b8ed5d8007789c0fc1eab948f6d7339dfb69147.json b/.sqlx/query-2b1aa207a058f66265acf2c21b8ed5d8007789c0fc1eab948f6d7339dfb69147.json similarity index 100% rename from core/lib/dal/.sqlx/query-2b1aa207a058f66265acf2c21b8ed5d8007789c0fc1eab948f6d7339dfb69147.json rename to .sqlx/query-2b1aa207a058f66265acf2c21b8ed5d8007789c0fc1eab948f6d7339dfb69147.json diff --git a/.sqlx/query-2b626262c8003817ee02978f77452554ccfb5b83f00efdc12bed0f60ef439785.json b/.sqlx/query-2b626262c8003817ee02978f77452554ccfb5b83f00efdc12bed0f60ef439785.json new file mode 100644 index 00000000000..db810604cd8 --- /dev/null +++ b/.sqlx/query-2b626262c8003817ee02978f77452554ccfb5b83f00efdc12bed0f60ef439785.json @@ -0,0 +1,25 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n id\n FROM\n prover_jobs_fri\n WHERE\n l1_batch_number = $1\n AND circuit_id = $2\n AND aggregation_round = $3\n AND depth = $4\n AND status = 'successful'\n ORDER BY\n sequence_number ASC;\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Int8", + "Int2", + "Int2", + "Int4" + ] + }, + "nullable": [ + false + ] + }, + "hash": "2b626262c8003817ee02978f77452554ccfb5b83f00efdc12bed0f60ef439785" +} diff --git a/core/lib/dal/.sqlx/query-2c71a819c6ed22a3ab79675840e00f7b1176d59a83520288f5428b67ebd52130.json b/.sqlx/query-2c71a819c6ed22a3ab79675840e00f7b1176d59a83520288f5428b67ebd52130.json similarity index 100% rename from core/lib/dal/.sqlx/query-2c71a819c6ed22a3ab79675840e00f7b1176d59a83520288f5428b67ebd52130.json rename to .sqlx/query-2c71a819c6ed22a3ab79675840e00f7b1176d59a83520288f5428b67ebd52130.json diff --git a/core/lib/dal/.sqlx/query-2c827c1c3cfa3552b90d4746c5df45d57f1f8b2558fdb374bf02e84d3c825a23.json b/.sqlx/query-2c827c1c3cfa3552b90d4746c5df45d57f1f8b2558fdb374bf02e84d3c825a23.json similarity index 100% rename from core/lib/dal/.sqlx/query-2c827c1c3cfa3552b90d4746c5df45d57f1f8b2558fdb374bf02e84d3c825a23.json rename to .sqlx/query-2c827c1c3cfa3552b90d4746c5df45d57f1f8b2558fdb374bf02e84d3c825a23.json diff --git a/core/lib/dal/.sqlx/query-2d0c2e9ec4187641baef8a33229bffc78d92adb3c1e3ca60b12163e38c67047e.json b/.sqlx/query-2d0c2e9ec4187641baef8a33229bffc78d92adb3c1e3ca60b12163e38c67047e.json similarity index 100% rename from core/lib/dal/.sqlx/query-2d0c2e9ec4187641baef8a33229bffc78d92adb3c1e3ca60b12163e38c67047e.json rename to .sqlx/query-2d0c2e9ec4187641baef8a33229bffc78d92adb3c1e3ca60b12163e38c67047e.json diff --git a/core/lib/dal/.sqlx/query-2d1e0f2e043c193052c9cc20f9efeb5f094160627bc09db4bda2dda9a8c11c44.json b/.sqlx/query-2d1e0f2e043c193052c9cc20f9efeb5f094160627bc09db4bda2dda9a8c11c44.json similarity index 100% rename from core/lib/dal/.sqlx/query-2d1e0f2e043c193052c9cc20f9efeb5f094160627bc09db4bda2dda9a8c11c44.json rename to .sqlx/query-2d1e0f2e043c193052c9cc20f9efeb5f094160627bc09db4bda2dda9a8c11c44.json diff --git a/.sqlx/query-2d31fcce581975a82d6156b52e35fb7a093b73727f75e0cb7db9cea480c95f5c.json b/.sqlx/query-2d31fcce581975a82d6156b52e35fb7a093b73727f75e0cb7db9cea480c95f5c.json new file mode 100644 index 00000000000..c4bcd6ea491 --- /dev/null +++ b/.sqlx/query-2d31fcce581975a82d6156b52e35fb7a093b73727f75e0cb7db9cea480c95f5c.json @@ -0,0 +1,35 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE prover_jobs_fri\n SET\n status = 'queued',\n updated_at = NOW(),\n processing_started_at = NOW()\n WHERE\n id IN (\n SELECT\n id\n FROM\n prover_jobs_fri\n WHERE\n (\n status = 'in_progress'\n AND processing_started_at <= NOW() - $1::INTERVAL\n AND attempts < $2\n )\n OR (\n status = 'in_gpu_proof'\n AND processing_started_at <= NOW() - $1::INTERVAL\n AND attempts < $2\n )\n OR (\n status = 'failed'\n AND attempts < $2\n )\n FOR UPDATE\n SKIP LOCKED\n )\n RETURNING\n id,\n status,\n attempts\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "status", + "type_info": "Text" + }, + { + "ordinal": 2, + "name": "attempts", + "type_info": "Int2" + } + ], + "parameters": { + "Left": [ + "Interval", + "Int2" + ] + }, + "nullable": [ + false, + false, + false + ] + }, + "hash": "2d31fcce581975a82d6156b52e35fb7a093b73727f75e0cb7db9cea480c95f5c" +} diff --git a/core/lib/dal/.sqlx/query-2d862097cfae49a1fb28ec0a05176085385c3a79d72f49669b4215a9454323c2.json b/.sqlx/query-2d862097cfae49a1fb28ec0a05176085385c3a79d72f49669b4215a9454323c2.json similarity index 100% rename from core/lib/dal/.sqlx/query-2d862097cfae49a1fb28ec0a05176085385c3a79d72f49669b4215a9454323c2.json rename to .sqlx/query-2d862097cfae49a1fb28ec0a05176085385c3a79d72f49669b4215a9454323c2.json diff --git a/core/lib/dal/.sqlx/query-2dd7dbaeb2572404451e78a96f540e73a2778633bbf9d8e591ec912634639af9.json b/.sqlx/query-2dd7dbaeb2572404451e78a96f540e73a2778633bbf9d8e591ec912634639af9.json similarity index 100% rename from core/lib/dal/.sqlx/query-2dd7dbaeb2572404451e78a96f540e73a2778633bbf9d8e591ec912634639af9.json rename to .sqlx/query-2dd7dbaeb2572404451e78a96f540e73a2778633bbf9d8e591ec912634639af9.json diff --git a/core/lib/dal/.sqlx/query-2ddba807ac8ec5260bf92c77073eb89c728357c0744f209090824695a5d35fa3.json b/.sqlx/query-2ddba807ac8ec5260bf92c77073eb89c728357c0744f209090824695a5d35fa3.json similarity index 100% rename from core/lib/dal/.sqlx/query-2ddba807ac8ec5260bf92c77073eb89c728357c0744f209090824695a5d35fa3.json rename to .sqlx/query-2ddba807ac8ec5260bf92c77073eb89c728357c0744f209090824695a5d35fa3.json diff --git a/core/lib/dal/.sqlx/query-2e5b9ae1b81b0abfe7a962c93b3119a0a60dc9804175b2baf8b45939c74bd583.json b/.sqlx/query-2e5b9ae1b81b0abfe7a962c93b3119a0a60dc9804175b2baf8b45939c74bd583.json similarity index 100% rename from core/lib/dal/.sqlx/query-2e5b9ae1b81b0abfe7a962c93b3119a0a60dc9804175b2baf8b45939c74bd583.json rename to .sqlx/query-2e5b9ae1b81b0abfe7a962c93b3119a0a60dc9804175b2baf8b45939c74bd583.json diff --git a/core/lib/dal/.sqlx/query-2eb25bfcfc1114de825dc4eeb0605d7d1c9e649663f6e9444c4425821d0a5b71.json b/.sqlx/query-2eb25bfcfc1114de825dc4eeb0605d7d1c9e649663f6e9444c4425821d0a5b71.json similarity index 100% rename from core/lib/dal/.sqlx/query-2eb25bfcfc1114de825dc4eeb0605d7d1c9e649663f6e9444c4425821d0a5b71.json rename to .sqlx/query-2eb25bfcfc1114de825dc4eeb0605d7d1c9e649663f6e9444c4425821d0a5b71.json diff --git a/core/lib/dal/.sqlx/query-307f15e00a97440868189f25e4487ed365c0369f94bc457cb162a5c876a123c7.json b/.sqlx/query-307f15e00a97440868189f25e4487ed365c0369f94bc457cb162a5c876a123c7.json similarity index 100% rename from core/lib/dal/.sqlx/query-307f15e00a97440868189f25e4487ed365c0369f94bc457cb162a5c876a123c7.json rename to .sqlx/query-307f15e00a97440868189f25e4487ed365c0369f94bc457cb162a5c876a123c7.json diff --git a/core/lib/dal/.sqlx/query-31f12a8c44124bb2ce31889ac5295f3823926f69cb1d54874878e6d6c301bfd8.json b/.sqlx/query-31f12a8c44124bb2ce31889ac5295f3823926f69cb1d54874878e6d6c301bfd8.json similarity index 100% rename from core/lib/dal/.sqlx/query-31f12a8c44124bb2ce31889ac5295f3823926f69cb1d54874878e6d6c301bfd8.json rename to .sqlx/query-31f12a8c44124bb2ce31889ac5295f3823926f69cb1d54874878e6d6c301bfd8.json diff --git a/core/lib/dal/.sqlx/query-32792c6aee69cb8c8b928a209a3b04ba5868d1897553df85aac15b169ebb0732.json b/.sqlx/query-32792c6aee69cb8c8b928a209a3b04ba5868d1897553df85aac15b169ebb0732.json similarity index 100% rename from core/lib/dal/.sqlx/query-32792c6aee69cb8c8b928a209a3b04ba5868d1897553df85aac15b169ebb0732.json rename to .sqlx/query-32792c6aee69cb8c8b928a209a3b04ba5868d1897553df85aac15b169ebb0732.json diff --git a/.sqlx/query-33d6be45b246523ad76f9ae512322ff6372f63ecadb504a329499b02e7d3550e.json b/.sqlx/query-33d6be45b246523ad76f9ae512322ff6372f63ecadb504a329499b02e7d3550e.json new file mode 100644 index 00000000000..76483cd73d3 --- /dev/null +++ b/.sqlx/query-33d6be45b246523ad76f9ae512322ff6372f63ecadb504a329499b02e7d3550e.json @@ -0,0 +1,26 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE leaf_aggregation_witness_jobs_fri\n SET\n status = 'queued'\n WHERE\n (l1_batch_number, circuit_id) IN (\n SELECT\n prover_jobs_fri.l1_batch_number,\n prover_jobs_fri.circuit_id\n FROM\n prover_jobs_fri\n JOIN leaf_aggregation_witness_jobs_fri lawj ON prover_jobs_fri.l1_batch_number = lawj.l1_batch_number\n AND prover_jobs_fri.circuit_id = lawj.circuit_id\n WHERE\n lawj.status = 'waiting_for_proofs'\n AND prover_jobs_fri.status = 'successful'\n AND prover_jobs_fri.aggregation_round = 0\n GROUP BY\n prover_jobs_fri.l1_batch_number,\n prover_jobs_fri.circuit_id,\n lawj.number_of_basic_circuits\n HAVING\n COUNT(*) = lawj.number_of_basic_circuits\n )\n RETURNING\n l1_batch_number,\n circuit_id;\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "l1_batch_number", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "circuit_id", + "type_info": "Int2" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false, + false + ] + }, + "hash": "33d6be45b246523ad76f9ae512322ff6372f63ecadb504a329499b02e7d3550e" +} diff --git a/core/lib/dal/.sqlx/query-3490fe0b778a03c73111bf8cbf426b0b3185a231bbf0b8b132a1a95bc157e827.json b/.sqlx/query-3490fe0b778a03c73111bf8cbf426b0b3185a231bbf0b8b132a1a95bc157e827.json similarity index 100% rename from core/lib/dal/.sqlx/query-3490fe0b778a03c73111bf8cbf426b0b3185a231bbf0b8b132a1a95bc157e827.json rename to .sqlx/query-3490fe0b778a03c73111bf8cbf426b0b3185a231bbf0b8b132a1a95bc157e827.json diff --git a/core/lib/dal/.sqlx/query-3596a70433e4e27fcda18f37073b51dea32e37cb8c51f1dd5d82c15eddc48e6b.json b/.sqlx/query-3596a70433e4e27fcda18f37073b51dea32e37cb8c51f1dd5d82c15eddc48e6b.json similarity index 100% rename from core/lib/dal/.sqlx/query-3596a70433e4e27fcda18f37073b51dea32e37cb8c51f1dd5d82c15eddc48e6b.json rename to .sqlx/query-3596a70433e4e27fcda18f37073b51dea32e37cb8c51f1dd5d82c15eddc48e6b.json diff --git a/.sqlx/query-35b87a3b7db0af87c6a95e9fe7ef9044ae85b579c7051301b40bd5f94df1f530.json b/.sqlx/query-35b87a3b7db0af87c6a95e9fe7ef9044ae85b579c7051301b40bd5f94df1f530.json new file mode 100644 index 00000000000..a11e154326e --- /dev/null +++ b/.sqlx/query-35b87a3b7db0af87c6a95e9fe7ef9044ae85b579c7051301b40bd5f94df1f530.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE prover_jobs_fri\n SET\n status = 'failed',\n error = $1,\n updated_at = NOW()\n WHERE\n id = $2\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Int8" + ] + }, + "nullable": [] + }, + "hash": "35b87a3b7db0af87c6a95e9fe7ef9044ae85b579c7051301b40bd5f94df1f530" +} diff --git a/core/lib/dal/.sqlx/query-3743b41751a141c21f1674fa581ea7a878613cf62f7fb9b94c5145dc8d1da674.json b/.sqlx/query-3743b41751a141c21f1674fa581ea7a878613cf62f7fb9b94c5145dc8d1da674.json similarity index 100% rename from core/lib/dal/.sqlx/query-3743b41751a141c21f1674fa581ea7a878613cf62f7fb9b94c5145dc8d1da674.json rename to .sqlx/query-3743b41751a141c21f1674fa581ea7a878613cf62f7fb9b94c5145dc8d1da674.json diff --git a/core/lib/dal/.sqlx/query-38a8b00e320b16e99f6ea0e5954e2f7e49cd6600bd3d56cf41795c2c9e082e4c.json b/.sqlx/query-38a8b00e320b16e99f6ea0e5954e2f7e49cd6600bd3d56cf41795c2c9e082e4c.json similarity index 100% rename from core/lib/dal/.sqlx/query-38a8b00e320b16e99f6ea0e5954e2f7e49cd6600bd3d56cf41795c2c9e082e4c.json rename to .sqlx/query-38a8b00e320b16e99f6ea0e5954e2f7e49cd6600bd3d56cf41795c2c9e082e4c.json diff --git a/core/lib/dal/.sqlx/query-39849c30cdfa1827d69313357f92c495462e5aa430fe135d1db1f9bad1e72156.json b/.sqlx/query-39849c30cdfa1827d69313357f92c495462e5aa430fe135d1db1f9bad1e72156.json similarity index 100% rename from core/lib/dal/.sqlx/query-39849c30cdfa1827d69313357f92c495462e5aa430fe135d1db1f9bad1e72156.json rename to .sqlx/query-39849c30cdfa1827d69313357f92c495462e5aa430fe135d1db1f9bad1e72156.json diff --git a/core/lib/dal/.sqlx/query-3b013b93ea4a6766162c9f0c60517a7ffc993cf436ad3aeeae82ed3e330b07bd.json b/.sqlx/query-3b013b93ea4a6766162c9f0c60517a7ffc993cf436ad3aeeae82ed3e330b07bd.json similarity index 100% rename from core/lib/dal/.sqlx/query-3b013b93ea4a6766162c9f0c60517a7ffc993cf436ad3aeeae82ed3e330b07bd.json rename to .sqlx/query-3b013b93ea4a6766162c9f0c60517a7ffc993cf436ad3aeeae82ed3e330b07bd.json diff --git a/core/lib/dal/.sqlx/query-3b3fbcffd2702047045c2f358e8ac77b63879ab97a32eed8392b48cc46116a28.json b/.sqlx/query-3b3fbcffd2702047045c2f358e8ac77b63879ab97a32eed8392b48cc46116a28.json similarity index 100% rename from core/lib/dal/.sqlx/query-3b3fbcffd2702047045c2f358e8ac77b63879ab97a32eed8392b48cc46116a28.json rename to .sqlx/query-3b3fbcffd2702047045c2f358e8ac77b63879ab97a32eed8392b48cc46116a28.json diff --git a/core/lib/dal/.sqlx/query-3b4d5009ec22f54cc7d305aa11d96ec397767a063dc21aa3add974cb9b070361.json b/.sqlx/query-3b4d5009ec22f54cc7d305aa11d96ec397767a063dc21aa3add974cb9b070361.json similarity index 100% rename from core/lib/dal/.sqlx/query-3b4d5009ec22f54cc7d305aa11d96ec397767a063dc21aa3add974cb9b070361.json rename to .sqlx/query-3b4d5009ec22f54cc7d305aa11d96ec397767a063dc21aa3add974cb9b070361.json diff --git a/core/lib/dal/.sqlx/query-3ba9bc85e3e286aadef8aad27eb38fc90b18155e3435f58d9888fa50d92042f7.json b/.sqlx/query-3ba9bc85e3e286aadef8aad27eb38fc90b18155e3435f58d9888fa50d92042f7.json similarity index 100% rename from core/lib/dal/.sqlx/query-3ba9bc85e3e286aadef8aad27eb38fc90b18155e3435f58d9888fa50d92042f7.json rename to .sqlx/query-3ba9bc85e3e286aadef8aad27eb38fc90b18155e3435f58d9888fa50d92042f7.json diff --git a/core/lib/dal/.sqlx/query-3bc70707863d7be1158de1bfb4bd51c3c1cbd9ba8df9d44a29ff96186e35b700.json b/.sqlx/query-3bc70707863d7be1158de1bfb4bd51c3c1cbd9ba8df9d44a29ff96186e35b700.json similarity index 100% rename from core/lib/dal/.sqlx/query-3bc70707863d7be1158de1bfb4bd51c3c1cbd9ba8df9d44a29ff96186e35b700.json rename to .sqlx/query-3bc70707863d7be1158de1bfb4bd51c3c1cbd9ba8df9d44a29ff96186e35b700.json diff --git a/.sqlx/query-3c3abbf689fa64c6da7de69fd916769dbb04d3a61cf232892236c974660ffe64.json b/.sqlx/query-3c3abbf689fa64c6da7de69fd916769dbb04d3a61cf232892236c974660ffe64.json new file mode 100644 index 00000000000..56d8b1fa995 --- /dev/null +++ b/.sqlx/query-3c3abbf689fa64c6da7de69fd916769dbb04d3a61cf232892236c974660ffe64.json @@ -0,0 +1,35 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE scheduler_witness_jobs_fri\n SET\n status = 'queued',\n updated_at = NOW(),\n processing_started_at = NOW()\n WHERE\n (\n status = 'in_progress'\n AND processing_started_at <= NOW() - $1::INTERVAL\n AND attempts < $2\n )\n OR (\n status = 'failed'\n AND attempts < $2\n )\n RETURNING\n l1_batch_number,\n status,\n attempts\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "l1_batch_number", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "status", + "type_info": "Text" + }, + { + "ordinal": 2, + "name": "attempts", + "type_info": "Int2" + } + ], + "parameters": { + "Left": [ + "Interval", + "Int2" + ] + }, + "nullable": [ + false, + false, + false + ] + }, + "hash": "3c3abbf689fa64c6da7de69fd916769dbb04d3a61cf232892236c974660ffe64" +} diff --git a/core/lib/dal/.sqlx/query-3c531ad0631090934ed46c538249360a7eab2efc70d97b901f8948f6909d4cd2.json b/.sqlx/query-3c531ad0631090934ed46c538249360a7eab2efc70d97b901f8948f6909d4cd2.json similarity index 100% rename from core/lib/dal/.sqlx/query-3c531ad0631090934ed46c538249360a7eab2efc70d97b901f8948f6909d4cd2.json rename to .sqlx/query-3c531ad0631090934ed46c538249360a7eab2efc70d97b901f8948f6909d4cd2.json diff --git a/core/lib/dal/.sqlx/query-3c60ca71b8a3b544f5fe9d7f2fbb249026665c9fb17b6f53a2154473547cbbfd.json b/.sqlx/query-3c60ca71b8a3b544f5fe9d7f2fbb249026665c9fb17b6f53a2154473547cbbfd.json similarity index 100% rename from core/lib/dal/.sqlx/query-3c60ca71b8a3b544f5fe9d7f2fbb249026665c9fb17b6f53a2154473547cbbfd.json rename to .sqlx/query-3c60ca71b8a3b544f5fe9d7f2fbb249026665c9fb17b6f53a2154473547cbbfd.json diff --git a/core/lib/dal/.sqlx/query-3d2d005b59ba9931286452e029cfccb19a2f9663a73306dbf61a257050e2b634.json b/.sqlx/query-3d2d005b59ba9931286452e029cfccb19a2f9663a73306dbf61a257050e2b634.json similarity index 100% rename from core/lib/dal/.sqlx/query-3d2d005b59ba9931286452e029cfccb19a2f9663a73306dbf61a257050e2b634.json rename to .sqlx/query-3d2d005b59ba9931286452e029cfccb19a2f9663a73306dbf61a257050e2b634.json diff --git a/core/lib/dal/.sqlx/query-3d7536cfe7d88dceebff2125a51bcae561c0eea2b1cd8beb245b0cc66ebffcaa.json b/.sqlx/query-3d7536cfe7d88dceebff2125a51bcae561c0eea2b1cd8beb245b0cc66ebffcaa.json similarity index 100% rename from core/lib/dal/.sqlx/query-3d7536cfe7d88dceebff2125a51bcae561c0eea2b1cd8beb245b0cc66ebffcaa.json rename to .sqlx/query-3d7536cfe7d88dceebff2125a51bcae561c0eea2b1cd8beb245b0cc66ebffcaa.json diff --git a/.sqlx/query-3ec365c5c81f4678a905ae5bbd48b87ead36f593488437c6f67da629ca81e4fa.json b/.sqlx/query-3ec365c5c81f4678a905ae5bbd48b87ead36f593488437c6f67da629ca81e4fa.json new file mode 100644 index 00000000000..5815e65636c --- /dev/null +++ b/.sqlx/query-3ec365c5c81f4678a905ae5bbd48b87ead36f593488437c6f67da629ca81e4fa.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE scheduler_witness_jobs_fri\n SET\n status = 'queued'\n WHERE\n l1_batch_number = $1\n AND status != 'successful'\n AND status != 'in_progress'\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [] + }, + "hash": "3ec365c5c81f4678a905ae5bbd48b87ead36f593488437c6f67da629ca81e4fa" +} diff --git a/core/lib/dal/.sqlx/query-406e51d7884cdff36632ccf97912484f0a0d76a8097b61ead5f1f20301ce524d.json b/.sqlx/query-406e51d7884cdff36632ccf97912484f0a0d76a8097b61ead5f1f20301ce524d.json similarity index 100% rename from core/lib/dal/.sqlx/query-406e51d7884cdff36632ccf97912484f0a0d76a8097b61ead5f1f20301ce524d.json rename to .sqlx/query-406e51d7884cdff36632ccf97912484f0a0d76a8097b61ead5f1f20301ce524d.json diff --git a/core/lib/dal/.sqlx/query-40c17194a2089a7d3fa6b7923c9e03def94f4bf4674def1893e2232be80f57a0.json b/.sqlx/query-40c17194a2089a7d3fa6b7923c9e03def94f4bf4674def1893e2232be80f57a0.json similarity index 100% rename from core/lib/dal/.sqlx/query-40c17194a2089a7d3fa6b7923c9e03def94f4bf4674def1893e2232be80f57a0.json rename to .sqlx/query-40c17194a2089a7d3fa6b7923c9e03def94f4bf4674def1893e2232be80f57a0.json diff --git a/core/lib/dal/.sqlx/query-41c9f45d6eb727aafad0d8c18024cee5c602d275bb812022cc8fdabf0a60e151.json b/.sqlx/query-41c9f45d6eb727aafad0d8c18024cee5c602d275bb812022cc8fdabf0a60e151.json similarity index 100% rename from core/lib/dal/.sqlx/query-41c9f45d6eb727aafad0d8c18024cee5c602d275bb812022cc8fdabf0a60e151.json rename to .sqlx/query-41c9f45d6eb727aafad0d8c18024cee5c602d275bb812022cc8fdabf0a60e151.json diff --git a/core/lib/dal/.sqlx/query-43c7e352d09f69de1a182196aea4de79b67833f17d252b5b0e8e00cd6e75b5c1.json b/.sqlx/query-43c7e352d09f69de1a182196aea4de79b67833f17d252b5b0e8e00cd6e75b5c1.json similarity index 100% rename from core/lib/dal/.sqlx/query-43c7e352d09f69de1a182196aea4de79b67833f17d252b5b0e8e00cd6e75b5c1.json rename to .sqlx/query-43c7e352d09f69de1a182196aea4de79b67833f17d252b5b0e8e00cd6e75b5c1.json diff --git a/core/lib/dal/.sqlx/query-44490ad52b8dbcd978a96677ffac5437752a4cf3ac92ec09b334089a8dc5b4ca.json b/.sqlx/query-44490ad52b8dbcd978a96677ffac5437752a4cf3ac92ec09b334089a8dc5b4ca.json similarity index 100% rename from core/lib/dal/.sqlx/query-44490ad52b8dbcd978a96677ffac5437752a4cf3ac92ec09b334089a8dc5b4ca.json rename to .sqlx/query-44490ad52b8dbcd978a96677ffac5437752a4cf3ac92ec09b334089a8dc5b4ca.json diff --git a/.sqlx/query-46c4696fff5a4b8cc5cb46b05645da82065836fe17687ffad04126a6a8b2b27c.json b/.sqlx/query-46c4696fff5a4b8cc5cb46b05645da82065836fe17687ffad04126a6a8b2b27c.json new file mode 100644 index 00000000000..5ebb1951966 --- /dev/null +++ b/.sqlx/query-46c4696fff5a4b8cc5cb46b05645da82065836fe17687ffad04126a6a8b2b27c.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE leaf_aggregation_witness_jobs_fri\n SET\n status = 'successful',\n updated_at = NOW(),\n time_taken = $1\n WHERE\n id = $2\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Time", + "Int8" + ] + }, + "nullable": [] + }, + "hash": "46c4696fff5a4b8cc5cb46b05645da82065836fe17687ffad04126a6a8b2b27c" +} diff --git a/core/lib/dal/.sqlx/query-48c03061a662861818e3b0072caee38f07b52a709bfd5f3dbab5b4cfef463f1f.json b/.sqlx/query-48c03061a662861818e3b0072caee38f07b52a709bfd5f3dbab5b4cfef463f1f.json similarity index 100% rename from core/lib/dal/.sqlx/query-48c03061a662861818e3b0072caee38f07b52a709bfd5f3dbab5b4cfef463f1f.json rename to .sqlx/query-48c03061a662861818e3b0072caee38f07b52a709bfd5f3dbab5b4cfef463f1f.json diff --git a/core/lib/dal/.sqlx/query-4aef05b8864484c6979c93d7ce3159cf509cf27adf9afdbe61bd867e536b7e47.json b/.sqlx/query-4aef05b8864484c6979c93d7ce3159cf509cf27adf9afdbe61bd867e536b7e47.json similarity index 100% rename from core/lib/dal/.sqlx/query-4aef05b8864484c6979c93d7ce3159cf509cf27adf9afdbe61bd867e536b7e47.json rename to .sqlx/query-4aef05b8864484c6979c93d7ce3159cf509cf27adf9afdbe61bd867e536b7e47.json diff --git a/.sqlx/query-4d263992ed6d5abbd7d3ca43af9d772d8801b0ae673b7173ae08a1fa6cbf67b2.json b/.sqlx/query-4d263992ed6d5abbd7d3ca43af9d772d8801b0ae673b7173ae08a1fa6cbf67b2.json new file mode 100644 index 00000000000..b0fb8d4be23 --- /dev/null +++ b/.sqlx/query-4d263992ed6d5abbd7d3ca43af9d772d8801b0ae673b7173ae08a1fa6cbf67b2.json @@ -0,0 +1,59 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE prover_jobs_fri\n SET\n status = 'in_progress',\n attempts = attempts + 1,\n updated_at = NOW(),\n processing_started_at = NOW(),\n picked_by = $2\n WHERE\n id = (\n SELECT\n id\n FROM\n prover_jobs_fri\n WHERE\n status = 'queued'\n AND protocol_version = ANY ($1)\n ORDER BY\n aggregation_round DESC,\n l1_batch_number ASC,\n id ASC\n LIMIT\n 1\n FOR UPDATE\n SKIP LOCKED\n )\n RETURNING\n prover_jobs_fri.id,\n prover_jobs_fri.l1_batch_number,\n prover_jobs_fri.circuit_id,\n prover_jobs_fri.aggregation_round,\n prover_jobs_fri.sequence_number,\n prover_jobs_fri.depth,\n prover_jobs_fri.is_node_final_proof\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "l1_batch_number", + "type_info": "Int8" + }, + { + "ordinal": 2, + "name": "circuit_id", + "type_info": "Int2" + }, + { + "ordinal": 3, + "name": "aggregation_round", + "type_info": "Int2" + }, + { + "ordinal": 4, + "name": "sequence_number", + "type_info": "Int4" + }, + { + "ordinal": 5, + "name": "depth", + "type_info": "Int4" + }, + { + "ordinal": 6, + "name": "is_node_final_proof", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Int4Array", + "Text" + ] + }, + "nullable": [ + false, + false, + false, + false, + false, + false, + false + ] + }, + "hash": "4d263992ed6d5abbd7d3ca43af9d772d8801b0ae673b7173ae08a1fa6cbf67b2" +} diff --git a/core/lib/dal/.sqlx/query-4d50dabc25d392e6b9d0dbe0e386ea7ef2c1178b1b0394a17442185b79f2d77d.json b/.sqlx/query-4d50dabc25d392e6b9d0dbe0e386ea7ef2c1178b1b0394a17442185b79f2d77d.json similarity index 100% rename from core/lib/dal/.sqlx/query-4d50dabc25d392e6b9d0dbe0e386ea7ef2c1178b1b0394a17442185b79f2d77d.json rename to .sqlx/query-4d50dabc25d392e6b9d0dbe0e386ea7ef2c1178b1b0394a17442185b79f2d77d.json diff --git a/.sqlx/query-4d92a133a36afd682a84fbfd75aafca34d61347e0e2e29fb07ca3d1b8b1f309c.json b/.sqlx/query-4d92a133a36afd682a84fbfd75aafca34d61347e0e2e29fb07ca3d1b8b1f309c.json new file mode 100644 index 00000000000..f7ae37f4b7b --- /dev/null +++ b/.sqlx/query-4d92a133a36afd682a84fbfd75aafca34d61347e0e2e29fb07ca3d1b8b1f309c.json @@ -0,0 +1,18 @@ +{ + "db_name": "PostgreSQL", + "query": "\n INSERT INTO\n prover_fri_protocol_versions (\n id,\n recursion_scheduler_level_vk_hash,\n recursion_node_level_vk_hash,\n recursion_leaf_level_vk_hash,\n recursion_circuits_set_vks_hash,\n created_at\n )\n VALUES\n ($1, $2, $3, $4, $5, NOW())\n ON CONFLICT (id) DO NOTHING\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int4", + "Bytea", + "Bytea", + "Bytea", + "Bytea" + ] + }, + "nullable": [] + }, + "hash": "4d92a133a36afd682a84fbfd75aafca34d61347e0e2e29fb07ca3d1b8b1f309c" +} diff --git a/.sqlx/query-510bfea2346a8c63e74222e1159de366f88c20d00a8d928b6cf4caae0702b333.json b/.sqlx/query-510bfea2346a8c63e74222e1159de366f88c20d00a8d928b6cf4caae0702b333.json new file mode 100644 index 00000000000..ef8f865bf98 --- /dev/null +++ b/.sqlx/query-510bfea2346a8c63e74222e1159de366f88c20d00a8d928b6cf4caae0702b333.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "\n INSERT INTO\n witness_inputs_fri (\n l1_batch_number,\n merkle_tree_paths_blob_url,\n protocol_version,\n eip_4844_blobs,\n status,\n created_at,\n updated_at\n )\n VALUES\n ($1, $2, $3, $4, 'queued', NOW(), NOW())\n ON CONFLICT (l1_batch_number) DO NOTHING\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8", + "Text", + "Int4", + "Bytea" + ] + }, + "nullable": [] + }, + "hash": "510bfea2346a8c63e74222e1159de366f88c20d00a8d928b6cf4caae0702b333" +} diff --git a/core/lib/dal/.sqlx/query-51891ab674b8f5cf2d7c12420d1c026c3181f42a49f1f4b6e227c95641931a54.json b/.sqlx/query-51891ab674b8f5cf2d7c12420d1c026c3181f42a49f1f4b6e227c95641931a54.json similarity index 100% rename from core/lib/dal/.sqlx/query-51891ab674b8f5cf2d7c12420d1c026c3181f42a49f1f4b6e227c95641931a54.json rename to .sqlx/query-51891ab674b8f5cf2d7c12420d1c026c3181f42a49f1f4b6e227c95641931a54.json diff --git a/core/lib/dal/.sqlx/query-53182f70d83de1482110c767a8d58ee0e803255aa612a124289f53fbb78bd64a.json b/.sqlx/query-53182f70d83de1482110c767a8d58ee0e803255aa612a124289f53fbb78bd64a.json similarity index 100% rename from core/lib/dal/.sqlx/query-53182f70d83de1482110c767a8d58ee0e803255aa612a124289f53fbb78bd64a.json rename to .sqlx/query-53182f70d83de1482110c767a8d58ee0e803255aa612a124289f53fbb78bd64a.json diff --git a/core/lib/dal/.sqlx/query-532a80b0873871896dd318beba5ec427a099492905a1feee512dc43f39d10047.json b/.sqlx/query-532a80b0873871896dd318beba5ec427a099492905a1feee512dc43f39d10047.json similarity index 100% rename from core/lib/dal/.sqlx/query-532a80b0873871896dd318beba5ec427a099492905a1feee512dc43f39d10047.json rename to .sqlx/query-532a80b0873871896dd318beba5ec427a099492905a1feee512dc43f39d10047.json diff --git a/.sqlx/query-534822a226068cde83ad8c30b569a8f447824a5ab466bb6eea1710e8aeaa2c56.json b/.sqlx/query-534822a226068cde83ad8c30b569a8f447824a5ab466bb6eea1710e8aeaa2c56.json new file mode 100644 index 00000000000..a85b4895b45 --- /dev/null +++ b/.sqlx/query-534822a226068cde83ad8c30b569a8f447824a5ab466bb6eea1710e8aeaa2c56.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE proof_compression_jobs_fri\n SET\n status = $1,\n updated_at = NOW()\n WHERE\n l1_batch_number = $2\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Int8" + ] + }, + "nullable": [] + }, + "hash": "534822a226068cde83ad8c30b569a8f447824a5ab466bb6eea1710e8aeaa2c56" +} diff --git a/.sqlx/query-53f78fdee39b113d2f55f6f951bd94f28b7b2b60d551d552a9b0bab1f1791e39.json b/.sqlx/query-53f78fdee39b113d2f55f6f951bd94f28b7b2b60d551d552a9b0bab1f1791e39.json new file mode 100644 index 00000000000..15a10f7ce3c --- /dev/null +++ b/.sqlx/query-53f78fdee39b113d2f55f6f951bd94f28b7b2b60d551d552a9b0bab1f1791e39.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n attempts\n FROM\n leaf_aggregation_witness_jobs_fri\n WHERE\n id = $1\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "attempts", + "type_info": "Int2" + } + ], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [ + false + ] + }, + "hash": "53f78fdee39b113d2f55f6f951bd94f28b7b2b60d551d552a9b0bab1f1791e39" +} diff --git a/core/lib/dal/.sqlx/query-546c729829083b7eba94fea742c162d717ffcf46fdf5d2ce5d32555353b6da6b.json b/.sqlx/query-546c729829083b7eba94fea742c162d717ffcf46fdf5d2ce5d32555353b6da6b.json similarity index 100% rename from core/lib/dal/.sqlx/query-546c729829083b7eba94fea742c162d717ffcf46fdf5d2ce5d32555353b6da6b.json rename to .sqlx/query-546c729829083b7eba94fea742c162d717ffcf46fdf5d2ce5d32555353b6da6b.json diff --git a/core/lib/dal/.sqlx/query-5503575d9377785894de6cf6139a8d4768c6a803a1a90889e5a1b8254c315231.json b/.sqlx/query-5503575d9377785894de6cf6139a8d4768c6a803a1a90889e5a1b8254c315231.json similarity index 100% rename from core/lib/dal/.sqlx/query-5503575d9377785894de6cf6139a8d4768c6a803a1a90889e5a1b8254c315231.json rename to .sqlx/query-5503575d9377785894de6cf6139a8d4768c6a803a1a90889e5a1b8254c315231.json diff --git a/core/lib/dal/.sqlx/query-555f396946bdb8b84a5d77abbfc1397212b4767039a6c0e22697cf40969729af.json b/.sqlx/query-555f396946bdb8b84a5d77abbfc1397212b4767039a6c0e22697cf40969729af.json similarity index 100% rename from core/lib/dal/.sqlx/query-555f396946bdb8b84a5d77abbfc1397212b4767039a6c0e22697cf40969729af.json rename to .sqlx/query-555f396946bdb8b84a5d77abbfc1397212b4767039a6c0e22697cf40969729af.json diff --git a/core/lib/dal/.sqlx/query-55b0b4c569c0aaf9741afc85400ecd50a04799ffd36be0e17c56f47fcdbc8f60.json b/.sqlx/query-55b0b4c569c0aaf9741afc85400ecd50a04799ffd36be0e17c56f47fcdbc8f60.json similarity index 100% rename from core/lib/dal/.sqlx/query-55b0b4c569c0aaf9741afc85400ecd50a04799ffd36be0e17c56f47fcdbc8f60.json rename to .sqlx/query-55b0b4c569c0aaf9741afc85400ecd50a04799ffd36be0e17c56f47fcdbc8f60.json diff --git a/core/lib/dal/.sqlx/query-55e6f5ea121090034c8920dffb7cfb3ba0659b6fcc582e174ee80601b54f89d9.json b/.sqlx/query-55e6f5ea121090034c8920dffb7cfb3ba0659b6fcc582e174ee80601b54f89d9.json similarity index 100% rename from core/lib/dal/.sqlx/query-55e6f5ea121090034c8920dffb7cfb3ba0659b6fcc582e174ee80601b54f89d9.json rename to .sqlx/query-55e6f5ea121090034c8920dffb7cfb3ba0659b6fcc582e174ee80601b54f89d9.json diff --git a/core/lib/dal/.sqlx/query-55f4585be3d0f1a147cb10f6e59325fad494a512ba92df95439d2d7fe0f3a285.json b/.sqlx/query-55f4585be3d0f1a147cb10f6e59325fad494a512ba92df95439d2d7fe0f3a285.json similarity index 100% rename from core/lib/dal/.sqlx/query-55f4585be3d0f1a147cb10f6e59325fad494a512ba92df95439d2d7fe0f3a285.json rename to .sqlx/query-55f4585be3d0f1a147cb10f6e59325fad494a512ba92df95439d2d7fe0f3a285.json diff --git a/core/lib/dal/.sqlx/query-5659480e5d79dab3399e35539b240e7eb9f598999c28015a504605f88bf84b33.json b/.sqlx/query-5659480e5d79dab3399e35539b240e7eb9f598999c28015a504605f88bf84b33.json similarity index 100% rename from core/lib/dal/.sqlx/query-5659480e5d79dab3399e35539b240e7eb9f598999c28015a504605f88bf84b33.json rename to .sqlx/query-5659480e5d79dab3399e35539b240e7eb9f598999c28015a504605f88bf84b33.json diff --git a/core/lib/dal/.sqlx/query-57fe009542ca9dc763e3823ee73662bf3bfdda11bb57f65db4980982a4200bed.json b/.sqlx/query-57fe009542ca9dc763e3823ee73662bf3bfdda11bb57f65db4980982a4200bed.json similarity index 100% rename from core/lib/dal/.sqlx/query-57fe009542ca9dc763e3823ee73662bf3bfdda11bb57f65db4980982a4200bed.json rename to .sqlx/query-57fe009542ca9dc763e3823ee73662bf3bfdda11bb57f65db4980982a4200bed.json diff --git a/.sqlx/query-5821f1446983260168cec366af26009503182c300877e74a8539f231050e6f85.json b/.sqlx/query-5821f1446983260168cec366af26009503182c300877e74a8539f231050e6f85.json new file mode 100644 index 00000000000..86877a48dd4 --- /dev/null +++ b/.sqlx/query-5821f1446983260168cec366af26009503182c300877e74a8539f231050e6f85.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE witness_inputs_fri\n SET\n status = $1,\n updated_at = NOW()\n WHERE\n l1_batch_number = $2\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Int8" + ] + }, + "nullable": [] + }, + "hash": "5821f1446983260168cec366af26009503182c300877e74a8539f231050e6f85" +} diff --git a/core/lib/dal/.sqlx/query-58aed39245c72d231b268ce83105bb2036d21f60d4c6934f9145730ac35c04de.json b/.sqlx/query-58aed39245c72d231b268ce83105bb2036d21f60d4c6934f9145730ac35c04de.json similarity index 100% rename from core/lib/dal/.sqlx/query-58aed39245c72d231b268ce83105bb2036d21f60d4c6934f9145730ac35c04de.json rename to .sqlx/query-58aed39245c72d231b268ce83105bb2036d21f60d4c6934f9145730ac35c04de.json diff --git a/core/lib/dal/.sqlx/query-5d341e334cbc2d38efc8a060325677d57040037da0e07cef2c7b7246851a3703.json b/.sqlx/query-5d341e334cbc2d38efc8a060325677d57040037da0e07cef2c7b7246851a3703.json similarity index 100% rename from core/lib/dal/.sqlx/query-5d341e334cbc2d38efc8a060325677d57040037da0e07cef2c7b7246851a3703.json rename to .sqlx/query-5d341e334cbc2d38efc8a060325677d57040037da0e07cef2c7b7246851a3703.json diff --git a/core/lib/dal/.sqlx/query-5d493cbce749cc5b56d4069423597b16599abaf51df0f19effe1a536376cf6a6.json b/.sqlx/query-5d493cbce749cc5b56d4069423597b16599abaf51df0f19effe1a536376cf6a6.json similarity index 100% rename from core/lib/dal/.sqlx/query-5d493cbce749cc5b56d4069423597b16599abaf51df0f19effe1a536376cf6a6.json rename to .sqlx/query-5d493cbce749cc5b56d4069423597b16599abaf51df0f19effe1a536376cf6a6.json diff --git a/.sqlx/query-5e781f84ec41edd0941fa84de837effac442434c6e734d977e6682a7484abe7f.json b/.sqlx/query-5e781f84ec41edd0941fa84de837effac442434c6e734d977e6682a7484abe7f.json new file mode 100644 index 00000000000..4958f38f535 --- /dev/null +++ b/.sqlx/query-5e781f84ec41edd0941fa84de837effac442434c6e734d977e6682a7484abe7f.json @@ -0,0 +1,35 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE proof_compression_jobs_fri\n SET\n status = 'queued',\n updated_at = NOW(),\n processing_started_at = NOW()\n WHERE\n (\n status = 'in_progress'\n AND processing_started_at <= NOW() - $1::INTERVAL\n AND attempts < $2\n )\n OR (\n status = 'failed'\n AND attempts < $2\n )\n RETURNING\n l1_batch_number,\n status,\n attempts\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "l1_batch_number", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "status", + "type_info": "Text" + }, + { + "ordinal": 2, + "name": "attempts", + "type_info": "Int2" + } + ], + "parameters": { + "Left": [ + "Interval", + "Int2" + ] + }, + "nullable": [ + false, + false, + false + ] + }, + "hash": "5e781f84ec41edd0941fa84de837effac442434c6e734d977e6682a7484abe7f" +} diff --git a/core/lib/dal/.sqlx/query-5f7034d22251a893249208c5ff8fa5c8bf46bc0cea4ac2b25ecde236c30ae32d.json b/.sqlx/query-5f7034d22251a893249208c5ff8fa5c8bf46bc0cea4ac2b25ecde236c30ae32d.json similarity index 100% rename from core/lib/dal/.sqlx/query-5f7034d22251a893249208c5ff8fa5c8bf46bc0cea4ac2b25ecde236c30ae32d.json rename to .sqlx/query-5f7034d22251a893249208c5ff8fa5c8bf46bc0cea4ac2b25ecde236c30ae32d.json diff --git a/.sqlx/query-61b2b858d4636809c21838635aa52aeb5f06c26f68d131dd242f6ed68816c513.json b/.sqlx/query-61b2b858d4636809c21838635aa52aeb5f06c26f68d131dd242f6ed68816c513.json new file mode 100644 index 00000000000..c713af9a210 --- /dev/null +++ b/.sqlx/query-61b2b858d4636809c21838635aa52aeb5f06c26f68d131dd242f6ed68816c513.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n l1_batch_number\n FROM\n prover_jobs_fri\n WHERE\n status <> 'skipped'\n AND status <> 'successful'\n AND aggregation_round = $1\n ORDER BY\n l1_batch_number ASC\n LIMIT\n 1\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "l1_batch_number", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Int2" + ] + }, + "nullable": [ + false + ] + }, + "hash": "61b2b858d4636809c21838635aa52aeb5f06c26f68d131dd242f6ed68816c513" +} diff --git a/core/lib/dal/.sqlx/query-61bc330d6d1b5fddec78342c1b0f00e82b0b3ad9ae36bf4fe44d7e85b74c6f49.json b/.sqlx/query-61bc330d6d1b5fddec78342c1b0f00e82b0b3ad9ae36bf4fe44d7e85b74c6f49.json similarity index 100% rename from core/lib/dal/.sqlx/query-61bc330d6d1b5fddec78342c1b0f00e82b0b3ad9ae36bf4fe44d7e85b74c6f49.json rename to .sqlx/query-61bc330d6d1b5fddec78342c1b0f00e82b0b3ad9ae36bf4fe44d7e85b74c6f49.json diff --git a/core/lib/dal/.sqlx/query-6213f642c89d2c0a470c93b94714d21d399f860a7b986738d193871fe5cf913d.json b/.sqlx/query-6213f642c89d2c0a470c93b94714d21d399f860a7b986738d193871fe5cf913d.json similarity index 100% rename from core/lib/dal/.sqlx/query-6213f642c89d2c0a470c93b94714d21d399f860a7b986738d193871fe5cf913d.json rename to .sqlx/query-6213f642c89d2c0a470c93b94714d21d399f860a7b986738d193871fe5cf913d.json diff --git a/core/lib/dal/.sqlx/query-63f5f9bff4b2c15fa4230af2c73b5b5cc7e37dd6a607e9453e822e34ba77cdc3.json b/.sqlx/query-63f5f9bff4b2c15fa4230af2c73b5b5cc7e37dd6a607e9453e822e34ba77cdc3.json similarity index 100% rename from core/lib/dal/.sqlx/query-63f5f9bff4b2c15fa4230af2c73b5b5cc7e37dd6a607e9453e822e34ba77cdc3.json rename to .sqlx/query-63f5f9bff4b2c15fa4230af2c73b5b5cc7e37dd6a607e9453e822e34ba77cdc3.json diff --git a/core/lib/dal/.sqlx/query-65736a5b9b4ad364797dbedfc828f24785ae8bd2b4579203f05379e757a56f2b.json b/.sqlx/query-65736a5b9b4ad364797dbedfc828f24785ae8bd2b4579203f05379e757a56f2b.json similarity index 100% rename from core/lib/dal/.sqlx/query-65736a5b9b4ad364797dbedfc828f24785ae8bd2b4579203f05379e757a56f2b.json rename to .sqlx/query-65736a5b9b4ad364797dbedfc828f24785ae8bd2b4579203f05379e757a56f2b.json diff --git a/core/lib/dal/.sqlx/query-6621de90a024cc85946f17948e5c171cd0e4d38bd6e9cfec58b2d7f53a3204e1.json b/.sqlx/query-6621de90a024cc85946f17948e5c171cd0e4d38bd6e9cfec58b2d7f53a3204e1.json similarity index 100% rename from core/lib/dal/.sqlx/query-6621de90a024cc85946f17948e5c171cd0e4d38bd6e9cfec58b2d7f53a3204e1.json rename to .sqlx/query-6621de90a024cc85946f17948e5c171cd0e4d38bd6e9cfec58b2d7f53a3204e1.json diff --git a/core/lib/dal/.sqlx/query-66510caa7683ed90729cb545ac8528f012c2ecaebf6622ca1ae481045604e58d.json b/.sqlx/query-66510caa7683ed90729cb545ac8528f012c2ecaebf6622ca1ae481045604e58d.json similarity index 100% rename from core/lib/dal/.sqlx/query-66510caa7683ed90729cb545ac8528f012c2ecaebf6622ca1ae481045604e58d.json rename to .sqlx/query-66510caa7683ed90729cb545ac8528f012c2ecaebf6622ca1ae481045604e58d.json diff --git a/core/lib/dal/.sqlx/query-6692ff6c0fbb2fc94f5cd2837a43ce80f9b2b27758651ccfc09df61a4ae8a363.json b/.sqlx/query-6692ff6c0fbb2fc94f5cd2837a43ce80f9b2b27758651ccfc09df61a4ae8a363.json similarity index 100% rename from core/lib/dal/.sqlx/query-6692ff6c0fbb2fc94f5cd2837a43ce80f9b2b27758651ccfc09df61a4ae8a363.json rename to .sqlx/query-6692ff6c0fbb2fc94f5cd2837a43ce80f9b2b27758651ccfc09df61a4ae8a363.json diff --git a/core/lib/dal/.sqlx/query-67ac33ad0ad912e8db6d141e21c2e14fa4c1c4fdad16eff011011878af897946.json b/.sqlx/query-67ac33ad0ad912e8db6d141e21c2e14fa4c1c4fdad16eff011011878af897946.json similarity index 100% rename from core/lib/dal/.sqlx/query-67ac33ad0ad912e8db6d141e21c2e14fa4c1c4fdad16eff011011878af897946.json rename to .sqlx/query-67ac33ad0ad912e8db6d141e21c2e14fa4c1c4fdad16eff011011878af897946.json diff --git a/core/lib/dal/.sqlx/query-6849be0788a509e4e68acc2da4bfadbcfc343374fad173df0cc8db38419a9726.json b/.sqlx/query-6849be0788a509e4e68acc2da4bfadbcfc343374fad173df0cc8db38419a9726.json similarity index 100% rename from core/lib/dal/.sqlx/query-6849be0788a509e4e68acc2da4bfadbcfc343374fad173df0cc8db38419a9726.json rename to .sqlx/query-6849be0788a509e4e68acc2da4bfadbcfc343374fad173df0cc8db38419a9726.json diff --git a/core/lib/dal/.sqlx/query-6874b501c82e6062ab22622095070d67840b2484ea3a03ac49eb3d50ea153163.json b/.sqlx/query-6874b501c82e6062ab22622095070d67840b2484ea3a03ac49eb3d50ea153163.json similarity index 100% rename from core/lib/dal/.sqlx/query-6874b501c82e6062ab22622095070d67840b2484ea3a03ac49eb3d50ea153163.json rename to .sqlx/query-6874b501c82e6062ab22622095070d67840b2484ea3a03ac49eb3d50ea153163.json diff --git a/.sqlx/query-6ae2ed34230beae0e86c584e293e7ee767e4c98706246eb113498c0f817f5f38.json b/.sqlx/query-6ae2ed34230beae0e86c584e293e7ee767e4c98706246eb113498c0f817f5f38.json new file mode 100644 index 00000000000..08dff439a7c --- /dev/null +++ b/.sqlx/query-6ae2ed34230beae0e86c584e293e7ee767e4c98706246eb113498c0f817f5f38.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "\n INSERT INTO\n gpu_prover_queue_fri (\n instance_host,\n instance_port,\n instance_status,\n specialized_prover_group_id,\n zone,\n created_at,\n updated_at\n )\n VALUES\n (CAST($1::TEXT AS inet), $2, 'available', $3, $4, NOW(), NOW())\n ON CONFLICT (instance_host, instance_port, zone) DO\n UPDATE\n SET\n instance_status = 'available',\n specialized_prover_group_id = $3,\n zone = $4,\n updated_at = NOW()\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Int4", + "Int2", + "Text" + ] + }, + "nullable": [] + }, + "hash": "6ae2ed34230beae0e86c584e293e7ee767e4c98706246eb113498c0f817f5f38" +} diff --git a/core/lib/dal/.sqlx/query-6ae7d3c1a3e7bd5388c39e3cc847526a96dd032a34a20e789308a9b94b9e94df.json b/.sqlx/query-6ae7d3c1a3e7bd5388c39e3cc847526a96dd032a34a20e789308a9b94b9e94df.json similarity index 100% rename from core/lib/dal/.sqlx/query-6ae7d3c1a3e7bd5388c39e3cc847526a96dd032a34a20e789308a9b94b9e94df.json rename to .sqlx/query-6ae7d3c1a3e7bd5388c39e3cc847526a96dd032a34a20e789308a9b94b9e94df.json diff --git a/core/lib/dal/.sqlx/query-6b327df84d2b3b31d02db35fd5d91a8d67abcdb743a619ed0d1b9c16206a3c20.json b/.sqlx/query-6b327df84d2b3b31d02db35fd5d91a8d67abcdb743a619ed0d1b9c16206a3c20.json similarity index 100% rename from core/lib/dal/.sqlx/query-6b327df84d2b3b31d02db35fd5d91a8d67abcdb743a619ed0d1b9c16206a3c20.json rename to .sqlx/query-6b327df84d2b3b31d02db35fd5d91a8d67abcdb743a619ed0d1b9c16206a3c20.json diff --git a/core/lib/dal/.sqlx/query-6bd3094be764e6378fe52b5bb533260b49ce42daaf9dbe8075daf0a8e0ad9914.json b/.sqlx/query-6bd3094be764e6378fe52b5bb533260b49ce42daaf9dbe8075daf0a8e0ad9914.json similarity index 100% rename from core/lib/dal/.sqlx/query-6bd3094be764e6378fe52b5bb533260b49ce42daaf9dbe8075daf0a8e0ad9914.json rename to .sqlx/query-6bd3094be764e6378fe52b5bb533260b49ce42daaf9dbe8075daf0a8e0ad9914.json diff --git a/core/lib/dal/.sqlx/query-6c0d03b1fbe6f47546bc34c6b2eab01cb2c55bf86d2c8c99abb1b7ca21cf75c0.json b/.sqlx/query-6c0d03b1fbe6f47546bc34c6b2eab01cb2c55bf86d2c8c99abb1b7ca21cf75c0.json similarity index 100% rename from core/lib/dal/.sqlx/query-6c0d03b1fbe6f47546bc34c6b2eab01cb2c55bf86d2c8c99abb1b7ca21cf75c0.json rename to .sqlx/query-6c0d03b1fbe6f47546bc34c6b2eab01cb2c55bf86d2c8c99abb1b7ca21cf75c0.json diff --git a/core/lib/dal/.sqlx/query-6c46fb3d51aeb069c09ff0cae3ea82f1af696fcc8f7484eaf255d5311589ee39.json b/.sqlx/query-6c46fb3d51aeb069c09ff0cae3ea82f1af696fcc8f7484eaf255d5311589ee39.json similarity index 100% rename from core/lib/dal/.sqlx/query-6c46fb3d51aeb069c09ff0cae3ea82f1af696fcc8f7484eaf255d5311589ee39.json rename to .sqlx/query-6c46fb3d51aeb069c09ff0cae3ea82f1af696fcc8f7484eaf255d5311589ee39.json diff --git a/core/lib/dal/.sqlx/query-6c6b8045f9dd7bdb9ada0d71974f28f7b515cf894e63fc95165c9211f71daa36.json b/.sqlx/query-6c6b8045f9dd7bdb9ada0d71974f28f7b515cf894e63fc95165c9211f71daa36.json similarity index 100% rename from core/lib/dal/.sqlx/query-6c6b8045f9dd7bdb9ada0d71974f28f7b515cf894e63fc95165c9211f71daa36.json rename to .sqlx/query-6c6b8045f9dd7bdb9ada0d71974f28f7b515cf894e63fc95165c9211f71daa36.json diff --git a/.sqlx/query-6cfc59d2fc039c706f30ae91b7d9d0c658093dede5eb61489205aa751ad5b8ec.json b/.sqlx/query-6cfc59d2fc039c706f30ae91b7d9d0c658093dede5eb61489205aa751ad5b8ec.json new file mode 100644 index 00000000000..02b7862517f --- /dev/null +++ b/.sqlx/query-6cfc59d2fc039c706f30ae91b7d9d0c658093dede5eb61489205aa751ad5b8ec.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "\n WITH deleted AS (\n DELETE FROM prover_jobs_fri\n WHERE\n status NOT IN ('queued', 'in_progress', 'in_gpu_proof', 'failed')\n AND updated_at < NOW() - $1::INTERVAL\n RETURNING *\n ),\n inserted_count AS (\n INSERT INTO prover_jobs_fri_archive\n SELECT * FROM deleted\n )\n SELECT COUNT(*) FROM deleted\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "count", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Interval" + ] + }, + "nullable": [ + null + ] + }, + "hash": "6cfc59d2fc039c706f30ae91b7d9d0c658093dede5eb61489205aa751ad5b8ec" +} diff --git a/core/lib/dal/.sqlx/query-6d08cadce92f03b0596e068884854a701146f4b2dc92361f42598a5f9a72c36b.json b/.sqlx/query-6d08cadce92f03b0596e068884854a701146f4b2dc92361f42598a5f9a72c36b.json similarity index 100% rename from core/lib/dal/.sqlx/query-6d08cadce92f03b0596e068884854a701146f4b2dc92361f42598a5f9a72c36b.json rename to .sqlx/query-6d08cadce92f03b0596e068884854a701146f4b2dc92361f42598a5f9a72c36b.json diff --git a/core/lib/dal/.sqlx/query-6ed5cc84e8097c4febf6c935193f45ef713ef7f9909ce26653faceddb549a383.json b/.sqlx/query-6ed5cc84e8097c4febf6c935193f45ef713ef7f9909ce26653faceddb549a383.json similarity index 100% rename from core/lib/dal/.sqlx/query-6ed5cc84e8097c4febf6c935193f45ef713ef7f9909ce26653faceddb549a383.json rename to .sqlx/query-6ed5cc84e8097c4febf6c935193f45ef713ef7f9909ce26653faceddb549a383.json diff --git a/core/lib/dal/.sqlx/query-708b2b3e40887e6d8d2d7aa20448a58479487686d774e6b2b1391347bdafe06d.json b/.sqlx/query-708b2b3e40887e6d8d2d7aa20448a58479487686d774e6b2b1391347bdafe06d.json similarity index 100% rename from core/lib/dal/.sqlx/query-708b2b3e40887e6d8d2d7aa20448a58479487686d774e6b2b1391347bdafe06d.json rename to .sqlx/query-708b2b3e40887e6d8d2d7aa20448a58479487686d774e6b2b1391347bdafe06d.json diff --git a/core/lib/dal/.sqlx/query-72a4f50355324cce85ebaef9fa32826095e9290f0c1157094bd0c44e06012e42.json b/.sqlx/query-72a4f50355324cce85ebaef9fa32826095e9290f0c1157094bd0c44e06012e42.json similarity index 100% rename from core/lib/dal/.sqlx/query-72a4f50355324cce85ebaef9fa32826095e9290f0c1157094bd0c44e06012e42.json rename to .sqlx/query-72a4f50355324cce85ebaef9fa32826095e9290f0c1157094bd0c44e06012e42.json diff --git a/core/lib/dal/.sqlx/query-73c4bf1e35d49faaab9f7828e80f396f9d193615d70184d4327378a7fc8a5665.json b/.sqlx/query-73c4bf1e35d49faaab9f7828e80f396f9d193615d70184d4327378a7fc8a5665.json similarity index 100% rename from core/lib/dal/.sqlx/query-73c4bf1e35d49faaab9f7828e80f396f9d193615d70184d4327378a7fc8a5665.json rename to .sqlx/query-73c4bf1e35d49faaab9f7828e80f396f9d193615d70184d4327378a7fc8a5665.json diff --git a/core/lib/dal/.sqlx/query-7560ba61643a8ec8eeefbe6034226313c255ce356a9a4e25c098484d3129c914.json b/.sqlx/query-7560ba61643a8ec8eeefbe6034226313c255ce356a9a4e25c098484d3129c914.json similarity index 100% rename from core/lib/dal/.sqlx/query-7560ba61643a8ec8eeefbe6034226313c255ce356a9a4e25c098484d3129c914.json rename to .sqlx/query-7560ba61643a8ec8eeefbe6034226313c255ce356a9a4e25c098484d3129c914.json diff --git a/core/lib/dal/.sqlx/query-759b80414b5bcbfe03a0e1e15b37f92c4cfad9313b1461e12242d9becb59e0b0.json b/.sqlx/query-759b80414b5bcbfe03a0e1e15b37f92c4cfad9313b1461e12242d9becb59e0b0.json similarity index 100% rename from core/lib/dal/.sqlx/query-759b80414b5bcbfe03a0e1e15b37f92c4cfad9313b1461e12242d9becb59e0b0.json rename to .sqlx/query-759b80414b5bcbfe03a0e1e15b37f92c4cfad9313b1461e12242d9becb59e0b0.json diff --git a/.sqlx/query-75f6eaa518e7840374c4e44b0788bf92c7f2c55386c8208e3a82b30456abd5b4.json b/.sqlx/query-75f6eaa518e7840374c4e44b0788bf92c7f2c55386c8208e3a82b30456abd5b4.json new file mode 100644 index 00000000000..74a6c2724b6 --- /dev/null +++ b/.sqlx/query-75f6eaa518e7840374c4e44b0788bf92c7f2c55386c8208e3a82b30456abd5b4.json @@ -0,0 +1,96 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE witness_inputs_fri\n SET\n status = 'in_progress',\n attempts = attempts + 1,\n updated_at = NOW(),\n processing_started_at = NOW(),\n picked_by = $3\n WHERE\n l1_batch_number = (\n SELECT\n l1_batch_number\n FROM\n witness_inputs_fri\n WHERE\n l1_batch_number <= $1\n AND status = 'queued'\n AND protocol_version = ANY ($2)\n ORDER BY\n l1_batch_number ASC\n LIMIT\n 1\n FOR UPDATE\n SKIP LOCKED\n )\n RETURNING\n witness_inputs_fri.*\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "l1_batch_number", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "merkle_tree_paths_blob_url", + "type_info": "Text" + }, + { + "ordinal": 2, + "name": "attempts", + "type_info": "Int2" + }, + { + "ordinal": 3, + "name": "status", + "type_info": "Text" + }, + { + "ordinal": 4, + "name": "error", + "type_info": "Text" + }, + { + "ordinal": 5, + "name": "created_at", + "type_info": "Timestamp" + }, + { + "ordinal": 6, + "name": "updated_at", + "type_info": "Timestamp" + }, + { + "ordinal": 7, + "name": "processing_started_at", + "type_info": "Timestamp" + }, + { + "ordinal": 8, + "name": "time_taken", + "type_info": "Time" + }, + { + "ordinal": 9, + "name": "is_blob_cleaned", + "type_info": "Bool" + }, + { + "ordinal": 10, + "name": "protocol_version", + "type_info": "Int4" + }, + { + "ordinal": 11, + "name": "picked_by", + "type_info": "Text" + }, + { + "ordinal": 12, + "name": "eip_4844_blobs", + "type_info": "Bytea" + } + ], + "parameters": { + "Left": [ + "Int8", + "Int4Array", + "Text" + ] + }, + "nullable": [ + false, + true, + false, + false, + true, + false, + false, + true, + true, + true, + true, + true, + true + ] + }, + "hash": "75f6eaa518e7840374c4e44b0788bf92c7f2c55386c8208e3a82b30456abd5b4" +} diff --git a/core/lib/dal/.sqlx/query-75fa24c29dc312cbfa89bf1f4a04a42b4ead6964edd17bfcacb4a828492bba60.json b/.sqlx/query-75fa24c29dc312cbfa89bf1f4a04a42b4ead6964edd17bfcacb4a828492bba60.json similarity index 100% rename from core/lib/dal/.sqlx/query-75fa24c29dc312cbfa89bf1f4a04a42b4ead6964edd17bfcacb4a828492bba60.json rename to .sqlx/query-75fa24c29dc312cbfa89bf1f4a04a42b4ead6964edd17bfcacb4a828492bba60.json diff --git a/core/lib/dal/.sqlx/query-76cb9ad97b70d584b19af194576dcf2324f380932698386aa8f9751b1fa24a7b.json b/.sqlx/query-76cb9ad97b70d584b19af194576dcf2324f380932698386aa8f9751b1fa24a7b.json similarity index 100% rename from core/lib/dal/.sqlx/query-76cb9ad97b70d584b19af194576dcf2324f380932698386aa8f9751b1fa24a7b.json rename to .sqlx/query-76cb9ad97b70d584b19af194576dcf2324f380932698386aa8f9751b1fa24a7b.json diff --git a/core/lib/dal/.sqlx/query-77a43830ca31eac85a3c03d87696bf94a013e49bf50ce23f4de4968781df0796.json b/.sqlx/query-77a43830ca31eac85a3c03d87696bf94a013e49bf50ce23f4de4968781df0796.json similarity index 100% rename from core/lib/dal/.sqlx/query-77a43830ca31eac85a3c03d87696bf94a013e49bf50ce23f4de4968781df0796.json rename to .sqlx/query-77a43830ca31eac85a3c03d87696bf94a013e49bf50ce23f4de4968781df0796.json diff --git a/.sqlx/query-7a2145e2234a7896031bbc1ce82715e903f3b399886c2c73e838bd924fed6776.json b/.sqlx/query-7a2145e2234a7896031bbc1ce82715e903f3b399886c2c73e838bd924fed6776.json new file mode 100644 index 00000000000..73a8c33695b --- /dev/null +++ b/.sqlx/query-7a2145e2234a7896031bbc1ce82715e903f3b399886c2c73e838bd924fed6776.json @@ -0,0 +1,18 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE node_aggregation_witness_jobs_fri\n SET\n aggregations_url = $1,\n number_of_dependent_jobs = $5,\n updated_at = NOW()\n WHERE\n l1_batch_number = $2\n AND circuit_id = $3\n AND depth = $4\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Int8", + "Int2", + "Int4", + "Int4" + ] + }, + "nullable": [] + }, + "hash": "7a2145e2234a7896031bbc1ce82715e903f3b399886c2c73e838bd924fed6776" +} diff --git a/.sqlx/query-7a8fffe8d4e3085e00c98f770d250d625f057acf1440b6550375ce5509a816a6.json b/.sqlx/query-7a8fffe8d4e3085e00c98f770d250d625f057acf1440b6550375ce5509a816a6.json new file mode 100644 index 00000000000..da78974f61a --- /dev/null +++ b/.sqlx/query-7a8fffe8d4e3085e00c98f770d250d625f057acf1440b6550375ce5509a816a6.json @@ -0,0 +1,107 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE leaf_aggregation_witness_jobs_fri\n SET\n status = 'in_progress',\n attempts = attempts + 1,\n updated_at = NOW(),\n processing_started_at = NOW(),\n picked_by = $2\n WHERE\n id = (\n SELECT\n id\n FROM\n leaf_aggregation_witness_jobs_fri\n WHERE\n status = 'queued'\n AND protocol_version = ANY ($1)\n ORDER BY\n l1_batch_number ASC,\n id ASC\n LIMIT\n 1\n FOR UPDATE\n SKIP LOCKED\n )\n RETURNING\n leaf_aggregation_witness_jobs_fri.*\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "l1_batch_number", + "type_info": "Int8" + }, + { + "ordinal": 2, + "name": "circuit_id", + "type_info": "Int2" + }, + { + "ordinal": 3, + "name": "closed_form_inputs_blob_url", + "type_info": "Text" + }, + { + "ordinal": 4, + "name": "attempts", + "type_info": "Int2" + }, + { + "ordinal": 5, + "name": "status", + "type_info": "Text" + }, + { + "ordinal": 6, + "name": "error", + "type_info": "Text" + }, + { + "ordinal": 7, + "name": "created_at", + "type_info": "Timestamp" + }, + { + "ordinal": 8, + "name": "updated_at", + "type_info": "Timestamp" + }, + { + "ordinal": 9, + "name": "processing_started_at", + "type_info": "Timestamp" + }, + { + "ordinal": 10, + "name": "time_taken", + "type_info": "Time" + }, + { + "ordinal": 11, + "name": "is_blob_cleaned", + "type_info": "Bool" + }, + { + "ordinal": 12, + "name": "number_of_basic_circuits", + "type_info": "Int4" + }, + { + "ordinal": 13, + "name": "protocol_version", + "type_info": "Int4" + }, + { + "ordinal": 14, + "name": "picked_by", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Int4Array", + "Text" + ] + }, + "nullable": [ + false, + false, + false, + true, + false, + false, + true, + false, + false, + true, + true, + true, + true, + true, + true + ] + }, + "hash": "7a8fffe8d4e3085e00c98f770d250d625f057acf1440b6550375ce5509a816a6" +} diff --git a/core/lib/dal/.sqlx/query-7af52a220958d790bd8b5b06a6e29bf769829991c7d732b13f96bcd1293263ea.json b/.sqlx/query-7af52a220958d790bd8b5b06a6e29bf769829991c7d732b13f96bcd1293263ea.json similarity index 100% rename from core/lib/dal/.sqlx/query-7af52a220958d790bd8b5b06a6e29bf769829991c7d732b13f96bcd1293263ea.json rename to .sqlx/query-7af52a220958d790bd8b5b06a6e29bf769829991c7d732b13f96bcd1293263ea.json diff --git a/core/lib/dal/.sqlx/query-7b908340613dadbbef46e2160d2d7d59a34f97285e855d5bd67f28f6f4ff1d4e.json b/.sqlx/query-7b908340613dadbbef46e2160d2d7d59a34f97285e855d5bd67f28f6f4ff1d4e.json similarity index 100% rename from core/lib/dal/.sqlx/query-7b908340613dadbbef46e2160d2d7d59a34f97285e855d5bd67f28f6f4ff1d4e.json rename to .sqlx/query-7b908340613dadbbef46e2160d2d7d59a34f97285e855d5bd67f28f6f4ff1d4e.json diff --git a/core/lib/dal/.sqlx/query-7fccc28bd829bce334f37197ee6b139e943f3ad2a41387b610606a42b7f03283.json b/.sqlx/query-7fccc28bd829bce334f37197ee6b139e943f3ad2a41387b610606a42b7f03283.json similarity index 100% rename from core/lib/dal/.sqlx/query-7fccc28bd829bce334f37197ee6b139e943f3ad2a41387b610606a42b7f03283.json rename to .sqlx/query-7fccc28bd829bce334f37197ee6b139e943f3ad2a41387b610606a42b7f03283.json diff --git a/core/lib/dal/.sqlx/query-80684de323c47ade36e5a52b99a222806762c640b7de7bf6ecdbf9c3f9842d6f.json b/.sqlx/query-80684de323c47ade36e5a52b99a222806762c640b7de7bf6ecdbf9c3f9842d6f.json similarity index 100% rename from core/lib/dal/.sqlx/query-80684de323c47ade36e5a52b99a222806762c640b7de7bf6ecdbf9c3f9842d6f.json rename to .sqlx/query-80684de323c47ade36e5a52b99a222806762c640b7de7bf6ecdbf9c3f9842d6f.json diff --git a/.sqlx/query-806b82a9effd885ba537a2a1c7d7227120a8279db1875d26ccae5ee0785f46a9.json b/.sqlx/query-806b82a9effd885ba537a2a1c7d7227120a8279db1875d26ccae5ee0785f46a9.json new file mode 100644 index 00000000000..c8e8a7aa603 --- /dev/null +++ b/.sqlx/query-806b82a9effd885ba537a2a1c7d7227120a8279db1875d26ccae5ee0785f46a9.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n attempts\n FROM\n node_aggregation_witness_jobs_fri\n WHERE\n id = $1\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "attempts", + "type_info": "Int2" + } + ], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [ + false + ] + }, + "hash": "806b82a9effd885ba537a2a1c7d7227120a8279db1875d26ccae5ee0785f46a9" +} diff --git a/.sqlx/query-8182690d0326b820d23fba49d391578db18c29cdca85b8b6aad86fe2a9bf6bbe.json b/.sqlx/query-8182690d0326b820d23fba49d391578db18c29cdca85b8b6aad86fe2a9bf6bbe.json new file mode 100644 index 00000000000..fac64c1ea3f --- /dev/null +++ b/.sqlx/query-8182690d0326b820d23fba49d391578db18c29cdca85b8b6aad86fe2a9bf6bbe.json @@ -0,0 +1,32 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE node_aggregation_witness_jobs_fri\n SET\n status = 'queued'\n WHERE\n (l1_batch_number, circuit_id, depth) IN (\n SELECT\n prover_jobs_fri.l1_batch_number,\n prover_jobs_fri.circuit_id,\n prover_jobs_fri.depth\n FROM\n prover_jobs_fri\n JOIN node_aggregation_witness_jobs_fri nawj ON prover_jobs_fri.l1_batch_number = nawj.l1_batch_number\n AND prover_jobs_fri.circuit_id = nawj.circuit_id\n AND prover_jobs_fri.depth = nawj.depth\n WHERE\n nawj.status = 'waiting_for_proofs'\n AND prover_jobs_fri.status = 'successful'\n AND prover_jobs_fri.aggregation_round = 2\n GROUP BY\n prover_jobs_fri.l1_batch_number,\n prover_jobs_fri.circuit_id,\n prover_jobs_fri.depth,\n nawj.number_of_dependent_jobs\n HAVING\n COUNT(*) = nawj.number_of_dependent_jobs\n )\n RETURNING\n l1_batch_number,\n circuit_id,\n depth;\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "l1_batch_number", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "circuit_id", + "type_info": "Int2" + }, + { + "ordinal": 2, + "name": "depth", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false, + false, + false + ] + }, + "hash": "8182690d0326b820d23fba49d391578db18c29cdca85b8b6aad86fe2a9bf6bbe" +} diff --git a/core/lib/dal/.sqlx/query-81869cb392e9fcbb71ceaa857af77b39429d56072f63b3530c576fb31d7a56f9.json b/.sqlx/query-81869cb392e9fcbb71ceaa857af77b39429d56072f63b3530c576fb31d7a56f9.json similarity index 100% rename from core/lib/dal/.sqlx/query-81869cb392e9fcbb71ceaa857af77b39429d56072f63b3530c576fb31d7a56f9.json rename to .sqlx/query-81869cb392e9fcbb71ceaa857af77b39429d56072f63b3530c576fb31d7a56f9.json diff --git a/core/lib/dal/.sqlx/query-8255d112d3929fd8355ba2ac9bc87f1fb2f138d9a2231477fcaae148c50dbb8a.json b/.sqlx/query-8255d112d3929fd8355ba2ac9bc87f1fb2f138d9a2231477fcaae148c50dbb8a.json similarity index 100% rename from core/lib/dal/.sqlx/query-8255d112d3929fd8355ba2ac9bc87f1fb2f138d9a2231477fcaae148c50dbb8a.json rename to .sqlx/query-8255d112d3929fd8355ba2ac9bc87f1fb2f138d9a2231477fcaae148c50dbb8a.json diff --git a/core/lib/dal/.sqlx/query-82ed556807bcd7dd5872c220b3399f9b8679d770b3d1ca755c42ee264342da03.json b/.sqlx/query-82ed556807bcd7dd5872c220b3399f9b8679d770b3d1ca755c42ee264342da03.json similarity index 100% rename from core/lib/dal/.sqlx/query-82ed556807bcd7dd5872c220b3399f9b8679d770b3d1ca755c42ee264342da03.json rename to .sqlx/query-82ed556807bcd7dd5872c220b3399f9b8679d770b3d1ca755c42ee264342da03.json diff --git a/core/lib/dal/.sqlx/query-83a931ceddf34e1c760649d613f534014b9ab9ca7725e14fb17aa050d9f35eb8.json b/.sqlx/query-83a931ceddf34e1c760649d613f534014b9ab9ca7725e14fb17aa050d9f35eb8.json similarity index 100% rename from core/lib/dal/.sqlx/query-83a931ceddf34e1c760649d613f534014b9ab9ca7725e14fb17aa050d9f35eb8.json rename to .sqlx/query-83a931ceddf34e1c760649d613f534014b9ab9ca7725e14fb17aa050d9f35eb8.json diff --git a/core/lib/dal/.sqlx/query-8625ca45ce76b8c8633d390e35e0c5f885240d99ea69140a4636b00469d08497.json b/.sqlx/query-8625ca45ce76b8c8633d390e35e0c5f885240d99ea69140a4636b00469d08497.json similarity index 100% rename from core/lib/dal/.sqlx/query-8625ca45ce76b8c8633d390e35e0c5f885240d99ea69140a4636b00469d08497.json rename to .sqlx/query-8625ca45ce76b8c8633d390e35e0c5f885240d99ea69140a4636b00469d08497.json diff --git a/core/lib/dal/.sqlx/query-86cbe509988c8775bcf738d5cb1edac2f0db60c263c1564b64c717f8ae53e44d.json b/.sqlx/query-86cbe509988c8775bcf738d5cb1edac2f0db60c263c1564b64c717f8ae53e44d.json similarity index 100% rename from core/lib/dal/.sqlx/query-86cbe509988c8775bcf738d5cb1edac2f0db60c263c1564b64c717f8ae53e44d.json rename to .sqlx/query-86cbe509988c8775bcf738d5cb1edac2f0db60c263c1564b64c717f8ae53e44d.json diff --git a/core/lib/dal/.sqlx/query-877d20634068170326ab5801b69c70aff49e60b7def3d93b9206e650c259168b.json b/.sqlx/query-877d20634068170326ab5801b69c70aff49e60b7def3d93b9206e650c259168b.json similarity index 100% rename from core/lib/dal/.sqlx/query-877d20634068170326ab5801b69c70aff49e60b7def3d93b9206e650c259168b.json rename to .sqlx/query-877d20634068170326ab5801b69c70aff49e60b7def3d93b9206e650c259168b.json diff --git a/core/lib/dal/.sqlx/query-87b3c0cb253a19ba181406bab5f30198c2651022c65eb9e04125356fcf52ddfc.json b/.sqlx/query-87b3c0cb253a19ba181406bab5f30198c2651022c65eb9e04125356fcf52ddfc.json similarity index 100% rename from core/lib/dal/.sqlx/query-87b3c0cb253a19ba181406bab5f30198c2651022c65eb9e04125356fcf52ddfc.json rename to .sqlx/query-87b3c0cb253a19ba181406bab5f30198c2651022c65eb9e04125356fcf52ddfc.json diff --git a/core/lib/dal/.sqlx/query-87f27295de500591f01ed76731df2aed7049c3f44a6d25556967ea867e0caf25.json b/.sqlx/query-87f27295de500591f01ed76731df2aed7049c3f44a6d25556967ea867e0caf25.json similarity index 100% rename from core/lib/dal/.sqlx/query-87f27295de500591f01ed76731df2aed7049c3f44a6d25556967ea867e0caf25.json rename to .sqlx/query-87f27295de500591f01ed76731df2aed7049c3f44a6d25556967ea867e0caf25.json diff --git a/core/lib/dal/.sqlx/query-88c629334e30bb9f5c81c858aa51af63b86e8da6d908d48998012231e1d66a60.json b/.sqlx/query-88c629334e30bb9f5c81c858aa51af63b86e8da6d908d48998012231e1d66a60.json similarity index 100% rename from core/lib/dal/.sqlx/query-88c629334e30bb9f5c81c858aa51af63b86e8da6d908d48998012231e1d66a60.json rename to .sqlx/query-88c629334e30bb9f5c81c858aa51af63b86e8da6d908d48998012231e1d66a60.json diff --git a/core/lib/dal/.sqlx/query-8903ba5db3f87851c12da133573b4207b69cc48b4ba648e797211631be612b69.json b/.sqlx/query-8903ba5db3f87851c12da133573b4207b69cc48b4ba648e797211631be612b69.json similarity index 100% rename from core/lib/dal/.sqlx/query-8903ba5db3f87851c12da133573b4207b69cc48b4ba648e797211631be612b69.json rename to .sqlx/query-8903ba5db3f87851c12da133573b4207b69cc48b4ba648e797211631be612b69.json diff --git a/core/lib/dal/.sqlx/query-894665c2c467bd1aaeb331b112c567e2667c63a033baa6b427bd8a0898c08bf2.json b/.sqlx/query-894665c2c467bd1aaeb331b112c567e2667c63a033baa6b427bd8a0898c08bf2.json similarity index 100% rename from core/lib/dal/.sqlx/query-894665c2c467bd1aaeb331b112c567e2667c63a033baa6b427bd8a0898c08bf2.json rename to .sqlx/query-894665c2c467bd1aaeb331b112c567e2667c63a033baa6b427bd8a0898c08bf2.json diff --git a/core/lib/dal/.sqlx/query-8a7a57ca3d4d65da3e0877c003902c690c33686c889d318b1d64bdd7fa6374db.json b/.sqlx/query-8a7a57ca3d4d65da3e0877c003902c690c33686c889d318b1d64bdd7fa6374db.json similarity index 100% rename from core/lib/dal/.sqlx/query-8a7a57ca3d4d65da3e0877c003902c690c33686c889d318b1d64bdd7fa6374db.json rename to .sqlx/query-8a7a57ca3d4d65da3e0877c003902c690c33686c889d318b1d64bdd7fa6374db.json diff --git a/core/lib/dal/.sqlx/query-8b9e5d525c026de97c0a732b1adc8dc4bd57e32dfefe1017acba9a15fc14b895.json b/.sqlx/query-8b9e5d525c026de97c0a732b1adc8dc4bd57e32dfefe1017acba9a15fc14b895.json similarity index 100% rename from core/lib/dal/.sqlx/query-8b9e5d525c026de97c0a732b1adc8dc4bd57e32dfefe1017acba9a15fc14b895.json rename to .sqlx/query-8b9e5d525c026de97c0a732b1adc8dc4bd57e32dfefe1017acba9a15fc14b895.json diff --git a/core/lib/dal/.sqlx/query-8ce0812420fbf35cbbbb0f77f850a54653a5c06c665433718f7ccbbf936f76ca.json b/.sqlx/query-8ce0812420fbf35cbbbb0f77f850a54653a5c06c665433718f7ccbbf936f76ca.json similarity index 100% rename from core/lib/dal/.sqlx/query-8ce0812420fbf35cbbbb0f77f850a54653a5c06c665433718f7ccbbf936f76ca.json rename to .sqlx/query-8ce0812420fbf35cbbbb0f77f850a54653a5c06c665433718f7ccbbf936f76ca.json diff --git a/.sqlx/query-8f5e89ccadd4ea1da7bfe9793a1cbb724af0f0216433a70f19d784e3f2afbc9f.json b/.sqlx/query-8f5e89ccadd4ea1da7bfe9793a1cbb724af0f0216433a70f19d784e3f2afbc9f.json new file mode 100644 index 00000000000..cf7822e8ec8 --- /dev/null +++ b/.sqlx/query-8f5e89ccadd4ea1da7bfe9793a1cbb724af0f0216433a70f19d784e3f2afbc9f.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n protocol_version\n FROM\n witness_inputs_fri\n WHERE\n l1_batch_number = $1\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "protocol_version", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [ + true + ] + }, + "hash": "8f5e89ccadd4ea1da7bfe9793a1cbb724af0f0216433a70f19d784e3f2afbc9f" +} diff --git a/core/lib/dal/.sqlx/query-93725851350146c6ec253a59af598fa893dbc9654d15753e4a538f021af67b60.json b/.sqlx/query-93725851350146c6ec253a59af598fa893dbc9654d15753e4a538f021af67b60.json similarity index 100% rename from core/lib/dal/.sqlx/query-93725851350146c6ec253a59af598fa893dbc9654d15753e4a538f021af67b60.json rename to .sqlx/query-93725851350146c6ec253a59af598fa893dbc9654d15753e4a538f021af67b60.json diff --git a/core/lib/dal/.sqlx/query-95ea0522a3eff6c0d2d0b1c58fd2767e112b95f4d103c27acd6f7ede108bd300.json b/.sqlx/query-95ea0522a3eff6c0d2d0b1c58fd2767e112b95f4d103c27acd6f7ede108bd300.json similarity index 100% rename from core/lib/dal/.sqlx/query-95ea0522a3eff6c0d2d0b1c58fd2767e112b95f4d103c27acd6f7ede108bd300.json rename to .sqlx/query-95ea0522a3eff6c0d2d0b1c58fd2767e112b95f4d103c27acd6f7ede108bd300.json diff --git a/core/lib/dal/.sqlx/query-966dddc881bfe6fd94b56f587424125a2633ddb6abaa129f2b12389140d83c3f.json b/.sqlx/query-966dddc881bfe6fd94b56f587424125a2633ddb6abaa129f2b12389140d83c3f.json similarity index 100% rename from core/lib/dal/.sqlx/query-966dddc881bfe6fd94b56f587424125a2633ddb6abaa129f2b12389140d83c3f.json rename to .sqlx/query-966dddc881bfe6fd94b56f587424125a2633ddb6abaa129f2b12389140d83c3f.json diff --git a/core/lib/dal/.sqlx/query-9955b9215096f781442153518c4f0a9676e26f422506545ccc90b7e8a36c8d47.json b/.sqlx/query-9955b9215096f781442153518c4f0a9676e26f422506545ccc90b7e8a36c8d47.json similarity index 100% rename from core/lib/dal/.sqlx/query-9955b9215096f781442153518c4f0a9676e26f422506545ccc90b7e8a36c8d47.json rename to .sqlx/query-9955b9215096f781442153518c4f0a9676e26f422506545ccc90b7e8a36c8d47.json diff --git a/core/lib/dal/.sqlx/query-99acb091650478fe0feb367b1d64561347b81f8931cc2addefa907c9aa9355e6.json b/.sqlx/query-99acb091650478fe0feb367b1d64561347b81f8931cc2addefa907c9aa9355e6.json similarity index 100% rename from core/lib/dal/.sqlx/query-99acb091650478fe0feb367b1d64561347b81f8931cc2addefa907c9aa9355e6.json rename to .sqlx/query-99acb091650478fe0feb367b1d64561347b81f8931cc2addefa907c9aa9355e6.json diff --git a/core/lib/dal/.sqlx/query-99d9ee2a0d0450acefa0d9b6c031e30606fddf6631c859ab03819ec476bcf005.json b/.sqlx/query-99d9ee2a0d0450acefa0d9b6c031e30606fddf6631c859ab03819ec476bcf005.json similarity index 100% rename from core/lib/dal/.sqlx/query-99d9ee2a0d0450acefa0d9b6c031e30606fddf6631c859ab03819ec476bcf005.json rename to .sqlx/query-99d9ee2a0d0450acefa0d9b6c031e30606fddf6631c859ab03819ec476bcf005.json diff --git a/core/lib/dal/.sqlx/query-99dd6f04e82585d81ac23bc4871578179e6269c6ff36877cedee264067ccdafc.json b/.sqlx/query-99dd6f04e82585d81ac23bc4871578179e6269c6ff36877cedee264067ccdafc.json similarity index 100% rename from core/lib/dal/.sqlx/query-99dd6f04e82585d81ac23bc4871578179e6269c6ff36877cedee264067ccdafc.json rename to .sqlx/query-99dd6f04e82585d81ac23bc4871578179e6269c6ff36877cedee264067ccdafc.json diff --git a/core/lib/dal/.sqlx/query-9c2a5f32c627d3a5c6f1e87b31ce3b0fd67aa1f5f7ea0de673a2fbe1f742db86.json b/.sqlx/query-9c2a5f32c627d3a5c6f1e87b31ce3b0fd67aa1f5f7ea0de673a2fbe1f742db86.json similarity index 100% rename from core/lib/dal/.sqlx/query-9c2a5f32c627d3a5c6f1e87b31ce3b0fd67aa1f5f7ea0de673a2fbe1f742db86.json rename to .sqlx/query-9c2a5f32c627d3a5c6f1e87b31ce3b0fd67aa1f5f7ea0de673a2fbe1f742db86.json diff --git a/core/lib/dal/.sqlx/query-9cfcde703a48b110791d2ae1103c9317c01d6e35db3b07d0a31f436e7e3c7c40.json b/.sqlx/query-9cfcde703a48b110791d2ae1103c9317c01d6e35db3b07d0a31f436e7e3c7c40.json similarity index 100% rename from core/lib/dal/.sqlx/query-9cfcde703a48b110791d2ae1103c9317c01d6e35db3b07d0a31f436e7e3c7c40.json rename to .sqlx/query-9cfcde703a48b110791d2ae1103c9317c01d6e35db3b07d0a31f436e7e3c7c40.json diff --git a/core/lib/dal/.sqlx/query-9de5acb3de1b96ff8eb62a6324e8e221a8ef9014458cc7f1dbc60c056a0768a0.json b/.sqlx/query-9de5acb3de1b96ff8eb62a6324e8e221a8ef9014458cc7f1dbc60c056a0768a0.json similarity index 100% rename from core/lib/dal/.sqlx/query-9de5acb3de1b96ff8eb62a6324e8e221a8ef9014458cc7f1dbc60c056a0768a0.json rename to .sqlx/query-9de5acb3de1b96ff8eb62a6324e8e221a8ef9014458cc7f1dbc60c056a0768a0.json diff --git a/core/lib/dal/.sqlx/query-9ee07a22405279e1e44d47ec5226a834aeac9156b974ff225d734683c1905469.json b/.sqlx/query-9ee07a22405279e1e44d47ec5226a834aeac9156b974ff225d734683c1905469.json similarity index 100% rename from core/lib/dal/.sqlx/query-9ee07a22405279e1e44d47ec5226a834aeac9156b974ff225d734683c1905469.json rename to .sqlx/query-9ee07a22405279e1e44d47ec5226a834aeac9156b974ff225d734683c1905469.json diff --git a/.sqlx/query-9ef2f43e6201cc00a0e1425a666a36532fee1450733849852dfd20e18ded1f03.json b/.sqlx/query-9ef2f43e6201cc00a0e1425a666a36532fee1450733849852dfd20e18ded1f03.json new file mode 100644 index 00000000000..fd770071cf8 --- /dev/null +++ b/.sqlx/query-9ef2f43e6201cc00a0e1425a666a36532fee1450733849852dfd20e18ded1f03.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE scheduler_witness_jobs_fri\n SET\n status = 'failed',\n error = $1,\n updated_at = NOW()\n WHERE\n l1_batch_number = $2\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Int8" + ] + }, + "nullable": [] + }, + "hash": "9ef2f43e6201cc00a0e1425a666a36532fee1450733849852dfd20e18ded1f03" +} diff --git a/core/lib/dal/.sqlx/query-9f637f37dc3a29ce7412ab4347071bd180729779a0e98ae7a6bb4386aca99716.json b/.sqlx/query-9f637f37dc3a29ce7412ab4347071bd180729779a0e98ae7a6bb4386aca99716.json similarity index 100% rename from core/lib/dal/.sqlx/query-9f637f37dc3a29ce7412ab4347071bd180729779a0e98ae7a6bb4386aca99716.json rename to .sqlx/query-9f637f37dc3a29ce7412ab4347071bd180729779a0e98ae7a6bb4386aca99716.json diff --git a/.sqlx/query-a0e2b2c034cc5f668f0b3d43b94d2e2326d7ace079b095def52723a45b65d3f3.json b/.sqlx/query-a0e2b2c034cc5f668f0b3d43b94d2e2326d7ace079b095def52723a45b65d3f3.json new file mode 100644 index 00000000000..7dc19564f7f --- /dev/null +++ b/.sqlx/query-a0e2b2c034cc5f668f0b3d43b94d2e2326d7ace079b095def52723a45b65d3f3.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE witness_inputs_fri\n SET\n status = 'failed',\n error = $1,\n updated_at = NOW()\n WHERE\n l1_batch_number = $2\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Int8" + ] + }, + "nullable": [] + }, + "hash": "a0e2b2c034cc5f668f0b3d43b94d2e2326d7ace079b095def52723a45b65d3f3" +} diff --git a/core/lib/dal/.sqlx/query-a115f795672787fe25bfaa8fd345094de508af93f4085be7cf3b54b1e8ecdadd.json b/.sqlx/query-a115f795672787fe25bfaa8fd345094de508af93f4085be7cf3b54b1e8ecdadd.json similarity index 100% rename from core/lib/dal/.sqlx/query-a115f795672787fe25bfaa8fd345094de508af93f4085be7cf3b54b1e8ecdadd.json rename to .sqlx/query-a115f795672787fe25bfaa8fd345094de508af93f4085be7cf3b54b1e8ecdadd.json diff --git a/core/lib/dal/.sqlx/query-a1f4334b6bc1642c1bc0ff4ffa34470914b52e2d714e9deb903d62a5d66f0e04.json b/.sqlx/query-a1f4334b6bc1642c1bc0ff4ffa34470914b52e2d714e9deb903d62a5d66f0e04.json similarity index 100% rename from core/lib/dal/.sqlx/query-a1f4334b6bc1642c1bc0ff4ffa34470914b52e2d714e9deb903d62a5d66f0e04.json rename to .sqlx/query-a1f4334b6bc1642c1bc0ff4ffa34470914b52e2d714e9deb903d62a5d66f0e04.json diff --git a/core/lib/dal/.sqlx/query-a2d02b71e3dcc29a2c0c20b44392cfbaf09164aecfa5eed8d7142518ad96abea.json b/.sqlx/query-a2d02b71e3dcc29a2c0c20b44392cfbaf09164aecfa5eed8d7142518ad96abea.json similarity index 100% rename from core/lib/dal/.sqlx/query-a2d02b71e3dcc29a2c0c20b44392cfbaf09164aecfa5eed8d7142518ad96abea.json rename to .sqlx/query-a2d02b71e3dcc29a2c0c20b44392cfbaf09164aecfa5eed8d7142518ad96abea.json diff --git a/.sqlx/query-a4861c931e84d897c27f666de1c5ca679a0459a012899a373c67393d30d12601.json b/.sqlx/query-a4861c931e84d897c27f666de1c5ca679a0459a012899a373c67393d30d12601.json new file mode 100644 index 00000000000..104a7fb2556 --- /dev/null +++ b/.sqlx/query-a4861c931e84d897c27f666de1c5ca679a0459a012899a373c67393d30d12601.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE scheduler_dependency_tracker_fri\n SET\n status = 'queued'\n WHERE\n l1_batch_number = ANY ($1)\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8Array" + ] + }, + "nullable": [] + }, + "hash": "a4861c931e84d897c27f666de1c5ca679a0459a012899a373c67393d30d12601" +} diff --git a/core/lib/dal/.sqlx/query-a48c92f557e5e3a2674ce0dee9cd92f5a547150590b8c221c4065eab11175c7a.json b/.sqlx/query-a48c92f557e5e3a2674ce0dee9cd92f5a547150590b8c221c4065eab11175c7a.json similarity index 100% rename from core/lib/dal/.sqlx/query-a48c92f557e5e3a2674ce0dee9cd92f5a547150590b8c221c4065eab11175c7a.json rename to .sqlx/query-a48c92f557e5e3a2674ce0dee9cd92f5a547150590b8c221c4065eab11175c7a.json diff --git a/core/lib/dal/.sqlx/query-a4a4b0bfbe05eac100c42a717e8d7cbb0bc526ebe61a07f735d4ab587058b22c.json b/.sqlx/query-a4a4b0bfbe05eac100c42a717e8d7cbb0bc526ebe61a07f735d4ab587058b22c.json similarity index 100% rename from core/lib/dal/.sqlx/query-a4a4b0bfbe05eac100c42a717e8d7cbb0bc526ebe61a07f735d4ab587058b22c.json rename to .sqlx/query-a4a4b0bfbe05eac100c42a717e8d7cbb0bc526ebe61a07f735d4ab587058b22c.json diff --git a/core/lib/dal/.sqlx/query-a4fcd075b68467bb119e49e6b20a69138206dfeb41f3daff4a3eef1de0bed4e4.json b/.sqlx/query-a4fcd075b68467bb119e49e6b20a69138206dfeb41f3daff4a3eef1de0bed4e4.json similarity index 100% rename from core/lib/dal/.sqlx/query-a4fcd075b68467bb119e49e6b20a69138206dfeb41f3daff4a3eef1de0bed4e4.json rename to .sqlx/query-a4fcd075b68467bb119e49e6b20a69138206dfeb41f3daff4a3eef1de0bed4e4.json diff --git a/core/lib/dal/.sqlx/query-a74d029f58801ec05d8d14a3b065d93e391600ab9da2e5fd4e8b139ab3d77583.json b/.sqlx/query-a74d029f58801ec05d8d14a3b065d93e391600ab9da2e5fd4e8b139ab3d77583.json similarity index 100% rename from core/lib/dal/.sqlx/query-a74d029f58801ec05d8d14a3b065d93e391600ab9da2e5fd4e8b139ab3d77583.json rename to .sqlx/query-a74d029f58801ec05d8d14a3b065d93e391600ab9da2e5fd4e8b139ab3d77583.json diff --git a/.sqlx/query-a84ee70bec8c03bd51e1c6bad44c9a64904026506914abae2946e5d353d6a604.json b/.sqlx/query-a84ee70bec8c03bd51e1c6bad44c9a64904026506914abae2946e5d353d6a604.json new file mode 100644 index 00000000000..3275df2a3d5 --- /dev/null +++ b/.sqlx/query-a84ee70bec8c03bd51e1c6bad44c9a64904026506914abae2946e5d353d6a604.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n id\n FROM\n prover_jobs_fri\n WHERE\n l1_batch_number = $1\n AND status = 'successful'\n AND aggregation_round = $2\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Int8", + "Int2" + ] + }, + "nullable": [ + false + ] + }, + "hash": "a84ee70bec8c03bd51e1c6bad44c9a64904026506914abae2946e5d353d6a604" +} diff --git a/core/lib/dal/.sqlx/query-a8dad09a54cc991706141da557dde45f8f3f3b6cf2e4136f25a1c3ab85d92668.json b/.sqlx/query-a8dad09a54cc991706141da557dde45f8f3f3b6cf2e4136f25a1c3ab85d92668.json similarity index 100% rename from core/lib/dal/.sqlx/query-a8dad09a54cc991706141da557dde45f8f3f3b6cf2e4136f25a1c3ab85d92668.json rename to .sqlx/query-a8dad09a54cc991706141da557dde45f8f3f3b6cf2e4136f25a1c3ab85d92668.json diff --git a/core/lib/dal/.sqlx/query-a91c23c4d33771122cec2589c6fe2757dbc13be6b30f5840744e5e0569adc66e.json b/.sqlx/query-a91c23c4d33771122cec2589c6fe2757dbc13be6b30f5840744e5e0569adc66e.json similarity index 100% rename from core/lib/dal/.sqlx/query-a91c23c4d33771122cec2589c6fe2757dbc13be6b30f5840744e5e0569adc66e.json rename to .sqlx/query-a91c23c4d33771122cec2589c6fe2757dbc13be6b30f5840744e5e0569adc66e.json diff --git a/.sqlx/query-aa91697157517322b0dbb53dca99f41220c51f58a03c61d6b7789eab0504e320.json b/.sqlx/query-aa91697157517322b0dbb53dca99f41220c51f58a03c61d6b7789eab0504e320.json new file mode 100644 index 00000000000..27d48231728 --- /dev/null +++ b/.sqlx/query-aa91697157517322b0dbb53dca99f41220c51f58a03c61d6b7789eab0504e320.json @@ -0,0 +1,32 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE node_aggregation_witness_jobs_fri\n SET\n status = 'queued'\n WHERE\n (l1_batch_number, circuit_id, depth) IN (\n SELECT\n prover_jobs_fri.l1_batch_number,\n prover_jobs_fri.circuit_id,\n prover_jobs_fri.depth\n FROM\n prover_jobs_fri\n JOIN node_aggregation_witness_jobs_fri nawj ON prover_jobs_fri.l1_batch_number = nawj.l1_batch_number\n AND prover_jobs_fri.circuit_id = nawj.circuit_id\n AND prover_jobs_fri.depth = nawj.depth\n WHERE\n nawj.status = 'waiting_for_proofs'\n AND prover_jobs_fri.status = 'successful'\n AND prover_jobs_fri.aggregation_round = 1\n AND prover_jobs_fri.depth = 0\n GROUP BY\n prover_jobs_fri.l1_batch_number,\n prover_jobs_fri.circuit_id,\n prover_jobs_fri.depth,\n nawj.number_of_dependent_jobs\n HAVING\n COUNT(*) = nawj.number_of_dependent_jobs\n )\n RETURNING\n l1_batch_number,\n circuit_id,\n depth;\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "l1_batch_number", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "circuit_id", + "type_info": "Int2" + }, + { + "ordinal": 2, + "name": "depth", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false, + false, + false + ] + }, + "hash": "aa91697157517322b0dbb53dca99f41220c51f58a03c61d6b7789eab0504e320" +} diff --git a/core/lib/dal/.sqlx/query-aac861efb4acb81d5cefa598c822bef649a6db197a36aca098cd8054909d82e9.json b/.sqlx/query-aac861efb4acb81d5cefa598c822bef649a6db197a36aca098cd8054909d82e9.json similarity index 100% rename from core/lib/dal/.sqlx/query-aac861efb4acb81d5cefa598c822bef649a6db197a36aca098cd8054909d82e9.json rename to .sqlx/query-aac861efb4acb81d5cefa598c822bef649a6db197a36aca098cd8054909d82e9.json diff --git a/.sqlx/query-aaf4fb97c95a5290fb1620cd868477dcf21955e0921ba648ba2e751dbfc3cb45.json b/.sqlx/query-aaf4fb97c95a5290fb1620cd868477dcf21955e0921ba648ba2e751dbfc3cb45.json new file mode 100644 index 00000000000..614b853c625 --- /dev/null +++ b/.sqlx/query-aaf4fb97c95a5290fb1620cd868477dcf21955e0921ba648ba2e751dbfc3cb45.json @@ -0,0 +1,38 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n COUNT(*) AS \"count!\",\n circuit_id AS \"circuit_id!\",\n aggregation_round AS \"aggregation_round!\",\n status AS \"status!\"\n FROM\n prover_jobs_fri\n WHERE\n status <> 'skipped'\n AND status <> 'successful'\n GROUP BY\n circuit_id,\n aggregation_round,\n status\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "count!", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "circuit_id!", + "type_info": "Int2" + }, + { + "ordinal": 2, + "name": "aggregation_round!", + "type_info": "Int2" + }, + { + "ordinal": 3, + "name": "status!", + "type_info": "Text" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + null, + false, + false, + false + ] + }, + "hash": "aaf4fb97c95a5290fb1620cd868477dcf21955e0921ba648ba2e751dbfc3cb45" +} diff --git a/core/lib/dal/.sqlx/query-ab68f07dc6f3ec66200df109527877866bbdd1f8c359d97538125756fd05a2ab.json b/.sqlx/query-ab68f07dc6f3ec66200df109527877866bbdd1f8c359d97538125756fd05a2ab.json similarity index 100% rename from core/lib/dal/.sqlx/query-ab68f07dc6f3ec66200df109527877866bbdd1f8c359d97538125756fd05a2ab.json rename to .sqlx/query-ab68f07dc6f3ec66200df109527877866bbdd1f8c359d97538125756fd05a2ab.json diff --git a/core/lib/dal/.sqlx/query-ac505ae6cfc744b07b52997db789bdc9efc6b89fc0444caf8271edd7dfe4a3bc.json b/.sqlx/query-ac505ae6cfc744b07b52997db789bdc9efc6b89fc0444caf8271edd7dfe4a3bc.json similarity index 100% rename from core/lib/dal/.sqlx/query-ac505ae6cfc744b07b52997db789bdc9efc6b89fc0444caf8271edd7dfe4a3bc.json rename to .sqlx/query-ac505ae6cfc744b07b52997db789bdc9efc6b89fc0444caf8271edd7dfe4a3bc.json diff --git a/core/lib/dal/.sqlx/query-acc8925d50a4205c0bc8b98647e43a892f5a0427ca2635946c4f9dfafa8bf0db.json b/.sqlx/query-acc8925d50a4205c0bc8b98647e43a892f5a0427ca2635946c4f9dfafa8bf0db.json similarity index 100% rename from core/lib/dal/.sqlx/query-acc8925d50a4205c0bc8b98647e43a892f5a0427ca2635946c4f9dfafa8bf0db.json rename to .sqlx/query-acc8925d50a4205c0bc8b98647e43a892f5a0427ca2635946c4f9dfafa8bf0db.json diff --git a/core/lib/dal/.sqlx/query-ada54322a28012b1b761f3631c4cd6ca26aa2fa565fcf208b6985f461c1868f2.json b/.sqlx/query-ada54322a28012b1b761f3631c4cd6ca26aa2fa565fcf208b6985f461c1868f2.json similarity index 100% rename from core/lib/dal/.sqlx/query-ada54322a28012b1b761f3631c4cd6ca26aa2fa565fcf208b6985f461c1868f2.json rename to .sqlx/query-ada54322a28012b1b761f3631c4cd6ca26aa2fa565fcf208b6985f461c1868f2.json diff --git a/core/lib/dal/.sqlx/query-ae204503b0a682a9edc4d7bd7430457113e073b392c569c077d719941d1e37aa.json b/.sqlx/query-ae204503b0a682a9edc4d7bd7430457113e073b392c569c077d719941d1e37aa.json similarity index 100% rename from core/lib/dal/.sqlx/query-ae204503b0a682a9edc4d7bd7430457113e073b392c569c077d719941d1e37aa.json rename to .sqlx/query-ae204503b0a682a9edc4d7bd7430457113e073b392c569c077d719941d1e37aa.json diff --git a/core/lib/dal/.sqlx/query-aeda34b1beadca72e3e600ea9ae63f436a4f16dbeb784d0d28be392ad96b1c49.json b/.sqlx/query-aeda34b1beadca72e3e600ea9ae63f436a4f16dbeb784d0d28be392ad96b1c49.json similarity index 100% rename from core/lib/dal/.sqlx/query-aeda34b1beadca72e3e600ea9ae63f436a4f16dbeb784d0d28be392ad96b1c49.json rename to .sqlx/query-aeda34b1beadca72e3e600ea9ae63f436a4f16dbeb784d0d28be392ad96b1c49.json diff --git a/core/lib/dal/.sqlx/query-aefea1f3e87f28791cc547f193a895006e23ec73018f4b4e0a364a741f5c9781.json b/.sqlx/query-aefea1f3e87f28791cc547f193a895006e23ec73018f4b4e0a364a741f5c9781.json similarity index 100% rename from core/lib/dal/.sqlx/query-aefea1f3e87f28791cc547f193a895006e23ec73018f4b4e0a364a741f5c9781.json rename to .sqlx/query-aefea1f3e87f28791cc547f193a895006e23ec73018f4b4e0a364a741f5c9781.json diff --git a/.sqlx/query-af72fabd90eb43fb315f46d7fe9f724216807ffd481cd6f7f19968e42e52b284.json b/.sqlx/query-af72fabd90eb43fb315f46d7fe9f724216807ffd481cd6f7f19968e42e52b284.json new file mode 100644 index 00000000000..6674fab59ea --- /dev/null +++ b/.sqlx/query-af72fabd90eb43fb315f46d7fe9f724216807ffd481cd6f7f19968e42e52b284.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE prover_jobs_fri\n SET\n status = 'sent_to_server',\n updated_at = NOW()\n WHERE\n l1_batch_number = $1\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [] + }, + "hash": "af72fabd90eb43fb315f46d7fe9f724216807ffd481cd6f7f19968e42e52b284" +} diff --git a/.sqlx/query-afc24bd1407dba82cd3dc9e7ee71ac4ab2d73bda6022700aeb0a630a2563a4b4.json b/.sqlx/query-afc24bd1407dba82cd3dc9e7ee71ac4ab2d73bda6022700aeb0a630a2563a4b4.json new file mode 100644 index 00000000000..ede2995ff55 --- /dev/null +++ b/.sqlx/query-afc24bd1407dba82cd3dc9e7ee71ac4ab2d73bda6022700aeb0a630a2563a4b4.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE leaf_aggregation_witness_jobs_fri\n SET\n status = 'failed',\n error = $1,\n updated_at = NOW()\n WHERE\n id = $2\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Int8" + ] + }, + "nullable": [] + }, + "hash": "afc24bd1407dba82cd3dc9e7ee71ac4ab2d73bda6022700aeb0a630a2563a4b4" +} diff --git a/.sqlx/query-b17c71983da060f08616e001b42f8dcbcb014b4f808c6232abd9a83354c995ac.json b/.sqlx/query-b17c71983da060f08616e001b42f8dcbcb014b4f808c6232abd9a83354c995ac.json new file mode 100644 index 00000000000..82209e00b65 --- /dev/null +++ b/.sqlx/query-b17c71983da060f08616e001b42f8dcbcb014b4f808c6232abd9a83354c995ac.json @@ -0,0 +1,35 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE node_aggregation_witness_jobs_fri\n SET\n status = 'queued',\n updated_at = NOW(),\n processing_started_at = NOW()\n WHERE\n (\n status = 'in_progress'\n AND processing_started_at <= NOW() - $1::INTERVAL\n AND attempts < $2\n )\n OR (\n status = 'failed'\n AND attempts < $2\n )\n RETURNING\n id,\n status,\n attempts\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "status", + "type_info": "Text" + }, + { + "ordinal": 2, + "name": "attempts", + "type_info": "Int2" + } + ], + "parameters": { + "Left": [ + "Interval", + "Int2" + ] + }, + "nullable": [ + false, + false, + false + ] + }, + "hash": "b17c71983da060f08616e001b42f8dcbcb014b4f808c6232abd9a83354c995ac" +} diff --git a/.sqlx/query-b23ddb16513d69331056b94d466663a9c5ea62ea7c99a77941eb8f05d4454125.json b/.sqlx/query-b23ddb16513d69331056b94d466663a9c5ea62ea7c99a77941eb8f05d4454125.json new file mode 100644 index 00000000000..fd8600d59aa --- /dev/null +++ b/.sqlx/query-b23ddb16513d69331056b94d466663a9c5ea62ea7c99a77941eb8f05d4454125.json @@ -0,0 +1,18 @@ +{ + "db_name": "PostgreSQL", + "query": "\n INSERT INTO\n leaf_aggregation_witness_jobs_fri (\n l1_batch_number,\n circuit_id,\n closed_form_inputs_blob_url,\n number_of_basic_circuits,\n protocol_version,\n status,\n created_at,\n updated_at\n )\n VALUES\n ($1, $2, $3, $4, $5, 'waiting_for_proofs', NOW(), NOW())\n ON CONFLICT (l1_batch_number, circuit_id) DO\n UPDATE\n SET\n updated_at = NOW()\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8", + "Int2", + "Text", + "Int4", + "Int4" + ] + }, + "nullable": [] + }, + "hash": "b23ddb16513d69331056b94d466663a9c5ea62ea7c99a77941eb8f05d4454125" +} diff --git a/core/lib/dal/.sqlx/query-b259e6bacd98fa68003e0c87bb28cc77bd2dcee4a04d1afc9779714854623a79.json b/.sqlx/query-b259e6bacd98fa68003e0c87bb28cc77bd2dcee4a04d1afc9779714854623a79.json similarity index 100% rename from core/lib/dal/.sqlx/query-b259e6bacd98fa68003e0c87bb28cc77bd2dcee4a04d1afc9779714854623a79.json rename to .sqlx/query-b259e6bacd98fa68003e0c87bb28cc77bd2dcee4a04d1afc9779714854623a79.json diff --git a/.sqlx/query-b321c5ba22358cbb1fd9c627f1e7b56187686173327498ac75424593547c19c5.json b/.sqlx/query-b321c5ba22358cbb1fd9c627f1e7b56187686173327498ac75424593547c19c5.json new file mode 100644 index 00000000000..bdd22927d38 --- /dev/null +++ b/.sqlx/query-b321c5ba22358cbb1fd9c627f1e7b56187686173327498ac75424593547c19c5.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n attempts\n FROM\n scheduler_witness_jobs_fri\n WHERE\n l1_batch_number = $1\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "attempts", + "type_info": "Int2" + } + ], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [ + false + ] + }, + "hash": "b321c5ba22358cbb1fd9c627f1e7b56187686173327498ac75424593547c19c5" +} diff --git a/.sqlx/query-b367ecb1ebee86ec598c4079591f8c12deeca6b8843fe3869cc2b02b30da5de6.json b/.sqlx/query-b367ecb1ebee86ec598c4079591f8c12deeca6b8843fe3869cc2b02b30da5de6.json new file mode 100644 index 00000000000..724c01ea6c5 --- /dev/null +++ b/.sqlx/query-b367ecb1ebee86ec598c4079591f8c12deeca6b8843fe3869cc2b02b30da5de6.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n attempts\n FROM\n proof_compression_jobs_fri\n WHERE\n l1_batch_number = $1\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "attempts", + "type_info": "Int2" + } + ], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [ + false + ] + }, + "hash": "b367ecb1ebee86ec598c4079591f8c12deeca6b8843fe3869cc2b02b30da5de6" +} diff --git a/.sqlx/query-b3d71dbe14bcd94131b29b64dcb49b6370c211a7fc24ad03a5f0e327f9d18040.json b/.sqlx/query-b3d71dbe14bcd94131b29b64dcb49b6370c211a7fc24ad03a5f0e327f9d18040.json new file mode 100644 index 00000000000..0ca284a3f57 --- /dev/null +++ b/.sqlx/query-b3d71dbe14bcd94131b29b64dcb49b6370c211a7fc24ad03a5f0e327f9d18040.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n attempts\n FROM\n witness_inputs_fri\n WHERE\n l1_batch_number = $1\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "attempts", + "type_info": "Int2" + } + ], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [ + false + ] + }, + "hash": "b3d71dbe14bcd94131b29b64dcb49b6370c211a7fc24ad03a5f0e327f9d18040" +} diff --git a/.sqlx/query-b4304b9afb9f838eee1fe95af5fd964d4bb39b9dcd18fb03bc11ce2fb32b7fb3.json b/.sqlx/query-b4304b9afb9f838eee1fe95af5fd964d4bb39b9dcd18fb03bc11ce2fb32b7fb3.json new file mode 100644 index 00000000000..fa6f91edfb3 --- /dev/null +++ b/.sqlx/query-b4304b9afb9f838eee1fe95af5fd964d4bb39b9dcd18fb03bc11ce2fb32b7fb3.json @@ -0,0 +1,83 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE scheduler_witness_jobs_fri\n SET\n status = 'in_progress',\n attempts = attempts + 1,\n updated_at = NOW(),\n processing_started_at = NOW(),\n picked_by = $2\n WHERE\n l1_batch_number = (\n SELECT\n l1_batch_number\n FROM\n scheduler_witness_jobs_fri\n WHERE\n status = 'queued'\n AND protocol_version = ANY ($1)\n ORDER BY\n l1_batch_number ASC\n LIMIT\n 1\n FOR UPDATE\n SKIP LOCKED\n )\n RETURNING\n scheduler_witness_jobs_fri.*\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "l1_batch_number", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "scheduler_partial_input_blob_url", + "type_info": "Text" + }, + { + "ordinal": 2, + "name": "status", + "type_info": "Text" + }, + { + "ordinal": 3, + "name": "processing_started_at", + "type_info": "Timestamp" + }, + { + "ordinal": 4, + "name": "time_taken", + "type_info": "Time" + }, + { + "ordinal": 5, + "name": "error", + "type_info": "Text" + }, + { + "ordinal": 6, + "name": "created_at", + "type_info": "Timestamp" + }, + { + "ordinal": 7, + "name": "updated_at", + "type_info": "Timestamp" + }, + { + "ordinal": 8, + "name": "attempts", + "type_info": "Int2" + }, + { + "ordinal": 9, + "name": "protocol_version", + "type_info": "Int4" + }, + { + "ordinal": 10, + "name": "picked_by", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Int4Array", + "Text" + ] + }, + "nullable": [ + false, + false, + false, + true, + true, + true, + false, + false, + false, + true, + true + ] + }, + "hash": "b4304b9afb9f838eee1fe95af5fd964d4bb39b9dcd18fb03bc11ce2fb32b7fb3" +} diff --git a/core/lib/dal/.sqlx/query-b452354c888bfc19b5f4012582061b86b1abd915739533f9982fea9d8e21b9e9.json b/.sqlx/query-b452354c888bfc19b5f4012582061b86b1abd915739533f9982fea9d8e21b9e9.json similarity index 100% rename from core/lib/dal/.sqlx/query-b452354c888bfc19b5f4012582061b86b1abd915739533f9982fea9d8e21b9e9.json rename to .sqlx/query-b452354c888bfc19b5f4012582061b86b1abd915739533f9982fea9d8e21b9e9.json diff --git a/.sqlx/query-b4794e6a0c2366d5d95ab373c310103263af3ff5cb6c9dc5df59d3cd2a5e56b4.json b/.sqlx/query-b4794e6a0c2366d5d95ab373c310103263af3ff5cb6c9dc5df59d3cd2a5e56b4.json new file mode 100644 index 00000000000..14b4115b30e --- /dev/null +++ b/.sqlx/query-b4794e6a0c2366d5d95ab373c310103263af3ff5cb6c9dc5df59d3cd2a5e56b4.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE gpu_prover_queue_fri\n SET\n instance_status = $1,\n updated_at = NOW()\n WHERE\n instance_host = $2::TEXT::inet\n AND instance_port = $3\n AND zone = $4\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Int4", + "Text" + ] + }, + "nullable": [] + }, + "hash": "b4794e6a0c2366d5d95ab373c310103263af3ff5cb6c9dc5df59d3cd2a5e56b4" +} diff --git a/core/lib/dal/.sqlx/query-b47a2961dc2f1347864682c572dd1f5e03924dbf6dd1e824d4aca837e604b7e9.json b/.sqlx/query-b47a2961dc2f1347864682c572dd1f5e03924dbf6dd1e824d4aca837e604b7e9.json similarity index 100% rename from core/lib/dal/.sqlx/query-b47a2961dc2f1347864682c572dd1f5e03924dbf6dd1e824d4aca837e604b7e9.json rename to .sqlx/query-b47a2961dc2f1347864682c572dd1f5e03924dbf6dd1e824d4aca837e604b7e9.json diff --git a/core/lib/dal/.sqlx/query-b49478150dbc8731c531ef3eddc0c2cfff08e6fef3c3824d20dfdf2d0f73e671.json b/.sqlx/query-b49478150dbc8731c531ef3eddc0c2cfff08e6fef3c3824d20dfdf2d0f73e671.json similarity index 100% rename from core/lib/dal/.sqlx/query-b49478150dbc8731c531ef3eddc0c2cfff08e6fef3c3824d20dfdf2d0f73e671.json rename to .sqlx/query-b49478150dbc8731c531ef3eddc0c2cfff08e6fef3c3824d20dfdf2d0f73e671.json diff --git a/core/lib/dal/.sqlx/query-b4a0444897b60c7061363a48b2b5386a2fd53492f3df05545edbfb0ec0f059d2.json b/.sqlx/query-b4a0444897b60c7061363a48b2b5386a2fd53492f3df05545edbfb0ec0f059d2.json similarity index 100% rename from core/lib/dal/.sqlx/query-b4a0444897b60c7061363a48b2b5386a2fd53492f3df05545edbfb0ec0f059d2.json rename to .sqlx/query-b4a0444897b60c7061363a48b2b5386a2fd53492f3df05545edbfb0ec0f059d2.json diff --git a/core/lib/dal/.sqlx/query-b5fd77f515fe168908cc90e44d0697e36b3c2a997038c30553f7727cdfa17361.json b/.sqlx/query-b5fd77f515fe168908cc90e44d0697e36b3c2a997038c30553f7727cdfa17361.json similarity index 100% rename from core/lib/dal/.sqlx/query-b5fd77f515fe168908cc90e44d0697e36b3c2a997038c30553f7727cdfa17361.json rename to .sqlx/query-b5fd77f515fe168908cc90e44d0697e36b3c2a997038c30553f7727cdfa17361.json diff --git a/core/lib/dal/.sqlx/query-b63ee98d4708c8121a287becb7e1973d18d45c4a200a60d318cdb1222d63ccaa.json b/.sqlx/query-b63ee98d4708c8121a287becb7e1973d18d45c4a200a60d318cdb1222d63ccaa.json similarity index 100% rename from core/lib/dal/.sqlx/query-b63ee98d4708c8121a287becb7e1973d18d45c4a200a60d318cdb1222d63ccaa.json rename to .sqlx/query-b63ee98d4708c8121a287becb7e1973d18d45c4a200a60d318cdb1222d63ccaa.json diff --git a/core/lib/dal/.sqlx/query-b6837d2deed935da748339538c2c332a122d0b88271ae0127c65c4612b41a619.json b/.sqlx/query-b6837d2deed935da748339538c2c332a122d0b88271ae0127c65c4612b41a619.json similarity index 100% rename from core/lib/dal/.sqlx/query-b6837d2deed935da748339538c2c332a122d0b88271ae0127c65c4612b41a619.json rename to .sqlx/query-b6837d2deed935da748339538c2c332a122d0b88271ae0127c65c4612b41a619.json diff --git a/core/lib/dal/.sqlx/query-b75e3d2fecbf5d85e93848b7a35180abbd76956e073432af8d8500327b74e488.json b/.sqlx/query-b75e3d2fecbf5d85e93848b7a35180abbd76956e073432af8d8500327b74e488.json similarity index 100% rename from core/lib/dal/.sqlx/query-b75e3d2fecbf5d85e93848b7a35180abbd76956e073432af8d8500327b74e488.json rename to .sqlx/query-b75e3d2fecbf5d85e93848b7a35180abbd76956e073432af8d8500327b74e488.json diff --git a/core/lib/dal/.sqlx/query-b7bf6999002dd89dc1224468ca79c9a85e3c24fca1bf87905f7fc68fe2ce3276.json b/.sqlx/query-b7bf6999002dd89dc1224468ca79c9a85e3c24fca1bf87905f7fc68fe2ce3276.json similarity index 100% rename from core/lib/dal/.sqlx/query-b7bf6999002dd89dc1224468ca79c9a85e3c24fca1bf87905f7fc68fe2ce3276.json rename to .sqlx/query-b7bf6999002dd89dc1224468ca79c9a85e3c24fca1bf87905f7fc68fe2ce3276.json diff --git a/core/lib/dal/.sqlx/query-b95b63f22afee3b186da4284a0a1cc9d3523a392fd2011491c6017400f313a16.json b/.sqlx/query-b95b63f22afee3b186da4284a0a1cc9d3523a392fd2011491c6017400f313a16.json similarity index 100% rename from core/lib/dal/.sqlx/query-b95b63f22afee3b186da4284a0a1cc9d3523a392fd2011491c6017400f313a16.json rename to .sqlx/query-b95b63f22afee3b186da4284a0a1cc9d3523a392fd2011491c6017400f313a16.json diff --git a/core/lib/dal/.sqlx/query-b9f77e6c15f9e635024b73f1fc985c5196c431363802b6b988939c99853b9c97.json b/.sqlx/query-b9f77e6c15f9e635024b73f1fc985c5196c431363802b6b988939c99853b9c97.json similarity index 100% rename from core/lib/dal/.sqlx/query-b9f77e6c15f9e635024b73f1fc985c5196c431363802b6b988939c99853b9c97.json rename to .sqlx/query-b9f77e6c15f9e635024b73f1fc985c5196c431363802b6b988939c99853b9c97.json diff --git a/core/lib/dal/.sqlx/query-ba1b6c4588ea3d3b138e03a63ef1731a10b332fec68f4a1e56edec4df71ccaff.json b/.sqlx/query-ba1b6c4588ea3d3b138e03a63ef1731a10b332fec68f4a1e56edec4df71ccaff.json similarity index 100% rename from core/lib/dal/.sqlx/query-ba1b6c4588ea3d3b138e03a63ef1731a10b332fec68f4a1e56edec4df71ccaff.json rename to .sqlx/query-ba1b6c4588ea3d3b138e03a63ef1731a10b332fec68f4a1e56edec4df71ccaff.json diff --git a/core/lib/dal/.sqlx/query-ba2343a38e37d104786f9276d91f67d2ef1428c61ae84003c9b52b03204d1f0a.json b/.sqlx/query-ba2343a38e37d104786f9276d91f67d2ef1428c61ae84003c9b52b03204d1f0a.json similarity index 100% rename from core/lib/dal/.sqlx/query-ba2343a38e37d104786f9276d91f67d2ef1428c61ae84003c9b52b03204d1f0a.json rename to .sqlx/query-ba2343a38e37d104786f9276d91f67d2ef1428c61ae84003c9b52b03204d1f0a.json diff --git a/core/lib/dal/.sqlx/query-bab1857df66bbef57705ae7796161f3a71f5c6737e08745a37b41b22f4dfd030.json b/.sqlx/query-bab1857df66bbef57705ae7796161f3a71f5c6737e08745a37b41b22f4dfd030.json similarity index 100% rename from core/lib/dal/.sqlx/query-bab1857df66bbef57705ae7796161f3a71f5c6737e08745a37b41b22f4dfd030.json rename to .sqlx/query-bab1857df66bbef57705ae7796161f3a71f5c6737e08745a37b41b22f4dfd030.json diff --git a/core/lib/dal/.sqlx/query-bd51c9d93b103292f5acbdb266ba4b4e2af48907fa9321064ddb24ac02ab17cd.json b/.sqlx/query-bd51c9d93b103292f5acbdb266ba4b4e2af48907fa9321064ddb24ac02ab17cd.json similarity index 100% rename from core/lib/dal/.sqlx/query-bd51c9d93b103292f5acbdb266ba4b4e2af48907fa9321064ddb24ac02ab17cd.json rename to .sqlx/query-bd51c9d93b103292f5acbdb266ba4b4e2af48907fa9321064ddb24ac02ab17cd.json diff --git a/core/lib/dal/.sqlx/query-be2c8e525d6867c0d2bd254c73ef1719fd1284af1dbb60ea128550224b52da93.json b/.sqlx/query-be2c8e525d6867c0d2bd254c73ef1719fd1284af1dbb60ea128550224b52da93.json similarity index 100% rename from core/lib/dal/.sqlx/query-be2c8e525d6867c0d2bd254c73ef1719fd1284af1dbb60ea128550224b52da93.json rename to .sqlx/query-be2c8e525d6867c0d2bd254c73ef1719fd1284af1dbb60ea128550224b52da93.json diff --git a/.sqlx/query-bfb80956a18eabf266f5b5a9d62912d57f8eb2a38bdb7884fc812a2897a3a660.json b/.sqlx/query-bfb80956a18eabf266f5b5a9d62912d57f8eb2a38bdb7884fc812a2897a3a660.json new file mode 100644 index 00000000000..550cb5ec743 --- /dev/null +++ b/.sqlx/query-bfb80956a18eabf266f5b5a9d62912d57f8eb2a38bdb7884fc812a2897a3a660.json @@ -0,0 +1,35 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE witness_inputs_fri\n SET\n status = 'queued',\n updated_at = NOW(),\n processing_started_at = NOW()\n WHERE\n (\n status = 'in_progress'\n AND processing_started_at <= NOW() - $1::INTERVAL\n AND attempts < $2\n )\n OR (\n status = 'in_gpu_proof'\n AND processing_started_at <= NOW() - $1::INTERVAL\n AND attempts < $2\n )\n OR (\n status = 'failed'\n AND attempts < $2\n )\n RETURNING\n l1_batch_number,\n status,\n attempts\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "l1_batch_number", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "status", + "type_info": "Text" + }, + { + "ordinal": 2, + "name": "attempts", + "type_info": "Int2" + } + ], + "parameters": { + "Left": [ + "Interval", + "Int2" + ] + }, + "nullable": [ + false, + false, + false + ] + }, + "hash": "bfb80956a18eabf266f5b5a9d62912d57f8eb2a38bdb7884fc812a2897a3a660" +} diff --git a/core/lib/dal/.sqlx/query-bfc84bcf0985446b337467dd1da709dbee508ad6d1cae43e477cf1bef8cb4aa9.json b/.sqlx/query-bfc84bcf0985446b337467dd1da709dbee508ad6d1cae43e477cf1bef8cb4aa9.json similarity index 100% rename from core/lib/dal/.sqlx/query-bfc84bcf0985446b337467dd1da709dbee508ad6d1cae43e477cf1bef8cb4aa9.json rename to .sqlx/query-bfc84bcf0985446b337467dd1da709dbee508ad6d1cae43e477cf1bef8cb4aa9.json diff --git a/core/lib/dal/.sqlx/query-c02f404ce9b0f92b8052ef6f3eaabda70cb9c56ae3e30dc0a8257e43d6714155.json b/.sqlx/query-c02f404ce9b0f92b8052ef6f3eaabda70cb9c56ae3e30dc0a8257e43d6714155.json similarity index 100% rename from core/lib/dal/.sqlx/query-c02f404ce9b0f92b8052ef6f3eaabda70cb9c56ae3e30dc0a8257e43d6714155.json rename to .sqlx/query-c02f404ce9b0f92b8052ef6f3eaabda70cb9c56ae3e30dc0a8257e43d6714155.json diff --git a/core/lib/dal/.sqlx/query-c03df29f4661fa47c1412bd82ba379f3b2e9ff1bc6e8e38f473fb4950c8e4b77.json b/.sqlx/query-c03df29f4661fa47c1412bd82ba379f3b2e9ff1bc6e8e38f473fb4950c8e4b77.json similarity index 100% rename from core/lib/dal/.sqlx/query-c03df29f4661fa47c1412bd82ba379f3b2e9ff1bc6e8e38f473fb4950c8e4b77.json rename to .sqlx/query-c03df29f4661fa47c1412bd82ba379f3b2e9ff1bc6e8e38f473fb4950c8e4b77.json diff --git a/.sqlx/query-c10cf20825de4d24300c7ec50d4a653852f7e43670076eb2ebcd49542a870539.json b/.sqlx/query-c10cf20825de4d24300c7ec50d4a653852f7e43670076eb2ebcd49542a870539.json new file mode 100644 index 00000000000..b341120ad7f --- /dev/null +++ b/.sqlx/query-c10cf20825de4d24300c7ec50d4a653852f7e43670076eb2ebcd49542a870539.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "\n INSERT INTO\n scheduler_dependency_tracker_fri (l1_batch_number, status, created_at, updated_at)\n VALUES\n ($1, 'waiting_for_proofs', NOW(), NOW())\n ON CONFLICT (l1_batch_number) DO\n UPDATE\n SET\n updated_at = NOW()\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [] + }, + "hash": "c10cf20825de4d24300c7ec50d4a653852f7e43670076eb2ebcd49542a870539" +} diff --git a/core/lib/dal/.sqlx/query-c139df45a977290d1c2c7987fb9c1d66aeaeb6e2d36fddcf96775f01716a8a74.json b/.sqlx/query-c139df45a977290d1c2c7987fb9c1d66aeaeb6e2d36fddcf96775f01716a8a74.json similarity index 100% rename from core/lib/dal/.sqlx/query-c139df45a977290d1c2c7987fb9c1d66aeaeb6e2d36fddcf96775f01716a8a74.json rename to .sqlx/query-c139df45a977290d1c2c7987fb9c1d66aeaeb6e2d36fddcf96775f01716a8a74.json diff --git a/core/lib/dal/.sqlx/query-c14837e92dbb02f2fde7109f524432d865852afe0c60e11a2c1800d30599aa61.json b/.sqlx/query-c14837e92dbb02f2fde7109f524432d865852afe0c60e11a2c1800d30599aa61.json similarity index 100% rename from core/lib/dal/.sqlx/query-c14837e92dbb02f2fde7109f524432d865852afe0c60e11a2c1800d30599aa61.json rename to .sqlx/query-c14837e92dbb02f2fde7109f524432d865852afe0c60e11a2c1800d30599aa61.json diff --git a/core/lib/dal/.sqlx/query-c195037dcf6031a90f407f652657956350786f3596c7302bdeb8d813f9fbf621.json b/.sqlx/query-c195037dcf6031a90f407f652657956350786f3596c7302bdeb8d813f9fbf621.json similarity index 100% rename from core/lib/dal/.sqlx/query-c195037dcf6031a90f407f652657956350786f3596c7302bdeb8d813f9fbf621.json rename to .sqlx/query-c195037dcf6031a90f407f652657956350786f3596c7302bdeb8d813f9fbf621.json diff --git a/.sqlx/query-c23d5ff919ade5898c6a912780ae899e360650afccb34f5cc301b5cbac4a3d36.json b/.sqlx/query-c23d5ff919ade5898c6a912780ae899e360650afccb34f5cc301b5cbac4a3d36.json new file mode 100644 index 00000000000..8922816c7e1 --- /dev/null +++ b/.sqlx/query-c23d5ff919ade5898c6a912780ae899e360650afccb34f5cc301b5cbac4a3d36.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE prover_jobs_fri\n SET\n status = $1,\n updated_at = NOW()\n WHERE\n id = $2\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Int8" + ] + }, + "nullable": [] + }, + "hash": "c23d5ff919ade5898c6a912780ae899e360650afccb34f5cc301b5cbac4a3d36" +} diff --git a/core/lib/dal/.sqlx/query-c2fe6a5476e69c9588eec73baba9d0e2d571533d4d5f683919987b6f8cbb00e0.json b/.sqlx/query-c2fe6a5476e69c9588eec73baba9d0e2d571533d4d5f683919987b6f8cbb00e0.json similarity index 100% rename from core/lib/dal/.sqlx/query-c2fe6a5476e69c9588eec73baba9d0e2d571533d4d5f683919987b6f8cbb00e0.json rename to .sqlx/query-c2fe6a5476e69c9588eec73baba9d0e2d571533d4d5f683919987b6f8cbb00e0.json diff --git a/core/lib/dal/.sqlx/query-c36abacc705a2244d423599779e38d60d6e93bcb34fd20422e227714fccbf6b7.json b/.sqlx/query-c36abacc705a2244d423599779e38d60d6e93bcb34fd20422e227714fccbf6b7.json similarity index 100% rename from core/lib/dal/.sqlx/query-c36abacc705a2244d423599779e38d60d6e93bcb34fd20422e227714fccbf6b7.json rename to .sqlx/query-c36abacc705a2244d423599779e38d60d6e93bcb34fd20422e227714fccbf6b7.json diff --git a/core/lib/dal/.sqlx/query-c37432fabd092fa235fc70e11430fb28594859564a0f888eae748ad1f9fcede5.json b/.sqlx/query-c37432fabd092fa235fc70e11430fb28594859564a0f888eae748ad1f9fcede5.json similarity index 100% rename from core/lib/dal/.sqlx/query-c37432fabd092fa235fc70e11430fb28594859564a0f888eae748ad1f9fcede5.json rename to .sqlx/query-c37432fabd092fa235fc70e11430fb28594859564a0f888eae748ad1f9fcede5.json diff --git a/.sqlx/query-c41312e01aa66897552e8be9acc8d43c31ec7441a7f6c5040e120810ebbb72f7.json b/.sqlx/query-c41312e01aa66897552e8be9acc8d43c31ec7441a7f6c5040e120810ebbb72f7.json new file mode 100644 index 00000000000..4c24afad4f4 --- /dev/null +++ b/.sqlx/query-c41312e01aa66897552e8be9acc8d43c31ec7441a7f6c5040e120810ebbb72f7.json @@ -0,0 +1,21 @@ +{ + "db_name": "PostgreSQL", + "query": "\n INSERT INTO\n prover_jobs_fri (\n l1_batch_number,\n circuit_id,\n circuit_blob_url,\n aggregation_round,\n sequence_number,\n depth,\n is_node_final_proof,\n protocol_version,\n status,\n created_at,\n updated_at\n )\n VALUES\n ($1, $2, $3, $4, $5, $6, $7, $8, 'queued', NOW(), NOW())\n ON CONFLICT (l1_batch_number, aggregation_round, circuit_id, depth, sequence_number) DO\n UPDATE\n SET\n updated_at = NOW()\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8", + "Int2", + "Text", + "Int2", + "Int4", + "Int4", + "Bool", + "Int4" + ] + }, + "nullable": [] + }, + "hash": "c41312e01aa66897552e8be9acc8d43c31ec7441a7f6c5040e120810ebbb72f7" +} diff --git a/core/lib/dal/.sqlx/query-c4426ae84862e720673485e3b59c116162becce06841476128f864b6028129df.json b/.sqlx/query-c4426ae84862e720673485e3b59c116162becce06841476128f864b6028129df.json similarity index 100% rename from core/lib/dal/.sqlx/query-c4426ae84862e720673485e3b59c116162becce06841476128f864b6028129df.json rename to .sqlx/query-c4426ae84862e720673485e3b59c116162becce06841476128f864b6028129df.json diff --git a/core/lib/dal/.sqlx/query-c5656667e5610ffb33e7b977ac92b7c4d79cbd404e0267794ec203df0cbb169d.json b/.sqlx/query-c5656667e5610ffb33e7b977ac92b7c4d79cbd404e0267794ec203df0cbb169d.json similarity index 100% rename from core/lib/dal/.sqlx/query-c5656667e5610ffb33e7b977ac92b7c4d79cbd404e0267794ec203df0cbb169d.json rename to .sqlx/query-c5656667e5610ffb33e7b977ac92b7c4d79cbd404e0267794ec203df0cbb169d.json diff --git a/core/lib/dal/.sqlx/query-c6d523c6ae857022318350a2f210d7eaeeb4549ed59b58f8d984be2a22a80355.json b/.sqlx/query-c6d523c6ae857022318350a2f210d7eaeeb4549ed59b58f8d984be2a22a80355.json similarity index 100% rename from core/lib/dal/.sqlx/query-c6d523c6ae857022318350a2f210d7eaeeb4549ed59b58f8d984be2a22a80355.json rename to .sqlx/query-c6d523c6ae857022318350a2f210d7eaeeb4549ed59b58f8d984be2a22a80355.json diff --git a/.sqlx/query-c706a49ff54f6b424e24d061fe7ac429aac3c030f7e226a1264243d8cdae038d.json b/.sqlx/query-c706a49ff54f6b424e24d061fe7ac429aac3c030f7e226a1264243d8cdae038d.json new file mode 100644 index 00000000000..95ae04bed50 --- /dev/null +++ b/.sqlx/query-c706a49ff54f6b424e24d061fe7ac429aac3c030f7e226a1264243d8cdae038d.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE proof_compression_jobs_fri\n SET\n status = $1,\n updated_at = NOW(),\n time_taken = $2,\n l1_proof_blob_url = $3\n WHERE\n l1_batch_number = $4\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Time", + "Text", + "Int8" + ] + }, + "nullable": [] + }, + "hash": "c706a49ff54f6b424e24d061fe7ac429aac3c030f7e226a1264243d8cdae038d" +} diff --git a/core/lib/dal/.sqlx/query-c809f42a221b18a767e9dd0286503d8bd356f2f9cc249cd8b90caa5a8b5918e3.json b/.sqlx/query-c809f42a221b18a767e9dd0286503d8bd356f2f9cc249cd8b90caa5a8b5918e3.json similarity index 100% rename from core/lib/dal/.sqlx/query-c809f42a221b18a767e9dd0286503d8bd356f2f9cc249cd8b90caa5a8b5918e3.json rename to .sqlx/query-c809f42a221b18a767e9dd0286503d8bd356f2f9cc249cd8b90caa5a8b5918e3.json diff --git a/core/lib/dal/.sqlx/query-c8155c4e4701fc771918ac1bb4d16f8cc32e365e2ffbd17dc99885de427f2777.json b/.sqlx/query-c8155c4e4701fc771918ac1bb4d16f8cc32e365e2ffbd17dc99885de427f2777.json similarity index 100% rename from core/lib/dal/.sqlx/query-c8155c4e4701fc771918ac1bb4d16f8cc32e365e2ffbd17dc99885de427f2777.json rename to .sqlx/query-c8155c4e4701fc771918ac1bb4d16f8cc32e365e2ffbd17dc99885de427f2777.json diff --git a/core/lib/dal/.sqlx/query-c9e05ebc7b61c1f409c330bc110bed26c831730944237b74bed98869c83b3ca5.json b/.sqlx/query-c9e05ebc7b61c1f409c330bc110bed26c831730944237b74bed98869c83b3ca5.json similarity index 100% rename from core/lib/dal/.sqlx/query-c9e05ebc7b61c1f409c330bc110bed26c831730944237b74bed98869c83b3ca5.json rename to .sqlx/query-c9e05ebc7b61c1f409c330bc110bed26c831730944237b74bed98869c83b3ca5.json diff --git a/.sqlx/query-ca9d06141265b8524ee28c55569cb21a635037d89ce24dd3ad58ffaadb59594a.json b/.sqlx/query-ca9d06141265b8524ee28c55569cb21a635037d89ce24dd3ad58ffaadb59594a.json new file mode 100644 index 00000000000..ff49f615ab5 --- /dev/null +++ b/.sqlx/query-ca9d06141265b8524ee28c55569cb21a635037d89ce24dd3ad58ffaadb59594a.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n l1_batch_number\n FROM\n proof_compression_jobs_fri\n WHERE\n status <> 'successful'\n ORDER BY\n l1_batch_number ASC\n LIMIT\n 1\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "l1_batch_number", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false + ] + }, + "hash": "ca9d06141265b8524ee28c55569cb21a635037d89ce24dd3ad58ffaadb59594a" +} diff --git a/core/lib/dal/.sqlx/query-cb0a9f6137fb6bee5d17d644714b3b22ea2cd184932fcd59f5931239c7a78003.json b/.sqlx/query-cb0a9f6137fb6bee5d17d644714b3b22ea2cd184932fcd59f5931239c7a78003.json similarity index 100% rename from core/lib/dal/.sqlx/query-cb0a9f6137fb6bee5d17d644714b3b22ea2cd184932fcd59f5931239c7a78003.json rename to .sqlx/query-cb0a9f6137fb6bee5d17d644714b3b22ea2cd184932fcd59f5931239c7a78003.json diff --git a/core/lib/dal/.sqlx/query-cb98d84fc34af1e4a4c2f427c5bb4afd384063ae394a847b26304dd18d490ab4.json b/.sqlx/query-cb98d84fc34af1e4a4c2f427c5bb4afd384063ae394a847b26304dd18d490ab4.json similarity index 100% rename from core/lib/dal/.sqlx/query-cb98d84fc34af1e4a4c2f427c5bb4afd384063ae394a847b26304dd18d490ab4.json rename to .sqlx/query-cb98d84fc34af1e4a4c2f427c5bb4afd384063ae394a847b26304dd18d490ab4.json diff --git a/.sqlx/query-ce5779092feb8a3d3e2c5e395783e67f08f2ead5f55bfb6594e50346bf9cf2ef.json b/.sqlx/query-ce5779092feb8a3d3e2c5e395783e67f08f2ead5f55bfb6594e50346bf9cf2ef.json new file mode 100644 index 00000000000..6f83fd55064 --- /dev/null +++ b/.sqlx/query-ce5779092feb8a3d3e2c5e395783e67f08f2ead5f55bfb6594e50346bf9cf2ef.json @@ -0,0 +1,32 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n MIN(l1_batch_number) AS \"l1_batch_number!\",\n circuit_id,\n aggregation_round\n FROM\n prover_jobs_fri\n WHERE\n status IN ('queued', 'in_gpu_proof', 'in_progress', 'failed')\n GROUP BY\n circuit_id,\n aggregation_round\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "l1_batch_number!", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "circuit_id", + "type_info": "Int2" + }, + { + "ordinal": 2, + "name": "aggregation_round", + "type_info": "Int2" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + null, + false, + false + ] + }, + "hash": "ce5779092feb8a3d3e2c5e395783e67f08f2ead5f55bfb6594e50346bf9cf2ef" +} diff --git a/core/lib/dal/.sqlx/query-cea366a9d0da60bf03c71be26862929e051270056ebf113a657a464f89c7fd57.json b/.sqlx/query-cea366a9d0da60bf03c71be26862929e051270056ebf113a657a464f89c7fd57.json similarity index 100% rename from core/lib/dal/.sqlx/query-cea366a9d0da60bf03c71be26862929e051270056ebf113a657a464f89c7fd57.json rename to .sqlx/query-cea366a9d0da60bf03c71be26862929e051270056ebf113a657a464f89c7fd57.json diff --git a/core/lib/dal/.sqlx/query-cea9fe027a6a0ada827f23b48ac32432295b2f7ee40bf13522a6edbd236f1970.json b/.sqlx/query-cea9fe027a6a0ada827f23b48ac32432295b2f7ee40bf13522a6edbd236f1970.json similarity index 100% rename from core/lib/dal/.sqlx/query-cea9fe027a6a0ada827f23b48ac32432295b2f7ee40bf13522a6edbd236f1970.json rename to .sqlx/query-cea9fe027a6a0ada827f23b48ac32432295b2f7ee40bf13522a6edbd236f1970.json diff --git a/core/lib/dal/.sqlx/query-cf8cff1e6d277088519ef7dfbdb1885d320c146cd8fad77c107ef12fa38e6c98.json b/.sqlx/query-cf8cff1e6d277088519ef7dfbdb1885d320c146cd8fad77c107ef12fa38e6c98.json similarity index 100% rename from core/lib/dal/.sqlx/query-cf8cff1e6d277088519ef7dfbdb1885d320c146cd8fad77c107ef12fa38e6c98.json rename to .sqlx/query-cf8cff1e6d277088519ef7dfbdb1885d320c146cd8fad77c107ef12fa38e6c98.json diff --git a/core/lib/dal/.sqlx/query-d14b52df2cd9f9e484c60ba00383b438f14b68535111cf2cedd363fc646aac99.json b/.sqlx/query-d14b52df2cd9f9e484c60ba00383b438f14b68535111cf2cedd363fc646aac99.json similarity index 100% rename from core/lib/dal/.sqlx/query-d14b52df2cd9f9e484c60ba00383b438f14b68535111cf2cedd363fc646aac99.json rename to .sqlx/query-d14b52df2cd9f9e484c60ba00383b438f14b68535111cf2cedd363fc646aac99.json diff --git a/core/lib/dal/.sqlx/query-d3b09cbcddf6238b358d32d57678242aad3e9a47400f6d6837a35f4c54a216b9.json b/.sqlx/query-d3b09cbcddf6238b358d32d57678242aad3e9a47400f6d6837a35f4c54a216b9.json similarity index 100% rename from core/lib/dal/.sqlx/query-d3b09cbcddf6238b358d32d57678242aad3e9a47400f6d6837a35f4c54a216b9.json rename to .sqlx/query-d3b09cbcddf6238b358d32d57678242aad3e9a47400f6d6837a35f4c54a216b9.json diff --git a/core/lib/dal/.sqlx/query-d3f9202d665ef4fcb028dae6484253eb340a21afd7d65ce6d2f523aeded8dfc0.json b/.sqlx/query-d3f9202d665ef4fcb028dae6484253eb340a21afd7d65ce6d2f523aeded8dfc0.json similarity index 100% rename from core/lib/dal/.sqlx/query-d3f9202d665ef4fcb028dae6484253eb340a21afd7d65ce6d2f523aeded8dfc0.json rename to .sqlx/query-d3f9202d665ef4fcb028dae6484253eb340a21afd7d65ce6d2f523aeded8dfc0.json diff --git a/core/lib/dal/.sqlx/query-d50555b3b7a1feadd34a2fe90b205ed6a7335a7092c7dc2b81337535e4d489d5.json b/.sqlx/query-d50555b3b7a1feadd34a2fe90b205ed6a7335a7092c7dc2b81337535e4d489d5.json similarity index 100% rename from core/lib/dal/.sqlx/query-d50555b3b7a1feadd34a2fe90b205ed6a7335a7092c7dc2b81337535e4d489d5.json rename to .sqlx/query-d50555b3b7a1feadd34a2fe90b205ed6a7335a7092c7dc2b81337535e4d489d5.json diff --git a/core/lib/dal/.sqlx/query-d6b70256793417a949081899eccf75260c7afaf110870656061a04079c35c2d8.json b/.sqlx/query-d6b70256793417a949081899eccf75260c7afaf110870656061a04079c35c2d8.json similarity index 100% rename from core/lib/dal/.sqlx/query-d6b70256793417a949081899eccf75260c7afaf110870656061a04079c35c2d8.json rename to .sqlx/query-d6b70256793417a949081899eccf75260c7afaf110870656061a04079c35c2d8.json diff --git a/core/lib/dal/.sqlx/query-d70cfc158e31dd2d5c942d24f81fd17f833fb15b58b0110c7cc566946db98e76.json b/.sqlx/query-d70cfc158e31dd2d5c942d24f81fd17f833fb15b58b0110c7cc566946db98e76.json similarity index 100% rename from core/lib/dal/.sqlx/query-d70cfc158e31dd2d5c942d24f81fd17f833fb15b58b0110c7cc566946db98e76.json rename to .sqlx/query-d70cfc158e31dd2d5c942d24f81fd17f833fb15b58b0110c7cc566946db98e76.json diff --git a/core/lib/dal/.sqlx/query-d712707e47e143c52330ea6e0513d2839f0f928c06b8020eecec38e895f99b42.json b/.sqlx/query-d712707e47e143c52330ea6e0513d2839f0f928c06b8020eecec38e895f99b42.json similarity index 100% rename from core/lib/dal/.sqlx/query-d712707e47e143c52330ea6e0513d2839f0f928c06b8020eecec38e895f99b42.json rename to .sqlx/query-d712707e47e143c52330ea6e0513d2839f0f928c06b8020eecec38e895f99b42.json diff --git a/.sqlx/query-d7e8eabd7b43ff62838fbc847e4813d2b2d411bd5faf8306cd48db500532b711.json b/.sqlx/query-d7e8eabd7b43ff62838fbc847e4813d2b2d411bd5faf8306cd48db500532b711.json new file mode 100644 index 00000000000..a049d76c24b --- /dev/null +++ b/.sqlx/query-d7e8eabd7b43ff62838fbc847e4813d2b2d411bd5faf8306cd48db500532b711.json @@ -0,0 +1,29 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n l1_batch_number,\n status\n FROM\n proof_compression_jobs_fri\n WHERE\n l1_batch_number = (\n SELECT\n MIN(l1_batch_number)\n FROM\n proof_compression_jobs_fri\n WHERE\n status = $1\n OR status = $2\n )\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "l1_batch_number", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "status", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false, + false + ] + }, + "hash": "d7e8eabd7b43ff62838fbc847e4813d2b2d411bd5faf8306cd48db500532b711" +} diff --git a/core/lib/dal/.sqlx/query-d7ed82f0d012f72374edb2ebcec33c83477d65a6f8cb2673f67b3148cd95b436.json b/.sqlx/query-d7ed82f0d012f72374edb2ebcec33c83477d65a6f8cb2673f67b3148cd95b436.json similarity index 100% rename from core/lib/dal/.sqlx/query-d7ed82f0d012f72374edb2ebcec33c83477d65a6f8cb2673f67b3148cd95b436.json rename to .sqlx/query-d7ed82f0d012f72374edb2ebcec33c83477d65a6f8cb2673f67b3148cd95b436.json diff --git a/.sqlx/query-d8e3ee346375e4b6a8b2c73a3827e88abd0f8164c2413dc83c91c29665ca645e.json b/.sqlx/query-d8e3ee346375e4b6a8b2c73a3827e88abd0f8164c2413dc83c91c29665ca645e.json new file mode 100644 index 00000000000..ae7bcea1882 --- /dev/null +++ b/.sqlx/query-d8e3ee346375e4b6a8b2c73a3827e88abd0f8164c2413dc83c91c29665ca645e.json @@ -0,0 +1,35 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE leaf_aggregation_witness_jobs_fri\n SET\n status = 'queued',\n updated_at = NOW(),\n processing_started_at = NOW()\n WHERE\n (\n status = 'in_progress'\n AND processing_started_at <= NOW() - $1::INTERVAL\n AND attempts < $2\n )\n OR (\n status = 'failed'\n AND attempts < $2\n )\n RETURNING\n id,\n status,\n attempts\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "status", + "type_info": "Text" + }, + { + "ordinal": 2, + "name": "attempts", + "type_info": "Int2" + } + ], + "parameters": { + "Left": [ + "Interval", + "Int2" + ] + }, + "nullable": [ + false, + false, + false + ] + }, + "hash": "d8e3ee346375e4b6a8b2c73a3827e88abd0f8164c2413dc83c91c29665ca645e" +} diff --git a/core/lib/dal/.sqlx/query-da51a5220c2b964303292592c34e8ee5e54b170de9da863bbdbc79e3f206640b.json b/.sqlx/query-da51a5220c2b964303292592c34e8ee5e54b170de9da863bbdbc79e3f206640b.json similarity index 100% rename from core/lib/dal/.sqlx/query-da51a5220c2b964303292592c34e8ee5e54b170de9da863bbdbc79e3f206640b.json rename to .sqlx/query-da51a5220c2b964303292592c34e8ee5e54b170de9da863bbdbc79e3f206640b.json diff --git a/core/lib/dal/.sqlx/query-da72486421d60d3d633e19632a8c66fc73c2d4f35a5dc40e117903dba4e7edb2.json b/.sqlx/query-da72486421d60d3d633e19632a8c66fc73c2d4f35a5dc40e117903dba4e7edb2.json similarity index 100% rename from core/lib/dal/.sqlx/query-da72486421d60d3d633e19632a8c66fc73c2d4f35a5dc40e117903dba4e7edb2.json rename to .sqlx/query-da72486421d60d3d633e19632a8c66fc73c2d4f35a5dc40e117903dba4e7edb2.json diff --git a/.sqlx/query-db3e74f0e83ffbf84a6d61e560f2060fbea775dc185f639139fbfd23e4d5f3c6.json b/.sqlx/query-db3e74f0e83ffbf84a6d61e560f2060fbea775dc185f639139fbfd23e4d5f3c6.json new file mode 100644 index 00000000000..d9f7527dfa0 --- /dev/null +++ b/.sqlx/query-db3e74f0e83ffbf84a6d61e560f2060fbea775dc185f639139fbfd23e4d5f3c6.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE node_aggregation_witness_jobs_fri\n SET\n status = 'successful',\n updated_at = NOW(),\n time_taken = $1\n WHERE\n id = $2\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Time", + "Int8" + ] + }, + "nullable": [] + }, + "hash": "db3e74f0e83ffbf84a6d61e560f2060fbea775dc185f639139fbfd23e4d5f3c6" +} diff --git a/core/lib/dal/.sqlx/query-db41e2480bdef66e1c89347402418128cae1b40ea2ee34b9d5269c12f8b5738a.json b/.sqlx/query-db41e2480bdef66e1c89347402418128cae1b40ea2ee34b9d5269c12f8b5738a.json similarity index 100% rename from core/lib/dal/.sqlx/query-db41e2480bdef66e1c89347402418128cae1b40ea2ee34b9d5269c12f8b5738a.json rename to .sqlx/query-db41e2480bdef66e1c89347402418128cae1b40ea2ee34b9d5269c12f8b5738a.json diff --git a/core/lib/dal/.sqlx/query-dc16d0fac093a52480b66dfcb5976fb01e6629e8c982c265f2af1d5000090572.json b/.sqlx/query-dc16d0fac093a52480b66dfcb5976fb01e6629e8c982c265f2af1d5000090572.json similarity index 100% rename from core/lib/dal/.sqlx/query-dc16d0fac093a52480b66dfcb5976fb01e6629e8c982c265f2af1d5000090572.json rename to .sqlx/query-dc16d0fac093a52480b66dfcb5976fb01e6629e8c982c265f2af1d5000090572.json diff --git a/core/lib/dal/.sqlx/query-dc481f59aae632ff6f5fa23f5c5c82627a936f7ea9f6c354eca4bea76fac6b10.json b/.sqlx/query-dc481f59aae632ff6f5fa23f5c5c82627a936f7ea9f6c354eca4bea76fac6b10.json similarity index 100% rename from core/lib/dal/.sqlx/query-dc481f59aae632ff6f5fa23f5c5c82627a936f7ea9f6c354eca4bea76fac6b10.json rename to .sqlx/query-dc481f59aae632ff6f5fa23f5c5c82627a936f7ea9f6c354eca4bea76fac6b10.json diff --git a/core/lib/dal/.sqlx/query-dd55e46dfa5ba3692d9620088a3550b8db817630d1a9341db4a1f453f12e64fb.json b/.sqlx/query-dd55e46dfa5ba3692d9620088a3550b8db817630d1a9341db4a1f453f12e64fb.json similarity index 100% rename from core/lib/dal/.sqlx/query-dd55e46dfa5ba3692d9620088a3550b8db817630d1a9341db4a1f453f12e64fb.json rename to .sqlx/query-dd55e46dfa5ba3692d9620088a3550b8db817630d1a9341db4a1f453f12e64fb.json diff --git a/core/lib/dal/.sqlx/query-de3a5a35b111bd831bebe6d9391bf58b311d81c5fc0a6fbaccf204976f76f378.json b/.sqlx/query-de3a5a35b111bd831bebe6d9391bf58b311d81c5fc0a6fbaccf204976f76f378.json similarity index 100% rename from core/lib/dal/.sqlx/query-de3a5a35b111bd831bebe6d9391bf58b311d81c5fc0a6fbaccf204976f76f378.json rename to .sqlx/query-de3a5a35b111bd831bebe6d9391bf58b311d81c5fc0a6fbaccf204976f76f378.json diff --git a/core/lib/dal/.sqlx/query-dea22358feed1418430505767d03aa4239d3a8be71b47178b4b8fb11fe898b31.json b/.sqlx/query-dea22358feed1418430505767d03aa4239d3a8be71b47178b4b8fb11fe898b31.json similarity index 100% rename from core/lib/dal/.sqlx/query-dea22358feed1418430505767d03aa4239d3a8be71b47178b4b8fb11fe898b31.json rename to .sqlx/query-dea22358feed1418430505767d03aa4239d3a8be71b47178b4b8fb11fe898b31.json diff --git a/.sqlx/query-df00e33809768120e395d8f740770a4e629b2a1cde641e74e4e55bb100df809f.json b/.sqlx/query-df00e33809768120e395d8f740770a4e629b2a1cde641e74e4e55bb100df809f.json new file mode 100644 index 00000000000..9ad3099d776 --- /dev/null +++ b/.sqlx/query-df00e33809768120e395d8f740770a4e629b2a1cde641e74e4e55bb100df809f.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n attempts\n FROM\n prover_jobs_fri\n WHERE\n id = $1\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "attempts", + "type_info": "Int2" + } + ], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [ + false + ] + }, + "hash": "df00e33809768120e395d8f740770a4e629b2a1cde641e74e4e55bb100df809f" +} diff --git a/core/lib/dal/.sqlx/query-df3256c012f86a9cd3b9260b97be5c6feb8059722149a747c4b6bd46731e2536.json b/.sqlx/query-df3256c012f86a9cd3b9260b97be5c6feb8059722149a747c4b6bd46731e2536.json similarity index 100% rename from core/lib/dal/.sqlx/query-df3256c012f86a9cd3b9260b97be5c6feb8059722149a747c4b6bd46731e2536.json rename to .sqlx/query-df3256c012f86a9cd3b9260b97be5c6feb8059722149a747c4b6bd46731e2536.json diff --git a/core/lib/dal/.sqlx/query-e073cfdc7a00559994ce04eca15f35d55901fb1e6805f23413ea43e3637540a0.json b/.sqlx/query-e073cfdc7a00559994ce04eca15f35d55901fb1e6805f23413ea43e3637540a0.json similarity index 100% rename from core/lib/dal/.sqlx/query-e073cfdc7a00559994ce04eca15f35d55901fb1e6805f23413ea43e3637540a0.json rename to .sqlx/query-e073cfdc7a00559994ce04eca15f35d55901fb1e6805f23413ea43e3637540a0.json diff --git a/.sqlx/query-e3479d12d9dc97001cf03dc42d9b957e92cd375ec33fe16f855f319ffc0b208e.json b/.sqlx/query-e3479d12d9dc97001cf03dc42d9b957e92cd375ec33fe16f855f319ffc0b208e.json new file mode 100644 index 00000000000..645c9109550 --- /dev/null +++ b/.sqlx/query-e3479d12d9dc97001cf03dc42d9b957e92cd375ec33fe16f855f319ffc0b208e.json @@ -0,0 +1,130 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n *\n FROM\n scheduler_dependency_tracker_fri\n WHERE\n l1_batch_number = $1\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "l1_batch_number", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "status", + "type_info": "Text" + }, + { + "ordinal": 2, + "name": "circuit_1_final_prover_job_id", + "type_info": "Int8" + }, + { + "ordinal": 3, + "name": "circuit_2_final_prover_job_id", + "type_info": "Int8" + }, + { + "ordinal": 4, + "name": "circuit_3_final_prover_job_id", + "type_info": "Int8" + }, + { + "ordinal": 5, + "name": "circuit_4_final_prover_job_id", + "type_info": "Int8" + }, + { + "ordinal": 6, + "name": "circuit_5_final_prover_job_id", + "type_info": "Int8" + }, + { + "ordinal": 7, + "name": "circuit_6_final_prover_job_id", + "type_info": "Int8" + }, + { + "ordinal": 8, + "name": "circuit_7_final_prover_job_id", + "type_info": "Int8" + }, + { + "ordinal": 9, + "name": "circuit_8_final_prover_job_id", + "type_info": "Int8" + }, + { + "ordinal": 10, + "name": "circuit_9_final_prover_job_id", + "type_info": "Int8" + }, + { + "ordinal": 11, + "name": "circuit_10_final_prover_job_id", + "type_info": "Int8" + }, + { + "ordinal": 12, + "name": "circuit_11_final_prover_job_id", + "type_info": "Int8" + }, + { + "ordinal": 13, + "name": "circuit_12_final_prover_job_id", + "type_info": "Int8" + }, + { + "ordinal": 14, + "name": "circuit_13_final_prover_job_id", + "type_info": "Int8" + }, + { + "ordinal": 15, + "name": "created_at", + "type_info": "Timestamp" + }, + { + "ordinal": 16, + "name": "updated_at", + "type_info": "Timestamp" + }, + { + "ordinal": 17, + "name": "eip_4844_final_prover_job_id_0", + "type_info": "Int8" + }, + { + "ordinal": 18, + "name": "eip_4844_final_prover_job_id_1", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [ + false, + false, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + false, + false, + true, + true + ] + }, + "hash": "e3479d12d9dc97001cf03dc42d9b957e92cd375ec33fe16f855f319ffc0b208e" +} diff --git a/core/lib/dal/.sqlx/query-e673789d5b4a7aae11feccb085bf3f9dd37b771cf76261762ae18fd14cf0efc5.json b/.sqlx/query-e673789d5b4a7aae11feccb085bf3f9dd37b771cf76261762ae18fd14cf0efc5.json similarity index 100% rename from core/lib/dal/.sqlx/query-e673789d5b4a7aae11feccb085bf3f9dd37b771cf76261762ae18fd14cf0efc5.json rename to .sqlx/query-e673789d5b4a7aae11feccb085bf3f9dd37b771cf76261762ae18fd14cf0efc5.json diff --git a/.sqlx/query-e74a34a59e6afda689b0ec9e19071ababa66e4a443fbefbfffca72b7540b075b.json b/.sqlx/query-e74a34a59e6afda689b0ec9e19071ababa66e4a443fbefbfffca72b7540b075b.json new file mode 100644 index 00000000000..54ea6b6eb03 --- /dev/null +++ b/.sqlx/query-e74a34a59e6afda689b0ec9e19071ababa66e4a443fbefbfffca72b7540b075b.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "\n INSERT INTO\n proof_compression_jobs_fri (l1_batch_number, status, created_at, updated_at)\n VALUES\n ($1, $2, NOW(), NOW())\n ON CONFLICT (l1_batch_number) DO NOTHING\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8", + "Text" + ] + }, + "nullable": [] + }, + "hash": "e74a34a59e6afda689b0ec9e19071ababa66e4a443fbefbfffca72b7540b075b" +} diff --git a/core/lib/dal/.sqlx/query-e7d47990db585af7cbf096155babe152ead3d4a7f22bc3584803288e8d639c13.json b/.sqlx/query-e7d47990db585af7cbf096155babe152ead3d4a7f22bc3584803288e8d639c13.json similarity index 100% rename from core/lib/dal/.sqlx/query-e7d47990db585af7cbf096155babe152ead3d4a7f22bc3584803288e8d639c13.json rename to .sqlx/query-e7d47990db585af7cbf096155babe152ead3d4a7f22bc3584803288e8d639c13.json diff --git a/.sqlx/query-e9adf5b5a1ab84c20a514a7775f91a9984685eaaaa0a8b223410d560a15a3034.json b/.sqlx/query-e9adf5b5a1ab84c20a514a7775f91a9984685eaaaa0a8b223410d560a15a3034.json new file mode 100644 index 00000000000..975c061632a --- /dev/null +++ b/.sqlx/query-e9adf5b5a1ab84c20a514a7775f91a9984685eaaaa0a8b223410d560a15a3034.json @@ -0,0 +1,61 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE prover_jobs_fri\n SET\n status = 'in_progress',\n attempts = attempts + 1,\n processing_started_at = NOW(),\n updated_at = NOW(),\n picked_by = $4\n WHERE\n id = (\n SELECT\n pj.id\n FROM\n (\n SELECT\n *\n FROM\n UNNEST($1::SMALLINT[], $2::SMALLINT[])\n ) AS tuple (circuit_id, ROUND)\n JOIN LATERAL (\n SELECT\n *\n FROM\n prover_jobs_fri AS pj\n WHERE\n pj.status = 'queued'\n AND pj.protocol_version = ANY ($3)\n AND pj.circuit_id = tuple.circuit_id\n AND pj.aggregation_round = tuple.round\n ORDER BY\n pj.l1_batch_number ASC,\n pj.id ASC\n LIMIT\n 1\n ) AS pj ON TRUE\n ORDER BY\n pj.l1_batch_number ASC,\n pj.aggregation_round DESC,\n pj.id ASC\n LIMIT\n 1\n FOR UPDATE\n SKIP LOCKED\n )\n RETURNING\n prover_jobs_fri.id,\n prover_jobs_fri.l1_batch_number,\n prover_jobs_fri.circuit_id,\n prover_jobs_fri.aggregation_round,\n prover_jobs_fri.sequence_number,\n prover_jobs_fri.depth,\n prover_jobs_fri.is_node_final_proof\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "l1_batch_number", + "type_info": "Int8" + }, + { + "ordinal": 2, + "name": "circuit_id", + "type_info": "Int2" + }, + { + "ordinal": 3, + "name": "aggregation_round", + "type_info": "Int2" + }, + { + "ordinal": 4, + "name": "sequence_number", + "type_info": "Int4" + }, + { + "ordinal": 5, + "name": "depth", + "type_info": "Int4" + }, + { + "ordinal": 6, + "name": "is_node_final_proof", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Int2Array", + "Int2Array", + "Int4Array", + "Text" + ] + }, + "nullable": [ + false, + false, + false, + false, + false, + false, + false + ] + }, + "hash": "e9adf5b5a1ab84c20a514a7775f91a9984685eaaaa0a8b223410d560a15a3034" +} diff --git a/.sqlx/query-e9ca863d6e77edd39a9fc55700a6686e655206601854799139c22c017a214744.json b/.sqlx/query-e9ca863d6e77edd39a9fc55700a6686e655206601854799139c22c017a214744.json new file mode 100644 index 00000000000..0bdcbb99add --- /dev/null +++ b/.sqlx/query-e9ca863d6e77edd39a9fc55700a6686e655206601854799139c22c017a214744.json @@ -0,0 +1,19 @@ +{ + "db_name": "PostgreSQL", + "query": "\n INSERT INTO\n node_aggregation_witness_jobs_fri (\n l1_batch_number,\n circuit_id,\n depth,\n aggregations_url,\n number_of_dependent_jobs,\n protocol_version,\n status,\n created_at,\n updated_at\n )\n VALUES\n ($1, $2, $3, $4, $5, $6, 'waiting_for_proofs', NOW(), NOW())\n ON CONFLICT (l1_batch_number, circuit_id, depth) DO\n UPDATE\n SET\n updated_at = NOW()\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8", + "Int2", + "Int4", + "Text", + "Int4", + "Int4" + ] + }, + "nullable": [] + }, + "hash": "e9ca863d6e77edd39a9fc55700a6686e655206601854799139c22c017a214744" +} diff --git a/core/lib/dal/.sqlx/query-ea682d41219feda3514336f4c1ae6ecbe96475e83dfed603bd305e72460f52c2.json b/.sqlx/query-ea682d41219feda3514336f4c1ae6ecbe96475e83dfed603bd305e72460f52c2.json similarity index 100% rename from core/lib/dal/.sqlx/query-ea682d41219feda3514336f4c1ae6ecbe96475e83dfed603bd305e72460f52c2.json rename to .sqlx/query-ea682d41219feda3514336f4c1ae6ecbe96475e83dfed603bd305e72460f52c2.json diff --git a/core/lib/dal/.sqlx/query-ea904aa930d602d33b6fbc1bf1178a8a0ec739f4ddec8ffeb3a87253aeb18d30.json b/.sqlx/query-ea904aa930d602d33b6fbc1bf1178a8a0ec739f4ddec8ffeb3a87253aeb18d30.json similarity index 100% rename from core/lib/dal/.sqlx/query-ea904aa930d602d33b6fbc1bf1178a8a0ec739f4ddec8ffeb3a87253aeb18d30.json rename to .sqlx/query-ea904aa930d602d33b6fbc1bf1178a8a0ec739f4ddec8ffeb3a87253aeb18d30.json diff --git a/core/lib/dal/.sqlx/query-eab03e888f20020462ede2cd59fc0d68195346daf5f38d102eab1c1b73b0f82f.json b/.sqlx/query-eab03e888f20020462ede2cd59fc0d68195346daf5f38d102eab1c1b73b0f82f.json similarity index 100% rename from core/lib/dal/.sqlx/query-eab03e888f20020462ede2cd59fc0d68195346daf5f38d102eab1c1b73b0f82f.json rename to .sqlx/query-eab03e888f20020462ede2cd59fc0d68195346daf5f38d102eab1c1b73b0f82f.json diff --git a/core/lib/dal/.sqlx/query-eb9cd837842490dcb8ab8894ccdb1fcdd02ba2ae2104a0ef972fe809bf136425.json b/.sqlx/query-eb9cd837842490dcb8ab8894ccdb1fcdd02ba2ae2104a0ef972fe809bf136425.json similarity index 100% rename from core/lib/dal/.sqlx/query-eb9cd837842490dcb8ab8894ccdb1fcdd02ba2ae2104a0ef972fe809bf136425.json rename to .sqlx/query-eb9cd837842490dcb8ab8894ccdb1fcdd02ba2ae2104a0ef972fe809bf136425.json diff --git a/.sqlx/query-ec04b89218111a5dc8d5ade506ac3465e2211ef3013386feb12d4cc04e0eade9.json b/.sqlx/query-ec04b89218111a5dc8d5ade506ac3465e2211ef3013386feb12d4cc04e0eade9.json new file mode 100644 index 00000000000..7c0264b5646 --- /dev/null +++ b/.sqlx/query-ec04b89218111a5dc8d5ade506ac3465e2211ef3013386feb12d4cc04e0eade9.json @@ -0,0 +1,60 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE prover_jobs_fri\n SET\n status = 'successful',\n updated_at = NOW(),\n time_taken = $1,\n proof_blob_url = $2\n WHERE\n id = $3\n RETURNING\n prover_jobs_fri.id,\n prover_jobs_fri.l1_batch_number,\n prover_jobs_fri.circuit_id,\n prover_jobs_fri.aggregation_round,\n prover_jobs_fri.sequence_number,\n prover_jobs_fri.depth,\n prover_jobs_fri.is_node_final_proof\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "l1_batch_number", + "type_info": "Int8" + }, + { + "ordinal": 2, + "name": "circuit_id", + "type_info": "Int2" + }, + { + "ordinal": 3, + "name": "aggregation_round", + "type_info": "Int2" + }, + { + "ordinal": 4, + "name": "sequence_number", + "type_info": "Int4" + }, + { + "ordinal": 5, + "name": "depth", + "type_info": "Int4" + }, + { + "ordinal": 6, + "name": "is_node_final_proof", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Time", + "Text", + "Int8" + ] + }, + "nullable": [ + false, + false, + false, + false, + false, + false, + false + ] + }, + "hash": "ec04b89218111a5dc8d5ade506ac3465e2211ef3013386feb12d4cc04e0eade9" +} diff --git a/.sqlx/query-edc61e1285bf6d3837acc67af4f15aaade450980719933089824eb8c494d64a4.json b/.sqlx/query-edc61e1285bf6d3837acc67af4f15aaade450980719933089824eb8c494d64a4.json new file mode 100644 index 00000000000..2c7d7f1da5f --- /dev/null +++ b/.sqlx/query-edc61e1285bf6d3837acc67af4f15aaade450980719933089824eb8c494d64a4.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE witness_inputs_fri\n SET\n status = 'successful',\n updated_at = NOW(),\n time_taken = $1\n WHERE\n l1_batch_number = $2\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Time", + "Int8" + ] + }, + "nullable": [] + }, + "hash": "edc61e1285bf6d3837acc67af4f15aaade450980719933089824eb8c494d64a4" +} diff --git a/core/lib/dal/.sqlx/query-ef331469f78c6ff68a254a15b55d056cc9bae25bc070c5de8424f88fab20e5ea.json b/.sqlx/query-ef331469f78c6ff68a254a15b55d056cc9bae25bc070c5de8424f88fab20e5ea.json similarity index 100% rename from core/lib/dal/.sqlx/query-ef331469f78c6ff68a254a15b55d056cc9bae25bc070c5de8424f88fab20e5ea.json rename to .sqlx/query-ef331469f78c6ff68a254a15b55d056cc9bae25bc070c5de8424f88fab20e5ea.json diff --git a/.sqlx/query-ef687be83e496d6647e4dfef9eabae63443c51deb818dd0affd1a0949b161737.json b/.sqlx/query-ef687be83e496d6647e4dfef9eabae63443c51deb818dd0affd1a0949b161737.json new file mode 100644 index 00000000000..79b20fabb28 --- /dev/null +++ b/.sqlx/query-ef687be83e496d6647e4dfef9eabae63443c51deb818dd0affd1a0949b161737.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "\n INSERT INTO\n proof_compression_jobs_fri (l1_batch_number, fri_proof_blob_url, status, created_at, updated_at)\n VALUES\n ($1, $2, $3, NOW(), NOW())\n ON CONFLICT (l1_batch_number) DO NOTHING\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "ef687be83e496d6647e4dfef9eabae63443c51deb818dd0affd1a0949b161737" +} diff --git a/core/lib/dal/.sqlx/query-f012d0922265269746396dac8f25ff66f2c3b2b83d45360818a8782e56aa3d66.json b/.sqlx/query-f012d0922265269746396dac8f25ff66f2c3b2b83d45360818a8782e56aa3d66.json similarity index 100% rename from core/lib/dal/.sqlx/query-f012d0922265269746396dac8f25ff66f2c3b2b83d45360818a8782e56aa3d66.json rename to .sqlx/query-f012d0922265269746396dac8f25ff66f2c3b2b83d45360818a8782e56aa3d66.json diff --git a/core/lib/dal/.sqlx/query-f1541a8d970d57ed118ee603e7285ec6ec1e522bc058710560ef78e75f94ddac.json b/.sqlx/query-f1541a8d970d57ed118ee603e7285ec6ec1e522bc058710560ef78e75f94ddac.json similarity index 100% rename from core/lib/dal/.sqlx/query-f1541a8d970d57ed118ee603e7285ec6ec1e522bc058710560ef78e75f94ddac.json rename to .sqlx/query-f1541a8d970d57ed118ee603e7285ec6ec1e522bc058710560ef78e75f94ddac.json diff --git a/core/lib/dal/.sqlx/query-f19c20325298647177a86a3f9c4ae6d629a74f255a31284ce6707d219c9a0510.json b/.sqlx/query-f19c20325298647177a86a3f9c4ae6d629a74f255a31284ce6707d219c9a0510.json similarity index 100% rename from core/lib/dal/.sqlx/query-f19c20325298647177a86a3f9c4ae6d629a74f255a31284ce6707d219c9a0510.json rename to .sqlx/query-f19c20325298647177a86a3f9c4ae6d629a74f255a31284ce6707d219c9a0510.json diff --git a/core/lib/dal/.sqlx/query-f1a90090c192d68367e799188356efe8d41759bbdcdd6d39db93208f2664f03a.json b/.sqlx/query-f1a90090c192d68367e799188356efe8d41759bbdcdd6d39db93208f2664f03a.json similarity index 100% rename from core/lib/dal/.sqlx/query-f1a90090c192d68367e799188356efe8d41759bbdcdd6d39db93208f2664f03a.json rename to .sqlx/query-f1a90090c192d68367e799188356efe8d41759bbdcdd6d39db93208f2664f03a.json diff --git a/core/lib/dal/.sqlx/query-f2606e792f08f65d15bdab66a83741e2713748a17c96af5485423bfe9aaa84ec.json b/.sqlx/query-f2606e792f08f65d15bdab66a83741e2713748a17c96af5485423bfe9aaa84ec.json similarity index 100% rename from core/lib/dal/.sqlx/query-f2606e792f08f65d15bdab66a83741e2713748a17c96af5485423bfe9aaa84ec.json rename to .sqlx/query-f2606e792f08f65d15bdab66a83741e2713748a17c96af5485423bfe9aaa84ec.json diff --git a/core/lib/dal/.sqlx/query-f2f852a340c45ff69cbca42d7c592dfb0d28a797bee69872634f3105d2d51996.json b/.sqlx/query-f2f852a340c45ff69cbca42d7c592dfb0d28a797bee69872634f3105d2d51996.json similarity index 100% rename from core/lib/dal/.sqlx/query-f2f852a340c45ff69cbca42d7c592dfb0d28a797bee69872634f3105d2d51996.json rename to .sqlx/query-f2f852a340c45ff69cbca42d7c592dfb0d28a797bee69872634f3105d2d51996.json diff --git a/core/lib/dal/.sqlx/query-f3a695b0179ffdacd4baf9eeb6c1fac675dd7b078df61758df382e1038cb4987.json b/.sqlx/query-f3a695b0179ffdacd4baf9eeb6c1fac675dd7b078df61758df382e1038cb4987.json similarity index 100% rename from core/lib/dal/.sqlx/query-f3a695b0179ffdacd4baf9eeb6c1fac675dd7b078df61758df382e1038cb4987.json rename to .sqlx/query-f3a695b0179ffdacd4baf9eeb6c1fac675dd7b078df61758df382e1038cb4987.json diff --git a/.sqlx/query-f4362a61ab05af3d71a3232d2f017db60405a887f9f7fa0ca60aa7fc879ce630.json b/.sqlx/query-f4362a61ab05af3d71a3232d2f017db60405a887f9f7fa0ca60aa7fc879ce630.json new file mode 100644 index 00000000000..59c28852a03 --- /dev/null +++ b/.sqlx/query-f4362a61ab05af3d71a3232d2f017db60405a887f9f7fa0ca60aa7fc879ce630.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE proof_compression_jobs_fri\n SET\n status = $1,\n error = $2,\n updated_at = NOW()\n WHERE\n l1_batch_number = $3\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Int8" + ] + }, + "nullable": [] + }, + "hash": "f4362a61ab05af3d71a3232d2f017db60405a887f9f7fa0ca60aa7fc879ce630" +} diff --git a/core/lib/dal/.sqlx/query-f4e7e2dd109aab2714845b028eba780c75468aa36615bcfcf7f7d8ace23cd1aa.json b/.sqlx/query-f4e7e2dd109aab2714845b028eba780c75468aa36615bcfcf7f7d8ace23cd1aa.json similarity index 100% rename from core/lib/dal/.sqlx/query-f4e7e2dd109aab2714845b028eba780c75468aa36615bcfcf7f7d8ace23cd1aa.json rename to .sqlx/query-f4e7e2dd109aab2714845b028eba780c75468aa36615bcfcf7f7d8ace23cd1aa.json diff --git a/core/lib/dal/.sqlx/query-f4f400606cd3875ed1be393107dd5509f57ae415719f99c6d523c81c20d2bffb.json b/.sqlx/query-f4f400606cd3875ed1be393107dd5509f57ae415719f99c6d523c81c20d2bffb.json similarity index 100% rename from core/lib/dal/.sqlx/query-f4f400606cd3875ed1be393107dd5509f57ae415719f99c6d523c81c20d2bffb.json rename to .sqlx/query-f4f400606cd3875ed1be393107dd5509f57ae415719f99c6d523c81c20d2bffb.json diff --git a/core/lib/dal/.sqlx/query-f5854ce2c37bc66d38b05c9fb985618fd95722a77cc44a2e0519f3740191dc75.json b/.sqlx/query-f5854ce2c37bc66d38b05c9fb985618fd95722a77cc44a2e0519f3740191dc75.json similarity index 100% rename from core/lib/dal/.sqlx/query-f5854ce2c37bc66d38b05c9fb985618fd95722a77cc44a2e0519f3740191dc75.json rename to .sqlx/query-f5854ce2c37bc66d38b05c9fb985618fd95722a77cc44a2e0519f3740191dc75.json diff --git a/core/lib/dal/.sqlx/query-f63586d59264eab7388ad1de823227ecaa45d76d1ba260074898fe57c059a15a.json b/.sqlx/query-f63586d59264eab7388ad1de823227ecaa45d76d1ba260074898fe57c059a15a.json similarity index 100% rename from core/lib/dal/.sqlx/query-f63586d59264eab7388ad1de823227ecaa45d76d1ba260074898fe57c059a15a.json rename to .sqlx/query-f63586d59264eab7388ad1de823227ecaa45d76d1ba260074898fe57c059a15a.json diff --git a/.sqlx/query-f717ca5d0890759496739a678955e6f8b7f88a0894a7f9e27fc26f93997d37c7.json b/.sqlx/query-f717ca5d0890759496739a678955e6f8b7f88a0894a7f9e27fc26f93997d37c7.json new file mode 100644 index 00000000000..e6e12748d0d --- /dev/null +++ b/.sqlx/query-f717ca5d0890759496739a678955e6f8b7f88a0894a7f9e27fc26f93997d37c7.json @@ -0,0 +1,24 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE proof_compression_jobs_fri\n SET\n status = $1,\n attempts = attempts + 1,\n updated_at = NOW(),\n processing_started_at = NOW(),\n picked_by = $3\n WHERE\n l1_batch_number = (\n SELECT\n l1_batch_number\n FROM\n proof_compression_jobs_fri\n WHERE\n status = $2\n ORDER BY\n l1_batch_number ASC\n LIMIT\n 1\n FOR UPDATE\n SKIP LOCKED\n )\n RETURNING\n proof_compression_jobs_fri.l1_batch_number\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "l1_batch_number", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "f717ca5d0890759496739a678955e6f8b7f88a0894a7f9e27fc26f93997d37c7" +} diff --git a/core/lib/dal/.sqlx/query-f87c50d37f78d6b3c5a752ea88799a1f6ee5a046ece2ef949aee7ab3d2549975.json b/.sqlx/query-f87c50d37f78d6b3c5a752ea88799a1f6ee5a046ece2ef949aee7ab3d2549975.json similarity index 100% rename from core/lib/dal/.sqlx/query-f87c50d37f78d6b3c5a752ea88799a1f6ee5a046ece2ef949aee7ab3d2549975.json rename to .sqlx/query-f87c50d37f78d6b3c5a752ea88799a1f6ee5a046ece2ef949aee7ab3d2549975.json diff --git a/core/lib/dal/.sqlx/query-f91790ae5cc4b087bf942ba52dd63a1e89945f8d5e0f4da42ecf6313c4f5967e.json b/.sqlx/query-f91790ae5cc4b087bf942ba52dd63a1e89945f8d5e0f4da42ecf6313c4f5967e.json similarity index 100% rename from core/lib/dal/.sqlx/query-f91790ae5cc4b087bf942ba52dd63a1e89945f8d5e0f4da42ecf6313c4f5967e.json rename to .sqlx/query-f91790ae5cc4b087bf942ba52dd63a1e89945f8d5e0f4da42ecf6313c4f5967e.json diff --git a/core/lib/dal/.sqlx/query-fcc108fd59203644ff86ded0505c7dfb7aad7261e5fc402d845aedc3b91a4e99.json b/.sqlx/query-fcc108fd59203644ff86ded0505c7dfb7aad7261e5fc402d845aedc3b91a4e99.json similarity index 100% rename from core/lib/dal/.sqlx/query-fcc108fd59203644ff86ded0505c7dfb7aad7261e5fc402d845aedc3b91a4e99.json rename to .sqlx/query-fcc108fd59203644ff86ded0505c7dfb7aad7261e5fc402d845aedc3b91a4e99.json diff --git a/.sqlx/query-fcddeb96dcd1611dedb2091c1be304e8a35fd65bf37e976b7106f57c57e70b9b.json b/.sqlx/query-fcddeb96dcd1611dedb2091c1be304e8a35fd65bf37e976b7106f57c57e70b9b.json new file mode 100644 index 00000000000..effc22d6a43 --- /dev/null +++ b/.sqlx/query-fcddeb96dcd1611dedb2091c1be304e8a35fd65bf37e976b7106f57c57e70b9b.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE gpu_prover_queue_fri\n SET\n instance_status = 'available',\n updated_at = NOW()\n WHERE\n instance_host = $1::TEXT::inet\n AND instance_port = $2\n AND instance_status = 'full'\n AND zone = $3\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Int4", + "Text" + ] + }, + "nullable": [] + }, + "hash": "fcddeb96dcd1611dedb2091c1be304e8a35fd65bf37e976b7106f57c57e70b9b" +} diff --git a/core/lib/dal/.sqlx/query-fdffa5841554286a924b217b5885d9ec9b3f628c3a4cf5e10580ea6e5e3a2429.json b/.sqlx/query-fdffa5841554286a924b217b5885d9ec9b3f628c3a4cf5e10580ea6e5e3a2429.json similarity index 100% rename from core/lib/dal/.sqlx/query-fdffa5841554286a924b217b5885d9ec9b3f628c3a4cf5e10580ea6e5e3a2429.json rename to .sqlx/query-fdffa5841554286a924b217b5885d9ec9b3f628c3a4cf5e10580ea6e5e3a2429.json diff --git a/core/lib/dal/.sqlx/query-fe06e06c04466429bb85709e6fe8dd6c2ad2793c06071f4a067dcc31306adebc.json b/.sqlx/query-fe06e06c04466429bb85709e6fe8dd6c2ad2793c06071f4a067dcc31306adebc.json similarity index 100% rename from core/lib/dal/.sqlx/query-fe06e06c04466429bb85709e6fe8dd6c2ad2793c06071f4a067dcc31306adebc.json rename to .sqlx/query-fe06e06c04466429bb85709e6fe8dd6c2ad2793c06071f4a067dcc31306adebc.json diff --git a/core/lib/dal/.sqlx/query-fe501f86f4bf6c5b8ccc2e039a4eb09b538a67d1c39fda052c4f4ddb23ce0084.json b/.sqlx/query-fe501f86f4bf6c5b8ccc2e039a4eb09b538a67d1c39fda052c4f4ddb23ce0084.json similarity index 100% rename from core/lib/dal/.sqlx/query-fe501f86f4bf6c5b8ccc2e039a4eb09b538a67d1c39fda052c4f4ddb23ce0084.json rename to .sqlx/query-fe501f86f4bf6c5b8ccc2e039a4eb09b538a67d1c39fda052c4f4ddb23ce0084.json diff --git a/core/lib/dal/.sqlx/query-fec7b791e371a4c58350b6537065223f4599d4128db588d8645f3d106de5f50b.json b/.sqlx/query-fec7b791e371a4c58350b6537065223f4599d4128db588d8645f3d106de5f50b.json similarity index 100% rename from core/lib/dal/.sqlx/query-fec7b791e371a4c58350b6537065223f4599d4128db588d8645f3d106de5f50b.json rename to .sqlx/query-fec7b791e371a4c58350b6537065223f4599d4128db588d8645f3d106de5f50b.json diff --git a/core/lib/config/src/configs/chain.rs b/core/lib/config/src/configs/chain.rs index 24c3b495247..b4b6bb8fbf0 100644 --- a/core/lib/config/src/configs/chain.rs +++ b/core/lib/config/src/configs/chain.rs @@ -122,7 +122,7 @@ pub struct StateKeeperConfig { /// Denotes the percentage of L1 gas used in L2 block that triggers L2 block seal. pub close_block_at_gas_percentage: f64, /// Fee account address. Value is deprecated and it's used only for generating wallets struct - #[deprecated] + #[deprecated(note = "Use Wallets::fee_account::address instead")] pub fee_account_addr: Option

, /// The minimal acceptable L2 gas price, i.e. the price that should include the cost of computation/proving as well /// as potentially premium for congestion. @@ -157,11 +157,11 @@ pub struct StateKeeperConfig { // Base system contract hashes, required only for generating genesis config. // #PLA-811 - #[deprecated] + #[deprecated(note = "Use GenesisConfig::bootloader_hash instead")] pub bootloader_hash: Option, - #[deprecated] + #[deprecated(note = "Use GenesisConfig::default_aa_hash instead")] pub default_aa_hash: Option, - #[deprecated] + #[deprecated(note = "Use GenesisConfig::l1_batch_commit_data_generator_mode instead")] #[serde(default)] pub l1_batch_commit_data_generator_mode: L1BatchCommitDataGeneratorMode, } diff --git a/core/lib/config/src/configs/eth_sender.rs b/core/lib/config/src/configs/eth_sender.rs index 203e7b30b58..a4b668e41a0 100644 --- a/core/lib/config/src/configs/eth_sender.rs +++ b/core/lib/config/src/configs/eth_sender.rs @@ -5,7 +5,7 @@ use zksync_basic_types::H256; use crate::ETHWatchConfig; -/// Configuration for the Ethereum sender crate. +/// Configuration for the ethereum related components. #[derive(Debug, Deserialize, Clone, PartialEq)] pub struct ETHConfig { /// Options related to the Ethereum sender directly. diff --git a/core/lib/config/src/configs/eth_watch.rs b/core/lib/config/src/configs/eth_watch.rs index 05afebf81c3..bb13bcffd83 100644 --- a/core/lib/config/src/configs/eth_watch.rs +++ b/core/lib/config/src/configs/eth_watch.rs @@ -2,7 +2,7 @@ use std::time::Duration; use serde::Deserialize; -/// Configuration for the Ethereum sender crate. +/// Configuration for the Ethereum watch crate. #[derive(Debug, Deserialize, Clone, PartialEq)] pub struct ETHWatchConfig { /// Amount of confirmations for the priority operation to be processed. From 1d199a00f5179eae0d5275430fc0ed5674aa2c2b Mon Sep 17 00:00:00 2001 From: Danil Date: Mon, 1 Apr 2024 15:52:19 +0200 Subject: [PATCH 64/65] Split address wallets and private key wallets Signed-off-by: Danil --- core/lib/config/src/configs/eth_sender.rs | 2 +- core/lib/config/src/configs/wallets.rs | 32 +++++++++------ core/lib/env_config/src/wallets.rs | 4 +- .../protobuf_config/src/proto/wallets.proto | 13 ++++--- core/lib/protobuf_config/src/tests.rs | 3 +- core/lib/protobuf_config/src/wallets.rs | 39 ++++++------------- core/lib/zksync_core/src/lib.rs | 12 ++---- .../zksync_core/src/temp_config_store/mod.rs | 4 +- .../src/implementations/layers/eth_sender.rs | 16 ++++---- .../layers/pk_signing_eth_client.rs | 8 +--- 10 files changed, 58 insertions(+), 75 deletions(-) diff --git a/core/lib/config/src/configs/eth_sender.rs b/core/lib/config/src/configs/eth_sender.rs index a4b668e41a0..848f467db0d 100644 --- a/core/lib/config/src/configs/eth_sender.rs +++ b/core/lib/config/src/configs/eth_sender.rs @@ -5,7 +5,7 @@ use zksync_basic_types::H256; use crate::ETHWatchConfig; -/// Configuration for the ethereum related components. +/// Configuration for the Ethereum related components. #[derive(Debug, Deserialize, Clone, PartialEq)] pub struct ETHConfig { /// Options related to the Ethereum sender directly. diff --git a/core/lib/config/src/configs/wallets.rs b/core/lib/config/src/configs/wallets.rs index 40f267ce47e..264439d92c5 100644 --- a/core/lib/config/src/configs/wallets.rs +++ b/core/lib/config/src/configs/wallets.rs @@ -1,20 +1,28 @@ -use zksync_basic_types::{Address, H256}; +use zksync_basic_types::{Address, H160, H256}; use zksync_crypto_primitives::PackedEthSignature; #[derive(Debug, Clone)] -pub struct Wallet { +pub struct AddressWallet { address: Address, - private_key: Option, } -impl Wallet { +impl AddressWallet { pub fn from_address(address: Address) -> Self { - Self { - address, - private_key: None, - } + Self { address } + } + + pub fn address(&self) -> Address { + self.address } +} +#[derive(Debug, Clone)] +pub struct Wallet { + address: Address, + private_key: H256, +} + +impl Wallet { pub fn from_private_key(private_key: H256, address: Option
) -> anyhow::Result { let calculated_address = PackedEthSignature::address_from_private_key(&private_key)?; if let Some(address) = address { @@ -25,14 +33,14 @@ impl Wallet { Ok(Self { address: calculated_address, - private_key: Some(private_key), + private_key, }) } pub fn address(&self) -> Address { self.address } - pub fn private_key(&self) -> Option { + pub fn private_key(&self) -> H256 { self.private_key } } @@ -45,7 +53,7 @@ pub struct EthSender { #[derive(Debug, Clone)] pub struct StateKeeper { - pub fee_account: Wallet, + pub fee_account: AddressWallet, } #[derive(Debug, Clone)] @@ -64,7 +72,7 @@ impl Wallets { ), }), state_keeper: Some(StateKeeper { - fee_account: Wallet::from_private_key(H256::repeat_byte(0x3), None).unwrap(), + fee_account: AddressWallet::from_address(H160::repeat_byte(0x3)), }), } } diff --git a/core/lib/env_config/src/wallets.rs b/core/lib/env_config/src/wallets.rs index 2f754895fe3..7bee60e87e7 100644 --- a/core/lib/env_config/src/wallets.rs +++ b/core/lib/env_config/src/wallets.rs @@ -2,7 +2,7 @@ use std::str::FromStr; use anyhow::Context; use zksync_basic_types::Address; -use zksync_config::configs::wallets::{EthSender, StateKeeper, Wallet, Wallets}; +use zksync_config::configs::wallets::{AddressWallet, EthSender, StateKeeper, Wallet, Wallets}; use crate::FromEnv; @@ -35,7 +35,7 @@ impl FromEnv for Wallets { let fee_account = std::env::var("CHAIN_STATE_KEEPER_FEE_ACCOUNT_ADDR").ok(); let state_keeper = if let Some(fee_account) = fee_account { - let fee_account = Wallet::from_address(Address::from_str(&fee_account)?); + let fee_account = AddressWallet::from_address(Address::from_str(&fee_account)?); Some(StateKeeper { fee_account }) } else { None diff --git a/core/lib/protobuf_config/src/proto/wallets.proto b/core/lib/protobuf_config/src/proto/wallets.proto index 55399e4e91d..fa1ffe3b919 100644 --- a/core/lib/protobuf_config/src/proto/wallets.proto +++ b/core/lib/protobuf_config/src/proto/wallets.proto @@ -2,14 +2,17 @@ syntax = "proto3"; package zksync.config.wallets; +message PrivateKeyWallet { + optional string address = 1; // optional + optional string private_key = 2; // required +} -message Wallet { - optional string private_key = 1; // required +message AddressWallet { optional string address = 2; // required } message Wallets { - optional Wallet operator = 1; // Private key is required - optional Wallet blob_operator = 2; // Private key is required - optional Wallet fee_account = 3; // Only address required for server + optional PrivateKeyWallet operator = 1; // Private key is required + optional PrivateKeyWallet blob_operator = 2; // Private key is required + optional AddressWallet fee_account = 3; // Only address required for server } diff --git a/core/lib/protobuf_config/src/tests.rs b/core/lib/protobuf_config/src/tests.rs index 36151d11d3c..41f69477756 100644 --- a/core/lib/protobuf_config/src/tests.rs +++ b/core/lib/protobuf_config/src/tests.rs @@ -54,7 +54,8 @@ fn verify_file_parsing() { let base_path = PathBuf::from_str("../../../etc/env/file_based/").unwrap(); decode_yaml_repr::(&base_path.join("general.yaml"), true) .unwrap(); - decode_yaml_repr::(&base_path.join("wallets.yaml"), true).unwrap(); + // It's allowed to have unknown fields in wallets, e.g. we keep private key for fee account + decode_yaml_repr::(&base_path.join("wallets.yaml"), false).unwrap(); decode_yaml_repr::(&base_path.join("genesis.yaml"), true).unwrap(); decode_yaml_repr::(&base_path.join("contracts.yaml"), true) .unwrap(); diff --git a/core/lib/protobuf_config/src/wallets.rs b/core/lib/protobuf_config/src/wallets.rs index dd6831939b4..13e052d6df4 100644 --- a/core/lib/protobuf_config/src/wallets.rs +++ b/core/lib/protobuf_config/src/wallets.rs @@ -1,10 +1,9 @@ use anyhow::Context; use zksync_config::configs::{ self, - wallets::{EthSender, StateKeeper, Wallet}, + wallets::{AddressWallet, EthSender, StateKeeper, Wallet}, }; use zksync_protobuf::{required, ProtoRepr}; -use zksync_types::PackedEthSignature; use crate::{parse_h160, parse_h256, proto::wallets as proto}; @@ -47,18 +46,8 @@ impl ProtoRepr for proto::Wallets { required(&fee_account.address).context("fee_account.address requireed")?, ) .context("fee_account.address")?; - if let Some(private_key) = &fee_account.private_key { - let calculated_address = PackedEthSignature::address_from_private_key( - &parse_h256(private_key).context("Malformed private key")?, - )?; - if calculated_address != address { - anyhow::bail!( - "Malformed fee account wallet, address doesn't correspond private_key" - ) - } - } Some(StateKeeper { - fee_account: Wallet::from_address(address), + fee_account: AddressWallet::from_address(address), }) } else { None @@ -72,17 +61,17 @@ impl ProtoRepr for proto::Wallets { fn build(this: &Self::Type) -> Self { let (operator, blob_operator) = if let Some(eth_sender) = &this.eth_sender { - let blob = eth_sender.blob_operator.as_ref().map(|blob| proto::Wallet { - address: Some(format!("{:?}", blob.address())), - private_key: blob.private_key().map(|a| format!("{:?}", a)), - }); + let blob = eth_sender + .blob_operator + .as_ref() + .map(|blob| proto::PrivateKeyWallet { + address: Some(format!("{:?}", blob.address())), + private_key: Some(format!("{:?}", blob.private_key())), + }); ( - Some(proto::Wallet { + Some(proto::PrivateKeyWallet { address: Some(format!("{:?}", eth_sender.operator.address())), - private_key: eth_sender - .operator - .private_key() - .map(|a| format!("{:?}", a)), + private_key: Some(format!("{:?}", eth_sender.operator.private_key())), }), blob, ) @@ -93,12 +82,8 @@ impl ProtoRepr for proto::Wallets { let fee_account = this .state_keeper .as_ref() - .map(|state_keeper| proto::Wallet { + .map(|state_keeper| proto::AddressWallet { address: Some(format!("{:?}", state_keeper.fee_account.address())), - private_key: state_keeper - .fee_account - .private_key() - .map(|a| format!("{:?}", a)), }); Self { blob_operator, diff --git a/core/lib/zksync_core/src/lib.rs b/core/lib/zksync_core/src/lib.rs index 765c9e94483..32947d62904 100644 --- a/core/lib/zksync_core/src/lib.rs +++ b/core/lib/zksync_core/src/lib.rs @@ -613,10 +613,7 @@ pub async fn initialize_components( .context("failed to build eth_sender_pool")?; let eth_sender_wallets = wallets.eth_sender.clone().context("eth_sender")?; - let operator_private_key = eth_sender_wallets - .operator - .private_key() - .context("Private_key")?; + let operator_private_key = eth_sender_wallets.operator.private_key(); let diamond_proxy_addr = contracts_config.diamond_proxy_addr; let default_priority_fee_per_gas = eth .gas_adjuster @@ -691,10 +688,7 @@ pub async fn initialize_components( .context("failed to build eth_manager_pool")?; let eth_sender = configs.eth.clone().context("eth_sender_config")?; let eth_sender_wallets = wallets.eth_sender.clone().context("eth_sender")?; - let operator_private_key = eth_sender_wallets - .operator - .private_key() - .context("Private_key")?; + let operator_private_key = eth_sender_wallets.operator.private_key(); let diamond_proxy_addr = contracts_config.diamond_proxy_addr; let default_priority_fee_per_gas = eth .gas_adjuster @@ -713,7 +707,7 @@ pub async fn initialize_components( ); let eth_client_blobs = if let Some(blob_operator) = eth_sender_wallets.blob_operator { - let operator_blob_private_key = blob_operator.private_key().context("Private_key")?; + let operator_blob_private_key = blob_operator.private_key(); Some(PKSigningClient::new_raw( operator_blob_private_key, diamond_proxy_addr, diff --git a/core/lib/zksync_core/src/temp_config_store/mod.rs b/core/lib/zksync_core/src/temp_config_store/mod.rs index 2fa2f8925a6..2c5769f1f86 100644 --- a/core/lib/zksync_core/src/temp_config_store/mod.rs +++ b/core/lib/zksync_core/src/temp_config_store/mod.rs @@ -8,7 +8,7 @@ use zksync_config::{ }, fri_prover_group::FriProverGroupConfig, house_keeper::HouseKeeperConfig, - wallets::{EthSender, StateKeeper, Wallet, Wallets}, + wallets::{AddressWallet, EthSender, StateKeeper, Wallet, Wallets}, FriProofCompressorConfig, FriProverConfig, FriProverGatewayConfig, FriWitnessGeneratorConfig, FriWitnessVectorGeneratorConfig, GeneralConfig, ObservabilityConfig, PrometheusConfig, ProofDataHandlerConfig, WitnessGeneratorConfig, @@ -133,7 +133,7 @@ impl TempConfigStore { .state_keeper_config .as_ref() .map(|state_keeper| StateKeeper { - fee_account: Wallet::from_address( + fee_account: AddressWallet::from_address( state_keeper .fee_account_addr .expect("Must be presented in env variables"), diff --git a/core/node/node_framework/src/implementations/layers/eth_sender.rs b/core/node/node_framework/src/implementations/layers/eth_sender.rs index 2f21204a55b..c5ab89f9a93 100644 --- a/core/node/node_framework/src/implementations/layers/eth_sender.rs +++ b/core/node/node_framework/src/implementations/layers/eth_sender.rs @@ -80,15 +80,13 @@ impl WiringLayer for EthSenderLayer { // Create and add tasks. - let eth_client_blobs = self.wallets.blob_operator.and_then(|wallet| { - wallet.private_key().map(|pk| { - PKSigningClient::from_config( - &self.eth_sender_config, - &self.contracts_config, - self.l1chain_id, - pk, - ) - }) + let eth_client_blobs = self.wallets.blob_operator.map(|wallet| { + PKSigningClient::from_config( + &self.eth_sender_config, + &self.contracts_config, + self.l1chain_id, + wallet.private_key(), + ) }); let eth_client_blobs_addr = eth_client_blobs.clone().map(|k| k.sender_account()); diff --git a/core/node/node_framework/src/implementations/layers/pk_signing_eth_client.rs b/core/node/node_framework/src/implementations/layers/pk_signing_eth_client.rs index 34c928f2bb8..59a9a1c568e 100644 --- a/core/node/node_framework/src/implementations/layers/pk_signing_eth_client.rs +++ b/core/node/node_framework/src/implementations/layers/pk_signing_eth_client.rs @@ -44,13 +44,7 @@ impl WiringLayer for PKSigningEthClientLayer { } async fn wire(self: Box, mut context: ServiceContext<'_>) -> Result<(), WiringError> { - let private_key = self - .wallets - .operator - .private_key() - .ok_or(WiringError::Configuration( - "Private key is missing in Wallets".to_string(), - ))?; + let private_key = self.wallets.operator.private_key(); let signing_client = PKSigningClient::from_config( &self.eth_sender_config, From c753c93c868c6e86d600b6f10debd21bffc92bf8 Mon Sep 17 00:00:00 2001 From: Danil Date: Mon, 1 Apr 2024 16:10:24 +0200 Subject: [PATCH 65/65] Move sqlx back Signed-off-by: Danil --- ...f6e1df560ab1e8935564355236e90b6147d2f.json | 15 -- ...e57a83f37da8999849377dfad60b44989be39.json | 107 -------------- ...986511265c541d81b1d21f0a751ae1399c626.json | 72 ---------- ...aff3a06b7a9c1866132d62e4449fa9436c7c4.json | 15 -- ...28a20420763a3a22899ad0e5f4b953b615a9e.json | 25 ---- ...1610ffa7f169d560e79e89b99eedf681c6773.json | 16 --- ...4d3648b75bf01ff336bbd77d15f9aa5fd6443.json | 20 --- ...52554ccfb5b83f00efdc12bed0f60ef439785.json | 25 ---- ...5fb7a093b73727f75e0cb7db9cea480c95f5c.json | 35 ----- ...22ff6372f63ecadb504a329499b02e7d3550e.json | 26 ---- ...f9044ae85b579c7051301b40bd5f94df1f530.json | 15 -- ...6769dbb04d3a61cf232892236c974660ffe64.json | 35 ----- ...8b87ead36f593488437c6f67da629ca81e4fa.json | 14 -- ...5da82065836fe17687ffad04126a6a8b2b27c.json | 15 -- ...d772d8801b0ae673b7173ae08a1fa6cbf67b2.json | 59 -------- ...afca34d61347e0e2e29fb07ca3d1b8b1f309c.json | 18 --- ...de366f88c20d00a8d928b6cf4caae0702b333.json | 17 --- ...9a8f447824a5ab466bb6eea1710e8aeaa2c56.json | 15 -- ...d94f28b7b2b60d551d552a9b0bab1f1791e39.json | 22 --- ...6009503182c300877e74a8539f231050e6f85.json | 15 -- ...7effac442434c6e734d977e6682a7484abe7f.json | 35 ----- ...52aeb5f06c26f68d131dd242f6ed68816c513.json | 22 --- ...e7ee767e4c98706246eb113498c0f817f5f38.json | 17 --- ...9d0c658093dede5eb61489205aa751ad5b8ec.json | 22 --- ...8bf92c7f2c55386c8208e3a82b30456abd5b4.json | 96 ------------- ...715e903f3b399886c2c73e838bd924fed6776.json | 18 --- ...50d625f057acf1440b6550375ce5509a816a6.json | 107 -------------- ...7227120a8279db1875d26ccae5ee0785f46a9.json | 22 --- ...1578db18c29cdca85b8b6aad86fe2a9bf6bbe.json | 32 ----- ...cbb724af0f0216433a70f19d784e3f2afbc9f.json | 22 --- ...a36532fee1450733849852dfd20e18ded1f03.json | 15 -- ...d2e2326d7ace079b095def52723a45b65d3f3.json | 15 -- ...5ca679a0459a012899a373c67393d30d12601.json | 14 -- ...c9a64904026506914abae2946e5d353d6a604.json | 23 ---- ...9f41220c51f58a03c61d6b7789eab0504e320.json | 32 ----- ...477dcf21955e0921ba648ba2e751dbfc3cb45.json | 38 ----- ...f724216807ffd481cd6f7f19968e42e52b284.json | 14 -- ...1ac4ab2d73bda6022700aeb0a630a2563a4b4.json | 15 -- ...f8dcbcb014b4f808c6232abd9a83354c995ac.json | 35 ----- ...663a9c5ea62ea7c99a77941eb8f05d4454125.json | 18 --- ...7b56187686173327498ac75424593547c19c5.json | 22 --- ...f8c12deeca6b8843fe3869cc2b02b30da5de6.json | 22 --- ...49b6370c211a7fc24ad03a5f0e327f9d18040.json | 22 --- ...d964d4bb39b9dcd18fb03bc11ce2fb32b7fb3.json | 83 ----------- ...0103263af3ff5cb6c9dc5df59d3cd2a5e56b4.json | 17 --- ...912d57f8eb2a38bdb7884fc812a2897a3a660.json | 35 ----- ...a653852f7e43670076eb2ebcd49542a870539.json | 14 -- ...e899e360650afccb34f5cc301b5cbac4a3d36.json | 15 -- ...8d43c31ec7441a7f6c5040e120810ebbb72f7.json | 21 --- ...ac429aac3c030f7e226a1264243d8cdae038d.json | 17 --- ...cb21a635037d89ce24dd3ad58ffaadb59594a.json | 20 --- ...3e67f08f2ead5f55bfb6594e50346bf9cf2ef.json | 32 ----- ...813d2b2d411bd5faf8306cd48db500532b711.json | 29 ---- ...7e88abd0f8164c2413dc83c91c29665ca645e.json | 35 ----- ...2060fbea775dc185f639139fbfd23e4d5f3c6.json | 15 -- ...70a4e629b2a1cde641e74e4e55bb100df809f.json | 22 --- ...b957e92cd375ec33fe16f855f319ffc0b208e.json | 130 ------------------ ...71ababa66e4a443fbefbfffca72b7540b075b.json | 15 -- ...91a9984685eaaaa0a8b223410d560a15a3034.json | 61 -------- ...6686e655206601854799139c22c017a214744.json | 19 --- ...c3465e2211ef3013386feb12d4cc04e0eade9.json | 60 -------- ...15aaade450980719933089824eb8c494d64a4.json | 15 -- ...bae63443c51deb818dd0affd1a0949b161737.json | 16 --- ...17db60405a887f9f7fa0ca60aa7fc879ce630.json | 16 --- ...5e6f8b7f88a0894a7f9e27fc26f93997d37c7.json | 24 ---- ...304e8a35fd65bf37e976b7106f57c57e70b9b.json | 16 --- core/lib/config/src/configs/eth_watch.rs | 4 +- ...a7db7673811ac181e801a16a7aefc984d60b0.json | 0 ...4e7dfacfcf625e057b99924c245de03c2888c.json | 0 ...381d82925556a4801f678b8786235d525d784.json | 0 ...07703b2581dda4fe3c00be6c5422c78980c4b.json | 0 ...a1b4ba7fe355ebc02ea49a054aa073ce324ba.json | 0 ...c2563a3e061bcc6505d8c295b1b2517f85f1b.json | 0 ...c7e3b6bdb2a08149d5f443310607d3c78988c.json | 0 ...2b5ea100f59295cd693d14ee0d5ee089c7981.json | 0 ...994723ebe57b3ed209069bd3db906921ef1a3.json | 0 ...a2803cd147dec7450d1f81a41aea8dcf3be93.json | 0 ...80112ce326bcf4bb38a00366bd24e38881bb2.json | 0 ...33d196907ebd599e926d305e5ef9f26afa2fa.json | 0 ...4710daa723e2d9a23317c347f6081465c3643.json | 0 ...5d95fc47eb6bedc32f4d824aac9b2b6f96faf.json | 0 ...1e4ee6682a89fb86f3b715a240805d44e6d87.json | 0 ...c6f03469d78bf4f45f5fd1eaf37171db2f04a.json | 0 ...e5f7edcafa4fc6757264a96a46dbf7dd1f9cc.json | 0 ...bc6e326e15dca141050bc9d7dacae98a430e8.json | 0 ...dfbf962636347864fc365fafa46c7a2da5f30.json | 0 ...a52daa202279bf612a9278f663deb78bc6e41.json | 0 ...b96b711e8667df7a3c87a5ddf062842a0da6c.json | 0 ...661a097308d9f81024fdfef24a14418202730.json | 0 ...5f7cef0d50c4938105684971e8adc86bb6366.json | 0 ...700a95e4c37a7a18531b3cdf120394cb055b9.json | 0 ...c68e8e15a831f1a45dc3b2240d5c6809d5ef2.json | 0 ...9ed36420c15081ff5f60da0a1c769c2dbc542.json | 0 ...50dd2778c0da29697d31710e8b507629ba5c4.json | 0 ...a2d505a1aabf52ff4136d2ed1b39c70dd1632.json | 0 ...bfdf10fb1cb43781219586c169fb976204331.json | 0 ...9f3f0b5d629fdb5c36ea1bfb93ed246be968e.json | 0 ...7ea964610e131d45f720f7a7b2a130fe9ed89.json | 0 ...5d98a3d9f7df162ae22a98c3c7620fcd13bd2.json | 0 ...62786c58e54f132588c48f07d9537cf21d3ed.json | 0 ...0a01a6c7cbe9297cbb55d42533fddc18719b6.json | 0 ...68cee71742b732112038a642e2a07305053c2.json | 0 ...4d26e48e968c79834858c98b7a7f9dfc81910.json | 0 ...099c4591ce3f8d51f3df99db0165e086f96af.json | 0 ...5fc7f60618209d0132e7937a1347b7e94b212.json | 0 ...710ce910d0c9138d85cb55e16459c757dea03.json | 0 ...de995ddddc621ee2149f08f905af2d8aadd03.json | 0 ...d1d4794007904fef7a5e837ebfb1b502711a1.json | 0 ...cd9b0128f82306e27e4c7258116082a54ab95.json | 0 ...8eeab159533211d2ddbef41e6ff0ba937d04a.json | 0 ...16065fcad42c6b621efb3a135a16b477dcfd9.json | 0 ...6ca08324bc86a72e4ea85c9c7962a6c8c9e30.json | 0 ...5234d536b064951a67d826ac49b7a3a095a1a.json | 0 ...717b0dd3cec64b0b29f59b273f1c6952e01da.json | 0 ...ae942bab5d71daaed7017e3fa62dc5e42ab0a.json | 0 ...98012b034605dfb4c48379844085b71e9e381.json | 0 ...7a66d1e38fb6ca706c2affd4607d77be38de9.json | 0 ...a45f005141b01eac26946251bba68e9276acf.json | 0 ...727233a36e018fe5c0651995b876053a6a054.json | 0 ...07997b7e24682da56f84d812da2b9aeb14ca2.json | 0 ...6381a9c4165e2727542eaeef3bbedd13a4f20.json | 0 ...42d4ef93ca238fd2fbc9155e6d012d0d1e113.json | 0 ...095596297be0d728a0aa2d9b180fb72de222b.json | 0 ...83f115cd97586bd795ee31f58fc14e56d58cb.json | 0 ...52964b268b93c32fd280c49bf9f932884300d.json | 0 ...cf831d63d692111d87282aed8e85df6b0411f.json | 0 ...a8c13d04079683e09c65f7f4e76a9987e2ab4.json | 0 ...fe400fcba3bfc5cf1b7c2b801508f6673d94e.json | 0 ...ed5d8007789c0fc1eab948f6d7339dfb69147.json | 0 ...00f7b1176d59a83520288f5428b67ebd52130.json | 0 ...f45d57f1f8b2558fdb374bf02e84d3c825a23.json | 0 ...bffc78d92adb3c1e3ca60b12163e38c67047e.json | 0 ...feb5f094160627bc09db4bda2dda9a8c11c44.json | 0 ...76085385c3a79d72f49669b4215a9454323c2.json | 0 ...40e73a2778633bbf9d8e591ec912634639af9.json | 0 ...eb89c728357c0744f209090824695a5d35fa3.json | 0 ...119a0a60dc9804175b2baf8b45939c74bd583.json | 0 ...05d7d1c9e649663f6e9444c4425821d0a5b71.json | 0 ...87ed365c0369f94bc457cb162a5c876a123c7.json | 0 ...95f3823926f69cb1d54874878e6d6c301bfd8.json | 0 ...b04ba5868d1897553df85aac15b169ebb0732.json | 0 ...26b0b3185a231bbf0b8b132a1a95bc157e827.json | 0 ...b51dea32e37cb8c51f1dd5d82c15eddc48e6b.json | 0 ...ea7a878613cf62f7fb9b94c5145dc8d1da674.json | 0 ...e2f7e49cd6600bd3d56cf41795c2c9e082e4c.json | 0 ...2c495462e5aa430fe135d1db1f9bad1e72156.json | 0 ...17a7ffc993cf436ad3aeeae82ed3e330b07bd.json | 0 ...ac77b63879ab97a32eed8392b48cc46116a28.json | 0 ...96ec397767a063dc21aa3add974cb9b070361.json | 0 ...38fc90b18155e3435f58d9888fa50d92042f7.json | 0 ...d51c3c1cbd9ba8df9d44a29ff96186e35b700.json | 0 ...9360a7eab2efc70d97b901f8948f6909d4cd2.json | 0 ...b249026665c9fb17b6f53a2154473547cbbfd.json | 0 ...fccb19a2f9663a73306dbf61a257050e2b634.json | 0 ...bcae561c0eea2b1cd8beb245b0cc66ebffcaa.json | 0 ...2484f0a0d76a8097b61ead5f1f20301ce524d.json | 0 ...e03def94f4bf4674def1893e2232be80f57a0.json | 0 ...4cee5c602d275bb812022cc8fdabf0a60e151.json | 0 ...4de79b67833f17d252b5b0e8e00cd6e75b5c1.json | 0 ...c5437752a4cf3ac92ec09b334089a8dc5b4ca.json | 0 ...ee38f07b52a709bfd5f3dbab5b4cfef463f1f.json | 0 ...159cf509cf27adf9afdbe61bd867e536b7e47.json | 0 ...6ea7ef2c1178b1b0394a17442185b79f2d77d.json | 0 ...c026c3181f42a49f1f4b6e227c95641931a54.json | 0 ...58ee0e803255aa612a124289f53fbb78bd64a.json | 0 ...ec427a099492905a1feee512dc43f39d10047.json | 0 ...162d717ffcf46fdf5d2ce5d32555353b6da6b.json | 0 ...a8d4768c6a803a1a90889e5a1b8254c315231.json | 0 ...1397212b4767039a6c0e22697cf40969729af.json | 0 ...ecd50a04799ffd36be0e17c56f47fcdbc8f60.json | 0 ...cfb3ba0659b6fcc582e174ee80601b54f89d9.json | 0 ...325fad494a512ba92df95439d2d7fe0f3a285.json | 0 ...40e7eb9f598999c28015a504605f88bf84b33.json | 0 ...662bf3bfdda11bb57f65db4980982a4200bed.json | 0 ...5bb2036d21f60d4c6934f9145730ac35c04de.json | 0 ...677d57040037da0e07cef2c7b7246851a3703.json | 0 ...97b16599abaf51df0f19effe1a536376cf6a6.json | 0 ...fa5c8bf46bc0cea4ac2b25ecde236c30ae32d.json | 0 ...f00e82b0b3ad9ae36bf4fe44d7e85b74c6f49.json | 0 ...4d21d399f860a7b986738d193871fe5cf913d.json | 0 ...b5b5cc7e37dd6a607e9453e822e34ba77cdc3.json | 0 ...8f24785ae8bd2b4579203f05379e757a56f2b.json | 0 ...c171cd0e4d38bd6e9cfec58b2d7f53a3204e1.json | 0 ...528f012c2ecaebf6622ca1ae481045604e58d.json | 0 ...3ce80f9b2b27758651ccfc09df61a4ae8a363.json | 0 ...2e14fa4c1c4fdad16eff011011878af897946.json | 0 ...fadbcfc343374fad173df0cc8db38419a9726.json | 0 ...70d67840b2484ea3a03ac49eb3d50ea153163.json | 0 ...7526a96dd032a34a20e789308a9b94b9e94df.json | 0 ...91a8d67abcdb743a619ed0d1b9c16206a3c20.json | 0 ...3260b49ce42daaf9dbe8075daf0a8e0ad9914.json | 0 ...ab01cb2c55bf86d2c8c99abb1b7ca21cf75c0.json | 0 ...a82f1af696fcc8f7484eaf255d5311589ee39.json | 0 ...f28f7b515cf894e63fc95165c9211f71daa36.json | 0 ...54a701146f4b2dc92361f42598a5f9a72c36b.json | 0 ...f45ef713ef7f9909ce26653faceddb549a383.json | 0 ...8a58479487686d774e6b2b1391347bdafe06d.json | 0 ...2826095e9290f0c1157094bd0c44e06012e42.json | 0 ...f396f9d193615d70184d4327378a7fc8a5665.json | 0 ...26313c255ce356a9a4e25c098484d3129c914.json | 0 ...7f92c4cfad9313b1461e12242d9becb59e0b0.json | 0 ...4a42b4ead6964edd17bfcacb4a828492bba60.json | 0 ...dcf2324f380932698386aa8f9751b1fa24a7b.json | 0 ...6bf94a013e49bf50ce23f4de4968781df0796.json | 0 ...29bf769829991c7d732b13f96bcd1293263ea.json | 0 ...d7d59a34f97285e855d5bd67f28f6f4ff1d4e.json | 0 ...b139e943f3ad2a41387b610606a42b7f03283.json | 0 ...222806762c640b7de7bf6ecdbf9c3f9842d6f.json | 0 ...77b39429d56072f63b3530c576fb31d7a56f9.json | 0 ...87f1fb2f138d9a2231477fcaae148c50dbb8a.json | 0 ...99f9b8679d770b3d1ca755c42ee264342da03.json | 0 ...534014b9ab9ca7725e14fb17aa050d9f35eb8.json | 0 ...0c5f885240d99ea69140a4636b00469d08497.json | 0 ...edac2f0db60c263c1564b64c717f8ae53e44d.json | 0 ...c70aff49e60b7def3d93b9206e650c259168b.json | 0 ...30198c2651022c65eb9e04125356fcf52ddfc.json | 0 ...f2aed7049c3f44a6d25556967ea867e0caf25.json | 0 ...1af63b86e8da6d908d48998012231e1d66a60.json | 0 ...b4207b69cc48b4ba648e797211631be612b69.json | 0 ...567e2667c63a033baa6b427bd8a0898c08bf2.json | 0 ...02c690c33686c889d318b1d64bdd7fa6374db.json | 0 ...c8dc4bd57e32dfefe1017acba9a15fc14b895.json | 0 ...0a54653a5c06c665433718f7ccbbf936f76ca.json | 0 ...98fa893dbc9654d15753e4a538f021af67b60.json | 0 ...2767e112b95f4d103c27acd6f7ede108bd300.json | 0 ...4125a2633ddb6abaa129f2b12389140d83c3f.json | 0 ...f0a9676e26f422506545ccc90b7e8a36c8d47.json | 0 ...4561347b81f8931cc2addefa907c9aa9355e6.json | 0 ...1e30606fddf6631c859ab03819ec476bcf005.json | 0 ...578179e6269c6ff36877cedee264067ccdafc.json | 0 ...e3b0fd67aa1f5f7ea0de673a2fbe1f742db86.json | 0 ...c9317c01d6e35db3b07d0a31f436e7e3c7c40.json | 0 ...8e221a8ef9014458cc7f1dbc60c056a0768a0.json | 0 ...6a834aeac9156b974ff225d734683c1905469.json | 0 ...71bd180729779a0e98ae7a6bb4386aca99716.json | 0 ...5094de508af93f4085be7cf3b54b1e8ecdadd.json | 0 ...4470914b52e2d714e9deb903d62a5d66f0e04.json | 0 ...2cfbaf09164aecfa5eed8d7142518ad96abea.json | 0 ...d92f5a547150590b8c221c4065eab11175c7a.json | 0 ...d7cbb0bc526ebe61a07f735d4ab587058b22c.json | 0 ...a69138206dfeb41f3daff4a3eef1de0bed4e4.json | 0 ...5d93e391600ab9da2e5fd4e8b139ab3d77583.json | 0 ...de45f8f3f3b6cf2e4136f25a1c3ab85d92668.json | 0 ...e2757dbc13be6b30f5840744e5e0569adc66e.json | 0 ...2bef649a6db197a36aca098cd8054909d82e9.json | 0 ...877866bbdd1f8c359d97538125756fd05a2ab.json | 0 ...9bdc9efc6b89fc0444caf8271edd7dfe4a3bc.json | 0 ...43a892f5a0427ca2635946c4f9dfafa8bf0db.json | 0 ...cd6ca26aa2fa565fcf208b6985f461c1868f2.json | 0 ...0457113e073b392c569c077d719941d1e37aa.json | 0 ...63f436a4f16dbeb784d0d28be392ad96b1c49.json | 0 ...895006e23ec73018f4b4e0a364a741f5c9781.json | 0 ...8cc77bd2dcee4a04d1afc9779714854623a79.json | 0 ...61b86b1abd915739533f9982fea9d8e21b9e9.json | 0 ...d1f5e03924dbf6dd1e824d4aca837e604b7e9.json | 0 ...0c2cfff08e6fef3c3824d20dfdf2d0f73e671.json | 0 ...5386a2fd53492f3df05545edbfb0ec0f059d2.json | 0 ...697e36b3c2a997038c30553f7727cdfa17361.json | 0 ...1973d18d45c4a200a60d318cdb1222d63ccaa.json | 0 ...c332a122d0b88271ae0127c65c4612b41a619.json | 0 ...180abbd76956e073432af8d8500327b74e488.json | 0 ...9c9a85e3c24fca1bf87905f7fc68fe2ce3276.json | 0 ...1cc9d3523a392fd2011491c6017400f313a16.json | 0 ...85c5196c431363802b6b988939c99853b9c97.json | 0 ...1731a10b332fec68f4a1e56edec4df71ccaff.json | 0 ...f67d2ef1428c61ae84003c9b52b03204d1f0a.json | 0 ...61f3a71f5c6737e08745a37b41b22f4dfd030.json | 0 ...a4b4e2af48907fa9321064ddb24ac02ab17cd.json | 0 ...f1719fd1284af1dbb60ea128550224b52da93.json | 0 ...709dbee508ad6d1cae43e477cf1bef8cb4aa9.json | 0 ...abda70cb9c56ae3e30dc0a8257e43d6714155.json | 0 ...379f3b2e9ff1bc6e8e38f473fb4950c8e4b77.json | 0 ...c1d66aeaeb6e2d36fddcf96775f01716a8a74.json | 0 ...432d865852afe0c60e11a2c1800d30599aa61.json | 0 ...7956350786f3596c7302bdeb8d813f9fbf621.json | 0 ...9d0e2d571533d4d5f683919987b6f8cbb00e0.json | 0 ...38d60d6e93bcb34fd20422e227714fccbf6b7.json | 0 ...0fb28594859564a0f888eae748ad1f9fcede5.json | 0 ...c116162becce06841476128f864b6028129df.json | 0 ...2b7c4d79cbd404e0267794ec203df0cbb169d.json | 0 ...0d7eaeeb4549ed59b58f8d984be2a22a80355.json | 0 ...03d8bd356f2f9cc249cd8b90caa5a8b5918e3.json | 0 ...16f8cc32e365e2ffbd17dc99885de427f2777.json | 0 ...bed26c831730944237b74bed98869c83b3ca5.json | 0 ...b3b22ea2cd184932fcd59f5931239c7a78003.json | 0 ...b4afd384063ae394a847b26304dd18d490ab4.json | 0 ...2929e051270056ebf113a657a464f89c7fd57.json | 0 ...32432295b2f7ee40bf13522a6edbd236f1970.json | 0 ...1885d320c146cd8fad77c107ef12fa38e6c98.json | 0 ...3b438f14b68535111cf2cedd363fc646aac99.json | 0 ...8242aad3e9a47400f6d6837a35f4c54a216b9.json | 0 ...253eb340a21afd7d65ce6d2f523aeded8dfc0.json | 0 ...05ed6a7335a7092c7dc2b81337535e4d489d5.json | 0 ...f75260c7afaf110870656061a04079c35c2d8.json | 0 ...fd17f833fb15b58b0110c7cc566946db98e76.json | 0 ...3d2839f0f928c06b8020eecec38e895f99b42.json | 0 ...33c83477d65a6f8cb2673f67b3148cd95b436.json | 0 ...e8ee5e54b170de9da863bbdbc79e3f206640b.json | 0 ...c66fc73c2d4f35a5dc40e117903dba4e7edb2.json | 0 ...18128cae1b40ea2ee34b9d5269c12f8b5738a.json | 0 ...76fb01e6629e8c982c265f2af1d5000090572.json | 0 ...c82627a936f7ea9f6c354eca4bea76fac6b10.json | 0 ...550b8db817630d1a9341db4a1f453f12e64fb.json | 0 ...bf58b311d81c5fc0a6fbaccf204976f76f378.json | 0 ...3aa4239d3a8be71b47178b4b8fb11fe898b31.json | 0 ...e5c6feb8059722149a747c4b6bd46731e2536.json | 0 ...f35d55901fb1e6805f23413ea43e3637540a0.json | 0 ...f3f9dd37b771cf76261762ae18fd14cf0efc5.json | 0 ...be152ead3d4a7f22bc3584803288e8d639c13.json | 0 ...e6ecbe96475e83dfed603bd305e72460f52c2.json | 0 ...78a8a0ec739f4ddec8ffeb3a87253aeb18d30.json | 0 ...c0d68195346daf5f38d102eab1c1b73b0f82f.json | 0 ...b1fcdd02ba2ae2104a0ef972fe809bf136425.json | 0 ...d056cc9bae25bc070c5de8424f88fab20e5ea.json | 0 ...5ff66f2c3b2b83d45360818a8782e56aa3d66.json | 0 ...85ec6ec1e522bc058710560ef78e75f94ddac.json | 0 ...ae6d629a74f255a31284ce6707d219c9a0510.json | 0 ...6efe8d41759bbdcdd6d39db93208f2664f03a.json | 0 ...741e2713748a17c96af5485423bfe9aaa84ec.json | 0 ...92dfb0d28a797bee69872634f3105d2d51996.json | 0 ...1fac675dd7b078df61758df382e1038cb4987.json | 0 ...a780c75468aa36615bcfcf7f7d8ace23cd1aa.json | 0 ...d5509f57ae415719f99c6d523c81c20d2bffb.json | 0 ...5618fd95722a77cc44a2e0519f3740191dc75.json | 0 ...227ecaa45d76d1ba260074898fe57c059a15a.json | 0 ...99a1f6ee5a046ece2ef949aee7ab3d2549975.json | 0 ...63a1e89945f8d5e0f4da42ecf6313c4f5967e.json | 0 ...c7dfb7aad7261e5fc402d845aedc3b91a4e99.json | 0 ...5d9ec9b3f628c3a4cf5e10580ea6e5e3a2429.json | 0 ...8dd6c2ad2793c06071f4a067dcc31306adebc.json | 0 ...eb09b538a67d1c39fda052c4f4ddb23ce0084.json | 0 ...5223f4599d4128db588d8645f3d106de5f50b.json | 0 332 files changed, 2 insertions(+), 1988 deletions(-) delete mode 100644 .sqlx/query-00b88ec7fcf40bb18e0018b7c76f6e1df560ab1e8935564355236e90b6147d2f.json delete mode 100644 .sqlx/query-01ac5343beb09ec5bd45b39d560e57a83f37da8999849377dfad60b44989be39.json delete mode 100644 .sqlx/query-0d13b8947b1bafa9e5bc6fdc70a986511265c541d81b1d21f0a751ae1399c626.json delete mode 100644 .sqlx/query-12ab208f416e2875f89e558f0d4aff3a06b7a9c1866132d62e4449fa9436c7c4.json delete mode 100644 .sqlx/query-15858168fea6808c6d59d0e6d8f28a20420763a3a22899ad0e5f4b953b615a9e.json delete mode 100644 .sqlx/query-1bc6597117db032b87df33040d61610ffa7f169d560e79e89b99eedf681c6773.json delete mode 100644 .sqlx/query-204cfd593c62a5a1582215a5f0f4d3648b75bf01ff336bbd77d15f9aa5fd6443.json delete mode 100644 .sqlx/query-2b626262c8003817ee02978f77452554ccfb5b83f00efdc12bed0f60ef439785.json delete mode 100644 .sqlx/query-2d31fcce581975a82d6156b52e35fb7a093b73727f75e0cb7db9cea480c95f5c.json delete mode 100644 .sqlx/query-33d6be45b246523ad76f9ae512322ff6372f63ecadb504a329499b02e7d3550e.json delete mode 100644 .sqlx/query-35b87a3b7db0af87c6a95e9fe7ef9044ae85b579c7051301b40bd5f94df1f530.json delete mode 100644 .sqlx/query-3c3abbf689fa64c6da7de69fd916769dbb04d3a61cf232892236c974660ffe64.json delete mode 100644 .sqlx/query-3ec365c5c81f4678a905ae5bbd48b87ead36f593488437c6f67da629ca81e4fa.json delete mode 100644 .sqlx/query-46c4696fff5a4b8cc5cb46b05645da82065836fe17687ffad04126a6a8b2b27c.json delete mode 100644 .sqlx/query-4d263992ed6d5abbd7d3ca43af9d772d8801b0ae673b7173ae08a1fa6cbf67b2.json delete mode 100644 .sqlx/query-4d92a133a36afd682a84fbfd75aafca34d61347e0e2e29fb07ca3d1b8b1f309c.json delete mode 100644 .sqlx/query-510bfea2346a8c63e74222e1159de366f88c20d00a8d928b6cf4caae0702b333.json delete mode 100644 .sqlx/query-534822a226068cde83ad8c30b569a8f447824a5ab466bb6eea1710e8aeaa2c56.json delete mode 100644 .sqlx/query-53f78fdee39b113d2f55f6f951bd94f28b7b2b60d551d552a9b0bab1f1791e39.json delete mode 100644 .sqlx/query-5821f1446983260168cec366af26009503182c300877e74a8539f231050e6f85.json delete mode 100644 .sqlx/query-5e781f84ec41edd0941fa84de837effac442434c6e734d977e6682a7484abe7f.json delete mode 100644 .sqlx/query-61b2b858d4636809c21838635aa52aeb5f06c26f68d131dd242f6ed68816c513.json delete mode 100644 .sqlx/query-6ae2ed34230beae0e86c584e293e7ee767e4c98706246eb113498c0f817f5f38.json delete mode 100644 .sqlx/query-6cfc59d2fc039c706f30ae91b7d9d0c658093dede5eb61489205aa751ad5b8ec.json delete mode 100644 .sqlx/query-75f6eaa518e7840374c4e44b0788bf92c7f2c55386c8208e3a82b30456abd5b4.json delete mode 100644 .sqlx/query-7a2145e2234a7896031bbc1ce82715e903f3b399886c2c73e838bd924fed6776.json delete mode 100644 .sqlx/query-7a8fffe8d4e3085e00c98f770d250d625f057acf1440b6550375ce5509a816a6.json delete mode 100644 .sqlx/query-806b82a9effd885ba537a2a1c7d7227120a8279db1875d26ccae5ee0785f46a9.json delete mode 100644 .sqlx/query-8182690d0326b820d23fba49d391578db18c29cdca85b8b6aad86fe2a9bf6bbe.json delete mode 100644 .sqlx/query-8f5e89ccadd4ea1da7bfe9793a1cbb724af0f0216433a70f19d784e3f2afbc9f.json delete mode 100644 .sqlx/query-9ef2f43e6201cc00a0e1425a666a36532fee1450733849852dfd20e18ded1f03.json delete mode 100644 .sqlx/query-a0e2b2c034cc5f668f0b3d43b94d2e2326d7ace079b095def52723a45b65d3f3.json delete mode 100644 .sqlx/query-a4861c931e84d897c27f666de1c5ca679a0459a012899a373c67393d30d12601.json delete mode 100644 .sqlx/query-a84ee70bec8c03bd51e1c6bad44c9a64904026506914abae2946e5d353d6a604.json delete mode 100644 .sqlx/query-aa91697157517322b0dbb53dca99f41220c51f58a03c61d6b7789eab0504e320.json delete mode 100644 .sqlx/query-aaf4fb97c95a5290fb1620cd868477dcf21955e0921ba648ba2e751dbfc3cb45.json delete mode 100644 .sqlx/query-af72fabd90eb43fb315f46d7fe9f724216807ffd481cd6f7f19968e42e52b284.json delete mode 100644 .sqlx/query-afc24bd1407dba82cd3dc9e7ee71ac4ab2d73bda6022700aeb0a630a2563a4b4.json delete mode 100644 .sqlx/query-b17c71983da060f08616e001b42f8dcbcb014b4f808c6232abd9a83354c995ac.json delete mode 100644 .sqlx/query-b23ddb16513d69331056b94d466663a9c5ea62ea7c99a77941eb8f05d4454125.json delete mode 100644 .sqlx/query-b321c5ba22358cbb1fd9c627f1e7b56187686173327498ac75424593547c19c5.json delete mode 100644 .sqlx/query-b367ecb1ebee86ec598c4079591f8c12deeca6b8843fe3869cc2b02b30da5de6.json delete mode 100644 .sqlx/query-b3d71dbe14bcd94131b29b64dcb49b6370c211a7fc24ad03a5f0e327f9d18040.json delete mode 100644 .sqlx/query-b4304b9afb9f838eee1fe95af5fd964d4bb39b9dcd18fb03bc11ce2fb32b7fb3.json delete mode 100644 .sqlx/query-b4794e6a0c2366d5d95ab373c310103263af3ff5cb6c9dc5df59d3cd2a5e56b4.json delete mode 100644 .sqlx/query-bfb80956a18eabf266f5b5a9d62912d57f8eb2a38bdb7884fc812a2897a3a660.json delete mode 100644 .sqlx/query-c10cf20825de4d24300c7ec50d4a653852f7e43670076eb2ebcd49542a870539.json delete mode 100644 .sqlx/query-c23d5ff919ade5898c6a912780ae899e360650afccb34f5cc301b5cbac4a3d36.json delete mode 100644 .sqlx/query-c41312e01aa66897552e8be9acc8d43c31ec7441a7f6c5040e120810ebbb72f7.json delete mode 100644 .sqlx/query-c706a49ff54f6b424e24d061fe7ac429aac3c030f7e226a1264243d8cdae038d.json delete mode 100644 .sqlx/query-ca9d06141265b8524ee28c55569cb21a635037d89ce24dd3ad58ffaadb59594a.json delete mode 100644 .sqlx/query-ce5779092feb8a3d3e2c5e395783e67f08f2ead5f55bfb6594e50346bf9cf2ef.json delete mode 100644 .sqlx/query-d7e8eabd7b43ff62838fbc847e4813d2b2d411bd5faf8306cd48db500532b711.json delete mode 100644 .sqlx/query-d8e3ee346375e4b6a8b2c73a3827e88abd0f8164c2413dc83c91c29665ca645e.json delete mode 100644 .sqlx/query-db3e74f0e83ffbf84a6d61e560f2060fbea775dc185f639139fbfd23e4d5f3c6.json delete mode 100644 .sqlx/query-df00e33809768120e395d8f740770a4e629b2a1cde641e74e4e55bb100df809f.json delete mode 100644 .sqlx/query-e3479d12d9dc97001cf03dc42d9b957e92cd375ec33fe16f855f319ffc0b208e.json delete mode 100644 .sqlx/query-e74a34a59e6afda689b0ec9e19071ababa66e4a443fbefbfffca72b7540b075b.json delete mode 100644 .sqlx/query-e9adf5b5a1ab84c20a514a7775f91a9984685eaaaa0a8b223410d560a15a3034.json delete mode 100644 .sqlx/query-e9ca863d6e77edd39a9fc55700a6686e655206601854799139c22c017a214744.json delete mode 100644 .sqlx/query-ec04b89218111a5dc8d5ade506ac3465e2211ef3013386feb12d4cc04e0eade9.json delete mode 100644 .sqlx/query-edc61e1285bf6d3837acc67af4f15aaade450980719933089824eb8c494d64a4.json delete mode 100644 .sqlx/query-ef687be83e496d6647e4dfef9eabae63443c51deb818dd0affd1a0949b161737.json delete mode 100644 .sqlx/query-f4362a61ab05af3d71a3232d2f017db60405a887f9f7fa0ca60aa7fc879ce630.json delete mode 100644 .sqlx/query-f717ca5d0890759496739a678955e6f8b7f88a0894a7f9e27fc26f93997d37c7.json delete mode 100644 .sqlx/query-fcddeb96dcd1611dedb2091c1be304e8a35fd65bf37e976b7106f57c57e70b9b.json rename {.sqlx => core/lib/dal/.sqlx}/query-00220170d8f9e577321a0522337a7db7673811ac181e801a16a7aefc984d60b0.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-0034bc1041d9ba7d3c681be6dfc4e7dfacfcf625e057b99924c245de03c2888c.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-012bed5d34240ed28c331c8515c381d82925556a4801f678b8786235d525d784.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-015350f8d729ef490553550a68f07703b2581dda4fe3c00be6c5422c78980c4b.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-01f72dfc1eee6360a8ef7809874a1b4ba7fe355ebc02ea49a054aa073ce324ba.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-026ab7dd7407f10074a2966b5eac2563a3e061bcc6505d8c295b1b2517f85f1b.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-03c585c7e9f918e608757496088c7e3b6bdb2a08149d5f443310607d3c78988c.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-040eaa878c3473f5edc73b77e572b5ea100f59295cd693d14ee0d5ee089c7981.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-04fbbd198108d2614a3b29fa795994723ebe57b3ed209069bd3db906921ef1a3.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-0535c87d0ae694d5f10e529742ba2803cd147dec7450d1f81a41aea8dcf3be93.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-06ce3e5c10d6ae327fc2e45fd9080112ce326bcf4bb38a00366bd24e38881bb2.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-07310d96fc7e258154ad510684e33d196907ebd599e926d305e5ef9f26afa2fa.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-083991abb3f1c2183d1bd1fb2ad4710daa723e2d9a23317c347f6081465c3643.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-08737d11b3e5067a2468013ec6e5d95fc47eb6bedc32f4d824aac9b2b6f96faf.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-08e59ed8e2fd1a74e19d8bf0d131e4ee6682a89fb86f3b715a240805d44e6d87.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-0914f0ad03d6a8c55d287f94917c6f03469d78bf4f45f5fd1eaf37171db2f04a.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-0a53fc3c90a14038c9f3f32c3e2e5f7edcafa4fc6757264a96a46dbf7dd1f9cc.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-0bdcf87f6910c7222b621f76f71bc6e326e15dca141050bc9d7dacae98a430e8.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-0c899c68886f76a232ffac0454cdfbf962636347864fc365fafa46c7a2da5f30.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-0c95fbfb3a816bd49fd06e3a4f0a52daa202279bf612a9278f663deb78bc6e41.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-0f381418ac79762b4573bf5b440b96b711e8667df7a3c87a5ddf062842a0da6c.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-10959c91f01ce0da196f4c6eaf0661a097308d9f81024fdfef24a14418202730.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-10b8981f7aa47ce5d3507571af45f7cef0d50c4938105684971e8adc86bb6366.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-11af69fc254e54449b64c086667700a95e4c37a7a18531b3cdf120394cb055b9.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-136569d7eb4037fd77e0fac2246c68e8e15a831f1a45dc3b2240d5c6809d5ef2.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-14c0caee921199f799400dbea719ed36420c15081ff5f60da0a1c769c2dbc542.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-14e5a66ee9a2b7bc56e41c3925150dd2778c0da29697d31710e8b507629ba5c4.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-1689c212d411ebd99a22210519ea2d505a1aabf52ff4136d2ed1b39c70dd1632.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-1766c0a21ba5918dd08f4babd8dbfdf10fb1cb43781219586c169fb976204331.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-1862d3a78e4e9068df1b8ce3bbe9f3f0b5d629fdb5c36ea1bfb93ed246be968e.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-19314d74e94b610e2da6d728ca37ea964610e131d45f720f7a7b2a130fe9ed89.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-19545806b8f772075096e69f8665d98a3d9f7df162ae22a98c3c7620fcd13bd2.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-19b89495be8aa735db039ccc8a262786c58e54f132588c48f07d9537cf21d3ed.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-1b4ebbfc96b4fd66ecbe64a6be80a01a6c7cbe9297cbb55d42533fddc18719b6.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-1c14d2def60fa5ff91788ddb55e68cee71742b732112038a642e2a07305053c2.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-1c994d418ada78586de829fc2d34d26e48e968c79834858c98b7a7f9dfc81910.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-1dcb3afb0c1947f92981f61d95c099c4591ce3f8d51f3df99db0165e086f96af.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-1ea37ef1c3df72e5e9c50cfa1675fc7f60618209d0132e7937a1347b7e94b212.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-1ed2d7e5e98b15420a21650809d710ce910d0c9138d85cb55e16459c757dea03.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-1f46524410ce0f193dc6547499bde995ddddc621ee2149f08f905af2d8aadd03.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-1f4c123edaf6faf50e1c07a797cd1d4794007904fef7a5e837ebfb1b502711a1.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-2003dcf7bc807c7d345368538accd9b0128f82306e27e4c7258116082a54ab95.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-20f84f9ec21459d8c7ad53241758eeab159533211d2ddbef41e6ff0ba937d04a.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-23be43bf705d679ca751c89353716065fcad42c6b621efb3a135a16b477dcfd9.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-245dc5bb82cc82df38e4440a7746ca08324bc86a72e4ea85c9c7962a6c8c9e30.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-24722ee4ced7f03e60b1b5ecaaa5234d536b064951a67d826ac49b7a3a095a1a.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-249cb862d44196cb6dc3945e907717b0dd3cec64b0b29f59b273f1c6952e01da.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-2506e9edfd4b41ca1e187909631ae942bab5d71daaed7017e3fa62dc5e42ab0a.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-254d17b5402c123cca0edd6fcdc98012b034605dfb4c48379844085b71e9e381.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-25646383ecacf72e3f63b5c93a57a66d1e38fb6ca706c2affd4607d77be38de9.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-268d27c427a69c5e35e6004380da45f005141b01eac26946251bba68e9276acf.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-26bc9b315c4c57bcff1f46da956727233a36e018fe5c0651995b876053a6a054.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-26cb272c2a46a267c47681e0f1f07997b7e24682da56f84d812da2b9aeb14ca2.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-26e0b7eb1871d94ddc98254fece6381a9c4165e2727542eaeef3bbedd13a4f20.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-2737fea02599cdc163854b1395c42d4ef93ca238fd2fbc9155e6d012d0d1e113.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-280cf015e40353e2833c0a70b77095596297be0d728a0aa2d9b180fb72de222b.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-293258ecb299be5f5e81696d14883f115cd97586bd795ee31f58fc14e56d58cb.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-2955e976281f9cbd98b7378c5ab52964b268b93c32fd280c49bf9f932884300d.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-2979b6c9ce76a4e6eaaa3f9bad5cf831d63d692111d87282aed8e85df6b0411f.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-2a2680234c38904e5c19df45193a8c13d04079683e09c65f7f4e76a9987e2ab4.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-2b1136c7781bcdbd9d5d1e6f900fe400fcba3bfc5cf1b7c2b801508f6673d94e.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-2b1aa207a058f66265acf2c21b8ed5d8007789c0fc1eab948f6d7339dfb69147.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-2c71a819c6ed22a3ab79675840e00f7b1176d59a83520288f5428b67ebd52130.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-2c827c1c3cfa3552b90d4746c5df45d57f1f8b2558fdb374bf02e84d3c825a23.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-2d0c2e9ec4187641baef8a33229bffc78d92adb3c1e3ca60b12163e38c67047e.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-2d1e0f2e043c193052c9cc20f9efeb5f094160627bc09db4bda2dda9a8c11c44.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-2d862097cfae49a1fb28ec0a05176085385c3a79d72f49669b4215a9454323c2.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-2dd7dbaeb2572404451e78a96f540e73a2778633bbf9d8e591ec912634639af9.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-2ddba807ac8ec5260bf92c77073eb89c728357c0744f209090824695a5d35fa3.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-2e5b9ae1b81b0abfe7a962c93b3119a0a60dc9804175b2baf8b45939c74bd583.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-2eb25bfcfc1114de825dc4eeb0605d7d1c9e649663f6e9444c4425821d0a5b71.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-307f15e00a97440868189f25e4487ed365c0369f94bc457cb162a5c876a123c7.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-31f12a8c44124bb2ce31889ac5295f3823926f69cb1d54874878e6d6c301bfd8.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-32792c6aee69cb8c8b928a209a3b04ba5868d1897553df85aac15b169ebb0732.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-3490fe0b778a03c73111bf8cbf426b0b3185a231bbf0b8b132a1a95bc157e827.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-3596a70433e4e27fcda18f37073b51dea32e37cb8c51f1dd5d82c15eddc48e6b.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-3743b41751a141c21f1674fa581ea7a878613cf62f7fb9b94c5145dc8d1da674.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-38a8b00e320b16e99f6ea0e5954e2f7e49cd6600bd3d56cf41795c2c9e082e4c.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-39849c30cdfa1827d69313357f92c495462e5aa430fe135d1db1f9bad1e72156.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-3b013b93ea4a6766162c9f0c60517a7ffc993cf436ad3aeeae82ed3e330b07bd.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-3b3fbcffd2702047045c2f358e8ac77b63879ab97a32eed8392b48cc46116a28.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-3b4d5009ec22f54cc7d305aa11d96ec397767a063dc21aa3add974cb9b070361.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-3ba9bc85e3e286aadef8aad27eb38fc90b18155e3435f58d9888fa50d92042f7.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-3bc70707863d7be1158de1bfb4bd51c3c1cbd9ba8df9d44a29ff96186e35b700.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-3c531ad0631090934ed46c538249360a7eab2efc70d97b901f8948f6909d4cd2.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-3c60ca71b8a3b544f5fe9d7f2fbb249026665c9fb17b6f53a2154473547cbbfd.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-3d2d005b59ba9931286452e029cfccb19a2f9663a73306dbf61a257050e2b634.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-3d7536cfe7d88dceebff2125a51bcae561c0eea2b1cd8beb245b0cc66ebffcaa.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-406e51d7884cdff36632ccf97912484f0a0d76a8097b61ead5f1f20301ce524d.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-40c17194a2089a7d3fa6b7923c9e03def94f4bf4674def1893e2232be80f57a0.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-41c9f45d6eb727aafad0d8c18024cee5c602d275bb812022cc8fdabf0a60e151.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-43c7e352d09f69de1a182196aea4de79b67833f17d252b5b0e8e00cd6e75b5c1.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-44490ad52b8dbcd978a96677ffac5437752a4cf3ac92ec09b334089a8dc5b4ca.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-48c03061a662861818e3b0072caee38f07b52a709bfd5f3dbab5b4cfef463f1f.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-4aef05b8864484c6979c93d7ce3159cf509cf27adf9afdbe61bd867e536b7e47.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-4d50dabc25d392e6b9d0dbe0e386ea7ef2c1178b1b0394a17442185b79f2d77d.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-51891ab674b8f5cf2d7c12420d1c026c3181f42a49f1f4b6e227c95641931a54.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-53182f70d83de1482110c767a8d58ee0e803255aa612a124289f53fbb78bd64a.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-532a80b0873871896dd318beba5ec427a099492905a1feee512dc43f39d10047.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-546c729829083b7eba94fea742c162d717ffcf46fdf5d2ce5d32555353b6da6b.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-5503575d9377785894de6cf6139a8d4768c6a803a1a90889e5a1b8254c315231.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-555f396946bdb8b84a5d77abbfc1397212b4767039a6c0e22697cf40969729af.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-55b0b4c569c0aaf9741afc85400ecd50a04799ffd36be0e17c56f47fcdbc8f60.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-55e6f5ea121090034c8920dffb7cfb3ba0659b6fcc582e174ee80601b54f89d9.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-55f4585be3d0f1a147cb10f6e59325fad494a512ba92df95439d2d7fe0f3a285.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-5659480e5d79dab3399e35539b240e7eb9f598999c28015a504605f88bf84b33.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-57fe009542ca9dc763e3823ee73662bf3bfdda11bb57f65db4980982a4200bed.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-58aed39245c72d231b268ce83105bb2036d21f60d4c6934f9145730ac35c04de.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-5d341e334cbc2d38efc8a060325677d57040037da0e07cef2c7b7246851a3703.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-5d493cbce749cc5b56d4069423597b16599abaf51df0f19effe1a536376cf6a6.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-5f7034d22251a893249208c5ff8fa5c8bf46bc0cea4ac2b25ecde236c30ae32d.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-61bc330d6d1b5fddec78342c1b0f00e82b0b3ad9ae36bf4fe44d7e85b74c6f49.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-6213f642c89d2c0a470c93b94714d21d399f860a7b986738d193871fe5cf913d.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-63f5f9bff4b2c15fa4230af2c73b5b5cc7e37dd6a607e9453e822e34ba77cdc3.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-65736a5b9b4ad364797dbedfc828f24785ae8bd2b4579203f05379e757a56f2b.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-6621de90a024cc85946f17948e5c171cd0e4d38bd6e9cfec58b2d7f53a3204e1.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-66510caa7683ed90729cb545ac8528f012c2ecaebf6622ca1ae481045604e58d.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-6692ff6c0fbb2fc94f5cd2837a43ce80f9b2b27758651ccfc09df61a4ae8a363.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-67ac33ad0ad912e8db6d141e21c2e14fa4c1c4fdad16eff011011878af897946.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-6849be0788a509e4e68acc2da4bfadbcfc343374fad173df0cc8db38419a9726.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-6874b501c82e6062ab22622095070d67840b2484ea3a03ac49eb3d50ea153163.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-6ae7d3c1a3e7bd5388c39e3cc847526a96dd032a34a20e789308a9b94b9e94df.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-6b327df84d2b3b31d02db35fd5d91a8d67abcdb743a619ed0d1b9c16206a3c20.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-6bd3094be764e6378fe52b5bb533260b49ce42daaf9dbe8075daf0a8e0ad9914.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-6c0d03b1fbe6f47546bc34c6b2eab01cb2c55bf86d2c8c99abb1b7ca21cf75c0.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-6c46fb3d51aeb069c09ff0cae3ea82f1af696fcc8f7484eaf255d5311589ee39.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-6c6b8045f9dd7bdb9ada0d71974f28f7b515cf894e63fc95165c9211f71daa36.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-6d08cadce92f03b0596e068884854a701146f4b2dc92361f42598a5f9a72c36b.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-6ed5cc84e8097c4febf6c935193f45ef713ef7f9909ce26653faceddb549a383.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-708b2b3e40887e6d8d2d7aa20448a58479487686d774e6b2b1391347bdafe06d.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-72a4f50355324cce85ebaef9fa32826095e9290f0c1157094bd0c44e06012e42.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-73c4bf1e35d49faaab9f7828e80f396f9d193615d70184d4327378a7fc8a5665.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-7560ba61643a8ec8eeefbe6034226313c255ce356a9a4e25c098484d3129c914.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-759b80414b5bcbfe03a0e1e15b37f92c4cfad9313b1461e12242d9becb59e0b0.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-75fa24c29dc312cbfa89bf1f4a04a42b4ead6964edd17bfcacb4a828492bba60.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-76cb9ad97b70d584b19af194576dcf2324f380932698386aa8f9751b1fa24a7b.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-77a43830ca31eac85a3c03d87696bf94a013e49bf50ce23f4de4968781df0796.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-7af52a220958d790bd8b5b06a6e29bf769829991c7d732b13f96bcd1293263ea.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-7b908340613dadbbef46e2160d2d7d59a34f97285e855d5bd67f28f6f4ff1d4e.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-7fccc28bd829bce334f37197ee6b139e943f3ad2a41387b610606a42b7f03283.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-80684de323c47ade36e5a52b99a222806762c640b7de7bf6ecdbf9c3f9842d6f.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-81869cb392e9fcbb71ceaa857af77b39429d56072f63b3530c576fb31d7a56f9.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-8255d112d3929fd8355ba2ac9bc87f1fb2f138d9a2231477fcaae148c50dbb8a.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-82ed556807bcd7dd5872c220b3399f9b8679d770b3d1ca755c42ee264342da03.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-83a931ceddf34e1c760649d613f534014b9ab9ca7725e14fb17aa050d9f35eb8.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-8625ca45ce76b8c8633d390e35e0c5f885240d99ea69140a4636b00469d08497.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-86cbe509988c8775bcf738d5cb1edac2f0db60c263c1564b64c717f8ae53e44d.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-877d20634068170326ab5801b69c70aff49e60b7def3d93b9206e650c259168b.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-87b3c0cb253a19ba181406bab5f30198c2651022c65eb9e04125356fcf52ddfc.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-87f27295de500591f01ed76731df2aed7049c3f44a6d25556967ea867e0caf25.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-88c629334e30bb9f5c81c858aa51af63b86e8da6d908d48998012231e1d66a60.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-8903ba5db3f87851c12da133573b4207b69cc48b4ba648e797211631be612b69.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-894665c2c467bd1aaeb331b112c567e2667c63a033baa6b427bd8a0898c08bf2.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-8a7a57ca3d4d65da3e0877c003902c690c33686c889d318b1d64bdd7fa6374db.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-8b9e5d525c026de97c0a732b1adc8dc4bd57e32dfefe1017acba9a15fc14b895.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-8ce0812420fbf35cbbbb0f77f850a54653a5c06c665433718f7ccbbf936f76ca.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-93725851350146c6ec253a59af598fa893dbc9654d15753e4a538f021af67b60.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-95ea0522a3eff6c0d2d0b1c58fd2767e112b95f4d103c27acd6f7ede108bd300.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-966dddc881bfe6fd94b56f587424125a2633ddb6abaa129f2b12389140d83c3f.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-9955b9215096f781442153518c4f0a9676e26f422506545ccc90b7e8a36c8d47.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-99acb091650478fe0feb367b1d64561347b81f8931cc2addefa907c9aa9355e6.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-99d9ee2a0d0450acefa0d9b6c031e30606fddf6631c859ab03819ec476bcf005.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-99dd6f04e82585d81ac23bc4871578179e6269c6ff36877cedee264067ccdafc.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-9c2a5f32c627d3a5c6f1e87b31ce3b0fd67aa1f5f7ea0de673a2fbe1f742db86.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-9cfcde703a48b110791d2ae1103c9317c01d6e35db3b07d0a31f436e7e3c7c40.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-9de5acb3de1b96ff8eb62a6324e8e221a8ef9014458cc7f1dbc60c056a0768a0.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-9ee07a22405279e1e44d47ec5226a834aeac9156b974ff225d734683c1905469.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-9f637f37dc3a29ce7412ab4347071bd180729779a0e98ae7a6bb4386aca99716.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-a115f795672787fe25bfaa8fd345094de508af93f4085be7cf3b54b1e8ecdadd.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-a1f4334b6bc1642c1bc0ff4ffa34470914b52e2d714e9deb903d62a5d66f0e04.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-a2d02b71e3dcc29a2c0c20b44392cfbaf09164aecfa5eed8d7142518ad96abea.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-a48c92f557e5e3a2674ce0dee9cd92f5a547150590b8c221c4065eab11175c7a.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-a4a4b0bfbe05eac100c42a717e8d7cbb0bc526ebe61a07f735d4ab587058b22c.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-a4fcd075b68467bb119e49e6b20a69138206dfeb41f3daff4a3eef1de0bed4e4.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-a74d029f58801ec05d8d14a3b065d93e391600ab9da2e5fd4e8b139ab3d77583.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-a8dad09a54cc991706141da557dde45f8f3f3b6cf2e4136f25a1c3ab85d92668.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-a91c23c4d33771122cec2589c6fe2757dbc13be6b30f5840744e5e0569adc66e.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-aac861efb4acb81d5cefa598c822bef649a6db197a36aca098cd8054909d82e9.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-ab68f07dc6f3ec66200df109527877866bbdd1f8c359d97538125756fd05a2ab.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-ac505ae6cfc744b07b52997db789bdc9efc6b89fc0444caf8271edd7dfe4a3bc.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-acc8925d50a4205c0bc8b98647e43a892f5a0427ca2635946c4f9dfafa8bf0db.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-ada54322a28012b1b761f3631c4cd6ca26aa2fa565fcf208b6985f461c1868f2.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-ae204503b0a682a9edc4d7bd7430457113e073b392c569c077d719941d1e37aa.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-aeda34b1beadca72e3e600ea9ae63f436a4f16dbeb784d0d28be392ad96b1c49.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-aefea1f3e87f28791cc547f193a895006e23ec73018f4b4e0a364a741f5c9781.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-b259e6bacd98fa68003e0c87bb28cc77bd2dcee4a04d1afc9779714854623a79.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-b452354c888bfc19b5f4012582061b86b1abd915739533f9982fea9d8e21b9e9.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-b47a2961dc2f1347864682c572dd1f5e03924dbf6dd1e824d4aca837e604b7e9.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-b49478150dbc8731c531ef3eddc0c2cfff08e6fef3c3824d20dfdf2d0f73e671.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-b4a0444897b60c7061363a48b2b5386a2fd53492f3df05545edbfb0ec0f059d2.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-b5fd77f515fe168908cc90e44d0697e36b3c2a997038c30553f7727cdfa17361.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-b63ee98d4708c8121a287becb7e1973d18d45c4a200a60d318cdb1222d63ccaa.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-b6837d2deed935da748339538c2c332a122d0b88271ae0127c65c4612b41a619.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-b75e3d2fecbf5d85e93848b7a35180abbd76956e073432af8d8500327b74e488.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-b7bf6999002dd89dc1224468ca79c9a85e3c24fca1bf87905f7fc68fe2ce3276.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-b95b63f22afee3b186da4284a0a1cc9d3523a392fd2011491c6017400f313a16.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-b9f77e6c15f9e635024b73f1fc985c5196c431363802b6b988939c99853b9c97.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-ba1b6c4588ea3d3b138e03a63ef1731a10b332fec68f4a1e56edec4df71ccaff.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-ba2343a38e37d104786f9276d91f67d2ef1428c61ae84003c9b52b03204d1f0a.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-bab1857df66bbef57705ae7796161f3a71f5c6737e08745a37b41b22f4dfd030.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-bd51c9d93b103292f5acbdb266ba4b4e2af48907fa9321064ddb24ac02ab17cd.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-be2c8e525d6867c0d2bd254c73ef1719fd1284af1dbb60ea128550224b52da93.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-bfc84bcf0985446b337467dd1da709dbee508ad6d1cae43e477cf1bef8cb4aa9.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-c02f404ce9b0f92b8052ef6f3eaabda70cb9c56ae3e30dc0a8257e43d6714155.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-c03df29f4661fa47c1412bd82ba379f3b2e9ff1bc6e8e38f473fb4950c8e4b77.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-c139df45a977290d1c2c7987fb9c1d66aeaeb6e2d36fddcf96775f01716a8a74.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-c14837e92dbb02f2fde7109f524432d865852afe0c60e11a2c1800d30599aa61.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-c195037dcf6031a90f407f652657956350786f3596c7302bdeb8d813f9fbf621.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-c2fe6a5476e69c9588eec73baba9d0e2d571533d4d5f683919987b6f8cbb00e0.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-c36abacc705a2244d423599779e38d60d6e93bcb34fd20422e227714fccbf6b7.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-c37432fabd092fa235fc70e11430fb28594859564a0f888eae748ad1f9fcede5.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-c4426ae84862e720673485e3b59c116162becce06841476128f864b6028129df.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-c5656667e5610ffb33e7b977ac92b7c4d79cbd404e0267794ec203df0cbb169d.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-c6d523c6ae857022318350a2f210d7eaeeb4549ed59b58f8d984be2a22a80355.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-c809f42a221b18a767e9dd0286503d8bd356f2f9cc249cd8b90caa5a8b5918e3.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-c8155c4e4701fc771918ac1bb4d16f8cc32e365e2ffbd17dc99885de427f2777.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-c9e05ebc7b61c1f409c330bc110bed26c831730944237b74bed98869c83b3ca5.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-cb0a9f6137fb6bee5d17d644714b3b22ea2cd184932fcd59f5931239c7a78003.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-cb98d84fc34af1e4a4c2f427c5bb4afd384063ae394a847b26304dd18d490ab4.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-cea366a9d0da60bf03c71be26862929e051270056ebf113a657a464f89c7fd57.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-cea9fe027a6a0ada827f23b48ac32432295b2f7ee40bf13522a6edbd236f1970.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-cf8cff1e6d277088519ef7dfbdb1885d320c146cd8fad77c107ef12fa38e6c98.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-d14b52df2cd9f9e484c60ba00383b438f14b68535111cf2cedd363fc646aac99.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-d3b09cbcddf6238b358d32d57678242aad3e9a47400f6d6837a35f4c54a216b9.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-d3f9202d665ef4fcb028dae6484253eb340a21afd7d65ce6d2f523aeded8dfc0.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-d50555b3b7a1feadd34a2fe90b205ed6a7335a7092c7dc2b81337535e4d489d5.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-d6b70256793417a949081899eccf75260c7afaf110870656061a04079c35c2d8.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-d70cfc158e31dd2d5c942d24f81fd17f833fb15b58b0110c7cc566946db98e76.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-d712707e47e143c52330ea6e0513d2839f0f928c06b8020eecec38e895f99b42.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-d7ed82f0d012f72374edb2ebcec33c83477d65a6f8cb2673f67b3148cd95b436.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-da51a5220c2b964303292592c34e8ee5e54b170de9da863bbdbc79e3f206640b.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-da72486421d60d3d633e19632a8c66fc73c2d4f35a5dc40e117903dba4e7edb2.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-db41e2480bdef66e1c89347402418128cae1b40ea2ee34b9d5269c12f8b5738a.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-dc16d0fac093a52480b66dfcb5976fb01e6629e8c982c265f2af1d5000090572.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-dc481f59aae632ff6f5fa23f5c5c82627a936f7ea9f6c354eca4bea76fac6b10.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-dd55e46dfa5ba3692d9620088a3550b8db817630d1a9341db4a1f453f12e64fb.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-de3a5a35b111bd831bebe6d9391bf58b311d81c5fc0a6fbaccf204976f76f378.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-dea22358feed1418430505767d03aa4239d3a8be71b47178b4b8fb11fe898b31.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-df3256c012f86a9cd3b9260b97be5c6feb8059722149a747c4b6bd46731e2536.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-e073cfdc7a00559994ce04eca15f35d55901fb1e6805f23413ea43e3637540a0.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-e673789d5b4a7aae11feccb085bf3f9dd37b771cf76261762ae18fd14cf0efc5.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-e7d47990db585af7cbf096155babe152ead3d4a7f22bc3584803288e8d639c13.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-ea682d41219feda3514336f4c1ae6ecbe96475e83dfed603bd305e72460f52c2.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-ea904aa930d602d33b6fbc1bf1178a8a0ec739f4ddec8ffeb3a87253aeb18d30.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-eab03e888f20020462ede2cd59fc0d68195346daf5f38d102eab1c1b73b0f82f.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-eb9cd837842490dcb8ab8894ccdb1fcdd02ba2ae2104a0ef972fe809bf136425.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-ef331469f78c6ff68a254a15b55d056cc9bae25bc070c5de8424f88fab20e5ea.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-f012d0922265269746396dac8f25ff66f2c3b2b83d45360818a8782e56aa3d66.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-f1541a8d970d57ed118ee603e7285ec6ec1e522bc058710560ef78e75f94ddac.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-f19c20325298647177a86a3f9c4ae6d629a74f255a31284ce6707d219c9a0510.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-f1a90090c192d68367e799188356efe8d41759bbdcdd6d39db93208f2664f03a.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-f2606e792f08f65d15bdab66a83741e2713748a17c96af5485423bfe9aaa84ec.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-f2f852a340c45ff69cbca42d7c592dfb0d28a797bee69872634f3105d2d51996.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-f3a695b0179ffdacd4baf9eeb6c1fac675dd7b078df61758df382e1038cb4987.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-f4e7e2dd109aab2714845b028eba780c75468aa36615bcfcf7f7d8ace23cd1aa.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-f4f400606cd3875ed1be393107dd5509f57ae415719f99c6d523c81c20d2bffb.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-f5854ce2c37bc66d38b05c9fb985618fd95722a77cc44a2e0519f3740191dc75.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-f63586d59264eab7388ad1de823227ecaa45d76d1ba260074898fe57c059a15a.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-f87c50d37f78d6b3c5a752ea88799a1f6ee5a046ece2ef949aee7ab3d2549975.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-f91790ae5cc4b087bf942ba52dd63a1e89945f8d5e0f4da42ecf6313c4f5967e.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-fcc108fd59203644ff86ded0505c7dfb7aad7261e5fc402d845aedc3b91a4e99.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-fdffa5841554286a924b217b5885d9ec9b3f628c3a4cf5e10580ea6e5e3a2429.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-fe06e06c04466429bb85709e6fe8dd6c2ad2793c06071f4a067dcc31306adebc.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-fe501f86f4bf6c5b8ccc2e039a4eb09b538a67d1c39fda052c4f4ddb23ce0084.json (100%) rename {.sqlx => core/lib/dal/.sqlx}/query-fec7b791e371a4c58350b6537065223f4599d4128db588d8645f3d106de5f50b.json (100%) diff --git a/.sqlx/query-00b88ec7fcf40bb18e0018b7c76f6e1df560ab1e8935564355236e90b6147d2f.json b/.sqlx/query-00b88ec7fcf40bb18e0018b7c76f6e1df560ab1e8935564355236e90b6147d2f.json deleted file mode 100644 index 49a533897ce..00000000000 --- a/.sqlx/query-00b88ec7fcf40bb18e0018b7c76f6e1df560ab1e8935564355236e90b6147d2f.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE scheduler_witness_jobs_fri\n SET\n status = 'successful',\n updated_at = NOW(),\n time_taken = $1\n WHERE\n l1_batch_number = $2\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Time", - "Int8" - ] - }, - "nullable": [] - }, - "hash": "00b88ec7fcf40bb18e0018b7c76f6e1df560ab1e8935564355236e90b6147d2f" -} diff --git a/.sqlx/query-01ac5343beb09ec5bd45b39d560e57a83f37da8999849377dfad60b44989be39.json b/.sqlx/query-01ac5343beb09ec5bd45b39d560e57a83f37da8999849377dfad60b44989be39.json deleted file mode 100644 index 8ca4bb693c2..00000000000 --- a/.sqlx/query-01ac5343beb09ec5bd45b39d560e57a83f37da8999849377dfad60b44989be39.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE node_aggregation_witness_jobs_fri\n SET\n status = 'in_progress',\n attempts = attempts + 1,\n updated_at = NOW(),\n processing_started_at = NOW(),\n picked_by = $2\n WHERE\n id = (\n SELECT\n id\n FROM\n node_aggregation_witness_jobs_fri\n WHERE\n status = 'queued'\n AND protocol_version = ANY ($1)\n ORDER BY\n l1_batch_number ASC,\n depth ASC,\n id ASC\n LIMIT\n 1\n FOR UPDATE\n SKIP LOCKED\n )\n RETURNING\n node_aggregation_witness_jobs_fri.*\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Int8" - }, - { - "ordinal": 1, - "name": "l1_batch_number", - "type_info": "Int8" - }, - { - "ordinal": 2, - "name": "circuit_id", - "type_info": "Int2" - }, - { - "ordinal": 3, - "name": "depth", - "type_info": "Int4" - }, - { - "ordinal": 4, - "name": "status", - "type_info": "Text" - }, - { - "ordinal": 5, - "name": "attempts", - "type_info": "Int2" - }, - { - "ordinal": 6, - "name": "aggregations_url", - "type_info": "Text" - }, - { - "ordinal": 7, - "name": "processing_started_at", - "type_info": "Timestamp" - }, - { - "ordinal": 8, - "name": "time_taken", - "type_info": "Time" - }, - { - "ordinal": 9, - "name": "error", - "type_info": "Text" - }, - { - "ordinal": 10, - "name": "created_at", - "type_info": "Timestamp" - }, - { - "ordinal": 11, - "name": "updated_at", - "type_info": "Timestamp" - }, - { - "ordinal": 12, - "name": "number_of_dependent_jobs", - "type_info": "Int4" - }, - { - "ordinal": 13, - "name": "protocol_version", - "type_info": "Int4" - }, - { - "ordinal": 14, - "name": "picked_by", - "type_info": "Text" - } - ], - "parameters": { - "Left": [ - "Int4Array", - "Text" - ] - }, - "nullable": [ - false, - false, - false, - false, - false, - false, - true, - true, - true, - true, - false, - false, - true, - true, - true - ] - }, - "hash": "01ac5343beb09ec5bd45b39d560e57a83f37da8999849377dfad60b44989be39" -} diff --git a/.sqlx/query-0d13b8947b1bafa9e5bc6fdc70a986511265c541d81b1d21f0a751ae1399c626.json b/.sqlx/query-0d13b8947b1bafa9e5bc6fdc70a986511265c541d81b1d21f0a751ae1399c626.json deleted file mode 100644 index 8b5605f078a..00000000000 --- a/.sqlx/query-0d13b8947b1bafa9e5bc6fdc70a986511265c541d81b1d21f0a751ae1399c626.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE gpu_prover_queue_fri\n SET\n instance_status = 'reserved',\n updated_at = NOW(),\n processing_started_at = NOW()\n WHERE\n id IN (\n SELECT\n id\n FROM\n gpu_prover_queue_fri\n WHERE\n specialized_prover_group_id = $2\n AND zone = $3\n AND (\n instance_status = 'available'\n OR (\n instance_status = 'reserved'\n AND processing_started_at < NOW() - $1::INTERVAL\n )\n )\n ORDER BY\n updated_at ASC\n LIMIT\n 1\n FOR UPDATE\n SKIP LOCKED\n )\n RETURNING\n gpu_prover_queue_fri.*\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Int8" - }, - { - "ordinal": 1, - "name": "instance_host", - "type_info": "Inet" - }, - { - "ordinal": 2, - "name": "instance_port", - "type_info": "Int4" - }, - { - "ordinal": 3, - "name": "instance_status", - "type_info": "Text" - }, - { - "ordinal": 4, - "name": "specialized_prover_group_id", - "type_info": "Int2" - }, - { - "ordinal": 5, - "name": "zone", - "type_info": "Text" - }, - { - "ordinal": 6, - "name": "created_at", - "type_info": "Timestamp" - }, - { - "ordinal": 7, - "name": "updated_at", - "type_info": "Timestamp" - }, - { - "ordinal": 8, - "name": "processing_started_at", - "type_info": "Timestamp" - } - ], - "parameters": { - "Left": [ - "Interval", - "Int2", - "Text" - ] - }, - "nullable": [ - false, - false, - false, - false, - false, - true, - false, - false, - true - ] - }, - "hash": "0d13b8947b1bafa9e5bc6fdc70a986511265c541d81b1d21f0a751ae1399c626" -} diff --git a/.sqlx/query-12ab208f416e2875f89e558f0d4aff3a06b7a9c1866132d62e4449fa9436c7c4.json b/.sqlx/query-12ab208f416e2875f89e558f0d4aff3a06b7a9c1866132d62e4449fa9436c7c4.json deleted file mode 100644 index 5441bce3e01..00000000000 --- a/.sqlx/query-12ab208f416e2875f89e558f0d4aff3a06b7a9c1866132d62e4449fa9436c7c4.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE node_aggregation_witness_jobs_fri\n SET\n status = 'failed',\n error = $1,\n updated_at = NOW()\n WHERE\n id = $2\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text", - "Int8" - ] - }, - "nullable": [] - }, - "hash": "12ab208f416e2875f89e558f0d4aff3a06b7a9c1866132d62e4449fa9436c7c4" -} diff --git a/.sqlx/query-15858168fea6808c6d59d0e6d8f28a20420763a3a22899ad0e5f4b953b615a9e.json b/.sqlx/query-15858168fea6808c6d59d0e6d8f28a20420763a3a22899ad0e5f4b953b615a9e.json deleted file mode 100644 index ac0e433a919..00000000000 --- a/.sqlx/query-15858168fea6808c6d59d0e6d8f28a20420763a3a22899ad0e5f4b953b615a9e.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT\n id\n FROM\n prover_fri_protocol_versions\n WHERE\n recursion_circuits_set_vks_hash = $1\n AND recursion_leaf_level_vk_hash = $2\n AND recursion_node_level_vk_hash = $3\n AND recursion_scheduler_level_vk_hash = $4\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Int4" - } - ], - "parameters": { - "Left": [ - "Bytea", - "Bytea", - "Bytea", - "Bytea" - ] - }, - "nullable": [ - false - ] - }, - "hash": "15858168fea6808c6d59d0e6d8f28a20420763a3a22899ad0e5f4b953b615a9e" -} diff --git a/.sqlx/query-1bc6597117db032b87df33040d61610ffa7f169d560e79e89b99eedf681c6773.json b/.sqlx/query-1bc6597117db032b87df33040d61610ffa7f169d560e79e89b99eedf681c6773.json deleted file mode 100644 index 0351691c395..00000000000 --- a/.sqlx/query-1bc6597117db032b87df33040d61610ffa7f169d560e79e89b99eedf681c6773.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n INSERT INTO\n scheduler_witness_jobs_fri (\n l1_batch_number,\n scheduler_partial_input_blob_url,\n protocol_version,\n status,\n created_at,\n updated_at\n )\n VALUES\n ($1, $2, $3, 'waiting_for_proofs', NOW(), NOW())\n ON CONFLICT (l1_batch_number) DO\n UPDATE\n SET\n updated_at = NOW()\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Int8", - "Text", - "Int4" - ] - }, - "nullable": [] - }, - "hash": "1bc6597117db032b87df33040d61610ffa7f169d560e79e89b99eedf681c6773" -} diff --git a/.sqlx/query-204cfd593c62a5a1582215a5f0f4d3648b75bf01ff336bbd77d15f9aa5fd6443.json b/.sqlx/query-204cfd593c62a5a1582215a5f0f4d3648b75bf01ff336bbd77d15f9aa5fd6443.json deleted file mode 100644 index 3927e21728e..00000000000 --- a/.sqlx/query-204cfd593c62a5a1582215a5f0f4d3648b75bf01ff336bbd77d15f9aa5fd6443.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE scheduler_dependency_tracker_fri\n SET\n status = 'queuing'\n WHERE\n l1_batch_number IN (\n SELECT\n l1_batch_number\n FROM\n scheduler_dependency_tracker_fri\n WHERE\n status != 'queued'\n AND circuit_1_final_prover_job_id IS NOT NULL\n AND circuit_2_final_prover_job_id IS NOT NULL\n AND circuit_3_final_prover_job_id IS NOT NULL\n AND circuit_4_final_prover_job_id IS NOT NULL\n AND circuit_5_final_prover_job_id IS NOT NULL\n AND circuit_6_final_prover_job_id IS NOT NULL\n AND circuit_7_final_prover_job_id IS NOT NULL\n AND circuit_8_final_prover_job_id IS NOT NULL\n AND circuit_9_final_prover_job_id IS NOT NULL\n AND circuit_10_final_prover_job_id IS NOT NULL\n AND circuit_11_final_prover_job_id IS NOT NULL\n AND circuit_12_final_prover_job_id IS NOT NULL\n AND circuit_13_final_prover_job_id IS NOT NULL\n AND eip_4844_final_prover_job_id_0 IS NOT NULL\n AND eip_4844_final_prover_job_id_1 IS NOT NULL\n )\n RETURNING\n l1_batch_number;\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "l1_batch_number", - "type_info": "Int8" - } - ], - "parameters": { - "Left": [] - }, - "nullable": [ - false - ] - }, - "hash": "204cfd593c62a5a1582215a5f0f4d3648b75bf01ff336bbd77d15f9aa5fd6443" -} diff --git a/.sqlx/query-2b626262c8003817ee02978f77452554ccfb5b83f00efdc12bed0f60ef439785.json b/.sqlx/query-2b626262c8003817ee02978f77452554ccfb5b83f00efdc12bed0f60ef439785.json deleted file mode 100644 index db810604cd8..00000000000 --- a/.sqlx/query-2b626262c8003817ee02978f77452554ccfb5b83f00efdc12bed0f60ef439785.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT\n id\n FROM\n prover_jobs_fri\n WHERE\n l1_batch_number = $1\n AND circuit_id = $2\n AND aggregation_round = $3\n AND depth = $4\n AND status = 'successful'\n ORDER BY\n sequence_number ASC;\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Int8" - } - ], - "parameters": { - "Left": [ - "Int8", - "Int2", - "Int2", - "Int4" - ] - }, - "nullable": [ - false - ] - }, - "hash": "2b626262c8003817ee02978f77452554ccfb5b83f00efdc12bed0f60ef439785" -} diff --git a/.sqlx/query-2d31fcce581975a82d6156b52e35fb7a093b73727f75e0cb7db9cea480c95f5c.json b/.sqlx/query-2d31fcce581975a82d6156b52e35fb7a093b73727f75e0cb7db9cea480c95f5c.json deleted file mode 100644 index c4bcd6ea491..00000000000 --- a/.sqlx/query-2d31fcce581975a82d6156b52e35fb7a093b73727f75e0cb7db9cea480c95f5c.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE prover_jobs_fri\n SET\n status = 'queued',\n updated_at = NOW(),\n processing_started_at = NOW()\n WHERE\n id IN (\n SELECT\n id\n FROM\n prover_jobs_fri\n WHERE\n (\n status = 'in_progress'\n AND processing_started_at <= NOW() - $1::INTERVAL\n AND attempts < $2\n )\n OR (\n status = 'in_gpu_proof'\n AND processing_started_at <= NOW() - $1::INTERVAL\n AND attempts < $2\n )\n OR (\n status = 'failed'\n AND attempts < $2\n )\n FOR UPDATE\n SKIP LOCKED\n )\n RETURNING\n id,\n status,\n attempts\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Int8" - }, - { - "ordinal": 1, - "name": "status", - "type_info": "Text" - }, - { - "ordinal": 2, - "name": "attempts", - "type_info": "Int2" - } - ], - "parameters": { - "Left": [ - "Interval", - "Int2" - ] - }, - "nullable": [ - false, - false, - false - ] - }, - "hash": "2d31fcce581975a82d6156b52e35fb7a093b73727f75e0cb7db9cea480c95f5c" -} diff --git a/.sqlx/query-33d6be45b246523ad76f9ae512322ff6372f63ecadb504a329499b02e7d3550e.json b/.sqlx/query-33d6be45b246523ad76f9ae512322ff6372f63ecadb504a329499b02e7d3550e.json deleted file mode 100644 index 76483cd73d3..00000000000 --- a/.sqlx/query-33d6be45b246523ad76f9ae512322ff6372f63ecadb504a329499b02e7d3550e.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE leaf_aggregation_witness_jobs_fri\n SET\n status = 'queued'\n WHERE\n (l1_batch_number, circuit_id) IN (\n SELECT\n prover_jobs_fri.l1_batch_number,\n prover_jobs_fri.circuit_id\n FROM\n prover_jobs_fri\n JOIN leaf_aggregation_witness_jobs_fri lawj ON prover_jobs_fri.l1_batch_number = lawj.l1_batch_number\n AND prover_jobs_fri.circuit_id = lawj.circuit_id\n WHERE\n lawj.status = 'waiting_for_proofs'\n AND prover_jobs_fri.status = 'successful'\n AND prover_jobs_fri.aggregation_round = 0\n GROUP BY\n prover_jobs_fri.l1_batch_number,\n prover_jobs_fri.circuit_id,\n lawj.number_of_basic_circuits\n HAVING\n COUNT(*) = lawj.number_of_basic_circuits\n )\n RETURNING\n l1_batch_number,\n circuit_id;\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "l1_batch_number", - "type_info": "Int8" - }, - { - "ordinal": 1, - "name": "circuit_id", - "type_info": "Int2" - } - ], - "parameters": { - "Left": [] - }, - "nullable": [ - false, - false - ] - }, - "hash": "33d6be45b246523ad76f9ae512322ff6372f63ecadb504a329499b02e7d3550e" -} diff --git a/.sqlx/query-35b87a3b7db0af87c6a95e9fe7ef9044ae85b579c7051301b40bd5f94df1f530.json b/.sqlx/query-35b87a3b7db0af87c6a95e9fe7ef9044ae85b579c7051301b40bd5f94df1f530.json deleted file mode 100644 index a11e154326e..00000000000 --- a/.sqlx/query-35b87a3b7db0af87c6a95e9fe7ef9044ae85b579c7051301b40bd5f94df1f530.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE prover_jobs_fri\n SET\n status = 'failed',\n error = $1,\n updated_at = NOW()\n WHERE\n id = $2\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text", - "Int8" - ] - }, - "nullable": [] - }, - "hash": "35b87a3b7db0af87c6a95e9fe7ef9044ae85b579c7051301b40bd5f94df1f530" -} diff --git a/.sqlx/query-3c3abbf689fa64c6da7de69fd916769dbb04d3a61cf232892236c974660ffe64.json b/.sqlx/query-3c3abbf689fa64c6da7de69fd916769dbb04d3a61cf232892236c974660ffe64.json deleted file mode 100644 index 56d8b1fa995..00000000000 --- a/.sqlx/query-3c3abbf689fa64c6da7de69fd916769dbb04d3a61cf232892236c974660ffe64.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE scheduler_witness_jobs_fri\n SET\n status = 'queued',\n updated_at = NOW(),\n processing_started_at = NOW()\n WHERE\n (\n status = 'in_progress'\n AND processing_started_at <= NOW() - $1::INTERVAL\n AND attempts < $2\n )\n OR (\n status = 'failed'\n AND attempts < $2\n )\n RETURNING\n l1_batch_number,\n status,\n attempts\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "l1_batch_number", - "type_info": "Int8" - }, - { - "ordinal": 1, - "name": "status", - "type_info": "Text" - }, - { - "ordinal": 2, - "name": "attempts", - "type_info": "Int2" - } - ], - "parameters": { - "Left": [ - "Interval", - "Int2" - ] - }, - "nullable": [ - false, - false, - false - ] - }, - "hash": "3c3abbf689fa64c6da7de69fd916769dbb04d3a61cf232892236c974660ffe64" -} diff --git a/.sqlx/query-3ec365c5c81f4678a905ae5bbd48b87ead36f593488437c6f67da629ca81e4fa.json b/.sqlx/query-3ec365c5c81f4678a905ae5bbd48b87ead36f593488437c6f67da629ca81e4fa.json deleted file mode 100644 index 5815e65636c..00000000000 --- a/.sqlx/query-3ec365c5c81f4678a905ae5bbd48b87ead36f593488437c6f67da629ca81e4fa.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE scheduler_witness_jobs_fri\n SET\n status = 'queued'\n WHERE\n l1_batch_number = $1\n AND status != 'successful'\n AND status != 'in_progress'\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Int8" - ] - }, - "nullable": [] - }, - "hash": "3ec365c5c81f4678a905ae5bbd48b87ead36f593488437c6f67da629ca81e4fa" -} diff --git a/.sqlx/query-46c4696fff5a4b8cc5cb46b05645da82065836fe17687ffad04126a6a8b2b27c.json b/.sqlx/query-46c4696fff5a4b8cc5cb46b05645da82065836fe17687ffad04126a6a8b2b27c.json deleted file mode 100644 index 5ebb1951966..00000000000 --- a/.sqlx/query-46c4696fff5a4b8cc5cb46b05645da82065836fe17687ffad04126a6a8b2b27c.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE leaf_aggregation_witness_jobs_fri\n SET\n status = 'successful',\n updated_at = NOW(),\n time_taken = $1\n WHERE\n id = $2\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Time", - "Int8" - ] - }, - "nullable": [] - }, - "hash": "46c4696fff5a4b8cc5cb46b05645da82065836fe17687ffad04126a6a8b2b27c" -} diff --git a/.sqlx/query-4d263992ed6d5abbd7d3ca43af9d772d8801b0ae673b7173ae08a1fa6cbf67b2.json b/.sqlx/query-4d263992ed6d5abbd7d3ca43af9d772d8801b0ae673b7173ae08a1fa6cbf67b2.json deleted file mode 100644 index b0fb8d4be23..00000000000 --- a/.sqlx/query-4d263992ed6d5abbd7d3ca43af9d772d8801b0ae673b7173ae08a1fa6cbf67b2.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE prover_jobs_fri\n SET\n status = 'in_progress',\n attempts = attempts + 1,\n updated_at = NOW(),\n processing_started_at = NOW(),\n picked_by = $2\n WHERE\n id = (\n SELECT\n id\n FROM\n prover_jobs_fri\n WHERE\n status = 'queued'\n AND protocol_version = ANY ($1)\n ORDER BY\n aggregation_round DESC,\n l1_batch_number ASC,\n id ASC\n LIMIT\n 1\n FOR UPDATE\n SKIP LOCKED\n )\n RETURNING\n prover_jobs_fri.id,\n prover_jobs_fri.l1_batch_number,\n prover_jobs_fri.circuit_id,\n prover_jobs_fri.aggregation_round,\n prover_jobs_fri.sequence_number,\n prover_jobs_fri.depth,\n prover_jobs_fri.is_node_final_proof\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Int8" - }, - { - "ordinal": 1, - "name": "l1_batch_number", - "type_info": "Int8" - }, - { - "ordinal": 2, - "name": "circuit_id", - "type_info": "Int2" - }, - { - "ordinal": 3, - "name": "aggregation_round", - "type_info": "Int2" - }, - { - "ordinal": 4, - "name": "sequence_number", - "type_info": "Int4" - }, - { - "ordinal": 5, - "name": "depth", - "type_info": "Int4" - }, - { - "ordinal": 6, - "name": "is_node_final_proof", - "type_info": "Bool" - } - ], - "parameters": { - "Left": [ - "Int4Array", - "Text" - ] - }, - "nullable": [ - false, - false, - false, - false, - false, - false, - false - ] - }, - "hash": "4d263992ed6d5abbd7d3ca43af9d772d8801b0ae673b7173ae08a1fa6cbf67b2" -} diff --git a/.sqlx/query-4d92a133a36afd682a84fbfd75aafca34d61347e0e2e29fb07ca3d1b8b1f309c.json b/.sqlx/query-4d92a133a36afd682a84fbfd75aafca34d61347e0e2e29fb07ca3d1b8b1f309c.json deleted file mode 100644 index f7ae37f4b7b..00000000000 --- a/.sqlx/query-4d92a133a36afd682a84fbfd75aafca34d61347e0e2e29fb07ca3d1b8b1f309c.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n INSERT INTO\n prover_fri_protocol_versions (\n id,\n recursion_scheduler_level_vk_hash,\n recursion_node_level_vk_hash,\n recursion_leaf_level_vk_hash,\n recursion_circuits_set_vks_hash,\n created_at\n )\n VALUES\n ($1, $2, $3, $4, $5, NOW())\n ON CONFLICT (id) DO NOTHING\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Int4", - "Bytea", - "Bytea", - "Bytea", - "Bytea" - ] - }, - "nullable": [] - }, - "hash": "4d92a133a36afd682a84fbfd75aafca34d61347e0e2e29fb07ca3d1b8b1f309c" -} diff --git a/.sqlx/query-510bfea2346a8c63e74222e1159de366f88c20d00a8d928b6cf4caae0702b333.json b/.sqlx/query-510bfea2346a8c63e74222e1159de366f88c20d00a8d928b6cf4caae0702b333.json deleted file mode 100644 index ef8f865bf98..00000000000 --- a/.sqlx/query-510bfea2346a8c63e74222e1159de366f88c20d00a8d928b6cf4caae0702b333.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n INSERT INTO\n witness_inputs_fri (\n l1_batch_number,\n merkle_tree_paths_blob_url,\n protocol_version,\n eip_4844_blobs,\n status,\n created_at,\n updated_at\n )\n VALUES\n ($1, $2, $3, $4, 'queued', NOW(), NOW())\n ON CONFLICT (l1_batch_number) DO NOTHING\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Int8", - "Text", - "Int4", - "Bytea" - ] - }, - "nullable": [] - }, - "hash": "510bfea2346a8c63e74222e1159de366f88c20d00a8d928b6cf4caae0702b333" -} diff --git a/.sqlx/query-534822a226068cde83ad8c30b569a8f447824a5ab466bb6eea1710e8aeaa2c56.json b/.sqlx/query-534822a226068cde83ad8c30b569a8f447824a5ab466bb6eea1710e8aeaa2c56.json deleted file mode 100644 index a85b4895b45..00000000000 --- a/.sqlx/query-534822a226068cde83ad8c30b569a8f447824a5ab466bb6eea1710e8aeaa2c56.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE proof_compression_jobs_fri\n SET\n status = $1,\n updated_at = NOW()\n WHERE\n l1_batch_number = $2\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text", - "Int8" - ] - }, - "nullable": [] - }, - "hash": "534822a226068cde83ad8c30b569a8f447824a5ab466bb6eea1710e8aeaa2c56" -} diff --git a/.sqlx/query-53f78fdee39b113d2f55f6f951bd94f28b7b2b60d551d552a9b0bab1f1791e39.json b/.sqlx/query-53f78fdee39b113d2f55f6f951bd94f28b7b2b60d551d552a9b0bab1f1791e39.json deleted file mode 100644 index 15a10f7ce3c..00000000000 --- a/.sqlx/query-53f78fdee39b113d2f55f6f951bd94f28b7b2b60d551d552a9b0bab1f1791e39.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT\n attempts\n FROM\n leaf_aggregation_witness_jobs_fri\n WHERE\n id = $1\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "attempts", - "type_info": "Int2" - } - ], - "parameters": { - "Left": [ - "Int8" - ] - }, - "nullable": [ - false - ] - }, - "hash": "53f78fdee39b113d2f55f6f951bd94f28b7b2b60d551d552a9b0bab1f1791e39" -} diff --git a/.sqlx/query-5821f1446983260168cec366af26009503182c300877e74a8539f231050e6f85.json b/.sqlx/query-5821f1446983260168cec366af26009503182c300877e74a8539f231050e6f85.json deleted file mode 100644 index 86877a48dd4..00000000000 --- a/.sqlx/query-5821f1446983260168cec366af26009503182c300877e74a8539f231050e6f85.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE witness_inputs_fri\n SET\n status = $1,\n updated_at = NOW()\n WHERE\n l1_batch_number = $2\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text", - "Int8" - ] - }, - "nullable": [] - }, - "hash": "5821f1446983260168cec366af26009503182c300877e74a8539f231050e6f85" -} diff --git a/.sqlx/query-5e781f84ec41edd0941fa84de837effac442434c6e734d977e6682a7484abe7f.json b/.sqlx/query-5e781f84ec41edd0941fa84de837effac442434c6e734d977e6682a7484abe7f.json deleted file mode 100644 index 4958f38f535..00000000000 --- a/.sqlx/query-5e781f84ec41edd0941fa84de837effac442434c6e734d977e6682a7484abe7f.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE proof_compression_jobs_fri\n SET\n status = 'queued',\n updated_at = NOW(),\n processing_started_at = NOW()\n WHERE\n (\n status = 'in_progress'\n AND processing_started_at <= NOW() - $1::INTERVAL\n AND attempts < $2\n )\n OR (\n status = 'failed'\n AND attempts < $2\n )\n RETURNING\n l1_batch_number,\n status,\n attempts\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "l1_batch_number", - "type_info": "Int8" - }, - { - "ordinal": 1, - "name": "status", - "type_info": "Text" - }, - { - "ordinal": 2, - "name": "attempts", - "type_info": "Int2" - } - ], - "parameters": { - "Left": [ - "Interval", - "Int2" - ] - }, - "nullable": [ - false, - false, - false - ] - }, - "hash": "5e781f84ec41edd0941fa84de837effac442434c6e734d977e6682a7484abe7f" -} diff --git a/.sqlx/query-61b2b858d4636809c21838635aa52aeb5f06c26f68d131dd242f6ed68816c513.json b/.sqlx/query-61b2b858d4636809c21838635aa52aeb5f06c26f68d131dd242f6ed68816c513.json deleted file mode 100644 index c713af9a210..00000000000 --- a/.sqlx/query-61b2b858d4636809c21838635aa52aeb5f06c26f68d131dd242f6ed68816c513.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT\n l1_batch_number\n FROM\n prover_jobs_fri\n WHERE\n status <> 'skipped'\n AND status <> 'successful'\n AND aggregation_round = $1\n ORDER BY\n l1_batch_number ASC\n LIMIT\n 1\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "l1_batch_number", - "type_info": "Int8" - } - ], - "parameters": { - "Left": [ - "Int2" - ] - }, - "nullable": [ - false - ] - }, - "hash": "61b2b858d4636809c21838635aa52aeb5f06c26f68d131dd242f6ed68816c513" -} diff --git a/.sqlx/query-6ae2ed34230beae0e86c584e293e7ee767e4c98706246eb113498c0f817f5f38.json b/.sqlx/query-6ae2ed34230beae0e86c584e293e7ee767e4c98706246eb113498c0f817f5f38.json deleted file mode 100644 index 08dff439a7c..00000000000 --- a/.sqlx/query-6ae2ed34230beae0e86c584e293e7ee767e4c98706246eb113498c0f817f5f38.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n INSERT INTO\n gpu_prover_queue_fri (\n instance_host,\n instance_port,\n instance_status,\n specialized_prover_group_id,\n zone,\n created_at,\n updated_at\n )\n VALUES\n (CAST($1::TEXT AS inet), $2, 'available', $3, $4, NOW(), NOW())\n ON CONFLICT (instance_host, instance_port, zone) DO\n UPDATE\n SET\n instance_status = 'available',\n specialized_prover_group_id = $3,\n zone = $4,\n updated_at = NOW()\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text", - "Int4", - "Int2", - "Text" - ] - }, - "nullable": [] - }, - "hash": "6ae2ed34230beae0e86c584e293e7ee767e4c98706246eb113498c0f817f5f38" -} diff --git a/.sqlx/query-6cfc59d2fc039c706f30ae91b7d9d0c658093dede5eb61489205aa751ad5b8ec.json b/.sqlx/query-6cfc59d2fc039c706f30ae91b7d9d0c658093dede5eb61489205aa751ad5b8ec.json deleted file mode 100644 index 02b7862517f..00000000000 --- a/.sqlx/query-6cfc59d2fc039c706f30ae91b7d9d0c658093dede5eb61489205aa751ad5b8ec.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n WITH deleted AS (\n DELETE FROM prover_jobs_fri\n WHERE\n status NOT IN ('queued', 'in_progress', 'in_gpu_proof', 'failed')\n AND updated_at < NOW() - $1::INTERVAL\n RETURNING *\n ),\n inserted_count AS (\n INSERT INTO prover_jobs_fri_archive\n SELECT * FROM deleted\n )\n SELECT COUNT(*) FROM deleted\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "count", - "type_info": "Int8" - } - ], - "parameters": { - "Left": [ - "Interval" - ] - }, - "nullable": [ - null - ] - }, - "hash": "6cfc59d2fc039c706f30ae91b7d9d0c658093dede5eb61489205aa751ad5b8ec" -} diff --git a/.sqlx/query-75f6eaa518e7840374c4e44b0788bf92c7f2c55386c8208e3a82b30456abd5b4.json b/.sqlx/query-75f6eaa518e7840374c4e44b0788bf92c7f2c55386c8208e3a82b30456abd5b4.json deleted file mode 100644 index 74a6c2724b6..00000000000 --- a/.sqlx/query-75f6eaa518e7840374c4e44b0788bf92c7f2c55386c8208e3a82b30456abd5b4.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE witness_inputs_fri\n SET\n status = 'in_progress',\n attempts = attempts + 1,\n updated_at = NOW(),\n processing_started_at = NOW(),\n picked_by = $3\n WHERE\n l1_batch_number = (\n SELECT\n l1_batch_number\n FROM\n witness_inputs_fri\n WHERE\n l1_batch_number <= $1\n AND status = 'queued'\n AND protocol_version = ANY ($2)\n ORDER BY\n l1_batch_number ASC\n LIMIT\n 1\n FOR UPDATE\n SKIP LOCKED\n )\n RETURNING\n witness_inputs_fri.*\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "l1_batch_number", - "type_info": "Int8" - }, - { - "ordinal": 1, - "name": "merkle_tree_paths_blob_url", - "type_info": "Text" - }, - { - "ordinal": 2, - "name": "attempts", - "type_info": "Int2" - }, - { - "ordinal": 3, - "name": "status", - "type_info": "Text" - }, - { - "ordinal": 4, - "name": "error", - "type_info": "Text" - }, - { - "ordinal": 5, - "name": "created_at", - "type_info": "Timestamp" - }, - { - "ordinal": 6, - "name": "updated_at", - "type_info": "Timestamp" - }, - { - "ordinal": 7, - "name": "processing_started_at", - "type_info": "Timestamp" - }, - { - "ordinal": 8, - "name": "time_taken", - "type_info": "Time" - }, - { - "ordinal": 9, - "name": "is_blob_cleaned", - "type_info": "Bool" - }, - { - "ordinal": 10, - "name": "protocol_version", - "type_info": "Int4" - }, - { - "ordinal": 11, - "name": "picked_by", - "type_info": "Text" - }, - { - "ordinal": 12, - "name": "eip_4844_blobs", - "type_info": "Bytea" - } - ], - "parameters": { - "Left": [ - "Int8", - "Int4Array", - "Text" - ] - }, - "nullable": [ - false, - true, - false, - false, - true, - false, - false, - true, - true, - true, - true, - true, - true - ] - }, - "hash": "75f6eaa518e7840374c4e44b0788bf92c7f2c55386c8208e3a82b30456abd5b4" -} diff --git a/.sqlx/query-7a2145e2234a7896031bbc1ce82715e903f3b399886c2c73e838bd924fed6776.json b/.sqlx/query-7a2145e2234a7896031bbc1ce82715e903f3b399886c2c73e838bd924fed6776.json deleted file mode 100644 index 73a8c33695b..00000000000 --- a/.sqlx/query-7a2145e2234a7896031bbc1ce82715e903f3b399886c2c73e838bd924fed6776.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE node_aggregation_witness_jobs_fri\n SET\n aggregations_url = $1,\n number_of_dependent_jobs = $5,\n updated_at = NOW()\n WHERE\n l1_batch_number = $2\n AND circuit_id = $3\n AND depth = $4\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text", - "Int8", - "Int2", - "Int4", - "Int4" - ] - }, - "nullable": [] - }, - "hash": "7a2145e2234a7896031bbc1ce82715e903f3b399886c2c73e838bd924fed6776" -} diff --git a/.sqlx/query-7a8fffe8d4e3085e00c98f770d250d625f057acf1440b6550375ce5509a816a6.json b/.sqlx/query-7a8fffe8d4e3085e00c98f770d250d625f057acf1440b6550375ce5509a816a6.json deleted file mode 100644 index da78974f61a..00000000000 --- a/.sqlx/query-7a8fffe8d4e3085e00c98f770d250d625f057acf1440b6550375ce5509a816a6.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE leaf_aggregation_witness_jobs_fri\n SET\n status = 'in_progress',\n attempts = attempts + 1,\n updated_at = NOW(),\n processing_started_at = NOW(),\n picked_by = $2\n WHERE\n id = (\n SELECT\n id\n FROM\n leaf_aggregation_witness_jobs_fri\n WHERE\n status = 'queued'\n AND protocol_version = ANY ($1)\n ORDER BY\n l1_batch_number ASC,\n id ASC\n LIMIT\n 1\n FOR UPDATE\n SKIP LOCKED\n )\n RETURNING\n leaf_aggregation_witness_jobs_fri.*\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Int8" - }, - { - "ordinal": 1, - "name": "l1_batch_number", - "type_info": "Int8" - }, - { - "ordinal": 2, - "name": "circuit_id", - "type_info": "Int2" - }, - { - "ordinal": 3, - "name": "closed_form_inputs_blob_url", - "type_info": "Text" - }, - { - "ordinal": 4, - "name": "attempts", - "type_info": "Int2" - }, - { - "ordinal": 5, - "name": "status", - "type_info": "Text" - }, - { - "ordinal": 6, - "name": "error", - "type_info": "Text" - }, - { - "ordinal": 7, - "name": "created_at", - "type_info": "Timestamp" - }, - { - "ordinal": 8, - "name": "updated_at", - "type_info": "Timestamp" - }, - { - "ordinal": 9, - "name": "processing_started_at", - "type_info": "Timestamp" - }, - { - "ordinal": 10, - "name": "time_taken", - "type_info": "Time" - }, - { - "ordinal": 11, - "name": "is_blob_cleaned", - "type_info": "Bool" - }, - { - "ordinal": 12, - "name": "number_of_basic_circuits", - "type_info": "Int4" - }, - { - "ordinal": 13, - "name": "protocol_version", - "type_info": "Int4" - }, - { - "ordinal": 14, - "name": "picked_by", - "type_info": "Text" - } - ], - "parameters": { - "Left": [ - "Int4Array", - "Text" - ] - }, - "nullable": [ - false, - false, - false, - true, - false, - false, - true, - false, - false, - true, - true, - true, - true, - true, - true - ] - }, - "hash": "7a8fffe8d4e3085e00c98f770d250d625f057acf1440b6550375ce5509a816a6" -} diff --git a/.sqlx/query-806b82a9effd885ba537a2a1c7d7227120a8279db1875d26ccae5ee0785f46a9.json b/.sqlx/query-806b82a9effd885ba537a2a1c7d7227120a8279db1875d26ccae5ee0785f46a9.json deleted file mode 100644 index c8e8a7aa603..00000000000 --- a/.sqlx/query-806b82a9effd885ba537a2a1c7d7227120a8279db1875d26ccae5ee0785f46a9.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT\n attempts\n FROM\n node_aggregation_witness_jobs_fri\n WHERE\n id = $1\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "attempts", - "type_info": "Int2" - } - ], - "parameters": { - "Left": [ - "Int8" - ] - }, - "nullable": [ - false - ] - }, - "hash": "806b82a9effd885ba537a2a1c7d7227120a8279db1875d26ccae5ee0785f46a9" -} diff --git a/.sqlx/query-8182690d0326b820d23fba49d391578db18c29cdca85b8b6aad86fe2a9bf6bbe.json b/.sqlx/query-8182690d0326b820d23fba49d391578db18c29cdca85b8b6aad86fe2a9bf6bbe.json deleted file mode 100644 index fac64c1ea3f..00000000000 --- a/.sqlx/query-8182690d0326b820d23fba49d391578db18c29cdca85b8b6aad86fe2a9bf6bbe.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE node_aggregation_witness_jobs_fri\n SET\n status = 'queued'\n WHERE\n (l1_batch_number, circuit_id, depth) IN (\n SELECT\n prover_jobs_fri.l1_batch_number,\n prover_jobs_fri.circuit_id,\n prover_jobs_fri.depth\n FROM\n prover_jobs_fri\n JOIN node_aggregation_witness_jobs_fri nawj ON prover_jobs_fri.l1_batch_number = nawj.l1_batch_number\n AND prover_jobs_fri.circuit_id = nawj.circuit_id\n AND prover_jobs_fri.depth = nawj.depth\n WHERE\n nawj.status = 'waiting_for_proofs'\n AND prover_jobs_fri.status = 'successful'\n AND prover_jobs_fri.aggregation_round = 2\n GROUP BY\n prover_jobs_fri.l1_batch_number,\n prover_jobs_fri.circuit_id,\n prover_jobs_fri.depth,\n nawj.number_of_dependent_jobs\n HAVING\n COUNT(*) = nawj.number_of_dependent_jobs\n )\n RETURNING\n l1_batch_number,\n circuit_id,\n depth;\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "l1_batch_number", - "type_info": "Int8" - }, - { - "ordinal": 1, - "name": "circuit_id", - "type_info": "Int2" - }, - { - "ordinal": 2, - "name": "depth", - "type_info": "Int4" - } - ], - "parameters": { - "Left": [] - }, - "nullable": [ - false, - false, - false - ] - }, - "hash": "8182690d0326b820d23fba49d391578db18c29cdca85b8b6aad86fe2a9bf6bbe" -} diff --git a/.sqlx/query-8f5e89ccadd4ea1da7bfe9793a1cbb724af0f0216433a70f19d784e3f2afbc9f.json b/.sqlx/query-8f5e89ccadd4ea1da7bfe9793a1cbb724af0f0216433a70f19d784e3f2afbc9f.json deleted file mode 100644 index cf7822e8ec8..00000000000 --- a/.sqlx/query-8f5e89ccadd4ea1da7bfe9793a1cbb724af0f0216433a70f19d784e3f2afbc9f.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT\n protocol_version\n FROM\n witness_inputs_fri\n WHERE\n l1_batch_number = $1\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "protocol_version", - "type_info": "Int4" - } - ], - "parameters": { - "Left": [ - "Int8" - ] - }, - "nullable": [ - true - ] - }, - "hash": "8f5e89ccadd4ea1da7bfe9793a1cbb724af0f0216433a70f19d784e3f2afbc9f" -} diff --git a/.sqlx/query-9ef2f43e6201cc00a0e1425a666a36532fee1450733849852dfd20e18ded1f03.json b/.sqlx/query-9ef2f43e6201cc00a0e1425a666a36532fee1450733849852dfd20e18ded1f03.json deleted file mode 100644 index fd770071cf8..00000000000 --- a/.sqlx/query-9ef2f43e6201cc00a0e1425a666a36532fee1450733849852dfd20e18ded1f03.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE scheduler_witness_jobs_fri\n SET\n status = 'failed',\n error = $1,\n updated_at = NOW()\n WHERE\n l1_batch_number = $2\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text", - "Int8" - ] - }, - "nullable": [] - }, - "hash": "9ef2f43e6201cc00a0e1425a666a36532fee1450733849852dfd20e18ded1f03" -} diff --git a/.sqlx/query-a0e2b2c034cc5f668f0b3d43b94d2e2326d7ace079b095def52723a45b65d3f3.json b/.sqlx/query-a0e2b2c034cc5f668f0b3d43b94d2e2326d7ace079b095def52723a45b65d3f3.json deleted file mode 100644 index 7dc19564f7f..00000000000 --- a/.sqlx/query-a0e2b2c034cc5f668f0b3d43b94d2e2326d7ace079b095def52723a45b65d3f3.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE witness_inputs_fri\n SET\n status = 'failed',\n error = $1,\n updated_at = NOW()\n WHERE\n l1_batch_number = $2\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text", - "Int8" - ] - }, - "nullable": [] - }, - "hash": "a0e2b2c034cc5f668f0b3d43b94d2e2326d7ace079b095def52723a45b65d3f3" -} diff --git a/.sqlx/query-a4861c931e84d897c27f666de1c5ca679a0459a012899a373c67393d30d12601.json b/.sqlx/query-a4861c931e84d897c27f666de1c5ca679a0459a012899a373c67393d30d12601.json deleted file mode 100644 index 104a7fb2556..00000000000 --- a/.sqlx/query-a4861c931e84d897c27f666de1c5ca679a0459a012899a373c67393d30d12601.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE scheduler_dependency_tracker_fri\n SET\n status = 'queued'\n WHERE\n l1_batch_number = ANY ($1)\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Int8Array" - ] - }, - "nullable": [] - }, - "hash": "a4861c931e84d897c27f666de1c5ca679a0459a012899a373c67393d30d12601" -} diff --git a/.sqlx/query-a84ee70bec8c03bd51e1c6bad44c9a64904026506914abae2946e5d353d6a604.json b/.sqlx/query-a84ee70bec8c03bd51e1c6bad44c9a64904026506914abae2946e5d353d6a604.json deleted file mode 100644 index 3275df2a3d5..00000000000 --- a/.sqlx/query-a84ee70bec8c03bd51e1c6bad44c9a64904026506914abae2946e5d353d6a604.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT\n id\n FROM\n prover_jobs_fri\n WHERE\n l1_batch_number = $1\n AND status = 'successful'\n AND aggregation_round = $2\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Int8" - } - ], - "parameters": { - "Left": [ - "Int8", - "Int2" - ] - }, - "nullable": [ - false - ] - }, - "hash": "a84ee70bec8c03bd51e1c6bad44c9a64904026506914abae2946e5d353d6a604" -} diff --git a/.sqlx/query-aa91697157517322b0dbb53dca99f41220c51f58a03c61d6b7789eab0504e320.json b/.sqlx/query-aa91697157517322b0dbb53dca99f41220c51f58a03c61d6b7789eab0504e320.json deleted file mode 100644 index 27d48231728..00000000000 --- a/.sqlx/query-aa91697157517322b0dbb53dca99f41220c51f58a03c61d6b7789eab0504e320.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE node_aggregation_witness_jobs_fri\n SET\n status = 'queued'\n WHERE\n (l1_batch_number, circuit_id, depth) IN (\n SELECT\n prover_jobs_fri.l1_batch_number,\n prover_jobs_fri.circuit_id,\n prover_jobs_fri.depth\n FROM\n prover_jobs_fri\n JOIN node_aggregation_witness_jobs_fri nawj ON prover_jobs_fri.l1_batch_number = nawj.l1_batch_number\n AND prover_jobs_fri.circuit_id = nawj.circuit_id\n AND prover_jobs_fri.depth = nawj.depth\n WHERE\n nawj.status = 'waiting_for_proofs'\n AND prover_jobs_fri.status = 'successful'\n AND prover_jobs_fri.aggregation_round = 1\n AND prover_jobs_fri.depth = 0\n GROUP BY\n prover_jobs_fri.l1_batch_number,\n prover_jobs_fri.circuit_id,\n prover_jobs_fri.depth,\n nawj.number_of_dependent_jobs\n HAVING\n COUNT(*) = nawj.number_of_dependent_jobs\n )\n RETURNING\n l1_batch_number,\n circuit_id,\n depth;\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "l1_batch_number", - "type_info": "Int8" - }, - { - "ordinal": 1, - "name": "circuit_id", - "type_info": "Int2" - }, - { - "ordinal": 2, - "name": "depth", - "type_info": "Int4" - } - ], - "parameters": { - "Left": [] - }, - "nullable": [ - false, - false, - false - ] - }, - "hash": "aa91697157517322b0dbb53dca99f41220c51f58a03c61d6b7789eab0504e320" -} diff --git a/.sqlx/query-aaf4fb97c95a5290fb1620cd868477dcf21955e0921ba648ba2e751dbfc3cb45.json b/.sqlx/query-aaf4fb97c95a5290fb1620cd868477dcf21955e0921ba648ba2e751dbfc3cb45.json deleted file mode 100644 index 614b853c625..00000000000 --- a/.sqlx/query-aaf4fb97c95a5290fb1620cd868477dcf21955e0921ba648ba2e751dbfc3cb45.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT\n COUNT(*) AS \"count!\",\n circuit_id AS \"circuit_id!\",\n aggregation_round AS \"aggregation_round!\",\n status AS \"status!\"\n FROM\n prover_jobs_fri\n WHERE\n status <> 'skipped'\n AND status <> 'successful'\n GROUP BY\n circuit_id,\n aggregation_round,\n status\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "count!", - "type_info": "Int8" - }, - { - "ordinal": 1, - "name": "circuit_id!", - "type_info": "Int2" - }, - { - "ordinal": 2, - "name": "aggregation_round!", - "type_info": "Int2" - }, - { - "ordinal": 3, - "name": "status!", - "type_info": "Text" - } - ], - "parameters": { - "Left": [] - }, - "nullable": [ - null, - false, - false, - false - ] - }, - "hash": "aaf4fb97c95a5290fb1620cd868477dcf21955e0921ba648ba2e751dbfc3cb45" -} diff --git a/.sqlx/query-af72fabd90eb43fb315f46d7fe9f724216807ffd481cd6f7f19968e42e52b284.json b/.sqlx/query-af72fabd90eb43fb315f46d7fe9f724216807ffd481cd6f7f19968e42e52b284.json deleted file mode 100644 index 6674fab59ea..00000000000 --- a/.sqlx/query-af72fabd90eb43fb315f46d7fe9f724216807ffd481cd6f7f19968e42e52b284.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE prover_jobs_fri\n SET\n status = 'sent_to_server',\n updated_at = NOW()\n WHERE\n l1_batch_number = $1\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Int8" - ] - }, - "nullable": [] - }, - "hash": "af72fabd90eb43fb315f46d7fe9f724216807ffd481cd6f7f19968e42e52b284" -} diff --git a/.sqlx/query-afc24bd1407dba82cd3dc9e7ee71ac4ab2d73bda6022700aeb0a630a2563a4b4.json b/.sqlx/query-afc24bd1407dba82cd3dc9e7ee71ac4ab2d73bda6022700aeb0a630a2563a4b4.json deleted file mode 100644 index ede2995ff55..00000000000 --- a/.sqlx/query-afc24bd1407dba82cd3dc9e7ee71ac4ab2d73bda6022700aeb0a630a2563a4b4.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE leaf_aggregation_witness_jobs_fri\n SET\n status = 'failed',\n error = $1,\n updated_at = NOW()\n WHERE\n id = $2\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text", - "Int8" - ] - }, - "nullable": [] - }, - "hash": "afc24bd1407dba82cd3dc9e7ee71ac4ab2d73bda6022700aeb0a630a2563a4b4" -} diff --git a/.sqlx/query-b17c71983da060f08616e001b42f8dcbcb014b4f808c6232abd9a83354c995ac.json b/.sqlx/query-b17c71983da060f08616e001b42f8dcbcb014b4f808c6232abd9a83354c995ac.json deleted file mode 100644 index 82209e00b65..00000000000 --- a/.sqlx/query-b17c71983da060f08616e001b42f8dcbcb014b4f808c6232abd9a83354c995ac.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE node_aggregation_witness_jobs_fri\n SET\n status = 'queued',\n updated_at = NOW(),\n processing_started_at = NOW()\n WHERE\n (\n status = 'in_progress'\n AND processing_started_at <= NOW() - $1::INTERVAL\n AND attempts < $2\n )\n OR (\n status = 'failed'\n AND attempts < $2\n )\n RETURNING\n id,\n status,\n attempts\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Int8" - }, - { - "ordinal": 1, - "name": "status", - "type_info": "Text" - }, - { - "ordinal": 2, - "name": "attempts", - "type_info": "Int2" - } - ], - "parameters": { - "Left": [ - "Interval", - "Int2" - ] - }, - "nullable": [ - false, - false, - false - ] - }, - "hash": "b17c71983da060f08616e001b42f8dcbcb014b4f808c6232abd9a83354c995ac" -} diff --git a/.sqlx/query-b23ddb16513d69331056b94d466663a9c5ea62ea7c99a77941eb8f05d4454125.json b/.sqlx/query-b23ddb16513d69331056b94d466663a9c5ea62ea7c99a77941eb8f05d4454125.json deleted file mode 100644 index fd8600d59aa..00000000000 --- a/.sqlx/query-b23ddb16513d69331056b94d466663a9c5ea62ea7c99a77941eb8f05d4454125.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n INSERT INTO\n leaf_aggregation_witness_jobs_fri (\n l1_batch_number,\n circuit_id,\n closed_form_inputs_blob_url,\n number_of_basic_circuits,\n protocol_version,\n status,\n created_at,\n updated_at\n )\n VALUES\n ($1, $2, $3, $4, $5, 'waiting_for_proofs', NOW(), NOW())\n ON CONFLICT (l1_batch_number, circuit_id) DO\n UPDATE\n SET\n updated_at = NOW()\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Int8", - "Int2", - "Text", - "Int4", - "Int4" - ] - }, - "nullable": [] - }, - "hash": "b23ddb16513d69331056b94d466663a9c5ea62ea7c99a77941eb8f05d4454125" -} diff --git a/.sqlx/query-b321c5ba22358cbb1fd9c627f1e7b56187686173327498ac75424593547c19c5.json b/.sqlx/query-b321c5ba22358cbb1fd9c627f1e7b56187686173327498ac75424593547c19c5.json deleted file mode 100644 index bdd22927d38..00000000000 --- a/.sqlx/query-b321c5ba22358cbb1fd9c627f1e7b56187686173327498ac75424593547c19c5.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT\n attempts\n FROM\n scheduler_witness_jobs_fri\n WHERE\n l1_batch_number = $1\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "attempts", - "type_info": "Int2" - } - ], - "parameters": { - "Left": [ - "Int8" - ] - }, - "nullable": [ - false - ] - }, - "hash": "b321c5ba22358cbb1fd9c627f1e7b56187686173327498ac75424593547c19c5" -} diff --git a/.sqlx/query-b367ecb1ebee86ec598c4079591f8c12deeca6b8843fe3869cc2b02b30da5de6.json b/.sqlx/query-b367ecb1ebee86ec598c4079591f8c12deeca6b8843fe3869cc2b02b30da5de6.json deleted file mode 100644 index 724c01ea6c5..00000000000 --- a/.sqlx/query-b367ecb1ebee86ec598c4079591f8c12deeca6b8843fe3869cc2b02b30da5de6.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT\n attempts\n FROM\n proof_compression_jobs_fri\n WHERE\n l1_batch_number = $1\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "attempts", - "type_info": "Int2" - } - ], - "parameters": { - "Left": [ - "Int8" - ] - }, - "nullable": [ - false - ] - }, - "hash": "b367ecb1ebee86ec598c4079591f8c12deeca6b8843fe3869cc2b02b30da5de6" -} diff --git a/.sqlx/query-b3d71dbe14bcd94131b29b64dcb49b6370c211a7fc24ad03a5f0e327f9d18040.json b/.sqlx/query-b3d71dbe14bcd94131b29b64dcb49b6370c211a7fc24ad03a5f0e327f9d18040.json deleted file mode 100644 index 0ca284a3f57..00000000000 --- a/.sqlx/query-b3d71dbe14bcd94131b29b64dcb49b6370c211a7fc24ad03a5f0e327f9d18040.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT\n attempts\n FROM\n witness_inputs_fri\n WHERE\n l1_batch_number = $1\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "attempts", - "type_info": "Int2" - } - ], - "parameters": { - "Left": [ - "Int8" - ] - }, - "nullable": [ - false - ] - }, - "hash": "b3d71dbe14bcd94131b29b64dcb49b6370c211a7fc24ad03a5f0e327f9d18040" -} diff --git a/.sqlx/query-b4304b9afb9f838eee1fe95af5fd964d4bb39b9dcd18fb03bc11ce2fb32b7fb3.json b/.sqlx/query-b4304b9afb9f838eee1fe95af5fd964d4bb39b9dcd18fb03bc11ce2fb32b7fb3.json deleted file mode 100644 index fa6f91edfb3..00000000000 --- a/.sqlx/query-b4304b9afb9f838eee1fe95af5fd964d4bb39b9dcd18fb03bc11ce2fb32b7fb3.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE scheduler_witness_jobs_fri\n SET\n status = 'in_progress',\n attempts = attempts + 1,\n updated_at = NOW(),\n processing_started_at = NOW(),\n picked_by = $2\n WHERE\n l1_batch_number = (\n SELECT\n l1_batch_number\n FROM\n scheduler_witness_jobs_fri\n WHERE\n status = 'queued'\n AND protocol_version = ANY ($1)\n ORDER BY\n l1_batch_number ASC\n LIMIT\n 1\n FOR UPDATE\n SKIP LOCKED\n )\n RETURNING\n scheduler_witness_jobs_fri.*\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "l1_batch_number", - "type_info": "Int8" - }, - { - "ordinal": 1, - "name": "scheduler_partial_input_blob_url", - "type_info": "Text" - }, - { - "ordinal": 2, - "name": "status", - "type_info": "Text" - }, - { - "ordinal": 3, - "name": "processing_started_at", - "type_info": "Timestamp" - }, - { - "ordinal": 4, - "name": "time_taken", - "type_info": "Time" - }, - { - "ordinal": 5, - "name": "error", - "type_info": "Text" - }, - { - "ordinal": 6, - "name": "created_at", - "type_info": "Timestamp" - }, - { - "ordinal": 7, - "name": "updated_at", - "type_info": "Timestamp" - }, - { - "ordinal": 8, - "name": "attempts", - "type_info": "Int2" - }, - { - "ordinal": 9, - "name": "protocol_version", - "type_info": "Int4" - }, - { - "ordinal": 10, - "name": "picked_by", - "type_info": "Text" - } - ], - "parameters": { - "Left": [ - "Int4Array", - "Text" - ] - }, - "nullable": [ - false, - false, - false, - true, - true, - true, - false, - false, - false, - true, - true - ] - }, - "hash": "b4304b9afb9f838eee1fe95af5fd964d4bb39b9dcd18fb03bc11ce2fb32b7fb3" -} diff --git a/.sqlx/query-b4794e6a0c2366d5d95ab373c310103263af3ff5cb6c9dc5df59d3cd2a5e56b4.json b/.sqlx/query-b4794e6a0c2366d5d95ab373c310103263af3ff5cb6c9dc5df59d3cd2a5e56b4.json deleted file mode 100644 index 14b4115b30e..00000000000 --- a/.sqlx/query-b4794e6a0c2366d5d95ab373c310103263af3ff5cb6c9dc5df59d3cd2a5e56b4.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE gpu_prover_queue_fri\n SET\n instance_status = $1,\n updated_at = NOW()\n WHERE\n instance_host = $2::TEXT::inet\n AND instance_port = $3\n AND zone = $4\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text", - "Text", - "Int4", - "Text" - ] - }, - "nullable": [] - }, - "hash": "b4794e6a0c2366d5d95ab373c310103263af3ff5cb6c9dc5df59d3cd2a5e56b4" -} diff --git a/.sqlx/query-bfb80956a18eabf266f5b5a9d62912d57f8eb2a38bdb7884fc812a2897a3a660.json b/.sqlx/query-bfb80956a18eabf266f5b5a9d62912d57f8eb2a38bdb7884fc812a2897a3a660.json deleted file mode 100644 index 550cb5ec743..00000000000 --- a/.sqlx/query-bfb80956a18eabf266f5b5a9d62912d57f8eb2a38bdb7884fc812a2897a3a660.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE witness_inputs_fri\n SET\n status = 'queued',\n updated_at = NOW(),\n processing_started_at = NOW()\n WHERE\n (\n status = 'in_progress'\n AND processing_started_at <= NOW() - $1::INTERVAL\n AND attempts < $2\n )\n OR (\n status = 'in_gpu_proof'\n AND processing_started_at <= NOW() - $1::INTERVAL\n AND attempts < $2\n )\n OR (\n status = 'failed'\n AND attempts < $2\n )\n RETURNING\n l1_batch_number,\n status,\n attempts\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "l1_batch_number", - "type_info": "Int8" - }, - { - "ordinal": 1, - "name": "status", - "type_info": "Text" - }, - { - "ordinal": 2, - "name": "attempts", - "type_info": "Int2" - } - ], - "parameters": { - "Left": [ - "Interval", - "Int2" - ] - }, - "nullable": [ - false, - false, - false - ] - }, - "hash": "bfb80956a18eabf266f5b5a9d62912d57f8eb2a38bdb7884fc812a2897a3a660" -} diff --git a/.sqlx/query-c10cf20825de4d24300c7ec50d4a653852f7e43670076eb2ebcd49542a870539.json b/.sqlx/query-c10cf20825de4d24300c7ec50d4a653852f7e43670076eb2ebcd49542a870539.json deleted file mode 100644 index b341120ad7f..00000000000 --- a/.sqlx/query-c10cf20825de4d24300c7ec50d4a653852f7e43670076eb2ebcd49542a870539.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n INSERT INTO\n scheduler_dependency_tracker_fri (l1_batch_number, status, created_at, updated_at)\n VALUES\n ($1, 'waiting_for_proofs', NOW(), NOW())\n ON CONFLICT (l1_batch_number) DO\n UPDATE\n SET\n updated_at = NOW()\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Int8" - ] - }, - "nullable": [] - }, - "hash": "c10cf20825de4d24300c7ec50d4a653852f7e43670076eb2ebcd49542a870539" -} diff --git a/.sqlx/query-c23d5ff919ade5898c6a912780ae899e360650afccb34f5cc301b5cbac4a3d36.json b/.sqlx/query-c23d5ff919ade5898c6a912780ae899e360650afccb34f5cc301b5cbac4a3d36.json deleted file mode 100644 index 8922816c7e1..00000000000 --- a/.sqlx/query-c23d5ff919ade5898c6a912780ae899e360650afccb34f5cc301b5cbac4a3d36.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE prover_jobs_fri\n SET\n status = $1,\n updated_at = NOW()\n WHERE\n id = $2\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text", - "Int8" - ] - }, - "nullable": [] - }, - "hash": "c23d5ff919ade5898c6a912780ae899e360650afccb34f5cc301b5cbac4a3d36" -} diff --git a/.sqlx/query-c41312e01aa66897552e8be9acc8d43c31ec7441a7f6c5040e120810ebbb72f7.json b/.sqlx/query-c41312e01aa66897552e8be9acc8d43c31ec7441a7f6c5040e120810ebbb72f7.json deleted file mode 100644 index 4c24afad4f4..00000000000 --- a/.sqlx/query-c41312e01aa66897552e8be9acc8d43c31ec7441a7f6c5040e120810ebbb72f7.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n INSERT INTO\n prover_jobs_fri (\n l1_batch_number,\n circuit_id,\n circuit_blob_url,\n aggregation_round,\n sequence_number,\n depth,\n is_node_final_proof,\n protocol_version,\n status,\n created_at,\n updated_at\n )\n VALUES\n ($1, $2, $3, $4, $5, $6, $7, $8, 'queued', NOW(), NOW())\n ON CONFLICT (l1_batch_number, aggregation_round, circuit_id, depth, sequence_number) DO\n UPDATE\n SET\n updated_at = NOW()\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Int8", - "Int2", - "Text", - "Int2", - "Int4", - "Int4", - "Bool", - "Int4" - ] - }, - "nullable": [] - }, - "hash": "c41312e01aa66897552e8be9acc8d43c31ec7441a7f6c5040e120810ebbb72f7" -} diff --git a/.sqlx/query-c706a49ff54f6b424e24d061fe7ac429aac3c030f7e226a1264243d8cdae038d.json b/.sqlx/query-c706a49ff54f6b424e24d061fe7ac429aac3c030f7e226a1264243d8cdae038d.json deleted file mode 100644 index 95ae04bed50..00000000000 --- a/.sqlx/query-c706a49ff54f6b424e24d061fe7ac429aac3c030f7e226a1264243d8cdae038d.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE proof_compression_jobs_fri\n SET\n status = $1,\n updated_at = NOW(),\n time_taken = $2,\n l1_proof_blob_url = $3\n WHERE\n l1_batch_number = $4\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text", - "Time", - "Text", - "Int8" - ] - }, - "nullable": [] - }, - "hash": "c706a49ff54f6b424e24d061fe7ac429aac3c030f7e226a1264243d8cdae038d" -} diff --git a/.sqlx/query-ca9d06141265b8524ee28c55569cb21a635037d89ce24dd3ad58ffaadb59594a.json b/.sqlx/query-ca9d06141265b8524ee28c55569cb21a635037d89ce24dd3ad58ffaadb59594a.json deleted file mode 100644 index ff49f615ab5..00000000000 --- a/.sqlx/query-ca9d06141265b8524ee28c55569cb21a635037d89ce24dd3ad58ffaadb59594a.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT\n l1_batch_number\n FROM\n proof_compression_jobs_fri\n WHERE\n status <> 'successful'\n ORDER BY\n l1_batch_number ASC\n LIMIT\n 1\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "l1_batch_number", - "type_info": "Int8" - } - ], - "parameters": { - "Left": [] - }, - "nullable": [ - false - ] - }, - "hash": "ca9d06141265b8524ee28c55569cb21a635037d89ce24dd3ad58ffaadb59594a" -} diff --git a/.sqlx/query-ce5779092feb8a3d3e2c5e395783e67f08f2ead5f55bfb6594e50346bf9cf2ef.json b/.sqlx/query-ce5779092feb8a3d3e2c5e395783e67f08f2ead5f55bfb6594e50346bf9cf2ef.json deleted file mode 100644 index 6f83fd55064..00000000000 --- a/.sqlx/query-ce5779092feb8a3d3e2c5e395783e67f08f2ead5f55bfb6594e50346bf9cf2ef.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT\n MIN(l1_batch_number) AS \"l1_batch_number!\",\n circuit_id,\n aggregation_round\n FROM\n prover_jobs_fri\n WHERE\n status IN ('queued', 'in_gpu_proof', 'in_progress', 'failed')\n GROUP BY\n circuit_id,\n aggregation_round\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "l1_batch_number!", - "type_info": "Int8" - }, - { - "ordinal": 1, - "name": "circuit_id", - "type_info": "Int2" - }, - { - "ordinal": 2, - "name": "aggregation_round", - "type_info": "Int2" - } - ], - "parameters": { - "Left": [] - }, - "nullable": [ - null, - false, - false - ] - }, - "hash": "ce5779092feb8a3d3e2c5e395783e67f08f2ead5f55bfb6594e50346bf9cf2ef" -} diff --git a/.sqlx/query-d7e8eabd7b43ff62838fbc847e4813d2b2d411bd5faf8306cd48db500532b711.json b/.sqlx/query-d7e8eabd7b43ff62838fbc847e4813d2b2d411bd5faf8306cd48db500532b711.json deleted file mode 100644 index a049d76c24b..00000000000 --- a/.sqlx/query-d7e8eabd7b43ff62838fbc847e4813d2b2d411bd5faf8306cd48db500532b711.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT\n l1_batch_number,\n status\n FROM\n proof_compression_jobs_fri\n WHERE\n l1_batch_number = (\n SELECT\n MIN(l1_batch_number)\n FROM\n proof_compression_jobs_fri\n WHERE\n status = $1\n OR status = $2\n )\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "l1_batch_number", - "type_info": "Int8" - }, - { - "ordinal": 1, - "name": "status", - "type_info": "Text" - } - ], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [ - false, - false - ] - }, - "hash": "d7e8eabd7b43ff62838fbc847e4813d2b2d411bd5faf8306cd48db500532b711" -} diff --git a/.sqlx/query-d8e3ee346375e4b6a8b2c73a3827e88abd0f8164c2413dc83c91c29665ca645e.json b/.sqlx/query-d8e3ee346375e4b6a8b2c73a3827e88abd0f8164c2413dc83c91c29665ca645e.json deleted file mode 100644 index ae7bcea1882..00000000000 --- a/.sqlx/query-d8e3ee346375e4b6a8b2c73a3827e88abd0f8164c2413dc83c91c29665ca645e.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE leaf_aggregation_witness_jobs_fri\n SET\n status = 'queued',\n updated_at = NOW(),\n processing_started_at = NOW()\n WHERE\n (\n status = 'in_progress'\n AND processing_started_at <= NOW() - $1::INTERVAL\n AND attempts < $2\n )\n OR (\n status = 'failed'\n AND attempts < $2\n )\n RETURNING\n id,\n status,\n attempts\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Int8" - }, - { - "ordinal": 1, - "name": "status", - "type_info": "Text" - }, - { - "ordinal": 2, - "name": "attempts", - "type_info": "Int2" - } - ], - "parameters": { - "Left": [ - "Interval", - "Int2" - ] - }, - "nullable": [ - false, - false, - false - ] - }, - "hash": "d8e3ee346375e4b6a8b2c73a3827e88abd0f8164c2413dc83c91c29665ca645e" -} diff --git a/.sqlx/query-db3e74f0e83ffbf84a6d61e560f2060fbea775dc185f639139fbfd23e4d5f3c6.json b/.sqlx/query-db3e74f0e83ffbf84a6d61e560f2060fbea775dc185f639139fbfd23e4d5f3c6.json deleted file mode 100644 index d9f7527dfa0..00000000000 --- a/.sqlx/query-db3e74f0e83ffbf84a6d61e560f2060fbea775dc185f639139fbfd23e4d5f3c6.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE node_aggregation_witness_jobs_fri\n SET\n status = 'successful',\n updated_at = NOW(),\n time_taken = $1\n WHERE\n id = $2\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Time", - "Int8" - ] - }, - "nullable": [] - }, - "hash": "db3e74f0e83ffbf84a6d61e560f2060fbea775dc185f639139fbfd23e4d5f3c6" -} diff --git a/.sqlx/query-df00e33809768120e395d8f740770a4e629b2a1cde641e74e4e55bb100df809f.json b/.sqlx/query-df00e33809768120e395d8f740770a4e629b2a1cde641e74e4e55bb100df809f.json deleted file mode 100644 index 9ad3099d776..00000000000 --- a/.sqlx/query-df00e33809768120e395d8f740770a4e629b2a1cde641e74e4e55bb100df809f.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT\n attempts\n FROM\n prover_jobs_fri\n WHERE\n id = $1\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "attempts", - "type_info": "Int2" - } - ], - "parameters": { - "Left": [ - "Int8" - ] - }, - "nullable": [ - false - ] - }, - "hash": "df00e33809768120e395d8f740770a4e629b2a1cde641e74e4e55bb100df809f" -} diff --git a/.sqlx/query-e3479d12d9dc97001cf03dc42d9b957e92cd375ec33fe16f855f319ffc0b208e.json b/.sqlx/query-e3479d12d9dc97001cf03dc42d9b957e92cd375ec33fe16f855f319ffc0b208e.json deleted file mode 100644 index 645c9109550..00000000000 --- a/.sqlx/query-e3479d12d9dc97001cf03dc42d9b957e92cd375ec33fe16f855f319ffc0b208e.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT\n *\n FROM\n scheduler_dependency_tracker_fri\n WHERE\n l1_batch_number = $1\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "l1_batch_number", - "type_info": "Int8" - }, - { - "ordinal": 1, - "name": "status", - "type_info": "Text" - }, - { - "ordinal": 2, - "name": "circuit_1_final_prover_job_id", - "type_info": "Int8" - }, - { - "ordinal": 3, - "name": "circuit_2_final_prover_job_id", - "type_info": "Int8" - }, - { - "ordinal": 4, - "name": "circuit_3_final_prover_job_id", - "type_info": "Int8" - }, - { - "ordinal": 5, - "name": "circuit_4_final_prover_job_id", - "type_info": "Int8" - }, - { - "ordinal": 6, - "name": "circuit_5_final_prover_job_id", - "type_info": "Int8" - }, - { - "ordinal": 7, - "name": "circuit_6_final_prover_job_id", - "type_info": "Int8" - }, - { - "ordinal": 8, - "name": "circuit_7_final_prover_job_id", - "type_info": "Int8" - }, - { - "ordinal": 9, - "name": "circuit_8_final_prover_job_id", - "type_info": "Int8" - }, - { - "ordinal": 10, - "name": "circuit_9_final_prover_job_id", - "type_info": "Int8" - }, - { - "ordinal": 11, - "name": "circuit_10_final_prover_job_id", - "type_info": "Int8" - }, - { - "ordinal": 12, - "name": "circuit_11_final_prover_job_id", - "type_info": "Int8" - }, - { - "ordinal": 13, - "name": "circuit_12_final_prover_job_id", - "type_info": "Int8" - }, - { - "ordinal": 14, - "name": "circuit_13_final_prover_job_id", - "type_info": "Int8" - }, - { - "ordinal": 15, - "name": "created_at", - "type_info": "Timestamp" - }, - { - "ordinal": 16, - "name": "updated_at", - "type_info": "Timestamp" - }, - { - "ordinal": 17, - "name": "eip_4844_final_prover_job_id_0", - "type_info": "Int8" - }, - { - "ordinal": 18, - "name": "eip_4844_final_prover_job_id_1", - "type_info": "Int8" - } - ], - "parameters": { - "Left": [ - "Int8" - ] - }, - "nullable": [ - false, - false, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - false, - false, - true, - true - ] - }, - "hash": "e3479d12d9dc97001cf03dc42d9b957e92cd375ec33fe16f855f319ffc0b208e" -} diff --git a/.sqlx/query-e74a34a59e6afda689b0ec9e19071ababa66e4a443fbefbfffca72b7540b075b.json b/.sqlx/query-e74a34a59e6afda689b0ec9e19071ababa66e4a443fbefbfffca72b7540b075b.json deleted file mode 100644 index 54ea6b6eb03..00000000000 --- a/.sqlx/query-e74a34a59e6afda689b0ec9e19071ababa66e4a443fbefbfffca72b7540b075b.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n INSERT INTO\n proof_compression_jobs_fri (l1_batch_number, status, created_at, updated_at)\n VALUES\n ($1, $2, NOW(), NOW())\n ON CONFLICT (l1_batch_number) DO NOTHING\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Int8", - "Text" - ] - }, - "nullable": [] - }, - "hash": "e74a34a59e6afda689b0ec9e19071ababa66e4a443fbefbfffca72b7540b075b" -} diff --git a/.sqlx/query-e9adf5b5a1ab84c20a514a7775f91a9984685eaaaa0a8b223410d560a15a3034.json b/.sqlx/query-e9adf5b5a1ab84c20a514a7775f91a9984685eaaaa0a8b223410d560a15a3034.json deleted file mode 100644 index 975c061632a..00000000000 --- a/.sqlx/query-e9adf5b5a1ab84c20a514a7775f91a9984685eaaaa0a8b223410d560a15a3034.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE prover_jobs_fri\n SET\n status = 'in_progress',\n attempts = attempts + 1,\n processing_started_at = NOW(),\n updated_at = NOW(),\n picked_by = $4\n WHERE\n id = (\n SELECT\n pj.id\n FROM\n (\n SELECT\n *\n FROM\n UNNEST($1::SMALLINT[], $2::SMALLINT[])\n ) AS tuple (circuit_id, ROUND)\n JOIN LATERAL (\n SELECT\n *\n FROM\n prover_jobs_fri AS pj\n WHERE\n pj.status = 'queued'\n AND pj.protocol_version = ANY ($3)\n AND pj.circuit_id = tuple.circuit_id\n AND pj.aggregation_round = tuple.round\n ORDER BY\n pj.l1_batch_number ASC,\n pj.id ASC\n LIMIT\n 1\n ) AS pj ON TRUE\n ORDER BY\n pj.l1_batch_number ASC,\n pj.aggregation_round DESC,\n pj.id ASC\n LIMIT\n 1\n FOR UPDATE\n SKIP LOCKED\n )\n RETURNING\n prover_jobs_fri.id,\n prover_jobs_fri.l1_batch_number,\n prover_jobs_fri.circuit_id,\n prover_jobs_fri.aggregation_round,\n prover_jobs_fri.sequence_number,\n prover_jobs_fri.depth,\n prover_jobs_fri.is_node_final_proof\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Int8" - }, - { - "ordinal": 1, - "name": "l1_batch_number", - "type_info": "Int8" - }, - { - "ordinal": 2, - "name": "circuit_id", - "type_info": "Int2" - }, - { - "ordinal": 3, - "name": "aggregation_round", - "type_info": "Int2" - }, - { - "ordinal": 4, - "name": "sequence_number", - "type_info": "Int4" - }, - { - "ordinal": 5, - "name": "depth", - "type_info": "Int4" - }, - { - "ordinal": 6, - "name": "is_node_final_proof", - "type_info": "Bool" - } - ], - "parameters": { - "Left": [ - "Int2Array", - "Int2Array", - "Int4Array", - "Text" - ] - }, - "nullable": [ - false, - false, - false, - false, - false, - false, - false - ] - }, - "hash": "e9adf5b5a1ab84c20a514a7775f91a9984685eaaaa0a8b223410d560a15a3034" -} diff --git a/.sqlx/query-e9ca863d6e77edd39a9fc55700a6686e655206601854799139c22c017a214744.json b/.sqlx/query-e9ca863d6e77edd39a9fc55700a6686e655206601854799139c22c017a214744.json deleted file mode 100644 index 0bdcbb99add..00000000000 --- a/.sqlx/query-e9ca863d6e77edd39a9fc55700a6686e655206601854799139c22c017a214744.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n INSERT INTO\n node_aggregation_witness_jobs_fri (\n l1_batch_number,\n circuit_id,\n depth,\n aggregations_url,\n number_of_dependent_jobs,\n protocol_version,\n status,\n created_at,\n updated_at\n )\n VALUES\n ($1, $2, $3, $4, $5, $6, 'waiting_for_proofs', NOW(), NOW())\n ON CONFLICT (l1_batch_number, circuit_id, depth) DO\n UPDATE\n SET\n updated_at = NOW()\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Int8", - "Int2", - "Int4", - "Text", - "Int4", - "Int4" - ] - }, - "nullable": [] - }, - "hash": "e9ca863d6e77edd39a9fc55700a6686e655206601854799139c22c017a214744" -} diff --git a/.sqlx/query-ec04b89218111a5dc8d5ade506ac3465e2211ef3013386feb12d4cc04e0eade9.json b/.sqlx/query-ec04b89218111a5dc8d5ade506ac3465e2211ef3013386feb12d4cc04e0eade9.json deleted file mode 100644 index 7c0264b5646..00000000000 --- a/.sqlx/query-ec04b89218111a5dc8d5ade506ac3465e2211ef3013386feb12d4cc04e0eade9.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE prover_jobs_fri\n SET\n status = 'successful',\n updated_at = NOW(),\n time_taken = $1,\n proof_blob_url = $2\n WHERE\n id = $3\n RETURNING\n prover_jobs_fri.id,\n prover_jobs_fri.l1_batch_number,\n prover_jobs_fri.circuit_id,\n prover_jobs_fri.aggregation_round,\n prover_jobs_fri.sequence_number,\n prover_jobs_fri.depth,\n prover_jobs_fri.is_node_final_proof\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Int8" - }, - { - "ordinal": 1, - "name": "l1_batch_number", - "type_info": "Int8" - }, - { - "ordinal": 2, - "name": "circuit_id", - "type_info": "Int2" - }, - { - "ordinal": 3, - "name": "aggregation_round", - "type_info": "Int2" - }, - { - "ordinal": 4, - "name": "sequence_number", - "type_info": "Int4" - }, - { - "ordinal": 5, - "name": "depth", - "type_info": "Int4" - }, - { - "ordinal": 6, - "name": "is_node_final_proof", - "type_info": "Bool" - } - ], - "parameters": { - "Left": [ - "Time", - "Text", - "Int8" - ] - }, - "nullable": [ - false, - false, - false, - false, - false, - false, - false - ] - }, - "hash": "ec04b89218111a5dc8d5ade506ac3465e2211ef3013386feb12d4cc04e0eade9" -} diff --git a/.sqlx/query-edc61e1285bf6d3837acc67af4f15aaade450980719933089824eb8c494d64a4.json b/.sqlx/query-edc61e1285bf6d3837acc67af4f15aaade450980719933089824eb8c494d64a4.json deleted file mode 100644 index 2c7d7f1da5f..00000000000 --- a/.sqlx/query-edc61e1285bf6d3837acc67af4f15aaade450980719933089824eb8c494d64a4.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE witness_inputs_fri\n SET\n status = 'successful',\n updated_at = NOW(),\n time_taken = $1\n WHERE\n l1_batch_number = $2\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Time", - "Int8" - ] - }, - "nullable": [] - }, - "hash": "edc61e1285bf6d3837acc67af4f15aaade450980719933089824eb8c494d64a4" -} diff --git a/.sqlx/query-ef687be83e496d6647e4dfef9eabae63443c51deb818dd0affd1a0949b161737.json b/.sqlx/query-ef687be83e496d6647e4dfef9eabae63443c51deb818dd0affd1a0949b161737.json deleted file mode 100644 index 79b20fabb28..00000000000 --- a/.sqlx/query-ef687be83e496d6647e4dfef9eabae63443c51deb818dd0affd1a0949b161737.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n INSERT INTO\n proof_compression_jobs_fri (l1_batch_number, fri_proof_blob_url, status, created_at, updated_at)\n VALUES\n ($1, $2, $3, NOW(), NOW())\n ON CONFLICT (l1_batch_number) DO NOTHING\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Int8", - "Text", - "Text" - ] - }, - "nullable": [] - }, - "hash": "ef687be83e496d6647e4dfef9eabae63443c51deb818dd0affd1a0949b161737" -} diff --git a/.sqlx/query-f4362a61ab05af3d71a3232d2f017db60405a887f9f7fa0ca60aa7fc879ce630.json b/.sqlx/query-f4362a61ab05af3d71a3232d2f017db60405a887f9f7fa0ca60aa7fc879ce630.json deleted file mode 100644 index 59c28852a03..00000000000 --- a/.sqlx/query-f4362a61ab05af3d71a3232d2f017db60405a887f9f7fa0ca60aa7fc879ce630.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE proof_compression_jobs_fri\n SET\n status = $1,\n error = $2,\n updated_at = NOW()\n WHERE\n l1_batch_number = $3\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text", - "Text", - "Int8" - ] - }, - "nullable": [] - }, - "hash": "f4362a61ab05af3d71a3232d2f017db60405a887f9f7fa0ca60aa7fc879ce630" -} diff --git a/.sqlx/query-f717ca5d0890759496739a678955e6f8b7f88a0894a7f9e27fc26f93997d37c7.json b/.sqlx/query-f717ca5d0890759496739a678955e6f8b7f88a0894a7f9e27fc26f93997d37c7.json deleted file mode 100644 index e6e12748d0d..00000000000 --- a/.sqlx/query-f717ca5d0890759496739a678955e6f8b7f88a0894a7f9e27fc26f93997d37c7.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE proof_compression_jobs_fri\n SET\n status = $1,\n attempts = attempts + 1,\n updated_at = NOW(),\n processing_started_at = NOW(),\n picked_by = $3\n WHERE\n l1_batch_number = (\n SELECT\n l1_batch_number\n FROM\n proof_compression_jobs_fri\n WHERE\n status = $2\n ORDER BY\n l1_batch_number ASC\n LIMIT\n 1\n FOR UPDATE\n SKIP LOCKED\n )\n RETURNING\n proof_compression_jobs_fri.l1_batch_number\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "l1_batch_number", - "type_info": "Int8" - } - ], - "parameters": { - "Left": [ - "Text", - "Text", - "Text" - ] - }, - "nullable": [ - false - ] - }, - "hash": "f717ca5d0890759496739a678955e6f8b7f88a0894a7f9e27fc26f93997d37c7" -} diff --git a/.sqlx/query-fcddeb96dcd1611dedb2091c1be304e8a35fd65bf37e976b7106f57c57e70b9b.json b/.sqlx/query-fcddeb96dcd1611dedb2091c1be304e8a35fd65bf37e976b7106f57c57e70b9b.json deleted file mode 100644 index effc22d6a43..00000000000 --- a/.sqlx/query-fcddeb96dcd1611dedb2091c1be304e8a35fd65bf37e976b7106f57c57e70b9b.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n UPDATE gpu_prover_queue_fri\n SET\n instance_status = 'available',\n updated_at = NOW()\n WHERE\n instance_host = $1::TEXT::inet\n AND instance_port = $2\n AND instance_status = 'full'\n AND zone = $3\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text", - "Int4", - "Text" - ] - }, - "nullable": [] - }, - "hash": "fcddeb96dcd1611dedb2091c1be304e8a35fd65bf37e976b7106f57c57e70b9b" -} diff --git a/core/lib/config/src/configs/eth_watch.rs b/core/lib/config/src/configs/eth_watch.rs index bb13bcffd83..cb162b46f3b 100644 --- a/core/lib/config/src/configs/eth_watch.rs +++ b/core/lib/config/src/configs/eth_watch.rs @@ -1,9 +1,9 @@ use std::time::Duration; -use serde::Deserialize; +use serde::{Deserialize, Serialize}; /// Configuration for the Ethereum watch crate. -#[derive(Debug, Deserialize, Clone, PartialEq)] +#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)] pub struct ETHWatchConfig { /// Amount of confirmations for the priority operation to be processed. /// If not specified operation will be processed once its block is finalized. diff --git a/.sqlx/query-00220170d8f9e577321a0522337a7db7673811ac181e801a16a7aefc984d60b0.json b/core/lib/dal/.sqlx/query-00220170d8f9e577321a0522337a7db7673811ac181e801a16a7aefc984d60b0.json similarity index 100% rename from .sqlx/query-00220170d8f9e577321a0522337a7db7673811ac181e801a16a7aefc984d60b0.json rename to core/lib/dal/.sqlx/query-00220170d8f9e577321a0522337a7db7673811ac181e801a16a7aefc984d60b0.json diff --git a/.sqlx/query-0034bc1041d9ba7d3c681be6dfc4e7dfacfcf625e057b99924c245de03c2888c.json b/core/lib/dal/.sqlx/query-0034bc1041d9ba7d3c681be6dfc4e7dfacfcf625e057b99924c245de03c2888c.json similarity index 100% rename from .sqlx/query-0034bc1041d9ba7d3c681be6dfc4e7dfacfcf625e057b99924c245de03c2888c.json rename to core/lib/dal/.sqlx/query-0034bc1041d9ba7d3c681be6dfc4e7dfacfcf625e057b99924c245de03c2888c.json diff --git a/.sqlx/query-012bed5d34240ed28c331c8515c381d82925556a4801f678b8786235d525d784.json b/core/lib/dal/.sqlx/query-012bed5d34240ed28c331c8515c381d82925556a4801f678b8786235d525d784.json similarity index 100% rename from .sqlx/query-012bed5d34240ed28c331c8515c381d82925556a4801f678b8786235d525d784.json rename to core/lib/dal/.sqlx/query-012bed5d34240ed28c331c8515c381d82925556a4801f678b8786235d525d784.json diff --git a/.sqlx/query-015350f8d729ef490553550a68f07703b2581dda4fe3c00be6c5422c78980c4b.json b/core/lib/dal/.sqlx/query-015350f8d729ef490553550a68f07703b2581dda4fe3c00be6c5422c78980c4b.json similarity index 100% rename from .sqlx/query-015350f8d729ef490553550a68f07703b2581dda4fe3c00be6c5422c78980c4b.json rename to core/lib/dal/.sqlx/query-015350f8d729ef490553550a68f07703b2581dda4fe3c00be6c5422c78980c4b.json diff --git a/.sqlx/query-01f72dfc1eee6360a8ef7809874a1b4ba7fe355ebc02ea49a054aa073ce324ba.json b/core/lib/dal/.sqlx/query-01f72dfc1eee6360a8ef7809874a1b4ba7fe355ebc02ea49a054aa073ce324ba.json similarity index 100% rename from .sqlx/query-01f72dfc1eee6360a8ef7809874a1b4ba7fe355ebc02ea49a054aa073ce324ba.json rename to core/lib/dal/.sqlx/query-01f72dfc1eee6360a8ef7809874a1b4ba7fe355ebc02ea49a054aa073ce324ba.json diff --git a/.sqlx/query-026ab7dd7407f10074a2966b5eac2563a3e061bcc6505d8c295b1b2517f85f1b.json b/core/lib/dal/.sqlx/query-026ab7dd7407f10074a2966b5eac2563a3e061bcc6505d8c295b1b2517f85f1b.json similarity index 100% rename from .sqlx/query-026ab7dd7407f10074a2966b5eac2563a3e061bcc6505d8c295b1b2517f85f1b.json rename to core/lib/dal/.sqlx/query-026ab7dd7407f10074a2966b5eac2563a3e061bcc6505d8c295b1b2517f85f1b.json diff --git a/.sqlx/query-03c585c7e9f918e608757496088c7e3b6bdb2a08149d5f443310607d3c78988c.json b/core/lib/dal/.sqlx/query-03c585c7e9f918e608757496088c7e3b6bdb2a08149d5f443310607d3c78988c.json similarity index 100% rename from .sqlx/query-03c585c7e9f918e608757496088c7e3b6bdb2a08149d5f443310607d3c78988c.json rename to core/lib/dal/.sqlx/query-03c585c7e9f918e608757496088c7e3b6bdb2a08149d5f443310607d3c78988c.json diff --git a/.sqlx/query-040eaa878c3473f5edc73b77e572b5ea100f59295cd693d14ee0d5ee089c7981.json b/core/lib/dal/.sqlx/query-040eaa878c3473f5edc73b77e572b5ea100f59295cd693d14ee0d5ee089c7981.json similarity index 100% rename from .sqlx/query-040eaa878c3473f5edc73b77e572b5ea100f59295cd693d14ee0d5ee089c7981.json rename to core/lib/dal/.sqlx/query-040eaa878c3473f5edc73b77e572b5ea100f59295cd693d14ee0d5ee089c7981.json diff --git a/.sqlx/query-04fbbd198108d2614a3b29fa795994723ebe57b3ed209069bd3db906921ef1a3.json b/core/lib/dal/.sqlx/query-04fbbd198108d2614a3b29fa795994723ebe57b3ed209069bd3db906921ef1a3.json similarity index 100% rename from .sqlx/query-04fbbd198108d2614a3b29fa795994723ebe57b3ed209069bd3db906921ef1a3.json rename to core/lib/dal/.sqlx/query-04fbbd198108d2614a3b29fa795994723ebe57b3ed209069bd3db906921ef1a3.json diff --git a/.sqlx/query-0535c87d0ae694d5f10e529742ba2803cd147dec7450d1f81a41aea8dcf3be93.json b/core/lib/dal/.sqlx/query-0535c87d0ae694d5f10e529742ba2803cd147dec7450d1f81a41aea8dcf3be93.json similarity index 100% rename from .sqlx/query-0535c87d0ae694d5f10e529742ba2803cd147dec7450d1f81a41aea8dcf3be93.json rename to core/lib/dal/.sqlx/query-0535c87d0ae694d5f10e529742ba2803cd147dec7450d1f81a41aea8dcf3be93.json diff --git a/.sqlx/query-06ce3e5c10d6ae327fc2e45fd9080112ce326bcf4bb38a00366bd24e38881bb2.json b/core/lib/dal/.sqlx/query-06ce3e5c10d6ae327fc2e45fd9080112ce326bcf4bb38a00366bd24e38881bb2.json similarity index 100% rename from .sqlx/query-06ce3e5c10d6ae327fc2e45fd9080112ce326bcf4bb38a00366bd24e38881bb2.json rename to core/lib/dal/.sqlx/query-06ce3e5c10d6ae327fc2e45fd9080112ce326bcf4bb38a00366bd24e38881bb2.json diff --git a/.sqlx/query-07310d96fc7e258154ad510684e33d196907ebd599e926d305e5ef9f26afa2fa.json b/core/lib/dal/.sqlx/query-07310d96fc7e258154ad510684e33d196907ebd599e926d305e5ef9f26afa2fa.json similarity index 100% rename from .sqlx/query-07310d96fc7e258154ad510684e33d196907ebd599e926d305e5ef9f26afa2fa.json rename to core/lib/dal/.sqlx/query-07310d96fc7e258154ad510684e33d196907ebd599e926d305e5ef9f26afa2fa.json diff --git a/.sqlx/query-083991abb3f1c2183d1bd1fb2ad4710daa723e2d9a23317c347f6081465c3643.json b/core/lib/dal/.sqlx/query-083991abb3f1c2183d1bd1fb2ad4710daa723e2d9a23317c347f6081465c3643.json similarity index 100% rename from .sqlx/query-083991abb3f1c2183d1bd1fb2ad4710daa723e2d9a23317c347f6081465c3643.json rename to core/lib/dal/.sqlx/query-083991abb3f1c2183d1bd1fb2ad4710daa723e2d9a23317c347f6081465c3643.json diff --git a/.sqlx/query-08737d11b3e5067a2468013ec6e5d95fc47eb6bedc32f4d824aac9b2b6f96faf.json b/core/lib/dal/.sqlx/query-08737d11b3e5067a2468013ec6e5d95fc47eb6bedc32f4d824aac9b2b6f96faf.json similarity index 100% rename from .sqlx/query-08737d11b3e5067a2468013ec6e5d95fc47eb6bedc32f4d824aac9b2b6f96faf.json rename to core/lib/dal/.sqlx/query-08737d11b3e5067a2468013ec6e5d95fc47eb6bedc32f4d824aac9b2b6f96faf.json diff --git a/.sqlx/query-08e59ed8e2fd1a74e19d8bf0d131e4ee6682a89fb86f3b715a240805d44e6d87.json b/core/lib/dal/.sqlx/query-08e59ed8e2fd1a74e19d8bf0d131e4ee6682a89fb86f3b715a240805d44e6d87.json similarity index 100% rename from .sqlx/query-08e59ed8e2fd1a74e19d8bf0d131e4ee6682a89fb86f3b715a240805d44e6d87.json rename to core/lib/dal/.sqlx/query-08e59ed8e2fd1a74e19d8bf0d131e4ee6682a89fb86f3b715a240805d44e6d87.json diff --git a/.sqlx/query-0914f0ad03d6a8c55d287f94917c6f03469d78bf4f45f5fd1eaf37171db2f04a.json b/core/lib/dal/.sqlx/query-0914f0ad03d6a8c55d287f94917c6f03469d78bf4f45f5fd1eaf37171db2f04a.json similarity index 100% rename from .sqlx/query-0914f0ad03d6a8c55d287f94917c6f03469d78bf4f45f5fd1eaf37171db2f04a.json rename to core/lib/dal/.sqlx/query-0914f0ad03d6a8c55d287f94917c6f03469d78bf4f45f5fd1eaf37171db2f04a.json diff --git a/.sqlx/query-0a53fc3c90a14038c9f3f32c3e2e5f7edcafa4fc6757264a96a46dbf7dd1f9cc.json b/core/lib/dal/.sqlx/query-0a53fc3c90a14038c9f3f32c3e2e5f7edcafa4fc6757264a96a46dbf7dd1f9cc.json similarity index 100% rename from .sqlx/query-0a53fc3c90a14038c9f3f32c3e2e5f7edcafa4fc6757264a96a46dbf7dd1f9cc.json rename to core/lib/dal/.sqlx/query-0a53fc3c90a14038c9f3f32c3e2e5f7edcafa4fc6757264a96a46dbf7dd1f9cc.json diff --git a/.sqlx/query-0bdcf87f6910c7222b621f76f71bc6e326e15dca141050bc9d7dacae98a430e8.json b/core/lib/dal/.sqlx/query-0bdcf87f6910c7222b621f76f71bc6e326e15dca141050bc9d7dacae98a430e8.json similarity index 100% rename from .sqlx/query-0bdcf87f6910c7222b621f76f71bc6e326e15dca141050bc9d7dacae98a430e8.json rename to core/lib/dal/.sqlx/query-0bdcf87f6910c7222b621f76f71bc6e326e15dca141050bc9d7dacae98a430e8.json diff --git a/.sqlx/query-0c899c68886f76a232ffac0454cdfbf962636347864fc365fafa46c7a2da5f30.json b/core/lib/dal/.sqlx/query-0c899c68886f76a232ffac0454cdfbf962636347864fc365fafa46c7a2da5f30.json similarity index 100% rename from .sqlx/query-0c899c68886f76a232ffac0454cdfbf962636347864fc365fafa46c7a2da5f30.json rename to core/lib/dal/.sqlx/query-0c899c68886f76a232ffac0454cdfbf962636347864fc365fafa46c7a2da5f30.json diff --git a/.sqlx/query-0c95fbfb3a816bd49fd06e3a4f0a52daa202279bf612a9278f663deb78bc6e41.json b/core/lib/dal/.sqlx/query-0c95fbfb3a816bd49fd06e3a4f0a52daa202279bf612a9278f663deb78bc6e41.json similarity index 100% rename from .sqlx/query-0c95fbfb3a816bd49fd06e3a4f0a52daa202279bf612a9278f663deb78bc6e41.json rename to core/lib/dal/.sqlx/query-0c95fbfb3a816bd49fd06e3a4f0a52daa202279bf612a9278f663deb78bc6e41.json diff --git a/.sqlx/query-0f381418ac79762b4573bf5b440b96b711e8667df7a3c87a5ddf062842a0da6c.json b/core/lib/dal/.sqlx/query-0f381418ac79762b4573bf5b440b96b711e8667df7a3c87a5ddf062842a0da6c.json similarity index 100% rename from .sqlx/query-0f381418ac79762b4573bf5b440b96b711e8667df7a3c87a5ddf062842a0da6c.json rename to core/lib/dal/.sqlx/query-0f381418ac79762b4573bf5b440b96b711e8667df7a3c87a5ddf062842a0da6c.json diff --git a/.sqlx/query-10959c91f01ce0da196f4c6eaf0661a097308d9f81024fdfef24a14418202730.json b/core/lib/dal/.sqlx/query-10959c91f01ce0da196f4c6eaf0661a097308d9f81024fdfef24a14418202730.json similarity index 100% rename from .sqlx/query-10959c91f01ce0da196f4c6eaf0661a097308d9f81024fdfef24a14418202730.json rename to core/lib/dal/.sqlx/query-10959c91f01ce0da196f4c6eaf0661a097308d9f81024fdfef24a14418202730.json diff --git a/.sqlx/query-10b8981f7aa47ce5d3507571af45f7cef0d50c4938105684971e8adc86bb6366.json b/core/lib/dal/.sqlx/query-10b8981f7aa47ce5d3507571af45f7cef0d50c4938105684971e8adc86bb6366.json similarity index 100% rename from .sqlx/query-10b8981f7aa47ce5d3507571af45f7cef0d50c4938105684971e8adc86bb6366.json rename to core/lib/dal/.sqlx/query-10b8981f7aa47ce5d3507571af45f7cef0d50c4938105684971e8adc86bb6366.json diff --git a/.sqlx/query-11af69fc254e54449b64c086667700a95e4c37a7a18531b3cdf120394cb055b9.json b/core/lib/dal/.sqlx/query-11af69fc254e54449b64c086667700a95e4c37a7a18531b3cdf120394cb055b9.json similarity index 100% rename from .sqlx/query-11af69fc254e54449b64c086667700a95e4c37a7a18531b3cdf120394cb055b9.json rename to core/lib/dal/.sqlx/query-11af69fc254e54449b64c086667700a95e4c37a7a18531b3cdf120394cb055b9.json diff --git a/.sqlx/query-136569d7eb4037fd77e0fac2246c68e8e15a831f1a45dc3b2240d5c6809d5ef2.json b/core/lib/dal/.sqlx/query-136569d7eb4037fd77e0fac2246c68e8e15a831f1a45dc3b2240d5c6809d5ef2.json similarity index 100% rename from .sqlx/query-136569d7eb4037fd77e0fac2246c68e8e15a831f1a45dc3b2240d5c6809d5ef2.json rename to core/lib/dal/.sqlx/query-136569d7eb4037fd77e0fac2246c68e8e15a831f1a45dc3b2240d5c6809d5ef2.json diff --git a/.sqlx/query-14c0caee921199f799400dbea719ed36420c15081ff5f60da0a1c769c2dbc542.json b/core/lib/dal/.sqlx/query-14c0caee921199f799400dbea719ed36420c15081ff5f60da0a1c769c2dbc542.json similarity index 100% rename from .sqlx/query-14c0caee921199f799400dbea719ed36420c15081ff5f60da0a1c769c2dbc542.json rename to core/lib/dal/.sqlx/query-14c0caee921199f799400dbea719ed36420c15081ff5f60da0a1c769c2dbc542.json diff --git a/.sqlx/query-14e5a66ee9a2b7bc56e41c3925150dd2778c0da29697d31710e8b507629ba5c4.json b/core/lib/dal/.sqlx/query-14e5a66ee9a2b7bc56e41c3925150dd2778c0da29697d31710e8b507629ba5c4.json similarity index 100% rename from .sqlx/query-14e5a66ee9a2b7bc56e41c3925150dd2778c0da29697d31710e8b507629ba5c4.json rename to core/lib/dal/.sqlx/query-14e5a66ee9a2b7bc56e41c3925150dd2778c0da29697d31710e8b507629ba5c4.json diff --git a/.sqlx/query-1689c212d411ebd99a22210519ea2d505a1aabf52ff4136d2ed1b39c70dd1632.json b/core/lib/dal/.sqlx/query-1689c212d411ebd99a22210519ea2d505a1aabf52ff4136d2ed1b39c70dd1632.json similarity index 100% rename from .sqlx/query-1689c212d411ebd99a22210519ea2d505a1aabf52ff4136d2ed1b39c70dd1632.json rename to core/lib/dal/.sqlx/query-1689c212d411ebd99a22210519ea2d505a1aabf52ff4136d2ed1b39c70dd1632.json diff --git a/.sqlx/query-1766c0a21ba5918dd08f4babd8dbfdf10fb1cb43781219586c169fb976204331.json b/core/lib/dal/.sqlx/query-1766c0a21ba5918dd08f4babd8dbfdf10fb1cb43781219586c169fb976204331.json similarity index 100% rename from .sqlx/query-1766c0a21ba5918dd08f4babd8dbfdf10fb1cb43781219586c169fb976204331.json rename to core/lib/dal/.sqlx/query-1766c0a21ba5918dd08f4babd8dbfdf10fb1cb43781219586c169fb976204331.json diff --git a/.sqlx/query-1862d3a78e4e9068df1b8ce3bbe9f3f0b5d629fdb5c36ea1bfb93ed246be968e.json b/core/lib/dal/.sqlx/query-1862d3a78e4e9068df1b8ce3bbe9f3f0b5d629fdb5c36ea1bfb93ed246be968e.json similarity index 100% rename from .sqlx/query-1862d3a78e4e9068df1b8ce3bbe9f3f0b5d629fdb5c36ea1bfb93ed246be968e.json rename to core/lib/dal/.sqlx/query-1862d3a78e4e9068df1b8ce3bbe9f3f0b5d629fdb5c36ea1bfb93ed246be968e.json diff --git a/.sqlx/query-19314d74e94b610e2da6d728ca37ea964610e131d45f720f7a7b2a130fe9ed89.json b/core/lib/dal/.sqlx/query-19314d74e94b610e2da6d728ca37ea964610e131d45f720f7a7b2a130fe9ed89.json similarity index 100% rename from .sqlx/query-19314d74e94b610e2da6d728ca37ea964610e131d45f720f7a7b2a130fe9ed89.json rename to core/lib/dal/.sqlx/query-19314d74e94b610e2da6d728ca37ea964610e131d45f720f7a7b2a130fe9ed89.json diff --git a/.sqlx/query-19545806b8f772075096e69f8665d98a3d9f7df162ae22a98c3c7620fcd13bd2.json b/core/lib/dal/.sqlx/query-19545806b8f772075096e69f8665d98a3d9f7df162ae22a98c3c7620fcd13bd2.json similarity index 100% rename from .sqlx/query-19545806b8f772075096e69f8665d98a3d9f7df162ae22a98c3c7620fcd13bd2.json rename to core/lib/dal/.sqlx/query-19545806b8f772075096e69f8665d98a3d9f7df162ae22a98c3c7620fcd13bd2.json diff --git a/.sqlx/query-19b89495be8aa735db039ccc8a262786c58e54f132588c48f07d9537cf21d3ed.json b/core/lib/dal/.sqlx/query-19b89495be8aa735db039ccc8a262786c58e54f132588c48f07d9537cf21d3ed.json similarity index 100% rename from .sqlx/query-19b89495be8aa735db039ccc8a262786c58e54f132588c48f07d9537cf21d3ed.json rename to core/lib/dal/.sqlx/query-19b89495be8aa735db039ccc8a262786c58e54f132588c48f07d9537cf21d3ed.json diff --git a/.sqlx/query-1b4ebbfc96b4fd66ecbe64a6be80a01a6c7cbe9297cbb55d42533fddc18719b6.json b/core/lib/dal/.sqlx/query-1b4ebbfc96b4fd66ecbe64a6be80a01a6c7cbe9297cbb55d42533fddc18719b6.json similarity index 100% rename from .sqlx/query-1b4ebbfc96b4fd66ecbe64a6be80a01a6c7cbe9297cbb55d42533fddc18719b6.json rename to core/lib/dal/.sqlx/query-1b4ebbfc96b4fd66ecbe64a6be80a01a6c7cbe9297cbb55d42533fddc18719b6.json diff --git a/.sqlx/query-1c14d2def60fa5ff91788ddb55e68cee71742b732112038a642e2a07305053c2.json b/core/lib/dal/.sqlx/query-1c14d2def60fa5ff91788ddb55e68cee71742b732112038a642e2a07305053c2.json similarity index 100% rename from .sqlx/query-1c14d2def60fa5ff91788ddb55e68cee71742b732112038a642e2a07305053c2.json rename to core/lib/dal/.sqlx/query-1c14d2def60fa5ff91788ddb55e68cee71742b732112038a642e2a07305053c2.json diff --git a/.sqlx/query-1c994d418ada78586de829fc2d34d26e48e968c79834858c98b7a7f9dfc81910.json b/core/lib/dal/.sqlx/query-1c994d418ada78586de829fc2d34d26e48e968c79834858c98b7a7f9dfc81910.json similarity index 100% rename from .sqlx/query-1c994d418ada78586de829fc2d34d26e48e968c79834858c98b7a7f9dfc81910.json rename to core/lib/dal/.sqlx/query-1c994d418ada78586de829fc2d34d26e48e968c79834858c98b7a7f9dfc81910.json diff --git a/.sqlx/query-1dcb3afb0c1947f92981f61d95c099c4591ce3f8d51f3df99db0165e086f96af.json b/core/lib/dal/.sqlx/query-1dcb3afb0c1947f92981f61d95c099c4591ce3f8d51f3df99db0165e086f96af.json similarity index 100% rename from .sqlx/query-1dcb3afb0c1947f92981f61d95c099c4591ce3f8d51f3df99db0165e086f96af.json rename to core/lib/dal/.sqlx/query-1dcb3afb0c1947f92981f61d95c099c4591ce3f8d51f3df99db0165e086f96af.json diff --git a/.sqlx/query-1ea37ef1c3df72e5e9c50cfa1675fc7f60618209d0132e7937a1347b7e94b212.json b/core/lib/dal/.sqlx/query-1ea37ef1c3df72e5e9c50cfa1675fc7f60618209d0132e7937a1347b7e94b212.json similarity index 100% rename from .sqlx/query-1ea37ef1c3df72e5e9c50cfa1675fc7f60618209d0132e7937a1347b7e94b212.json rename to core/lib/dal/.sqlx/query-1ea37ef1c3df72e5e9c50cfa1675fc7f60618209d0132e7937a1347b7e94b212.json diff --git a/.sqlx/query-1ed2d7e5e98b15420a21650809d710ce910d0c9138d85cb55e16459c757dea03.json b/core/lib/dal/.sqlx/query-1ed2d7e5e98b15420a21650809d710ce910d0c9138d85cb55e16459c757dea03.json similarity index 100% rename from .sqlx/query-1ed2d7e5e98b15420a21650809d710ce910d0c9138d85cb55e16459c757dea03.json rename to core/lib/dal/.sqlx/query-1ed2d7e5e98b15420a21650809d710ce910d0c9138d85cb55e16459c757dea03.json diff --git a/.sqlx/query-1f46524410ce0f193dc6547499bde995ddddc621ee2149f08f905af2d8aadd03.json b/core/lib/dal/.sqlx/query-1f46524410ce0f193dc6547499bde995ddddc621ee2149f08f905af2d8aadd03.json similarity index 100% rename from .sqlx/query-1f46524410ce0f193dc6547499bde995ddddc621ee2149f08f905af2d8aadd03.json rename to core/lib/dal/.sqlx/query-1f46524410ce0f193dc6547499bde995ddddc621ee2149f08f905af2d8aadd03.json diff --git a/.sqlx/query-1f4c123edaf6faf50e1c07a797cd1d4794007904fef7a5e837ebfb1b502711a1.json b/core/lib/dal/.sqlx/query-1f4c123edaf6faf50e1c07a797cd1d4794007904fef7a5e837ebfb1b502711a1.json similarity index 100% rename from .sqlx/query-1f4c123edaf6faf50e1c07a797cd1d4794007904fef7a5e837ebfb1b502711a1.json rename to core/lib/dal/.sqlx/query-1f4c123edaf6faf50e1c07a797cd1d4794007904fef7a5e837ebfb1b502711a1.json diff --git a/.sqlx/query-2003dcf7bc807c7d345368538accd9b0128f82306e27e4c7258116082a54ab95.json b/core/lib/dal/.sqlx/query-2003dcf7bc807c7d345368538accd9b0128f82306e27e4c7258116082a54ab95.json similarity index 100% rename from .sqlx/query-2003dcf7bc807c7d345368538accd9b0128f82306e27e4c7258116082a54ab95.json rename to core/lib/dal/.sqlx/query-2003dcf7bc807c7d345368538accd9b0128f82306e27e4c7258116082a54ab95.json diff --git a/.sqlx/query-20f84f9ec21459d8c7ad53241758eeab159533211d2ddbef41e6ff0ba937d04a.json b/core/lib/dal/.sqlx/query-20f84f9ec21459d8c7ad53241758eeab159533211d2ddbef41e6ff0ba937d04a.json similarity index 100% rename from .sqlx/query-20f84f9ec21459d8c7ad53241758eeab159533211d2ddbef41e6ff0ba937d04a.json rename to core/lib/dal/.sqlx/query-20f84f9ec21459d8c7ad53241758eeab159533211d2ddbef41e6ff0ba937d04a.json diff --git a/.sqlx/query-23be43bf705d679ca751c89353716065fcad42c6b621efb3a135a16b477dcfd9.json b/core/lib/dal/.sqlx/query-23be43bf705d679ca751c89353716065fcad42c6b621efb3a135a16b477dcfd9.json similarity index 100% rename from .sqlx/query-23be43bf705d679ca751c89353716065fcad42c6b621efb3a135a16b477dcfd9.json rename to core/lib/dal/.sqlx/query-23be43bf705d679ca751c89353716065fcad42c6b621efb3a135a16b477dcfd9.json diff --git a/.sqlx/query-245dc5bb82cc82df38e4440a7746ca08324bc86a72e4ea85c9c7962a6c8c9e30.json b/core/lib/dal/.sqlx/query-245dc5bb82cc82df38e4440a7746ca08324bc86a72e4ea85c9c7962a6c8c9e30.json similarity index 100% rename from .sqlx/query-245dc5bb82cc82df38e4440a7746ca08324bc86a72e4ea85c9c7962a6c8c9e30.json rename to core/lib/dal/.sqlx/query-245dc5bb82cc82df38e4440a7746ca08324bc86a72e4ea85c9c7962a6c8c9e30.json diff --git a/.sqlx/query-24722ee4ced7f03e60b1b5ecaaa5234d536b064951a67d826ac49b7a3a095a1a.json b/core/lib/dal/.sqlx/query-24722ee4ced7f03e60b1b5ecaaa5234d536b064951a67d826ac49b7a3a095a1a.json similarity index 100% rename from .sqlx/query-24722ee4ced7f03e60b1b5ecaaa5234d536b064951a67d826ac49b7a3a095a1a.json rename to core/lib/dal/.sqlx/query-24722ee4ced7f03e60b1b5ecaaa5234d536b064951a67d826ac49b7a3a095a1a.json diff --git a/.sqlx/query-249cb862d44196cb6dc3945e907717b0dd3cec64b0b29f59b273f1c6952e01da.json b/core/lib/dal/.sqlx/query-249cb862d44196cb6dc3945e907717b0dd3cec64b0b29f59b273f1c6952e01da.json similarity index 100% rename from .sqlx/query-249cb862d44196cb6dc3945e907717b0dd3cec64b0b29f59b273f1c6952e01da.json rename to core/lib/dal/.sqlx/query-249cb862d44196cb6dc3945e907717b0dd3cec64b0b29f59b273f1c6952e01da.json diff --git a/.sqlx/query-2506e9edfd4b41ca1e187909631ae942bab5d71daaed7017e3fa62dc5e42ab0a.json b/core/lib/dal/.sqlx/query-2506e9edfd4b41ca1e187909631ae942bab5d71daaed7017e3fa62dc5e42ab0a.json similarity index 100% rename from .sqlx/query-2506e9edfd4b41ca1e187909631ae942bab5d71daaed7017e3fa62dc5e42ab0a.json rename to core/lib/dal/.sqlx/query-2506e9edfd4b41ca1e187909631ae942bab5d71daaed7017e3fa62dc5e42ab0a.json diff --git a/.sqlx/query-254d17b5402c123cca0edd6fcdc98012b034605dfb4c48379844085b71e9e381.json b/core/lib/dal/.sqlx/query-254d17b5402c123cca0edd6fcdc98012b034605dfb4c48379844085b71e9e381.json similarity index 100% rename from .sqlx/query-254d17b5402c123cca0edd6fcdc98012b034605dfb4c48379844085b71e9e381.json rename to core/lib/dal/.sqlx/query-254d17b5402c123cca0edd6fcdc98012b034605dfb4c48379844085b71e9e381.json diff --git a/.sqlx/query-25646383ecacf72e3f63b5c93a57a66d1e38fb6ca706c2affd4607d77be38de9.json b/core/lib/dal/.sqlx/query-25646383ecacf72e3f63b5c93a57a66d1e38fb6ca706c2affd4607d77be38de9.json similarity index 100% rename from .sqlx/query-25646383ecacf72e3f63b5c93a57a66d1e38fb6ca706c2affd4607d77be38de9.json rename to core/lib/dal/.sqlx/query-25646383ecacf72e3f63b5c93a57a66d1e38fb6ca706c2affd4607d77be38de9.json diff --git a/.sqlx/query-268d27c427a69c5e35e6004380da45f005141b01eac26946251bba68e9276acf.json b/core/lib/dal/.sqlx/query-268d27c427a69c5e35e6004380da45f005141b01eac26946251bba68e9276acf.json similarity index 100% rename from .sqlx/query-268d27c427a69c5e35e6004380da45f005141b01eac26946251bba68e9276acf.json rename to core/lib/dal/.sqlx/query-268d27c427a69c5e35e6004380da45f005141b01eac26946251bba68e9276acf.json diff --git a/.sqlx/query-26bc9b315c4c57bcff1f46da956727233a36e018fe5c0651995b876053a6a054.json b/core/lib/dal/.sqlx/query-26bc9b315c4c57bcff1f46da956727233a36e018fe5c0651995b876053a6a054.json similarity index 100% rename from .sqlx/query-26bc9b315c4c57bcff1f46da956727233a36e018fe5c0651995b876053a6a054.json rename to core/lib/dal/.sqlx/query-26bc9b315c4c57bcff1f46da956727233a36e018fe5c0651995b876053a6a054.json diff --git a/.sqlx/query-26cb272c2a46a267c47681e0f1f07997b7e24682da56f84d812da2b9aeb14ca2.json b/core/lib/dal/.sqlx/query-26cb272c2a46a267c47681e0f1f07997b7e24682da56f84d812da2b9aeb14ca2.json similarity index 100% rename from .sqlx/query-26cb272c2a46a267c47681e0f1f07997b7e24682da56f84d812da2b9aeb14ca2.json rename to core/lib/dal/.sqlx/query-26cb272c2a46a267c47681e0f1f07997b7e24682da56f84d812da2b9aeb14ca2.json diff --git a/.sqlx/query-26e0b7eb1871d94ddc98254fece6381a9c4165e2727542eaeef3bbedd13a4f20.json b/core/lib/dal/.sqlx/query-26e0b7eb1871d94ddc98254fece6381a9c4165e2727542eaeef3bbedd13a4f20.json similarity index 100% rename from .sqlx/query-26e0b7eb1871d94ddc98254fece6381a9c4165e2727542eaeef3bbedd13a4f20.json rename to core/lib/dal/.sqlx/query-26e0b7eb1871d94ddc98254fece6381a9c4165e2727542eaeef3bbedd13a4f20.json diff --git a/.sqlx/query-2737fea02599cdc163854b1395c42d4ef93ca238fd2fbc9155e6d012d0d1e113.json b/core/lib/dal/.sqlx/query-2737fea02599cdc163854b1395c42d4ef93ca238fd2fbc9155e6d012d0d1e113.json similarity index 100% rename from .sqlx/query-2737fea02599cdc163854b1395c42d4ef93ca238fd2fbc9155e6d012d0d1e113.json rename to core/lib/dal/.sqlx/query-2737fea02599cdc163854b1395c42d4ef93ca238fd2fbc9155e6d012d0d1e113.json diff --git a/.sqlx/query-280cf015e40353e2833c0a70b77095596297be0d728a0aa2d9b180fb72de222b.json b/core/lib/dal/.sqlx/query-280cf015e40353e2833c0a70b77095596297be0d728a0aa2d9b180fb72de222b.json similarity index 100% rename from .sqlx/query-280cf015e40353e2833c0a70b77095596297be0d728a0aa2d9b180fb72de222b.json rename to core/lib/dal/.sqlx/query-280cf015e40353e2833c0a70b77095596297be0d728a0aa2d9b180fb72de222b.json diff --git a/.sqlx/query-293258ecb299be5f5e81696d14883f115cd97586bd795ee31f58fc14e56d58cb.json b/core/lib/dal/.sqlx/query-293258ecb299be5f5e81696d14883f115cd97586bd795ee31f58fc14e56d58cb.json similarity index 100% rename from .sqlx/query-293258ecb299be5f5e81696d14883f115cd97586bd795ee31f58fc14e56d58cb.json rename to core/lib/dal/.sqlx/query-293258ecb299be5f5e81696d14883f115cd97586bd795ee31f58fc14e56d58cb.json diff --git a/.sqlx/query-2955e976281f9cbd98b7378c5ab52964b268b93c32fd280c49bf9f932884300d.json b/core/lib/dal/.sqlx/query-2955e976281f9cbd98b7378c5ab52964b268b93c32fd280c49bf9f932884300d.json similarity index 100% rename from .sqlx/query-2955e976281f9cbd98b7378c5ab52964b268b93c32fd280c49bf9f932884300d.json rename to core/lib/dal/.sqlx/query-2955e976281f9cbd98b7378c5ab52964b268b93c32fd280c49bf9f932884300d.json diff --git a/.sqlx/query-2979b6c9ce76a4e6eaaa3f9bad5cf831d63d692111d87282aed8e85df6b0411f.json b/core/lib/dal/.sqlx/query-2979b6c9ce76a4e6eaaa3f9bad5cf831d63d692111d87282aed8e85df6b0411f.json similarity index 100% rename from .sqlx/query-2979b6c9ce76a4e6eaaa3f9bad5cf831d63d692111d87282aed8e85df6b0411f.json rename to core/lib/dal/.sqlx/query-2979b6c9ce76a4e6eaaa3f9bad5cf831d63d692111d87282aed8e85df6b0411f.json diff --git a/.sqlx/query-2a2680234c38904e5c19df45193a8c13d04079683e09c65f7f4e76a9987e2ab4.json b/core/lib/dal/.sqlx/query-2a2680234c38904e5c19df45193a8c13d04079683e09c65f7f4e76a9987e2ab4.json similarity index 100% rename from .sqlx/query-2a2680234c38904e5c19df45193a8c13d04079683e09c65f7f4e76a9987e2ab4.json rename to core/lib/dal/.sqlx/query-2a2680234c38904e5c19df45193a8c13d04079683e09c65f7f4e76a9987e2ab4.json diff --git a/.sqlx/query-2b1136c7781bcdbd9d5d1e6f900fe400fcba3bfc5cf1b7c2b801508f6673d94e.json b/core/lib/dal/.sqlx/query-2b1136c7781bcdbd9d5d1e6f900fe400fcba3bfc5cf1b7c2b801508f6673d94e.json similarity index 100% rename from .sqlx/query-2b1136c7781bcdbd9d5d1e6f900fe400fcba3bfc5cf1b7c2b801508f6673d94e.json rename to core/lib/dal/.sqlx/query-2b1136c7781bcdbd9d5d1e6f900fe400fcba3bfc5cf1b7c2b801508f6673d94e.json diff --git a/.sqlx/query-2b1aa207a058f66265acf2c21b8ed5d8007789c0fc1eab948f6d7339dfb69147.json b/core/lib/dal/.sqlx/query-2b1aa207a058f66265acf2c21b8ed5d8007789c0fc1eab948f6d7339dfb69147.json similarity index 100% rename from .sqlx/query-2b1aa207a058f66265acf2c21b8ed5d8007789c0fc1eab948f6d7339dfb69147.json rename to core/lib/dal/.sqlx/query-2b1aa207a058f66265acf2c21b8ed5d8007789c0fc1eab948f6d7339dfb69147.json diff --git a/.sqlx/query-2c71a819c6ed22a3ab79675840e00f7b1176d59a83520288f5428b67ebd52130.json b/core/lib/dal/.sqlx/query-2c71a819c6ed22a3ab79675840e00f7b1176d59a83520288f5428b67ebd52130.json similarity index 100% rename from .sqlx/query-2c71a819c6ed22a3ab79675840e00f7b1176d59a83520288f5428b67ebd52130.json rename to core/lib/dal/.sqlx/query-2c71a819c6ed22a3ab79675840e00f7b1176d59a83520288f5428b67ebd52130.json diff --git a/.sqlx/query-2c827c1c3cfa3552b90d4746c5df45d57f1f8b2558fdb374bf02e84d3c825a23.json b/core/lib/dal/.sqlx/query-2c827c1c3cfa3552b90d4746c5df45d57f1f8b2558fdb374bf02e84d3c825a23.json similarity index 100% rename from .sqlx/query-2c827c1c3cfa3552b90d4746c5df45d57f1f8b2558fdb374bf02e84d3c825a23.json rename to core/lib/dal/.sqlx/query-2c827c1c3cfa3552b90d4746c5df45d57f1f8b2558fdb374bf02e84d3c825a23.json diff --git a/.sqlx/query-2d0c2e9ec4187641baef8a33229bffc78d92adb3c1e3ca60b12163e38c67047e.json b/core/lib/dal/.sqlx/query-2d0c2e9ec4187641baef8a33229bffc78d92adb3c1e3ca60b12163e38c67047e.json similarity index 100% rename from .sqlx/query-2d0c2e9ec4187641baef8a33229bffc78d92adb3c1e3ca60b12163e38c67047e.json rename to core/lib/dal/.sqlx/query-2d0c2e9ec4187641baef8a33229bffc78d92adb3c1e3ca60b12163e38c67047e.json diff --git a/.sqlx/query-2d1e0f2e043c193052c9cc20f9efeb5f094160627bc09db4bda2dda9a8c11c44.json b/core/lib/dal/.sqlx/query-2d1e0f2e043c193052c9cc20f9efeb5f094160627bc09db4bda2dda9a8c11c44.json similarity index 100% rename from .sqlx/query-2d1e0f2e043c193052c9cc20f9efeb5f094160627bc09db4bda2dda9a8c11c44.json rename to core/lib/dal/.sqlx/query-2d1e0f2e043c193052c9cc20f9efeb5f094160627bc09db4bda2dda9a8c11c44.json diff --git a/.sqlx/query-2d862097cfae49a1fb28ec0a05176085385c3a79d72f49669b4215a9454323c2.json b/core/lib/dal/.sqlx/query-2d862097cfae49a1fb28ec0a05176085385c3a79d72f49669b4215a9454323c2.json similarity index 100% rename from .sqlx/query-2d862097cfae49a1fb28ec0a05176085385c3a79d72f49669b4215a9454323c2.json rename to core/lib/dal/.sqlx/query-2d862097cfae49a1fb28ec0a05176085385c3a79d72f49669b4215a9454323c2.json diff --git a/.sqlx/query-2dd7dbaeb2572404451e78a96f540e73a2778633bbf9d8e591ec912634639af9.json b/core/lib/dal/.sqlx/query-2dd7dbaeb2572404451e78a96f540e73a2778633bbf9d8e591ec912634639af9.json similarity index 100% rename from .sqlx/query-2dd7dbaeb2572404451e78a96f540e73a2778633bbf9d8e591ec912634639af9.json rename to core/lib/dal/.sqlx/query-2dd7dbaeb2572404451e78a96f540e73a2778633bbf9d8e591ec912634639af9.json diff --git a/.sqlx/query-2ddba807ac8ec5260bf92c77073eb89c728357c0744f209090824695a5d35fa3.json b/core/lib/dal/.sqlx/query-2ddba807ac8ec5260bf92c77073eb89c728357c0744f209090824695a5d35fa3.json similarity index 100% rename from .sqlx/query-2ddba807ac8ec5260bf92c77073eb89c728357c0744f209090824695a5d35fa3.json rename to core/lib/dal/.sqlx/query-2ddba807ac8ec5260bf92c77073eb89c728357c0744f209090824695a5d35fa3.json diff --git a/.sqlx/query-2e5b9ae1b81b0abfe7a962c93b3119a0a60dc9804175b2baf8b45939c74bd583.json b/core/lib/dal/.sqlx/query-2e5b9ae1b81b0abfe7a962c93b3119a0a60dc9804175b2baf8b45939c74bd583.json similarity index 100% rename from .sqlx/query-2e5b9ae1b81b0abfe7a962c93b3119a0a60dc9804175b2baf8b45939c74bd583.json rename to core/lib/dal/.sqlx/query-2e5b9ae1b81b0abfe7a962c93b3119a0a60dc9804175b2baf8b45939c74bd583.json diff --git a/.sqlx/query-2eb25bfcfc1114de825dc4eeb0605d7d1c9e649663f6e9444c4425821d0a5b71.json b/core/lib/dal/.sqlx/query-2eb25bfcfc1114de825dc4eeb0605d7d1c9e649663f6e9444c4425821d0a5b71.json similarity index 100% rename from .sqlx/query-2eb25bfcfc1114de825dc4eeb0605d7d1c9e649663f6e9444c4425821d0a5b71.json rename to core/lib/dal/.sqlx/query-2eb25bfcfc1114de825dc4eeb0605d7d1c9e649663f6e9444c4425821d0a5b71.json diff --git a/.sqlx/query-307f15e00a97440868189f25e4487ed365c0369f94bc457cb162a5c876a123c7.json b/core/lib/dal/.sqlx/query-307f15e00a97440868189f25e4487ed365c0369f94bc457cb162a5c876a123c7.json similarity index 100% rename from .sqlx/query-307f15e00a97440868189f25e4487ed365c0369f94bc457cb162a5c876a123c7.json rename to core/lib/dal/.sqlx/query-307f15e00a97440868189f25e4487ed365c0369f94bc457cb162a5c876a123c7.json diff --git a/.sqlx/query-31f12a8c44124bb2ce31889ac5295f3823926f69cb1d54874878e6d6c301bfd8.json b/core/lib/dal/.sqlx/query-31f12a8c44124bb2ce31889ac5295f3823926f69cb1d54874878e6d6c301bfd8.json similarity index 100% rename from .sqlx/query-31f12a8c44124bb2ce31889ac5295f3823926f69cb1d54874878e6d6c301bfd8.json rename to core/lib/dal/.sqlx/query-31f12a8c44124bb2ce31889ac5295f3823926f69cb1d54874878e6d6c301bfd8.json diff --git a/.sqlx/query-32792c6aee69cb8c8b928a209a3b04ba5868d1897553df85aac15b169ebb0732.json b/core/lib/dal/.sqlx/query-32792c6aee69cb8c8b928a209a3b04ba5868d1897553df85aac15b169ebb0732.json similarity index 100% rename from .sqlx/query-32792c6aee69cb8c8b928a209a3b04ba5868d1897553df85aac15b169ebb0732.json rename to core/lib/dal/.sqlx/query-32792c6aee69cb8c8b928a209a3b04ba5868d1897553df85aac15b169ebb0732.json diff --git a/.sqlx/query-3490fe0b778a03c73111bf8cbf426b0b3185a231bbf0b8b132a1a95bc157e827.json b/core/lib/dal/.sqlx/query-3490fe0b778a03c73111bf8cbf426b0b3185a231bbf0b8b132a1a95bc157e827.json similarity index 100% rename from .sqlx/query-3490fe0b778a03c73111bf8cbf426b0b3185a231bbf0b8b132a1a95bc157e827.json rename to core/lib/dal/.sqlx/query-3490fe0b778a03c73111bf8cbf426b0b3185a231bbf0b8b132a1a95bc157e827.json diff --git a/.sqlx/query-3596a70433e4e27fcda18f37073b51dea32e37cb8c51f1dd5d82c15eddc48e6b.json b/core/lib/dal/.sqlx/query-3596a70433e4e27fcda18f37073b51dea32e37cb8c51f1dd5d82c15eddc48e6b.json similarity index 100% rename from .sqlx/query-3596a70433e4e27fcda18f37073b51dea32e37cb8c51f1dd5d82c15eddc48e6b.json rename to core/lib/dal/.sqlx/query-3596a70433e4e27fcda18f37073b51dea32e37cb8c51f1dd5d82c15eddc48e6b.json diff --git a/.sqlx/query-3743b41751a141c21f1674fa581ea7a878613cf62f7fb9b94c5145dc8d1da674.json b/core/lib/dal/.sqlx/query-3743b41751a141c21f1674fa581ea7a878613cf62f7fb9b94c5145dc8d1da674.json similarity index 100% rename from .sqlx/query-3743b41751a141c21f1674fa581ea7a878613cf62f7fb9b94c5145dc8d1da674.json rename to core/lib/dal/.sqlx/query-3743b41751a141c21f1674fa581ea7a878613cf62f7fb9b94c5145dc8d1da674.json diff --git a/.sqlx/query-38a8b00e320b16e99f6ea0e5954e2f7e49cd6600bd3d56cf41795c2c9e082e4c.json b/core/lib/dal/.sqlx/query-38a8b00e320b16e99f6ea0e5954e2f7e49cd6600bd3d56cf41795c2c9e082e4c.json similarity index 100% rename from .sqlx/query-38a8b00e320b16e99f6ea0e5954e2f7e49cd6600bd3d56cf41795c2c9e082e4c.json rename to core/lib/dal/.sqlx/query-38a8b00e320b16e99f6ea0e5954e2f7e49cd6600bd3d56cf41795c2c9e082e4c.json diff --git a/.sqlx/query-39849c30cdfa1827d69313357f92c495462e5aa430fe135d1db1f9bad1e72156.json b/core/lib/dal/.sqlx/query-39849c30cdfa1827d69313357f92c495462e5aa430fe135d1db1f9bad1e72156.json similarity index 100% rename from .sqlx/query-39849c30cdfa1827d69313357f92c495462e5aa430fe135d1db1f9bad1e72156.json rename to core/lib/dal/.sqlx/query-39849c30cdfa1827d69313357f92c495462e5aa430fe135d1db1f9bad1e72156.json diff --git a/.sqlx/query-3b013b93ea4a6766162c9f0c60517a7ffc993cf436ad3aeeae82ed3e330b07bd.json b/core/lib/dal/.sqlx/query-3b013b93ea4a6766162c9f0c60517a7ffc993cf436ad3aeeae82ed3e330b07bd.json similarity index 100% rename from .sqlx/query-3b013b93ea4a6766162c9f0c60517a7ffc993cf436ad3aeeae82ed3e330b07bd.json rename to core/lib/dal/.sqlx/query-3b013b93ea4a6766162c9f0c60517a7ffc993cf436ad3aeeae82ed3e330b07bd.json diff --git a/.sqlx/query-3b3fbcffd2702047045c2f358e8ac77b63879ab97a32eed8392b48cc46116a28.json b/core/lib/dal/.sqlx/query-3b3fbcffd2702047045c2f358e8ac77b63879ab97a32eed8392b48cc46116a28.json similarity index 100% rename from .sqlx/query-3b3fbcffd2702047045c2f358e8ac77b63879ab97a32eed8392b48cc46116a28.json rename to core/lib/dal/.sqlx/query-3b3fbcffd2702047045c2f358e8ac77b63879ab97a32eed8392b48cc46116a28.json diff --git a/.sqlx/query-3b4d5009ec22f54cc7d305aa11d96ec397767a063dc21aa3add974cb9b070361.json b/core/lib/dal/.sqlx/query-3b4d5009ec22f54cc7d305aa11d96ec397767a063dc21aa3add974cb9b070361.json similarity index 100% rename from .sqlx/query-3b4d5009ec22f54cc7d305aa11d96ec397767a063dc21aa3add974cb9b070361.json rename to core/lib/dal/.sqlx/query-3b4d5009ec22f54cc7d305aa11d96ec397767a063dc21aa3add974cb9b070361.json diff --git a/.sqlx/query-3ba9bc85e3e286aadef8aad27eb38fc90b18155e3435f58d9888fa50d92042f7.json b/core/lib/dal/.sqlx/query-3ba9bc85e3e286aadef8aad27eb38fc90b18155e3435f58d9888fa50d92042f7.json similarity index 100% rename from .sqlx/query-3ba9bc85e3e286aadef8aad27eb38fc90b18155e3435f58d9888fa50d92042f7.json rename to core/lib/dal/.sqlx/query-3ba9bc85e3e286aadef8aad27eb38fc90b18155e3435f58d9888fa50d92042f7.json diff --git a/.sqlx/query-3bc70707863d7be1158de1bfb4bd51c3c1cbd9ba8df9d44a29ff96186e35b700.json b/core/lib/dal/.sqlx/query-3bc70707863d7be1158de1bfb4bd51c3c1cbd9ba8df9d44a29ff96186e35b700.json similarity index 100% rename from .sqlx/query-3bc70707863d7be1158de1bfb4bd51c3c1cbd9ba8df9d44a29ff96186e35b700.json rename to core/lib/dal/.sqlx/query-3bc70707863d7be1158de1bfb4bd51c3c1cbd9ba8df9d44a29ff96186e35b700.json diff --git a/.sqlx/query-3c531ad0631090934ed46c538249360a7eab2efc70d97b901f8948f6909d4cd2.json b/core/lib/dal/.sqlx/query-3c531ad0631090934ed46c538249360a7eab2efc70d97b901f8948f6909d4cd2.json similarity index 100% rename from .sqlx/query-3c531ad0631090934ed46c538249360a7eab2efc70d97b901f8948f6909d4cd2.json rename to core/lib/dal/.sqlx/query-3c531ad0631090934ed46c538249360a7eab2efc70d97b901f8948f6909d4cd2.json diff --git a/.sqlx/query-3c60ca71b8a3b544f5fe9d7f2fbb249026665c9fb17b6f53a2154473547cbbfd.json b/core/lib/dal/.sqlx/query-3c60ca71b8a3b544f5fe9d7f2fbb249026665c9fb17b6f53a2154473547cbbfd.json similarity index 100% rename from .sqlx/query-3c60ca71b8a3b544f5fe9d7f2fbb249026665c9fb17b6f53a2154473547cbbfd.json rename to core/lib/dal/.sqlx/query-3c60ca71b8a3b544f5fe9d7f2fbb249026665c9fb17b6f53a2154473547cbbfd.json diff --git a/.sqlx/query-3d2d005b59ba9931286452e029cfccb19a2f9663a73306dbf61a257050e2b634.json b/core/lib/dal/.sqlx/query-3d2d005b59ba9931286452e029cfccb19a2f9663a73306dbf61a257050e2b634.json similarity index 100% rename from .sqlx/query-3d2d005b59ba9931286452e029cfccb19a2f9663a73306dbf61a257050e2b634.json rename to core/lib/dal/.sqlx/query-3d2d005b59ba9931286452e029cfccb19a2f9663a73306dbf61a257050e2b634.json diff --git a/.sqlx/query-3d7536cfe7d88dceebff2125a51bcae561c0eea2b1cd8beb245b0cc66ebffcaa.json b/core/lib/dal/.sqlx/query-3d7536cfe7d88dceebff2125a51bcae561c0eea2b1cd8beb245b0cc66ebffcaa.json similarity index 100% rename from .sqlx/query-3d7536cfe7d88dceebff2125a51bcae561c0eea2b1cd8beb245b0cc66ebffcaa.json rename to core/lib/dal/.sqlx/query-3d7536cfe7d88dceebff2125a51bcae561c0eea2b1cd8beb245b0cc66ebffcaa.json diff --git a/.sqlx/query-406e51d7884cdff36632ccf97912484f0a0d76a8097b61ead5f1f20301ce524d.json b/core/lib/dal/.sqlx/query-406e51d7884cdff36632ccf97912484f0a0d76a8097b61ead5f1f20301ce524d.json similarity index 100% rename from .sqlx/query-406e51d7884cdff36632ccf97912484f0a0d76a8097b61ead5f1f20301ce524d.json rename to core/lib/dal/.sqlx/query-406e51d7884cdff36632ccf97912484f0a0d76a8097b61ead5f1f20301ce524d.json diff --git a/.sqlx/query-40c17194a2089a7d3fa6b7923c9e03def94f4bf4674def1893e2232be80f57a0.json b/core/lib/dal/.sqlx/query-40c17194a2089a7d3fa6b7923c9e03def94f4bf4674def1893e2232be80f57a0.json similarity index 100% rename from .sqlx/query-40c17194a2089a7d3fa6b7923c9e03def94f4bf4674def1893e2232be80f57a0.json rename to core/lib/dal/.sqlx/query-40c17194a2089a7d3fa6b7923c9e03def94f4bf4674def1893e2232be80f57a0.json diff --git a/.sqlx/query-41c9f45d6eb727aafad0d8c18024cee5c602d275bb812022cc8fdabf0a60e151.json b/core/lib/dal/.sqlx/query-41c9f45d6eb727aafad0d8c18024cee5c602d275bb812022cc8fdabf0a60e151.json similarity index 100% rename from .sqlx/query-41c9f45d6eb727aafad0d8c18024cee5c602d275bb812022cc8fdabf0a60e151.json rename to core/lib/dal/.sqlx/query-41c9f45d6eb727aafad0d8c18024cee5c602d275bb812022cc8fdabf0a60e151.json diff --git a/.sqlx/query-43c7e352d09f69de1a182196aea4de79b67833f17d252b5b0e8e00cd6e75b5c1.json b/core/lib/dal/.sqlx/query-43c7e352d09f69de1a182196aea4de79b67833f17d252b5b0e8e00cd6e75b5c1.json similarity index 100% rename from .sqlx/query-43c7e352d09f69de1a182196aea4de79b67833f17d252b5b0e8e00cd6e75b5c1.json rename to core/lib/dal/.sqlx/query-43c7e352d09f69de1a182196aea4de79b67833f17d252b5b0e8e00cd6e75b5c1.json diff --git a/.sqlx/query-44490ad52b8dbcd978a96677ffac5437752a4cf3ac92ec09b334089a8dc5b4ca.json b/core/lib/dal/.sqlx/query-44490ad52b8dbcd978a96677ffac5437752a4cf3ac92ec09b334089a8dc5b4ca.json similarity index 100% rename from .sqlx/query-44490ad52b8dbcd978a96677ffac5437752a4cf3ac92ec09b334089a8dc5b4ca.json rename to core/lib/dal/.sqlx/query-44490ad52b8dbcd978a96677ffac5437752a4cf3ac92ec09b334089a8dc5b4ca.json diff --git a/.sqlx/query-48c03061a662861818e3b0072caee38f07b52a709bfd5f3dbab5b4cfef463f1f.json b/core/lib/dal/.sqlx/query-48c03061a662861818e3b0072caee38f07b52a709bfd5f3dbab5b4cfef463f1f.json similarity index 100% rename from .sqlx/query-48c03061a662861818e3b0072caee38f07b52a709bfd5f3dbab5b4cfef463f1f.json rename to core/lib/dal/.sqlx/query-48c03061a662861818e3b0072caee38f07b52a709bfd5f3dbab5b4cfef463f1f.json diff --git a/.sqlx/query-4aef05b8864484c6979c93d7ce3159cf509cf27adf9afdbe61bd867e536b7e47.json b/core/lib/dal/.sqlx/query-4aef05b8864484c6979c93d7ce3159cf509cf27adf9afdbe61bd867e536b7e47.json similarity index 100% rename from .sqlx/query-4aef05b8864484c6979c93d7ce3159cf509cf27adf9afdbe61bd867e536b7e47.json rename to core/lib/dal/.sqlx/query-4aef05b8864484c6979c93d7ce3159cf509cf27adf9afdbe61bd867e536b7e47.json diff --git a/.sqlx/query-4d50dabc25d392e6b9d0dbe0e386ea7ef2c1178b1b0394a17442185b79f2d77d.json b/core/lib/dal/.sqlx/query-4d50dabc25d392e6b9d0dbe0e386ea7ef2c1178b1b0394a17442185b79f2d77d.json similarity index 100% rename from .sqlx/query-4d50dabc25d392e6b9d0dbe0e386ea7ef2c1178b1b0394a17442185b79f2d77d.json rename to core/lib/dal/.sqlx/query-4d50dabc25d392e6b9d0dbe0e386ea7ef2c1178b1b0394a17442185b79f2d77d.json diff --git a/.sqlx/query-51891ab674b8f5cf2d7c12420d1c026c3181f42a49f1f4b6e227c95641931a54.json b/core/lib/dal/.sqlx/query-51891ab674b8f5cf2d7c12420d1c026c3181f42a49f1f4b6e227c95641931a54.json similarity index 100% rename from .sqlx/query-51891ab674b8f5cf2d7c12420d1c026c3181f42a49f1f4b6e227c95641931a54.json rename to core/lib/dal/.sqlx/query-51891ab674b8f5cf2d7c12420d1c026c3181f42a49f1f4b6e227c95641931a54.json diff --git a/.sqlx/query-53182f70d83de1482110c767a8d58ee0e803255aa612a124289f53fbb78bd64a.json b/core/lib/dal/.sqlx/query-53182f70d83de1482110c767a8d58ee0e803255aa612a124289f53fbb78bd64a.json similarity index 100% rename from .sqlx/query-53182f70d83de1482110c767a8d58ee0e803255aa612a124289f53fbb78bd64a.json rename to core/lib/dal/.sqlx/query-53182f70d83de1482110c767a8d58ee0e803255aa612a124289f53fbb78bd64a.json diff --git a/.sqlx/query-532a80b0873871896dd318beba5ec427a099492905a1feee512dc43f39d10047.json b/core/lib/dal/.sqlx/query-532a80b0873871896dd318beba5ec427a099492905a1feee512dc43f39d10047.json similarity index 100% rename from .sqlx/query-532a80b0873871896dd318beba5ec427a099492905a1feee512dc43f39d10047.json rename to core/lib/dal/.sqlx/query-532a80b0873871896dd318beba5ec427a099492905a1feee512dc43f39d10047.json diff --git a/.sqlx/query-546c729829083b7eba94fea742c162d717ffcf46fdf5d2ce5d32555353b6da6b.json b/core/lib/dal/.sqlx/query-546c729829083b7eba94fea742c162d717ffcf46fdf5d2ce5d32555353b6da6b.json similarity index 100% rename from .sqlx/query-546c729829083b7eba94fea742c162d717ffcf46fdf5d2ce5d32555353b6da6b.json rename to core/lib/dal/.sqlx/query-546c729829083b7eba94fea742c162d717ffcf46fdf5d2ce5d32555353b6da6b.json diff --git a/.sqlx/query-5503575d9377785894de6cf6139a8d4768c6a803a1a90889e5a1b8254c315231.json b/core/lib/dal/.sqlx/query-5503575d9377785894de6cf6139a8d4768c6a803a1a90889e5a1b8254c315231.json similarity index 100% rename from .sqlx/query-5503575d9377785894de6cf6139a8d4768c6a803a1a90889e5a1b8254c315231.json rename to core/lib/dal/.sqlx/query-5503575d9377785894de6cf6139a8d4768c6a803a1a90889e5a1b8254c315231.json diff --git a/.sqlx/query-555f396946bdb8b84a5d77abbfc1397212b4767039a6c0e22697cf40969729af.json b/core/lib/dal/.sqlx/query-555f396946bdb8b84a5d77abbfc1397212b4767039a6c0e22697cf40969729af.json similarity index 100% rename from .sqlx/query-555f396946bdb8b84a5d77abbfc1397212b4767039a6c0e22697cf40969729af.json rename to core/lib/dal/.sqlx/query-555f396946bdb8b84a5d77abbfc1397212b4767039a6c0e22697cf40969729af.json diff --git a/.sqlx/query-55b0b4c569c0aaf9741afc85400ecd50a04799ffd36be0e17c56f47fcdbc8f60.json b/core/lib/dal/.sqlx/query-55b0b4c569c0aaf9741afc85400ecd50a04799ffd36be0e17c56f47fcdbc8f60.json similarity index 100% rename from .sqlx/query-55b0b4c569c0aaf9741afc85400ecd50a04799ffd36be0e17c56f47fcdbc8f60.json rename to core/lib/dal/.sqlx/query-55b0b4c569c0aaf9741afc85400ecd50a04799ffd36be0e17c56f47fcdbc8f60.json diff --git a/.sqlx/query-55e6f5ea121090034c8920dffb7cfb3ba0659b6fcc582e174ee80601b54f89d9.json b/core/lib/dal/.sqlx/query-55e6f5ea121090034c8920dffb7cfb3ba0659b6fcc582e174ee80601b54f89d9.json similarity index 100% rename from .sqlx/query-55e6f5ea121090034c8920dffb7cfb3ba0659b6fcc582e174ee80601b54f89d9.json rename to core/lib/dal/.sqlx/query-55e6f5ea121090034c8920dffb7cfb3ba0659b6fcc582e174ee80601b54f89d9.json diff --git a/.sqlx/query-55f4585be3d0f1a147cb10f6e59325fad494a512ba92df95439d2d7fe0f3a285.json b/core/lib/dal/.sqlx/query-55f4585be3d0f1a147cb10f6e59325fad494a512ba92df95439d2d7fe0f3a285.json similarity index 100% rename from .sqlx/query-55f4585be3d0f1a147cb10f6e59325fad494a512ba92df95439d2d7fe0f3a285.json rename to core/lib/dal/.sqlx/query-55f4585be3d0f1a147cb10f6e59325fad494a512ba92df95439d2d7fe0f3a285.json diff --git a/.sqlx/query-5659480e5d79dab3399e35539b240e7eb9f598999c28015a504605f88bf84b33.json b/core/lib/dal/.sqlx/query-5659480e5d79dab3399e35539b240e7eb9f598999c28015a504605f88bf84b33.json similarity index 100% rename from .sqlx/query-5659480e5d79dab3399e35539b240e7eb9f598999c28015a504605f88bf84b33.json rename to core/lib/dal/.sqlx/query-5659480e5d79dab3399e35539b240e7eb9f598999c28015a504605f88bf84b33.json diff --git a/.sqlx/query-57fe009542ca9dc763e3823ee73662bf3bfdda11bb57f65db4980982a4200bed.json b/core/lib/dal/.sqlx/query-57fe009542ca9dc763e3823ee73662bf3bfdda11bb57f65db4980982a4200bed.json similarity index 100% rename from .sqlx/query-57fe009542ca9dc763e3823ee73662bf3bfdda11bb57f65db4980982a4200bed.json rename to core/lib/dal/.sqlx/query-57fe009542ca9dc763e3823ee73662bf3bfdda11bb57f65db4980982a4200bed.json diff --git a/.sqlx/query-58aed39245c72d231b268ce83105bb2036d21f60d4c6934f9145730ac35c04de.json b/core/lib/dal/.sqlx/query-58aed39245c72d231b268ce83105bb2036d21f60d4c6934f9145730ac35c04de.json similarity index 100% rename from .sqlx/query-58aed39245c72d231b268ce83105bb2036d21f60d4c6934f9145730ac35c04de.json rename to core/lib/dal/.sqlx/query-58aed39245c72d231b268ce83105bb2036d21f60d4c6934f9145730ac35c04de.json diff --git a/.sqlx/query-5d341e334cbc2d38efc8a060325677d57040037da0e07cef2c7b7246851a3703.json b/core/lib/dal/.sqlx/query-5d341e334cbc2d38efc8a060325677d57040037da0e07cef2c7b7246851a3703.json similarity index 100% rename from .sqlx/query-5d341e334cbc2d38efc8a060325677d57040037da0e07cef2c7b7246851a3703.json rename to core/lib/dal/.sqlx/query-5d341e334cbc2d38efc8a060325677d57040037da0e07cef2c7b7246851a3703.json diff --git a/.sqlx/query-5d493cbce749cc5b56d4069423597b16599abaf51df0f19effe1a536376cf6a6.json b/core/lib/dal/.sqlx/query-5d493cbce749cc5b56d4069423597b16599abaf51df0f19effe1a536376cf6a6.json similarity index 100% rename from .sqlx/query-5d493cbce749cc5b56d4069423597b16599abaf51df0f19effe1a536376cf6a6.json rename to core/lib/dal/.sqlx/query-5d493cbce749cc5b56d4069423597b16599abaf51df0f19effe1a536376cf6a6.json diff --git a/.sqlx/query-5f7034d22251a893249208c5ff8fa5c8bf46bc0cea4ac2b25ecde236c30ae32d.json b/core/lib/dal/.sqlx/query-5f7034d22251a893249208c5ff8fa5c8bf46bc0cea4ac2b25ecde236c30ae32d.json similarity index 100% rename from .sqlx/query-5f7034d22251a893249208c5ff8fa5c8bf46bc0cea4ac2b25ecde236c30ae32d.json rename to core/lib/dal/.sqlx/query-5f7034d22251a893249208c5ff8fa5c8bf46bc0cea4ac2b25ecde236c30ae32d.json diff --git a/.sqlx/query-61bc330d6d1b5fddec78342c1b0f00e82b0b3ad9ae36bf4fe44d7e85b74c6f49.json b/core/lib/dal/.sqlx/query-61bc330d6d1b5fddec78342c1b0f00e82b0b3ad9ae36bf4fe44d7e85b74c6f49.json similarity index 100% rename from .sqlx/query-61bc330d6d1b5fddec78342c1b0f00e82b0b3ad9ae36bf4fe44d7e85b74c6f49.json rename to core/lib/dal/.sqlx/query-61bc330d6d1b5fddec78342c1b0f00e82b0b3ad9ae36bf4fe44d7e85b74c6f49.json diff --git a/.sqlx/query-6213f642c89d2c0a470c93b94714d21d399f860a7b986738d193871fe5cf913d.json b/core/lib/dal/.sqlx/query-6213f642c89d2c0a470c93b94714d21d399f860a7b986738d193871fe5cf913d.json similarity index 100% rename from .sqlx/query-6213f642c89d2c0a470c93b94714d21d399f860a7b986738d193871fe5cf913d.json rename to core/lib/dal/.sqlx/query-6213f642c89d2c0a470c93b94714d21d399f860a7b986738d193871fe5cf913d.json diff --git a/.sqlx/query-63f5f9bff4b2c15fa4230af2c73b5b5cc7e37dd6a607e9453e822e34ba77cdc3.json b/core/lib/dal/.sqlx/query-63f5f9bff4b2c15fa4230af2c73b5b5cc7e37dd6a607e9453e822e34ba77cdc3.json similarity index 100% rename from .sqlx/query-63f5f9bff4b2c15fa4230af2c73b5b5cc7e37dd6a607e9453e822e34ba77cdc3.json rename to core/lib/dal/.sqlx/query-63f5f9bff4b2c15fa4230af2c73b5b5cc7e37dd6a607e9453e822e34ba77cdc3.json diff --git a/.sqlx/query-65736a5b9b4ad364797dbedfc828f24785ae8bd2b4579203f05379e757a56f2b.json b/core/lib/dal/.sqlx/query-65736a5b9b4ad364797dbedfc828f24785ae8bd2b4579203f05379e757a56f2b.json similarity index 100% rename from .sqlx/query-65736a5b9b4ad364797dbedfc828f24785ae8bd2b4579203f05379e757a56f2b.json rename to core/lib/dal/.sqlx/query-65736a5b9b4ad364797dbedfc828f24785ae8bd2b4579203f05379e757a56f2b.json diff --git a/.sqlx/query-6621de90a024cc85946f17948e5c171cd0e4d38bd6e9cfec58b2d7f53a3204e1.json b/core/lib/dal/.sqlx/query-6621de90a024cc85946f17948e5c171cd0e4d38bd6e9cfec58b2d7f53a3204e1.json similarity index 100% rename from .sqlx/query-6621de90a024cc85946f17948e5c171cd0e4d38bd6e9cfec58b2d7f53a3204e1.json rename to core/lib/dal/.sqlx/query-6621de90a024cc85946f17948e5c171cd0e4d38bd6e9cfec58b2d7f53a3204e1.json diff --git a/.sqlx/query-66510caa7683ed90729cb545ac8528f012c2ecaebf6622ca1ae481045604e58d.json b/core/lib/dal/.sqlx/query-66510caa7683ed90729cb545ac8528f012c2ecaebf6622ca1ae481045604e58d.json similarity index 100% rename from .sqlx/query-66510caa7683ed90729cb545ac8528f012c2ecaebf6622ca1ae481045604e58d.json rename to core/lib/dal/.sqlx/query-66510caa7683ed90729cb545ac8528f012c2ecaebf6622ca1ae481045604e58d.json diff --git a/.sqlx/query-6692ff6c0fbb2fc94f5cd2837a43ce80f9b2b27758651ccfc09df61a4ae8a363.json b/core/lib/dal/.sqlx/query-6692ff6c0fbb2fc94f5cd2837a43ce80f9b2b27758651ccfc09df61a4ae8a363.json similarity index 100% rename from .sqlx/query-6692ff6c0fbb2fc94f5cd2837a43ce80f9b2b27758651ccfc09df61a4ae8a363.json rename to core/lib/dal/.sqlx/query-6692ff6c0fbb2fc94f5cd2837a43ce80f9b2b27758651ccfc09df61a4ae8a363.json diff --git a/.sqlx/query-67ac33ad0ad912e8db6d141e21c2e14fa4c1c4fdad16eff011011878af897946.json b/core/lib/dal/.sqlx/query-67ac33ad0ad912e8db6d141e21c2e14fa4c1c4fdad16eff011011878af897946.json similarity index 100% rename from .sqlx/query-67ac33ad0ad912e8db6d141e21c2e14fa4c1c4fdad16eff011011878af897946.json rename to core/lib/dal/.sqlx/query-67ac33ad0ad912e8db6d141e21c2e14fa4c1c4fdad16eff011011878af897946.json diff --git a/.sqlx/query-6849be0788a509e4e68acc2da4bfadbcfc343374fad173df0cc8db38419a9726.json b/core/lib/dal/.sqlx/query-6849be0788a509e4e68acc2da4bfadbcfc343374fad173df0cc8db38419a9726.json similarity index 100% rename from .sqlx/query-6849be0788a509e4e68acc2da4bfadbcfc343374fad173df0cc8db38419a9726.json rename to core/lib/dal/.sqlx/query-6849be0788a509e4e68acc2da4bfadbcfc343374fad173df0cc8db38419a9726.json diff --git a/.sqlx/query-6874b501c82e6062ab22622095070d67840b2484ea3a03ac49eb3d50ea153163.json b/core/lib/dal/.sqlx/query-6874b501c82e6062ab22622095070d67840b2484ea3a03ac49eb3d50ea153163.json similarity index 100% rename from .sqlx/query-6874b501c82e6062ab22622095070d67840b2484ea3a03ac49eb3d50ea153163.json rename to core/lib/dal/.sqlx/query-6874b501c82e6062ab22622095070d67840b2484ea3a03ac49eb3d50ea153163.json diff --git a/.sqlx/query-6ae7d3c1a3e7bd5388c39e3cc847526a96dd032a34a20e789308a9b94b9e94df.json b/core/lib/dal/.sqlx/query-6ae7d3c1a3e7bd5388c39e3cc847526a96dd032a34a20e789308a9b94b9e94df.json similarity index 100% rename from .sqlx/query-6ae7d3c1a3e7bd5388c39e3cc847526a96dd032a34a20e789308a9b94b9e94df.json rename to core/lib/dal/.sqlx/query-6ae7d3c1a3e7bd5388c39e3cc847526a96dd032a34a20e789308a9b94b9e94df.json diff --git a/.sqlx/query-6b327df84d2b3b31d02db35fd5d91a8d67abcdb743a619ed0d1b9c16206a3c20.json b/core/lib/dal/.sqlx/query-6b327df84d2b3b31d02db35fd5d91a8d67abcdb743a619ed0d1b9c16206a3c20.json similarity index 100% rename from .sqlx/query-6b327df84d2b3b31d02db35fd5d91a8d67abcdb743a619ed0d1b9c16206a3c20.json rename to core/lib/dal/.sqlx/query-6b327df84d2b3b31d02db35fd5d91a8d67abcdb743a619ed0d1b9c16206a3c20.json diff --git a/.sqlx/query-6bd3094be764e6378fe52b5bb533260b49ce42daaf9dbe8075daf0a8e0ad9914.json b/core/lib/dal/.sqlx/query-6bd3094be764e6378fe52b5bb533260b49ce42daaf9dbe8075daf0a8e0ad9914.json similarity index 100% rename from .sqlx/query-6bd3094be764e6378fe52b5bb533260b49ce42daaf9dbe8075daf0a8e0ad9914.json rename to core/lib/dal/.sqlx/query-6bd3094be764e6378fe52b5bb533260b49ce42daaf9dbe8075daf0a8e0ad9914.json diff --git a/.sqlx/query-6c0d03b1fbe6f47546bc34c6b2eab01cb2c55bf86d2c8c99abb1b7ca21cf75c0.json b/core/lib/dal/.sqlx/query-6c0d03b1fbe6f47546bc34c6b2eab01cb2c55bf86d2c8c99abb1b7ca21cf75c0.json similarity index 100% rename from .sqlx/query-6c0d03b1fbe6f47546bc34c6b2eab01cb2c55bf86d2c8c99abb1b7ca21cf75c0.json rename to core/lib/dal/.sqlx/query-6c0d03b1fbe6f47546bc34c6b2eab01cb2c55bf86d2c8c99abb1b7ca21cf75c0.json diff --git a/.sqlx/query-6c46fb3d51aeb069c09ff0cae3ea82f1af696fcc8f7484eaf255d5311589ee39.json b/core/lib/dal/.sqlx/query-6c46fb3d51aeb069c09ff0cae3ea82f1af696fcc8f7484eaf255d5311589ee39.json similarity index 100% rename from .sqlx/query-6c46fb3d51aeb069c09ff0cae3ea82f1af696fcc8f7484eaf255d5311589ee39.json rename to core/lib/dal/.sqlx/query-6c46fb3d51aeb069c09ff0cae3ea82f1af696fcc8f7484eaf255d5311589ee39.json diff --git a/.sqlx/query-6c6b8045f9dd7bdb9ada0d71974f28f7b515cf894e63fc95165c9211f71daa36.json b/core/lib/dal/.sqlx/query-6c6b8045f9dd7bdb9ada0d71974f28f7b515cf894e63fc95165c9211f71daa36.json similarity index 100% rename from .sqlx/query-6c6b8045f9dd7bdb9ada0d71974f28f7b515cf894e63fc95165c9211f71daa36.json rename to core/lib/dal/.sqlx/query-6c6b8045f9dd7bdb9ada0d71974f28f7b515cf894e63fc95165c9211f71daa36.json diff --git a/.sqlx/query-6d08cadce92f03b0596e068884854a701146f4b2dc92361f42598a5f9a72c36b.json b/core/lib/dal/.sqlx/query-6d08cadce92f03b0596e068884854a701146f4b2dc92361f42598a5f9a72c36b.json similarity index 100% rename from .sqlx/query-6d08cadce92f03b0596e068884854a701146f4b2dc92361f42598a5f9a72c36b.json rename to core/lib/dal/.sqlx/query-6d08cadce92f03b0596e068884854a701146f4b2dc92361f42598a5f9a72c36b.json diff --git a/.sqlx/query-6ed5cc84e8097c4febf6c935193f45ef713ef7f9909ce26653faceddb549a383.json b/core/lib/dal/.sqlx/query-6ed5cc84e8097c4febf6c935193f45ef713ef7f9909ce26653faceddb549a383.json similarity index 100% rename from .sqlx/query-6ed5cc84e8097c4febf6c935193f45ef713ef7f9909ce26653faceddb549a383.json rename to core/lib/dal/.sqlx/query-6ed5cc84e8097c4febf6c935193f45ef713ef7f9909ce26653faceddb549a383.json diff --git a/.sqlx/query-708b2b3e40887e6d8d2d7aa20448a58479487686d774e6b2b1391347bdafe06d.json b/core/lib/dal/.sqlx/query-708b2b3e40887e6d8d2d7aa20448a58479487686d774e6b2b1391347bdafe06d.json similarity index 100% rename from .sqlx/query-708b2b3e40887e6d8d2d7aa20448a58479487686d774e6b2b1391347bdafe06d.json rename to core/lib/dal/.sqlx/query-708b2b3e40887e6d8d2d7aa20448a58479487686d774e6b2b1391347bdafe06d.json diff --git a/.sqlx/query-72a4f50355324cce85ebaef9fa32826095e9290f0c1157094bd0c44e06012e42.json b/core/lib/dal/.sqlx/query-72a4f50355324cce85ebaef9fa32826095e9290f0c1157094bd0c44e06012e42.json similarity index 100% rename from .sqlx/query-72a4f50355324cce85ebaef9fa32826095e9290f0c1157094bd0c44e06012e42.json rename to core/lib/dal/.sqlx/query-72a4f50355324cce85ebaef9fa32826095e9290f0c1157094bd0c44e06012e42.json diff --git a/.sqlx/query-73c4bf1e35d49faaab9f7828e80f396f9d193615d70184d4327378a7fc8a5665.json b/core/lib/dal/.sqlx/query-73c4bf1e35d49faaab9f7828e80f396f9d193615d70184d4327378a7fc8a5665.json similarity index 100% rename from .sqlx/query-73c4bf1e35d49faaab9f7828e80f396f9d193615d70184d4327378a7fc8a5665.json rename to core/lib/dal/.sqlx/query-73c4bf1e35d49faaab9f7828e80f396f9d193615d70184d4327378a7fc8a5665.json diff --git a/.sqlx/query-7560ba61643a8ec8eeefbe6034226313c255ce356a9a4e25c098484d3129c914.json b/core/lib/dal/.sqlx/query-7560ba61643a8ec8eeefbe6034226313c255ce356a9a4e25c098484d3129c914.json similarity index 100% rename from .sqlx/query-7560ba61643a8ec8eeefbe6034226313c255ce356a9a4e25c098484d3129c914.json rename to core/lib/dal/.sqlx/query-7560ba61643a8ec8eeefbe6034226313c255ce356a9a4e25c098484d3129c914.json diff --git a/.sqlx/query-759b80414b5bcbfe03a0e1e15b37f92c4cfad9313b1461e12242d9becb59e0b0.json b/core/lib/dal/.sqlx/query-759b80414b5bcbfe03a0e1e15b37f92c4cfad9313b1461e12242d9becb59e0b0.json similarity index 100% rename from .sqlx/query-759b80414b5bcbfe03a0e1e15b37f92c4cfad9313b1461e12242d9becb59e0b0.json rename to core/lib/dal/.sqlx/query-759b80414b5bcbfe03a0e1e15b37f92c4cfad9313b1461e12242d9becb59e0b0.json diff --git a/.sqlx/query-75fa24c29dc312cbfa89bf1f4a04a42b4ead6964edd17bfcacb4a828492bba60.json b/core/lib/dal/.sqlx/query-75fa24c29dc312cbfa89bf1f4a04a42b4ead6964edd17bfcacb4a828492bba60.json similarity index 100% rename from .sqlx/query-75fa24c29dc312cbfa89bf1f4a04a42b4ead6964edd17bfcacb4a828492bba60.json rename to core/lib/dal/.sqlx/query-75fa24c29dc312cbfa89bf1f4a04a42b4ead6964edd17bfcacb4a828492bba60.json diff --git a/.sqlx/query-76cb9ad97b70d584b19af194576dcf2324f380932698386aa8f9751b1fa24a7b.json b/core/lib/dal/.sqlx/query-76cb9ad97b70d584b19af194576dcf2324f380932698386aa8f9751b1fa24a7b.json similarity index 100% rename from .sqlx/query-76cb9ad97b70d584b19af194576dcf2324f380932698386aa8f9751b1fa24a7b.json rename to core/lib/dal/.sqlx/query-76cb9ad97b70d584b19af194576dcf2324f380932698386aa8f9751b1fa24a7b.json diff --git a/.sqlx/query-77a43830ca31eac85a3c03d87696bf94a013e49bf50ce23f4de4968781df0796.json b/core/lib/dal/.sqlx/query-77a43830ca31eac85a3c03d87696bf94a013e49bf50ce23f4de4968781df0796.json similarity index 100% rename from .sqlx/query-77a43830ca31eac85a3c03d87696bf94a013e49bf50ce23f4de4968781df0796.json rename to core/lib/dal/.sqlx/query-77a43830ca31eac85a3c03d87696bf94a013e49bf50ce23f4de4968781df0796.json diff --git a/.sqlx/query-7af52a220958d790bd8b5b06a6e29bf769829991c7d732b13f96bcd1293263ea.json b/core/lib/dal/.sqlx/query-7af52a220958d790bd8b5b06a6e29bf769829991c7d732b13f96bcd1293263ea.json similarity index 100% rename from .sqlx/query-7af52a220958d790bd8b5b06a6e29bf769829991c7d732b13f96bcd1293263ea.json rename to core/lib/dal/.sqlx/query-7af52a220958d790bd8b5b06a6e29bf769829991c7d732b13f96bcd1293263ea.json diff --git a/.sqlx/query-7b908340613dadbbef46e2160d2d7d59a34f97285e855d5bd67f28f6f4ff1d4e.json b/core/lib/dal/.sqlx/query-7b908340613dadbbef46e2160d2d7d59a34f97285e855d5bd67f28f6f4ff1d4e.json similarity index 100% rename from .sqlx/query-7b908340613dadbbef46e2160d2d7d59a34f97285e855d5bd67f28f6f4ff1d4e.json rename to core/lib/dal/.sqlx/query-7b908340613dadbbef46e2160d2d7d59a34f97285e855d5bd67f28f6f4ff1d4e.json diff --git a/.sqlx/query-7fccc28bd829bce334f37197ee6b139e943f3ad2a41387b610606a42b7f03283.json b/core/lib/dal/.sqlx/query-7fccc28bd829bce334f37197ee6b139e943f3ad2a41387b610606a42b7f03283.json similarity index 100% rename from .sqlx/query-7fccc28bd829bce334f37197ee6b139e943f3ad2a41387b610606a42b7f03283.json rename to core/lib/dal/.sqlx/query-7fccc28bd829bce334f37197ee6b139e943f3ad2a41387b610606a42b7f03283.json diff --git a/.sqlx/query-80684de323c47ade36e5a52b99a222806762c640b7de7bf6ecdbf9c3f9842d6f.json b/core/lib/dal/.sqlx/query-80684de323c47ade36e5a52b99a222806762c640b7de7bf6ecdbf9c3f9842d6f.json similarity index 100% rename from .sqlx/query-80684de323c47ade36e5a52b99a222806762c640b7de7bf6ecdbf9c3f9842d6f.json rename to core/lib/dal/.sqlx/query-80684de323c47ade36e5a52b99a222806762c640b7de7bf6ecdbf9c3f9842d6f.json diff --git a/.sqlx/query-81869cb392e9fcbb71ceaa857af77b39429d56072f63b3530c576fb31d7a56f9.json b/core/lib/dal/.sqlx/query-81869cb392e9fcbb71ceaa857af77b39429d56072f63b3530c576fb31d7a56f9.json similarity index 100% rename from .sqlx/query-81869cb392e9fcbb71ceaa857af77b39429d56072f63b3530c576fb31d7a56f9.json rename to core/lib/dal/.sqlx/query-81869cb392e9fcbb71ceaa857af77b39429d56072f63b3530c576fb31d7a56f9.json diff --git a/.sqlx/query-8255d112d3929fd8355ba2ac9bc87f1fb2f138d9a2231477fcaae148c50dbb8a.json b/core/lib/dal/.sqlx/query-8255d112d3929fd8355ba2ac9bc87f1fb2f138d9a2231477fcaae148c50dbb8a.json similarity index 100% rename from .sqlx/query-8255d112d3929fd8355ba2ac9bc87f1fb2f138d9a2231477fcaae148c50dbb8a.json rename to core/lib/dal/.sqlx/query-8255d112d3929fd8355ba2ac9bc87f1fb2f138d9a2231477fcaae148c50dbb8a.json diff --git a/.sqlx/query-82ed556807bcd7dd5872c220b3399f9b8679d770b3d1ca755c42ee264342da03.json b/core/lib/dal/.sqlx/query-82ed556807bcd7dd5872c220b3399f9b8679d770b3d1ca755c42ee264342da03.json similarity index 100% rename from .sqlx/query-82ed556807bcd7dd5872c220b3399f9b8679d770b3d1ca755c42ee264342da03.json rename to core/lib/dal/.sqlx/query-82ed556807bcd7dd5872c220b3399f9b8679d770b3d1ca755c42ee264342da03.json diff --git a/.sqlx/query-83a931ceddf34e1c760649d613f534014b9ab9ca7725e14fb17aa050d9f35eb8.json b/core/lib/dal/.sqlx/query-83a931ceddf34e1c760649d613f534014b9ab9ca7725e14fb17aa050d9f35eb8.json similarity index 100% rename from .sqlx/query-83a931ceddf34e1c760649d613f534014b9ab9ca7725e14fb17aa050d9f35eb8.json rename to core/lib/dal/.sqlx/query-83a931ceddf34e1c760649d613f534014b9ab9ca7725e14fb17aa050d9f35eb8.json diff --git a/.sqlx/query-8625ca45ce76b8c8633d390e35e0c5f885240d99ea69140a4636b00469d08497.json b/core/lib/dal/.sqlx/query-8625ca45ce76b8c8633d390e35e0c5f885240d99ea69140a4636b00469d08497.json similarity index 100% rename from .sqlx/query-8625ca45ce76b8c8633d390e35e0c5f885240d99ea69140a4636b00469d08497.json rename to core/lib/dal/.sqlx/query-8625ca45ce76b8c8633d390e35e0c5f885240d99ea69140a4636b00469d08497.json diff --git a/.sqlx/query-86cbe509988c8775bcf738d5cb1edac2f0db60c263c1564b64c717f8ae53e44d.json b/core/lib/dal/.sqlx/query-86cbe509988c8775bcf738d5cb1edac2f0db60c263c1564b64c717f8ae53e44d.json similarity index 100% rename from .sqlx/query-86cbe509988c8775bcf738d5cb1edac2f0db60c263c1564b64c717f8ae53e44d.json rename to core/lib/dal/.sqlx/query-86cbe509988c8775bcf738d5cb1edac2f0db60c263c1564b64c717f8ae53e44d.json diff --git a/.sqlx/query-877d20634068170326ab5801b69c70aff49e60b7def3d93b9206e650c259168b.json b/core/lib/dal/.sqlx/query-877d20634068170326ab5801b69c70aff49e60b7def3d93b9206e650c259168b.json similarity index 100% rename from .sqlx/query-877d20634068170326ab5801b69c70aff49e60b7def3d93b9206e650c259168b.json rename to core/lib/dal/.sqlx/query-877d20634068170326ab5801b69c70aff49e60b7def3d93b9206e650c259168b.json diff --git a/.sqlx/query-87b3c0cb253a19ba181406bab5f30198c2651022c65eb9e04125356fcf52ddfc.json b/core/lib/dal/.sqlx/query-87b3c0cb253a19ba181406bab5f30198c2651022c65eb9e04125356fcf52ddfc.json similarity index 100% rename from .sqlx/query-87b3c0cb253a19ba181406bab5f30198c2651022c65eb9e04125356fcf52ddfc.json rename to core/lib/dal/.sqlx/query-87b3c0cb253a19ba181406bab5f30198c2651022c65eb9e04125356fcf52ddfc.json diff --git a/.sqlx/query-87f27295de500591f01ed76731df2aed7049c3f44a6d25556967ea867e0caf25.json b/core/lib/dal/.sqlx/query-87f27295de500591f01ed76731df2aed7049c3f44a6d25556967ea867e0caf25.json similarity index 100% rename from .sqlx/query-87f27295de500591f01ed76731df2aed7049c3f44a6d25556967ea867e0caf25.json rename to core/lib/dal/.sqlx/query-87f27295de500591f01ed76731df2aed7049c3f44a6d25556967ea867e0caf25.json diff --git a/.sqlx/query-88c629334e30bb9f5c81c858aa51af63b86e8da6d908d48998012231e1d66a60.json b/core/lib/dal/.sqlx/query-88c629334e30bb9f5c81c858aa51af63b86e8da6d908d48998012231e1d66a60.json similarity index 100% rename from .sqlx/query-88c629334e30bb9f5c81c858aa51af63b86e8da6d908d48998012231e1d66a60.json rename to core/lib/dal/.sqlx/query-88c629334e30bb9f5c81c858aa51af63b86e8da6d908d48998012231e1d66a60.json diff --git a/.sqlx/query-8903ba5db3f87851c12da133573b4207b69cc48b4ba648e797211631be612b69.json b/core/lib/dal/.sqlx/query-8903ba5db3f87851c12da133573b4207b69cc48b4ba648e797211631be612b69.json similarity index 100% rename from .sqlx/query-8903ba5db3f87851c12da133573b4207b69cc48b4ba648e797211631be612b69.json rename to core/lib/dal/.sqlx/query-8903ba5db3f87851c12da133573b4207b69cc48b4ba648e797211631be612b69.json diff --git a/.sqlx/query-894665c2c467bd1aaeb331b112c567e2667c63a033baa6b427bd8a0898c08bf2.json b/core/lib/dal/.sqlx/query-894665c2c467bd1aaeb331b112c567e2667c63a033baa6b427bd8a0898c08bf2.json similarity index 100% rename from .sqlx/query-894665c2c467bd1aaeb331b112c567e2667c63a033baa6b427bd8a0898c08bf2.json rename to core/lib/dal/.sqlx/query-894665c2c467bd1aaeb331b112c567e2667c63a033baa6b427bd8a0898c08bf2.json diff --git a/.sqlx/query-8a7a57ca3d4d65da3e0877c003902c690c33686c889d318b1d64bdd7fa6374db.json b/core/lib/dal/.sqlx/query-8a7a57ca3d4d65da3e0877c003902c690c33686c889d318b1d64bdd7fa6374db.json similarity index 100% rename from .sqlx/query-8a7a57ca3d4d65da3e0877c003902c690c33686c889d318b1d64bdd7fa6374db.json rename to core/lib/dal/.sqlx/query-8a7a57ca3d4d65da3e0877c003902c690c33686c889d318b1d64bdd7fa6374db.json diff --git a/.sqlx/query-8b9e5d525c026de97c0a732b1adc8dc4bd57e32dfefe1017acba9a15fc14b895.json b/core/lib/dal/.sqlx/query-8b9e5d525c026de97c0a732b1adc8dc4bd57e32dfefe1017acba9a15fc14b895.json similarity index 100% rename from .sqlx/query-8b9e5d525c026de97c0a732b1adc8dc4bd57e32dfefe1017acba9a15fc14b895.json rename to core/lib/dal/.sqlx/query-8b9e5d525c026de97c0a732b1adc8dc4bd57e32dfefe1017acba9a15fc14b895.json diff --git a/.sqlx/query-8ce0812420fbf35cbbbb0f77f850a54653a5c06c665433718f7ccbbf936f76ca.json b/core/lib/dal/.sqlx/query-8ce0812420fbf35cbbbb0f77f850a54653a5c06c665433718f7ccbbf936f76ca.json similarity index 100% rename from .sqlx/query-8ce0812420fbf35cbbbb0f77f850a54653a5c06c665433718f7ccbbf936f76ca.json rename to core/lib/dal/.sqlx/query-8ce0812420fbf35cbbbb0f77f850a54653a5c06c665433718f7ccbbf936f76ca.json diff --git a/.sqlx/query-93725851350146c6ec253a59af598fa893dbc9654d15753e4a538f021af67b60.json b/core/lib/dal/.sqlx/query-93725851350146c6ec253a59af598fa893dbc9654d15753e4a538f021af67b60.json similarity index 100% rename from .sqlx/query-93725851350146c6ec253a59af598fa893dbc9654d15753e4a538f021af67b60.json rename to core/lib/dal/.sqlx/query-93725851350146c6ec253a59af598fa893dbc9654d15753e4a538f021af67b60.json diff --git a/.sqlx/query-95ea0522a3eff6c0d2d0b1c58fd2767e112b95f4d103c27acd6f7ede108bd300.json b/core/lib/dal/.sqlx/query-95ea0522a3eff6c0d2d0b1c58fd2767e112b95f4d103c27acd6f7ede108bd300.json similarity index 100% rename from .sqlx/query-95ea0522a3eff6c0d2d0b1c58fd2767e112b95f4d103c27acd6f7ede108bd300.json rename to core/lib/dal/.sqlx/query-95ea0522a3eff6c0d2d0b1c58fd2767e112b95f4d103c27acd6f7ede108bd300.json diff --git a/.sqlx/query-966dddc881bfe6fd94b56f587424125a2633ddb6abaa129f2b12389140d83c3f.json b/core/lib/dal/.sqlx/query-966dddc881bfe6fd94b56f587424125a2633ddb6abaa129f2b12389140d83c3f.json similarity index 100% rename from .sqlx/query-966dddc881bfe6fd94b56f587424125a2633ddb6abaa129f2b12389140d83c3f.json rename to core/lib/dal/.sqlx/query-966dddc881bfe6fd94b56f587424125a2633ddb6abaa129f2b12389140d83c3f.json diff --git a/.sqlx/query-9955b9215096f781442153518c4f0a9676e26f422506545ccc90b7e8a36c8d47.json b/core/lib/dal/.sqlx/query-9955b9215096f781442153518c4f0a9676e26f422506545ccc90b7e8a36c8d47.json similarity index 100% rename from .sqlx/query-9955b9215096f781442153518c4f0a9676e26f422506545ccc90b7e8a36c8d47.json rename to core/lib/dal/.sqlx/query-9955b9215096f781442153518c4f0a9676e26f422506545ccc90b7e8a36c8d47.json diff --git a/.sqlx/query-99acb091650478fe0feb367b1d64561347b81f8931cc2addefa907c9aa9355e6.json b/core/lib/dal/.sqlx/query-99acb091650478fe0feb367b1d64561347b81f8931cc2addefa907c9aa9355e6.json similarity index 100% rename from .sqlx/query-99acb091650478fe0feb367b1d64561347b81f8931cc2addefa907c9aa9355e6.json rename to core/lib/dal/.sqlx/query-99acb091650478fe0feb367b1d64561347b81f8931cc2addefa907c9aa9355e6.json diff --git a/.sqlx/query-99d9ee2a0d0450acefa0d9b6c031e30606fddf6631c859ab03819ec476bcf005.json b/core/lib/dal/.sqlx/query-99d9ee2a0d0450acefa0d9b6c031e30606fddf6631c859ab03819ec476bcf005.json similarity index 100% rename from .sqlx/query-99d9ee2a0d0450acefa0d9b6c031e30606fddf6631c859ab03819ec476bcf005.json rename to core/lib/dal/.sqlx/query-99d9ee2a0d0450acefa0d9b6c031e30606fddf6631c859ab03819ec476bcf005.json diff --git a/.sqlx/query-99dd6f04e82585d81ac23bc4871578179e6269c6ff36877cedee264067ccdafc.json b/core/lib/dal/.sqlx/query-99dd6f04e82585d81ac23bc4871578179e6269c6ff36877cedee264067ccdafc.json similarity index 100% rename from .sqlx/query-99dd6f04e82585d81ac23bc4871578179e6269c6ff36877cedee264067ccdafc.json rename to core/lib/dal/.sqlx/query-99dd6f04e82585d81ac23bc4871578179e6269c6ff36877cedee264067ccdafc.json diff --git a/.sqlx/query-9c2a5f32c627d3a5c6f1e87b31ce3b0fd67aa1f5f7ea0de673a2fbe1f742db86.json b/core/lib/dal/.sqlx/query-9c2a5f32c627d3a5c6f1e87b31ce3b0fd67aa1f5f7ea0de673a2fbe1f742db86.json similarity index 100% rename from .sqlx/query-9c2a5f32c627d3a5c6f1e87b31ce3b0fd67aa1f5f7ea0de673a2fbe1f742db86.json rename to core/lib/dal/.sqlx/query-9c2a5f32c627d3a5c6f1e87b31ce3b0fd67aa1f5f7ea0de673a2fbe1f742db86.json diff --git a/.sqlx/query-9cfcde703a48b110791d2ae1103c9317c01d6e35db3b07d0a31f436e7e3c7c40.json b/core/lib/dal/.sqlx/query-9cfcde703a48b110791d2ae1103c9317c01d6e35db3b07d0a31f436e7e3c7c40.json similarity index 100% rename from .sqlx/query-9cfcde703a48b110791d2ae1103c9317c01d6e35db3b07d0a31f436e7e3c7c40.json rename to core/lib/dal/.sqlx/query-9cfcde703a48b110791d2ae1103c9317c01d6e35db3b07d0a31f436e7e3c7c40.json diff --git a/.sqlx/query-9de5acb3de1b96ff8eb62a6324e8e221a8ef9014458cc7f1dbc60c056a0768a0.json b/core/lib/dal/.sqlx/query-9de5acb3de1b96ff8eb62a6324e8e221a8ef9014458cc7f1dbc60c056a0768a0.json similarity index 100% rename from .sqlx/query-9de5acb3de1b96ff8eb62a6324e8e221a8ef9014458cc7f1dbc60c056a0768a0.json rename to core/lib/dal/.sqlx/query-9de5acb3de1b96ff8eb62a6324e8e221a8ef9014458cc7f1dbc60c056a0768a0.json diff --git a/.sqlx/query-9ee07a22405279e1e44d47ec5226a834aeac9156b974ff225d734683c1905469.json b/core/lib/dal/.sqlx/query-9ee07a22405279e1e44d47ec5226a834aeac9156b974ff225d734683c1905469.json similarity index 100% rename from .sqlx/query-9ee07a22405279e1e44d47ec5226a834aeac9156b974ff225d734683c1905469.json rename to core/lib/dal/.sqlx/query-9ee07a22405279e1e44d47ec5226a834aeac9156b974ff225d734683c1905469.json diff --git a/.sqlx/query-9f637f37dc3a29ce7412ab4347071bd180729779a0e98ae7a6bb4386aca99716.json b/core/lib/dal/.sqlx/query-9f637f37dc3a29ce7412ab4347071bd180729779a0e98ae7a6bb4386aca99716.json similarity index 100% rename from .sqlx/query-9f637f37dc3a29ce7412ab4347071bd180729779a0e98ae7a6bb4386aca99716.json rename to core/lib/dal/.sqlx/query-9f637f37dc3a29ce7412ab4347071bd180729779a0e98ae7a6bb4386aca99716.json diff --git a/.sqlx/query-a115f795672787fe25bfaa8fd345094de508af93f4085be7cf3b54b1e8ecdadd.json b/core/lib/dal/.sqlx/query-a115f795672787fe25bfaa8fd345094de508af93f4085be7cf3b54b1e8ecdadd.json similarity index 100% rename from .sqlx/query-a115f795672787fe25bfaa8fd345094de508af93f4085be7cf3b54b1e8ecdadd.json rename to core/lib/dal/.sqlx/query-a115f795672787fe25bfaa8fd345094de508af93f4085be7cf3b54b1e8ecdadd.json diff --git a/.sqlx/query-a1f4334b6bc1642c1bc0ff4ffa34470914b52e2d714e9deb903d62a5d66f0e04.json b/core/lib/dal/.sqlx/query-a1f4334b6bc1642c1bc0ff4ffa34470914b52e2d714e9deb903d62a5d66f0e04.json similarity index 100% rename from .sqlx/query-a1f4334b6bc1642c1bc0ff4ffa34470914b52e2d714e9deb903d62a5d66f0e04.json rename to core/lib/dal/.sqlx/query-a1f4334b6bc1642c1bc0ff4ffa34470914b52e2d714e9deb903d62a5d66f0e04.json diff --git a/.sqlx/query-a2d02b71e3dcc29a2c0c20b44392cfbaf09164aecfa5eed8d7142518ad96abea.json b/core/lib/dal/.sqlx/query-a2d02b71e3dcc29a2c0c20b44392cfbaf09164aecfa5eed8d7142518ad96abea.json similarity index 100% rename from .sqlx/query-a2d02b71e3dcc29a2c0c20b44392cfbaf09164aecfa5eed8d7142518ad96abea.json rename to core/lib/dal/.sqlx/query-a2d02b71e3dcc29a2c0c20b44392cfbaf09164aecfa5eed8d7142518ad96abea.json diff --git a/.sqlx/query-a48c92f557e5e3a2674ce0dee9cd92f5a547150590b8c221c4065eab11175c7a.json b/core/lib/dal/.sqlx/query-a48c92f557e5e3a2674ce0dee9cd92f5a547150590b8c221c4065eab11175c7a.json similarity index 100% rename from .sqlx/query-a48c92f557e5e3a2674ce0dee9cd92f5a547150590b8c221c4065eab11175c7a.json rename to core/lib/dal/.sqlx/query-a48c92f557e5e3a2674ce0dee9cd92f5a547150590b8c221c4065eab11175c7a.json diff --git a/.sqlx/query-a4a4b0bfbe05eac100c42a717e8d7cbb0bc526ebe61a07f735d4ab587058b22c.json b/core/lib/dal/.sqlx/query-a4a4b0bfbe05eac100c42a717e8d7cbb0bc526ebe61a07f735d4ab587058b22c.json similarity index 100% rename from .sqlx/query-a4a4b0bfbe05eac100c42a717e8d7cbb0bc526ebe61a07f735d4ab587058b22c.json rename to core/lib/dal/.sqlx/query-a4a4b0bfbe05eac100c42a717e8d7cbb0bc526ebe61a07f735d4ab587058b22c.json diff --git a/.sqlx/query-a4fcd075b68467bb119e49e6b20a69138206dfeb41f3daff4a3eef1de0bed4e4.json b/core/lib/dal/.sqlx/query-a4fcd075b68467bb119e49e6b20a69138206dfeb41f3daff4a3eef1de0bed4e4.json similarity index 100% rename from .sqlx/query-a4fcd075b68467bb119e49e6b20a69138206dfeb41f3daff4a3eef1de0bed4e4.json rename to core/lib/dal/.sqlx/query-a4fcd075b68467bb119e49e6b20a69138206dfeb41f3daff4a3eef1de0bed4e4.json diff --git a/.sqlx/query-a74d029f58801ec05d8d14a3b065d93e391600ab9da2e5fd4e8b139ab3d77583.json b/core/lib/dal/.sqlx/query-a74d029f58801ec05d8d14a3b065d93e391600ab9da2e5fd4e8b139ab3d77583.json similarity index 100% rename from .sqlx/query-a74d029f58801ec05d8d14a3b065d93e391600ab9da2e5fd4e8b139ab3d77583.json rename to core/lib/dal/.sqlx/query-a74d029f58801ec05d8d14a3b065d93e391600ab9da2e5fd4e8b139ab3d77583.json diff --git a/.sqlx/query-a8dad09a54cc991706141da557dde45f8f3f3b6cf2e4136f25a1c3ab85d92668.json b/core/lib/dal/.sqlx/query-a8dad09a54cc991706141da557dde45f8f3f3b6cf2e4136f25a1c3ab85d92668.json similarity index 100% rename from .sqlx/query-a8dad09a54cc991706141da557dde45f8f3f3b6cf2e4136f25a1c3ab85d92668.json rename to core/lib/dal/.sqlx/query-a8dad09a54cc991706141da557dde45f8f3f3b6cf2e4136f25a1c3ab85d92668.json diff --git a/.sqlx/query-a91c23c4d33771122cec2589c6fe2757dbc13be6b30f5840744e5e0569adc66e.json b/core/lib/dal/.sqlx/query-a91c23c4d33771122cec2589c6fe2757dbc13be6b30f5840744e5e0569adc66e.json similarity index 100% rename from .sqlx/query-a91c23c4d33771122cec2589c6fe2757dbc13be6b30f5840744e5e0569adc66e.json rename to core/lib/dal/.sqlx/query-a91c23c4d33771122cec2589c6fe2757dbc13be6b30f5840744e5e0569adc66e.json diff --git a/.sqlx/query-aac861efb4acb81d5cefa598c822bef649a6db197a36aca098cd8054909d82e9.json b/core/lib/dal/.sqlx/query-aac861efb4acb81d5cefa598c822bef649a6db197a36aca098cd8054909d82e9.json similarity index 100% rename from .sqlx/query-aac861efb4acb81d5cefa598c822bef649a6db197a36aca098cd8054909d82e9.json rename to core/lib/dal/.sqlx/query-aac861efb4acb81d5cefa598c822bef649a6db197a36aca098cd8054909d82e9.json diff --git a/.sqlx/query-ab68f07dc6f3ec66200df109527877866bbdd1f8c359d97538125756fd05a2ab.json b/core/lib/dal/.sqlx/query-ab68f07dc6f3ec66200df109527877866bbdd1f8c359d97538125756fd05a2ab.json similarity index 100% rename from .sqlx/query-ab68f07dc6f3ec66200df109527877866bbdd1f8c359d97538125756fd05a2ab.json rename to core/lib/dal/.sqlx/query-ab68f07dc6f3ec66200df109527877866bbdd1f8c359d97538125756fd05a2ab.json diff --git a/.sqlx/query-ac505ae6cfc744b07b52997db789bdc9efc6b89fc0444caf8271edd7dfe4a3bc.json b/core/lib/dal/.sqlx/query-ac505ae6cfc744b07b52997db789bdc9efc6b89fc0444caf8271edd7dfe4a3bc.json similarity index 100% rename from .sqlx/query-ac505ae6cfc744b07b52997db789bdc9efc6b89fc0444caf8271edd7dfe4a3bc.json rename to core/lib/dal/.sqlx/query-ac505ae6cfc744b07b52997db789bdc9efc6b89fc0444caf8271edd7dfe4a3bc.json diff --git a/.sqlx/query-acc8925d50a4205c0bc8b98647e43a892f5a0427ca2635946c4f9dfafa8bf0db.json b/core/lib/dal/.sqlx/query-acc8925d50a4205c0bc8b98647e43a892f5a0427ca2635946c4f9dfafa8bf0db.json similarity index 100% rename from .sqlx/query-acc8925d50a4205c0bc8b98647e43a892f5a0427ca2635946c4f9dfafa8bf0db.json rename to core/lib/dal/.sqlx/query-acc8925d50a4205c0bc8b98647e43a892f5a0427ca2635946c4f9dfafa8bf0db.json diff --git a/.sqlx/query-ada54322a28012b1b761f3631c4cd6ca26aa2fa565fcf208b6985f461c1868f2.json b/core/lib/dal/.sqlx/query-ada54322a28012b1b761f3631c4cd6ca26aa2fa565fcf208b6985f461c1868f2.json similarity index 100% rename from .sqlx/query-ada54322a28012b1b761f3631c4cd6ca26aa2fa565fcf208b6985f461c1868f2.json rename to core/lib/dal/.sqlx/query-ada54322a28012b1b761f3631c4cd6ca26aa2fa565fcf208b6985f461c1868f2.json diff --git a/.sqlx/query-ae204503b0a682a9edc4d7bd7430457113e073b392c569c077d719941d1e37aa.json b/core/lib/dal/.sqlx/query-ae204503b0a682a9edc4d7bd7430457113e073b392c569c077d719941d1e37aa.json similarity index 100% rename from .sqlx/query-ae204503b0a682a9edc4d7bd7430457113e073b392c569c077d719941d1e37aa.json rename to core/lib/dal/.sqlx/query-ae204503b0a682a9edc4d7bd7430457113e073b392c569c077d719941d1e37aa.json diff --git a/.sqlx/query-aeda34b1beadca72e3e600ea9ae63f436a4f16dbeb784d0d28be392ad96b1c49.json b/core/lib/dal/.sqlx/query-aeda34b1beadca72e3e600ea9ae63f436a4f16dbeb784d0d28be392ad96b1c49.json similarity index 100% rename from .sqlx/query-aeda34b1beadca72e3e600ea9ae63f436a4f16dbeb784d0d28be392ad96b1c49.json rename to core/lib/dal/.sqlx/query-aeda34b1beadca72e3e600ea9ae63f436a4f16dbeb784d0d28be392ad96b1c49.json diff --git a/.sqlx/query-aefea1f3e87f28791cc547f193a895006e23ec73018f4b4e0a364a741f5c9781.json b/core/lib/dal/.sqlx/query-aefea1f3e87f28791cc547f193a895006e23ec73018f4b4e0a364a741f5c9781.json similarity index 100% rename from .sqlx/query-aefea1f3e87f28791cc547f193a895006e23ec73018f4b4e0a364a741f5c9781.json rename to core/lib/dal/.sqlx/query-aefea1f3e87f28791cc547f193a895006e23ec73018f4b4e0a364a741f5c9781.json diff --git a/.sqlx/query-b259e6bacd98fa68003e0c87bb28cc77bd2dcee4a04d1afc9779714854623a79.json b/core/lib/dal/.sqlx/query-b259e6bacd98fa68003e0c87bb28cc77bd2dcee4a04d1afc9779714854623a79.json similarity index 100% rename from .sqlx/query-b259e6bacd98fa68003e0c87bb28cc77bd2dcee4a04d1afc9779714854623a79.json rename to core/lib/dal/.sqlx/query-b259e6bacd98fa68003e0c87bb28cc77bd2dcee4a04d1afc9779714854623a79.json diff --git a/.sqlx/query-b452354c888bfc19b5f4012582061b86b1abd915739533f9982fea9d8e21b9e9.json b/core/lib/dal/.sqlx/query-b452354c888bfc19b5f4012582061b86b1abd915739533f9982fea9d8e21b9e9.json similarity index 100% rename from .sqlx/query-b452354c888bfc19b5f4012582061b86b1abd915739533f9982fea9d8e21b9e9.json rename to core/lib/dal/.sqlx/query-b452354c888bfc19b5f4012582061b86b1abd915739533f9982fea9d8e21b9e9.json diff --git a/.sqlx/query-b47a2961dc2f1347864682c572dd1f5e03924dbf6dd1e824d4aca837e604b7e9.json b/core/lib/dal/.sqlx/query-b47a2961dc2f1347864682c572dd1f5e03924dbf6dd1e824d4aca837e604b7e9.json similarity index 100% rename from .sqlx/query-b47a2961dc2f1347864682c572dd1f5e03924dbf6dd1e824d4aca837e604b7e9.json rename to core/lib/dal/.sqlx/query-b47a2961dc2f1347864682c572dd1f5e03924dbf6dd1e824d4aca837e604b7e9.json diff --git a/.sqlx/query-b49478150dbc8731c531ef3eddc0c2cfff08e6fef3c3824d20dfdf2d0f73e671.json b/core/lib/dal/.sqlx/query-b49478150dbc8731c531ef3eddc0c2cfff08e6fef3c3824d20dfdf2d0f73e671.json similarity index 100% rename from .sqlx/query-b49478150dbc8731c531ef3eddc0c2cfff08e6fef3c3824d20dfdf2d0f73e671.json rename to core/lib/dal/.sqlx/query-b49478150dbc8731c531ef3eddc0c2cfff08e6fef3c3824d20dfdf2d0f73e671.json diff --git a/.sqlx/query-b4a0444897b60c7061363a48b2b5386a2fd53492f3df05545edbfb0ec0f059d2.json b/core/lib/dal/.sqlx/query-b4a0444897b60c7061363a48b2b5386a2fd53492f3df05545edbfb0ec0f059d2.json similarity index 100% rename from .sqlx/query-b4a0444897b60c7061363a48b2b5386a2fd53492f3df05545edbfb0ec0f059d2.json rename to core/lib/dal/.sqlx/query-b4a0444897b60c7061363a48b2b5386a2fd53492f3df05545edbfb0ec0f059d2.json diff --git a/.sqlx/query-b5fd77f515fe168908cc90e44d0697e36b3c2a997038c30553f7727cdfa17361.json b/core/lib/dal/.sqlx/query-b5fd77f515fe168908cc90e44d0697e36b3c2a997038c30553f7727cdfa17361.json similarity index 100% rename from .sqlx/query-b5fd77f515fe168908cc90e44d0697e36b3c2a997038c30553f7727cdfa17361.json rename to core/lib/dal/.sqlx/query-b5fd77f515fe168908cc90e44d0697e36b3c2a997038c30553f7727cdfa17361.json diff --git a/.sqlx/query-b63ee98d4708c8121a287becb7e1973d18d45c4a200a60d318cdb1222d63ccaa.json b/core/lib/dal/.sqlx/query-b63ee98d4708c8121a287becb7e1973d18d45c4a200a60d318cdb1222d63ccaa.json similarity index 100% rename from .sqlx/query-b63ee98d4708c8121a287becb7e1973d18d45c4a200a60d318cdb1222d63ccaa.json rename to core/lib/dal/.sqlx/query-b63ee98d4708c8121a287becb7e1973d18d45c4a200a60d318cdb1222d63ccaa.json diff --git a/.sqlx/query-b6837d2deed935da748339538c2c332a122d0b88271ae0127c65c4612b41a619.json b/core/lib/dal/.sqlx/query-b6837d2deed935da748339538c2c332a122d0b88271ae0127c65c4612b41a619.json similarity index 100% rename from .sqlx/query-b6837d2deed935da748339538c2c332a122d0b88271ae0127c65c4612b41a619.json rename to core/lib/dal/.sqlx/query-b6837d2deed935da748339538c2c332a122d0b88271ae0127c65c4612b41a619.json diff --git a/.sqlx/query-b75e3d2fecbf5d85e93848b7a35180abbd76956e073432af8d8500327b74e488.json b/core/lib/dal/.sqlx/query-b75e3d2fecbf5d85e93848b7a35180abbd76956e073432af8d8500327b74e488.json similarity index 100% rename from .sqlx/query-b75e3d2fecbf5d85e93848b7a35180abbd76956e073432af8d8500327b74e488.json rename to core/lib/dal/.sqlx/query-b75e3d2fecbf5d85e93848b7a35180abbd76956e073432af8d8500327b74e488.json diff --git a/.sqlx/query-b7bf6999002dd89dc1224468ca79c9a85e3c24fca1bf87905f7fc68fe2ce3276.json b/core/lib/dal/.sqlx/query-b7bf6999002dd89dc1224468ca79c9a85e3c24fca1bf87905f7fc68fe2ce3276.json similarity index 100% rename from .sqlx/query-b7bf6999002dd89dc1224468ca79c9a85e3c24fca1bf87905f7fc68fe2ce3276.json rename to core/lib/dal/.sqlx/query-b7bf6999002dd89dc1224468ca79c9a85e3c24fca1bf87905f7fc68fe2ce3276.json diff --git a/.sqlx/query-b95b63f22afee3b186da4284a0a1cc9d3523a392fd2011491c6017400f313a16.json b/core/lib/dal/.sqlx/query-b95b63f22afee3b186da4284a0a1cc9d3523a392fd2011491c6017400f313a16.json similarity index 100% rename from .sqlx/query-b95b63f22afee3b186da4284a0a1cc9d3523a392fd2011491c6017400f313a16.json rename to core/lib/dal/.sqlx/query-b95b63f22afee3b186da4284a0a1cc9d3523a392fd2011491c6017400f313a16.json diff --git a/.sqlx/query-b9f77e6c15f9e635024b73f1fc985c5196c431363802b6b988939c99853b9c97.json b/core/lib/dal/.sqlx/query-b9f77e6c15f9e635024b73f1fc985c5196c431363802b6b988939c99853b9c97.json similarity index 100% rename from .sqlx/query-b9f77e6c15f9e635024b73f1fc985c5196c431363802b6b988939c99853b9c97.json rename to core/lib/dal/.sqlx/query-b9f77e6c15f9e635024b73f1fc985c5196c431363802b6b988939c99853b9c97.json diff --git a/.sqlx/query-ba1b6c4588ea3d3b138e03a63ef1731a10b332fec68f4a1e56edec4df71ccaff.json b/core/lib/dal/.sqlx/query-ba1b6c4588ea3d3b138e03a63ef1731a10b332fec68f4a1e56edec4df71ccaff.json similarity index 100% rename from .sqlx/query-ba1b6c4588ea3d3b138e03a63ef1731a10b332fec68f4a1e56edec4df71ccaff.json rename to core/lib/dal/.sqlx/query-ba1b6c4588ea3d3b138e03a63ef1731a10b332fec68f4a1e56edec4df71ccaff.json diff --git a/.sqlx/query-ba2343a38e37d104786f9276d91f67d2ef1428c61ae84003c9b52b03204d1f0a.json b/core/lib/dal/.sqlx/query-ba2343a38e37d104786f9276d91f67d2ef1428c61ae84003c9b52b03204d1f0a.json similarity index 100% rename from .sqlx/query-ba2343a38e37d104786f9276d91f67d2ef1428c61ae84003c9b52b03204d1f0a.json rename to core/lib/dal/.sqlx/query-ba2343a38e37d104786f9276d91f67d2ef1428c61ae84003c9b52b03204d1f0a.json diff --git a/.sqlx/query-bab1857df66bbef57705ae7796161f3a71f5c6737e08745a37b41b22f4dfd030.json b/core/lib/dal/.sqlx/query-bab1857df66bbef57705ae7796161f3a71f5c6737e08745a37b41b22f4dfd030.json similarity index 100% rename from .sqlx/query-bab1857df66bbef57705ae7796161f3a71f5c6737e08745a37b41b22f4dfd030.json rename to core/lib/dal/.sqlx/query-bab1857df66bbef57705ae7796161f3a71f5c6737e08745a37b41b22f4dfd030.json diff --git a/.sqlx/query-bd51c9d93b103292f5acbdb266ba4b4e2af48907fa9321064ddb24ac02ab17cd.json b/core/lib/dal/.sqlx/query-bd51c9d93b103292f5acbdb266ba4b4e2af48907fa9321064ddb24ac02ab17cd.json similarity index 100% rename from .sqlx/query-bd51c9d93b103292f5acbdb266ba4b4e2af48907fa9321064ddb24ac02ab17cd.json rename to core/lib/dal/.sqlx/query-bd51c9d93b103292f5acbdb266ba4b4e2af48907fa9321064ddb24ac02ab17cd.json diff --git a/.sqlx/query-be2c8e525d6867c0d2bd254c73ef1719fd1284af1dbb60ea128550224b52da93.json b/core/lib/dal/.sqlx/query-be2c8e525d6867c0d2bd254c73ef1719fd1284af1dbb60ea128550224b52da93.json similarity index 100% rename from .sqlx/query-be2c8e525d6867c0d2bd254c73ef1719fd1284af1dbb60ea128550224b52da93.json rename to core/lib/dal/.sqlx/query-be2c8e525d6867c0d2bd254c73ef1719fd1284af1dbb60ea128550224b52da93.json diff --git a/.sqlx/query-bfc84bcf0985446b337467dd1da709dbee508ad6d1cae43e477cf1bef8cb4aa9.json b/core/lib/dal/.sqlx/query-bfc84bcf0985446b337467dd1da709dbee508ad6d1cae43e477cf1bef8cb4aa9.json similarity index 100% rename from .sqlx/query-bfc84bcf0985446b337467dd1da709dbee508ad6d1cae43e477cf1bef8cb4aa9.json rename to core/lib/dal/.sqlx/query-bfc84bcf0985446b337467dd1da709dbee508ad6d1cae43e477cf1bef8cb4aa9.json diff --git a/.sqlx/query-c02f404ce9b0f92b8052ef6f3eaabda70cb9c56ae3e30dc0a8257e43d6714155.json b/core/lib/dal/.sqlx/query-c02f404ce9b0f92b8052ef6f3eaabda70cb9c56ae3e30dc0a8257e43d6714155.json similarity index 100% rename from .sqlx/query-c02f404ce9b0f92b8052ef6f3eaabda70cb9c56ae3e30dc0a8257e43d6714155.json rename to core/lib/dal/.sqlx/query-c02f404ce9b0f92b8052ef6f3eaabda70cb9c56ae3e30dc0a8257e43d6714155.json diff --git a/.sqlx/query-c03df29f4661fa47c1412bd82ba379f3b2e9ff1bc6e8e38f473fb4950c8e4b77.json b/core/lib/dal/.sqlx/query-c03df29f4661fa47c1412bd82ba379f3b2e9ff1bc6e8e38f473fb4950c8e4b77.json similarity index 100% rename from .sqlx/query-c03df29f4661fa47c1412bd82ba379f3b2e9ff1bc6e8e38f473fb4950c8e4b77.json rename to core/lib/dal/.sqlx/query-c03df29f4661fa47c1412bd82ba379f3b2e9ff1bc6e8e38f473fb4950c8e4b77.json diff --git a/.sqlx/query-c139df45a977290d1c2c7987fb9c1d66aeaeb6e2d36fddcf96775f01716a8a74.json b/core/lib/dal/.sqlx/query-c139df45a977290d1c2c7987fb9c1d66aeaeb6e2d36fddcf96775f01716a8a74.json similarity index 100% rename from .sqlx/query-c139df45a977290d1c2c7987fb9c1d66aeaeb6e2d36fddcf96775f01716a8a74.json rename to core/lib/dal/.sqlx/query-c139df45a977290d1c2c7987fb9c1d66aeaeb6e2d36fddcf96775f01716a8a74.json diff --git a/.sqlx/query-c14837e92dbb02f2fde7109f524432d865852afe0c60e11a2c1800d30599aa61.json b/core/lib/dal/.sqlx/query-c14837e92dbb02f2fde7109f524432d865852afe0c60e11a2c1800d30599aa61.json similarity index 100% rename from .sqlx/query-c14837e92dbb02f2fde7109f524432d865852afe0c60e11a2c1800d30599aa61.json rename to core/lib/dal/.sqlx/query-c14837e92dbb02f2fde7109f524432d865852afe0c60e11a2c1800d30599aa61.json diff --git a/.sqlx/query-c195037dcf6031a90f407f652657956350786f3596c7302bdeb8d813f9fbf621.json b/core/lib/dal/.sqlx/query-c195037dcf6031a90f407f652657956350786f3596c7302bdeb8d813f9fbf621.json similarity index 100% rename from .sqlx/query-c195037dcf6031a90f407f652657956350786f3596c7302bdeb8d813f9fbf621.json rename to core/lib/dal/.sqlx/query-c195037dcf6031a90f407f652657956350786f3596c7302bdeb8d813f9fbf621.json diff --git a/.sqlx/query-c2fe6a5476e69c9588eec73baba9d0e2d571533d4d5f683919987b6f8cbb00e0.json b/core/lib/dal/.sqlx/query-c2fe6a5476e69c9588eec73baba9d0e2d571533d4d5f683919987b6f8cbb00e0.json similarity index 100% rename from .sqlx/query-c2fe6a5476e69c9588eec73baba9d0e2d571533d4d5f683919987b6f8cbb00e0.json rename to core/lib/dal/.sqlx/query-c2fe6a5476e69c9588eec73baba9d0e2d571533d4d5f683919987b6f8cbb00e0.json diff --git a/.sqlx/query-c36abacc705a2244d423599779e38d60d6e93bcb34fd20422e227714fccbf6b7.json b/core/lib/dal/.sqlx/query-c36abacc705a2244d423599779e38d60d6e93bcb34fd20422e227714fccbf6b7.json similarity index 100% rename from .sqlx/query-c36abacc705a2244d423599779e38d60d6e93bcb34fd20422e227714fccbf6b7.json rename to core/lib/dal/.sqlx/query-c36abacc705a2244d423599779e38d60d6e93bcb34fd20422e227714fccbf6b7.json diff --git a/.sqlx/query-c37432fabd092fa235fc70e11430fb28594859564a0f888eae748ad1f9fcede5.json b/core/lib/dal/.sqlx/query-c37432fabd092fa235fc70e11430fb28594859564a0f888eae748ad1f9fcede5.json similarity index 100% rename from .sqlx/query-c37432fabd092fa235fc70e11430fb28594859564a0f888eae748ad1f9fcede5.json rename to core/lib/dal/.sqlx/query-c37432fabd092fa235fc70e11430fb28594859564a0f888eae748ad1f9fcede5.json diff --git a/.sqlx/query-c4426ae84862e720673485e3b59c116162becce06841476128f864b6028129df.json b/core/lib/dal/.sqlx/query-c4426ae84862e720673485e3b59c116162becce06841476128f864b6028129df.json similarity index 100% rename from .sqlx/query-c4426ae84862e720673485e3b59c116162becce06841476128f864b6028129df.json rename to core/lib/dal/.sqlx/query-c4426ae84862e720673485e3b59c116162becce06841476128f864b6028129df.json diff --git a/.sqlx/query-c5656667e5610ffb33e7b977ac92b7c4d79cbd404e0267794ec203df0cbb169d.json b/core/lib/dal/.sqlx/query-c5656667e5610ffb33e7b977ac92b7c4d79cbd404e0267794ec203df0cbb169d.json similarity index 100% rename from .sqlx/query-c5656667e5610ffb33e7b977ac92b7c4d79cbd404e0267794ec203df0cbb169d.json rename to core/lib/dal/.sqlx/query-c5656667e5610ffb33e7b977ac92b7c4d79cbd404e0267794ec203df0cbb169d.json diff --git a/.sqlx/query-c6d523c6ae857022318350a2f210d7eaeeb4549ed59b58f8d984be2a22a80355.json b/core/lib/dal/.sqlx/query-c6d523c6ae857022318350a2f210d7eaeeb4549ed59b58f8d984be2a22a80355.json similarity index 100% rename from .sqlx/query-c6d523c6ae857022318350a2f210d7eaeeb4549ed59b58f8d984be2a22a80355.json rename to core/lib/dal/.sqlx/query-c6d523c6ae857022318350a2f210d7eaeeb4549ed59b58f8d984be2a22a80355.json diff --git a/.sqlx/query-c809f42a221b18a767e9dd0286503d8bd356f2f9cc249cd8b90caa5a8b5918e3.json b/core/lib/dal/.sqlx/query-c809f42a221b18a767e9dd0286503d8bd356f2f9cc249cd8b90caa5a8b5918e3.json similarity index 100% rename from .sqlx/query-c809f42a221b18a767e9dd0286503d8bd356f2f9cc249cd8b90caa5a8b5918e3.json rename to core/lib/dal/.sqlx/query-c809f42a221b18a767e9dd0286503d8bd356f2f9cc249cd8b90caa5a8b5918e3.json diff --git a/.sqlx/query-c8155c4e4701fc771918ac1bb4d16f8cc32e365e2ffbd17dc99885de427f2777.json b/core/lib/dal/.sqlx/query-c8155c4e4701fc771918ac1bb4d16f8cc32e365e2ffbd17dc99885de427f2777.json similarity index 100% rename from .sqlx/query-c8155c4e4701fc771918ac1bb4d16f8cc32e365e2ffbd17dc99885de427f2777.json rename to core/lib/dal/.sqlx/query-c8155c4e4701fc771918ac1bb4d16f8cc32e365e2ffbd17dc99885de427f2777.json diff --git a/.sqlx/query-c9e05ebc7b61c1f409c330bc110bed26c831730944237b74bed98869c83b3ca5.json b/core/lib/dal/.sqlx/query-c9e05ebc7b61c1f409c330bc110bed26c831730944237b74bed98869c83b3ca5.json similarity index 100% rename from .sqlx/query-c9e05ebc7b61c1f409c330bc110bed26c831730944237b74bed98869c83b3ca5.json rename to core/lib/dal/.sqlx/query-c9e05ebc7b61c1f409c330bc110bed26c831730944237b74bed98869c83b3ca5.json diff --git a/.sqlx/query-cb0a9f6137fb6bee5d17d644714b3b22ea2cd184932fcd59f5931239c7a78003.json b/core/lib/dal/.sqlx/query-cb0a9f6137fb6bee5d17d644714b3b22ea2cd184932fcd59f5931239c7a78003.json similarity index 100% rename from .sqlx/query-cb0a9f6137fb6bee5d17d644714b3b22ea2cd184932fcd59f5931239c7a78003.json rename to core/lib/dal/.sqlx/query-cb0a9f6137fb6bee5d17d644714b3b22ea2cd184932fcd59f5931239c7a78003.json diff --git a/.sqlx/query-cb98d84fc34af1e4a4c2f427c5bb4afd384063ae394a847b26304dd18d490ab4.json b/core/lib/dal/.sqlx/query-cb98d84fc34af1e4a4c2f427c5bb4afd384063ae394a847b26304dd18d490ab4.json similarity index 100% rename from .sqlx/query-cb98d84fc34af1e4a4c2f427c5bb4afd384063ae394a847b26304dd18d490ab4.json rename to core/lib/dal/.sqlx/query-cb98d84fc34af1e4a4c2f427c5bb4afd384063ae394a847b26304dd18d490ab4.json diff --git a/.sqlx/query-cea366a9d0da60bf03c71be26862929e051270056ebf113a657a464f89c7fd57.json b/core/lib/dal/.sqlx/query-cea366a9d0da60bf03c71be26862929e051270056ebf113a657a464f89c7fd57.json similarity index 100% rename from .sqlx/query-cea366a9d0da60bf03c71be26862929e051270056ebf113a657a464f89c7fd57.json rename to core/lib/dal/.sqlx/query-cea366a9d0da60bf03c71be26862929e051270056ebf113a657a464f89c7fd57.json diff --git a/.sqlx/query-cea9fe027a6a0ada827f23b48ac32432295b2f7ee40bf13522a6edbd236f1970.json b/core/lib/dal/.sqlx/query-cea9fe027a6a0ada827f23b48ac32432295b2f7ee40bf13522a6edbd236f1970.json similarity index 100% rename from .sqlx/query-cea9fe027a6a0ada827f23b48ac32432295b2f7ee40bf13522a6edbd236f1970.json rename to core/lib/dal/.sqlx/query-cea9fe027a6a0ada827f23b48ac32432295b2f7ee40bf13522a6edbd236f1970.json diff --git a/.sqlx/query-cf8cff1e6d277088519ef7dfbdb1885d320c146cd8fad77c107ef12fa38e6c98.json b/core/lib/dal/.sqlx/query-cf8cff1e6d277088519ef7dfbdb1885d320c146cd8fad77c107ef12fa38e6c98.json similarity index 100% rename from .sqlx/query-cf8cff1e6d277088519ef7dfbdb1885d320c146cd8fad77c107ef12fa38e6c98.json rename to core/lib/dal/.sqlx/query-cf8cff1e6d277088519ef7dfbdb1885d320c146cd8fad77c107ef12fa38e6c98.json diff --git a/.sqlx/query-d14b52df2cd9f9e484c60ba00383b438f14b68535111cf2cedd363fc646aac99.json b/core/lib/dal/.sqlx/query-d14b52df2cd9f9e484c60ba00383b438f14b68535111cf2cedd363fc646aac99.json similarity index 100% rename from .sqlx/query-d14b52df2cd9f9e484c60ba00383b438f14b68535111cf2cedd363fc646aac99.json rename to core/lib/dal/.sqlx/query-d14b52df2cd9f9e484c60ba00383b438f14b68535111cf2cedd363fc646aac99.json diff --git a/.sqlx/query-d3b09cbcddf6238b358d32d57678242aad3e9a47400f6d6837a35f4c54a216b9.json b/core/lib/dal/.sqlx/query-d3b09cbcddf6238b358d32d57678242aad3e9a47400f6d6837a35f4c54a216b9.json similarity index 100% rename from .sqlx/query-d3b09cbcddf6238b358d32d57678242aad3e9a47400f6d6837a35f4c54a216b9.json rename to core/lib/dal/.sqlx/query-d3b09cbcddf6238b358d32d57678242aad3e9a47400f6d6837a35f4c54a216b9.json diff --git a/.sqlx/query-d3f9202d665ef4fcb028dae6484253eb340a21afd7d65ce6d2f523aeded8dfc0.json b/core/lib/dal/.sqlx/query-d3f9202d665ef4fcb028dae6484253eb340a21afd7d65ce6d2f523aeded8dfc0.json similarity index 100% rename from .sqlx/query-d3f9202d665ef4fcb028dae6484253eb340a21afd7d65ce6d2f523aeded8dfc0.json rename to core/lib/dal/.sqlx/query-d3f9202d665ef4fcb028dae6484253eb340a21afd7d65ce6d2f523aeded8dfc0.json diff --git a/.sqlx/query-d50555b3b7a1feadd34a2fe90b205ed6a7335a7092c7dc2b81337535e4d489d5.json b/core/lib/dal/.sqlx/query-d50555b3b7a1feadd34a2fe90b205ed6a7335a7092c7dc2b81337535e4d489d5.json similarity index 100% rename from .sqlx/query-d50555b3b7a1feadd34a2fe90b205ed6a7335a7092c7dc2b81337535e4d489d5.json rename to core/lib/dal/.sqlx/query-d50555b3b7a1feadd34a2fe90b205ed6a7335a7092c7dc2b81337535e4d489d5.json diff --git a/.sqlx/query-d6b70256793417a949081899eccf75260c7afaf110870656061a04079c35c2d8.json b/core/lib/dal/.sqlx/query-d6b70256793417a949081899eccf75260c7afaf110870656061a04079c35c2d8.json similarity index 100% rename from .sqlx/query-d6b70256793417a949081899eccf75260c7afaf110870656061a04079c35c2d8.json rename to core/lib/dal/.sqlx/query-d6b70256793417a949081899eccf75260c7afaf110870656061a04079c35c2d8.json diff --git a/.sqlx/query-d70cfc158e31dd2d5c942d24f81fd17f833fb15b58b0110c7cc566946db98e76.json b/core/lib/dal/.sqlx/query-d70cfc158e31dd2d5c942d24f81fd17f833fb15b58b0110c7cc566946db98e76.json similarity index 100% rename from .sqlx/query-d70cfc158e31dd2d5c942d24f81fd17f833fb15b58b0110c7cc566946db98e76.json rename to core/lib/dal/.sqlx/query-d70cfc158e31dd2d5c942d24f81fd17f833fb15b58b0110c7cc566946db98e76.json diff --git a/.sqlx/query-d712707e47e143c52330ea6e0513d2839f0f928c06b8020eecec38e895f99b42.json b/core/lib/dal/.sqlx/query-d712707e47e143c52330ea6e0513d2839f0f928c06b8020eecec38e895f99b42.json similarity index 100% rename from .sqlx/query-d712707e47e143c52330ea6e0513d2839f0f928c06b8020eecec38e895f99b42.json rename to core/lib/dal/.sqlx/query-d712707e47e143c52330ea6e0513d2839f0f928c06b8020eecec38e895f99b42.json diff --git a/.sqlx/query-d7ed82f0d012f72374edb2ebcec33c83477d65a6f8cb2673f67b3148cd95b436.json b/core/lib/dal/.sqlx/query-d7ed82f0d012f72374edb2ebcec33c83477d65a6f8cb2673f67b3148cd95b436.json similarity index 100% rename from .sqlx/query-d7ed82f0d012f72374edb2ebcec33c83477d65a6f8cb2673f67b3148cd95b436.json rename to core/lib/dal/.sqlx/query-d7ed82f0d012f72374edb2ebcec33c83477d65a6f8cb2673f67b3148cd95b436.json diff --git a/.sqlx/query-da51a5220c2b964303292592c34e8ee5e54b170de9da863bbdbc79e3f206640b.json b/core/lib/dal/.sqlx/query-da51a5220c2b964303292592c34e8ee5e54b170de9da863bbdbc79e3f206640b.json similarity index 100% rename from .sqlx/query-da51a5220c2b964303292592c34e8ee5e54b170de9da863bbdbc79e3f206640b.json rename to core/lib/dal/.sqlx/query-da51a5220c2b964303292592c34e8ee5e54b170de9da863bbdbc79e3f206640b.json diff --git a/.sqlx/query-da72486421d60d3d633e19632a8c66fc73c2d4f35a5dc40e117903dba4e7edb2.json b/core/lib/dal/.sqlx/query-da72486421d60d3d633e19632a8c66fc73c2d4f35a5dc40e117903dba4e7edb2.json similarity index 100% rename from .sqlx/query-da72486421d60d3d633e19632a8c66fc73c2d4f35a5dc40e117903dba4e7edb2.json rename to core/lib/dal/.sqlx/query-da72486421d60d3d633e19632a8c66fc73c2d4f35a5dc40e117903dba4e7edb2.json diff --git a/.sqlx/query-db41e2480bdef66e1c89347402418128cae1b40ea2ee34b9d5269c12f8b5738a.json b/core/lib/dal/.sqlx/query-db41e2480bdef66e1c89347402418128cae1b40ea2ee34b9d5269c12f8b5738a.json similarity index 100% rename from .sqlx/query-db41e2480bdef66e1c89347402418128cae1b40ea2ee34b9d5269c12f8b5738a.json rename to core/lib/dal/.sqlx/query-db41e2480bdef66e1c89347402418128cae1b40ea2ee34b9d5269c12f8b5738a.json diff --git a/.sqlx/query-dc16d0fac093a52480b66dfcb5976fb01e6629e8c982c265f2af1d5000090572.json b/core/lib/dal/.sqlx/query-dc16d0fac093a52480b66dfcb5976fb01e6629e8c982c265f2af1d5000090572.json similarity index 100% rename from .sqlx/query-dc16d0fac093a52480b66dfcb5976fb01e6629e8c982c265f2af1d5000090572.json rename to core/lib/dal/.sqlx/query-dc16d0fac093a52480b66dfcb5976fb01e6629e8c982c265f2af1d5000090572.json diff --git a/.sqlx/query-dc481f59aae632ff6f5fa23f5c5c82627a936f7ea9f6c354eca4bea76fac6b10.json b/core/lib/dal/.sqlx/query-dc481f59aae632ff6f5fa23f5c5c82627a936f7ea9f6c354eca4bea76fac6b10.json similarity index 100% rename from .sqlx/query-dc481f59aae632ff6f5fa23f5c5c82627a936f7ea9f6c354eca4bea76fac6b10.json rename to core/lib/dal/.sqlx/query-dc481f59aae632ff6f5fa23f5c5c82627a936f7ea9f6c354eca4bea76fac6b10.json diff --git a/.sqlx/query-dd55e46dfa5ba3692d9620088a3550b8db817630d1a9341db4a1f453f12e64fb.json b/core/lib/dal/.sqlx/query-dd55e46dfa5ba3692d9620088a3550b8db817630d1a9341db4a1f453f12e64fb.json similarity index 100% rename from .sqlx/query-dd55e46dfa5ba3692d9620088a3550b8db817630d1a9341db4a1f453f12e64fb.json rename to core/lib/dal/.sqlx/query-dd55e46dfa5ba3692d9620088a3550b8db817630d1a9341db4a1f453f12e64fb.json diff --git a/.sqlx/query-de3a5a35b111bd831bebe6d9391bf58b311d81c5fc0a6fbaccf204976f76f378.json b/core/lib/dal/.sqlx/query-de3a5a35b111bd831bebe6d9391bf58b311d81c5fc0a6fbaccf204976f76f378.json similarity index 100% rename from .sqlx/query-de3a5a35b111bd831bebe6d9391bf58b311d81c5fc0a6fbaccf204976f76f378.json rename to core/lib/dal/.sqlx/query-de3a5a35b111bd831bebe6d9391bf58b311d81c5fc0a6fbaccf204976f76f378.json diff --git a/.sqlx/query-dea22358feed1418430505767d03aa4239d3a8be71b47178b4b8fb11fe898b31.json b/core/lib/dal/.sqlx/query-dea22358feed1418430505767d03aa4239d3a8be71b47178b4b8fb11fe898b31.json similarity index 100% rename from .sqlx/query-dea22358feed1418430505767d03aa4239d3a8be71b47178b4b8fb11fe898b31.json rename to core/lib/dal/.sqlx/query-dea22358feed1418430505767d03aa4239d3a8be71b47178b4b8fb11fe898b31.json diff --git a/.sqlx/query-df3256c012f86a9cd3b9260b97be5c6feb8059722149a747c4b6bd46731e2536.json b/core/lib/dal/.sqlx/query-df3256c012f86a9cd3b9260b97be5c6feb8059722149a747c4b6bd46731e2536.json similarity index 100% rename from .sqlx/query-df3256c012f86a9cd3b9260b97be5c6feb8059722149a747c4b6bd46731e2536.json rename to core/lib/dal/.sqlx/query-df3256c012f86a9cd3b9260b97be5c6feb8059722149a747c4b6bd46731e2536.json diff --git a/.sqlx/query-e073cfdc7a00559994ce04eca15f35d55901fb1e6805f23413ea43e3637540a0.json b/core/lib/dal/.sqlx/query-e073cfdc7a00559994ce04eca15f35d55901fb1e6805f23413ea43e3637540a0.json similarity index 100% rename from .sqlx/query-e073cfdc7a00559994ce04eca15f35d55901fb1e6805f23413ea43e3637540a0.json rename to core/lib/dal/.sqlx/query-e073cfdc7a00559994ce04eca15f35d55901fb1e6805f23413ea43e3637540a0.json diff --git a/.sqlx/query-e673789d5b4a7aae11feccb085bf3f9dd37b771cf76261762ae18fd14cf0efc5.json b/core/lib/dal/.sqlx/query-e673789d5b4a7aae11feccb085bf3f9dd37b771cf76261762ae18fd14cf0efc5.json similarity index 100% rename from .sqlx/query-e673789d5b4a7aae11feccb085bf3f9dd37b771cf76261762ae18fd14cf0efc5.json rename to core/lib/dal/.sqlx/query-e673789d5b4a7aae11feccb085bf3f9dd37b771cf76261762ae18fd14cf0efc5.json diff --git a/.sqlx/query-e7d47990db585af7cbf096155babe152ead3d4a7f22bc3584803288e8d639c13.json b/core/lib/dal/.sqlx/query-e7d47990db585af7cbf096155babe152ead3d4a7f22bc3584803288e8d639c13.json similarity index 100% rename from .sqlx/query-e7d47990db585af7cbf096155babe152ead3d4a7f22bc3584803288e8d639c13.json rename to core/lib/dal/.sqlx/query-e7d47990db585af7cbf096155babe152ead3d4a7f22bc3584803288e8d639c13.json diff --git a/.sqlx/query-ea682d41219feda3514336f4c1ae6ecbe96475e83dfed603bd305e72460f52c2.json b/core/lib/dal/.sqlx/query-ea682d41219feda3514336f4c1ae6ecbe96475e83dfed603bd305e72460f52c2.json similarity index 100% rename from .sqlx/query-ea682d41219feda3514336f4c1ae6ecbe96475e83dfed603bd305e72460f52c2.json rename to core/lib/dal/.sqlx/query-ea682d41219feda3514336f4c1ae6ecbe96475e83dfed603bd305e72460f52c2.json diff --git a/.sqlx/query-ea904aa930d602d33b6fbc1bf1178a8a0ec739f4ddec8ffeb3a87253aeb18d30.json b/core/lib/dal/.sqlx/query-ea904aa930d602d33b6fbc1bf1178a8a0ec739f4ddec8ffeb3a87253aeb18d30.json similarity index 100% rename from .sqlx/query-ea904aa930d602d33b6fbc1bf1178a8a0ec739f4ddec8ffeb3a87253aeb18d30.json rename to core/lib/dal/.sqlx/query-ea904aa930d602d33b6fbc1bf1178a8a0ec739f4ddec8ffeb3a87253aeb18d30.json diff --git a/.sqlx/query-eab03e888f20020462ede2cd59fc0d68195346daf5f38d102eab1c1b73b0f82f.json b/core/lib/dal/.sqlx/query-eab03e888f20020462ede2cd59fc0d68195346daf5f38d102eab1c1b73b0f82f.json similarity index 100% rename from .sqlx/query-eab03e888f20020462ede2cd59fc0d68195346daf5f38d102eab1c1b73b0f82f.json rename to core/lib/dal/.sqlx/query-eab03e888f20020462ede2cd59fc0d68195346daf5f38d102eab1c1b73b0f82f.json diff --git a/.sqlx/query-eb9cd837842490dcb8ab8894ccdb1fcdd02ba2ae2104a0ef972fe809bf136425.json b/core/lib/dal/.sqlx/query-eb9cd837842490dcb8ab8894ccdb1fcdd02ba2ae2104a0ef972fe809bf136425.json similarity index 100% rename from .sqlx/query-eb9cd837842490dcb8ab8894ccdb1fcdd02ba2ae2104a0ef972fe809bf136425.json rename to core/lib/dal/.sqlx/query-eb9cd837842490dcb8ab8894ccdb1fcdd02ba2ae2104a0ef972fe809bf136425.json diff --git a/.sqlx/query-ef331469f78c6ff68a254a15b55d056cc9bae25bc070c5de8424f88fab20e5ea.json b/core/lib/dal/.sqlx/query-ef331469f78c6ff68a254a15b55d056cc9bae25bc070c5de8424f88fab20e5ea.json similarity index 100% rename from .sqlx/query-ef331469f78c6ff68a254a15b55d056cc9bae25bc070c5de8424f88fab20e5ea.json rename to core/lib/dal/.sqlx/query-ef331469f78c6ff68a254a15b55d056cc9bae25bc070c5de8424f88fab20e5ea.json diff --git a/.sqlx/query-f012d0922265269746396dac8f25ff66f2c3b2b83d45360818a8782e56aa3d66.json b/core/lib/dal/.sqlx/query-f012d0922265269746396dac8f25ff66f2c3b2b83d45360818a8782e56aa3d66.json similarity index 100% rename from .sqlx/query-f012d0922265269746396dac8f25ff66f2c3b2b83d45360818a8782e56aa3d66.json rename to core/lib/dal/.sqlx/query-f012d0922265269746396dac8f25ff66f2c3b2b83d45360818a8782e56aa3d66.json diff --git a/.sqlx/query-f1541a8d970d57ed118ee603e7285ec6ec1e522bc058710560ef78e75f94ddac.json b/core/lib/dal/.sqlx/query-f1541a8d970d57ed118ee603e7285ec6ec1e522bc058710560ef78e75f94ddac.json similarity index 100% rename from .sqlx/query-f1541a8d970d57ed118ee603e7285ec6ec1e522bc058710560ef78e75f94ddac.json rename to core/lib/dal/.sqlx/query-f1541a8d970d57ed118ee603e7285ec6ec1e522bc058710560ef78e75f94ddac.json diff --git a/.sqlx/query-f19c20325298647177a86a3f9c4ae6d629a74f255a31284ce6707d219c9a0510.json b/core/lib/dal/.sqlx/query-f19c20325298647177a86a3f9c4ae6d629a74f255a31284ce6707d219c9a0510.json similarity index 100% rename from .sqlx/query-f19c20325298647177a86a3f9c4ae6d629a74f255a31284ce6707d219c9a0510.json rename to core/lib/dal/.sqlx/query-f19c20325298647177a86a3f9c4ae6d629a74f255a31284ce6707d219c9a0510.json diff --git a/.sqlx/query-f1a90090c192d68367e799188356efe8d41759bbdcdd6d39db93208f2664f03a.json b/core/lib/dal/.sqlx/query-f1a90090c192d68367e799188356efe8d41759bbdcdd6d39db93208f2664f03a.json similarity index 100% rename from .sqlx/query-f1a90090c192d68367e799188356efe8d41759bbdcdd6d39db93208f2664f03a.json rename to core/lib/dal/.sqlx/query-f1a90090c192d68367e799188356efe8d41759bbdcdd6d39db93208f2664f03a.json diff --git a/.sqlx/query-f2606e792f08f65d15bdab66a83741e2713748a17c96af5485423bfe9aaa84ec.json b/core/lib/dal/.sqlx/query-f2606e792f08f65d15bdab66a83741e2713748a17c96af5485423bfe9aaa84ec.json similarity index 100% rename from .sqlx/query-f2606e792f08f65d15bdab66a83741e2713748a17c96af5485423bfe9aaa84ec.json rename to core/lib/dal/.sqlx/query-f2606e792f08f65d15bdab66a83741e2713748a17c96af5485423bfe9aaa84ec.json diff --git a/.sqlx/query-f2f852a340c45ff69cbca42d7c592dfb0d28a797bee69872634f3105d2d51996.json b/core/lib/dal/.sqlx/query-f2f852a340c45ff69cbca42d7c592dfb0d28a797bee69872634f3105d2d51996.json similarity index 100% rename from .sqlx/query-f2f852a340c45ff69cbca42d7c592dfb0d28a797bee69872634f3105d2d51996.json rename to core/lib/dal/.sqlx/query-f2f852a340c45ff69cbca42d7c592dfb0d28a797bee69872634f3105d2d51996.json diff --git a/.sqlx/query-f3a695b0179ffdacd4baf9eeb6c1fac675dd7b078df61758df382e1038cb4987.json b/core/lib/dal/.sqlx/query-f3a695b0179ffdacd4baf9eeb6c1fac675dd7b078df61758df382e1038cb4987.json similarity index 100% rename from .sqlx/query-f3a695b0179ffdacd4baf9eeb6c1fac675dd7b078df61758df382e1038cb4987.json rename to core/lib/dal/.sqlx/query-f3a695b0179ffdacd4baf9eeb6c1fac675dd7b078df61758df382e1038cb4987.json diff --git a/.sqlx/query-f4e7e2dd109aab2714845b028eba780c75468aa36615bcfcf7f7d8ace23cd1aa.json b/core/lib/dal/.sqlx/query-f4e7e2dd109aab2714845b028eba780c75468aa36615bcfcf7f7d8ace23cd1aa.json similarity index 100% rename from .sqlx/query-f4e7e2dd109aab2714845b028eba780c75468aa36615bcfcf7f7d8ace23cd1aa.json rename to core/lib/dal/.sqlx/query-f4e7e2dd109aab2714845b028eba780c75468aa36615bcfcf7f7d8ace23cd1aa.json diff --git a/.sqlx/query-f4f400606cd3875ed1be393107dd5509f57ae415719f99c6d523c81c20d2bffb.json b/core/lib/dal/.sqlx/query-f4f400606cd3875ed1be393107dd5509f57ae415719f99c6d523c81c20d2bffb.json similarity index 100% rename from .sqlx/query-f4f400606cd3875ed1be393107dd5509f57ae415719f99c6d523c81c20d2bffb.json rename to core/lib/dal/.sqlx/query-f4f400606cd3875ed1be393107dd5509f57ae415719f99c6d523c81c20d2bffb.json diff --git a/.sqlx/query-f5854ce2c37bc66d38b05c9fb985618fd95722a77cc44a2e0519f3740191dc75.json b/core/lib/dal/.sqlx/query-f5854ce2c37bc66d38b05c9fb985618fd95722a77cc44a2e0519f3740191dc75.json similarity index 100% rename from .sqlx/query-f5854ce2c37bc66d38b05c9fb985618fd95722a77cc44a2e0519f3740191dc75.json rename to core/lib/dal/.sqlx/query-f5854ce2c37bc66d38b05c9fb985618fd95722a77cc44a2e0519f3740191dc75.json diff --git a/.sqlx/query-f63586d59264eab7388ad1de823227ecaa45d76d1ba260074898fe57c059a15a.json b/core/lib/dal/.sqlx/query-f63586d59264eab7388ad1de823227ecaa45d76d1ba260074898fe57c059a15a.json similarity index 100% rename from .sqlx/query-f63586d59264eab7388ad1de823227ecaa45d76d1ba260074898fe57c059a15a.json rename to core/lib/dal/.sqlx/query-f63586d59264eab7388ad1de823227ecaa45d76d1ba260074898fe57c059a15a.json diff --git a/.sqlx/query-f87c50d37f78d6b3c5a752ea88799a1f6ee5a046ece2ef949aee7ab3d2549975.json b/core/lib/dal/.sqlx/query-f87c50d37f78d6b3c5a752ea88799a1f6ee5a046ece2ef949aee7ab3d2549975.json similarity index 100% rename from .sqlx/query-f87c50d37f78d6b3c5a752ea88799a1f6ee5a046ece2ef949aee7ab3d2549975.json rename to core/lib/dal/.sqlx/query-f87c50d37f78d6b3c5a752ea88799a1f6ee5a046ece2ef949aee7ab3d2549975.json diff --git a/.sqlx/query-f91790ae5cc4b087bf942ba52dd63a1e89945f8d5e0f4da42ecf6313c4f5967e.json b/core/lib/dal/.sqlx/query-f91790ae5cc4b087bf942ba52dd63a1e89945f8d5e0f4da42ecf6313c4f5967e.json similarity index 100% rename from .sqlx/query-f91790ae5cc4b087bf942ba52dd63a1e89945f8d5e0f4da42ecf6313c4f5967e.json rename to core/lib/dal/.sqlx/query-f91790ae5cc4b087bf942ba52dd63a1e89945f8d5e0f4da42ecf6313c4f5967e.json diff --git a/.sqlx/query-fcc108fd59203644ff86ded0505c7dfb7aad7261e5fc402d845aedc3b91a4e99.json b/core/lib/dal/.sqlx/query-fcc108fd59203644ff86ded0505c7dfb7aad7261e5fc402d845aedc3b91a4e99.json similarity index 100% rename from .sqlx/query-fcc108fd59203644ff86ded0505c7dfb7aad7261e5fc402d845aedc3b91a4e99.json rename to core/lib/dal/.sqlx/query-fcc108fd59203644ff86ded0505c7dfb7aad7261e5fc402d845aedc3b91a4e99.json diff --git a/.sqlx/query-fdffa5841554286a924b217b5885d9ec9b3f628c3a4cf5e10580ea6e5e3a2429.json b/core/lib/dal/.sqlx/query-fdffa5841554286a924b217b5885d9ec9b3f628c3a4cf5e10580ea6e5e3a2429.json similarity index 100% rename from .sqlx/query-fdffa5841554286a924b217b5885d9ec9b3f628c3a4cf5e10580ea6e5e3a2429.json rename to core/lib/dal/.sqlx/query-fdffa5841554286a924b217b5885d9ec9b3f628c3a4cf5e10580ea6e5e3a2429.json diff --git a/.sqlx/query-fe06e06c04466429bb85709e6fe8dd6c2ad2793c06071f4a067dcc31306adebc.json b/core/lib/dal/.sqlx/query-fe06e06c04466429bb85709e6fe8dd6c2ad2793c06071f4a067dcc31306adebc.json similarity index 100% rename from .sqlx/query-fe06e06c04466429bb85709e6fe8dd6c2ad2793c06071f4a067dcc31306adebc.json rename to core/lib/dal/.sqlx/query-fe06e06c04466429bb85709e6fe8dd6c2ad2793c06071f4a067dcc31306adebc.json diff --git a/.sqlx/query-fe501f86f4bf6c5b8ccc2e039a4eb09b538a67d1c39fda052c4f4ddb23ce0084.json b/core/lib/dal/.sqlx/query-fe501f86f4bf6c5b8ccc2e039a4eb09b538a67d1c39fda052c4f4ddb23ce0084.json similarity index 100% rename from .sqlx/query-fe501f86f4bf6c5b8ccc2e039a4eb09b538a67d1c39fda052c4f4ddb23ce0084.json rename to core/lib/dal/.sqlx/query-fe501f86f4bf6c5b8ccc2e039a4eb09b538a67d1c39fda052c4f4ddb23ce0084.json diff --git a/.sqlx/query-fec7b791e371a4c58350b6537065223f4599d4128db588d8645f3d106de5f50b.json b/core/lib/dal/.sqlx/query-fec7b791e371a4c58350b6537065223f4599d4128db588d8645f3d106de5f50b.json similarity index 100% rename from .sqlx/query-fec7b791e371a4c58350b6537065223f4599d4128db588d8645f3d106de5f50b.json rename to core/lib/dal/.sqlx/query-fec7b791e371a4c58350b6537065223f4599d4128db588d8645f3d106de5f50b.json