diff --git a/charts/l1-devnet/Chart.yaml b/charts/l1-devnet/Chart.yaml index 6705dd66..7b416add 100644 --- a/charts/l1-devnet/Chart.yaml +++ b/charts/l1-devnet/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 description: l1-devnet helm charts name: l1-devnet -version: 0.0.3 +version: 0.0.9 appVersion: v0.1.0 kubeVersion: ">=1.22.0-0" maintainers: diff --git a/charts/l1-devnet/values.yaml b/charts/l1-devnet/values.yaml index ea089885..6aaee93d 100644 --- a/charts/l1-devnet/values.yaml +++ b/charts/l1-devnet/values.yaml @@ -14,7 +14,7 @@ image: tag: v0.0.4 command: - ["/bin/bash", "-c", "anvil --host 0.0.0.0 --port 8545 --chain-id ${CHAIN_ID} --state /data/state.json --state-interval 60 --slots-in-an-epoch 3"] + ["/bin/bash", "-c", "anvil --host 0.0.0.0 --port 8545 --chain-id ${CHAIN_ID} --fork-url ${L1_FULLNODE_RPC_ENDPOINT} --fork-block-number ${L1_SHADOWFORK_BLOCK_NUMBER} --state /data/state.json --state-interval 60 --slots-in-an-epoch 3 --block-time 12"] envFrom: - configMapRef: diff --git a/charts/l2-sequencer/Chart.yaml b/charts/l2-sequencer/Chart.yaml index db2dbe6c..69a07275 100644 --- a/charts/l2-sequencer/Chart.yaml +++ b/charts/l2-sequencer/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 description: l2-sequencer helm charts name: l2-sequencer -version: 0.0.11 +version: 0.0.41 appVersion: v0.1.0 kubeVersion: ">=1.22.0-0" maintainers: diff --git a/charts/l2-sequencer/values.yaml b/charts/l2-sequencer/values.yaml index e6327328..27170bd6 100644 --- a/charts/l2-sequencer/values.yaml +++ b/charts/l2-sequencer/values.yaml @@ -32,6 +32,8 @@ env: value: "1000000" - name: VERBOSITY value: "3" + - name: L2_SHADOWFORK_BLOCK_NUMBER + value: "0xe9a5" envFrom: - configMapRef: @@ -41,19 +43,26 @@ command: [ "bash", "-c", - "mkdir -p /l2geth/data/keystore && \ + "(until geth attach http://localhost:$L2GETH_RPC_HTTP_PORT --exec \"eth.blockNumber\" > /dev/null 2>&1; do \ + echo \"Waiting for RPC to become available...\"; \ + sleep 5; \ + done && \ + echo \"RPC is now available. Executing debug_setHead...\" && \ + geth attach http://localhost:$L2GETH_RPC_HTTP_PORT --exec \"debug.setHead('${L2_SHADOWFORK_BLOCK_NUMBER}')\" && \ + echo \"debug_setHead executed.\") & \ + mkdir -p /l2geth/data/keystore && \ mkdir -p /l2geth/data/geth && \ - echo \"[Node.P2P] StaticNodes = $L2GETH_PEER_LIST\" > \"/l2geth/config.toml\" && \ + cp -r /host/snapshot/* /l2geth/data/ && \ echo ${L2GETH_PASSWORD} > /l2geth/password && \ echo ${L2GETH_KEYSTORE} > /l2geth/data/keystore/keystore.json && \ echo ${L2GETH_NODEKEY} > /l2geth/data/geth/nodekey && \ geth --datadir \"/l2geth/data\" init /l2geth/genesis/genesis.json && \ geth --datadir \"/l2geth/data\" \ --port \"$L2GETH_P2P_PORT\" --nodiscover --syncmode full --networkid \"$CHAIN_ID\" \ - --config \"/l2geth/config.toml\" \ --http --http.port \"$L2GETH_RPC_HTTP_PORT\" --http.addr \"0.0.0.0\" --http.vhosts=\"*\" --http.corsdomain \"*\" --http.api \"eth,scroll,net,web3,debug\" \ --pprof --pprof.addr \"0.0.0.0\" --pprof.port 6060 \ --ws --ws.port \"$L2GETH_RPC_WS_PORT\" --ws.addr \"0.0.0.0\" --ws.api \"eth,scroll,net,web3,debug\" \ + --net.shadowforkpeers empty \ --unlock \"$L2GETH_SIGNER_ADDRESS\" --password \"/l2geth/password\" --allow-insecure-unlock --mine \ --ccc --ccc.numworkers 5 \ --gcmode archive \ @@ -64,7 +73,6 @@ command: --gpo.percentile 20 \ --gpo.blocks 100 \ --l1.endpoint \"$L2GETH_L1_ENDPOINT\" --l1.confirmations \"$L2GETH_L1_WATCHER_CONFIRMATIONS\" --l1.sync.startblock \"$L2GETH_L1_CONTRACT_DEPLOYMENT_BLOCK\" \ - --rollup.verify \ --metrics --metrics.expensive \ $L2GETH_EXTRA_PARAMS" ] @@ -107,11 +115,11 @@ service: resources: requests: - memory: "150Mi" - cpu: "50m" + memory: "4Gi" + cpu: "1" limits: memory: "8Gi" - cpu: "100m" + cpu: "2" defaultProbes: &default_probes enabled: true @@ -152,6 +160,12 @@ persistence: type: configMap name: wait-for-l1-script defaultMode: "0777" + snapshot: + enabled: true + type: hostPath + hostPath: /var/scroll/l2geth/snapshot + mountPath: /host/snapshot + hostPathType: Directory serviceMonitor: main: diff --git a/charts/rollup-node/Chart.yaml b/charts/rollup-node/Chart.yaml index 5f2f9b32..eba4d880 100644 --- a/charts/rollup-node/Chart.yaml +++ b/charts/rollup-node/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 description: rollup-node helm charts name: rollup-node -version: 0.0.11 +version: 0.0.25 appVersion: v0.1.0 kubeVersion: ">=1.22.0-0" maintainers: diff --git a/charts/rollup-node/templates/get-db-info-script.yaml b/charts/rollup-node/templates/get-db-info-script.yaml new file mode 100644 index 00000000..15d021ed --- /dev/null +++ b/charts/rollup-node/templates/get-db-info-script.yaml @@ -0,0 +1,194 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: get-db-info-script +data: + get-db-info.sh: | + #!/bin/bash + + echo "Waiting for L1 contract to be ready..." + while true; do + HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":1}' -H "Content-Type: application/json" $L1_RPC_ENDPOINT) + if [ "$HTTP_CODE" -eq 200 ]; then + echo "L1 contract is ready!" + break + else + echo "L1 contract is not responding, HTTP code: $HTTP_CODE. Retrying in 5 seconds..." + sleep 5 + fi + done + + # Get last finalized batch + export LAST_FINALIZED_BATCH=$(cast call "${L1_SCROLL_CHAIN_PROXY_ADDR}" "lastFinalizedBatchIndex()(uint256)" --rpc-url ${L1_RPC_ENDPOINT} | awk '{print $1}') + + # Calculate last committed batch + FIRST_UNCOMMITTED_BATCH=$((LAST_FINALIZED_BATCH + 1)) + echo "Starting search from batch: $FIRST_UNCOMMITTED_BATCH" + + LOOP_COUNT=0 + MAX_LOOPS=1000 + while [ $LOOP_COUNT -lt $MAX_LOOPS ]; do + BATCH_HASH=$(cast call "${L1_SCROLL_CHAIN_PROXY_ADDR}" "committedBatches(uint256)(bytes32)" "$FIRST_UNCOMMITTED_BATCH" --rpc-url ${L1_RPC_ENDPOINT}) + echo "Batch $FIRST_UNCOMMITTED_BATCH - Hash: $BATCH_HASH" + if [[ $BATCH_HASH == "0x0000000000000000000000000000000000000000000000000000000000000000" ]]; then + echo "Found first uncommitted batch: $FIRST_UNCOMMITTED_BATCH" + break + fi + FIRST_UNCOMMITTED_BATCH=$((FIRST_UNCOMMITTED_BATCH + 1)) + LOOP_COUNT=$((LOOP_COUNT + 1)) + done + + if [ $LOOP_COUNT -eq $MAX_LOOPS ]; then + echo "Reached maximum number of iterations ($MAX_LOOPS). Exiting loop." + exit 1 + fi + + export LAST_COMMITTED_BATCH=$((FIRST_UNCOMMITTED_BATCH - 1)) + echo "Last committed batch: $LAST_COMMITTED_BATCH" + + echo "SHADOW: Last Finalized Batch: $LAST_FINALIZED_BATCH Last Committed Batch: $LAST_COMMITTED_BATCH" + + # Export the variables to be used by other processes + echo "export LAST_FINALIZED_BATCH=$LAST_FINALIZED_BATCH" + echo "export LAST_COMMITTED_BATCH=$LAST_COMMITTED_BATCH" + + # Database copy logic + local_sql_run() { + psql "${SCROLL_ROLLUP_DB_CONFIG_DSN}" -Aqt -c "$@" + } + + remote_sql_run() { + psql "${SCROLL_RDS_ROLLUP_NODE_DSN}" -Aqt -c "$@" + } + + # Install PostgreSQL client + apt-get install -y postgresql-client + + # Check database connections + echo "Checking database connections..." + if ! local_sql_run "SELECT 1;" > /dev/null 2>&1; then + echo "Error: Cannot connect to local PostgreSQL database. Please check your connection string." + echo "DSN: $SCROLL_ROLLUP_DB_CONFIG_DSN" + exit 1 + fi + + if ! remote_sql_run "SELECT 1;" > /dev/null 2>&1; then + echo "Error: Cannot connect to remote PostgreSQL database. Please check your connection string." + echo "DSN: $SCROLL_RDS_ROLLUP_NODE_DSN" + exit 1 + fi + + echo "Database connections successful. Proceeding with operations..." + + # Get the bundle containing the last finalized batch + BUNDLE_INDEX=$(remote_sql_run "SELECT index FROM bundle WHERE end_batch_index = $LAST_FINALIZED_BATCH") + + if [ -z "$BUNDLE_INDEX" ]; then + echo "Warning: No bundle found for the last finalized batch. Skipping bundle copy." + else + # Copy bundles + echo "SHADOW: Copying bundle containing last finalized batch (index $BUNDLE_INDEX)" + remote_sql_run "COPY (SELECT * FROM bundle WHERE index = $BUNDLE_INDEX) TO STDOUT WITH CSV HEADER" | local_sql_run "COPY bundle FROM STDIN WITH CSV HEADER" + fi + + # Copy batches + echo "SHADOW: Copying batches [$LAST_FINALIZED_BATCH, $LAST_COMMITTED_BATCH]" + remote_sql_run "COPY (SELECT * FROM batch WHERE index >= $LAST_FINALIZED_BATCH AND index <= $LAST_COMMITTED_BATCH) TO STDOUT WITH CSV HEADER" | local_sql_run "COPY batch FROM STDIN WITH CSV HEADER" + local_sql_run "UPDATE batch SET rollup_status = 3, finalize_tx_hash = NULL, finalized_at = NULL, committed_at = NOW() WHERE index > $LAST_FINALIZED_BATCH" + local_sql_run "UPDATE batch SET proving_status = 1, prover_assigned_at = NULL, total_attempts = 0, active_attempts = 0, chunk_proofs_status = 1" + + # Get the start_chunk_index for the batch between the last finalized batch and end_chunk_index for the last committed batch + # Note: The range [finalized, committed] is used to handle corner cases and ensure data integrity. + # This approach ensures that even when committed == finalized, we still retrieve the necessary parent chunk data. + # It helps to maintain data consistency and prevents potential issues in edge scenarios. + CHUNK_INDICES=$(local_sql_run " + SELECT + MIN(start_chunk_index) as start_chunk_index, + MAX(end_chunk_index) as end_chunk_index + FROM batch + WHERE index BETWEEN $LAST_FINALIZED_BATCH AND $LAST_COMMITTED_BATCH + ") + + # Extract start_chunk_index (first field) from CHUNK_INDICES + START_CHUNK_INDEX=$(echo $CHUNK_INDICES | cut -d '|' -f1) + + # Extract end_chunk_index (second field) from CHUNK_INDICES + END_CHUNK_INDEX=$(echo $CHUNK_INDICES | cut -d '|' -f2) + + # Print the values of START_CHUNK_INDEX and END_CHUNK_INDEX for verification + echo "Chunk index range: $START_CHUNK_INDEX to $END_CHUNK_INDEX" + + # Copy chunks + echo "SHADOW: Copying chunks [$START_CHUNK_INDEX, $END_CHUNK_INDEX]" + remote_sql_run "COPY (SELECT * FROM chunk WHERE index >= $START_CHUNK_INDEX AND index <= $END_CHUNK_INDEX) TO STDOUT WITH CSV HEADER" | local_sql_run "COPY chunk FROM STDIN WITH CSV HEADER" + + # Get the batch hash for the last finalized batch + LAST_FINALIZED_BATCH_HASH=$(local_sql_run " + SELECT hash + FROM batch + WHERE index = $LAST_FINALIZED_BATCH + ") + echo "Last finalized batch hash: $LAST_FINALIZED_BATCH_HASH" + + # Reset chunk status for chunks not in the last finalized batch + local_sql_run "UPDATE chunk SET proving_status = 1, prover_assigned_at = NULL, total_attempts = 0, active_attempts = 0 WHERE batch_hash != '$LAST_FINALIZED_BATCH_HASH'" + + # Get total chunk count + TOTAL_CHUNKS=$(local_sql_run "SELECT COUNT(*) FROM chunk") + + # Get unassigned chunks info + UNASSIGNED_CHUNKS_INFO=$(local_sql_run " + SELECT MIN(index), MAX(index), COUNT(*) + FROM chunk + WHERE proving_status = 1 + ") + + MIN_UNASSIGNED_CHUNK_INDEX=$(echo $UNASSIGNED_CHUNKS_INFO | cut -d '|' -f1) + MAX_UNASSIGNED_CHUNK_INDEX=$(echo $UNASSIGNED_CHUNKS_INFO | cut -d '|' -f2) + UNASSIGNED_CHUNKS_COUNT=$(echo $UNASSIGNED_CHUNKS_INFO | cut -d '|' -f3) + + # Check how many chunks still have verified status + VERIFIED_CHUNKS_INFO=$(local_sql_run " + SELECT MIN(index), MAX(index), COUNT(*) + FROM chunk + WHERE proving_status = 4 + ") + + MIN_VERIFIED_CHUNK_INDEX=$(echo $VERIFIED_CHUNKS_INFO | cut -d '|' -f1) + MAX_VERIFIED_CHUNK_INDEX=$(echo $VERIFIED_CHUNKS_INFO | cut -d '|' -f2) + VERIFIED_CHUNKS_COUNT=$(echo $VERIFIED_CHUNKS_INFO | cut -d '|' -f3) + + # Print summary + echo "----------------------------------------" + echo "Chunk Statistics Summary:" + echo "----------------------------------------" + echo "Total chunks: $TOTAL_CHUNKS" + echo "" + echo "Verified chunks:" + echo " Count: $VERIFIED_CHUNKS_COUNT" + if [ -n "$MIN_VERIFIED_CHUNK_INDEX" ] && [ -n "$MAX_VERIFIED_CHUNK_INDEX" ]; then + echo " Range: [$MIN_VERIFIED_CHUNK_INDEX, $MAX_VERIFIED_CHUNK_INDEX]" + else + echo " Range: N/A (no verified chunks)" + fi + echo "" + echo "Unassigned chunks:" + echo " Count: $UNASSIGNED_CHUNKS_COUNT" + if [ -n "$MIN_UNASSIGNED_CHUNK_INDEX" ] && [ -n "$MAX_UNASSIGNED_CHUNK_INDEX" ]; then + echo " Range: [$MIN_UNASSIGNED_CHUNK_INDEX, $MAX_UNASSIGNED_CHUNK_INDEX]" + else + echo " Range: N/A (no unassigned chunks)" + fi + echo "----------------------------------------" + + # Get the start and end block numbers for the copied chunks + BLOCK_NUMBERS=$(local_sql_run "SELECT MIN(start_block_number), MAX(end_block_number) FROM chunk WHERE index >= $START_CHUNK_INDEX AND index <= $END_CHUNK_INDEX") + START_BLOCK_NUM=$(echo $BLOCK_NUMBERS | cut -d '|' -f1) + END_BLOCK_NUM=$(echo $BLOCK_NUMBERS | cut -d '|' -f2) + + # Print block number range for verification + echo "Block number range: $START_BLOCK_NUM to $END_BLOCK_NUM" + + # Copy blocks + echo "SHADOW: Copying blocks [$START_BLOCK_NUM, $END_BLOCK_NUM]" + remote_sql_run "COPY (SELECT * FROM l2_block WHERE number >= $START_BLOCK_NUM AND number <= $END_BLOCK_NUM) TO STDOUT WITH CSV HEADER" | local_sql_run "COPY l2_block FROM STDIN WITH CSV HEADER" diff --git a/charts/rollup-node/templates/take-over-commit-and-finalize-senders-script.yaml b/charts/rollup-node/templates/take-over-commit-and-finalize-senders-script.yaml new file mode 100644 index 00000000..096aa2d5 --- /dev/null +++ b/charts/rollup-node/templates/take-over-commit-and-finalize-senders-script.yaml @@ -0,0 +1,59 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: take-over-commit-and-finalize-senders-script +data: + take-over-commit-and-finalize-senders.sh: | + #!/bin/bash + + # Function to check if a variable is set + check_var() { + if [[ -z "${!1}" ]]; then + echo "Error: $1 is not set" >&2 + exit 1 + fi + } + + # Check required variables + check_var L1_RPC_ENDPOINT + check_var L1_MAINNET_SCROLL_OWNER_ADDR + check_var L1_SCROLL_CHAIN_PROXY_ADDR + check_var L1_COMMIT_SENDER_ADDR + check_var L1_FINALIZE_SENDER_ADDR + + # Set the balance of the Scroll owner + # We're setting it to 1000 ETH (0x3635C9ADC5DEA00000 in wei) + cast rpc --rpc-url "${L1_RPC_ENDPOINT}" anvil_setBalance "${L1_MAINNET_SCROLL_OWNER_ADDR}" 0x3635C9ADC5DEA00000 + + # Start impersonating the Scroll owner account + cast rpc --rpc-url "${L1_RPC_ENDPOINT}" anvil_impersonateAccount "${L1_MAINNET_SCROLL_OWNER_ADDR}" + + # Add a new sequencer + cast send "${L1_SCROLL_CHAIN_PROXY_ADDR}" --rpc-url "${L1_RPC_ENDPOINT}" \ + --from "${L1_MAINNET_SCROLL_OWNER_ADDR}" \ + --unlocked \ + "addSequencer(address)" \ + "${L1_COMMIT_SENDER_ADDR}" + + # Add a new prover + cast send "${L1_SCROLL_CHAIN_PROXY_ADDR}" --rpc-url "${L1_RPC_ENDPOINT}" \ + --from "${L1_MAINNET_SCROLL_OWNER_ADDR}" \ + --unlocked \ + "addProver(address)" \ + "${L1_FINALIZE_SENDER_ADDR}" + + # Stop impersonating the L1_MAINNET_SCROLL_OWNER_ADDR account + cast rpc --rpc-url "${L1_RPC_ENDPOINT}" anvil_stopImpersonatingAccount "${L1_MAINNET_SCROLL_OWNER_ADDR}" + + # Check if the new prover was successfully added + echo "SHADOW: isProver($L1_FINALIZE_SENDER_ADDR) = $(cast call "${L1_SCROLL_CHAIN_PROXY_ADDR}" --rpc-url "${L1_RPC_ENDPOINT}" \ + "isProver(address)(bool)" \ + "${L1_FINALIZE_SENDER_ADDR}")" + + # Check if the new sequencer was successfully added + echo "SHADOW: isSequencer($L1_COMMIT_SENDER_ADDR) = $(cast call "${L1_SCROLL_CHAIN_PROXY_ADDR}" --rpc-url "${L1_RPC_ENDPOINT}" \ + "isSequencer(address)(bool)" \ + "${L1_COMMIT_SENDER_ADDR}")" + + # Indicate that the process is complete + echo "SHADOW: done taking over L1 contracts" diff --git a/charts/rollup-node/values.yaml b/charts/rollup-node/values.yaml index b554610d..f07a1fbd 100644 --- a/charts/rollup-node/values.yaml +++ b/charts/rollup-node/values.yaml @@ -20,6 +20,8 @@ env: envFrom: - configMapRef: name: rollup-node-env + - configMapRef: + name: l1-devnet-env command: [ "/bin/sh", @@ -82,6 +84,16 @@ persistence: type: configMap name: wait-for-contracts-script defaultMode: "0777" + take-over-commit-and-finalize-senders-script: + enabled: true + type: configMap + name: take-over-commit-and-finalize-senders-script + defaultMode: "0777" + get-db-info-script: + enabled: true + type: configMap + name: get-db-info-script + defaultMode: "0777" initContainers: 1-check-postgres-connection: @@ -130,6 +142,32 @@ initContainers: - name: wait-for-contracts-script mountPath: /wait-for-contract.sh subPath: wait-for-contract.sh + 5-take-over-commit-and-finalize-senders: + image: scrolltech/scroll-foundry:v0.0.1 + command: + - /bin/bash + - -c + - /take-over-commit-and-finalize-senders.sh + envFrom: + - configMapRef: + name: rollup-node-env + volumeMounts: + - name: take-over-commit-and-finalize-senders-script + mountPath: /take-over-commit-and-finalize-senders.sh + subPath: take-over-commit-and-finalize-senders.sh + 6-get-db-info: + image: scrolltech/scroll-foundry:v0.0.1 + command: + - /bin/bash + - -c + - /get-db-info.sh + envFrom: + - configMapRef: + name: rollup-node-env + volumeMounts: + - name: get-db-info-script + mountPath: /get-db-info.sh + subPath: get-db-info.sh configMaps: migrate-db: diff --git a/charts/scroll-sdk/Chart.yaml b/charts/scroll-sdk/Chart.yaml index ea3a60fd..f7e30927 100644 --- a/charts/scroll-sdk/Chart.yaml +++ b/charts/scroll-sdk/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 description: scroll helm charts to deploy scroll sdk name: scroll-sdk -version: 0.0.45 +version: 0.0.37 appVersion: v0.1.0 kubeVersion: ">=1.22.0-0" maintainers: @@ -14,7 +14,7 @@ keywords: home: https://github.com/scroll-tech/scroll-sdk dependencies: - name: l1-devnet - version: 0.0.3 + version: 0.0.9 repository: "oci://ghcr.io/scroll-tech/scroll-sdk/helm" condition: l1-devnet.enabled - name: balance-checker @@ -78,7 +78,7 @@ dependencies: version: 7.3.11 condition: grafana.enabled - name: l2-sequencer - version: 0.0.11 + version: 0.0.41 repository: "oci://ghcr.io/scroll-tech/scroll-sdk/helm" condition: l2-sequencer.enabled - name: loki-stack @@ -98,7 +98,7 @@ dependencies: repository: "oci://ghcr.io/scroll-tech/scroll-sdk/helm" condition: rollup-explorer-backend.enabled - name: rollup-node - version: 0.0.11 + version: 0.0.25 repository: "oci://ghcr.io/scroll-tech/scroll-sdk/helm" condition: rollup-node.enabled - name: rpc-gateway diff --git a/charts/scroll-sdk/config.toml b/charts/scroll-sdk/config.toml index 67a7befb..382d22de 100644 --- a/charts/scroll-sdk/config.toml +++ b/charts/scroll-sdk/config.toml @@ -4,10 +4,10 @@ L1_RPC_ENDPOINT = "http://l1-devnet:8545" L1_RPC_ENDPOINT_WEBSOCKET = "ws://l1-devnet:8546" L2_RPC_ENDPOINT = "http://l2-sequencer:8545" -CHAIN_NAME_L1="Ethereum" -CHAIN_NAME_L2="Scroll SDK" -CHAIN_ID_L1 = 111111 -CHAIN_ID_L2 = 221122 +CHAIN_NAME_L1="Ethereum Shadowfork" +CHAIN_NAME_L2="Scroll Shadowfork" +CHAIN_ID_L1 = 1 +CHAIN_ID_L2 = 534352 L1_CONTRACT_DEPLOYMENT_BLOCK = 0 @@ -50,11 +50,10 @@ ALTERNATIVE_GAS_TOKEN_ENABLED = false [sequencer] -L2GETH_SIGNER_ADDRESS = "0x756EA06BDEe36de11F22DCca45a31d8a178eF3c6" -L2GETH_KEYSTORE = '{"address":"756ea06bdee36de11f22dcca45a31d8a178ef3c6","crypto":{"cipher":"aes-128-ctr","ciphertext":"8bfb4e48c6b172f1f5794d2874476ca62f8184507c0916dbd45fe77a0056114c","cipherparams":{"iv":"509eb70e7379a776e0779634b6668277"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"ef0f0334e5db7c12d76993e1e9627593fd0d7cd44444b689e792c86bc8a5d75f"},"mac":"d766cac11d0bd563316f5655ebf07550b6fce98ba0ca3c13acdc1b65f5f185ca"},"id":"4459ad67-f2ce-48b2-8940-c0582106a4c6","version":3}' -L2GETH_PASSWORD = "scroll2022" +L2GETH_SIGNER_ADDRESS = "0x4e1f062ffab6dca974947f82a6e836e678a7d435" +L2GETH_KEYSTORE = '{"address":"4e1f062ffab6dca974947f82a6e836e678a7d435","crypto":{"cipher":"aes-128-ctr","ciphertext":"c99d70c628ade76bcfbfd7b5b8a971b36617578fee28866f780357de146bcf28","cipherparams":{"iv":"e32b0124fbcee506087e9893c4a9bcbb"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"3edd130403fdf26e7a7c20da544865e458137a062badff1e2e637ad4fe2d43dc"},"mac":"b96073a311dc26f369d82bd222db1905302444bb53048f2864f747ed1ce48bc3"},"id":"4d7d0d01-45a6-4840-925b-1d89cb626eb8","version":3}' +L2GETH_PASSWORD = "1234" L2GETH_NODEKEY = "2f59ff2fdee1c42a3d8c8980c313bc8d6c2557463f7bb92b0f0bc89a6d3cbf01" -L2_GETH_STATIC_PEERS = '["enode://848a7d59dd8f60dd1a51160e6bc15c194937855443de9be4b2abd83e11a5c4ac21d61d065448c5c520826fe83f1f29eb5a452daccca27b8113aa897074132507@l2-sequencer:30303"]' [rollup] @@ -63,7 +62,7 @@ MAX_BLOCK_IN_CHUNK = 100 MAX_CHUNK_IN_BATCH = 15 MAX_BATCH_IN_BUNDLE = 30 MAX_L1_MESSAGE_GAS_LIMIT = 10_000_000 -TEST_ENV_MOCK_FINALIZE_ENABLED = true +TEST_ENV_MOCK_FINALIZE_ENABLED = "false" TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC = 300 [frontend] @@ -115,3 +114,10 @@ RPC_GATEWAY_HOST = "l2-rpc.scrollsdk" BLOCKSCOUT_HOST = "blockscout.scrollsdk" ADMIN_SYSTEM_DASHBOARD_HOST= "admin-system-dashboard.scrollsdk" GRAFANA_HOST = "http://grafana.scrollsdk" + +[shadowfork] +L1_FULLNODE_RPC_ENDPOINT = "https://rpc.ankr.com/eth" +L1_SHADOWFORK_BLOCK_NUMBER = "18356993" +L1_MAINNET_SCROLL_CHAIN_PROXY_ADDR = "0xa13BAF47339d63B743e7Da8741db5456DAc1E556" +L1_MAINNET_SCROLL_OWNER_ADDR = "0x798576400F7D662961BA15C6b3F3d813447a26a6" +SCROLL_RDS_ROLLUP_NODE_DSN = "xxx" diff --git a/charts/scroll-sdk/values.yaml b/charts/scroll-sdk/values.yaml index aca646be..d0994ac2 100644 --- a/charts/scroll-sdk/values.yaml +++ b/charts/scroll-sdk/values.yaml @@ -11,10 +11,10 @@ l1-devnet: pathType: Prefix blockscout: - enabled: true + enabled: false bridge-history-api: - enabled: true + enabled: false ingress: main: enabled: true @@ -29,16 +29,16 @@ bridge-history-api: pathType: Prefix bridge-history-fetcher: - enabled: true + enabled: false balance-checker: enabled: false chain-monitor: - enabled: true + enabled: false contracts: - enabled: true + enabled: false coordinator-api: enabled: false @@ -47,7 +47,7 @@ coordinator-cron: enabled: false frontends: - enabled: true + enabled: false ingress: main: enabled: true @@ -58,10 +58,10 @@ frontends: pathType: Prefix gas-oracle: - enabled: true + enabled: false grafana: - enabled: true + enabled: false fullnameOverride: grafana nameOverride: grafana adminUser: admin @@ -113,7 +113,7 @@ grafana: hosts: ["grafana.scrollsdk"] rollup-explorer-backend: - enabled: true + enabled: false ingress: main: enabled: true @@ -131,7 +131,7 @@ rollup-node: enabled: true l1-explorer: - enabled: true + enabled: false ingress: main: enabled: true @@ -146,7 +146,7 @@ l2-sequencer: enabled: true l2-rpc: - enabled: true + enabled: false ingress: main: enabled: true @@ -158,10 +158,10 @@ l2-rpc: pathType: Prefix l2-bootnode: - enabled: true + enabled: false loki-stack: - enabled: true + enabled: false loki: fullnameOverride: loki nameOverride: loki @@ -193,13 +193,13 @@ scroll-common: enabled: true admin-system-backend: - enabled: true + enabled: false admin-system-cron: - enabled: true + enabled: false admin-system-dashboard: - enabled: true + enabled: false ingress: main: enabled: true diff --git a/devnet/Makefile b/devnet/Makefile index be460773..c2077a4b 100644 --- a/devnet/Makefile +++ b/devnet/Makefile @@ -7,7 +7,7 @@ L1_RPC_HOST := l1-devnet.scrollsdk bootstrap: echo "Pulling helm chart..." - helm pull oci://ghcr.io/scroll-tech/scroll-sdk/helm/scroll-sdk --version 0.0.42 + helm pull oci://ghcr.io/scroll-tech/scroll-sdk/helm/dev/scroll-sdk --version 0.0.37 echo "Extracting helm chart..." tar -xvf *.tgz $(MAKE) config @@ -17,6 +17,9 @@ config: cd scroll-sdk && time docker run --rm -it -v .:/contracts/volume scrolltech/scroll-stack-contracts:gen-configs-v0.0.25 echo "Creating env files..." ./create-env-files.sh scroll-sdk + echo "Overwriting genesis.yaml..." + cp scroll-sdk/genesis.yaml scroll-sdk/genesis.yaml.backup + cp genesis.shadow.yaml scroll-sdk/genesis.yaml ./prepare-config-files.sh install: diff --git a/devnet/create-env-files.sh b/devnet/create-env-files.sh index b3f82721..fd11ef57 100755 --- a/devnet/create-env-files.sh +++ b/devnet/create-env-files.sh @@ -52,7 +52,7 @@ get_service_configmap_variables() { echo "L1_RPC_ENDPOINT:SCROLL_L1_RPC GAS_ORACLE_DB_CONNECTION_STRING:SCROLL_ROLLUP_DB_CONFIG_DSN L2_GAS_ORACLE_SENDER_PRIVATE_KEY:SCROLL_ROLLUP_L1_CONFIG_RELAYER_CONFIG_GAS_ORACLE_SENDER_PRIVATE_KEY L1_GAS_ORACLE_SENDER_PRIVATE_KEY:SCROLL_ROLLUP_L2_CONFIG_RELAYER_CONFIG_GAS_ORACLE_SENDER_PRIVATE_KEY" ;; l1-devnet) - echo "CHAIN_ID_L1:CHAIN_ID" + echo "CHAIN_ID_L1:CHAIN_ID L1_FULLNODE_RPC_ENDPOINT:L1_FULLNODE_RPC_ENDPOINT L1_SHADOWFORK_BLOCK_NUMBER:L1_SHADOWFORK_BLOCK_NUMBER" ;; l1-explorer) echo "CHAIN_ID_L1:CHAIN_ID L1_RPC_ENDPOINT:ETHEREUM_JSONRPC_HTTP_URL L1_RPC_ENDPOINT:ETHEREUM_JSONRPC_TRACE_URL L1_RPC_ENDPOINT:JSON_RPC L1_RPC_ENDPOINT_WEBSOCKET:ETHEREUM_JSONRPC_WS_URL L1_EXPLORER_DB_CONNECTION_STRING:DATABASE_URL" @@ -67,7 +67,7 @@ get_service_configmap_variables() { echo "CHAIN_ID_L2:CHAIN_ID L1_RPC_ENDPOINT:L2GETH_L1_ENDPOINT L2GETH_SIGNER_ADDRESS:L2GETH_SIGNER_ADDRESS L1_CONTRACT_DEPLOYMENT_BLOCK:L2GETH_L1_CONTRACT_DEPLOYMENT_BLOCK L2GETH_KEYSTORE:L2GETH_KEYSTORE L2GETH_PASSWORD:L2GETH_PASSWORD L2GETH_NODEKEY:L2GETH_NODEKEY L2_GETH_STATIC_PEERS:L2GETH_PEER_LIST" ;; rollup-node) - echo "L1_RPC_ENDPOINT:L1_RPC_ENDPOINT L2_RPC_ENDPOINT:L2_RPC_ENDPOINT ROLLUP_NODE_DB_CONNECTION_STRING:SCROLL_ROLLUP_DB_CONFIG_DSN L1_SCROLL_CHAIN_PROXY_ADDR:L1_SCROLL_CHAIN_PROXY_ADDR L1_COMMIT_SENDER_PRIVATE_KEY:SCROLL_ROLLUP_L2_CONFIG_RELAYER_CONFIG_COMMIT_SENDER_PRIVATE_KEY L1_FINALIZE_SENDER_PRIVATE_KEY:SCROLL_ROLLUP_L2_CONFIG_RELAYER_CONFIG_FINALIZE_SENDER_PRIVATE_KEY" + echo "L1_RPC_ENDPOINT:L1_RPC_ENDPOINT L2_RPC_ENDPOINT:L2_RPC_ENDPOINT ROLLUP_NODE_DB_CONNECTION_STRING:SCROLL_ROLLUP_DB_CONFIG_DSN L1_MAINNET_SCROLL_CHAIN_PROXY_ADDR:L1_SCROLL_CHAIN_PROXY_ADDR L1_COMMIT_SENDER_PRIVATE_KEY:SCROLL_ROLLUP_L2_CONFIG_RELAYER_CONFIG_COMMIT_SENDER_PRIVATE_KEY L1_FINALIZE_SENDER_PRIVATE_KEY:SCROLL_ROLLUP_L2_CONFIG_RELAYER_CONFIG_FINALIZE_SENDER_PRIVATE_KEY L1_COMMIT_SENDER_ADDR:L1_COMMIT_SENDER_ADDR L1_FINALIZE_SENDER_ADDR:L1_FINALIZE_SENDER_ADDR L1_MAINNET_SCROLL_OWNER_ADDR:L1_MAINNET_SCROLL_OWNER_ADDR SCROLL_RDS_ROLLUP_NODE_DSN:SCROLL_RDS_ROLLUP_NODE_DSN TEST_ENV_MOCK_FINALIZE_ENABLED:TEST_ENV_MOCK_FINALIZE_ENABLED" ;; *) echo "Service $service_name not found." diff --git a/devnet/genesis.shadow.yaml b/devnet/genesis.shadow.yaml new file mode 100644 index 00000000..5e0592fd --- /dev/null +++ b/devnet/genesis.shadow.yaml @@ -0,0 +1,98 @@ +scrollConfig: | + { + "config": { + "chainId": 534352, + "homesteadBlock": 0, + "eip150Block": 0, + "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "berlinBlock": 0, + "londonBlock": 0, + "archimedesBlock": 0, + "shanghaiBlock": 0, + "bernoulliBlock": 5220340, + "curieBlock": 7096836, + "clique": { + "period": 3, + "epoch": 30000, + "relaxed_period": true, + "shadow_fork_height": 59813, + "shadow_fork_signer": "0x4e1f062ffab6dca974947f82a6e836e678a7d435" + }, + "scroll": { + "useZktrie": true, + "maxTxPerBlock": 100, + "maxTxPayloadBytesPerBlock": 122880, + "feeVaultAddress": "0x5300000000000000000000000000000000000005", + "l1Config": { + "l1ChainId": "1", + "l1MessageQueueAddress": "0x0d7E906BD9cAFa154b048cFa766Cc1E54E39AF9B", + "scrollChainAddress": "0xa13BAF47339d63B743e7Da8741db5456DAc1E556", + "numL1MessagesPerBlock": "10" + } + } + }, + "nonce": "0x0", + "timestamp": "0x6524e860", + "extraData": "0x4c61206573746f6e7465636f206573746173206d616c6665726d6974612e0000d2ACF5d16a983DB0d909d9D761B8337Fabd6cBd10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasLimit": "10000000", + "difficulty": "0x1", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "0x0000000000000000000000000000000000000000", + "alloc": { + "0xF9062b8a30e0d7722960e305049FA50b86ba6253": { + "balance": "2000000000000000000" + }, + "0x781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC": { + "balance": "226156424291633194186662080095093570025917938800079226637565593765455331328" + }, + "0x5300000000000000000000000000000000000000": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c806383cc76601161006657806383cc7660146100fc5780638da5cb5b1461010f578063c4d66de814610122578063d4b9f4fa14610135578063f2fde38b1461013e57600080fd5b806326aad7b7146100985780633cb747bf146100b4578063600a2e77146100df578063715018a6146100f2575b600080fd5b6100a160015481565b6040519081526020015b60405180910390f35b6053546100c7906001600160a01b031681565b6040516001600160a01b0390911681526020016100ab565b6100a16100ed36600461054a565b610151565b6100fa6101f6565b005b6100a161010a36600461054a565b61022c565b6052546100c7906001600160a01b031681565b6100fa610130366004610563565b610243565b6100a160005481565b6100fa61014c366004610563565b6102db565b6053546000906001600160a01b031633146101a45760405162461bcd60e51b815260206004820152600e60248201526d37b7363c9036b2b9b9b2b733b2b960911b60448201526064015b60405180910390fd5b6000806101b084610367565b60408051838152602081018890529294509092507ffaa617c2d8ce12c62637dbce76efcc18dae60574aa95709bdcedce7e76071693910160405180910390a19392505050565b6052546001600160a01b031633146102205760405162461bcd60e51b815260040161019b90610593565b61022a6000610486565b565b602a816028811061023c57600080fd5b0154905081565b6052546001600160a01b0316331461026d5760405162461bcd60e51b815260040161019b90610593565b600154156102b15760405162461bcd60e51b815260206004820152601160248201527063616e6e6f7420696e697469616c697a6560781b604482015260640161019b565b6102b96104d8565b605380546001600160a01b0319166001600160a01b0392909216919091179055565b6052546001600160a01b031633146103055760405162461bcd60e51b815260040161019b90610593565b6001600160a01b03811661035b5760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f2061646472657373000000604482015260640161019b565b61036481610486565b50565b60035460009081906103bb5760405162461bcd60e51b815260206004820152601a60248201527f63616c6c206265666f726520696e697469616c697a6174696f6e000000000000604482015260640161019b565b6001548360005b8215610456576103d36002846105e0565b60000361041f5781602a82602881106103ee576103ee6105ca565b01556104188260028360288110610407576104076105ca565b015460009182526020526040902090565b915061044a565b610447602a8260288110610435576104356105ca565b01548360009182526020526040902090565b91505b600192831c92016103c2565b81602a826028811061046a5761046a6105ca565b0155506000819055600180548082019091559590945092505050565b605280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b60286104e8826001610618565b10156103645761051960028260288110610504576105046105ca565b015460028360288110610407576104076105ca565b6002610526836001610618565b60288110610536576105366105ca565b01558061054281610631565b9150506104db565b60006020828403121561055c57600080fd5b5035919050565b60006020828403121561057557600080fd5b81356001600160a01b038116811461058c57600080fd5b9392505050565b60208082526017908201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000826105fd57634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b8082018082111561062b5761062b610602565b92915050565b60006001820161064357610643610602565b506001019056fea26469706673582212208fb1cb9933bb17dd0a7c17de7c890919b08d2fd7eb2bede7b41caa32709b30b564736f6c63430008100033", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000052": "0xF9062b8a30e0d7722960e305049FA50b86ba6253" + } + }, + "0x5300000000000000000000000000000000000002": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063715018a61161008c578063bede39b511610066578063bede39b51461018d578063de26c4a1146101a0578063f2fde38b146101b3578063f45e65d8146101c657600080fd5b8063715018a6146101475780638da5cb5b1461014f57806393e59dc11461017a57600080fd5b80630c18c162146100d45780633577afc5146100f05780633d0f963e1461010557806349948e0e14610118578063519b4bd31461012b5780637046559714610134575b600080fd5b6100dd60025481565b6040519081526020015b60405180910390f35b6101036100fe366004610671565b6101cf565b005b61010361011336600461068a565b610291565b6100dd6101263660046106d0565b61031c565b6100dd60015481565b610103610142366004610671565b610361565b610103610416565b600054610162906001600160a01b031681565b6040516001600160a01b0390911681526020016100e7565b600454610162906001600160a01b031681565b61010361019b366004610671565b61044c565b6100dd6101ae3660046106d0565b610533565b6101036101c136600461068a565b610595565b6100dd60035481565b6000546001600160a01b031633146102025760405162461bcd60e51b81526004016101f990610781565b60405180910390fd5b621c9c388111156102555760405162461bcd60e51b815260206004820152601760248201527f657863656564206d6178696d756d206f7665726865616400000000000000000060448201526064016101f9565b60028190556040518181527f32740b35c0ea213650f60d44366b4fb211c9033b50714e4a1d34e65d5beb9bb4906020015b60405180910390a150565b6000546001600160a01b031633146102bb5760405162461bcd60e51b81526004016101f990610781565b600480546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f22d1c35fe072d2e42c3c8f9bd4a0d34aa84a0101d020a62517b33fdb3174e5f7910160405180910390a15050565b60008061032883610533565b905060006001548261033a91906107b8565b9050633b9aca006003548261034f91906107b8565b61035991906107e5565b949350505050565b6000546001600160a01b0316331461038b5760405162461bcd60e51b81526004016101f990610781565b61039b633b9aca006103e86107b8565b8111156103e15760405162461bcd60e51b8152602060048201526014602482015273657863656564206d6178696d756d207363616c6560601b60448201526064016101f9565b60038190556040518181527f3336cd9708eaf2769a0f0dc0679f30e80f15dcd88d1921b5a16858e8b85c591a90602001610286565b6000546001600160a01b031633146104405760405162461bcd60e51b81526004016101f990610781565b61044a6000610621565b565b6004805460405163efc7840160e01b815233928101929092526001600160a01b03169063efc7840190602401602060405180830381865afa158015610495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b99190610807565b6104fe5760405162461bcd60e51b81526020600482015260166024820152752737ba103bb434ba32b634b9ba32b21039b2b73232b960511b60448201526064016101f9565b60018190556040518181527f351fb23757bb5ea0546c85b7996ddd7155f96b939ebaa5ff7bc49c75f27f2c4490602001610286565b80516000908190815b818110156105865784818151811061055657610556610829565b01602001516001600160f81b0319166000036105775760048301925061057e565b6010830192505b60010161053c565b50506002540160400192915050565b6000546001600160a01b031633146105bf5760405162461bcd60e51b81526004016101f990610781565b6001600160a01b0381166106155760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f206164647265737300000060448201526064016101f9565b61061e81610621565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561068357600080fd5b5035919050565b60006020828403121561069c57600080fd5b81356001600160a01b03811681146106b357600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156106e257600080fd5b813567ffffffffffffffff808211156106fa57600080fd5b818401915084601f83011261070e57600080fd5b813581811115610720576107206106ba565b604051601f8201601f19908116603f01168101908382118183101715610748576107486106ba565b8160405282815287602084870101111561076157600080fd5b826020860160208301376000928101602001929092525095945050505050565b60208082526017908201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b60008160001904831182151516156107e057634e487b7160e01b600052601160045260246000fd5b500290565b60008261080257634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561081957600080fd5b815180151581146106b357600080fd5b634e487b7160e01b600052603260045260246000fdfea26469706673582212205ea335809638809cf032c794fd966e2439020737b1dcc2218435cb438286efcf64736f6c63430008100033", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0xF9062b8a30e0d7722960e305049FA50b86ba6253" + } + }, + "0x5300000000000000000000000000000000000003": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c8063715018a61461005c57806379586dd7146100665780638da5cb5b14610079578063efc78401146100a9578063f2fde38b146100e5575b600080fd5b6100646100f8565b005b610064610074366004610356565b610137565b60005461008c906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100d56100b736600461042d565b6001600160a01b031660009081526001602052604090205460ff1690565b60405190151581526020016100a0565b6100646100f336600461042d565b610238565b6000546001600160a01b0316331461012b5760405162461bcd60e51b81526004016101229061044f565b60405180910390fd5b61013560006102c4565b565b6000546001600160a01b031633146101615760405162461bcd60e51b81526004016101229061044f565b60005b825181101561023357816001600085848151811061018457610184610486565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055508281815181106101d5576101d5610486565b60200260200101516001600160a01b03167f8daaf060c3306c38e068a75c054bf96ecd85a3db1252712c4d93632744c42e0d83604051610219911515815260200190565b60405180910390a28061022b8161049c565b915050610164565b505050565b6000546001600160a01b031633146102625760405162461bcd60e51b81526004016101229061044f565b6001600160a01b0381166102b85760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f20616464726573730000006044820152606401610122565b6102c1816102c4565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b80356001600160a01b038116811461034157600080fd5b919050565b8035801515811461034157600080fd5b6000806040838503121561036957600080fd5b823567ffffffffffffffff8082111561038157600080fd5b818501915085601f83011261039557600080fd5b81356020828211156103a9576103a9610314565b8160051b604051601f19603f830116810181811086821117156103ce576103ce610314565b6040529283528183019350848101820192898411156103ec57600080fd5b948201945b83861015610411576104028661032a565b855294820194938201936103f1565b96506104209050878201610346565b9450505050509250929050565b60006020828403121561043f57600080fd5b6104488261032a565b9392505050565b60208082526017908201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000600182016104bc57634e487b7160e01b600052601160045260246000fd5b506001019056fea26469706673582212203414b076e92b618bd7c3437159d7bceb2acc3a5c82f51f383465512d9c52e97064736f6c63430008100033", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0xF9062b8a30e0d7722960e305049FA50b86ba6253" + } + }, + "0x5300000000000000000000000000000000000004": { + "balance": "0x0", + "code": "0x6080604052600436106101025760003560e01c806370a0823111610095578063a457c2d711610064578063a457c2d7146102b4578063a9059cbb146102d4578063d0e30db0146102f4578063d505accf146102fc578063dd62ed3e1461031c57600080fd5b806370a08231146102215780637ecebe001461025757806384b0196e1461027757806395d89b411461029f57600080fd5b80632e1a7d4d116100d15780632e1a7d4d146101b0578063313ce567146101d05780633644e515146101ec578063395093511461020157600080fd5b806306fdde0314610116578063095ea7b31461014157806318160ddd1461017157806323b872dd1461019057600080fd5b366101115761010f61033c565b005b600080fd5b34801561012257600080fd5b5061012b61038d565b60405161013891906112fa565b60405180910390f35b34801561014d57600080fd5b5061016161015c366004611330565b61041f565b6040519015158152602001610138565b34801561017d57600080fd5b506002545b604051908152602001610138565b34801561019c57600080fd5b506101616101ab36600461135a565b610439565b3480156101bc57600080fd5b5061010f6101cb366004611396565b61045d565b3480156101dc57600080fd5b5060405160128152602001610138565b3480156101f857600080fd5b5061018261054e565b34801561020d57600080fd5b5061016161021c366004611330565b61055d565b34801561022d57600080fd5b5061018261023c3660046113af565b6001600160a01b031660009081526020819052604090205490565b34801561026357600080fd5b506101826102723660046113af565b61057f565b34801561028357600080fd5b5061028c61059d565b60405161013897969594939291906113ca565b3480156102ab57600080fd5b5061012b610626565b3480156102c057600080fd5b506101616102cf366004611330565b610635565b3480156102e057600080fd5b506101616102ef366004611330565b6106b0565b61010f61033c565b34801561030857600080fd5b5061010f610317366004611460565b6106be565b34801561032857600080fd5b506101826103373660046114d3565b610822565b336103478134610881565b806001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3460405161038291815260200190565b60405180910390a250565b60606003805461039c90611506565b80601f01602080910402602001604051908101604052809291908181526020018280546103c890611506565b80156104155780601f106103ea57610100808354040283529160200191610415565b820191906000526020600020905b8154815290600101906020018083116103f857829003601f168201915b5050505050905090565b60003361042d818585610940565b60019150505b92915050565b600033610447858285610a65565b610452858585610adf565b506001949350505050565b336104688183610c83565b6000816001600160a01b03168360405160006040518083038185875af1925050503d80600081146104b5576040519150601f19603f3d011682016040523d82523d6000602084013e6104ba565b606091505b50509050806105065760405162461bcd60e51b81526020600482015260136024820152721dda5d1a191c985dc81155120819985a5b1959606a1b60448201526064015b60405180910390fd5b816001600160a01b03167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b658460405161054191815260200190565b60405180910390a2505050565b6000610558610db2565b905090565b60003361042d8185856105708383610822565b61057a919061153a565b610940565b6001600160a01b038116600090815260076020526040812054610433565b6000606080828080836105d17f577261707065642045746865720000000000000000000000000000000000000d6005610edd565b6105fc7f31000000000000000000000000000000000000000000000000000000000000016006610edd565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60606004805461039c90611506565b600033816106438286610822565b9050838110156106a35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104fd565b6104528286868403610940565b60003361042d818585610adf565b8342111561070e5760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016104fd565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861073d8c610f81565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061079882610fa9565b905060006107a882878787610fd6565b9050896001600160a01b0316816001600160a01b03161461080b5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016104fd565b6108168a8a8a610940565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60006020835110156108695761086283610ffe565b9050610433565b8161087484826115bf565b5060ff9050610433565b90565b6001600160a01b0382166108d75760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104fd565b80600260008282546108e9919061153a565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0383166109a25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104fd565b6001600160a01b038216610a035760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104fd565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000610a718484610822565b90506000198114610ad95781811015610acc5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104fd565b610ad98484848403610940565b50505050565b6001600160a01b038316610b435760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104fd565b6001600160a01b038216610ba55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104fd565b6001600160a01b03831660009081526020819052604090205481811015610c1d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104fd565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ad9565b6001600160a01b038216610ce35760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104fd565b6001600160a01b03821660009081526020819052604090205481811015610d575760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104fd565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610a58565b505050565b6000306001600160a01b037f000000000000000000000000530000000000000000000000000000000000000416148015610e0b57507f000000000000000000000000000000000000000000000000000000000008275046145b15610e3557507fe5b117a3cd7ae7ed3508e6e6c5a0794536b2a8dee12533c4d7524eae9c85438f90565b610558604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f00cd3d46df44f2cbb950cf84eb2e92aa2ddd23195b1a009173ea59a063357ed3918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b606060ff8314610ef0576108628361103c565b818054610efc90611506565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2890611506565b8015610f755780601f10610f4a57610100808354040283529160200191610f75565b820191906000526020600020905b815481529060010190602001808311610f5857829003601f168201915b50505050509050610433565b6001600160a01b03811660009081526007602052604090208054600181018255905b50919050565b6000610433610fb6610db2565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000610fe78787878761107b565b91509150610ff48161113f565b5095945050505050565b600080829050601f81511115611029578260405163305a27a960e01b81526004016104fd91906112fa565b80516110348261167f565b179392505050565b606060006110498361128c565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156110b25750600090506003611136565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611106573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661112f57600060019250925050611136565b9150600090505b94509492505050565b6000816004811115611153576111536116a3565b0361115b5750565b600181600481111561116f5761116f6116a3565b036111bc5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104fd565b60028160048111156111d0576111d06116a3565b0361121d5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104fd565b6003816004811115611231576112316116a3565b036112895760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104fd565b50565b600060ff8216601f81111561043357604051632cd44ac360e21b815260040160405180910390fd5b6000815180845260005b818110156112da576020818501810151868301820152016112be565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061130d60208301846112b4565b9392505050565b80356001600160a01b038116811461132b57600080fd5b919050565b6000806040838503121561134357600080fd5b61134c83611314565b946020939093013593505050565b60008060006060848603121561136f57600080fd5b61137884611314565b925061138660208501611314565b9150604084013590509250925092565b6000602082840312156113a857600080fd5b5035919050565b6000602082840312156113c157600080fd5b61130d82611314565b60ff60f81b881681526000602060e0818401526113ea60e084018a6112b4565b83810360408501526113fc818a6112b4565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b8181101561144e57835183529284019291840191600101611432565b50909c9b505050505050505050505050565b600080600080600080600060e0888a03121561147b57600080fd5b61148488611314565b965061149260208901611314565b95506040880135945060608801359350608088013560ff811681146114b657600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156114e657600080fd5b6114ef83611314565b91506114fd60208401611314565b90509250929050565b600181811c9082168061151a57607f821691505b602082108103610fa357634e487b7160e01b600052602260045260246000fd5b8082018082111561043357634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b601f821115610dad57600081815260208120601f850160051c810160208610156115985750805b601f850160051c820191505b818110156115b7578281556001016115a4565b505050505050565b815167ffffffffffffffff8111156115d9576115d961155b565b6115ed816115e78454611506565b84611571565b602080601f831160018114611622576000841561160a5750858301515b600019600386901b1c1916600185901b1785556115b7565b600085815260208120601f198616915b8281101561165157888601518255948401946001909101908401611632565b508582101561166f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80516020808301519190811015610fa35760001960209190910360031b1b16919050565b634e487b7160e01b600052602160045260246000fdfea26469706673582212207f39e33e122e8e2b0381aa6abea46046f56b05ced66c556a06bb1b80be7f55cf64736f6c63430008100033", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x577261707065642045746865720000000000000000000000000000000000001a", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x5745544800000000000000000000000000000000000000000000000000000008" + } + }, + "0x5300000000000000000000000000000000000005": { + "balance": "0x0", + "code": "0x6080604052600436106100ab5760003560e01c806384411d651161006457806384411d65146101845780638da5cb5b1461019a5780639e7adc79146101ba578063f2fde38b146101da578063feec756c146101fa578063ff4f35461461021a57600080fd5b80632e1a7d4d146100b75780633cb747bf146100d95780633ccfd60b14610116578063457e1a491461012b57806366d003ac1461014f578063715018a61461016f57600080fd5b366100b257005b600080fd5b3480156100c357600080fd5b506100d76100d2366004610682565b61023a565b005b3480156100e557600080fd5b506002546100f9906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561012257600080fd5b506100d76103ff565b34801561013757600080fd5b5061014160015481565b60405190815260200161010d565b34801561015b57600080fd5b506003546100f9906001600160a01b031681565b34801561017b57600080fd5b506100d761040c565b34801561019057600080fd5b5061014160045481565b3480156101a657600080fd5b506000546100f9906001600160a01b031681565b3480156101c657600080fd5b506100d76101d536600461069b565b610442565b3480156101e657600080fd5b506100d76101f536600461069b565b6104be565b34801561020657600080fd5b506100d761021536600461069b565b610547565b34801561022657600080fd5b506100d7610235366004610682565b6105c3565b6001548110156102ca5760405162461bcd60e51b815260206004820152604a60248201527f4665655661756c743a207769746864726177616c20616d6f756e74206d75737460448201527f2062652067726561746572207468616e206d696e696d756d20776974686472616064820152691dd85b08185b5bdd5b9d60b21b608482015260a4015b60405180910390fd5b478082111561032e5760405162461bcd60e51b815260206004820152602a60248201527f4665655661756c743a20696e73756666696369656e742062616c616e636520746044820152696f20776974686472617760b01b60648201526084016102c1565b6004805483019055600354604080518481526001600160a01b0390921660208301523382820152517fc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba9181900360600190a1600254600354604080516020810182526000808252915163b2267a7b60e01b81526001600160a01b039485169463b2267a7b9488946103c99491909216928592906004016106cb565b6000604051808303818588803b1580156103e257600080fd5b505af11580156103f6573d6000803e3d6000fd5b50505050505050565b476104098161023a565b50565b6000546001600160a01b031633146104365760405162461bcd60e51b81526004016102c190610737565b6104406000610632565b565b6000546001600160a01b0316331461046c5760405162461bcd60e51b81526004016102c190610737565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f1c928c417a10a21c3cddad148c5dba5d710e4b1442d6d8a36de345935ad8461290600090a35050565b6000546001600160a01b031633146104e85760405162461bcd60e51b81526004016102c190610737565b6001600160a01b03811661053e5760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f206164647265737300000060448201526064016102c1565b61040981610632565b6000546001600160a01b031633146105715760405162461bcd60e51b81526004016102c190610737565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f7e1e96961a397c8aa26162fe259cc837afc95e33aad4945ddc61c18dabb7a6ad90600090a35050565b6000546001600160a01b031633146105ed5760405162461bcd60e51b81526004016102c190610737565b600180549082905560408051828152602081018490527f0d3c80219fe57713b9f9c83d1e51426792d0c14d8e330e65b102571816140965910160405180910390a15050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561069457600080fd5b5035919050565b6000602082840312156106ad57600080fd5b81356001600160a01b03811681146106c457600080fd5b9392505050565b60018060a01b038516815260006020858184015260806040840152845180608085015260005b8181101561070d5786810183015185820160a0015282016106f1565b50600060a0828601015260a0601f19601f8301168501019250505082606083015295945050505050565b60208082526017908201527f63616c6c6572206973206e6f7420746865206f776e657200000000000000000060408201526060019056fea2646970667358221220063c6c384f745ebcacfdd13320e5b9a50687aae43ff14566761f56273111b97e64736f6c63430008100033", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0xF9062b8a30e0d7722960e305049FA50b86ba6253", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x8ac7230489e80000", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x8FA3b4570B4C96f8036C13b64971BA65867eEB48" + } + } + }, + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "baseFeePerGas": null + }