diff --git a/output/blast-rate-limit-update.json b/output/blast-rate-limit-update.json new file mode 100644 index 0000000..873915b --- /dev/null +++ b/output/blast-rate-limit-update.json @@ -0,0 +1,29 @@ +{ + "chainId": "81457", + "safeAddress": "0xa4822d7d24747e6a1baa171944585bad4434f2d5", + "meta": { + "txBuilderVersion": "1.16.5" + }, + "transactions": [ + { + "to": "0x04c0599ae5a44757c0af6f9ec3b93da8976c150a", + "value": "0", + "data": "0xe96e38e2000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000007595000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c00000000000000000000000000000000000000000000000000000000000007634000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c00000000000000000000000000000000000000000000000000000000000007596000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c000000000000000000000000000000000000000000000000000000000000075e8000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c0000000000000000000000000000000000000000000000000000000000000759f000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c00000000000000000000000000000000000000000000000000000000000007606000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c000000000000000000000000000000000000000000000000000000000000075e7000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c000000000000000000000000000000000000000000000000000000000000075d5000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c0000000000000000000000000000000000000000000000000000000000000767f000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c00000000000000000000000000000000000000000000000000000000000007672000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c0000000000000000000000000000000000000000000000000000000000000769a000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c00000000000000000000000000000000000000000000000000000000000007670000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c0000000000000000000000000000000000000000000000000000000000000759a000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c0000000000000000000000000000000000000000000000000000000000000769f000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c0000000000000000000000000000000000000000000000000000000000000767c000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c000000000000000000000000000000000000000000000000000000000000076af000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c0" + }, + { + "to": "0x04c0599ae5a44757c0af6f9ec3b93da8976c150a", + "value": "0", + "data": "0xf51b1aca000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000007595000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c00000000000000000000000000000000000000000000000000000000000007634000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c00000000000000000000000000000000000000000000000000000000000007596000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c000000000000000000000000000000000000000000000000000000000000075e8000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c0000000000000000000000000000000000000000000000000000000000000759f000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c00000000000000000000000000000000000000000000000000000000000007606000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c000000000000000000000000000000000000000000000000000000000000075e7000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c000000000000000000000000000000000000000000000000000000000000075d5000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c0000000000000000000000000000000000000000000000000000000000000767f000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c00000000000000000000000000000000000000000000000000000000000007672000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c0000000000000000000000000000000000000000000000000000000000000769a000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c00000000000000000000000000000000000000000000000000000000000007670000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c0000000000000000000000000000000000000000000000000000000000000759a000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c0000000000000000000000000000000000000000000000000000000000000769f000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c0000000000000000000000000000000000000000000000000000000000000767c000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c000000000000000000000000000000000000000000000000000000000000076af000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000a8c0" + }, + { + "to": "0x04c0599ae5a44757c0af6f9ec3b93da8976c150a", + "value": "0", + "data": "0xd547741f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a600000000000000000000000052c4221cb805479954cde5accff8c4dcaf96623b" + }, + { + "to": "0x52c4221cb805479954cde5accff8c4dcaf96623b", + "value": "0", + "data": "0x9388bd52000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000000000000000000000000000000000000000000000" + } + ] +} \ No newline at end of file diff --git a/scripts/GenerateBlastRateLimitTransactions.s.sol b/scripts/GenerateBlastRateLimitTransactions.s.sol new file mode 100644 index 0000000..475f161 --- /dev/null +++ b/scripts/GenerateBlastRateLimitTransactions.s.sol @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "forge-std/Script.sol"; +import "../utils/L2Constants.sol"; +import "../utils/GnosisHelpers.sol"; +import "../utils/LayerZeroHelpers.sol"; +import "../contracts/PairwiseRateLimiter.sol"; + +contract GenerateBlastRateLimitTransactions is Script, L2Constants, GnosisHelpers { + using LayerZeroHelpers for *; + + uint256 constant RESTRICTED_LIMIT = 50 ether; + uint256 constant RESTRICTED_WINDOW = 12 hours; + + function run() public { + ConfigPerL2 memory blastConfig = BLAST; + + // Create rate limit configurations for all L2s + PairwiseRateLimiter.RateLimitConfig[] memory outboundConfig = new PairwiseRateLimiter.RateLimitConfig[](L2s.length); + PairwiseRateLimiter.RateLimitConfig[] memory inboundConfig = new PairwiseRateLimiter.RateLimitConfig[](L2s.length); + + for (uint256 j = 0; j < L2s.length; j++) { + if (keccak256(abi.encodePacked(L2s[j].NAME)) == keccak256(abi.encodePacked("blast"))) { + outboundConfig[j] = LayerZeroHelpers._getRateLimitConfig(L1_EID, RESTRICTED_LIMIT, RESTRICTED_WINDOW); + inboundConfig[j] = LayerZeroHelpers._getRateLimitConfig(L1_EID, RESTRICTED_LIMIT, RESTRICTED_WINDOW); + } else { + outboundConfig[j] = LayerZeroHelpers._getRateLimitConfig(L2s[j].L2_EID, RESTRICTED_LIMIT, RESTRICTED_WINDOW); + inboundConfig[j] = LayerZeroHelpers._getRateLimitConfig(L2s[j].L2_EID, RESTRICTED_LIMIT, RESTRICTED_WINDOW); + } + } + + // Generate Gnosis transaction JSON with individual transactions + string memory transactionJson = _getGnosisHeader(blastConfig.CHAIN_ID, blastConfig.L2_CONTRACT_CONTROLLER_SAFE); + + // Transaction 1: setOutboundRateLimits + string memory setOutboundData = iToHex(abi.encodeWithSignature("setOutboundRateLimits((uint32,uint256,uint256)[])", outboundConfig)); + transactionJson = string(abi.encodePacked(transactionJson, _getGnosisTransaction(addressToHex(blastConfig.L2_OFT), setOutboundData, false))); + + // Transaction 2: setInboundRateLimits + string memory setInboundData = iToHex(abi.encodeWithSignature("setInboundRateLimits((uint32,uint256,uint256)[])", inboundConfig)); + transactionJson = string(abi.encodePacked(transactionJson, _getGnosisTransaction(addressToHex(blastConfig.L2_OFT), setInboundData, false))); + + // Transaction 3: revokeRole (MINTER_ROLE) + bytes32 MINTER_ROLE = keccak256("MINTER_ROLE"); + string memory revokeMinterData = iToHex(abi.encodeWithSignature("revokeRole(bytes32,address)", MINTER_ROLE, blastConfig.L2_SYNC_POOL)); + transactionJson = string(abi.encodePacked(transactionJson, _getGnosisTransaction(addressToHex(blastConfig.L2_OFT), revokeMinterData, false))); + + // Transaction 4: setMinSyncAmount + string memory setMinSyncData = iToHex(abi.encodeWithSignature("setMinSyncAmount(address,uint256)", ETH_ADDRESS, 0)); + transactionJson = string(abi.encodePacked(transactionJson, _getGnosisTransaction(addressToHex(blastConfig.L2_SYNC_POOL), setMinSyncData, true))); + + vm.writeJson(transactionJson, "./output/blast-rate-limit-update.json"); + + console.log("Generated Blast rate limit transaction JSON:"); + console.log("File: ./output/blast-rate-limit-update.json"); + console.log("Rate limit:", RESTRICTED_LIMIT); + console.log("Rate limit window:", RESTRICTED_WINDOW); + console.log("Number of transactions: 4"); + } + +}