From 6c3e95994f868e740e4655be532dc400b1143ef5 Mon Sep 17 00:00:00 2001 From: Stanislav Breadless Date: Wed, 15 Jan 2025 14:58:35 +0100 Subject: [PATCH 01/17] save stage upgrade info --- contracts | 2 +- etc/upgrades/gateway/stage-upgrade-info.yaml | 21 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 etc/upgrades/gateway/stage-upgrade-info.yaml diff --git a/contracts b/contracts index 16dedf6d7769..8204feccbb10 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit 16dedf6d77695ce00f81fce35a3066381b97fca1 +Subproject commit 8204feccbb10b2fa70c419c257b3c88c22c14c0b diff --git a/etc/upgrades/gateway/stage-upgrade-info.yaml b/etc/upgrades/gateway/stage-upgrade-info.yaml new file mode 100644 index 000000000000..cdedcf10e691 --- /dev/null +++ b/etc/upgrades/gateway/stage-upgrade-info.yaml @@ -0,0 +1,21 @@ +# Information about pre-upgrade contracts +l1_chain_id: 11155111 +bridgehub_addr: "0x236D1c3Ff32Bd0Ca26b72Af287E895627c0478cE" +old_validator_timelock: "0x8D65310fe158734eEA3197FF9a6211F9Bba3D0A8" +l1_legacy_shared_bridge: "0x6F03861D12E6401623854E494beACd66BC46e6F0" + +# Information about the post-upgrade contracts +ctm_deployment_tracker_proxy_addr: "0x25E04b7d1fC963aB8e5fEB0797f7a943E260e8b6" +native_token_vault_addr: "0x257CE1e946c9C6531E2C9deBF7fcf821F9467f73" +l1_bytecodes_supplier_addr: "0x662B8fE285BB3aab483e75Ec46136e01aaa154f9" +rollup_l1_da_validator_addr: "0xF9a241A3821BEBE1324FBBC79A3aD60efdfF6ACe" +no_da_validium_l1_validator_addr: "0xBBfaF792b9ae54baC1167b6C2923166FD0FC9873" +expected_rollup_l2_da_validator: "0xfa96A3Da88f201433911bEFf3Ecc434CB1222731" +expected_validium_l2_da_validator: "0xFa30EAe30351A83809657299F6Cad9557c232e8C" +new_validator_timelock: "0xa8A8a8bB25C9E9AbE44Eb7b3e00502a1d8F5AAC4" + +l1_wrapped_base_token_store: "0x44881d92F801F475d974eDa3516B0f47D7e4cF04" +chain_upgrade_diamond_cut: "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000bd979dbfa434d995b4564e07282862f1cf201845000000000000000000000000000000000000000000000000000000000000196000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000aa00000000000000000000000000000000000000000000000000000000000000c400000000000000000000000000000000000000000000000000000000000000f6000000000000000000000000000000000000000000000000000000000000015e000000000000000000000000000000000000000000000000000000000000017c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000d0e18b6810000000000000000000000000000000000000000000000000000000064bf8d6600000000000000000000000000000000000000000000000000000000a9f6d9410000000000000000000000000000000000000000000000000000000027ae4c16000000000000000000000000000000000000000000000000000000004dd18bf5000000000000000000000000000000000000000000000000000000001cc5d10300000000000000000000000000000000000000000000000000000000be6f11cf00000000000000000000000000000000000000000000000000000000e76db86500000000000000000000000000000000000000000000000000000000235d9eb50000000000000000000000000000000000000000000000000000000021f603d7000000000000000000000000000000000000000000000000000000004623c91d000000000000000000000000000000000000000000000000000000001733894500000000000000000000000000000000000000000000000000000000fc57565f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000291de72e3400000000000000000000000000000000000000000000000000000000ea6c029c00000000000000000000000000000000000000000000000000000000cdffacc60000000000000000000000000000000000000000000000000000000052ef6b2c00000000000000000000000000000000000000000000000000000000adfca15e000000000000000000000000000000000000000000000000000000007a0ed627000000000000000000000000000000000000000000000000000000006e9960c30000000000000000000000000000000000000000000000000000000098acd7a600000000000000000000000000000000000000000000000000000000086a56f8000000000000000000000000000000000000000000000000000000003591c1a00000000000000000000000000000000000000000000000000000000079823c9a00000000000000000000000000000000000000000000000000000000d86970d800000000000000000000000000000000000000000000000000000000fd791f3c00000000000000000000000000000000000000000000000000000000e5355c75000000000000000000000000000000000000000000000000000000009d1b5a81000000000000000000000000000000000000000000000000000000007b30c8da00000000000000000000000000000000000000000000000000000000d046815600000000000000000000000000000000000000000000000000000000631f4bac000000000000000000000000000000000000000000000000000000000ec6b0b70000000000000000000000000000000000000000000000000000000033ce93fe0000000000000000000000000000000000000000000000000000000006d49e5b00000000000000000000000000000000000000000000000000000000f5c1182c000000000000000000000000000000000000000000000000000000005518c73b00000000000000000000000000000000000000000000000000000000db1f0bf900000000000000000000000000000000000000000000000000000000b8c2f66f00000000000000000000000000000000000000000000000000000000ef3f0bae00000000000000000000000000000000000000000000000000000000fe26699e000000000000000000000000000000000000000000000000000000003960738200000000000000000000000000000000000000000000000000000000af6a2dcd00000000000000000000000000000000000000000000000000000000a1954fc50000000000000000000000000000000000000000000000000000000046657fe90000000000000000000000000000000000000000000000000000000018e3a9410000000000000000000000000000000000000000000000000000000029b98c6700000000000000000000000000000000000000000000000000000000bd7c541200000000000000000000000000000000000000000000000000000000c3bbd2d700000000000000000000000000000000000000000000000000000000e81e0ba100000000000000000000000000000000000000000000000000000000facd743b000000000000000000000000000000000000000000000000000000009cd939e40000000000000000000000000000000000000000000000000000000056142d7a00000000000000000000000000000000000000000000000000000000b22dd78e0000000000000000000000000000000000000000000000000000000074f4d30d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000812f43dab000000000000000000000000000000000000000000000000000000006c0960f900000000000000000000000000000000000000000000000000000000b473318e00000000000000000000000000000000000000000000000000000000042901c700000000000000000000000000000000000000000000000000000000263b7f8e00000000000000000000000000000000000000000000000000000000e4948f4300000000000000000000000000000000000000000000000000000000eb67241900000000000000000000000000000000000000000000000000000000c924de350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000008701f58c5000000000000000000000000000000000000000000000000000000006edd4f1200000000000000000000000000000000000000000000000000000000c3d93e7c000000000000000000000000000000000000000000000000000000006f497ac6000000000000000000000000000000000000000000000000000000007f61885c00000000000000000000000000000000000000000000000000000000c37533bb0000000000000000000000000000000000000000000000000000000097c09d34000000000000000000000000000000000000000000000000000000000f23da43000000000000000000000000000000000000000000000000000000000000000000000000000000001a1c48880b7c33dbb9d7184086c90da788b55c3c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000140e18b681000000000000000000000000000000000000000000000000000000001733894500000000000000000000000000000000000000000000000000000000fc57565f000000000000000000000000000000000000000000000000000000001cc5d1030000000000000000000000000000000000000000000000000000000021f603d700000000000000000000000000000000000000000000000000000000235d9eb50000000000000000000000000000000000000000000000000000000027ae4c16000000000000000000000000000000000000000000000000000000002878fe74000000000000000000000000000000000000000000000000000000003f42d5dd0000000000000000000000000000000000000000000000000000000041cf49bb000000000000000000000000000000000000000000000000000000004623c91d000000000000000000000000000000000000000000000000000000004dd18bf5000000000000000000000000000000000000000000000000000000006223258e0000000000000000000000000000000000000000000000000000000064b554ad0000000000000000000000000000000000000000000000000000000064bf8d66000000000000000000000000000000000000000000000000000000006e762e9800000000000000000000000000000000000000000000000000000000a9f6d94100000000000000000000000000000000000000000000000000000000b784610700000000000000000000000000000000000000000000000000000000be6f11cf00000000000000000000000000000000000000000000000000000000e76db865000000000000000000000000000000000000000000000000000000000000000000000000000000002433e433f51434a9176de9e38ebbe2a1e08a4007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000002f06d49e5b000000000000000000000000000000000000000000000000000000000ec6b0b700000000000000000000000000000000000000000000000000000000fe26699e0000000000000000000000000000000000000000000000000000000018e3a941000000000000000000000000000000000000000000000000000000001de72e340000000000000000000000000000000000000000000000000000000022c5cf230000000000000000000000000000000000000000000000000000000029b98c670000000000000000000000000000000000000000000000000000000033ce93fe000000000000000000000000000000000000000000000000000000003408e470000000000000000000000000000000000000000000000000000000003591c1a000000000000000000000000000000000000000000000000000000000396073820000000000000000000000000000000000000000000000000000000039d7d4aa0000000000000000000000000000000000000000000000000000000046657fe90000000000000000000000000000000000000000000000000000000052ef6b2c000000000000000000000000000000000000000000000000000000005a59033500000000000000000000000000000000000000000000000000000000631f4bac000000000000000000000000000000000000000000000000000000006a27e8b5000000000000000000000000000000000000000000000000000000006e9960c30000000000000000000000000000000000000000000000000000000074f4d30d0000000000000000000000000000000000000000000000000000000079823c9a000000000000000000000000000000000000000000000000000000007a0ed627000000000000000000000000000000000000000000000000000000007b30c8da000000000000000000000000000000000000000000000000000000008708474e00000000000000000000000000000000000000000000000000000000946ebad100000000000000000000000000000000000000000000000000000000960dcf240000000000000000000000000000000000000000000000000000000098acd7a6000000000000000000000000000000000000000000000000000000009cd939e4000000000000000000000000000000000000000000000000000000009d1b5a8100000000000000000000000000000000000000000000000000000000a1954fc500000000000000000000000000000000000000000000000000000000adfca15e00000000000000000000000000000000000000000000000000000000af6a2dcd00000000000000000000000000000000000000000000000000000000b22dd78e00000000000000000000000000000000000000000000000000000000b8c2f66f00000000000000000000000000000000000000000000000000000000bd7c541200000000000000000000000000000000000000000000000000000000c3bbd2d700000000000000000000000000000000000000000000000000000000cdffacc600000000000000000000000000000000000000000000000000000000d046815600000000000000000000000000000000000000000000000000000000d86970d800000000000000000000000000000000000000000000000000000000db1f0bf900000000000000000000000000000000000000000000000000000000e5355c7500000000000000000000000000000000000000000000000000000000e81e0ba100000000000000000000000000000000000000000000000000000000ea6c029c00000000000000000000000000000000000000000000000000000000ef3f0bae00000000000000000000000000000000000000000000000000000000f4ff5e2e00000000000000000000000000000000000000000000000000000000f5c1182c00000000000000000000000000000000000000000000000000000000facd743b00000000000000000000000000000000000000000000000000000000fd791f3c00000000000000000000000000000000000000000000000000000000000000000000000000000000121385dce88da3855dd86fcc8c431d54e23400a3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a042901c70000000000000000000000000000000000000000000000000000000012f43dab00000000000000000000000000000000000000000000000000000000eb67241900000000000000000000000000000000000000000000000000000000263b7f8e000000000000000000000000000000000000000000000000000000006c0960f9000000000000000000000000000000000000000000000000000000007efda2ae00000000000000000000000000000000000000000000000000000000b473318e00000000000000000000000000000000000000000000000000000000d077255100000000000000000000000000000000000000000000000000000000ddcc9eec00000000000000000000000000000000000000000000000000000000e4948f4300000000000000000000000000000000000000000000000000000000000000000000000000000000ada3b6059c50b7e366197387fae223c45637423700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000040f23da4300000000000000000000000000000000000000000000000000000000e12a61370000000000000000000000000000000000000000000000000000000098f8196200000000000000000000000000000000000000000000000000000000cf02827d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e0415a114f5000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001600100088580465d88420e6369230ee94a32ff356dbcdd407a4be49fc8009b2a81010004dbf8be36c421254d005352f8245146906919be0099e8a50d0e78df85e0000000000000000000000000c2b2adec31752dbbc7000b7a611c3edac5518a2d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098000000000000000000000000000000000000000000000000000000000000009a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000000000000fe0000000000000000000000000000000000000000000000000000000000008007000000000000000000000000000000000000000000000000000000000000800600000000000000000000000000000000000000000000000000000000044aa2000000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000290100088580465d88420e6369230ee94a32ff356dbcdd407a4be49fc8009b2a81010004dbf8be36c421254d005352f8245146906919be0099e8a50d0e78df85e00100000782c9843c8cd05f37c93332f62f76b15311edfc8c6ef6f276283d847801000013409fe778437b58e5819ee48a658fb09b86bb7badf93cb334c16cc632010000176a7caf23abe1829a27684e6172e72e3b8a1d201364c5bbe53615202b01000085bf765ff04ad45979da71816fba3bdee901366c5cce73c94f3ee37bb9010000bbb84f463e70d100c271744ab9827d4c9b66ee4356a0c697dcb54e3b8701000ef37666c6447ad953d8be7ca75d4a0de3d5fd57a3966906d2c5577111ab0100005949c21cebae3d1bbe3503bdd35cceb135450e03c75ed9d13d38b777dd010000d1b8d2eea3e226ce082ca4d1358a62046be50b2f728a4cc5c59fefe4d301000069e4d584a302aac6094775b8a93c4c02688f8d9157edb11770607d36ec01000035ae7c6f5e10b1bc5249632adfb85efc29cbc4f655570ee52f3e8a608d0100042ddaf17f234d9fb24c16807157a1567af1d2528cf9f79e4f39691f80d0010001d34f312ce1bfb0e23938b74f57c7a25db89d8b87357acc390196fef2de01000059fe3f4d6c9e007d7ef8bb2e9493b7f7d30397b4727a7a864c04571c30010000f3fddaf45e9757c9e81db3218e29d4ef2ffdb356795cd32dfd8dc25ce40100017b380400ad17da6f3b90aac6abab01af7e7eaa940d1f28c7b342b752fb010006df5fd8dbfe05a0ae3d8011f0349834d52141827e7751fe03042af7945a01000017575446d56eb4e640189c5e356449975b957ae5262924567f4f664d750100013b63d851496b3478b567f878f5ee616d6e2a9373cabf4b78c1409d1992010000b1d1a4f023742903d8750514351bebe5de2449b2fdc5b8dc095725ef6c0100000fb95dd6f46682ea2f0b187124613531b459091a6c38dc9d0260e5fff1010000213ed880e87b5121c3d96a0cf6787ca83dda10080a1d7cce7ad72bf6a60100000f72c45ba0985fe38394a29445cb337c127afb0da5e94211d518a00949010000436558414c5103b0668b90a9445f7713a999bf0c9a73c6b4ba2f3af2280100003fc1eab315ab932938987aedb4659001141fc976c6a92b1d94bad196dd01000189d9cbcdc1c3fa91a929f14747f578f7f6003f7f36616636569ef5d7fd0100000fbb7f36971f5a64dc6d03ddf6f6f2a4122dc01b835874922f207bd9b5010009a9832bdb0727b3ba54a13b2892f3c916e0aff063c1e5aae093cdb0d73e010004cf5162b05c197a1b458009d81d6cab1a7caaf49d33ca04a04310365939010007e7ced2a9266888fe0d939315421da2089501dbbdcbf9200cf5996feeb701000323dc4c80a4b445dae377d9eae6098666031c62ebb7e336ec7ca6a1e60a01000331ab9faa2a62e4c1c73aca0d0407cab5e1ec59f71eff3b03ffeee6de57010003353ac7f5ef89ee0c223c349996e6e5f5fbdac0c98ea15fe8347ac49055010001916b35d863cd9bda8fa51fd609afed513ab76c426460b28297c84d7838010004b1492831925bd58dd9143179471e90b5f644a77349332f026c4c0b092f01000067c42a9f91dc32ed0de23a6587d9298d7142bd018d0f3bf8a63bc8b3fb010000fbc1ab940b7855fb56b42a56b3f5224a26a9b569cccec2ff9fa583f52a01000151dd2e087f901ad9eab5208af694db0d600e0395099bce02c04b5f04e701000015b8c02ac1b399c59da4ebbee0bd3febd41307473ba0885ebc93c356cf010001432488e16fe474f9eda02a0085b59fcd4f6572abcc53aa891e680c3d4c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000224000000000000000000000000025e04b7d1fc963ab8e5feb0797f7a943e260e8b60000000000000000000000008d65310fe158734eea3197ff9a6211f9bba3d0a8000000000000000000000000a8a8a8bb25c9e9abe44eb7b3e00502a1d8f5aac400000000000000000000000044881d92f801f475d974eda3516b0f47d7e4cf04000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000005800000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000007c0000000000000000000000000000000000000000000000000000000000000088000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000ac00000000000000000000000000000000000000000000000000000000000000b800000000000000000000000000000000000000000000000000000000000000c400000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000dc00000000000000000000000000000000000000000000000000000000000000e800000000000000000000000000000000000000000000000000000000000000f40000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010c000000000000000000000000000000000000000000000000000000000000011800000000000000000000000000000000000000000000000000000000000001240000000000000000000000000000000000000000000000000000000000000130000000000000000000000000000000000000000000000000000000000000013c000000000000000000000000000000000000000000000000000000000000014800000000000000000000000000000000000000000000000000000000000001540000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000016c000000000000000000000000000000000000000000000000000000000000017800000000000000000000000000000000000000000000000000000000000001840000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000019c00000000000000000000000000000000000000000000000000000000000001a800000000000000000000000000000000000000000000000000000000000001b400000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001cc00000000000000000000000000000000000000000000000000000000000001d800000000000000000000000000000000000000000000000000000000000001e400000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000001fc000000000000000000000000000000000000000000000000000000000000020800100000782c9843c8cd05f37c93332f62f76b15311edfc8c6ef6f276283d847800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000013409fe778437b58e5819ee48a658fb09b86bb7badf93cb334c16cc63200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000176a7caf23abe1829a27684e6172e72e3b8a1d201364c5bbe53615202b00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000085bf765ff04ad45979da71816fba3bdee901366c5cce73c94f3ee37bb900000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000bbb84f463e70d100c271744ab9827d4c9b66ee4356a0c697dcb54e3b8700000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000ef37666c6447ad953d8be7ca75d4a0de3d5fd57a3966906d2c5577111ab00000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100000782c9843c8cd05f37c93332f62f76b15311edfc8c6ef6f276283d847800000000000000000000000000000000000000000000000000000000000080010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100005949c21cebae3d1bbe3503bdd35cceb135450e03c75ed9d13d38b777dd00000000000000000000000000000000000000000000000000000000000080020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000d1b8d2eea3e226ce082ca4d1358a62046be50b2f728a4cc5c59fefe4d300000000000000000000000000000000000000000000000000000000000080030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000069e4d584a302aac6094775b8a93c4c02688f8d9157edb11770607d36ec00000000000000000000000000000000000000000000000000000000000080040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000035ae7c6f5e10b1bc5249632adfb85efc29cbc4f655570ee52f3e8a608d00000000000000000000000000000000000000000000000000000000000080050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100042ddaf17f234d9fb24c16807157a1567af1d2528cf9f79e4f39691f80d000000000000000000000000000000000000000000000000000000000000080060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010001d34f312ce1bfb0e23938b74f57c7a25db89d8b87357acc390196fef2de00000000000000000000000000000000000000000000000000000000000080080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000059fe3f4d6c9e007d7ef8bb2e9493b7f7d30397b4727a7a864c04571c3000000000000000000000000000000000000000000000000000000000000080090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000f3fddaf45e9757c9e81db3218e29d4ef2ffdb356795cd32dfd8dc25ce4000000000000000000000000000000000000000000000000000000000000800a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100017b380400ad17da6f3b90aac6abab01af7e7eaa940d1f28c7b342b752fb000000000000000000000000000000000000000000000000000000000000800b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010006df5fd8dbfe05a0ae3d8011f0349834d52141827e7751fe03042af7945a000000000000000000000000000000000000000000000000000000000000800c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000017575446d56eb4e640189c5e356449975b957ae5262924567f4f664d75000000000000000000000000000000000000000000000000000000000000800d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100013b63d851496b3478b567f878f5ee616d6e2a9373cabf4b78c1409d1992000000000000000000000000000000000000000000000000000000000000800e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000b1d1a4f023742903d8750514351bebe5de2449b2fdc5b8dc095725ef6c000000000000000000000000000000000000000000000000000000000000800f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100000fb95dd6f46682ea2f0b187124613531b459091a6c38dc9d0260e5fff100000000000000000000000000000000000000000000000000000000000080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000213ed880e87b5121c3d96a0cf6787ca83dda10080a1d7cce7ad72bf6a600000000000000000000000000000000000000000000000000000000000080120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100000f72c45ba0985fe38394a29445cb337c127afb0da5e94211d518a0094900000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000436558414c5103b0668b90a9445f7713a999bf0c9a73c6b4ba2f3af22800000000000000000000000000000000000000000000000000000000000080110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100003fc1eab315ab932938987aedb4659001141fc976c6a92b1d94bad196dd00000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000189d9cbcdc1c3fa91a929f14747f578f7f6003f7f36616636569ef5d7fd00000000000000000000000000000000000000000000000000000000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100000fbb7f36971f5a64dc6d03ddf6f6f2a4122dc01b835874922f207bd9b500000000000000000000000000000000000000000000000000000000000100060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010009a9832bdb0727b3ba54a13b2892f3c916e0aff063c1e5aae093cdb0d73e00000000000000000000000000000000000000000000000000000000000100020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010004cf5162b05c197a1b458009d81d6cab1a7caaf49d33ca04a0431036593900000000000000000000000000000000000000000000000000000000000100030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010007e7ced2a9266888fe0d939315421da2089501dbbdcbf9200cf5996feeb700000000000000000000000000000000000000000000000000000000000100040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000323dc4c80a4b445dae377d9eae6098666031c62ebb7e336ec7ca6a1e60a00000000000000000000000000000000000000000000000000000000000100050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000331ab9faa2a62e4c1c73aca0d0407cab5e1ec59f71eff3b03ffeee6de5700000000000000000000000000000000000000000000000000000000000100070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010001916b35d863cd9bda8fa51fd609afed513ab76c426460b28297c84d7838000000000000000000000000cc87d9e8525bc40afc11e79f637e1570d7e5ba460000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010004b1492831925bd58dd9143179471e90b5f644a77349332f026c4c0b092f00000000000000000000000005b00ef3489e21e57b3e93a72bc9f59c57bb199b0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000151dd2e087f901ad9eab5208af694db0d600e0395099bce02c04b5f04e7000000000000000000000000fa96a3da88f201433911beff3ecc434cb12227310000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000015b8c02ac1b399c59da4ebbee0bd3febd41307473ba0885ebc93c356cf000000000000000000000000fa30eae30351a83809657299f6cad9557c232e8c0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010003353ac7f5ef89ee0c223c349996e6e5f5fbdac0c98ea15fe8347ac49055000000000000000000000000000000000000000000000000000000000000800f0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000b1d1a4f023742903d8750514351bebe5de2449b2fdc5b8dc095725ef6c000000000000000000000000000000000000000000000000000000000000800f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000aa36a7000000000000000000000000000000000000000000000000000000000000010e000000000000000000000000fd3130ea0e8b7dd61ac3663328a66d97eb02f84b010000fbc1ab940b7855fb56b42a56b3f5224a26a9b569cccec2ff9fa583f52a0000000000000000000000007aab1cd1fcd3213e20de15d2236a67d9084c09af0000000000000000000000000000000000000000000000000000000000000064010009a9832bdb0727b3ba54a13b2892f3c916e0aff063c1e5aae093cdb0d73e010004cf5162b05c197a1b458009d81d6cab1a7caaf49d33ca04a04310365939010007e7ced2a9266888fe0d939315421da2089501dbbdcbf9200cf5996feeb701000323dc4c80a4b445dae377d9eae6098666031c62ebb7e336ec7ca6a1e60a000000000000000000000000cc87d9e8525bc40afc11e79f637e1570d7e5ba4600000000000000000000000005b00ef3489e21e57b3e93a72bc9f59c57bb199b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + +new_protocol_version: 107374182400 +old_protocol_version: 111669149696 From 06dbd202ae7e9f25bd54e71629f4b2d6a5973767 Mon Sep 17 00:00:00 2001 From: Stanislav Breadless Date: Thu, 16 Jan 2025 15:57:41 +0100 Subject: [PATCH 02/17] better scripts --- contracts | 2 +- .../src/commands/dev/commands/gateway.rs | 29 +++++++++++++++++-- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/contracts b/contracts index 8204feccbb10..572cd0c766a2 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit 8204feccbb10b2fa70c419c257b3c88c22c14c0b +Subproject commit 572cd0c766a2f0aed2811c1afa93599b47304e3a diff --git a/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway.rs b/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway.rs index ea8f96de6bcd..608db25d30bd 100644 --- a/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway.rs +++ b/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway.rs @@ -174,9 +174,17 @@ pub async fn check_chain_readiness( .build(); let l2_client = Box::new(l2_client) as Box>; - let inflight_txs_count: usize = l2_client.get_unconfirmed_txs_count().await?; - let diamond_proxy_addr = l2_client.get_main_contract().await?; + let inflight_txs_count = match l2_client + .get_unconfirmed_txs_count() + .await { + Ok(x) => x, + Err(e) => { + anyhow::bail!("Failed to call `unstable_unconfirmedTxsCount`. Reason: `{}`.\nEnsure that `unstable` namespace is enabled on your server and it runs the latest version", e) + } + }; + let diamond_proxy_addr = l2_client.get_main_contract().await?; + if inflight_txs_count != 0 { anyhow::bail!("Chain not ready since there are inflight txs!"); } @@ -714,6 +722,8 @@ pub struct GatewayUpgradeCalldataArgs { da_mode: DAMode, #[clap(long, default_missing_value = "false")] dangerous_no_cross_check: Option, + #[clap(long, default_missing_value = "false")] + force_display_finalization_params: Option } pub struct GatewayUpgradeArgsInner { @@ -800,6 +810,21 @@ pub(crate) async fn run(shell: &Shell, args: GatewayUpgradeCalldataArgs) -> anyh hex::encode(&schedule_calldata) ); + if !args.force_display_finalization_params.unwrap_or_default() { + let chain_readiness = check_chain_readiness( + args.l1_rpc_url.clone(), + args.l2_rpc_url.clone(), + args.chain_id + ).await; + + if let Err(err) = chain_readiness { + println!("Chain is not ready to finalize the upgrade due to the reason:\n{:#?}", err); + println!("Once the chain is ready, you can re-run this command to obtain the calls to finalize the upgrade"); + println!("If you want to display finalization params anyway, pass `--force-display-finalization-params=true`."); + return Ok(()); + }; + } + let admin_calls_finalize = get_admin_call_builder(&upgrade_info, &chain_info, args.into()); admin_calls_finalize.display(); From db46da5ae3d048b99c1a6e3e46e6cd60e21d0fa0 Mon Sep 17 00:00:00 2001 From: Stanislav Breadless Date: Thu, 16 Jan 2025 15:58:18 +0100 Subject: [PATCH 03/17] fmt --- .../src/commands/dev/commands/gateway.rs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway.rs b/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway.rs index 608db25d30bd..b5b2eec1f37c 100644 --- a/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway.rs +++ b/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway.rs @@ -174,9 +174,7 @@ pub async fn check_chain_readiness( .build(); let l2_client = Box::new(l2_client) as Box>; - let inflight_txs_count = match l2_client - .get_unconfirmed_txs_count() - .await { + let inflight_txs_count = match l2_client.get_unconfirmed_txs_count().await { Ok(x) => x, Err(e) => { anyhow::bail!("Failed to call `unstable_unconfirmedTxsCount`. Reason: `{}`.\nEnsure that `unstable` namespace is enabled on your server and it runs the latest version", e) @@ -184,7 +182,7 @@ pub async fn check_chain_readiness( }; let diamond_proxy_addr = l2_client.get_main_contract().await?; - + if inflight_txs_count != 0 { anyhow::bail!("Chain not ready since there are inflight txs!"); } @@ -723,7 +721,7 @@ pub struct GatewayUpgradeCalldataArgs { #[clap(long, default_missing_value = "false")] dangerous_no_cross_check: Option, #[clap(long, default_missing_value = "false")] - force_display_finalization_params: Option + force_display_finalization_params: Option, } pub struct GatewayUpgradeArgsInner { @@ -814,11 +812,15 @@ pub(crate) async fn run(shell: &Shell, args: GatewayUpgradeCalldataArgs) -> anyh let chain_readiness = check_chain_readiness( args.l1_rpc_url.clone(), args.l2_rpc_url.clone(), - args.chain_id - ).await; + args.chain_id, + ) + .await; if let Err(err) = chain_readiness { - println!("Chain is not ready to finalize the upgrade due to the reason:\n{:#?}", err); + println!( + "Chain is not ready to finalize the upgrade due to the reason:\n{:#?}", + err + ); println!("Once the chain is ready, you can re-run this command to obtain the calls to finalize the upgrade"); println!("If you want to display finalization params anyway, pass `--force-display-finalization-params=true`."); return Ok(()); From 561dc99b437cf40b1d31346ed8f060feef61da8e Mon Sep 17 00:00:00 2001 From: Stanislav Breadless Date: Thu, 16 Jan 2025 16:01:38 +0100 Subject: [PATCH 04/17] fmt --- contracts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts b/contracts index 572cd0c766a2..3cd715930613 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit 572cd0c766a2f0aed2811c1afa93599b47304e3a +Subproject commit 3cd71593061367da65b63dd43099fa20715c986e From d86c8baa5ac793ee6a0a170a909bf682e331d396 Mon Sep 17 00:00:00 2001 From: Stanislav Breadless Date: Fri, 17 Jan 2025 10:35:32 +0100 Subject: [PATCH 05/17] fix bugs + include stage proofs upgrade info --- .../gateway/stage-proofs-upgrade-info.yaml | 21 +++++++++++++++++++ etc/upgrades/gateway/stage-upgrade-info.yaml | 4 ++-- .../src/commands/dev/commands/gateway.rs | 2 +- 3 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 etc/upgrades/gateway/stage-proofs-upgrade-info.yaml diff --git a/etc/upgrades/gateway/stage-proofs-upgrade-info.yaml b/etc/upgrades/gateway/stage-proofs-upgrade-info.yaml new file mode 100644 index 000000000000..492baac4d6bf --- /dev/null +++ b/etc/upgrades/gateway/stage-proofs-upgrade-info.yaml @@ -0,0 +1,21 @@ +# Information about pre-upgrade contracts +l1_chain_id: 11155111 +bridgehub_addr: "0x7bdf7970f17278a6ff75fdbc671e870b0728ae41" +old_validator_timelock: "0x1A0EdA40D86213F6D0Ca233D9b33CDf66e2ef1ab" +l1_legacy_shared_bridge: "0xc488a65b400769295f8c4b762adcb3e6a036220b" + +# Information about the post-upgrade contracts +ctm_deployment_tracker_proxy_addr: "0x2F80f13Ff519C7a9338f28F62e1c55C55BBD2D1c" +native_token_vault_addr: "0xd48Ba8f3714Dd2DE8eB842815599AACdE3D71DFe" +l1_bytecodes_supplier_addr: "0xD7Dc68e7e9ED4b6970c4D9a2D58591a622A24330" +rollup_l1_da_validator_addr: "0xd79c8d893e7EfE197a19BB2F90b9E585884Ebc25" +no_da_validium_l1_validator_addr: "0xfA1bA84CF7fa7E328ab53C03Ae64318A26d180d3" +expected_rollup_l2_da_validator: "0xfa96A3Da88f201433911bEFf3Ecc434CB1222731" +expected_validium_l2_da_validator: "0xFa30EAe30351A83809657299F6Cad9557c232e8C" +new_validator_timelock: "0x6F025D23f51129d80215F3e4ec77F7bCB6248Bf7" + +l1_wrapped_base_token_store: "0x66DA40f74702b6E3a09B6a5023D41a306d179458" +chain_upgrade_diamond_cut: "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000032d24607f6ef0145d7b5c4cc7b576139ef6da6af000000000000000000000000000000000000000000000000000000000000196000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000aa00000000000000000000000000000000000000000000000000000000000000c400000000000000000000000000000000000000000000000000000000000000f6000000000000000000000000000000000000000000000000000000000000015e000000000000000000000000000000000000000000000000000000000000017c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000d0e18b6810000000000000000000000000000000000000000000000000000000064bf8d6600000000000000000000000000000000000000000000000000000000a9f6d9410000000000000000000000000000000000000000000000000000000027ae4c16000000000000000000000000000000000000000000000000000000004dd18bf5000000000000000000000000000000000000000000000000000000001cc5d10300000000000000000000000000000000000000000000000000000000be6f11cf00000000000000000000000000000000000000000000000000000000e76db86500000000000000000000000000000000000000000000000000000000235d9eb50000000000000000000000000000000000000000000000000000000021f603d7000000000000000000000000000000000000000000000000000000004623c91d000000000000000000000000000000000000000000000000000000001733894500000000000000000000000000000000000000000000000000000000fc57565f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000291de72e3400000000000000000000000000000000000000000000000000000000ea6c029c00000000000000000000000000000000000000000000000000000000cdffacc60000000000000000000000000000000000000000000000000000000052ef6b2c00000000000000000000000000000000000000000000000000000000adfca15e000000000000000000000000000000000000000000000000000000007a0ed627000000000000000000000000000000000000000000000000000000006e9960c30000000000000000000000000000000000000000000000000000000098acd7a600000000000000000000000000000000000000000000000000000000086a56f8000000000000000000000000000000000000000000000000000000003591c1a00000000000000000000000000000000000000000000000000000000079823c9a00000000000000000000000000000000000000000000000000000000d86970d800000000000000000000000000000000000000000000000000000000fd791f3c00000000000000000000000000000000000000000000000000000000e5355c75000000000000000000000000000000000000000000000000000000009d1b5a81000000000000000000000000000000000000000000000000000000007b30c8da00000000000000000000000000000000000000000000000000000000d046815600000000000000000000000000000000000000000000000000000000631f4bac000000000000000000000000000000000000000000000000000000000ec6b0b70000000000000000000000000000000000000000000000000000000033ce93fe0000000000000000000000000000000000000000000000000000000006d49e5b00000000000000000000000000000000000000000000000000000000f5c1182c000000000000000000000000000000000000000000000000000000005518c73b00000000000000000000000000000000000000000000000000000000db1f0bf900000000000000000000000000000000000000000000000000000000b8c2f66f00000000000000000000000000000000000000000000000000000000ef3f0bae00000000000000000000000000000000000000000000000000000000fe26699e000000000000000000000000000000000000000000000000000000003960738200000000000000000000000000000000000000000000000000000000af6a2dcd00000000000000000000000000000000000000000000000000000000a1954fc50000000000000000000000000000000000000000000000000000000046657fe90000000000000000000000000000000000000000000000000000000018e3a9410000000000000000000000000000000000000000000000000000000029b98c6700000000000000000000000000000000000000000000000000000000bd7c541200000000000000000000000000000000000000000000000000000000c3bbd2d700000000000000000000000000000000000000000000000000000000e81e0ba100000000000000000000000000000000000000000000000000000000facd743b000000000000000000000000000000000000000000000000000000009cd939e40000000000000000000000000000000000000000000000000000000056142d7a00000000000000000000000000000000000000000000000000000000b22dd78e0000000000000000000000000000000000000000000000000000000074f4d30d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000812f43dab000000000000000000000000000000000000000000000000000000006c0960f900000000000000000000000000000000000000000000000000000000b473318e00000000000000000000000000000000000000000000000000000000042901c700000000000000000000000000000000000000000000000000000000263b7f8e00000000000000000000000000000000000000000000000000000000e4948f4300000000000000000000000000000000000000000000000000000000eb67241900000000000000000000000000000000000000000000000000000000c924de350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000008701f58c5000000000000000000000000000000000000000000000000000000006edd4f1200000000000000000000000000000000000000000000000000000000c3d93e7c000000000000000000000000000000000000000000000000000000006f497ac6000000000000000000000000000000000000000000000000000000007f61885c00000000000000000000000000000000000000000000000000000000c37533bb0000000000000000000000000000000000000000000000000000000097c09d34000000000000000000000000000000000000000000000000000000000f23da430000000000000000000000000000000000000000000000000000000000000000000000000000000098f4c565ba778ddf775e994b24edc28e91fd6ee800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000140e18b681000000000000000000000000000000000000000000000000000000001733894500000000000000000000000000000000000000000000000000000000fc57565f000000000000000000000000000000000000000000000000000000001cc5d1030000000000000000000000000000000000000000000000000000000021f603d700000000000000000000000000000000000000000000000000000000235d9eb50000000000000000000000000000000000000000000000000000000027ae4c16000000000000000000000000000000000000000000000000000000002878fe74000000000000000000000000000000000000000000000000000000003f42d5dd0000000000000000000000000000000000000000000000000000000041cf49bb000000000000000000000000000000000000000000000000000000004623c91d000000000000000000000000000000000000000000000000000000004dd18bf5000000000000000000000000000000000000000000000000000000006223258e0000000000000000000000000000000000000000000000000000000064b554ad0000000000000000000000000000000000000000000000000000000064bf8d66000000000000000000000000000000000000000000000000000000006e762e9800000000000000000000000000000000000000000000000000000000a9f6d94100000000000000000000000000000000000000000000000000000000b784610700000000000000000000000000000000000000000000000000000000be6f11cf00000000000000000000000000000000000000000000000000000000e76db86500000000000000000000000000000000000000000000000000000000000000000000000000000000e44933dce5f468ff7887ad21673222efd35e8abf000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000002f06d49e5b000000000000000000000000000000000000000000000000000000000ec6b0b700000000000000000000000000000000000000000000000000000000fe26699e0000000000000000000000000000000000000000000000000000000018e3a941000000000000000000000000000000000000000000000000000000001de72e340000000000000000000000000000000000000000000000000000000022c5cf230000000000000000000000000000000000000000000000000000000029b98c670000000000000000000000000000000000000000000000000000000033ce93fe000000000000000000000000000000000000000000000000000000003408e470000000000000000000000000000000000000000000000000000000003591c1a000000000000000000000000000000000000000000000000000000000396073820000000000000000000000000000000000000000000000000000000039d7d4aa0000000000000000000000000000000000000000000000000000000046657fe90000000000000000000000000000000000000000000000000000000052ef6b2c000000000000000000000000000000000000000000000000000000005a59033500000000000000000000000000000000000000000000000000000000631f4bac000000000000000000000000000000000000000000000000000000006a27e8b5000000000000000000000000000000000000000000000000000000006e9960c30000000000000000000000000000000000000000000000000000000074f4d30d0000000000000000000000000000000000000000000000000000000079823c9a000000000000000000000000000000000000000000000000000000007a0ed627000000000000000000000000000000000000000000000000000000007b30c8da000000000000000000000000000000000000000000000000000000008708474e00000000000000000000000000000000000000000000000000000000946ebad100000000000000000000000000000000000000000000000000000000960dcf240000000000000000000000000000000000000000000000000000000098acd7a6000000000000000000000000000000000000000000000000000000009cd939e4000000000000000000000000000000000000000000000000000000009d1b5a8100000000000000000000000000000000000000000000000000000000a1954fc500000000000000000000000000000000000000000000000000000000adfca15e00000000000000000000000000000000000000000000000000000000af6a2dcd00000000000000000000000000000000000000000000000000000000b22dd78e00000000000000000000000000000000000000000000000000000000b8c2f66f00000000000000000000000000000000000000000000000000000000bd7c541200000000000000000000000000000000000000000000000000000000c3bbd2d700000000000000000000000000000000000000000000000000000000cdffacc600000000000000000000000000000000000000000000000000000000d046815600000000000000000000000000000000000000000000000000000000d86970d800000000000000000000000000000000000000000000000000000000db1f0bf900000000000000000000000000000000000000000000000000000000e5355c7500000000000000000000000000000000000000000000000000000000e81e0ba100000000000000000000000000000000000000000000000000000000ea6c029c00000000000000000000000000000000000000000000000000000000ef3f0bae00000000000000000000000000000000000000000000000000000000f4ff5e2e00000000000000000000000000000000000000000000000000000000f5c1182c00000000000000000000000000000000000000000000000000000000facd743b00000000000000000000000000000000000000000000000000000000fd791f3c00000000000000000000000000000000000000000000000000000000000000000000000000000000f10adab514947ff714e34262f4f62d405743b6b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a042901c70000000000000000000000000000000000000000000000000000000012f43dab00000000000000000000000000000000000000000000000000000000eb67241900000000000000000000000000000000000000000000000000000000263b7f8e000000000000000000000000000000000000000000000000000000006c0960f9000000000000000000000000000000000000000000000000000000007efda2ae00000000000000000000000000000000000000000000000000000000b473318e00000000000000000000000000000000000000000000000000000000d077255100000000000000000000000000000000000000000000000000000000ddcc9eec00000000000000000000000000000000000000000000000000000000e4948f4300000000000000000000000000000000000000000000000000000000000000000000000000000000b1b08585385b6600edd683086cf739a86cf362e300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000040f23da4300000000000000000000000000000000000000000000000000000000e12a61370000000000000000000000000000000000000000000000000000000098f8196200000000000000000000000000000000000000000000000000000000cf02827d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e0415a114f5000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001600100088580465d88420e6369230ee94a32ff356dbcdd407a4be49fc8009b2a81010004dbf8be36c421254d005352f8245146906919be0099e8a50d0e78df85e00000000000000000000000006bba9c47c623c2427e8fc827f10185911798b794000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098000000000000000000000000000000000000000000000000000000000000009a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000000000000fe0000000000000000000000000000000000000000000000000000000000008007000000000000000000000000000000000000000000000000000000000000800600000000000000000000000000000000000000000000000000000000044aa2000000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000290100088580465d88420e6369230ee94a32ff356dbcdd407a4be49fc8009b2a81010004dbf8be36c421254d005352f8245146906919be0099e8a50d0e78df85e00100000782c9843c8cd05f37c93332f62f76b15311edfc8c6ef6f276283d847801000013409fe778437b58e5819ee48a658fb09b86bb7badf93cb334c16cc632010000176a7caf23abe1829a27684e6172e72e3b8a1d201364c5bbe53615202b01000085bf765ff04ad45979da71816fba3bdee901366c5cce73c94f3ee37bb9010000bbb84f463e70d100c271744ab9827d4c9b66ee4356a0c697dcb54e3b8701000ef37666c6447ad953d8be7ca75d4a0de3d5fd57a3966906d2c5577111ab0100005949c21cebae3d1bbe3503bdd35cceb135450e03c75ed9d13d38b777dd010000d1b8d2eea3e226ce082ca4d1358a62046be50b2f728a4cc5c59fefe4d301000069e4d584a302aac6094775b8a93c4c02688f8d9157edb11770607d36ec01000035ae7c6f5e10b1bc5249632adfb85efc29cbc4f655570ee52f3e8a608d0100042ddaf17f234d9fb24c16807157a1567af1d2528cf9f79e4f39691f80d0010001d34f312ce1bfb0e23938b74f57c7a25db89d8b87357acc390196fef2de01000059fe3f4d6c9e007d7ef8bb2e9493b7f7d30397b4727a7a864c04571c30010000f3fddaf45e9757c9e81db3218e29d4ef2ffdb356795cd32dfd8dc25ce40100017b380400ad17da6f3b90aac6abab01af7e7eaa940d1f28c7b342b752fb010006df5fd8dbfe05a0ae3d8011f0349834d52141827e7751fe03042af7945a01000017575446d56eb4e640189c5e356449975b957ae5262924567f4f664d750100013b63d851496b3478b567f878f5ee616d6e2a9373cabf4b78c1409d1992010000b1d1a4f023742903d8750514351bebe5de2449b2fdc5b8dc095725ef6c0100000fb95dd6f46682ea2f0b187124613531b459091a6c38dc9d0260e5fff1010000213ed880e87b5121c3d96a0cf6787ca83dda10080a1d7cce7ad72bf6a60100000f72c45ba0985fe38394a29445cb337c127afb0da5e94211d518a00949010000436558414c5103b0668b90a9445f7713a999bf0c9a73c6b4ba2f3af2280100003fc1eab315ab932938987aedb4659001141fc976c6a92b1d94bad196dd01000189d9cbcdc1c3fa91a929f14747f578f7f6003f7f36616636569ef5d7fd0100000fbb7f36971f5a64dc6d03ddf6f6f2a4122dc01b835874922f207bd9b5010009a9832bdb0727b3ba54a13b2892f3c916e0aff063c1e5aae093cdb0d73e010004cf5162b05c197a1b458009d81d6cab1a7caaf49d33ca04a04310365939010007e7ced2a9266888fe0d939315421da2089501dbbdcbf9200cf5996feeb701000323dc4c80a4b445dae377d9eae6098666031c62ebb7e336ec7ca6a1e60a01000331ab9faa2a62e4c1c73aca0d0407cab5e1ec59f71eff3b03ffeee6de57010003353ac7f5ef89ee0c223c349996e6e5f5fbdac0c98ea15fe8347ac49055010001916b35d863cd9bda8fa51fd609afed513ab76c426460b28297c84d7838010004b1492831925bd58dd9143179471e90b5f644a77349332f026c4c0b092f01000067c42a9f91dc32ed0de23a6587d9298d7142bd018d0f3bf8a63bc8b3fb010000fbc1ab940b7855fb56b42a56b3f5224a26a9b569cccec2ff9fa583f52a01000151dd2e087f901ad9eab5208af694db0d600e0395099bce02c04b5f04e701000015b8c02ac1b399c59da4ebbee0bd3febd41307473ba0885ebc93c356cf010001432488e16fe474f9eda02a0085b59fcd4f6572abcc53aa891e680c3d4c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000022400000000000000000000000002f80f13ff519c7a9338f28f62e1c55c55bbd2d1c0000000000000000000000001a0eda40d86213f6d0ca233d9b33cdf66e2ef1ab0000000000000000000000006f025d23f51129d80215f3e4ec77f7bcb6248bf700000000000000000000000066da40f74702b6e3a09b6a5023d41a306d179458000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000005800000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000007c0000000000000000000000000000000000000000000000000000000000000088000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000ac00000000000000000000000000000000000000000000000000000000000000b800000000000000000000000000000000000000000000000000000000000000c400000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000dc00000000000000000000000000000000000000000000000000000000000000e800000000000000000000000000000000000000000000000000000000000000f40000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010c000000000000000000000000000000000000000000000000000000000000011800000000000000000000000000000000000000000000000000000000000001240000000000000000000000000000000000000000000000000000000000000130000000000000000000000000000000000000000000000000000000000000013c000000000000000000000000000000000000000000000000000000000000014800000000000000000000000000000000000000000000000000000000000001540000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000016c000000000000000000000000000000000000000000000000000000000000017800000000000000000000000000000000000000000000000000000000000001840000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000019c00000000000000000000000000000000000000000000000000000000000001a800000000000000000000000000000000000000000000000000000000000001b400000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001cc00000000000000000000000000000000000000000000000000000000000001d800000000000000000000000000000000000000000000000000000000000001e400000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000001fc000000000000000000000000000000000000000000000000000000000000020800100000782c9843c8cd05f37c93332f62f76b15311edfc8c6ef6f276283d847800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000013409fe778437b58e5819ee48a658fb09b86bb7badf93cb334c16cc63200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000176a7caf23abe1829a27684e6172e72e3b8a1d201364c5bbe53615202b00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000085bf765ff04ad45979da71816fba3bdee901366c5cce73c94f3ee37bb900000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000bbb84f463e70d100c271744ab9827d4c9b66ee4356a0c697dcb54e3b8700000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000ef37666c6447ad953d8be7ca75d4a0de3d5fd57a3966906d2c5577111ab00000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100000782c9843c8cd05f37c93332f62f76b15311edfc8c6ef6f276283d847800000000000000000000000000000000000000000000000000000000000080010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100005949c21cebae3d1bbe3503bdd35cceb135450e03c75ed9d13d38b777dd00000000000000000000000000000000000000000000000000000000000080020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000d1b8d2eea3e226ce082ca4d1358a62046be50b2f728a4cc5c59fefe4d300000000000000000000000000000000000000000000000000000000000080030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000069e4d584a302aac6094775b8a93c4c02688f8d9157edb11770607d36ec00000000000000000000000000000000000000000000000000000000000080040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000035ae7c6f5e10b1bc5249632adfb85efc29cbc4f655570ee52f3e8a608d00000000000000000000000000000000000000000000000000000000000080050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100042ddaf17f234d9fb24c16807157a1567af1d2528cf9f79e4f39691f80d000000000000000000000000000000000000000000000000000000000000080060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010001d34f312ce1bfb0e23938b74f57c7a25db89d8b87357acc390196fef2de00000000000000000000000000000000000000000000000000000000000080080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000059fe3f4d6c9e007d7ef8bb2e9493b7f7d30397b4727a7a864c04571c3000000000000000000000000000000000000000000000000000000000000080090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000f3fddaf45e9757c9e81db3218e29d4ef2ffdb356795cd32dfd8dc25ce4000000000000000000000000000000000000000000000000000000000000800a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100017b380400ad17da6f3b90aac6abab01af7e7eaa940d1f28c7b342b752fb000000000000000000000000000000000000000000000000000000000000800b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010006df5fd8dbfe05a0ae3d8011f0349834d52141827e7751fe03042af7945a000000000000000000000000000000000000000000000000000000000000800c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000017575446d56eb4e640189c5e356449975b957ae5262924567f4f664d75000000000000000000000000000000000000000000000000000000000000800d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100013b63d851496b3478b567f878f5ee616d6e2a9373cabf4b78c1409d1992000000000000000000000000000000000000000000000000000000000000800e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000b1d1a4f023742903d8750514351bebe5de2449b2fdc5b8dc095725ef6c000000000000000000000000000000000000000000000000000000000000800f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100000fb95dd6f46682ea2f0b187124613531b459091a6c38dc9d0260e5fff100000000000000000000000000000000000000000000000000000000000080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000213ed880e87b5121c3d96a0cf6787ca83dda10080a1d7cce7ad72bf6a600000000000000000000000000000000000000000000000000000000000080120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100000f72c45ba0985fe38394a29445cb337c127afb0da5e94211d518a0094900000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000436558414c5103b0668b90a9445f7713a999bf0c9a73c6b4ba2f3af22800000000000000000000000000000000000000000000000000000000000080110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100003fc1eab315ab932938987aedb4659001141fc976c6a92b1d94bad196dd00000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000189d9cbcdc1c3fa91a929f14747f578f7f6003f7f36616636569ef5d7fd00000000000000000000000000000000000000000000000000000000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100000fbb7f36971f5a64dc6d03ddf6f6f2a4122dc01b835874922f207bd9b500000000000000000000000000000000000000000000000000000000000100060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010009a9832bdb0727b3ba54a13b2892f3c916e0aff063c1e5aae093cdb0d73e00000000000000000000000000000000000000000000000000000000000100020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010004cf5162b05c197a1b458009d81d6cab1a7caaf49d33ca04a0431036593900000000000000000000000000000000000000000000000000000000000100030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010007e7ced2a9266888fe0d939315421da2089501dbbdcbf9200cf5996feeb700000000000000000000000000000000000000000000000000000000000100040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000323dc4c80a4b445dae377d9eae6098666031c62ebb7e336ec7ca6a1e60a00000000000000000000000000000000000000000000000000000000000100050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000331ab9faa2a62e4c1c73aca0d0407cab5e1ec59f71eff3b03ffeee6de5700000000000000000000000000000000000000000000000000000000000100070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010001916b35d863cd9bda8fa51fd609afed513ab76c426460b28297c84d7838000000000000000000000000cc87d9e8525bc40afc11e79f637e1570d7e5ba460000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010004b1492831925bd58dd9143179471e90b5f644a77349332f026c4c0b092f00000000000000000000000005b00ef3489e21e57b3e93a72bc9f59c57bb199b0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000151dd2e087f901ad9eab5208af694db0d600e0395099bce02c04b5f04e7000000000000000000000000fa96a3da88f201433911beff3ecc434cb12227310000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000015b8c02ac1b399c59da4ebbee0bd3febd41307473ba0885ebc93c356cf000000000000000000000000fa30eae30351a83809657299f6cad9557c232e8c0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010003353ac7f5ef89ee0c223c349996e6e5f5fbdac0c98ea15fe8347ac49055000000000000000000000000000000000000000000000000000000000000800f0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000b1d1a4f023742903d8750514351bebe5de2449b2fdc5b8dc095725ef6c000000000000000000000000000000000000000000000000000000000000800f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000aa36a7000000000000000000000000000000000000000000000000000000000000010f000000000000000000000000d7c8d869a21809f120d1cd849f4fc1aa99159512010000fbc1ab940b7855fb56b42a56b3f5224a26a9b569cccec2ff9fa583f52a000000000000000000000000ce47971e336914167c6bd3a1fc9b0960860ac2d80000000000000000000000000000000000000000000000000000000000000064010009a9832bdb0727b3ba54a13b2892f3c916e0aff063c1e5aae093cdb0d73e010004cf5162b05c197a1b458009d81d6cab1a7caaf49d33ca04a04310365939010007e7ced2a9266888fe0d939315421da2089501dbbdcbf9200cf5996feeb701000323dc4c80a4b445dae377d9eae6098666031c62ebb7e336ec7ca6a1e60a000000000000000000000000cc87d9e8525bc40afc11e79f637e1570d7e5ba4600000000000000000000000005b00ef3489e21e57b3e93a72bc9f59c57bb199b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + +new_protocol_version: 111669149696 +old_protocol_version: 107374182400 diff --git a/etc/upgrades/gateway/stage-upgrade-info.yaml b/etc/upgrades/gateway/stage-upgrade-info.yaml index cdedcf10e691..961e2664bbaf 100644 --- a/etc/upgrades/gateway/stage-upgrade-info.yaml +++ b/etc/upgrades/gateway/stage-upgrade-info.yaml @@ -17,5 +17,5 @@ new_validator_timelock: "0xa8A8a8bB25C9E9AbE44Eb7b3e00502a1d8F5AAC4" l1_wrapped_base_token_store: "0x44881d92F801F475d974eDa3516B0f47D7e4cF04" chain_upgrade_diamond_cut: "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000bd979dbfa434d995b4564e07282862f1cf201845000000000000000000000000000000000000000000000000000000000000196000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000aa00000000000000000000000000000000000000000000000000000000000000c400000000000000000000000000000000000000000000000000000000000000f6000000000000000000000000000000000000000000000000000000000000015e000000000000000000000000000000000000000000000000000000000000017c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000d0e18b6810000000000000000000000000000000000000000000000000000000064bf8d6600000000000000000000000000000000000000000000000000000000a9f6d9410000000000000000000000000000000000000000000000000000000027ae4c16000000000000000000000000000000000000000000000000000000004dd18bf5000000000000000000000000000000000000000000000000000000001cc5d10300000000000000000000000000000000000000000000000000000000be6f11cf00000000000000000000000000000000000000000000000000000000e76db86500000000000000000000000000000000000000000000000000000000235d9eb50000000000000000000000000000000000000000000000000000000021f603d7000000000000000000000000000000000000000000000000000000004623c91d000000000000000000000000000000000000000000000000000000001733894500000000000000000000000000000000000000000000000000000000fc57565f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000291de72e3400000000000000000000000000000000000000000000000000000000ea6c029c00000000000000000000000000000000000000000000000000000000cdffacc60000000000000000000000000000000000000000000000000000000052ef6b2c00000000000000000000000000000000000000000000000000000000adfca15e000000000000000000000000000000000000000000000000000000007a0ed627000000000000000000000000000000000000000000000000000000006e9960c30000000000000000000000000000000000000000000000000000000098acd7a600000000000000000000000000000000000000000000000000000000086a56f8000000000000000000000000000000000000000000000000000000003591c1a00000000000000000000000000000000000000000000000000000000079823c9a00000000000000000000000000000000000000000000000000000000d86970d800000000000000000000000000000000000000000000000000000000fd791f3c00000000000000000000000000000000000000000000000000000000e5355c75000000000000000000000000000000000000000000000000000000009d1b5a81000000000000000000000000000000000000000000000000000000007b30c8da00000000000000000000000000000000000000000000000000000000d046815600000000000000000000000000000000000000000000000000000000631f4bac000000000000000000000000000000000000000000000000000000000ec6b0b70000000000000000000000000000000000000000000000000000000033ce93fe0000000000000000000000000000000000000000000000000000000006d49e5b00000000000000000000000000000000000000000000000000000000f5c1182c000000000000000000000000000000000000000000000000000000005518c73b00000000000000000000000000000000000000000000000000000000db1f0bf900000000000000000000000000000000000000000000000000000000b8c2f66f00000000000000000000000000000000000000000000000000000000ef3f0bae00000000000000000000000000000000000000000000000000000000fe26699e000000000000000000000000000000000000000000000000000000003960738200000000000000000000000000000000000000000000000000000000af6a2dcd00000000000000000000000000000000000000000000000000000000a1954fc50000000000000000000000000000000000000000000000000000000046657fe90000000000000000000000000000000000000000000000000000000018e3a9410000000000000000000000000000000000000000000000000000000029b98c6700000000000000000000000000000000000000000000000000000000bd7c541200000000000000000000000000000000000000000000000000000000c3bbd2d700000000000000000000000000000000000000000000000000000000e81e0ba100000000000000000000000000000000000000000000000000000000facd743b000000000000000000000000000000000000000000000000000000009cd939e40000000000000000000000000000000000000000000000000000000056142d7a00000000000000000000000000000000000000000000000000000000b22dd78e0000000000000000000000000000000000000000000000000000000074f4d30d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000812f43dab000000000000000000000000000000000000000000000000000000006c0960f900000000000000000000000000000000000000000000000000000000b473318e00000000000000000000000000000000000000000000000000000000042901c700000000000000000000000000000000000000000000000000000000263b7f8e00000000000000000000000000000000000000000000000000000000e4948f4300000000000000000000000000000000000000000000000000000000eb67241900000000000000000000000000000000000000000000000000000000c924de350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000008701f58c5000000000000000000000000000000000000000000000000000000006edd4f1200000000000000000000000000000000000000000000000000000000c3d93e7c000000000000000000000000000000000000000000000000000000006f497ac6000000000000000000000000000000000000000000000000000000007f61885c00000000000000000000000000000000000000000000000000000000c37533bb0000000000000000000000000000000000000000000000000000000097c09d34000000000000000000000000000000000000000000000000000000000f23da43000000000000000000000000000000000000000000000000000000000000000000000000000000001a1c48880b7c33dbb9d7184086c90da788b55c3c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000140e18b681000000000000000000000000000000000000000000000000000000001733894500000000000000000000000000000000000000000000000000000000fc57565f000000000000000000000000000000000000000000000000000000001cc5d1030000000000000000000000000000000000000000000000000000000021f603d700000000000000000000000000000000000000000000000000000000235d9eb50000000000000000000000000000000000000000000000000000000027ae4c16000000000000000000000000000000000000000000000000000000002878fe74000000000000000000000000000000000000000000000000000000003f42d5dd0000000000000000000000000000000000000000000000000000000041cf49bb000000000000000000000000000000000000000000000000000000004623c91d000000000000000000000000000000000000000000000000000000004dd18bf5000000000000000000000000000000000000000000000000000000006223258e0000000000000000000000000000000000000000000000000000000064b554ad0000000000000000000000000000000000000000000000000000000064bf8d66000000000000000000000000000000000000000000000000000000006e762e9800000000000000000000000000000000000000000000000000000000a9f6d94100000000000000000000000000000000000000000000000000000000b784610700000000000000000000000000000000000000000000000000000000be6f11cf00000000000000000000000000000000000000000000000000000000e76db865000000000000000000000000000000000000000000000000000000000000000000000000000000002433e433f51434a9176de9e38ebbe2a1e08a4007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000002f06d49e5b000000000000000000000000000000000000000000000000000000000ec6b0b700000000000000000000000000000000000000000000000000000000fe26699e0000000000000000000000000000000000000000000000000000000018e3a941000000000000000000000000000000000000000000000000000000001de72e340000000000000000000000000000000000000000000000000000000022c5cf230000000000000000000000000000000000000000000000000000000029b98c670000000000000000000000000000000000000000000000000000000033ce93fe000000000000000000000000000000000000000000000000000000003408e470000000000000000000000000000000000000000000000000000000003591c1a000000000000000000000000000000000000000000000000000000000396073820000000000000000000000000000000000000000000000000000000039d7d4aa0000000000000000000000000000000000000000000000000000000046657fe90000000000000000000000000000000000000000000000000000000052ef6b2c000000000000000000000000000000000000000000000000000000005a59033500000000000000000000000000000000000000000000000000000000631f4bac000000000000000000000000000000000000000000000000000000006a27e8b5000000000000000000000000000000000000000000000000000000006e9960c30000000000000000000000000000000000000000000000000000000074f4d30d0000000000000000000000000000000000000000000000000000000079823c9a000000000000000000000000000000000000000000000000000000007a0ed627000000000000000000000000000000000000000000000000000000007b30c8da000000000000000000000000000000000000000000000000000000008708474e00000000000000000000000000000000000000000000000000000000946ebad100000000000000000000000000000000000000000000000000000000960dcf240000000000000000000000000000000000000000000000000000000098acd7a6000000000000000000000000000000000000000000000000000000009cd939e4000000000000000000000000000000000000000000000000000000009d1b5a8100000000000000000000000000000000000000000000000000000000a1954fc500000000000000000000000000000000000000000000000000000000adfca15e00000000000000000000000000000000000000000000000000000000af6a2dcd00000000000000000000000000000000000000000000000000000000b22dd78e00000000000000000000000000000000000000000000000000000000b8c2f66f00000000000000000000000000000000000000000000000000000000bd7c541200000000000000000000000000000000000000000000000000000000c3bbd2d700000000000000000000000000000000000000000000000000000000cdffacc600000000000000000000000000000000000000000000000000000000d046815600000000000000000000000000000000000000000000000000000000d86970d800000000000000000000000000000000000000000000000000000000db1f0bf900000000000000000000000000000000000000000000000000000000e5355c7500000000000000000000000000000000000000000000000000000000e81e0ba100000000000000000000000000000000000000000000000000000000ea6c029c00000000000000000000000000000000000000000000000000000000ef3f0bae00000000000000000000000000000000000000000000000000000000f4ff5e2e00000000000000000000000000000000000000000000000000000000f5c1182c00000000000000000000000000000000000000000000000000000000facd743b00000000000000000000000000000000000000000000000000000000fd791f3c00000000000000000000000000000000000000000000000000000000000000000000000000000000121385dce88da3855dd86fcc8c431d54e23400a3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a042901c70000000000000000000000000000000000000000000000000000000012f43dab00000000000000000000000000000000000000000000000000000000eb67241900000000000000000000000000000000000000000000000000000000263b7f8e000000000000000000000000000000000000000000000000000000006c0960f9000000000000000000000000000000000000000000000000000000007efda2ae00000000000000000000000000000000000000000000000000000000b473318e00000000000000000000000000000000000000000000000000000000d077255100000000000000000000000000000000000000000000000000000000ddcc9eec00000000000000000000000000000000000000000000000000000000e4948f4300000000000000000000000000000000000000000000000000000000000000000000000000000000ada3b6059c50b7e366197387fae223c45637423700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000040f23da4300000000000000000000000000000000000000000000000000000000e12a61370000000000000000000000000000000000000000000000000000000098f8196200000000000000000000000000000000000000000000000000000000cf02827d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e0415a114f5000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001600100088580465d88420e6369230ee94a32ff356dbcdd407a4be49fc8009b2a81010004dbf8be36c421254d005352f8245146906919be0099e8a50d0e78df85e0000000000000000000000000c2b2adec31752dbbc7000b7a611c3edac5518a2d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098000000000000000000000000000000000000000000000000000000000000009a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000000000000fe0000000000000000000000000000000000000000000000000000000000008007000000000000000000000000000000000000000000000000000000000000800600000000000000000000000000000000000000000000000000000000044aa2000000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000290100088580465d88420e6369230ee94a32ff356dbcdd407a4be49fc8009b2a81010004dbf8be36c421254d005352f8245146906919be0099e8a50d0e78df85e00100000782c9843c8cd05f37c93332f62f76b15311edfc8c6ef6f276283d847801000013409fe778437b58e5819ee48a658fb09b86bb7badf93cb334c16cc632010000176a7caf23abe1829a27684e6172e72e3b8a1d201364c5bbe53615202b01000085bf765ff04ad45979da71816fba3bdee901366c5cce73c94f3ee37bb9010000bbb84f463e70d100c271744ab9827d4c9b66ee4356a0c697dcb54e3b8701000ef37666c6447ad953d8be7ca75d4a0de3d5fd57a3966906d2c5577111ab0100005949c21cebae3d1bbe3503bdd35cceb135450e03c75ed9d13d38b777dd010000d1b8d2eea3e226ce082ca4d1358a62046be50b2f728a4cc5c59fefe4d301000069e4d584a302aac6094775b8a93c4c02688f8d9157edb11770607d36ec01000035ae7c6f5e10b1bc5249632adfb85efc29cbc4f655570ee52f3e8a608d0100042ddaf17f234d9fb24c16807157a1567af1d2528cf9f79e4f39691f80d0010001d34f312ce1bfb0e23938b74f57c7a25db89d8b87357acc390196fef2de01000059fe3f4d6c9e007d7ef8bb2e9493b7f7d30397b4727a7a864c04571c30010000f3fddaf45e9757c9e81db3218e29d4ef2ffdb356795cd32dfd8dc25ce40100017b380400ad17da6f3b90aac6abab01af7e7eaa940d1f28c7b342b752fb010006df5fd8dbfe05a0ae3d8011f0349834d52141827e7751fe03042af7945a01000017575446d56eb4e640189c5e356449975b957ae5262924567f4f664d750100013b63d851496b3478b567f878f5ee616d6e2a9373cabf4b78c1409d1992010000b1d1a4f023742903d8750514351bebe5de2449b2fdc5b8dc095725ef6c0100000fb95dd6f46682ea2f0b187124613531b459091a6c38dc9d0260e5fff1010000213ed880e87b5121c3d96a0cf6787ca83dda10080a1d7cce7ad72bf6a60100000f72c45ba0985fe38394a29445cb337c127afb0da5e94211d518a00949010000436558414c5103b0668b90a9445f7713a999bf0c9a73c6b4ba2f3af2280100003fc1eab315ab932938987aedb4659001141fc976c6a92b1d94bad196dd01000189d9cbcdc1c3fa91a929f14747f578f7f6003f7f36616636569ef5d7fd0100000fbb7f36971f5a64dc6d03ddf6f6f2a4122dc01b835874922f207bd9b5010009a9832bdb0727b3ba54a13b2892f3c916e0aff063c1e5aae093cdb0d73e010004cf5162b05c197a1b458009d81d6cab1a7caaf49d33ca04a04310365939010007e7ced2a9266888fe0d939315421da2089501dbbdcbf9200cf5996feeb701000323dc4c80a4b445dae377d9eae6098666031c62ebb7e336ec7ca6a1e60a01000331ab9faa2a62e4c1c73aca0d0407cab5e1ec59f71eff3b03ffeee6de57010003353ac7f5ef89ee0c223c349996e6e5f5fbdac0c98ea15fe8347ac49055010001916b35d863cd9bda8fa51fd609afed513ab76c426460b28297c84d7838010004b1492831925bd58dd9143179471e90b5f644a77349332f026c4c0b092f01000067c42a9f91dc32ed0de23a6587d9298d7142bd018d0f3bf8a63bc8b3fb010000fbc1ab940b7855fb56b42a56b3f5224a26a9b569cccec2ff9fa583f52a01000151dd2e087f901ad9eab5208af694db0d600e0395099bce02c04b5f04e701000015b8c02ac1b399c59da4ebbee0bd3febd41307473ba0885ebc93c356cf010001432488e16fe474f9eda02a0085b59fcd4f6572abcc53aa891e680c3d4c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000224000000000000000000000000025e04b7d1fc963ab8e5feb0797f7a943e260e8b60000000000000000000000008d65310fe158734eea3197ff9a6211f9bba3d0a8000000000000000000000000a8a8a8bb25c9e9abe44eb7b3e00502a1d8f5aac400000000000000000000000044881d92f801f475d974eda3516b0f47d7e4cf04000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000005800000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000007c0000000000000000000000000000000000000000000000000000000000000088000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000ac00000000000000000000000000000000000000000000000000000000000000b800000000000000000000000000000000000000000000000000000000000000c400000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000dc00000000000000000000000000000000000000000000000000000000000000e800000000000000000000000000000000000000000000000000000000000000f40000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010c000000000000000000000000000000000000000000000000000000000000011800000000000000000000000000000000000000000000000000000000000001240000000000000000000000000000000000000000000000000000000000000130000000000000000000000000000000000000000000000000000000000000013c000000000000000000000000000000000000000000000000000000000000014800000000000000000000000000000000000000000000000000000000000001540000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000016c000000000000000000000000000000000000000000000000000000000000017800000000000000000000000000000000000000000000000000000000000001840000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000019c00000000000000000000000000000000000000000000000000000000000001a800000000000000000000000000000000000000000000000000000000000001b400000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001cc00000000000000000000000000000000000000000000000000000000000001d800000000000000000000000000000000000000000000000000000000000001e400000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000001fc000000000000000000000000000000000000000000000000000000000000020800100000782c9843c8cd05f37c93332f62f76b15311edfc8c6ef6f276283d847800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000013409fe778437b58e5819ee48a658fb09b86bb7badf93cb334c16cc63200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000176a7caf23abe1829a27684e6172e72e3b8a1d201364c5bbe53615202b00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000085bf765ff04ad45979da71816fba3bdee901366c5cce73c94f3ee37bb900000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000bbb84f463e70d100c271744ab9827d4c9b66ee4356a0c697dcb54e3b8700000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000ef37666c6447ad953d8be7ca75d4a0de3d5fd57a3966906d2c5577111ab00000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100000782c9843c8cd05f37c93332f62f76b15311edfc8c6ef6f276283d847800000000000000000000000000000000000000000000000000000000000080010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100005949c21cebae3d1bbe3503bdd35cceb135450e03c75ed9d13d38b777dd00000000000000000000000000000000000000000000000000000000000080020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000d1b8d2eea3e226ce082ca4d1358a62046be50b2f728a4cc5c59fefe4d300000000000000000000000000000000000000000000000000000000000080030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000069e4d584a302aac6094775b8a93c4c02688f8d9157edb11770607d36ec00000000000000000000000000000000000000000000000000000000000080040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000035ae7c6f5e10b1bc5249632adfb85efc29cbc4f655570ee52f3e8a608d00000000000000000000000000000000000000000000000000000000000080050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100042ddaf17f234d9fb24c16807157a1567af1d2528cf9f79e4f39691f80d000000000000000000000000000000000000000000000000000000000000080060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010001d34f312ce1bfb0e23938b74f57c7a25db89d8b87357acc390196fef2de00000000000000000000000000000000000000000000000000000000000080080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000059fe3f4d6c9e007d7ef8bb2e9493b7f7d30397b4727a7a864c04571c3000000000000000000000000000000000000000000000000000000000000080090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000f3fddaf45e9757c9e81db3218e29d4ef2ffdb356795cd32dfd8dc25ce4000000000000000000000000000000000000000000000000000000000000800a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100017b380400ad17da6f3b90aac6abab01af7e7eaa940d1f28c7b342b752fb000000000000000000000000000000000000000000000000000000000000800b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010006df5fd8dbfe05a0ae3d8011f0349834d52141827e7751fe03042af7945a000000000000000000000000000000000000000000000000000000000000800c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000017575446d56eb4e640189c5e356449975b957ae5262924567f4f664d75000000000000000000000000000000000000000000000000000000000000800d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100013b63d851496b3478b567f878f5ee616d6e2a9373cabf4b78c1409d1992000000000000000000000000000000000000000000000000000000000000800e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000b1d1a4f023742903d8750514351bebe5de2449b2fdc5b8dc095725ef6c000000000000000000000000000000000000000000000000000000000000800f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100000fb95dd6f46682ea2f0b187124613531b459091a6c38dc9d0260e5fff100000000000000000000000000000000000000000000000000000000000080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000213ed880e87b5121c3d96a0cf6787ca83dda10080a1d7cce7ad72bf6a600000000000000000000000000000000000000000000000000000000000080120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100000f72c45ba0985fe38394a29445cb337c127afb0da5e94211d518a0094900000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000436558414c5103b0668b90a9445f7713a999bf0c9a73c6b4ba2f3af22800000000000000000000000000000000000000000000000000000000000080110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100003fc1eab315ab932938987aedb4659001141fc976c6a92b1d94bad196dd00000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000189d9cbcdc1c3fa91a929f14747f578f7f6003f7f36616636569ef5d7fd00000000000000000000000000000000000000000000000000000000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100000fbb7f36971f5a64dc6d03ddf6f6f2a4122dc01b835874922f207bd9b500000000000000000000000000000000000000000000000000000000000100060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010009a9832bdb0727b3ba54a13b2892f3c916e0aff063c1e5aae093cdb0d73e00000000000000000000000000000000000000000000000000000000000100020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010004cf5162b05c197a1b458009d81d6cab1a7caaf49d33ca04a0431036593900000000000000000000000000000000000000000000000000000000000100030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010007e7ced2a9266888fe0d939315421da2089501dbbdcbf9200cf5996feeb700000000000000000000000000000000000000000000000000000000000100040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000323dc4c80a4b445dae377d9eae6098666031c62ebb7e336ec7ca6a1e60a00000000000000000000000000000000000000000000000000000000000100050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000331ab9faa2a62e4c1c73aca0d0407cab5e1ec59f71eff3b03ffeee6de5700000000000000000000000000000000000000000000000000000000000100070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010001916b35d863cd9bda8fa51fd609afed513ab76c426460b28297c84d7838000000000000000000000000cc87d9e8525bc40afc11e79f637e1570d7e5ba460000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010004b1492831925bd58dd9143179471e90b5f644a77349332f026c4c0b092f00000000000000000000000005b00ef3489e21e57b3e93a72bc9f59c57bb199b0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000151dd2e087f901ad9eab5208af694db0d600e0395099bce02c04b5f04e7000000000000000000000000fa96a3da88f201433911beff3ecc434cb12227310000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000015b8c02ac1b399c59da4ebbee0bd3febd41307473ba0885ebc93c356cf000000000000000000000000fa30eae30351a83809657299f6cad9557c232e8c0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010003353ac7f5ef89ee0c223c349996e6e5f5fbdac0c98ea15fe8347ac49055000000000000000000000000000000000000000000000000000000000000800f0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000b1d1a4f023742903d8750514351bebe5de2449b2fdc5b8dc095725ef6c000000000000000000000000000000000000000000000000000000000000800f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000aa36a7000000000000000000000000000000000000000000000000000000000000010e000000000000000000000000fd3130ea0e8b7dd61ac3663328a66d97eb02f84b010000fbc1ab940b7855fb56b42a56b3f5224a26a9b569cccec2ff9fa583f52a0000000000000000000000007aab1cd1fcd3213e20de15d2236a67d9084c09af0000000000000000000000000000000000000000000000000000000000000064010009a9832bdb0727b3ba54a13b2892f3c916e0aff063c1e5aae093cdb0d73e010004cf5162b05c197a1b458009d81d6cab1a7caaf49d33ca04a04310365939010007e7ced2a9266888fe0d939315421da2089501dbbdcbf9200cf5996feeb701000323dc4c80a4b445dae377d9eae6098666031c62ebb7e336ec7ca6a1e60a000000000000000000000000cc87d9e8525bc40afc11e79f637e1570d7e5ba4600000000000000000000000005b00ef3489e21e57b3e93a72bc9f59c57bb199b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" -new_protocol_version: 107374182400 -old_protocol_version: 111669149696 +new_protocol_version: 111669149696 +old_protocol_version: 107374182400 diff --git a/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway.rs b/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway.rs index b5b2eec1f37c..0c83e57706a3 100644 --- a/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway.rs +++ b/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway.rs @@ -799,8 +799,8 @@ pub(crate) async fn run(shell: &Shell, args: GatewayUpgradeCalldataArgs) -> anyh // 2. Generate calldata let schedule_calldata = set_upgrade_timestamp_calldata( - args.server_upgrade_timestamp, upgrade_info.new_protocol_version, + args.server_upgrade_timestamp, ); println!( From 3dce480cde5bf1aa1a8f6fa076ca7c86d3f44d2e Mon Sep 17 00:00:00 2001 From: Stanislav Breadless Date: Fri, 17 Jan 2025 15:18:13 +0100 Subject: [PATCH 06/17] upd contracts --- contracts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts b/contracts index 3cd715930613..741d10d86562 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit 3cd71593061367da65b63dd43099fa20715c986e +Subproject commit 741d10d865629f64bf621b7058c23c50a47b3fd3 From 37fe37a4e90ff3de375b872d7f3dd4283c6db8c7 Mon Sep 17 00:00:00 2001 From: Stanislav Breadless Date: Tue, 21 Jan 2025 12:16:02 +0100 Subject: [PATCH 07/17] upd contracts --- contracts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts b/contracts index 741d10d86562..1cd5d6b9cdeb 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit 741d10d865629f64bf621b7058c23c50a47b3fd3 +Subproject commit 1cd5d6b9cdeb30f1dfe5a8cbd63a8654bc5413c6 From 9328f438d7858d7390f4aa8b30b69192896f72bb Mon Sep 17 00:00:00 2001 From: Stanislav Breadless Date: Thu, 23 Jan 2025 13:02:21 +0100 Subject: [PATCH 08/17] gateway finalization --- contracts | 2 +- .../src/commands/dev/commands/gateway.rs | 6 +- .../commands/gateway_finalize_preparation.rs | 428 ++++++++++++++++++ .../zkstack/src/commands/dev/commands/mod.rs | 1 + .../zkstack/src/commands/dev/messages.rs | 5 +- .../crates/zkstack/src/commands/dev/mod.rs | 6 +- 6 files changed, 442 insertions(+), 6 deletions(-) create mode 100644 zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway_finalize_preparation.rs diff --git a/contracts b/contracts index 1cd5d6b9cdeb..0dcccc6089c1 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit 1cd5d6b9cdeb30f1dfe5a8cbd63a8654bc5413c6 +Subproject commit 0dcccc6089c112d11519f4db310a13fd4ea1d084 diff --git a/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway.rs b/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway.rs index 0c83e57706a3..e3a7f5b1536a 100644 --- a/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway.rs +++ b/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway.rs @@ -53,13 +53,13 @@ macro_rules! amend_config_pre_upgrade { pub(crate) struct GatewayUpgradeInfo { // Information about pre-upgrade contracts. l1_chain_id: u32, - bridgehub_addr: Address, + pub(crate) bridgehub_addr: Address, old_validator_timelock: Address, - l1_legacy_shared_bridge: Address, + pub(crate) l1_legacy_shared_bridge: Address, // Information about the post-upgrade contracts. ctm_deployment_tracker_proxy_addr: Address, - native_token_vault_addr: Address, + pub(crate) native_token_vault_addr: Address, l1_bytecodes_supplier_addr: Address, rollup_l1_da_validator_addr: Address, no_da_validium_l1_validator_addr: Address, diff --git a/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway_finalize_preparation.rs b/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway_finalize_preparation.rs new file mode 100644 index 000000000000..7e78986156fb --- /dev/null +++ b/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway_finalize_preparation.rs @@ -0,0 +1,428 @@ +use std::{num::NonZeroUsize, str::FromStr, sync::Arc, time::Duration}; + +use lazy_static::lazy_static; +use anyhow::Context; +use clap::{Parser, ValueEnum}; +use ethers::{ + abi::{encode, parse_abi, Token}, + contract::{abigen, BaseContract}, + providers::{Http, Middleware, Provider}, + utils::hex, +}; +use serde::{Deserialize, Serialize}; +use strum::EnumIter; +use tokio::time::sleep; +use xshell::Shell; +use zkstack_cli_config::{ + forge_interface::gateway_ecosystem_upgrade::output::GatewayEcosystemUpgradeOutput, + traits::{ReadConfig, ZkStackConfig}, + ContractsConfig, +}; +use zksync_contracts::{chain_admin_contract, hyperchain_contract, DIAMOND_CUT}; +use zksync_types::{ + ethabi, h256_to_address, h256_to_u256, u256_to_h256, url::SensitiveUrl, web3::{keccak256, Bytes}, Address, L1BatchNumber, L2BlockNumber, L2ChainId, ProtocolVersionId, H256, L2_NATIVE_TOKEN_VAULT_ADDRESS, SHARED_BRIDGE_ETHER_TOKEN_ADDRESS, U256 +}; +use zksync_web3_decl::{ + client::{Client, DynClient, L2}, + namespaces::{UnstableNamespaceClient, ZksNamespaceClient}, +}; + +use super::gateway::GatewayUpgradeInfo; + +// get_list_of_tokens.rs + +use ethers::prelude::*; +use std::{collections::HashSet, fs::File, io::{BufReader, BufWriter}, path::Path}; + +/// Structure that we expect to read from / write to the existing cache file +#[derive(Debug, Serialize, Deserialize)] +struct Cache { + first_seen_block: u64, + last_seen_block: u64, + added_tokens: Vec
, +} + +/// How many blocks to process in one chunk +const BLOCK_RANGE: u64 = 50_000; + +/// This is the modified function that also accepts a `legacy_bridge_addr`. +/// +/// It will query: +/// - The `BridgehubDepositInitiated` event at `bridge_addr`. +/// - The `DepositInitiated(bytes32,address,address,address,uint256)` event at `legacy_bridge_addr`. +/// - The `DepositInitiated(address,address,address,uint256)` event at `legacy_bridge_addr`. +/// +/// For each event, it parses out `l1Token` and stores it. +pub async fn get_list_of_tokens( + block_to_start_with: u64, + existing_cache_path: &str, + l1_rpc_url: &str, + // The new "bridge hub" address (already used). + bridge_addr: Address, + // The additional legacy bridge address. + legacy_bridge_addr: Address, + base_tokens: Vec
, +) -> Vec
{ + // --------------------------------------------------------- + // 1. Read or initialize the cache + // --------------------------------------------------------- + let mut cache = read_cache_from_file(&existing_cache_path).unwrap_or_else(|| Cache { + first_seen_block: block_to_start_with, + last_seen_block: block_to_start_with, + added_tokens: vec![], + }); + + // If the cache file was found, check the condition about `first_seen_block` + if cache.first_seen_block > block_to_start_with { + // If the cache's first_seen_block is larger than our new start, + // clear the entire cache and reset. + cache.first_seen_block = block_to_start_with; + cache.last_seen_block = block_to_start_with; + cache.added_tokens.clear(); + } + + // We'll use a HashSet for tracking tokens to avoid duplicates easily + let mut discovered_tokens: HashSet
= cache.added_tokens.iter().copied().collect(); + + // Ensure that all base tokens are marked as discovered. + for base_token in base_tokens { + discovered_tokens.insert(base_token); + } + + discovered_tokens.insert(SHARED_BRIDGE_ETHER_TOKEN_ADDRESS); + + // --------------------------------------------------------- + // 2. Connect to a provider + // --------------------------------------------------------- + let provider = Provider::::try_from(l1_rpc_url) + .expect("Could not instantiate HTTP Provider"); + + // Get the latest block so we know how far we can go + let latest_block = provider + .get_block_number() + .await + .expect("Failed to fetch latest block") + .as_u64(); + + // Our actual starting point is whichever is further along + let mut current_block = cache.last_seen_block; + + // --------------------------------------------------------- + // 3. Process logs in chunks of BLOCK_RANGE + // --------------------------------------------------------- + while current_block <= latest_block { + let start_of_range = current_block; + let end_of_range = std::cmp::min(start_of_range + BLOCK_RANGE, latest_block); + + println!("Processing range {start_of_range} - {end_of_range}\n"); + + // If the entire range is below what we have already processed, skip + if end_of_range < cache.last_seen_block { + // skip range + current_block = end_of_range + 1; + println!("Range is cached, skipping..."); + continue; + } + + // --------------------------------------------------------- + // 4. Build filters and fetch logs, parse out the l1Token + // --------------------------------------------------------- + + // a) BridgehubDepositInitiated event at `bridge_addr` + let filter_bridgehub_deposit_initiated = Filter::new() + .address(bridge_addr) + .event("BridgehubDepositInitiated(uint256,bytes32,address,address,address,uint256)") + .from_block(start_of_range) + .to_block(end_of_range); + + // Sleep for 1 second before the JSON-RPC request + sleep(Duration::from_secs(1)).await; + let logs_bridgehub = provider + .get_logs(&filter_bridgehub_deposit_initiated) + .await + .expect("Failed to fetch logs for BridgehubDepositInitiated"); + + for log in logs_bridgehub { + // The event is: + // BridgehubDepositInitiated(uint256 chainId, bytes32 txDataHash, address from, + // address to, address l1Token, uint256 amount) + // If chainId, txDataHash, from are indexed, the next unindexed parameters in `log.data` + // are `to`, `l1Token`, `amount` in that order. + // So `l1Token` is in offset 32..64 within `log.data`. + let raw_data = log.data.0; + if raw_data.len() < 64 { + // Malformed log data, skip + continue; + } + let l1_token_bytes = &raw_data[32..64]; + let l1_token_addr = Address::from_slice(&l1_token_bytes[12..32]); // last 20 bytes + discovered_tokens.insert(l1_token_addr); + } + + // b) Legacy deposit with signature: DepositInitiated(bytes32,address,address,address,uint256) + // - l1Token is unindexed at the first 32 bytes in the log data. + let filter_legacy_deposit_initiated_1 = Filter::new() + .address(legacy_bridge_addr) + .event("DepositInitiated(bytes32,address,address,address,uint256)") + .from_block(start_of_range) + .to_block(end_of_range); + + // Sleep for 1 second before the JSON-RPC request + sleep(Duration::from_secs(1)).await; + let logs_legacy_1 = provider + .get_logs(&filter_legacy_deposit_initiated_1) + .await + .expect("Failed to fetch logs for DepositInitiated - (bytes32,address,address,address,uint256)"); + + for log in logs_legacy_1 { + // The event layout is: + // event DepositInitiated( + // bytes32 indexed l2DepositTxHash, + // address indexed from, + // address indexed to, + // address l1Token, + // uint256 amount + // ); + // + // Indexed: l2DepositTxHash, from, to (=> topics[1..=3]) + // Unindexed: l1Token (32 bytes), amount (32 bytes) => log.data + // So `log.data[0..32]` is l1Token, `log.data[32..64]` is amount. + let raw_data = log.data.0; + if raw_data.len() < 64 { + continue; + } + // l1Token is the first 32 bytes + let l1_token_bytes = &raw_data[0..32]; + let l1_token_addr = Address::from_slice(&l1_token_bytes[12..32]); + discovered_tokens.insert(l1_token_addr); + } + + // c) Legacy deposit with signature: DepositInitiated(address,address,address,uint256) + // - l1Token is fully indexed, so it's the 3rd indexed address in topics[3]. + let filter_legacy_deposit_initiated_2 = Filter::new() + .address(legacy_bridge_addr) + .event("DepositInitiated(address,address,address,uint256)") + .from_block(start_of_range) + .to_block(end_of_range); + + // Sleep for 1 second before the JSON-RPC request + sleep(Duration::from_secs(1)).await; + let logs_legacy_2 = provider + .get_logs(&filter_legacy_deposit_initiated_2) + .await + .expect("Failed to fetch logs for DepositInitiated - (address,address,address,uint256)"); + + for log in logs_legacy_2 { + // The event layout is: + // event DepositInitiated( + // address indexed from, + // address indexed to, + // address indexed l1Token, + // uint256 amount + // ); + // + // Indexed: from (topics[1]), to (topics[2]), l1Token (topics[3]) + // The data field only has `amount`. + if log.topics.len() < 4 { + continue; + } + let l1_token_topic = log.topics[3]; + // Parse last 20 bytes of the topic + let l1_token_addr = Address::from_slice(&l1_token_topic.as_bytes()[12..32]); + discovered_tokens.insert(l1_token_addr); + } + + // --------------------------------------------------------- + // 5. Update the cache, flush it to disk + // --------------------------------------------------------- + cache.last_seen_block = end_of_range; + cache.added_tokens = discovered_tokens.iter().copied().collect(); + + write_cache_to_file(&existing_cache_path, &cache) + .expect("Failed to write cache to file"); + + println!("Processed and saved the range!"); + + // Move our current_block pointer forward + if end_of_range == latest_block { + break; + } else { + current_block = end_of_range + 1; + } + } + + // Convert our HashSet to a Vec for the final result + discovered_tokens.into_iter().collect() +} + +/// Reads the cache JSON file if it exists and can be parsed. +fn read_cache_from_file>(path: P) -> Option { + let file = File::open(path).ok()?; + let reader = BufReader::new(file); + serde_json::from_reader(reader).ok() +} + +/// Writes the updated cache to disk, overwriting the old file. +fn write_cache_to_file>(path: P, cache: &Cache) -> Result<(), Box> { + let file = File::create(path)?; + let writer = BufWriter::new(file); + serde_json::to_writer_pretty(writer, &cache)?; + Ok(()) +} + + +abigen!( + LegacyStateTransitionManagerAbi, + r"[ + function getAllHyperchainChainIDs()(uint256[]) + function getHyperchain(uint256 _chainId) public view returns (address) +]" +); + +abigen!( + LegacyBridgehubAbi, + r"[ + function chainTypeManager(uint256)(address) + function baseToken(uint256)(address) +]" +); + +async fn ask_storage( + provider: Arc>, + address: Address, + key: H256 +) -> H256 { + sleep(Duration::from_secs(1)).await; + provider.get_storage_at(address, key, None).await.unwrap() +} + +// The method has been deleted, so we'll have to replicate it in rust +async fn get_all_hyperchains_ids(provider: Arc>, stm_address: Address) -> Vec { + + let num_chains_key = u256_to_h256(U256::from(151)); + + let number_of_chains = h256_to_u256(ask_storage(provider.clone(), stm_address, num_chains_key).await); + + // keccak(151) + let initial_slot = h256_to_u256(H256::from_str("354a83ed9988f79f6038d4c7a7dadbad8af32f4ad6df893e0e5807a1b1944ff9").unwrap()); + + let mut result = vec![]; + + for i in 0..number_of_chains.as_u32() { + let current_key = initial_slot + U256::from(i); + + let current_value = ask_storage(provider.clone(), stm_address, u256_to_h256(current_key)).await; + + result.push(h256_to_u256(current_value)); + } + + result +} + + +/// Returns an array of chains' ids and base tokens +async fn get_chains_info( + l1_rpc_url: &str, + bridgehub_addr: Address, + era_chain_id: u64 +) -> (Vec, Vec
) { + let provider = Arc::new(Provider::::try_from(l1_rpc_url) + .expect("Could not instantiate HTTP Provider")); + + let bridgehub = LegacyBridgehubAbi::new(bridgehub_addr, provider.clone()); + let stm_address = bridgehub.chain_type_manager(U256::from(era_chain_id)).call().await.unwrap(); + + if stm_address == Address::zero() { + panic!("Era has not STM!"); + } + + let stm = LegacyStateTransitionManagerAbi::new(stm_address, provider.clone()); + + let chain_ids = get_all_hyperchains_ids( + provider.clone(), + stm_address + ).await; + + let mut addresses = vec![]; + for chain in chain_ids.iter() { + sleep(Duration::from_secs(1)).await; + let chain = stm.get_hyperchain(*chain).call().await.unwrap(); + + let base_token = ask_storage(provider.clone(), chain, u256_to_h256(U256::from(43))).await; + + addresses.push(h256_to_address(&base_token)); + } + + (chain_ids, addresses) +} + +#[derive(Parser, Debug, Clone)] +pub struct GatewayFinalizePreparationArgs { + upgrade_description_path: String, + l1_rpc_url: String, + block_to_start_with: u64, + era_chain_id: u64, + multicall_with_gas_addr: Address, + #[clap(long, default_missing_value = "false")] + send_finalize: bool, +} + +const CACHE_PATH: &str = "tokens-cache.json"; + +// ZKChain ABI +abigen!( + LegacySharedBridgeAbi, + r"[ + function legacyBridge()(address) +]" +); + +async fn get_legacy_bridge(bridge_addr: Address, l1_rpc_url: &str) -> Address { + let provider = Provider::::try_from(l1_rpc_url) + .expect("Could not instantiate HTTP Provider"); + + let bridge = LegacySharedBridgeAbi::new(bridge_addr, Arc::new(provider)); + + bridge.legacy_bridge().call().await.unwrap() +} + +lazy_static! { + static ref FINALIZE_UPGRADE: BaseContract = BaseContract::from( + parse_abi(&[ + "function finalizeInit(address aggregator, address bridgehub,address payable l1NativeTokenVault,address[] calldata tokens,uint256[] calldata chains) external", + ]) + .unwrap(), + ); +} + +pub(crate) async fn run(shell: &Shell, args: GatewayFinalizePreparationArgs) -> anyhow::Result<()> { + let upgrade_info = GatewayUpgradeInfo::read(shell, &args.upgrade_description_path)?; + + println!("Obtaining chain and base token info..."); + let (chain_ids, base_tokens) = get_chains_info(&args.l1_rpc_url, upgrade_info.bridgehub_addr, args.era_chain_id).await; + + println!("Obtaining bridged tokens info..."); + + let tokens = get_list_of_tokens( + args.block_to_start_with, + CACHE_PATH, + &args.l1_rpc_url, + upgrade_info.l1_legacy_shared_bridge, + get_legacy_bridge(upgrade_info.l1_legacy_shared_bridge, &args.l1_rpc_url).await, + base_tokens + ).await; + + // Now, since we have the list of tokens and chains, we need to register those. + + let calldata = FINALIZE_UPGRADE.encode("finalizeInit", ( + args.multicall_with_gas_addr, + upgrade_info.bridgehub_addr, + upgrade_info.native_token_vault_addr, + tokens, + chain_ids + )).unwrap(); + + println!("data: {}", hex::encode(&calldata.0)); + + Ok(()) +} diff --git a/zkstack_cli/crates/zkstack/src/commands/dev/commands/mod.rs b/zkstack_cli/crates/zkstack/src/commands/dev/commands/mod.rs index ac41d76b3c4e..c210f8cd90b2 100644 --- a/zkstack_cli/crates/zkstack/src/commands/dev/commands/mod.rs +++ b/zkstack_cli/crates/zkstack/src/commands/dev/commands/mod.rs @@ -14,3 +14,4 @@ pub mod snapshot; pub(crate) mod sql_fmt; pub mod status; pub mod test; +pub mod gateway_finalize_preparation; diff --git a/zkstack_cli/crates/zkstack/src/commands/dev/messages.rs b/zkstack_cli/crates/zkstack/src/commands/dev/messages.rs index b65750b34341..6f0bb06dbe36 100644 --- a/zkstack_cli/crates/zkstack/src/commands/dev/messages.rs +++ b/zkstack_cli/crates/zkstack/src/commands/dev/messages.rs @@ -16,7 +16,10 @@ pub(super) const MSG_CONFIG_WRITER_ABOUT: &str = "Overwrite general config"; #[cfg(feature = "gateway")] pub(super) const MSG_GATEWAY_UPGRADE_CALLDATA: &str = "Gateway upgrade checker and calldata generator"; - + #[cfg(feature = "gateway")] +pub(super) const MSG_GATEWAY_FINALIZE: &str = + "Gateway upgrade post-stage2 finalization"; + pub(super) const MSG_SUBCOMMAND_FMT_ABOUT: &str = "Format code"; pub(super) const MSG_SUBCOMMAND_SNAPSHOTS_CREATOR_ABOUT: &str = "Snapshots creator"; diff --git a/zkstack_cli/crates/zkstack/src/commands/dev/mod.rs b/zkstack_cli/crates/zkstack/src/commands/dev/mod.rs index 45e429129082..f29ab86c1675 100644 --- a/zkstack_cli/crates/zkstack/src/commands/dev/mod.rs +++ b/zkstack_cli/crates/zkstack/src/commands/dev/mod.rs @@ -1,7 +1,7 @@ use clap::Subcommand; use commands::status::args::StatusArgs; #[cfg(feature = "gateway")] -use messages::MSG_GATEWAY_UPGRADE_CALLDATA; +use messages::{MSG_GATEWAY_UPGRADE_CALLDATA, MSG_GATEWAY_FINALIZE}; use messages::MSG_STATUS_ABOUT; use xshell::Shell; @@ -52,6 +52,9 @@ pub enum DevCommands { #[cfg(feature = "gateway")] #[command(about = MSG_GATEWAY_UPGRADE_CALLDATA)] GatewayUpgradeCalldata(commands::gateway::GatewayUpgradeCalldataArgs), + #[cfg(feature = "gateway")] + #[command(about = MSG_GATEWAY_FINALIZE)] + GatewayUpgradeFinalization(commands::gateway_finalize_preparation::GatewayFinalizePreparationArgs), } pub async fn run(shell: &Shell, args: DevCommands) -> anyhow::Result<()> { @@ -72,6 +75,7 @@ pub async fn run(shell: &Shell, args: DevCommands) -> anyhow::Result<()> { DevCommands::GenerateGenesis => commands::genesis::run(shell).await?, #[cfg(feature = "gateway")] DevCommands::GatewayUpgradeCalldata(args) => commands::gateway::run(shell, args).await?, + DevCommands::GatewayUpgradeFinalization(args) => commands::gateway_finalize_preparation::run(shell, args).await? } Ok(()) } From 8b419ebd2bef8d9b1a5f8365ab8e10e2c0b262af Mon Sep 17 00:00:00 2001 From: Stanislav Breadless Date: Thu, 23 Jan 2025 13:03:21 +0100 Subject: [PATCH 09/17] fmt --- .../commands/gateway_finalize_preparation.rs | 124 +++++++++++------- .../zkstack/src/commands/dev/commands/mod.rs | 2 +- .../zkstack/src/commands/dev/messages.rs | 7 +- .../crates/zkstack/src/commands/dev/mod.rs | 12 +- 4 files changed, 87 insertions(+), 58 deletions(-) diff --git a/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway_finalize_preparation.rs b/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway_finalize_preparation.rs index 7e78986156fb..27af7fce5008 100644 --- a/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway_finalize_preparation.rs +++ b/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway_finalize_preparation.rs @@ -1,14 +1,25 @@ -use std::{num::NonZeroUsize, str::FromStr, sync::Arc, time::Duration}; +use std::{ + collections::HashSet, + fs::File, + io::{BufReader, BufWriter}, + num::NonZeroUsize, + path::Path, + str::FromStr, + sync::Arc, + time::Duration, +}; -use lazy_static::lazy_static; use anyhow::Context; use clap::{Parser, ValueEnum}; +// get_list_of_tokens.rs +use ethers::prelude::*; use ethers::{ abi::{encode, parse_abi, Token}, contract::{abigen, BaseContract}, providers::{Http, Middleware, Provider}, utils::hex, }; +use lazy_static::lazy_static; use serde::{Deserialize, Serialize}; use strum::EnumIter; use tokio::time::sleep; @@ -20,7 +31,11 @@ use zkstack_cli_config::{ }; use zksync_contracts::{chain_admin_contract, hyperchain_contract, DIAMOND_CUT}; use zksync_types::{ - ethabi, h256_to_address, h256_to_u256, u256_to_h256, url::SensitiveUrl, web3::{keccak256, Bytes}, Address, L1BatchNumber, L2BlockNumber, L2ChainId, ProtocolVersionId, H256, L2_NATIVE_TOKEN_VAULT_ADDRESS, SHARED_BRIDGE_ETHER_TOKEN_ADDRESS, U256 + ethabi, h256_to_address, h256_to_u256, u256_to_h256, + url::SensitiveUrl, + web3::{keccak256, Bytes}, + Address, L1BatchNumber, L2BlockNumber, L2ChainId, ProtocolVersionId, H256, + L2_NATIVE_TOKEN_VAULT_ADDRESS, SHARED_BRIDGE_ETHER_TOKEN_ADDRESS, U256, }; use zksync_web3_decl::{ client::{Client, DynClient, L2}, @@ -29,11 +44,6 @@ use zksync_web3_decl::{ use super::gateway::GatewayUpgradeInfo; -// get_list_of_tokens.rs - -use ethers::prelude::*; -use std::{collections::HashSet, fs::File, io::{BufReader, BufWriter}, path::Path}; - /// Structure that we expect to read from / write to the existing cache file #[derive(Debug, Serialize, Deserialize)] struct Cache { @@ -94,8 +104,8 @@ pub async fn get_list_of_tokens( // --------------------------------------------------------- // 2. Connect to a provider // --------------------------------------------------------- - let provider = Provider::::try_from(l1_rpc_url) - .expect("Could not instantiate HTTP Provider"); + let provider = + Provider::::try_from(l1_rpc_url).expect("Could not instantiate HTTP Provider"); // Get the latest block so we know how far we can go let latest_block = provider @@ -172,7 +182,9 @@ pub async fn get_list_of_tokens( let logs_legacy_1 = provider .get_logs(&filter_legacy_deposit_initiated_1) .await - .expect("Failed to fetch logs for DepositInitiated - (bytes32,address,address,address,uint256)"); + .expect( + "Failed to fetch logs for DepositInitiated - (bytes32,address,address,address,uint256)", + ); for log in logs_legacy_1 { // The event layout is: @@ -193,7 +205,7 @@ pub async fn get_list_of_tokens( } // l1Token is the first 32 bytes let l1_token_bytes = &raw_data[0..32]; - let l1_token_addr = Address::from_slice(&l1_token_bytes[12..32]); + let l1_token_addr = Address::from_slice(&l1_token_bytes[12..32]); discovered_tokens.insert(l1_token_addr); } @@ -210,7 +222,9 @@ pub async fn get_list_of_tokens( let logs_legacy_2 = provider .get_logs(&filter_legacy_deposit_initiated_2) .await - .expect("Failed to fetch logs for DepositInitiated - (address,address,address,uint256)"); + .expect( + "Failed to fetch logs for DepositInitiated - (address,address,address,uint256)", + ); for log in logs_legacy_2 { // The event layout is: @@ -238,8 +252,7 @@ pub async fn get_list_of_tokens( cache.last_seen_block = end_of_range; cache.added_tokens = discovered_tokens.iter().copied().collect(); - write_cache_to_file(&existing_cache_path, &cache) - .expect("Failed to write cache to file"); + write_cache_to_file(&existing_cache_path, &cache).expect("Failed to write cache to file"); println!("Processed and saved the range!"); @@ -263,14 +276,16 @@ fn read_cache_from_file>(path: P) -> Option { } /// Writes the updated cache to disk, overwriting the old file. -fn write_cache_to_file>(path: P, cache: &Cache) -> Result<(), Box> { +fn write_cache_to_file>( + path: P, + cache: &Cache, +) -> Result<(), Box> { let file = File::create(path)?; let writer = BufWriter::new(file); serde_json::to_writer_pretty(writer, &cache)?; Ok(()) } - abigen!( LegacyStateTransitionManagerAbi, r"[ @@ -287,31 +302,30 @@ abigen!( ]" ); -async fn ask_storage( - provider: Arc>, - address: Address, - key: H256 -) -> H256 { +async fn ask_storage(provider: Arc>, address: Address, key: H256) -> H256 { sleep(Duration::from_secs(1)).await; provider.get_storage_at(address, key, None).await.unwrap() } // The method has been deleted, so we'll have to replicate it in rust async fn get_all_hyperchains_ids(provider: Arc>, stm_address: Address) -> Vec { - let num_chains_key = u256_to_h256(U256::from(151)); - let number_of_chains = h256_to_u256(ask_storage(provider.clone(), stm_address, num_chains_key).await); - + let number_of_chains = + h256_to_u256(ask_storage(provider.clone(), stm_address, num_chains_key).await); + // keccak(151) - let initial_slot = h256_to_u256(H256::from_str("354a83ed9988f79f6038d4c7a7dadbad8af32f4ad6df893e0e5807a1b1944ff9").unwrap()); + let initial_slot = h256_to_u256( + H256::from_str("354a83ed9988f79f6038d4c7a7dadbad8af32f4ad6df893e0e5807a1b1944ff9").unwrap(), + ); let mut result = vec![]; for i in 0..number_of_chains.as_u32() { let current_key = initial_slot + U256::from(i); - let current_value = ask_storage(provider.clone(), stm_address, u256_to_h256(current_key)).await; + let current_value = + ask_storage(provider.clone(), stm_address, u256_to_h256(current_key)).await; result.push(h256_to_u256(current_value)); } @@ -319,18 +333,22 @@ async fn get_all_hyperchains_ids(provider: Arc>, stm_address: Add result } - /// Returns an array of chains' ids and base tokens async fn get_chains_info( l1_rpc_url: &str, bridgehub_addr: Address, - era_chain_id: u64 + era_chain_id: u64, ) -> (Vec, Vec
) { - let provider = Arc::new(Provider::::try_from(l1_rpc_url) - .expect("Could not instantiate HTTP Provider")); + let provider = Arc::new( + Provider::::try_from(l1_rpc_url).expect("Could not instantiate HTTP Provider"), + ); let bridgehub = LegacyBridgehubAbi::new(bridgehub_addr, provider.clone()); - let stm_address = bridgehub.chain_type_manager(U256::from(era_chain_id)).call().await.unwrap(); + let stm_address = bridgehub + .chain_type_manager(U256::from(era_chain_id)) + .call() + .await + .unwrap(); if stm_address == Address::zero() { panic!("Era has not STM!"); @@ -338,10 +356,7 @@ async fn get_chains_info( let stm = LegacyStateTransitionManagerAbi::new(stm_address, provider.clone()); - let chain_ids = get_all_hyperchains_ids( - provider.clone(), - stm_address - ).await; + let chain_ids = get_all_hyperchains_ids(provider.clone(), stm_address).await; let mut addresses = vec![]; for chain in chain_ids.iter() { @@ -378,8 +393,8 @@ abigen!( ); async fn get_legacy_bridge(bridge_addr: Address, l1_rpc_url: &str) -> Address { - let provider = Provider::::try_from(l1_rpc_url) - .expect("Could not instantiate HTTP Provider"); + let provider = + Provider::::try_from(l1_rpc_url).expect("Could not instantiate HTTP Provider"); let bridge = LegacySharedBridgeAbi::new(bridge_addr, Arc::new(provider)); @@ -399,28 +414,39 @@ pub(crate) async fn run(shell: &Shell, args: GatewayFinalizePreparationArgs) -> let upgrade_info = GatewayUpgradeInfo::read(shell, &args.upgrade_description_path)?; println!("Obtaining chain and base token info..."); - let (chain_ids, base_tokens) = get_chains_info(&args.l1_rpc_url, upgrade_info.bridgehub_addr, args.era_chain_id).await; + let (chain_ids, base_tokens) = get_chains_info( + &args.l1_rpc_url, + upgrade_info.bridgehub_addr, + args.era_chain_id, + ) + .await; println!("Obtaining bridged tokens info..."); let tokens = get_list_of_tokens( args.block_to_start_with, - CACHE_PATH, + CACHE_PATH, &args.l1_rpc_url, upgrade_info.l1_legacy_shared_bridge, get_legacy_bridge(upgrade_info.l1_legacy_shared_bridge, &args.l1_rpc_url).await, - base_tokens - ).await; + base_tokens, + ) + .await; // Now, since we have the list of tokens and chains, we need to register those. - let calldata = FINALIZE_UPGRADE.encode("finalizeInit", ( - args.multicall_with_gas_addr, - upgrade_info.bridgehub_addr, - upgrade_info.native_token_vault_addr, - tokens, - chain_ids - )).unwrap(); + let calldata = FINALIZE_UPGRADE + .encode( + "finalizeInit", + ( + args.multicall_with_gas_addr, + upgrade_info.bridgehub_addr, + upgrade_info.native_token_vault_addr, + tokens, + chain_ids, + ), + ) + .unwrap(); println!("data: {}", hex::encode(&calldata.0)); diff --git a/zkstack_cli/crates/zkstack/src/commands/dev/commands/mod.rs b/zkstack_cli/crates/zkstack/src/commands/dev/commands/mod.rs index c210f8cd90b2..45f6d894eefc 100644 --- a/zkstack_cli/crates/zkstack/src/commands/dev/commands/mod.rs +++ b/zkstack_cli/crates/zkstack/src/commands/dev/commands/mod.rs @@ -5,6 +5,7 @@ pub mod database; pub mod fmt; #[cfg(feature = "gateway")] pub mod gateway; +pub mod gateway_finalize_preparation; pub mod genesis; pub mod lint; pub(crate) mod lint_utils; @@ -14,4 +15,3 @@ pub mod snapshot; pub(crate) mod sql_fmt; pub mod status; pub mod test; -pub mod gateway_finalize_preparation; diff --git a/zkstack_cli/crates/zkstack/src/commands/dev/messages.rs b/zkstack_cli/crates/zkstack/src/commands/dev/messages.rs index 6f0bb06dbe36..5a953ab8e215 100644 --- a/zkstack_cli/crates/zkstack/src/commands/dev/messages.rs +++ b/zkstack_cli/crates/zkstack/src/commands/dev/messages.rs @@ -16,10 +16,9 @@ pub(super) const MSG_CONFIG_WRITER_ABOUT: &str = "Overwrite general config"; #[cfg(feature = "gateway")] pub(super) const MSG_GATEWAY_UPGRADE_CALLDATA: &str = "Gateway upgrade checker and calldata generator"; - #[cfg(feature = "gateway")] -pub(super) const MSG_GATEWAY_FINALIZE: &str = - "Gateway upgrade post-stage2 finalization"; - +#[cfg(feature = "gateway")] +pub(super) const MSG_GATEWAY_FINALIZE: &str = "Gateway upgrade post-stage2 finalization"; + pub(super) const MSG_SUBCOMMAND_FMT_ABOUT: &str = "Format code"; pub(super) const MSG_SUBCOMMAND_SNAPSHOTS_CREATOR_ABOUT: &str = "Snapshots creator"; diff --git a/zkstack_cli/crates/zkstack/src/commands/dev/mod.rs b/zkstack_cli/crates/zkstack/src/commands/dev/mod.rs index f29ab86c1675..6f262b742f59 100644 --- a/zkstack_cli/crates/zkstack/src/commands/dev/mod.rs +++ b/zkstack_cli/crates/zkstack/src/commands/dev/mod.rs @@ -1,8 +1,8 @@ use clap::Subcommand; use commands::status::args::StatusArgs; -#[cfg(feature = "gateway")] -use messages::{MSG_GATEWAY_UPGRADE_CALLDATA, MSG_GATEWAY_FINALIZE}; use messages::MSG_STATUS_ABOUT; +#[cfg(feature = "gateway")] +use messages::{MSG_GATEWAY_FINALIZE, MSG_GATEWAY_UPGRADE_CALLDATA}; use xshell::Shell; use self::commands::{ @@ -54,7 +54,9 @@ pub enum DevCommands { GatewayUpgradeCalldata(commands::gateway::GatewayUpgradeCalldataArgs), #[cfg(feature = "gateway")] #[command(about = MSG_GATEWAY_FINALIZE)] - GatewayUpgradeFinalization(commands::gateway_finalize_preparation::GatewayFinalizePreparationArgs), + GatewayUpgradeFinalization( + commands::gateway_finalize_preparation::GatewayFinalizePreparationArgs, + ), } pub async fn run(shell: &Shell, args: DevCommands) -> anyhow::Result<()> { @@ -75,7 +77,9 @@ pub async fn run(shell: &Shell, args: DevCommands) -> anyhow::Result<()> { DevCommands::GenerateGenesis => commands::genesis::run(shell).await?, #[cfg(feature = "gateway")] DevCommands::GatewayUpgradeCalldata(args) => commands::gateway::run(shell, args).await?, - DevCommands::GatewayUpgradeFinalization(args) => commands::gateway_finalize_preparation::run(shell, args).await? + DevCommands::GatewayUpgradeFinalization(args) => { + commands::gateway_finalize_preparation::run(shell, args).await? + } } Ok(()) } From a6390d8ab192e59fe6c74d809f837780eb2c4ae3 Mon Sep 17 00:00:00 2001 From: Dima Zhornyk <55756184+dimazhornyk@users.noreply.github.com> Date: Fri, 24 Jan 2025 11:56:44 +0100 Subject: [PATCH 10/17] chore: minor gateway upgrade tool improvements (#3516) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What ❔ ## Why ❔ ## Checklist - [ ] PR title corresponds to the body of PR (we generate changelog entries from PRs). - [ ] Tests for the changes have been added / updated. - [ ] Documentation comments have been added / updated. - [ ] Code has been formatted via `zkstack dev fmt` and `zkstack dev lint`. --- .../src/commands/dev/commands/gateway.rs | 21 ++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway.rs b/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway.rs index 0c83e57706a3..5678593fd6e6 100644 --- a/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway.rs +++ b/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway.rs @@ -434,13 +434,6 @@ impl GatewayUpgradeInfo { assign ); - assign_or_print!( - contracts_config - .ecosystem_contracts - .stm_deployment_tracker_proxy_addr, - Some(self.ctm_deployment_tracker_proxy_addr), - assign - ); assign_or_print!( contracts_config .ecosystem_contracts @@ -637,7 +630,7 @@ impl AdminCallBuilder { Token::Address(l2_da_validator), ]) .unwrap(); - let description = "Executing upgrade:".to_string(); + let description = "Setting DA validator pair".to_string(); let call = AdminCall { description, @@ -803,10 +796,14 @@ pub(crate) async fn run(shell: &Shell, args: GatewayUpgradeCalldataArgs) -> anyh args.server_upgrade_timestamp, ); - println!( - "Calldata to schedule upgrade: {}", - hex::encode(&schedule_calldata) - ); + let set_timestamp_call = AdminCall { + description: "Calldata to schedule upgrade".to_string(), + data: schedule_calldata, + target: chain_info.hyperchain_addr, + value: U256::zero(), + }; + println!("{}", serde_json::to_string_pretty(&set_timestamp_call)?); + println!("---------------------------"); if !args.force_display_finalization_params.unwrap_or_default() { let chain_readiness = check_chain_readiness( From 882d6720df1f6e0c46ba05f81733419dc83ef85f Mon Sep 17 00:00:00 2001 From: Stanislav Breadless Date: Fri, 24 Jan 2025 12:14:40 +0100 Subject: [PATCH 11/17] contracts --- contracts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts b/contracts index 0dcccc6089c1..186f3a1c19ff 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit 0dcccc6089c112d11519f4db310a13fd4ea1d084 +Subproject commit 186f3a1c19ff87c28db1aa5f565a9ec4f4327f2f From 6712b054ef46d07f6d20c89ff3eb709a369ef2d3 Mon Sep 17 00:00:00 2001 From: Stanislav Breadless Date: Fri, 24 Jan 2025 13:22:46 +0100 Subject: [PATCH 12/17] only gateway scoping --- zkstack_cli/crates/zkstack/src/commands/dev/commands/mod.rs | 1 + zkstack_cli/crates/zkstack/src/commands/dev/mod.rs | 1 + 2 files changed, 2 insertions(+) diff --git a/zkstack_cli/crates/zkstack/src/commands/dev/commands/mod.rs b/zkstack_cli/crates/zkstack/src/commands/dev/commands/mod.rs index 45f6d894eefc..3d557c0cff45 100644 --- a/zkstack_cli/crates/zkstack/src/commands/dev/commands/mod.rs +++ b/zkstack_cli/crates/zkstack/src/commands/dev/commands/mod.rs @@ -5,6 +5,7 @@ pub mod database; pub mod fmt; #[cfg(feature = "gateway")] pub mod gateway; +#[cfg(feature = "gateway")] pub mod gateway_finalize_preparation; pub mod genesis; pub mod lint; diff --git a/zkstack_cli/crates/zkstack/src/commands/dev/mod.rs b/zkstack_cli/crates/zkstack/src/commands/dev/mod.rs index 6f262b742f59..788fd1c8b987 100644 --- a/zkstack_cli/crates/zkstack/src/commands/dev/mod.rs +++ b/zkstack_cli/crates/zkstack/src/commands/dev/mod.rs @@ -77,6 +77,7 @@ pub async fn run(shell: &Shell, args: DevCommands) -> anyhow::Result<()> { DevCommands::GenerateGenesis => commands::genesis::run(shell).await?, #[cfg(feature = "gateway")] DevCommands::GatewayUpgradeCalldata(args) => commands::gateway::run(shell, args).await?, + #[cfg(feature = "gateway")] DevCommands::GatewayUpgradeFinalization(args) => { commands::gateway_finalize_preparation::run(shell, args).await? } From 83f6ee7f9cdfe04811c7f1de36c7242a4643366f Mon Sep 17 00:00:00 2001 From: dimazhornyk Date: Wed, 29 Jan 2025 18:59:23 +0100 Subject: [PATCH 13/17] fix invalid target address in schedule upgrade calldata --- .../crates/zkstack/src/commands/dev/commands/gateway.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway.rs b/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway.rs index e73078652fc0..3b8a7ddb38e1 100644 --- a/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway.rs +++ b/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway.rs @@ -79,6 +79,7 @@ pub struct FetchedChainInfo { l2_legacy_shared_bridge_addr: Address, hyperchain_addr: Address, base_token_addr: Address, + chain_admin_addr: Address, } // Bridgehub ABI @@ -111,6 +112,7 @@ abigen!( r"[ function getPubdataPricingMode()(uint256) function getBaseToken()(address) + function getAdmin()(address) function getTotalBatchesCommitted() external view returns (uint256) function getTotalBatchesVerified() external view returns (uint256) ]" @@ -266,6 +268,7 @@ pub async fn fetch_chain_info( let zkchain = ZKChainAbi::new(hyperchain_addr, client.clone()); + let chain_admin_addr = zkchain.get_admin().await?; let base_token_addr = zkchain.get_base_token().await?; if !args.dangerous_no_cross_check { @@ -319,6 +322,7 @@ pub async fn fetch_chain_info( l2_legacy_shared_bridge_addr, hyperchain_addr, base_token_addr, + chain_admin_addr, }) } @@ -799,7 +803,7 @@ pub(crate) async fn run(shell: &Shell, args: GatewayUpgradeCalldataArgs) -> anyh let set_timestamp_call = AdminCall { description: "Calldata to schedule upgrade".to_string(), data: schedule_calldata, - target: chain_info.hyperchain_addr, + target: chain_info.chain_admin_addr, value: U256::zero(), }; println!("{}", serde_json::to_string_pretty(&set_timestamp_call)?); From 306c02afc4852c1bd7b11b695a29b9e85b34f480 Mon Sep 17 00:00:00 2001 From: Stanislav Breadless Date: Wed, 29 Jan 2025 20:28:26 +0100 Subject: [PATCH 14/17] upd scripts --- contracts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts b/contracts index 186f3a1c19ff..d16682f9fb26 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit 186f3a1c19ff87c28db1aa5f565a9ec4f4327f2f +Subproject commit d16682f9fb2684f69828fa2f4d95d709b4c48524 From 3a31cb9630ca613105787c5ac62bd4dc52aaf6fc Mon Sep 17 00:00:00 2001 From: Stanislav Breadless Date: Mon, 3 Feb 2025 10:17:08 +0100 Subject: [PATCH 15/17] testnet upgrade info --- contracts | 2 +- .../gateway/testnet-upgrade-info.yaml | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 etc/upgrades/gateway/testnet-upgrade-info.yaml diff --git a/contracts b/contracts index d16682f9fb26..492fd23e3c66 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit d16682f9fb2684f69828fa2f4d95d709b4c48524 +Subproject commit 492fd23e3c66f66e276b6f7d3a674863edb186af diff --git a/etc/upgrades/gateway/testnet-upgrade-info.yaml b/etc/upgrades/gateway/testnet-upgrade-info.yaml new file mode 100644 index 000000000000..f65dc54d8858 --- /dev/null +++ b/etc/upgrades/gateway/testnet-upgrade-info.yaml @@ -0,0 +1,21 @@ +# Information about pre-upgrade contracts +l1_chain_id: 11155111 +bridgehub_addr: "0x35A54c8C757806eB6820629bc82d90E056394C92" +old_validator_timelock: "0xD3876643180A79d0A56d0900C060528395f34453" +l1_legacy_shared_bridge: "0x3E8b2fe58675126ed30d0d12dea2A9bda72D18Ae" + +# Information about the post-upgrade contracts +ctm_deployment_tracker_proxy_addr: "0xA3dC4031C774C1Ff661C0C65EB9AcE207E3141D6" +native_token_vault_addr: "0x746DBBa1edfBe1b547c87189eFE91B77d53d9E39" +l1_bytecodes_supplier_addr: "0x3ad11E8BAAa24708086EEdaEE28722B8c1489e3b" +rollup_l1_da_validator_addr: "0xB168490e38E5E7e1B8eB256a701Ee8314Cbf0E15" +no_da_validium_l1_validator_addr: "0xAcAf20636f1b57aa55f9cb1AC07d1FD9D8a84F00" +expected_rollup_l2_da_validator: "0xfa96A3Da88f201433911bEFf3Ecc434CB1222731" +expected_validium_l2_da_validator: "0xFa30EAe30351A83809657299F6Cad9557c232e8C" +new_validator_timelock: "0xfD4559b473fbcEABc0F68631646d6CEadF7B7040" + +l1_wrapped_base_token_store: "0x392Da465C3a10d1f950Fc2f5204c0f9359c75Cf0" +chain_upgrade_diamond_cut: "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006000000000000000000000000056bbe6057ee0fc340ae0b4958b84ddbb639f720d000000000000000000000000000000000000000000000000000000000000196000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000aa00000000000000000000000000000000000000000000000000000000000000c400000000000000000000000000000000000000000000000000000000000000f6000000000000000000000000000000000000000000000000000000000000015e000000000000000000000000000000000000000000000000000000000000017c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000d0e18b6810000000000000000000000000000000000000000000000000000000064bf8d6600000000000000000000000000000000000000000000000000000000a9f6d9410000000000000000000000000000000000000000000000000000000027ae4c16000000000000000000000000000000000000000000000000000000004dd18bf5000000000000000000000000000000000000000000000000000000001cc5d10300000000000000000000000000000000000000000000000000000000be6f11cf00000000000000000000000000000000000000000000000000000000e76db86500000000000000000000000000000000000000000000000000000000235d9eb50000000000000000000000000000000000000000000000000000000021f603d7000000000000000000000000000000000000000000000000000000004623c91d000000000000000000000000000000000000000000000000000000001733894500000000000000000000000000000000000000000000000000000000fc57565f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000291de72e3400000000000000000000000000000000000000000000000000000000ea6c029c00000000000000000000000000000000000000000000000000000000cdffacc60000000000000000000000000000000000000000000000000000000052ef6b2c00000000000000000000000000000000000000000000000000000000adfca15e000000000000000000000000000000000000000000000000000000007a0ed627000000000000000000000000000000000000000000000000000000006e9960c30000000000000000000000000000000000000000000000000000000098acd7a600000000000000000000000000000000000000000000000000000000086a56f8000000000000000000000000000000000000000000000000000000003591c1a00000000000000000000000000000000000000000000000000000000079823c9a00000000000000000000000000000000000000000000000000000000d86970d800000000000000000000000000000000000000000000000000000000fd791f3c00000000000000000000000000000000000000000000000000000000e5355c75000000000000000000000000000000000000000000000000000000009d1b5a81000000000000000000000000000000000000000000000000000000007b30c8da00000000000000000000000000000000000000000000000000000000d046815600000000000000000000000000000000000000000000000000000000631f4bac000000000000000000000000000000000000000000000000000000000ec6b0b70000000000000000000000000000000000000000000000000000000033ce93fe0000000000000000000000000000000000000000000000000000000006d49e5b00000000000000000000000000000000000000000000000000000000f5c1182c000000000000000000000000000000000000000000000000000000005518c73b00000000000000000000000000000000000000000000000000000000db1f0bf900000000000000000000000000000000000000000000000000000000b8c2f66f00000000000000000000000000000000000000000000000000000000ef3f0bae00000000000000000000000000000000000000000000000000000000fe26699e000000000000000000000000000000000000000000000000000000003960738200000000000000000000000000000000000000000000000000000000af6a2dcd00000000000000000000000000000000000000000000000000000000a1954fc50000000000000000000000000000000000000000000000000000000046657fe90000000000000000000000000000000000000000000000000000000018e3a9410000000000000000000000000000000000000000000000000000000029b98c6700000000000000000000000000000000000000000000000000000000bd7c541200000000000000000000000000000000000000000000000000000000c3bbd2d700000000000000000000000000000000000000000000000000000000e81e0ba100000000000000000000000000000000000000000000000000000000facd743b000000000000000000000000000000000000000000000000000000009cd939e40000000000000000000000000000000000000000000000000000000056142d7a00000000000000000000000000000000000000000000000000000000b22dd78e0000000000000000000000000000000000000000000000000000000074f4d30d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000812f43dab000000000000000000000000000000000000000000000000000000006c0960f900000000000000000000000000000000000000000000000000000000b473318e00000000000000000000000000000000000000000000000000000000042901c700000000000000000000000000000000000000000000000000000000263b7f8e00000000000000000000000000000000000000000000000000000000e4948f4300000000000000000000000000000000000000000000000000000000eb67241900000000000000000000000000000000000000000000000000000000c924de350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000008701f58c5000000000000000000000000000000000000000000000000000000006edd4f1200000000000000000000000000000000000000000000000000000000c3d93e7c000000000000000000000000000000000000000000000000000000006f497ac6000000000000000000000000000000000000000000000000000000007f61885c00000000000000000000000000000000000000000000000000000000c37533bb0000000000000000000000000000000000000000000000000000000097c09d34000000000000000000000000000000000000000000000000000000000f23da4300000000000000000000000000000000000000000000000000000000000000000000000000000000fcf34ad1d83f208b2cb732ffe54b7856f144827f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000140e18b681000000000000000000000000000000000000000000000000000000001733894500000000000000000000000000000000000000000000000000000000fc57565f000000000000000000000000000000000000000000000000000000001cc5d1030000000000000000000000000000000000000000000000000000000021f603d700000000000000000000000000000000000000000000000000000000235d9eb50000000000000000000000000000000000000000000000000000000027ae4c16000000000000000000000000000000000000000000000000000000002878fe74000000000000000000000000000000000000000000000000000000003f42d5dd0000000000000000000000000000000000000000000000000000000041cf49bb000000000000000000000000000000000000000000000000000000004623c91d000000000000000000000000000000000000000000000000000000004dd18bf5000000000000000000000000000000000000000000000000000000006223258e0000000000000000000000000000000000000000000000000000000064b554ad0000000000000000000000000000000000000000000000000000000064bf8d66000000000000000000000000000000000000000000000000000000006e762e9800000000000000000000000000000000000000000000000000000000a9f6d94100000000000000000000000000000000000000000000000000000000b784610700000000000000000000000000000000000000000000000000000000be6f11cf00000000000000000000000000000000000000000000000000000000e76db86500000000000000000000000000000000000000000000000000000000000000000000000000000000625d43f284e9250a0a136736aae4650439eb32d5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000002f06d49e5b000000000000000000000000000000000000000000000000000000000ec6b0b700000000000000000000000000000000000000000000000000000000fe26699e0000000000000000000000000000000000000000000000000000000018e3a941000000000000000000000000000000000000000000000000000000001de72e340000000000000000000000000000000000000000000000000000000022c5cf230000000000000000000000000000000000000000000000000000000029b98c670000000000000000000000000000000000000000000000000000000033ce93fe000000000000000000000000000000000000000000000000000000003408e470000000000000000000000000000000000000000000000000000000003591c1a000000000000000000000000000000000000000000000000000000000396073820000000000000000000000000000000000000000000000000000000039d7d4aa0000000000000000000000000000000000000000000000000000000046657fe90000000000000000000000000000000000000000000000000000000052ef6b2c000000000000000000000000000000000000000000000000000000005a59033500000000000000000000000000000000000000000000000000000000631f4bac000000000000000000000000000000000000000000000000000000006a27e8b5000000000000000000000000000000000000000000000000000000006e9960c30000000000000000000000000000000000000000000000000000000074f4d30d0000000000000000000000000000000000000000000000000000000079823c9a000000000000000000000000000000000000000000000000000000007a0ed627000000000000000000000000000000000000000000000000000000007b30c8da000000000000000000000000000000000000000000000000000000008708474e00000000000000000000000000000000000000000000000000000000946ebad100000000000000000000000000000000000000000000000000000000960dcf240000000000000000000000000000000000000000000000000000000098acd7a6000000000000000000000000000000000000000000000000000000009cd939e4000000000000000000000000000000000000000000000000000000009d1b5a8100000000000000000000000000000000000000000000000000000000a1954fc500000000000000000000000000000000000000000000000000000000adfca15e00000000000000000000000000000000000000000000000000000000af6a2dcd00000000000000000000000000000000000000000000000000000000b22dd78e00000000000000000000000000000000000000000000000000000000b8c2f66f00000000000000000000000000000000000000000000000000000000bd7c541200000000000000000000000000000000000000000000000000000000c3bbd2d700000000000000000000000000000000000000000000000000000000cdffacc600000000000000000000000000000000000000000000000000000000d046815600000000000000000000000000000000000000000000000000000000d86970d800000000000000000000000000000000000000000000000000000000db1f0bf900000000000000000000000000000000000000000000000000000000e5355c7500000000000000000000000000000000000000000000000000000000e81e0ba100000000000000000000000000000000000000000000000000000000ea6c029c00000000000000000000000000000000000000000000000000000000ef3f0bae00000000000000000000000000000000000000000000000000000000f4ff5e2e00000000000000000000000000000000000000000000000000000000f5c1182c00000000000000000000000000000000000000000000000000000000facd743b00000000000000000000000000000000000000000000000000000000fd791f3c00000000000000000000000000000000000000000000000000000000000000000000000000000000873b2a78208a7e9bad0ffae45fe1fa555efc24a6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a042901c70000000000000000000000000000000000000000000000000000000012f43dab00000000000000000000000000000000000000000000000000000000eb67241900000000000000000000000000000000000000000000000000000000263b7f8e000000000000000000000000000000000000000000000000000000006c0960f9000000000000000000000000000000000000000000000000000000007efda2ae00000000000000000000000000000000000000000000000000000000b473318e00000000000000000000000000000000000000000000000000000000d077255100000000000000000000000000000000000000000000000000000000ddcc9eec00000000000000000000000000000000000000000000000000000000e4948f4300000000000000000000000000000000000000000000000000000000000000000000000000000000b6f93dc1f5a5bd360db3400af4641dfb946f2a1100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000040f23da4300000000000000000000000000000000000000000000000000000000e12a61370000000000000000000000000000000000000000000000000000000098f8196200000000000000000000000000000000000000000000000000000000cf02827d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e0415a114f5000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001600100088580465d88420e6369230ee94a32ff356dbcdd407a4be49fc8009b2a81010004dbf8be36c421254d005352f8245146906919be0099e8a50d0e78df85e0000000000000000000000000c7bf52ba7062b91e657c3b76664d036c221d3718000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098000000000000000000000000000000000000000000000000000000000000009a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000000000000fe0000000000000000000000000000000000000000000000000000000000008007000000000000000000000000000000000000000000000000000000000000800600000000000000000000000000000000000000000000000000000000044aa2000000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000290100088580465d88420e6369230ee94a32ff356dbcdd407a4be49fc8009b2a81010004dbf8be36c421254d005352f8245146906919be0099e8a50d0e78df85e00100000782c9843c8cd05f37c93332f62f76b15311edfc8c6ef6f276283d847801000013409fe778437b58e5819ee48a658fb09b86bb7badf93cb334c16cc632010000176a7caf23abe1829a27684e6172e72e3b8a1d201364c5bbe53615202b01000085bf765ff04ad45979da71816fba3bdee901366c5cce73c94f3ee37bb9010000bbb84f463e70d100c271744ab9827d4c9b66ee4356a0c697dcb54e3b8701000ef37666c6447ad953d8be7ca75d4a0de3d5fd57a3966906d2c5577111ab0100005949c21cebae3d1bbe3503bdd35cceb135450e03c75ed9d13d38b777dd010000d1b8d2eea3e226ce082ca4d1358a62046be50b2f728a4cc5c59fefe4d301000069e4d584a302aac6094775b8a93c4c02688f8d9157edb11770607d36ec01000035ae7c6f5e10b1bc5249632adfb85efc29cbc4f655570ee52f3e8a608d0100042ddaf17f234d9fb24c16807157a1567af1d2528cf9f79e4f39691f80d0010001d34f312ce1bfb0e23938b74f57c7a25db89d8b87357acc390196fef2de01000059fe3f4d6c9e007d7ef8bb2e9493b7f7d30397b4727a7a864c04571c30010000f3fddaf45e9757c9e81db3218e29d4ef2ffdb356795cd32dfd8dc25ce40100017b380400ad17da6f3b90aac6abab01af7e7eaa940d1f28c7b342b752fb010006df5fd8dbfe05a0ae3d8011f0349834d52141827e7751fe03042af7945a01000017575446d56eb4e640189c5e356449975b957ae5262924567f4f664d750100013b63d851496b3478b567f878f5ee616d6e2a9373cabf4b78c1409d1992010000b1d1a4f023742903d8750514351bebe5de2449b2fdc5b8dc095725ef6c0100000fb95dd6f46682ea2f0b187124613531b459091a6c38dc9d0260e5fff1010000213ed880e87b5121c3d96a0cf6787ca83dda10080a1d7cce7ad72bf6a60100000f72c45ba0985fe38394a29445cb337c127afb0da5e94211d518a00949010000436558414c5103b0668b90a9445f7713a999bf0c9a73c6b4ba2f3af2280100003fc1eab315ab932938987aedb4659001141fc976c6a92b1d94bad196dd01000189d9cbcdc1c3fa91a929f14747f578f7f6003f7f36616636569ef5d7fd0100000fbb7f36971f5a64dc6d03ddf6f6f2a4122dc01b835874922f207bd9b5010009a9832bdb0727b3ba54a13b2892f3c916e0aff063c1e5aae093cdb0d73e010004cf5162b05c197a1b458009d81d6cab1a7caaf49d33ca04a04310365939010007e7ced2a9266888fe0d939315421da2089501dbbdcbf9200cf5996feeb701000323dc4c80a4b445dae377d9eae6098666031c62ebb7e336ec7ca6a1e60a01000331ab9faa2a62e4c1c73aca0d0407cab5e1ec59f71eff3b03ffeee6de57010002b3a2c2897da45534dfea6917ab3256e896f14a9b86edd0fbd99ec03ff2010001916b35d863cd9bda8fa51fd609afed513ab76c426460b28297c84d7838010004b1492831925bd58dd9143179471e90b5f644a77349332f026c4c0b092f01000067c42a9f91dc32ed0de23a6587d9298d7142bd018d0f3bf8a63bc8b3fb010000fbc1ab940b7855fb56b42a56b3f5224a26a9b569cccec2ff9fa583f52a01000151dd2e087f901ad9eab5208af694db0d600e0395099bce02c04b5f04e701000015b8c02ac1b399c59da4ebbee0bd3febd41307473ba0885ebc93c356cf010001432488e16fe474f9eda02a0085b59fcd4f6572abcc53aa891e680c3d4c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000002240000000000000000000000000a3dc4031c774c1ff661c0c65eb9ace207e3141d6000000000000000000000000d3876643180a79d0a56d0900c060528395f34453000000000000000000000000fd4559b473fbceabc0f68631646d6ceadf7b7040000000000000000000000000392da465c3a10d1f950fc2f5204c0f9359c75cf0000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000005800000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000007c0000000000000000000000000000000000000000000000000000000000000088000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000ac00000000000000000000000000000000000000000000000000000000000000b800000000000000000000000000000000000000000000000000000000000000c400000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000dc00000000000000000000000000000000000000000000000000000000000000e800000000000000000000000000000000000000000000000000000000000000f40000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010c000000000000000000000000000000000000000000000000000000000000011800000000000000000000000000000000000000000000000000000000000001240000000000000000000000000000000000000000000000000000000000000130000000000000000000000000000000000000000000000000000000000000013c000000000000000000000000000000000000000000000000000000000000014800000000000000000000000000000000000000000000000000000000000001540000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000016c000000000000000000000000000000000000000000000000000000000000017800000000000000000000000000000000000000000000000000000000000001840000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000019c00000000000000000000000000000000000000000000000000000000000001a800000000000000000000000000000000000000000000000000000000000001b400000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001cc00000000000000000000000000000000000000000000000000000000000001d800000000000000000000000000000000000000000000000000000000000001e400000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000001fc000000000000000000000000000000000000000000000000000000000000020800100000782c9843c8cd05f37c93332f62f76b15311edfc8c6ef6f276283d847800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000013409fe778437b58e5819ee48a658fb09b86bb7badf93cb334c16cc63200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000176a7caf23abe1829a27684e6172e72e3b8a1d201364c5bbe53615202b00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000085bf765ff04ad45979da71816fba3bdee901366c5cce73c94f3ee37bb900000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000bbb84f463e70d100c271744ab9827d4c9b66ee4356a0c697dcb54e3b8700000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000ef37666c6447ad953d8be7ca75d4a0de3d5fd57a3966906d2c5577111ab00000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100000782c9843c8cd05f37c93332f62f76b15311edfc8c6ef6f276283d847800000000000000000000000000000000000000000000000000000000000080010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100005949c21cebae3d1bbe3503bdd35cceb135450e03c75ed9d13d38b777dd00000000000000000000000000000000000000000000000000000000000080020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000d1b8d2eea3e226ce082ca4d1358a62046be50b2f728a4cc5c59fefe4d300000000000000000000000000000000000000000000000000000000000080030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000069e4d584a302aac6094775b8a93c4c02688f8d9157edb11770607d36ec00000000000000000000000000000000000000000000000000000000000080040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000035ae7c6f5e10b1bc5249632adfb85efc29cbc4f655570ee52f3e8a608d00000000000000000000000000000000000000000000000000000000000080050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100042ddaf17f234d9fb24c16807157a1567af1d2528cf9f79e4f39691f80d000000000000000000000000000000000000000000000000000000000000080060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010001d34f312ce1bfb0e23938b74f57c7a25db89d8b87357acc390196fef2de00000000000000000000000000000000000000000000000000000000000080080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000059fe3f4d6c9e007d7ef8bb2e9493b7f7d30397b4727a7a864c04571c3000000000000000000000000000000000000000000000000000000000000080090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000f3fddaf45e9757c9e81db3218e29d4ef2ffdb356795cd32dfd8dc25ce4000000000000000000000000000000000000000000000000000000000000800a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100017b380400ad17da6f3b90aac6abab01af7e7eaa940d1f28c7b342b752fb000000000000000000000000000000000000000000000000000000000000800b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010006df5fd8dbfe05a0ae3d8011f0349834d52141827e7751fe03042af7945a000000000000000000000000000000000000000000000000000000000000800c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000017575446d56eb4e640189c5e356449975b957ae5262924567f4f664d75000000000000000000000000000000000000000000000000000000000000800d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100013b63d851496b3478b567f878f5ee616d6e2a9373cabf4b78c1409d1992000000000000000000000000000000000000000000000000000000000000800e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000b1d1a4f023742903d8750514351bebe5de2449b2fdc5b8dc095725ef6c000000000000000000000000000000000000000000000000000000000000800f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100000fb95dd6f46682ea2f0b187124613531b459091a6c38dc9d0260e5fff100000000000000000000000000000000000000000000000000000000000080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000213ed880e87b5121c3d96a0cf6787ca83dda10080a1d7cce7ad72bf6a600000000000000000000000000000000000000000000000000000000000080120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100000f72c45ba0985fe38394a29445cb337c127afb0da5e94211d518a0094900000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000436558414c5103b0668b90a9445f7713a999bf0c9a73c6b4ba2f3af22800000000000000000000000000000000000000000000000000000000000080110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100003fc1eab315ab932938987aedb4659001141fc976c6a92b1d94bad196dd00000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000189d9cbcdc1c3fa91a929f14747f578f7f6003f7f36616636569ef5d7fd00000000000000000000000000000000000000000000000000000000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000100000fbb7f36971f5a64dc6d03ddf6f6f2a4122dc01b835874922f207bd9b500000000000000000000000000000000000000000000000000000000000100060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010009a9832bdb0727b3ba54a13b2892f3c916e0aff063c1e5aae093cdb0d73e00000000000000000000000000000000000000000000000000000000000100020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010004cf5162b05c197a1b458009d81d6cab1a7caaf49d33ca04a0431036593900000000000000000000000000000000000000000000000000000000000100030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010007e7ced2a9266888fe0d939315421da2089501dbbdcbf9200cf5996feeb700000000000000000000000000000000000000000000000000000000000100040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000323dc4c80a4b445dae377d9eae6098666031c62ebb7e336ec7ca6a1e60a00000000000000000000000000000000000000000000000000000000000100050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000331ab9faa2a62e4c1c73aca0d0407cab5e1ec59f71eff3b03ffeee6de5700000000000000000000000000000000000000000000000000000000000100070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010001916b35d863cd9bda8fa51fd609afed513ab76c426460b28297c84d7838000000000000000000000000cc87d9e8525bc40afc11e79f637e1570d7e5ba460000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010004b1492831925bd58dd9143179471e90b5f644a77349332f026c4c0b092f00000000000000000000000005b00ef3489e21e57b3e93a72bc9f59c57bb199b0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000151dd2e087f901ad9eab5208af694db0d600e0395099bce02c04b5f04e7000000000000000000000000fa96a3da88f201433911beff3ecc434cb12227310000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000001000015b8c02ac1b399c59da4ebbee0bd3febd41307473ba0885ebc93c356cf000000000000000000000000fa30eae30351a83809657299f6cad9557c232e8c0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010002b3a2c2897da45534dfea6917ab3256e896f14a9b86edd0fbd99ec03ff2000000000000000000000000000000000000000000000000000000000000800f0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000010000b1d1a4f023742903d8750514351bebe5de2449b2fdc5b8dc095725ef6c000000000000000000000000000000000000000000000000000000000000800f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000aa36a7000000000000000000000000000000000000000000000000000000000000012c000000000000000000000000f2a49545c5b1a85d2fb018cc39103661639a9b06010000fbc1ab940b7855fb56b42a56b3f5224a26a9b569cccec2ff9fa583f52a000000000000000000000000f4b715778aeec76df1b368948a1d1614497dc9690000000000000000000000000000000000000000000000000000000000000064010009a9832bdb0727b3ba54a13b2892f3c916e0aff063c1e5aae093cdb0d73e010004cf5162b05c197a1b458009d81d6cab1a7caaf49d33ca04a04310365939010007e7ced2a9266888fe0d939315421da2089501dbbdcbf9200cf5996feeb701000323dc4c80a4b445dae377d9eae6098666031c62ebb7e336ec7ca6a1e60a000000000000000000000000cc87d9e8525bc40afc11e79f637e1570d7e5ba4600000000000000000000000005b00ef3489e21e57b3e93a72bc9f59c57bb199b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + +new_protocol_version: 111669149696 +old_protocol_version: 107374182400 From 18935a4d3bb482a330fc229acf1d66345bc409a0 Mon Sep 17 00:00:00 2001 From: Stanislav Breadless Date: Mon, 3 Feb 2025 10:25:27 +0100 Subject: [PATCH 16/17] latest contracts --- contracts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts b/contracts index 492fd23e3c66..decf61c55c24 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit 492fd23e3c66f66e276b6f7d3a674863edb186af +Subproject commit decf61c55c24f953e6050150cc5378ea39c3bb9d From 595c84619cec62927b75e080074c140b81ad1eda Mon Sep 17 00:00:00 2001 From: Stanislav Breadless Date: Mon, 3 Feb 2025 10:35:15 +0100 Subject: [PATCH 17/17] upd openssl --- core/Cargo.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/Cargo.lock b/core/Cargo.lock index e8943b2a369a..1983a856f713 100644 --- a/core/Cargo.lock +++ b/core/Cargo.lock @@ -5889,9 +5889,9 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openssl" -version = "0.10.68" +version = "0.10.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" +checksum = "61cfb4e166a8bb8c9b55c500bc2308550148ece889be90f609377e58140f42c6" dependencies = [ "bitflags 2.6.0", "cfg-if", @@ -5921,9 +5921,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.104" +version = "0.9.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" +checksum = "8b22d5b84be05a8d6947c7cb71f7c849aa0f112acd4bf51c2a7c1c988ac0a9dc" dependencies = [ "cc", "libc",