From d510bca9dcd1299a5b90ccdb7b6004d53426c67a Mon Sep 17 00:00:00 2001 From: Brian Bland Date: Thu, 10 Oct 2024 11:24:52 -0700 Subject: [PATCH] chore(sepolia): Update gas limit from 45M->60M (#219) * chore(sepolia): Update gas limit from 45M->60M * Add execution record --- sepolia/2024-10-09-increase-gas-limit/.env | 8 + .../2024-10-09-increase-gas-limit/Makefile | 31 ++ .../2024-10-09-increase-gas-limit/README.md | 290 ++++++++++++++++++ .../foundry.toml | 20 ++ .../11155111/run-1728578106.json | 100 ++++++ 5 files changed, 449 insertions(+) create mode 100644 sepolia/2024-10-09-increase-gas-limit/.env create mode 100644 sepolia/2024-10-09-increase-gas-limit/Makefile create mode 100644 sepolia/2024-10-09-increase-gas-limit/README.md create mode 100644 sepolia/2024-10-09-increase-gas-limit/foundry.toml create mode 100644 sepolia/2024-10-09-increase-gas-limit/records/UpgradeGasLimit.sol/11155111/run-1728578106.json diff --git a/sepolia/2024-10-09-increase-gas-limit/.env b/sepolia/2024-10-09-increase-gas-limit/.env new file mode 100644 index 00000000..2a1d135f --- /dev/null +++ b/sepolia/2024-10-09-increase-gas-limit/.env @@ -0,0 +1,8 @@ +OP_COMMIT=9047beb54c66a5c572784efec8984f259302ec92 +BASE_CONTRACTS_COMMIT=da4f4396f5219961b1b021936e39280e963102ba + +L1_SYSTEM_CONFIG_ADDRESS=0xf272670eb55e895584501d564AfEB048bEd26194 +SYSTEM_CONFIG_OWNER=0x0fe884546476dDd290eC46318785046ef68a0BA9 + +OLD_GAS_LIMIT=45000000 +NEW_GAS_LIMIT=60000000 diff --git a/sepolia/2024-10-09-increase-gas-limit/Makefile b/sepolia/2024-10-09-increase-gas-limit/Makefile new file mode 100644 index 00000000..bc9f23ff --- /dev/null +++ b/sepolia/2024-10-09-increase-gas-limit/Makefile @@ -0,0 +1,31 @@ +include ../../Makefile +include ../.env +include .env + +ifndef LEDGER_ACCOUNT +override LEDGER_ACCOUNT = 1# Sepolia uses hd-path of 1 +endif + +.PHONY: sign-upgrade +sign-upgrade: + $(GOPATH)/bin/eip712sign --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" -- \ + forge script --rpc-url $(L1_RPC_URL) lib/base-contracts/script/deploy/l1/UpgradeGasLimit.sol \ + --sig "sign()" + +.PHONY: execute-upgrade +execute-upgrade: + forge script --rpc-url $(L1_RPC_URL) lib/base-contracts/script/deploy/l1/UpgradeGasLimit.sol \ + --sig "run(bytes)" $(SIGNATURES) --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" --broadcast + + +.PHONY: sign-rollback +sign-rollback: + $(GOPATH)/bin/eip712sign --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" -- \ + forge script --rpc-url $(L1_RPC_URL) lib/base-contracts/script/deploy/l1/RollbackGasLimit.sol \ + --sig "sign()" + + +.PHONY: execute-rollback +execute-rollback: + forge script --rpc-url $(L1_RPC_URL) lib/base-contracts/script/deploy/l1/RollbackGasLimit.sol \ + --sig "run(bytes)" $(SIGNATURES) --ledger --hd-paths "m/44'/60'/$(LEDGER_ACCOUNT)'/0/0" --broadcast diff --git a/sepolia/2024-10-09-increase-gas-limit/README.md b/sepolia/2024-10-09-increase-gas-limit/README.md new file mode 100644 index 00000000..9b4a4bcc --- /dev/null +++ b/sepolia/2024-10-09-increase-gas-limit/README.md @@ -0,0 +1,290 @@ +# Update Gas Limit in L1 `SystemConfig` + +Status: DONE + +## Objective + +We are updating the gas limit to improve TPS and reduce gas fees. + +This runbook invokes two scripts which allow our signers to sign two different calls for our Incident Multisig, which are both defined in the [base-org/contracts](https://github.com/base-org/contracts) repository: + +1. `UpgradeGasLimit` -- This script will update the gas limit to our new limit of 60M gas +2. `RollbackGasLimit` -- This script establishes a rollback call in the case we need to revert to gas + +The values we are sending are statically defined in the `.env`. + +> [!IMPORTANT] We have two transactions to sign. Please follow +> the flow for both "Approving the Update transaction" and +> "Approving the Rollback transaction". Hopefully we only need +> the former, but will have the latter available if needed. + +## Approving the Upgrade transaction + +### 1. Update repo and move to the appropriate folder: + +``` +cd contract-deployments +git pull +cd sepolia/2024-10-09-increase-gas-limit +make deps +``` + +### 2. Setup Ledger + +Your Ledger needs to be connected and unlocked. The Ethereum +application needs to be opened on Ledger with the message "Application +is ready". + +### 3. Simulate and validate the transaction + +Make sure your ledger is still unlocked and run the following. + +```shell +make sign-upgrade +``` + +Once you run the `make sign...` command successfully, you will see a "Simulation link" from the output. + +Paste this URL in your browser. A prompt may ask you to choose a +project, any project will do. You can create one if necessary. + +Click "Simulate Transaction". + +We will be performing 3 validations and then we'll extract the domain hash and +message hash to approve on your Ledger then verify completion: + +1. Validate integrity of the simulation. +2. Validate correctness of the state diff. +3. Validate and extract domain hash and message hash to approve. + +#### 3.1. Validate integrity of the simulation. + +Make sure you are on the "Overview" tab of the tenderly simulation, to +validate integrity of the simulation, we need to check the following: + +1. "Network": Check the network is Ethereum Sepolia. +2. "Timestamp": Check the simulation is performed on a block with a + recent timestamp (i.e. close to when you run the script). +3. "Sender": Check the address shown is your signer account. If not, + you will need to determine which “number” it is in the list of + addresses on your ledger. +4. "Success" with a green check mark + +#### 3.2. Validate correctness of the state diff. + +Now click on the "State" tab. Verify that: + +1. Verify that the nonce is incremented for the Incident Multisig under the "GnosisSafeProxy" at address `0x14536667Cd30e52C0b458BaACcB9faDA7046E056`. We should see the nonce increment from 8 to 9: + +``` +Key: 0x0000000000000000000000000000000000000000000000000000000000000005 +Before: 0x0000000000000000000000000000000000000000000000000000000000000008 +After: 0x00000000000000000000000000000000000000000000000000000000000000009 +``` + +2. Verify that gas limit value is appropriately updated under "Proxy" at address `0x73a79fab69143498ed3712e519a88a918e1f4072`. We should see that the gas limit has been changed from 45M to 60M: + +``` +Key: 0x0000000000000000000000000000000000000000000000000000000000000068 +Before: 0x0000000000000000000000000000000000000000000000000000000002aea540 +After: 0x0000000000000000000000000000000000000000000000000000000003938700 +``` + +#### 3.3. Extract the domain hash and the message hash to approve. + +Now that we have verified the transaction performs the right +operation, we need to extract the domain hash and the message hash to +approve. + +Go back to the "Overview" tab, and find the +`GnosisSafe.checkSignatures` call. This call's `data` parameter +contains both the domain hash and the message hash that will show up +in your Ledger. + +Here is an example screenshot. Note that the value will be +different for each signer: + +![Screenshot 2024-03-07 at 5 49 02 PM](https://github.com/base-org/contract-deployments/assets/84420280/1b7905f1-1350-4634-a804-7b4458d0ddc9) + +It will be a concatenation of `0x1901`, the domain hash, and the +message hash: `0x1901[domain hash][message hash]`. + +Note down this value. You will need to compare it with the ones +displayed on the Ledger screen at signing. + +### 4. Approve the signature on your ledger + +Once the validations are done, it's time to actually sign the +transaction. Make sure your ledger is still unlocked and run the +following: + +```shell +make sign-upgrade +``` + +> [!IMPORTANT] This is the most security critical part of the +> playbook: make sure the domain hash and message hash in the +> following two places match: + +1. on your Ledger screen. +2. in the Tenderly simulation. You should use the same Tenderly + simulation as the one you used to verify the state diffs, instead + of opening the new one printed in the console. + +There is no need to verify anything printed in the console. There is +no need to open the new Tenderly simulation link either. + +After verification, sign the transaction. You will see the `Data`, +`Signer` and `Signature` printed in the console. Format should be +something like this: + +``` +Data: +Signer:
+Signature: +``` + +Double check the signer address is the right one. + +### 5. Send the output to Facilitator(s) + +Nothing has occurred onchain - these are offchain signatures which +will be collected by Facilitators for execution. Execution can occur +by anyone once a threshold of signatures are collected, so a +Facilitator will do the final execution for convenience. + +Share the `Data`, `Signer` and `Signature` with the Facilitator, and +congrats, you are done! + +## Approving the Rollback transaction + +Complete the above steps for `Approving the Update transaction` before continuing below. + +### 1. Simulate and validate the transaction + +Make sure your ledger is still unlocked and run the following. + +```shell +make sign-rollback +``` + +Once you run the make sign command successfully, you will see a "Simulation link" from the output. Once again paste this URL in your browser and click "Simulate Transaction". + +We will be performing 3 validations and then we'll extract the domain hash and +message hash to approve on your Ledger then verify completion: + +1. Validate integrity of the simulation. +2. Validate correctness of the state diff. +3. Validate and extract domain hash and message hash to approve. +4. Validate that the transaction completed successfully + +#### 3.1. Validate integrity of the simulation. + +Make sure you are on the "Overview" tab of the tenderly simulation, to +validate integrity of the simulation, we need to check the following: + +1. "Network": Check the network is Ethereum Sepolia. +2. "Timestamp": Check the simulation is performed on a block with a + recent timestamp (i.e. close to when you run the script). +3. "Sender": Check the address shown is your signer account. If not, + you will need to determine which “number” it is in the list of + addresses on your ledger. +4. "Success" with a green check mark + +#### 3.2. Validate correctness of the state diff. + +Now click on the "State" tab. Verify that: + +1. Verify that the nonce is incremented for the Incident Multisig under the "GnosisSafeProxy" at address `0x14536667Cd30e52C0b458BaACcB9faDA7046E056`: + +``` +Key: 0x0000000000000000000000000000000000000000000000000000000000000005 +Before: 0x00000000000000000000000000000000000000000000000000000000000000009 +After: 0x0000000000000000000000000000000000000000000000000000000000000000a +``` + +2. Verify that gas limit value is appropriately updated under "Proxy" at address `0x73a79fab69143498ed3712e519a88a918e1f4072`: + +``` +Key: 0x0000000000000000000000000000000000000000000000000000000000000068 +Before: 0x0000000000000000000000000000000000000000000000000000000003938700 +After: 0x0000000000000000000000000000000000000000000000000000000002aea540 +``` + +#### 3.3. Extract the domain hash and the message hash to approve. + +Now that we have verified the transaction performs the right +operation, we need to extract the domain hash and the message hash to +approve. + +Go back to the "Overview" tab, and find the +`GnosisSafe.checkSignatures` call. This call's `data` parameter +contains both the domain hash and the message hash that will show up +in your Ledger. + +Here is an example screenshot. Note that the value will be +different for each signer: + +![Screenshot 2024-03-07 at 5 49 32 PM](https://github.com/base-org/contract-deployments/assets/84420280/b6b5817f-0d05-4862-b16a-4f7f5f18f036) + +It will be a concatenation of `0x1901`, the domain hash, and the +message hash: `0x1901[domain hash][message hash]`. + +Note down this value. You will need to compare it with the ones +displayed on the Ledger screen at signing. + +### 4. Approve the signature on your ledger + +Once the validations are done, it's time to actually sign the +transaction. Make sure your ledger is still unlocked and run the +following: + +```shell +make sign-rollback +``` + +> [!IMPORTANT] This is the most security critical part of the +> playbook: make sure the domain hash and message hash in the +> following two places match: + +1. on your Ledger screen. +2. in the Tenderly simulation. You should use the same Tenderly + simulation as the one you used to verify the state diffs, instead + of opening the new one printed in the console. + +There is no need to verify anything printed in the console. There is +no need to open the new Tenderly simulation link either. + +After verification, sign the transaction. You will see the `Data`, +`Signer` and `Signature` printed in the console. Format should be +something like this: + +``` +Data: +Signer:
+Signature: +``` + +Double check the signer address is the right one. + +### 5. Send the output to Facilitator(s) + +Nothing has occurred onchain - these are offchain signatures which +will be collected by Facilitators for execution. Execution can occur +by anyone once a threshold of signatures are collected, so a +Facilitator will do the final execution for convenience. + +Share the `Data`, `Signer` and `Signature` with the Facilitator, and +congrats, you are done! + +## Execute the output + +1. Collect outputs from all participating signers. +2. Concatenate all signatures and export it as the `SIGNATURES` + environment variable, i.e. `export +SIGNATURES="0x[SIGNATURE1][SIGNATURE2]..."`. +3. Run `make execute-upgrade` + +> [!IMPORTANT] IN THE EVENT WE NEED TO PERFORM ROLLBACK +> Repeat the above, but replace the signatures with the signed +> rollback signatures collected, the call `make execute-rollback` diff --git a/sepolia/2024-10-09-increase-gas-limit/foundry.toml b/sepolia/2024-10-09-increase-gas-limit/foundry.toml new file mode 100644 index 00000000..0d7a9ef9 --- /dev/null +++ b/sepolia/2024-10-09-increase-gas-limit/foundry.toml @@ -0,0 +1,20 @@ +[profile.default] +src = 'src' +out = 'out' +libs = ['lib'] +broadcast = 'records' +fs_permissions = [ {access = "read-write", path = "./"} ] +optimizer = true +optimizer_runs = 999999 +solc_version = "0.8.15" +via-ir = true +remappings = [ + '@eth-optimism-bedrock/=lib/optimism/packages/contracts-bedrock/', + '@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts', + '@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts', + '@rari-capital/solmate/=lib/solmate/', + '@base-contracts/=lib/base-contracts', + '@solady/=lib/solady/src/' +] + +# See more config options https://github.com/foundry-rs/foundry/tree/master/config \ No newline at end of file diff --git a/sepolia/2024-10-09-increase-gas-limit/records/UpgradeGasLimit.sol/11155111/run-1728578106.json b/sepolia/2024-10-09-increase-gas-limit/records/UpgradeGasLimit.sol/11155111/run-1728578106.json new file mode 100644 index 00000000..073b92af --- /dev/null +++ b/sepolia/2024-10-09-increase-gas-limit/records/UpgradeGasLimit.sol/11155111/run-1728578106.json @@ -0,0 +1,100 @@ +{ + "transactions": [ + { + "hash": "0x46e866262cef4758f01c98f3af1e93a26ba199be67c89d35a5c294a99ea9a053", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x0fe884546476ddd290ec46318785046ef68a0ba9", + "function": "execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)", + "arguments": [ + "0xcA11bde05977b3631167028862bE2a173976CA11", + "0", + "0x82ad56cb000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000f272670eb55e895584501d564afeb048bed26194000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024b40a817c000000000000000000000000000000000000000000000000000000000393870000000000000000000000000000000000000000000000000000000000", + "1", + "0", + "0", + "0", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x243db38f8b30ec8cde3ac552857d3f10369a6025775f612ed6be53f160dcce561af0b2efe04cc99bf2ef47aade6ab46f9c034232f86ffaf1823258a324b89dc91c46d849f9fd90e5bca0ddbe04bb4a200f334e7dc5dbbc478fc36010fd30192c72138331d0220772fd02a8df63f142c83a77d8fd29401f5bd3e4c7d56f327719d51c79690e737327ae098a38f829681cfc6bac7b727a1394ae72918b6751b1b58432590f742d0b5bf07e906288b945eaa2611d014cde6d93a16e1a8001f3160699091b" + ], + "transaction": { + "from": "0x420c8fe1ddb0593c71487445576c87c17f177179", + "to": "0x0fe884546476ddd290ec46318785046ef68a0ba9", + "gas": "0x2254b", + "value": "0x0", + "input": "0x6a761202000000000000000000000000ca11bde05977b3631167028862be2a173976ca110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000012482ad56cb000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000f272670eb55e895584501d564afeb048bed26194000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024b40a817c0000000000000000000000000000000000000000000000000000000003938700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c3243db38f8b30ec8cde3ac552857d3f10369a6025775f612ed6be53f160dcce561af0b2efe04cc99bf2ef47aade6ab46f9c034232f86ffaf1823258a324b89dc91c46d849f9fd90e5bca0ddbe04bb4a200f334e7dc5dbbc478fc36010fd30192c72138331d0220772fd02a8df63f142c83a77d8fd29401f5bd3e4c7d56f327719d51c79690e737327ae098a38f829681cfc6bac7b727a1394ae72918b6751b1b58432590f742d0b5bf07e906288b945eaa2611d014cde6d93a16e1a8001f3160699091b0000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x9754bb", + "logs": [ + { + "address": "0x0fe884546476ddd290ec46318785046ef68a0ba9", + "topics": [ + "0x66753cd2356569ee081232e3be8909b950e0a76c1f8460c3a5e3c2be32b11bed" + ], + "data": "0x000000000000000000000000ca11bde05977b3631167028862be2a173976ca110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000012482ad56cb000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000f272670eb55e895584501d564afeb048bed26194000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000024b40a817c0000000000000000000000000000000000000000000000000000000003938700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c3243db38f8b30ec8cde3ac552857d3f10369a6025775f612ed6be53f160dcce561af0b2efe04cc99bf2ef47aade6ab46f9c034232f86ffaf1823258a324b89dc91c46d849f9fd90e5bca0ddbe04bb4a200f334e7dc5dbbc478fc36010fd30192c72138331d0220772fd02a8df63f142c83a77d8fd29401f5bd3e4c7d56f327719d51c79690e737327ae098a38f829681cfc6bac7b727a1394ae72918b6751b1b58432590f742d0b5bf07e906288b945eaa2611d014cde6d93a16e1a8001f3160699091b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000008000000000000000000000000420c8fe1ddb0593c71487445576c87c17f1771790000000000000000000000000000000000000000000000000000000000000003", + "blockHash": "0x197a0824233d97b90f9b068f1fde2e5d122765cb936b2a9f132af8e7ed0954d7", + "blockNumber": "0x688ae9", + "transactionHash": "0x46e866262cef4758f01c98f3af1e93a26ba199be67c89d35a5c294a99ea9a053", + "transactionIndex": "0x2b", + "logIndex": "0x57", + "removed": false + }, + { + "address": "0xf272670eb55e895584501d564afeb048bed26194", + "topics": [ + "0x1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000003938700", + "blockHash": "0x197a0824233d97b90f9b068f1fde2e5d122765cb936b2a9f132af8e7ed0954d7", + "blockNumber": "0x688ae9", + "transactionHash": "0x46e866262cef4758f01c98f3af1e93a26ba199be67c89d35a5c294a99ea9a053", + "transactionIndex": "0x2b", + "logIndex": "0x58", + "removed": false + }, + { + "address": "0x0fe884546476ddd290ec46318785046ef68a0ba9", + "topics": [ + "0x442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e" + ], + "data": "0x1e5fb075847c66bf9847f8928514ae754aac6775a03631fa7bd090e0bfa41e820000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x197a0824233d97b90f9b068f1fde2e5d122765cb936b2a9f132af8e7ed0954d7", + "blockNumber": "0x688ae9", + "transactionHash": "0x46e866262cef4758f01c98f3af1e93a26ba199be67c89d35a5c294a99ea9a053", + "transactionIndex": "0x2b", + "logIndex": "0x59", + "removed": false + } + ], + "logsBloom": "0x04000000400000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000020100000000000000000800000000000000000000000000000008000000200000000800000000040000000000000000000000000000000000000000000000000400000000000100000004000000000000000000000000800000000000000000000000000000000000020000000000000000000000000400000020000000000000000000000000000000000000000000008000000000008000000000", + "type": "0x2", + "transactionHash": "0x46e866262cef4758f01c98f3af1e93a26ba199be67c89d35a5c294a99ea9a053", + "transactionIndex": "0x2b", + "blockHash": "0x197a0824233d97b90f9b068f1fde2e5d122765cb936b2a9f132af8e7ed0954d7", + "blockNumber": "0x688ae9", + "gasUsed": "0x18daf", + "effectiveGasPrice": "0x405d87585", + "from": "0x420c8fe1ddb0593c71487445576c87c17f177179", + "to": "0x0fe884546476ddd290ec46318785046ef68a0ba9", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1728578106, + "chain": 11155111, + "commit": "8c82c9c" +} \ No newline at end of file