From d0650c38d1b9e06a097b19a22e2dbd579a5a93e4 Mon Sep 17 00:00:00 2001 From: Terry <644052732@qq.com> Date: Wed, 12 Jun 2024 00:13:20 +0800 Subject: [PATCH] feat: impl sequence batches --- Cargo.lock | 401 +++++++++--------- Cargo.toml | 3 + configs/database.toml | 4 +- configs/settlement.toml | 18 +- contracts/EigenZkVM.json | 1 + contracts/EigenZkvm.json | 1 - src/batch_proposer/mod.rs | 2 +- src/commands/run.rs | 2 +- src/db/mod.rs | 1 + src/operator.rs | 21 +- src/settlement/ethereum/interfaces/mod.rs | 1 + .../interfaces/zeth_global_exit_root.rs | 31 ++ src/settlement/ethereum/interfaces/zkvm.rs | 10 +- src/settlement/ethereum/mod.rs | 95 ++++- src/settlement/mod.rs | 6 +- src/settlement/worker.rs | 197 ++++++++- 16 files changed, 545 insertions(+), 249 deletions(-) create mode 100644 contracts/EigenZkVM.json delete mode 100644 contracts/EigenZkvm.json create mode 100644 src/settlement/ethereum/interfaces/zeth_global_exit_root.rs diff --git a/Cargo.lock b/Cargo.lock index d1a9427..99cebdb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -128,9 +128,9 @@ checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" [[package]] name = "alloy-chains" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe6c2674230e94ea98767550b02853bf7024b46f784827be95acfc5f5f1a445f" +checksum = "03fd095a9d70f4b1c5c102c84a4c782867a5c6416dbf6dcd42a63e7c7a89d3c8" dependencies = [ "alloy-rlp", "arbitrary", @@ -155,7 +155,7 @@ dependencies = [ "itoa", "serde", "serde_json", - "winnow 0.6.8", + "winnow 0.6.13", ] [[package]] @@ -219,9 +219,9 @@ dependencies = [ [[package]] name = "alloy-rlp" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d58d9f5da7b40e9bfff0b7e7816700be4019db97d4b6359fe7f94a9e22e42ac" +checksum = "b155716bab55763c95ba212806cf43d05bcc70e5f35b02bad20cf5ec7fe11fed" dependencies = [ "alloy-rlp-derive", "arrayvec", @@ -230,13 +230,13 @@ dependencies = [ [[package]] name = "alloy-rlp-derive" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a047897373be4bbb0224c1afdabca92648dc57a9c9ef6e7b0be3aff7a859c83" +checksum = "8037e03c7f462a063f28daec9fda285a9a89da003c552f8637a80b9c8fd96241" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -293,7 +293,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", "syn-solidity", "tiny-keccak", ] @@ -304,7 +304,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0045cc89524e1451ccf33e8581355b6027ac7c6e494bb02959d4213ad0d8e91d" dependencies = [ - "winnow 0.6.8", + "winnow 0.6.13", ] [[package]] @@ -385,9 +385,9 @@ dependencies = [ [[package]] name = "anstyle-query" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5" +checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" dependencies = [ "windows-sys 0.52.0", ] @@ -404,9 +404,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.83" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25bdb32cbbdce2b519a9cd7df3a678443100e265d5e25ca763b7572a5104f5f3" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" [[package]] name = "aquamarine" @@ -419,7 +419,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -572,9 +572,9 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c90a406b4495d129f00461241616194cb8a032c8d1c53c657f0961d5f8e0498" +checksum = "cd066d0b4ef8ecb03a55319dc13aa6910616d0f44008a045bb1835af830abff5" dependencies = [ "brotli", "flate2", @@ -614,7 +614,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -625,7 +625,7 @@ checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -668,7 +668,7 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -808,7 +808,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -899,9 +899,9 @@ dependencies = [ [[package]] name = "blst" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c94087b935a822949d3291a9989ad2b2051ea141eda0fd4e478a75f6aa3e604b" +checksum = "62dc83a094a71d43eeadd254b1ec2d24cb6a0bb6cadce00df51f0db594711a32" dependencies = [ "cc", "glob", @@ -1012,7 +1012,7 @@ checksum = "005fa0c5bd20805466dda55eb34cd709bb31a2592bb26927b47714eeed6914d8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", "synstructure", ] @@ -1060,9 +1060,9 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "4.0.0" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6221fe77a248b9117d431ad93761222e1cf8ff282d9d1d5d9f53d6299a1cf76" +checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -1092,9 +1092,9 @@ checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" [[package]] name = "bytemuck" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6d68c57235a3a081186990eca2867354726650f42f7516ca50c28d6281fd15" +checksum = "78834c15cb5d5efe3452d58b1e8ba890dd62d21907f867f383358198e56ebca5" [[package]] name = "byteorder" @@ -1148,9 +1148,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.6" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" +checksum = "e0ec6b951b160caa93cc0c7b209e5a3bff7aae9062213451ac99493cd844c239" dependencies = [ "serde", ] @@ -1239,9 +1239,9 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67523a3b4be3ce1989d607a828d036249522dd9c1c8de7f4dd2dae43a37369d1" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" dependencies = [ "glob", "libc", @@ -1250,9 +1250,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.4" +version = "4.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" +checksum = "5db83dced34638ad474f39f250d7fea9598bdd239eaced1bdf45d597da0f433f" dependencies = [ "clap_builder", "clap_derive", @@ -1260,9 +1260,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.2" +version = "4.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +checksum = "f7e204572485eb3fbf28f871612191521df159bc3e15a9f5064c66dba3a8c05f" dependencies = [ "anstream", "anstyle", @@ -1272,21 +1272,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.4" +version = "4.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" +checksum = "c780290ccf4fb26629baa7a1081e68ced113f1d3ec302fa5948f1c381ebf06c6" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] name = "clap_lex" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" +checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70" [[package]] name = "cobs" @@ -1386,9 +1386,9 @@ dependencies = [ [[package]] name = "const-hex" -version = "1.11.3" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ba00838774b4ab0233e355d26710fbfc8327a05c017f6dc4873f876d1f79f78" +checksum = "94fb8a24a26d37e1ffd45343323dc9fe6654ceea44c12f2fcb3d7ac29e610bc6" dependencies = [ "cfg-if", "cpufeatures", @@ -1492,9 +1492,9 @@ checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" [[package]] name = "crc32fast" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", ] @@ -1507,9 +1507,9 @@ checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216" [[package]] name = "crossbeam-channel" -version = "0.5.12" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab3db02a9c5b5121e1e42fbdb1aeb65f5e02624cc58c43f2884c6ccac0b82f95" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" dependencies = [ "crossbeam-utils", ] @@ -1535,9 +1535,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "crunchy" @@ -1633,7 +1633,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -1648,12 +1648,12 @@ dependencies = [ [[package]] name = "darling" -version = "0.20.8" +version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1" dependencies = [ - "darling_core 0.20.8", - "darling_macro 0.20.8", + "darling_core 0.20.9", + "darling_macro 0.20.9", ] [[package]] @@ -1672,16 +1672,16 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.8" +version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", - "strsim 0.10.0", - "syn 2.0.63", + "strsim 0.11.1", + "syn 2.0.66", ] [[package]] @@ -1697,13 +1697,13 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.20.8" +version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178" dependencies = [ - "darling_core 0.20.8", + "darling_core 0.20.9", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -1774,7 +1774,7 @@ checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -1931,7 +1931,7 @@ checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -2029,6 +2029,7 @@ name = "eigen-zeth" version = "0.1.0" dependencies = [ "alloy-chains", + "alloy-rlp", "anyhow", "async-trait", "c-kzg", @@ -2081,9 +2082,9 @@ dependencies = [ [[package]] name = "either" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" [[package]] name = "elliptic-curve" @@ -2175,7 +2176,7 @@ dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -2188,7 +2189,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -2199,7 +2200,7 @@ checksum = "6fd000fd6988e73bbe993ea3db9b1aa64906ab88766d654973924340c8cddb42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -2303,9 +2304,9 @@ dependencies = [ [[package]] name = "ethereum_ssz" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e61ffea29f26e8249d35128a82ec8d3bd4fbc80179ea5f5e5e3daafef6a80fcb" +checksum = "7d3627f83d8b87b432a5fad9934b4565260722a141a2c40f371f8080adec9425" dependencies = [ "ethereum-types", "itertools 0.10.5", @@ -2378,7 +2379,7 @@ dependencies = [ "reqwest", "serde", "serde_json", - "syn 2.0.63", + "syn 2.0.66", "toml", "walkdir", ] @@ -2396,7 +2397,7 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -2422,7 +2423,7 @@ dependencies = [ "serde", "serde_json", "strum", - "syn 2.0.63", + "syn 2.0.66", "tempfile", "thiserror", "tiny-keccak", @@ -2752,7 +2753,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -3107,9 +3108,9 @@ checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" [[package]] name = "httparse" -version = "1.8.0" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "9f3935c160d00ac752e09787e6e6bfc26494c2183cc922f1bc678a60d4733bc2" [[package]] name = "httpdate" @@ -3135,9 +3136,9 @@ dependencies = [ [[package]] name = "hyper" -version = "0.14.28" +version = "0.14.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +checksum = "f361cde2f109281a220d4307746cdfd5ee3f410da58a70377762396775634b33" dependencies = [ "bytes", "futures-channel", @@ -3491,9 +3492,9 @@ dependencies = [ [[package]] name = "instant" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if", ] @@ -3660,7 +3661,7 @@ dependencies = [ "futures-util", "hyper", "jsonrpsee-types", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "rand 0.8.5", "rustc-hash", "serde", @@ -3826,7 +3827,7 @@ dependencies = [ "lalrpop-util", "petgraph", "regex", - "regex-syntax 0.8.3", + "regex-syntax 0.8.4", "string_cache", "term", "tiny-keccak", @@ -3840,7 +3841,7 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553" dependencies = [ - "regex-automata 0.4.6", + "regex-automata 0.4.7", ] [[package]] @@ -3860,9 +3861,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.154" +version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "libffi" @@ -3937,15 +3938,15 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "litemap" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d642685b028806386b2b6e75685faadd3eb65a85fff7df711ce18446a422da" +checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" [[package]] name = "lock_api" @@ -4085,7 +4086,7 @@ checksum = "38b4faf00617defe497754acde3024865bc143d44a86799b24e191ecff91354f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -4146,9 +4147,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" dependencies = [ "adler", ] @@ -4350,7 +4351,7 @@ dependencies = [ "proc-macro-crate 1.3.1", "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -4362,7 +4363,7 @@ dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -4539,9 +4540,9 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e4af0ca4f6caed20e900d564c242b8e5d4903fdacf31d3daf527b66fe6f42fb" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core 0.9.10", @@ -4671,7 +4672,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -4748,7 +4749,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -4786,7 +4787,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -4903,7 +4904,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" dependencies = [ "proc-macro2", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -4965,9 +4966,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.82" +version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" +checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" dependencies = [ "unicode-ident", ] @@ -5012,7 +5013,7 @@ dependencies = [ "rand 0.8.5", "rand_chacha 0.3.1", "rand_xorshift", - "regex-syntax 0.8.3", + "regex-syntax 0.8.4", "rusty-fork", "tempfile", "unarray", @@ -5291,14 +5292,14 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.4" +version = "1.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" dependencies = [ "aho-corasick 1.1.3", "memchr", - "regex-automata 0.4.6", - "regex-syntax 0.8.3", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", ] [[package]] @@ -5312,13 +5313,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" dependencies = [ "aho-corasick 1.1.3", "memchr", - "regex-syntax 0.8.3", + "regex-syntax 0.8.4", ] [[package]] @@ -5329,9 +5330,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" [[package]] name = "regress" @@ -5484,7 +5485,7 @@ dependencies = [ "linked_hash_set", "lru", "metrics", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "reth-db", "reth-interfaces", "reth-metrics", @@ -5514,7 +5515,7 @@ dependencies = [ "convert_case 0.6.0", "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -5581,7 +5582,7 @@ dependencies = [ "discv5", "enr", "generic-array", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "reth-net-common", "reth-net-nat", "reth-primitives", @@ -5603,7 +5604,7 @@ dependencies = [ "data-encoding", "enr", "linked_hash_set", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "reth-net-common", "reth-primitives", "schnellru", @@ -5790,7 +5791,7 @@ dependencies = [ "indexmap 2.2.6", "libc", "libffi", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "reth-mdbx-sys", "thiserror", "tracing", @@ -5827,7 +5828,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -5871,7 +5872,7 @@ dependencies = [ "itertools 0.12.1", "linked_hash_set", "metrics", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "pin-project", "rand 0.8.5", "reth-discv4", @@ -6151,7 +6152,7 @@ dependencies = [ "dashmap", "itertools 0.12.1", "metrics", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "pin-project", "rayon", "reth-codecs", @@ -6450,7 +6451,7 @@ dependencies = [ "futures-util", "itertools 0.12.1", "metrics", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "paste", "rand 0.8.5", "reth-eth-wire", @@ -6650,9 +6651,9 @@ dependencies = [ [[package]] name = "roaring" -version = "0.10.4" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b26f4c25a604fcb3a1bcd96dd6ba37c93840de95de8198d94c0d571a74a804d1" +checksum = "7699249cc2c7d71939f30868f47e9d7add0bdc030d90ee10bfd16887ff8bb1c8" dependencies = [ "bytemuck", "byteorder", @@ -6687,9 +6688,9 @@ checksum = "afab94fb28594581f62d981211a9a4d53cc8130bbcbbb89a0440d9b8e81a7746" [[package]] name = "ruint" -version = "1.12.1" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f308135fef9fc398342da5472ce7c484529df23743fb7c734e0f3d472971e62" +checksum = "2c3cc4c2511671f327125da14133d0c5c5d137f006a1017a16f557bc85b16286" dependencies = [ "alloy-rlp", "arbitrary", @@ -6712,9 +6713,9 @@ dependencies = [ [[package]] name = "ruint-macro" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f86854cf50259291520509879a5c294c3c9a4c334e9ff65071c51e42ef1e2343" +checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" [[package]] name = "rust-ini" @@ -6820,9 +6821,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "092474d1a01ea8278f69e6a358998405fae5b8b963ddaeb2b0b04a128bf1dfb0" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" [[package]] name = "rusty-fork" @@ -6901,9 +6902,9 @@ dependencies = [ [[package]] name = "schnellru" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b0cf7da6fc4477944d5529807234f66802fcb618fc62b9c05bedca7f9be6c43" +checksum = "c9a8ef13a93c54d20580de1e5c413e624e53121d42fc7e2c11d10ef7f8b02367" dependencies = [ "ahash", "cfg-if", @@ -7054,9 +7055,9 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.201" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "780f1cebed1629e4753a1a38a3c72d30b97ec044f0aef68cb26650a3c5cf363c" +checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" dependencies = [ "serde_derive", ] @@ -7072,13 +7073,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.201" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e405930b9796f1c00bee880d03fc7e0bb4b9a11afc776885ffe84320da2865" +checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -7095,9 +7096,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.5" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" +checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" dependencies = [ "serde", ] @@ -7138,10 +7139,10 @@ version = "3.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "65569b702f41443e8bc8bbb1c5779bd0450bbe723b56198980e80ec45780bce2" dependencies = [ - "darling 0.20.8", + "darling 0.20.9", "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -7154,7 +7155,7 @@ dependencies = [ "futures", "lazy_static", "log", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "serial_test_derive", ] @@ -7166,7 +7167,7 @@ checksum = "91d129178576168c589c9ec973feedf7d3126c01ac2bf08795109aa35b69fb8f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -7414,7 +7415,7 @@ checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" dependencies = [ "new_debug_unreachable", "once_cell", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "phf_shared 0.10.0", "precomputed-hash", ] @@ -7425,12 +7426,6 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - [[package]] name = "strsim" version = "0.11.1" @@ -7448,15 +7443,15 @@ dependencies = [ [[package]] name = "strum_macros" -version = "0.26.2" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6cf59daf282c0a494ba14fd21610a0325f9f90ec9d1231dea26bcb1d696c946" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" dependencies = [ - "heck 0.4.1", + "heck 0.5.0", "proc-macro2", "quote", "rustversion", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -7521,9 +7516,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.63" +version = "2.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf5be731623ca1a1fb7d8be6f261a3be6d3e2337b8a1f97be944d020c8fcb704" +checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" dependencies = [ "proc-macro2", "quote", @@ -7539,7 +7534,7 @@ dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -7556,7 +7551,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -7626,22 +7621,22 @@ checksum = "a38c90d48152c236a3ab59271da4f4ae63d678c5d7ad6b7714d7cb9760be5e4b" [[package]] name = "thiserror" -version = "1.0.60" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579e9083ca58dd9dcf91a9923bb9054071b9ebbd800b342194c9feb0ee89fc18" +checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.60" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2470041c06ec3ac1ab38d0356a6119054dedaea53e12fbefc0de730a1c08524" +checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -7733,16 +7728,16 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.37.0" +version = "1.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" dependencies = [ "backtrace", "bytes", "libc", "mio", "num_cpus", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "pin-project-lite", "signal-hook-registry", "socket2 0.5.7", @@ -7762,13 +7757,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -7825,21 +7820,21 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.12" +version = "0.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9dd1545e8208b4a5af1aa9bbd0b4cf7e9ea08fabc5d0a5c67fcaafa17433aa3" +checksum = "6f49eb2ab21d2f26bd6db7bf383edc527a7ebaee412d17af4d40fdccd442f335" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.12", + "toml_edit 0.22.14", ] [[package]] name = "toml_datetime" -version = "0.6.5" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" dependencies = [ "serde", ] @@ -7868,15 +7863,15 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.12" +version = "0.22.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3328d4f68a705b2a4498da1d580585d39a6510f98318a2cec3018a7ec61ddef" +checksum = "f21c7aaf97f1bd9ca9d4f9e73b0a6c74bd5afef56f2bc931943a6e1c37e04e38" dependencies = [ "indexmap 2.2.6", "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.8", + "winnow 0.6.13", ] [[package]] @@ -8019,7 +8014,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -8190,7 +8185,7 @@ dependencies = [ "ipconfig", "lru-cache", "once_cell", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "rand 0.8.5", "resolv-conf", "smallvec", @@ -8352,9 +8347,9 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "utf8parse" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" @@ -8385,7 +8380,7 @@ checksum = "9881bea7cbe687e36c9ab3b778c36cd0487402e270304e8b1296d5085303c1a2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -8475,7 +8470,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", "wasm-bindgen-shared", ] @@ -8509,7 +8504,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -8754,9 +8749,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.6.8" +version = "0.6.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c52e9c97a68071b23e836c9380edae937f17b9c4667bd021973efc689f618d" +checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1" dependencies = [ "memchr", ] @@ -8779,9 +8774,9 @@ checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" [[package]] name = "writeable" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dad7bb64b8ef9c0aa27b6da38b452b0ee9fd82beaf276a87dd796fb55cbae14e" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" [[package]] name = "ws_stream_wasm" @@ -8852,9 +8847,9 @@ checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" [[package]] name = "yoke" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65e71b2e4f287f467794c671e2b8f8a5f3716b3c829079a1c44740148eff07e4" +checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" dependencies = [ "serde", "stable_deref_trait", @@ -8864,13 +8859,13 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e6936f0cce458098a201c245a11bef556c6a0181129c7034d10d76d1ec3a2b8" +checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", "synstructure", ] @@ -8891,35 +8886,35 @@ checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] name = "zerofrom" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "655b0814c5c0b19ade497851070c640773304939a6c0fd5f5fb43da0696d05b7" +checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6a647510471d372f2e6c2e6b7219e44d8c574d24fdc11c610a61455782f18c3" +checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", "synstructure", ] [[package]] name = "zeroize" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" dependencies = [ "zeroize_derive", ] @@ -8932,7 +8927,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -8955,7 +8950,7 @@ checksum = "7a4a1638a1934450809c2266a70362bfc96cd90550c073f5b8a55014d1010157" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 98d523c..fe2a94c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,6 +27,9 @@ reth-interfaces = { git = "https://github.com/0xEigenLabs/reth", rev = "8cffebd7 # Database reth-libmdbx = { git = "https://github.com/0xEigenLabs/reth", package = "reth-libmdbx", rev = "8cffebd72" } +# eth +alloy-rlp = "0.3.4" + #reth-payload-builder = { path = "../reth/crates/payload/builder" } #reth-basic-payload-builder = { path = "../reth/crates/payload/basic" } #reth-ethereum-payload-builder = { path = "../reth/crates/payload/ethereum" } diff --git a/configs/database.toml b/configs/database.toml index 9fc4a12..fc2041b 100644 --- a/configs/database.toml +++ b/configs/database.toml @@ -1,3 +1,3 @@ [mdbx_config] -path = "/tmp/operator" -max_dbs = 10 +path = "tmp/operator" +max_dbs = 10 \ No newline at end of file diff --git a/configs/settlement.toml b/configs/settlement.toml index 75e090c..9830809 100644 --- a/configs/settlement.toml +++ b/configs/settlement.toml @@ -1,11 +1,21 @@ [ethereum_settlement_config] -provider_url = "http://localhost:8547" +provider_url = "http://localhost:38547" [ethereum_settlement_config.local_wallet] private_key = "0xbe825d459385bbb3ba169ac8d59bd05b099b190d8a89aace7e5bc3518e2f1a9c" chain_id = 12345 [ethereum_settlement_config.l1_contracts_addr] -bridge = "0xF93a9C25d4fa383ffCC8b9411A3813bFd131e2e8" -global_exit = "0xeA7ad75F6F685FdF0B8Bf6C6c254011018697D2d" -zkvm = "0x83C27Cb6C2Aa253A6C501E61F0d35E545FC0C68E" \ No newline at end of file +bridge = "0x3E6D537e9ee319047f773Eae650c17cE15DADf06" +global_exit = "0x5D026D30F9d2F46dBbd2931f1Ae1eFFA9Eca3A1a" +zkvm = "0x15414316e4FA6FC84C4736da40a7ee9Ee10775e9" + +[ethereum_settlement_config.zeth_config.provider_url] +provider_url = "http://localhost:8546" + +[ethereum_settlement_config.zeth_config.local_wallet] +private_key = "0xbe825d459385bbb3ba169ac8d59bd05b099b190d8a89aace7e5bc3518e2f1a9c" +chain_id = 12345 + +[ethereum_settlement_config.zeth_contracts_addr.zeth_contracts_addr] +global_exit = "0x5D026D30F9d2F46dBbd2931f1Ae1eFFA9Eca3A1a" \ No newline at end of file diff --git a/contracts/EigenZkVM.json b/contracts/EigenZkVM.json new file mode 100644 index 0000000..defd498 --- /dev/null +++ b/contracts/EigenZkVM.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[{"name":"_globalExitRootManager","type":"address","internalType":"contract IEigenGlobalExitRoot"},{"name":"_bridgeAddress","type":"address","internalType":"contract IEigenBridge"},{"name":"_chainID","type":"uint64","internalType":"uint64"}],"stateMutability":"nonpayable"},{"type":"function","name":"admin","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"batchFee","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"batchNumToStateRoot","inputs":[{"name":"","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"bridgeAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IEigenBridge"}],"stateMutability":"view"},{"type":"function","name":"chainID","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"consolidatePendingState","inputs":[{"name":"pendingStateNum","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"forceBatchTimeout","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"getLastVerifiedBatch","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"globalExitRootManager","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IEigenGlobalExitRoot"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"stateRoot","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isForcedBatchDisallowed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isPendingStateConsolidable","inputs":[{"name":"pendingStateNum","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"lastBatchSequenced","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"lastForceBatch","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"lastPendingState","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"lastPendingStateConsolidated","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"lastTimestamp","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"lastVerifiedBatch","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"multiplierBatchFee","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"pendingAdmin","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"pendingStateTimeout","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"pendingStateTransitions","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"lastVerifiedBatch","type":"uint64","internalType":"uint64"},{"name":"exitRoot","type":"bytes32","internalType":"bytes32"},{"name":"stateRoot","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"sequenceBatches","inputs":[{"name":"batches","type":"tuple[]","internalType":"struct EigenZkVM.BatchData[]","components":[{"name":"transactions","type":"bytes","internalType":"bytes"},{"name":"globalExitRoot","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"sequencedBatches","inputs":[{"name":"","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"accInputHash","type":"bytes32","internalType":"bytes32"},{"name":"sequencedTimestamp","type":"uint64","internalType":"uint64"},{"name":"previousLastBatchSequenced","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"setForceBatchTimeout","inputs":[{"name":"newforceBatchTimeout","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPendingStateTimeout","inputs":[{"name":"newPendingStateTimeout","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setTrustedAggregatorTimeout","inputs":[{"name":"newTrustedAggregatorTimeout","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setTrustedSequencer","inputs":[{"name":"newTrustedSequencer","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setVerifyBatchTimeTarget","inputs":[{"name":"newVerifyBatchTimeTarget","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferAdminRole","inputs":[{"name":"newPendingAdmin","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"trustedAggregatorTimeout","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"trustedSequencer","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"verifyBatchTimeTarget","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"verifyBatches","inputs":[{"name":"pendingStateNum","type":"uint64","internalType":"uint64"},{"name":"initNumBatch","type":"uint64","internalType":"uint64"},{"name":"finalNewBatch","type":"uint64","internalType":"uint64"},{"name":"newLocalExitRoot","type":"bytes32","internalType":"bytes32"},{"name":"newStateRoot","type":"bytes32","internalType":"bytes32"},{"name":"proof","type":"tuple","internalType":"struct Verifier.Proof","components":[{"name":"a","type":"tuple","internalType":"struct Pairing.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"b","type":"tuple","internalType":"struct Pairing.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"c","type":"tuple","internalType":"struct Pairing.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]}]},{"name":"input","type":"uint256[1]","internalType":"uint256[1]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"verifyBatchesTrustedAggregator","inputs":[{"name":"pendingStateNum","type":"uint64","internalType":"uint64"},{"name":"initNumBatch","type":"uint64","internalType":"uint64"},{"name":"finalNewBatch","type":"uint64","internalType":"uint64"},{"name":"newLocalExitRoot","type":"bytes32","internalType":"bytes32"},{"name":"newStateRoot","type":"bytes32","internalType":"bytes32"},{"name":"proof","type":"tuple","internalType":"struct Verifier.Proof","components":[{"name":"a","type":"tuple","internalType":"struct Pairing.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"b","type":"tuple","internalType":"struct Pairing.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"c","type":"tuple","internalType":"struct Pairing.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]}]},{"name":"input","type":"uint256[1]","internalType":"uint256[1]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"verifyTx","inputs":[{"name":"proof","type":"tuple","internalType":"struct Verifier.Proof","components":[{"name":"a","type":"tuple","internalType":"struct Pairing.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"b","type":"tuple","internalType":"struct Pairing.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"c","type":"tuple","internalType":"struct Pairing.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]}]},{"name":"input","type":"uint256[1]","internalType":"uint256[1]"}],"outputs":[{"name":"r","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"event","name":"AcceptAdminRole","inputs":[{"name":"newAdmin","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ConsolidatePendingState","inputs":[{"name":"numBatch","type":"uint64","indexed":true,"internalType":"uint64"},{"name":"stateRoot","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"pendingStateNum","type":"uint64","indexed":true,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ProveNonDeterministicPendingState","inputs":[{"name":"storedStateRoot","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"provedStateRoot","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"SequenceBatches","inputs":[{"name":"numBatch","type":"uint64","indexed":true,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"SequenceForceBatches","inputs":[{"name":"numBatch","type":"uint64","indexed":true,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"SetForceBatchTimeout","inputs":[{"name":"newforceBatchTimeout","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"SetPendingStateTimeout","inputs":[{"name":"newPendingStateTimeout","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"SetTrustedAggregator","inputs":[{"name":"newTrustedAggregator","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"SetTrustedAggregatorTimeout","inputs":[{"name":"newTrustedAggregatorTimeout","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"SetTrustedSequencer","inputs":[{"name":"newTrustedSequencer","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"SetTrustedSequencerURL","inputs":[{"name":"newTrustedSequencerURL","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"SetVerifyBatchTimeTarget","inputs":[{"name":"newVerifyBatchTimeTarget","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"TransferAdminRole","inputs":[{"name":"newPendingAdmin","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"VerifyBatches","inputs":[{"name":"numBatch","type":"uint64","indexed":true,"internalType":"uint64"},{"name":"stateRoot","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"aggregator","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"VerifyBatchesTrustedAggregator","inputs":[{"name":"numBatch","type":"uint64","indexed":true,"internalType":"uint64"},{"name":"stateRoot","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"aggregator","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"BatchAlreadyVerified","inputs":[]},{"type":"error","name":"BatchNotSequencedOrNotSequenceEnd","inputs":[]},{"type":"error","name":"ExceedMaxVerifyBatches","inputs":[]},{"type":"error","name":"FinalNumBatchBelowLastVerifiedBatch","inputs":[]},{"type":"error","name":"FinalNumBatchDoesNotMatchPendingState","inputs":[]},{"type":"error","name":"FinalPendingStateNumInvalid","inputs":[]},{"type":"error","name":"ForceBatchNotAllowed","inputs":[]},{"type":"error","name":"ForceBatchesOverflow","inputs":[]},{"type":"error","name":"ForcedDataDoesNotMatch","inputs":[]},{"type":"error","name":"GlobalExitRootNotExist","inputs":[]},{"type":"error","name":"HaltTimeoutNotExpired","inputs":[]},{"type":"error","name":"InitNumBatchAboveLastVerifiedBatch","inputs":[]},{"type":"error","name":"InitNumBatchDoesNotMatchPendingState","inputs":[]},{"type":"error","name":"InvalidProof","inputs":[]},{"type":"error","name":"InvalidRangeBatchTimeTarget","inputs":[]},{"type":"error","name":"InvalidRangeForceBatchTimeout","inputs":[]},{"type":"error","name":"InvalidRangeMultiplierBatchFee","inputs":[]},{"type":"error","name":"NewAccInputHashDoesNotExist","inputs":[]},{"type":"error","name":"NewPendingStateTimeoutMustBeLower","inputs":[]},{"type":"error","name":"NewStateRootNotInsidePrime","inputs":[]},{"type":"error","name":"NewTrustedAggregatorTimeoutMustBeLower","inputs":[]},{"type":"error","name":"OldAccInputHashDoesNotExist","inputs":[]},{"type":"error","name":"OldStateRootDoesNotExist","inputs":[]},{"type":"error","name":"OnlyAdmin","inputs":[]},{"type":"error","name":"OnlyPendingAdmin","inputs":[]},{"type":"error","name":"OnlyTrustedAggregator","inputs":[]},{"type":"error","name":"OnlyTrustedSequencer","inputs":[]},{"type":"error","name":"PendingStateDoesNotExist","inputs":[]},{"type":"error","name":"PendingStateInvalid","inputs":[]},{"type":"error","name":"PendingStateNotConsolidable","inputs":[]},{"type":"error","name":"PendingStateTimeoutExceedHaltAggregationTimeout","inputs":[]},{"type":"error","name":"SequenceZeroBatches","inputs":[]},{"type":"error","name":"SequencedTimestampBelowForcedTimestamp","inputs":[]},{"type":"error","name":"SequencedTimestampInvalid","inputs":[]},{"type":"error","name":"StoredRootMustBeDifferentThanNewRoot","inputs":[]},{"type":"error","name":"TransactionsLengthAboveMax","inputs":[]},{"type":"error","name":"TrustedAggregatorTimeoutExceedHaltAggregationTimeout","inputs":[]},{"type":"error","name":"TrustedAggregatorTimeoutNotExpired","inputs":[]}],"bytecode":{"object":"0x610100346200011a576001600160401b0390601f62002dd938819003918201601f1916830191848311848410176200011f578084926060946040528339810103126200011a5780516001600160a01b039182821682036200011a57602081015192831683036200011a576040015192831683036200011a5760805260a05260c0523360e052604051612ca3908162000136823960805181818161061001528181610b480152818161128e015281816118d201526120db015260a0518181816104230152611082015260c05181611159015260e0518181816102e3015281816107a4015281816108f20152818161094601528181610ab501528181610c5f01528181610f1201528181610fdb015281816110cb015261178e0152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001257600080fd5b60003560e01c806303537393146102875780630a0d9fbe1461028257806319d8ac611461027d5780632678224714610278578063383b3be814610273578063394218e91461026e578063423fa85614610269578063458c0477146102645780634a1a89a71461025f5780634a910e6a1461025a5780634e487706146102555780635392c5e0146102505780636d00000a1461024b5780636ff512cc14610246578063715018a6146102415780637fcb36531461023c578063837a473814610237578063841b24d7146102325780638da5cb5b1461022d5780639498bd71146102285780639c9f3dfe14610223578063a066215c1461021e578063a3c573eb14610219578063ada8f91914610214578063adc879e91461020f578063afd23cbe1461020a578063b4d63f5814610205578063c0ed84e014610200578063c754c7ed146101fb578063cfa8ed47146101f6578063d02103ca146101f1578063d939b315146101ec578063e7a7ed02146101e7578063ed6b0104146101e2578063f2fde38b146101dd578063f48d7729146101d8578063f851a440146101d3578063f8b823e4146101ce5763fc3781bd146101c957600080fd5b6117db565b6117bd565b611778565b6116e3565b611337565b611311565b6112e7565b6112bd565b611278565b61124b565b611221565b6111f5565b6111a2565b61117d565b611139565b6110b1565b61106c565b610fbf565b610ef6565b610e12565b610de9565b610dc8565b610d70565b610d4f565b610cee565b610c46565b610a91565b6109f3565b61092a565b6108d6565b6108ac565b610885565b61085b565b610788565b61075b565b610708565b6106e1565b6106ba565b346104b2576020806003193601126104b2576001600160401b0390600480358381116104b257366023820112156104b257808201358481116104b2576024820191602436918360051b0101116104b2576001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083160361069e57801561068d576103e8811161067c579160685492868416908780604096871c1691610347836001600160401b03166000526067602052604060002090565b54946000905b8282106104b757505061036d6103d6936103f296936103b4931690611d2e565b986103a56103876068546001600160401b039060401c1690565b9161039061149e565b9485526001600160401b03428e161690850152565b6001600160401b031682880152565b6103d1886001600160401b03166000526067602052604060002090565b611d49565b6001600160401b03166001600160401b03196068541617606855565b6068805467ffffffffffffffff60401b1916604086901b67ffffffffffffffff60401b16179055610421611f8a565b7f000000000000000000000000000000000000000000000000000000000000000016803b156104b257600092839251809481936379e2cf9760e01b83525af180156104ad57610494575b50167f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce600080a2005b806104a16104a7926113cf565b806106af565b3861046b565b611d22565b600080fd5b919250946104ce6104c9878585611c58565b611c7f565b80518b8151910120908b8101908a8d8d8c85519182151594856105ed575b50505050506105dd576201d4c0815151116105cd578a01968d806105178a516001600160401b031690565b16911681109081156105c3575b506105b3578c9493926105aa926105938e6105858e8c6105506105a4985191516001600160401b031690565b915195869485019788929091606894928452602084015260408301526001600160401b0360c01b9060c01b1660608201520190565b03601f19810183528261146e565b51902096516001600160401b031690565b96611c2e565b9095949561034d565b89516375413c8b60e11b81528b90fd5b9050421038610524565b8a516328a69b1f60e21b81528c90fd5b8a516373bd668d60e01b81528c90fd5b516312bd9b1960e11b8152908101928352935083918290600090829060200103927f0000000000000000000000000000000000000000000000000000000000000000165af19081156104ad578e60009261064f575b5050158d388c8f8f6104ec565b61066e9250803d10610675575b610666818361146e565b810190611d13565b388e610642565b503d61065c565b604051635acfba9d60e11b81528490fd5b60405163cb591a5f60e01b81528490fd5b604051634755657960e01b81528490fd5b60009103126104b257565b346104b25760003660031901126104b25760206001600160401b0360655416604051908152f35b346104b25760003660031901126104b25760206001600160401b0360685416604051908152f35b346104b25760003660031901126104b257606c546040516001600160a01b039091168152602090f35b600435906001600160401b03821682036104b257565b35906001600160401b03821682036104b257565b346104b25760203660031901126104b257602061077e610779610731565b6121d1565b6040519015158152f35b346104b25760203660031901126104b2576107a1610731565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603610849576001600160401b0381169062093a80821161083757606b80546001600160c01b031660c09290921b6001600160c01b0319169190911790557f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602090604051908152a1005b604051631d06e87960e01b8152600490fd5b604051634755657960e01b8152600490fd5b346104b25760003660031901126104b25760206068546001600160401b036040519160401c168152f35b346104b25760003660031901126104b25760206001600160401b03606b5416604051908152f35b346104b25760003660031901126104b2576020606b546001600160401b036040519160401c168152f35b346104b25760203660031901126104b2576108ef610731565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036108495761092890612005565b005b346104b25760203660031901126104b257610943610731565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603610849576001600160401b0381169062093a8082116109e157606c805467ffffffffffffffff60a01b191660a09290921b67ffffffffffffffff60a01b169190911790556040519081527fa7eb6cb8a613eb4e8bddc1ac3d61ec6cf10898760f0b187bcca794c6ca6fa40b90602090a1005b60405163f5e37f2f60e01b8152600490fd5b346104b25760203660031901126104b2576001600160401b03610a14610731565b1660005260696020526020604060002054604051908152f35b906101c06003198301126104b2576001600160401b039060043582811681036104b2579260243583811681036104b2579260443590811681036104b25791606435916084359161010060a3198301126104b25760a4916101c4116104b2576101a490565b346104b257610a9f36610a2d565b9395919492936001600160a01b039392909190337f000000000000000000000000000000000000000000000000000000000000000086160361084957610ae6938891611e46565b606880546001600160c01b031660c086901b6001600160c01b03191617905582610b23856001600160401b03166000526069602052604060002090565b556001600160401b039081610b40606b546001600160401b031690565b16610bf1575b7f000000000000000000000000000000000000000000000000000000000000000016803b156104b2576040516333d6247d60e01b815260048101939093526000908390602490829084905af19081156104ad577fcb339b570a7f0b25afa7333371ff11192092a0aeace12b671f4c212f2815c6fe92610bd992610bde575b50604051938452339416929081906020820190565b0390a3005b806104a1610beb926113cf565b38610bc4565b610c066001600160401b0319606b5416606b55565b610c1f67ffffffffffffffff60401b19606b5416606b55565b610b46565b60209060031901126104b2576004356001600160a01b03811681036104b25790565b346104b257610c5436610c24565b6001600160a01b03337f000000000000000000000000000000000000000000000000000000000000000082160361084957606580547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16605084901b600160501b600160f01b0316179055604051911681527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602090a1005b346104b257600080600319360112610d4c57610d08611a95565b603380546001600160a01b0319811690915581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b80fd5b346104b25760003660031901126104b257602060685460c01c604051908152f35b346104b25760203660031901126104b257600435600052606a602052608060406000208054906001600160401b0390600260018201549101549160405193818116855260401c16602084015260408301526060820152f35b346104b25760003660031901126104b2576020606b5460c01c604051908152f35b346104b25760003660031901126104b2576033546040516001600160a01b039091168152602090f35b346104b25760203660031901126104b257600054610e4760ff8260081c161580928193610ee8575b8115610ec8575b50611b36565b80610e5a600160ff196000541617600055565b610eaf575b610e6a600435611b99565b610e7057005b610e8061ff001960005416600055565b604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602090a1005b610ec361010061ff00196000541617600055565b610e5f565b303b15915081610eda575b5038610e41565b6001915060ff161438610ed3565b600160ff8216109150610e3a565b346104b25760203660031901126104b257610f0f610731565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603610849576001600160401b0381169062093a808211610fad57606b805467ffffffffffffffff60801b191660809290921b67ffffffffffffffff60801b169190911790556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602090a1005b604051630cc9650760e41b8152600490fd5b346104b25760203660031901126104b257610fd8610731565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603610849576001600160401b031662015180811161105a576020817f1b023231a1ab6b5d93992f168fb44498e1a7e64cef58daff6f1c216de6a68c28926001600160401b03196065541617606555604051908152a1005b604051631c0cfbfd60e31b8152600490fd5b346104b25760003660031901126104b2576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346104b2576110bf36610c24565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831603610849577fa5b56b7906fd0a20e3f35120dd8343db1e12e037a6c90111c7e42885e82a1ce69160209116806bffffffffffffffffffffffff60a01b606c541617606c55604051908152a1005b346104b25760003660031901126104b25760206040516001600160401b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346104b25760003660031901126104b257602060655461ffff6040519160401c168152f35b346104b25760203660031901126104b25760606001600160401b03806111c6610731565b16600052606760205260406000209060018254920154604051928352818116602084015260401c166040820152f35b346104b25760003660031901126104b257602061121061219d565b6001600160401b0360405191168152f35b346104b25760003660031901126104b25760206001600160401b03606c5460a01c16604051908152f35b346104b25760003660031901126104b25760655460405160509190911c6001600160a01b03168152602090f35b346104b25760003660031901126104b2576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346104b25760003660031901126104b25760206001600160401b03606b5460801c16604051908152f35b346104b25760003660031901126104b25760206001600160401b0360685460801c16604051908152f35b346104b25760003660031901126104b257602060ff606c5460e01c166040519015158152f35b346104b25761134536610c24565b61134d611a95565b6001600160a01b038116156113655761092890611aed565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116113e257604052565b6113b9565b604081019081106001600160401b038211176113e257604052565b606081019081106001600160401b038211176113e257604052565b608081019081106001600160401b038211176113e257604052565b602081019081106001600160401b038211176113e257604052565b60a081019081106001600160401b038211176113e257604052565b90601f801991011681019081106001600160401b038211176113e257604052565b6040519061149c8261141d565b565b6040519061149c82611402565b6040519061149c826113e7565b60409060031901126104b257604051906114d1826113e7565b60043582526024356020830152565b60409060c31901126104b257604051906114f9826113e7565b60c435825260e4356020830152565b91908260409103126104b257604051611520816113e7565b6020808294803584520135910152565b906040519161153e83611438565b826101249182116104b257610104905b82821061155a57505050565b813581526020918201910161154e565b604051929161157884611438565b836020928381019283116104b257905b8282106115955750505050565b81358152908301908301611588565b80606312156104b257604051906115ba826113e7565b8160849182116104b2576044905b8282106115d55750505090565b81358152602091820191016115c8565b8060a312156104b257604051906115fb826113e7565b8160c49182116104b2576084905b8282106116165750505090565b8135815260209182019101611609565b9080601f830112156104b2576040519161163f836113e7565b8290604081019283116104b257905b82821061165b5750505090565b813581526020918201910161164e565b808203929161010084126104b2576040519161168683611402565b608083956116948484611508565b8552603f1901126104b25760409160c06116de9284516116b3816113e7565b6116bf84878401611626565b81526116ce8460808401611626565b6020820152602087015201611508565b910152565b346104b257366003190161012081126104b257610100136104b25760405161170a81611402565b611713366114b8565b815260803660431901126104b25760405161172d816113e7565b611736366115a4565b8152611741366115e5565b60208201526020820152611754366114e0565b60408201523661012312156104b25761077e60209161177236611530565b9061229f565b346104b25760003660031901126104b2576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346104b25760003660031901126104b2576020606654604051908152f35b346104b2576117e936610a2d565b90929395919461181f6001611811896001600160401b03166000526067602052604060002090565b01546001600160401b031690565b91611831606b54938460c01c90611d2e565b946001600160401b03958642911611611a83576103e886611852858c611da4565b1611611a715788611864938796611e46565b60801c1661199e57606880546001600160c01b031660c086901b6001600160c01b031916179055826118a9856001600160401b03166000526069602052604060002090565b556118cb6118bf606b546001600160401b031690565b6001600160401b031690565b61196b575b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316803b156104b2576040516333d6247d60e01b815260048101939093526000908390602490829084905af19081156104ad577f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f596692610bd992610bde57505b604051938452339416929081906020820190565b6119806001600160401b0319606b5416606b55565b61199967ffffffffffffffff60401b19606b5416606b55565b6118d0565b610bd990611a6c7f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966936119cf611f8a565b611a086119ec6119e7606b546001600160401b031690565b611dbd565b6001600160401b03166001600160401b0319606b541617606b55565b611a1061148f565b6001600160401b03428516168152906001600160401b03881660208301526040820152856060820152611a67611a4e606b546001600160401b031690565b6001600160401b0316600052606a602052604060002090565b611dd5565b611957565b604051635acfba9d60e11b8152600490fd5b604051638a0704d360e01b8152600490fd5b6033546001600160a01b03163303611aa957565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b603380546001600160a01b039283166001600160a01b0319821681179092559091167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b15611b3d57565b60405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608490fd5b60008052606960205260406000205560ff60005460081c1615611bbf5761149c33611aed565b60405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608490fd5b634e487b7160e01b600052601160045260246000fd5b6000198114611c3d5760010190565b611c18565b634e487b7160e01b600052603260045260246000fd5b9190811015611c7a5760051b81013590605e19813603018212156104b2570190565b611c42565b6060813603126104b25760405190611c9682611402565b6001600160401b039080358281116104b25781019036601f830112156104b25781359260209084116113e257604051611cd8601f8601601f191683018261146e565b848152368286860101116104b25760008286611d0b97826040980183860137830101528552808201359085015201610747565b604082015290565b908160209103126104b2575190565b6040513d6000823e3d90fd5b9190916001600160401b0380809416911601918211611c3d57565b8151815560208201516001909101805467ffffffffffffffff19166001600160401b0392831617815561149c9290919060400151825467ffffffffffffffff60401b1916911660401b67ffffffffffffffff60401b16179055565b6001600160401b039182169082160391908211611c3d57565b6001600160401b03809116908114611c3d5760010190565b906060600291611e356001600160401b03611e098184511687906001600160401b03166001600160401b0319825416179055565b6020830151865467ffffffffffffffff60401b1916911660401b67ffffffffffffffff60401b16178555565b604081015160018501550151910155565b90939293611e5261219d565b6001600160401b03929091908084168015611f2f57611e7c6118bf606b546001600160401b031690565b10611f1d57611eb56118bf611ea586936001600160401b0316600052606a602052604060002090565b5460401c6001600160401b031690565b911603611f0b5781905b1691161115611ef957611772611ed9611ee193369061166b565b91369061156a565b611ee757565b6040516309bde33960e01b8152600490fd5b60405163b9b18f5760e01b8152600490fd5b604051632bd2e3e760e01b8152600490fd5b60405163bb14c20560e01b8152600490fd5b5050611f4e816001600160401b03166000526069602052604060002090565b5415611f785782808316911611611f66578190611ebf565b604051630f2b74f160e11b8152600490fd5b6040516324cbdcc360e11b8152600490fd5b606b546001600160401b0390818082169160401c16808211611fab57505050565b600101918211611c3d57611fbe826121d1565b611fc6575050565b677fffffffffffffff611fdc83611fe693611da4565b60011c1682611d2e565b90611ff0826121d1565b15611fff575061149c90612005565b61149c91505b606b54906001600160401b038082169281808260401c16851191821592612191575b505061217f5761204a826001600160401b0316600052606a602052604060002090565b9061206082546001600160401b039060401c1690565b606880546001600160c01b031660c083901b6001600160c01b031916179055926120d1600284019182546120a7876001600160401b03166000526069602052604060002090565b5567ffffffffffffffff60401b606b549160401b169067ffffffffffffffff60401b191617606b55565b60019290920154917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316803b156104b2576040516333d6247d60e01b815260048101949094526000908490602490829084905af19283156104ad577f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e9361216c575b5054604051908152921691602090a3565b806104a1612179926113cf565b3861215b565b60405163d086b70b60e01b8152600490fd5b16841190508138612027565b606b546001600160401b0390811680156121c657600052606a60205260406000205460401c1690565b505060685460c01c90565b6001600160401b03809116600052606a6020526121fd816040600020541682606b5460801c1690611d2e565b429116111590565b6001600160401b0381116113e25760051b60200190565b9061222682612205565b612233604051918261146e565b8281528092612244601f1991612205565b0190602036910137565b805115611c7a5760200190565b805160011015611c7a5760400190565b805160021015611c7a5760600190565b805160031015611c7a5760800190565b8051821015611c7a5760209160051b010190565b6040516122ab816113e7565b6001928382526020368184013760005b8481106122db575050906122ce91612348565b6122d55790565b50600090565b806122f69160051b8301516122f0828661228b565b52611c2e565b6122bb565b9060018201809211611c3d57565b9060028201809211611c3d57565b9060038201809211611c3d57565b9060048201809211611c3d57565b9060058201809211611c3d57565b156104b257565b919091612353612919565b9161235e82516122fb565b90612370608085019283515114612341565b6123786114ab565b6000815260006020820152946000955b8451871015612402576105a46123fc916123cd7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016123c68b8a61228b565b5110612341565b6123f66123e487516123de8c6122fb565b9061228b565b516123ef8b8a61228b565b519061257a565b9061252a565b95612388565b61246695929650612462945061241c61242392945161224e565b519061252a565b82519261243460208201519261248d565b9061244660408086015192015161248d565b916060850151936020612459875161248d565b9601519661266a565b1590565b61246f57600090565b600190565b60405190612481826113e7565b60006020838281520152565b612495612474565b508051158061250a575b6124ef5760208151917f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd479182910151068103908111611c3d57604051916124e5836113e7565b8252602082015290565b506040516124fc816113e7565b600081526000602082015290565b5060208101511561249f565b6040519061252382611438565b6020368337565b6020929160c060609261253b612474565b958693816040519361254c8561141d565b6080368637805185520151828401528051604084015201518482015260066107cf195a01fa1561257857565bfe5b91906060906080612589612474565b94859260206040519261259b84611402565b863685378051845201516020830152604082015260076107cf195a01fa1561257857565b604051906125cc82611453565b600482528160005b608081106125e0575050565b6020906125eb612474565b828285010152016125d4565b60409081519161260683611402565b600283528260005b82811061261a57505050565b602090612625612474565b8282850101520161260e565b6040519061263e826113e7565b8160405161264b816113e7565b60403682378152602060405191612661836113e7565b60403684370152565b979693949291956126796125bf565b956040519761268789611453565b6004895260005b608081106127445750612741999a6126a58961224e565b526126af8861224e565b506126b98861225b565b526126c38761225b565b506126cd8761226b565b526126d78661226b565b506126e18661227b565b526126eb8561227b565b506126f58661224e565b526126ff8561224e565b506127098561225b565b526127138461225b565b5061271d8461226b565b526127278361226b565b506127318361227b565b5261273b8261227b565b50612771565b90565b60209061274f612631565b82828d0101520161268e565b90600682029180830460061490151715611c3d57565b805161277f83518214612341565b6127888161275b565b926127928461221c565b9260005b8381106127d4575050505060209182916127ae612516565b93849260051b910160086107cf195a01fa8015612578576127ce90612341565b51151590565b806127e26128be928461228b565b51516127f66127f08361275b565b8861228b565b52602080612804838661228b565b51015161282161281b6128168561275b565b6122fb565b8961228b565b5261283761282f838761228b565b515160200190565b5161284c61281b6128478561275b565b612309565b52612857828661228b565b51515161286e61281b6128698561275b565b612317565b526128868161287d848861228b565b51015160200190565b5161289b61281b6128968561275b565b612325565b526128a6828661228b565b510151516122f06127f06128b98461275b565b612333565b612796565b6040519060a082018281106001600160401b038211176113e25760405260606080836128ed612474565b81526128f7612631565b6020820152612904612631565b6040820152612911612631565b838201520152565b6129216128c3565b90612c6a61292d6114ab565b7f286cd17282af60cd2295fe74102e263890d3f520e66cb7272426b9e33ad6dc2681526020907f015b0439f72dd97fd07dec5b86314bb06649a69faee911d3b9f51e122f0572248282015284526129826114ab565b7f01bc2d0e1b058937a707d4554e9d2e26a44eaafbbf2933a3f2068cf6866520bf81527f1c44531f30ab63540164d6a11411841f7c845a58b180f69ffa15295be319e82d828201526129d26114ab565b7f148d6010a8956aa2bdc30562b02883e2675e4d005de5d20f4dce773217e9c51681527f1bb933d3051ebfd0bb38d1ed1312777ac2f65bc69896ad8b5422299b2169dd8383820152612a226114ab565b9182528282015281850152612a356114ab565b7e29f2aa65ed44f30bbe6b29c4e7aee173d6b29bded770184bb6a45a7328cbb281527f21e67773eea4fe317bc2521b0e3e46ae3d6ae8d12325a8482e62d3e26d99b47882820152612a846114ab565b7f0f5e5c4e2d6ad50f39334553aba65f4c03ed0f710eb227fe3ee8a0a508a9203381527f0165cb21465ccf2d320a94ce7356be1f42871c5ba5370952ace3ff76c6baab6a83820152612ad46114ab565b918252828201526040850152612ae86114ab565b7f187e4b6e20ff76e3bb84dd72b8ee9d0f1c26de600dbee716f6a25dd53ee6a92481527f021ef001f16908023b3bad33c83004f6e281d367e45a16acba40c340a2da524682820152612b386114ab565b7f2240a5532ccf19f1df460a49fd8fef835d52ae6d4dbea7ff978cf2231a59087981527f26f930b580037b594fbe5eb8527e03ffbcd4f0c70b2077f0757acaf3356835fe83820152612b886114ab565b918252828201526060850152612b9c6125f7565b60808501908152612c08612bae6114ab565b7f08e7628b53d973750e52b28fb4f697879294cfa8843744bbe4569d76848ef13a81527f0ccbdf5308fa160229c6bfea4a1be78dca12ec6e05c564fbc889f3fbc8981d1184820152825190612c028261224e565b5261224e565b507f27b22f17fe29d3725a5e0acf97a97be1da8bf21d5ea25f62de06def24bce7856612c326114ab565b927f03d66c72cdec7209ee63f01f40e08acf8e9a97a9a3a271f82174f0d6c2d2478c84528301525190612c648261225b565b5261225b565b5056fea2646970667358221220f341f6699e187a2b9492abda9b5f6d7de08c04bc0733194f8ad2113f1c75a8ea64736f6c63430008150033","sourceMap":"1071:26702:49:-:0;;;;-1:-1:-1;;;;;1071:26702:49;;;;;;;;;;-1:-1:-1;;1071:26702:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1071:26702:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10331:46;;10387:30;;10427:18;;10463:10;10455:18;;1071:26702;;;;;;;;10331:46;1071:26702;;;;;;;;;;;;;;;;;;;;;;;;;10387:30;1071:26702;;;;;;;;;;10427:18;1071:26702;;;;;10455:18;1071:26702;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1071:26702:49;;;;;;-1:-1:-1;1071:26702:49;;;;;-1:-1:-1;1071:26702:49","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436101561001257600080fd5b60003560e01c806303537393146102875780630a0d9fbe1461028257806319d8ac611461027d5780632678224714610278578063383b3be814610273578063394218e91461026e578063423fa85614610269578063458c0477146102645780634a1a89a71461025f5780634a910e6a1461025a5780634e487706146102555780635392c5e0146102505780636d00000a1461024b5780636ff512cc14610246578063715018a6146102415780637fcb36531461023c578063837a473814610237578063841b24d7146102325780638da5cb5b1461022d5780639498bd71146102285780639c9f3dfe14610223578063a066215c1461021e578063a3c573eb14610219578063ada8f91914610214578063adc879e91461020f578063afd23cbe1461020a578063b4d63f5814610205578063c0ed84e014610200578063c754c7ed146101fb578063cfa8ed47146101f6578063d02103ca146101f1578063d939b315146101ec578063e7a7ed02146101e7578063ed6b0104146101e2578063f2fde38b146101dd578063f48d7729146101d8578063f851a440146101d3578063f8b823e4146101ce5763fc3781bd146101c957600080fd5b6117db565b6117bd565b611778565b6116e3565b611337565b611311565b6112e7565b6112bd565b611278565b61124b565b611221565b6111f5565b6111a2565b61117d565b611139565b6110b1565b61106c565b610fbf565b610ef6565b610e12565b610de9565b610dc8565b610d70565b610d4f565b610cee565b610c46565b610a91565b6109f3565b61092a565b6108d6565b6108ac565b610885565b61085b565b610788565b61075b565b610708565b6106e1565b6106ba565b346104b2576020806003193601126104b2576001600160401b0390600480358381116104b257366023820112156104b257808201358481116104b2576024820191602436918360051b0101116104b2576001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083160361069e57801561068d576103e8811161067c579160685492868416908780604096871c1691610347836001600160401b03166000526067602052604060002090565b54946000905b8282106104b757505061036d6103d6936103f296936103b4931690611d2e565b986103a56103876068546001600160401b039060401c1690565b9161039061149e565b9485526001600160401b03428e161690850152565b6001600160401b031682880152565b6103d1886001600160401b03166000526067602052604060002090565b611d49565b6001600160401b03166001600160401b03196068541617606855565b6068805467ffffffffffffffff60401b1916604086901b67ffffffffffffffff60401b16179055610421611f8a565b7f000000000000000000000000000000000000000000000000000000000000000016803b156104b257600092839251809481936379e2cf9760e01b83525af180156104ad57610494575b50167f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce600080a2005b806104a16104a7926113cf565b806106af565b3861046b565b611d22565b600080fd5b919250946104ce6104c9878585611c58565b611c7f565b80518b8151910120908b8101908a8d8d8c85519182151594856105ed575b50505050506105dd576201d4c0815151116105cd578a01968d806105178a516001600160401b031690565b16911681109081156105c3575b506105b3578c9493926105aa926105938e6105858e8c6105506105a4985191516001600160401b031690565b915195869485019788929091606894928452602084015260408301526001600160401b0360c01b9060c01b1660608201520190565b03601f19810183528261146e565b51902096516001600160401b031690565b96611c2e565b9095949561034d565b89516375413c8b60e11b81528b90fd5b9050421038610524565b8a516328a69b1f60e21b81528c90fd5b8a516373bd668d60e01b81528c90fd5b516312bd9b1960e11b8152908101928352935083918290600090829060200103927f0000000000000000000000000000000000000000000000000000000000000000165af19081156104ad578e60009261064f575b5050158d388c8f8f6104ec565b61066e9250803d10610675575b610666818361146e565b810190611d13565b388e610642565b503d61065c565b604051635acfba9d60e11b81528490fd5b60405163cb591a5f60e01b81528490fd5b604051634755657960e01b81528490fd5b60009103126104b257565b346104b25760003660031901126104b25760206001600160401b0360655416604051908152f35b346104b25760003660031901126104b25760206001600160401b0360685416604051908152f35b346104b25760003660031901126104b257606c546040516001600160a01b039091168152602090f35b600435906001600160401b03821682036104b257565b35906001600160401b03821682036104b257565b346104b25760203660031901126104b257602061077e610779610731565b6121d1565b6040519015158152f35b346104b25760203660031901126104b2576107a1610731565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603610849576001600160401b0381169062093a80821161083757606b80546001600160c01b031660c09290921b6001600160c01b0319169190911790557f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602090604051908152a1005b604051631d06e87960e01b8152600490fd5b604051634755657960e01b8152600490fd5b346104b25760003660031901126104b25760206068546001600160401b036040519160401c168152f35b346104b25760003660031901126104b25760206001600160401b03606b5416604051908152f35b346104b25760003660031901126104b2576020606b546001600160401b036040519160401c168152f35b346104b25760203660031901126104b2576108ef610731565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036108495761092890612005565b005b346104b25760203660031901126104b257610943610731565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603610849576001600160401b0381169062093a8082116109e157606c805467ffffffffffffffff60a01b191660a09290921b67ffffffffffffffff60a01b169190911790556040519081527fa7eb6cb8a613eb4e8bddc1ac3d61ec6cf10898760f0b187bcca794c6ca6fa40b90602090a1005b60405163f5e37f2f60e01b8152600490fd5b346104b25760203660031901126104b2576001600160401b03610a14610731565b1660005260696020526020604060002054604051908152f35b906101c06003198301126104b2576001600160401b039060043582811681036104b2579260243583811681036104b2579260443590811681036104b25791606435916084359161010060a3198301126104b25760a4916101c4116104b2576101a490565b346104b257610a9f36610a2d565b9395919492936001600160a01b039392909190337f000000000000000000000000000000000000000000000000000000000000000086160361084957610ae6938891611e46565b606880546001600160c01b031660c086901b6001600160c01b03191617905582610b23856001600160401b03166000526069602052604060002090565b556001600160401b039081610b40606b546001600160401b031690565b16610bf1575b7f000000000000000000000000000000000000000000000000000000000000000016803b156104b2576040516333d6247d60e01b815260048101939093526000908390602490829084905af19081156104ad577fcb339b570a7f0b25afa7333371ff11192092a0aeace12b671f4c212f2815c6fe92610bd992610bde575b50604051938452339416929081906020820190565b0390a3005b806104a1610beb926113cf565b38610bc4565b610c066001600160401b0319606b5416606b55565b610c1f67ffffffffffffffff60401b19606b5416606b55565b610b46565b60209060031901126104b2576004356001600160a01b03811681036104b25790565b346104b257610c5436610c24565b6001600160a01b03337f000000000000000000000000000000000000000000000000000000000000000082160361084957606580547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16605084901b600160501b600160f01b0316179055604051911681527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602090a1005b346104b257600080600319360112610d4c57610d08611a95565b603380546001600160a01b0319811690915581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b80fd5b346104b25760003660031901126104b257602060685460c01c604051908152f35b346104b25760203660031901126104b257600435600052606a602052608060406000208054906001600160401b0390600260018201549101549160405193818116855260401c16602084015260408301526060820152f35b346104b25760003660031901126104b2576020606b5460c01c604051908152f35b346104b25760003660031901126104b2576033546040516001600160a01b039091168152602090f35b346104b25760203660031901126104b257600054610e4760ff8260081c161580928193610ee8575b8115610ec8575b50611b36565b80610e5a600160ff196000541617600055565b610eaf575b610e6a600435611b99565b610e7057005b610e8061ff001960005416600055565b604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602090a1005b610ec361010061ff00196000541617600055565b610e5f565b303b15915081610eda575b5038610e41565b6001915060ff161438610ed3565b600160ff8216109150610e3a565b346104b25760203660031901126104b257610f0f610731565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603610849576001600160401b0381169062093a808211610fad57606b805467ffffffffffffffff60801b191660809290921b67ffffffffffffffff60801b169190911790556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602090a1005b604051630cc9650760e41b8152600490fd5b346104b25760203660031901126104b257610fd8610731565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603610849576001600160401b031662015180811161105a576020817f1b023231a1ab6b5d93992f168fb44498e1a7e64cef58daff6f1c216de6a68c28926001600160401b03196065541617606555604051908152a1005b604051631c0cfbfd60e31b8152600490fd5b346104b25760003660031901126104b2576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346104b2576110bf36610c24565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831603610849577fa5b56b7906fd0a20e3f35120dd8343db1e12e037a6c90111c7e42885e82a1ce69160209116806bffffffffffffffffffffffff60a01b606c541617606c55604051908152a1005b346104b25760003660031901126104b25760206040516001600160401b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346104b25760003660031901126104b257602060655461ffff6040519160401c168152f35b346104b25760203660031901126104b25760606001600160401b03806111c6610731565b16600052606760205260406000209060018254920154604051928352818116602084015260401c166040820152f35b346104b25760003660031901126104b257602061121061219d565b6001600160401b0360405191168152f35b346104b25760003660031901126104b25760206001600160401b03606c5460a01c16604051908152f35b346104b25760003660031901126104b25760655460405160509190911c6001600160a01b03168152602090f35b346104b25760003660031901126104b2576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346104b25760003660031901126104b25760206001600160401b03606b5460801c16604051908152f35b346104b25760003660031901126104b25760206001600160401b0360685460801c16604051908152f35b346104b25760003660031901126104b257602060ff606c5460e01c166040519015158152f35b346104b25761134536610c24565b61134d611a95565b6001600160a01b038116156113655761092890611aed565b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116113e257604052565b6113b9565b604081019081106001600160401b038211176113e257604052565b606081019081106001600160401b038211176113e257604052565b608081019081106001600160401b038211176113e257604052565b602081019081106001600160401b038211176113e257604052565b60a081019081106001600160401b038211176113e257604052565b90601f801991011681019081106001600160401b038211176113e257604052565b6040519061149c8261141d565b565b6040519061149c82611402565b6040519061149c826113e7565b60409060031901126104b257604051906114d1826113e7565b60043582526024356020830152565b60409060c31901126104b257604051906114f9826113e7565b60c435825260e4356020830152565b91908260409103126104b257604051611520816113e7565b6020808294803584520135910152565b906040519161153e83611438565b826101249182116104b257610104905b82821061155a57505050565b813581526020918201910161154e565b604051929161157884611438565b836020928381019283116104b257905b8282106115955750505050565b81358152908301908301611588565b80606312156104b257604051906115ba826113e7565b8160849182116104b2576044905b8282106115d55750505090565b81358152602091820191016115c8565b8060a312156104b257604051906115fb826113e7565b8160c49182116104b2576084905b8282106116165750505090565b8135815260209182019101611609565b9080601f830112156104b2576040519161163f836113e7565b8290604081019283116104b257905b82821061165b5750505090565b813581526020918201910161164e565b808203929161010084126104b2576040519161168683611402565b608083956116948484611508565b8552603f1901126104b25760409160c06116de9284516116b3816113e7565b6116bf84878401611626565b81526116ce8460808401611626565b6020820152602087015201611508565b910152565b346104b257366003190161012081126104b257610100136104b25760405161170a81611402565b611713366114b8565b815260803660431901126104b25760405161172d816113e7565b611736366115a4565b8152611741366115e5565b60208201526020820152611754366114e0565b60408201523661012312156104b25761077e60209161177236611530565b9061229f565b346104b25760003660031901126104b2576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346104b25760003660031901126104b2576020606654604051908152f35b346104b2576117e936610a2d565b90929395919461181f6001611811896001600160401b03166000526067602052604060002090565b01546001600160401b031690565b91611831606b54938460c01c90611d2e565b946001600160401b03958642911611611a83576103e886611852858c611da4565b1611611a715788611864938796611e46565b60801c1661199e57606880546001600160c01b031660c086901b6001600160c01b031916179055826118a9856001600160401b03166000526069602052604060002090565b556118cb6118bf606b546001600160401b031690565b6001600160401b031690565b61196b575b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316803b156104b2576040516333d6247d60e01b815260048101939093526000908390602490829084905af19081156104ad577f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f596692610bd992610bde57505b604051938452339416929081906020820190565b6119806001600160401b0319606b5416606b55565b61199967ffffffffffffffff60401b19606b5416606b55565b6118d0565b610bd990611a6c7f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966936119cf611f8a565b611a086119ec6119e7606b546001600160401b031690565b611dbd565b6001600160401b03166001600160401b0319606b541617606b55565b611a1061148f565b6001600160401b03428516168152906001600160401b03881660208301526040820152856060820152611a67611a4e606b546001600160401b031690565b6001600160401b0316600052606a602052604060002090565b611dd5565b611957565b604051635acfba9d60e11b8152600490fd5b604051638a0704d360e01b8152600490fd5b6033546001600160a01b03163303611aa957565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b603380546001600160a01b039283166001600160a01b0319821681179092559091167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b15611b3d57565b60405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608490fd5b60008052606960205260406000205560ff60005460081c1615611bbf5761149c33611aed565b60405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608490fd5b634e487b7160e01b600052601160045260246000fd5b6000198114611c3d5760010190565b611c18565b634e487b7160e01b600052603260045260246000fd5b9190811015611c7a5760051b81013590605e19813603018212156104b2570190565b611c42565b6060813603126104b25760405190611c9682611402565b6001600160401b039080358281116104b25781019036601f830112156104b25781359260209084116113e257604051611cd8601f8601601f191683018261146e565b848152368286860101116104b25760008286611d0b97826040980183860137830101528552808201359085015201610747565b604082015290565b908160209103126104b2575190565b6040513d6000823e3d90fd5b9190916001600160401b0380809416911601918211611c3d57565b8151815560208201516001909101805467ffffffffffffffff19166001600160401b0392831617815561149c9290919060400151825467ffffffffffffffff60401b1916911660401b67ffffffffffffffff60401b16179055565b6001600160401b039182169082160391908211611c3d57565b6001600160401b03809116908114611c3d5760010190565b906060600291611e356001600160401b03611e098184511687906001600160401b03166001600160401b0319825416179055565b6020830151865467ffffffffffffffff60401b1916911660401b67ffffffffffffffff60401b16178555565b604081015160018501550151910155565b90939293611e5261219d565b6001600160401b03929091908084168015611f2f57611e7c6118bf606b546001600160401b031690565b10611f1d57611eb56118bf611ea586936001600160401b0316600052606a602052604060002090565b5460401c6001600160401b031690565b911603611f0b5781905b1691161115611ef957611772611ed9611ee193369061166b565b91369061156a565b611ee757565b6040516309bde33960e01b8152600490fd5b60405163b9b18f5760e01b8152600490fd5b604051632bd2e3e760e01b8152600490fd5b60405163bb14c20560e01b8152600490fd5b5050611f4e816001600160401b03166000526069602052604060002090565b5415611f785782808316911611611f66578190611ebf565b604051630f2b74f160e11b8152600490fd5b6040516324cbdcc360e11b8152600490fd5b606b546001600160401b0390818082169160401c16808211611fab57505050565b600101918211611c3d57611fbe826121d1565b611fc6575050565b677fffffffffffffff611fdc83611fe693611da4565b60011c1682611d2e565b90611ff0826121d1565b15611fff575061149c90612005565b61149c91505b606b54906001600160401b038082169281808260401c16851191821592612191575b505061217f5761204a826001600160401b0316600052606a602052604060002090565b9061206082546001600160401b039060401c1690565b606880546001600160c01b031660c083901b6001600160c01b031916179055926120d1600284019182546120a7876001600160401b03166000526069602052604060002090565b5567ffffffffffffffff60401b606b549160401b169067ffffffffffffffff60401b191617606b55565b60019290920154917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316803b156104b2576040516333d6247d60e01b815260048101949094526000908490602490829084905af19283156104ad577f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e9361216c575b5054604051908152921691602090a3565b806104a1612179926113cf565b3861215b565b60405163d086b70b60e01b8152600490fd5b16841190508138612027565b606b546001600160401b0390811680156121c657600052606a60205260406000205460401c1690565b505060685460c01c90565b6001600160401b03809116600052606a6020526121fd816040600020541682606b5460801c1690611d2e565b429116111590565b6001600160401b0381116113e25760051b60200190565b9061222682612205565b612233604051918261146e565b8281528092612244601f1991612205565b0190602036910137565b805115611c7a5760200190565b805160011015611c7a5760400190565b805160021015611c7a5760600190565b805160031015611c7a5760800190565b8051821015611c7a5760209160051b010190565b6040516122ab816113e7565b6001928382526020368184013760005b8481106122db575050906122ce91612348565b6122d55790565b50600090565b806122f69160051b8301516122f0828661228b565b52611c2e565b6122bb565b9060018201809211611c3d57565b9060028201809211611c3d57565b9060038201809211611c3d57565b9060048201809211611c3d57565b9060058201809211611c3d57565b156104b257565b919091612353612919565b9161235e82516122fb565b90612370608085019283515114612341565b6123786114ab565b6000815260006020820152946000955b8451871015612402576105a46123fc916123cd7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016123c68b8a61228b565b5110612341565b6123f66123e487516123de8c6122fb565b9061228b565b516123ef8b8a61228b565b519061257a565b9061252a565b95612388565b61246695929650612462945061241c61242392945161224e565b519061252a565b82519261243460208201519261248d565b9061244660408086015192015161248d565b916060850151936020612459875161248d565b9601519661266a565b1590565b61246f57600090565b600190565b60405190612481826113e7565b60006020838281520152565b612495612474565b508051158061250a575b6124ef5760208151917f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd479182910151068103908111611c3d57604051916124e5836113e7565b8252602082015290565b506040516124fc816113e7565b600081526000602082015290565b5060208101511561249f565b6040519061252382611438565b6020368337565b6020929160c060609261253b612474565b958693816040519361254c8561141d565b6080368637805185520151828401528051604084015201518482015260066107cf195a01fa1561257857565bfe5b91906060906080612589612474565b94859260206040519261259b84611402565b863685378051845201516020830152604082015260076107cf195a01fa1561257857565b604051906125cc82611453565b600482528160005b608081106125e0575050565b6020906125eb612474565b828285010152016125d4565b60409081519161260683611402565b600283528260005b82811061261a57505050565b602090612625612474565b8282850101520161260e565b6040519061263e826113e7565b8160405161264b816113e7565b60403682378152602060405191612661836113e7565b60403684370152565b979693949291956126796125bf565b956040519761268789611453565b6004895260005b608081106127445750612741999a6126a58961224e565b526126af8861224e565b506126b98861225b565b526126c38761225b565b506126cd8761226b565b526126d78661226b565b506126e18661227b565b526126eb8561227b565b506126f58661224e565b526126ff8561224e565b506127098561225b565b526127138461225b565b5061271d8461226b565b526127278361226b565b506127318361227b565b5261273b8261227b565b50612771565b90565b60209061274f612631565b82828d0101520161268e565b90600682029180830460061490151715611c3d57565b805161277f83518214612341565b6127888161275b565b926127928461221c565b9260005b8381106127d4575050505060209182916127ae612516565b93849260051b910160086107cf195a01fa8015612578576127ce90612341565b51151590565b806127e26128be928461228b565b51516127f66127f08361275b565b8861228b565b52602080612804838661228b565b51015161282161281b6128168561275b565b6122fb565b8961228b565b5261283761282f838761228b565b515160200190565b5161284c61281b6128478561275b565b612309565b52612857828661228b565b51515161286e61281b6128698561275b565b612317565b526128868161287d848861228b565b51015160200190565b5161289b61281b6128968561275b565b612325565b526128a6828661228b565b510151516122f06127f06128b98461275b565b612333565b612796565b6040519060a082018281106001600160401b038211176113e25760405260606080836128ed612474565b81526128f7612631565b6020820152612904612631565b6040820152612911612631565b838201520152565b6129216128c3565b90612c6a61292d6114ab565b7f286cd17282af60cd2295fe74102e263890d3f520e66cb7272426b9e33ad6dc2681526020907f015b0439f72dd97fd07dec5b86314bb06649a69faee911d3b9f51e122f0572248282015284526129826114ab565b7f01bc2d0e1b058937a707d4554e9d2e26a44eaafbbf2933a3f2068cf6866520bf81527f1c44531f30ab63540164d6a11411841f7c845a58b180f69ffa15295be319e82d828201526129d26114ab565b7f148d6010a8956aa2bdc30562b02883e2675e4d005de5d20f4dce773217e9c51681527f1bb933d3051ebfd0bb38d1ed1312777ac2f65bc69896ad8b5422299b2169dd8383820152612a226114ab565b9182528282015281850152612a356114ab565b7e29f2aa65ed44f30bbe6b29c4e7aee173d6b29bded770184bb6a45a7328cbb281527f21e67773eea4fe317bc2521b0e3e46ae3d6ae8d12325a8482e62d3e26d99b47882820152612a846114ab565b7f0f5e5c4e2d6ad50f39334553aba65f4c03ed0f710eb227fe3ee8a0a508a9203381527f0165cb21465ccf2d320a94ce7356be1f42871c5ba5370952ace3ff76c6baab6a83820152612ad46114ab565b918252828201526040850152612ae86114ab565b7f187e4b6e20ff76e3bb84dd72b8ee9d0f1c26de600dbee716f6a25dd53ee6a92481527f021ef001f16908023b3bad33c83004f6e281d367e45a16acba40c340a2da524682820152612b386114ab565b7f2240a5532ccf19f1df460a49fd8fef835d52ae6d4dbea7ff978cf2231a59087981527f26f930b580037b594fbe5eb8527e03ffbcd4f0c70b2077f0757acaf3356835fe83820152612b886114ab565b918252828201526060850152612b9c6125f7565b60808501908152612c08612bae6114ab565b7f08e7628b53d973750e52b28fb4f697879294cfa8843744bbe4569d76848ef13a81527f0ccbdf5308fa160229c6bfea4a1be78dca12ec6e05c564fbc889f3fbc8981d1184820152825190612c028261224e565b5261224e565b507f27b22f17fe29d3725a5e0acf97a97be1da8bf21d5ea25f62de06def24bce7856612c326114ab565b927f03d66c72cdec7209ee63f01f40e08acf8e9a97a9a3a271f82174f0d6c2d2478c84528301525190612c648261225b565b5261225b565b5056fea2646970667358221220f341f6699e187a2b9492abda9b5f6d7de08c04bc0733194f8ad2113f1c75a8ea64736f6c63430008150033","sourceMap":"1071:26702:49:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;1071:26702:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1071:26702:49;10793:10;10784:5;1071:26702;;10784:19;10780:68;;11470:15;;11466:74;;4870:4;11554:32;;11550:94;;1071:26702;11780:13;1071:26702;;;;;;;;;;;;;11892:39;;;-1:-1:-1;;;;;1071:26702:49;;;15424:16;1071:26702;;;;;;;11892:39;1071:26702;11973:13;11484:1;11968:1720;11988:14;;;;;;1071:26702;;13737:43;4150:6;1071:26702;14125:32;1071:26702;;13876:194;1071:26702;;13737:43;;:::i;:::-;1071:26702;13876:194;1071:26702;11780:13;1071:26702;-1:-1:-1;;;;;1071:26702:49;;;;;;;4150:6;;;:::i;:::-;;;;-1:-1:-1;;;;;13983:15:49;1071:26702;;;13876:194;;;4150:6;;13876:194;-1:-1:-1;;;;;1071:26702:49;13876:194;;;4150:6;;13876:194;13834:39;;-1:-1:-1;;;;;1071:26702:49;;;15424:16;1071:26702;;;;;;;13834:39;4150:6;:::i;:::-;-1:-1:-1;;;;;1071:26702:49;-1:-1:-1;;;;;4150:6:49;11780:13;4150:6;;;11780:13;4150:6;;14125:32;11780:13;4150:6;;-1:-1:-1;;;;4150:6:49;;;;;-1:-1:-1;;;4150:6:49;;;;14167:42;;:::i;:::-;14370:13;1071:26702;14370:36;;;;;11484:1;1071:26702;;;;4870:4;;;;;;;14370:36;;;;;;;;;;11968:1720;1071:26702;;14422:38;11484:1;14422:38;;1071:26702;14370:36;;;;;;:::i;:::-;;;:::i;:::-;;;;;;:::i;:::-;11484:1;1071:26702;;12004:3;12092:10;;;;12060:42;12092:10;;;;;:::i;:::-;12060:42;:::i;:::-;12277:25;;4870:4;;;;;12250:66;12567:27;;;;4870:4;;;;;;;12567:41;;;;:134;;;;12004:3;12546:234;;;;;;;4150:6;12815:25;;4870:4;12815:80;12794:184;;13063:22;;4150:6;;;;;;-1:-1:-1;;;;;1071:26702:49;;;4150:6;1071:26702;;;13063:41;;:101;;;;;12004:3;13042:204;;;4870:4;;;;12004:3;4870:4;13362:213;4870:4;13362:213;4870:4;;4150:6;;4870:4;;4150:6;;-1:-1:-1;;;;;1071:26702:49;;;4150:6;1071:26702;;13362:213;;;;;;;4150:6;;;;;;1071:26702;;4150:6;;;1071:26702;4150:6;;;1071:26702;-1:-1:-1;;;;;4150:6:49;;;;;;;;;;;;;13362:213;;;;;;;;;;:::i;:::-;4870:4;13335:254;;4150:6;;-1:-1:-1;;;;;1071:26702:49;;;4150:6;12004:3;;:::i;:::-;11973:13;;;;;;13042:204;1071:26702;;-1:-1:-1;;;13204:27:49;;1071:26702;;13204:27;13063:101;13149:15;;;-1:-1:-1;13063:101:49;;;12794:184;1071:26702;;-1:-1:-1;;;12935:28:49;;1071:26702;;12935:28;12546:234;1071:26702;;-1:-1:-1;;;12741:24:49;;1071:26702;;12741:24;12567:134;1071:26702;-1:-1:-1;;;12628:68:49;;;;;1071:26702;;;;-1:-1:-1;1071:26702:49;;;;11484:1;;1071:26702;;;;12628:68;:21;;1071:26702;12628:68;;;;;;;;11484:1;12628:68;;;12567:134;12628:73;;;12567:134;;;;;;;12628:68;;;;;;-1:-1:-1;12628:68:49;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;11550:94;1071:26702;;-1:-1:-1;;;11609:24:49;;1071:26702;;11609:24;11466:74;1071:26702;;-1:-1:-1;;;11508:21:49;;1071:26702;;11508:21;10780:68;1071:26702;;-1:-1:-1;;;10826:11:49;;1071:26702;;10826:11;1071:26702;;;;;;;:::o;:::-;;;;;;-1:-1:-1;;1071:26702:49;;;;;-1:-1:-1;;;;;5811:35:49;1071:26702;;;;;;;;;;;;;;-1:-1:-1;;1071:26702:49;;;;;-1:-1:-1;;;;;6311:27:49;1071:26702;;;;;;;;;;;;;;-1:-1:-1;;1071:26702:49;;;;7321:27;1071:26702;;;-1:-1:-1;;;;;1071:26702:49;;;;;;;;;;;;-1:-1:-1;;;;;1071:26702:49;;;;;;:::o;:::-;;;-1:-1:-1;;;;;1071:26702:49;;;;;;:::o;:::-;;;;;;-1:-1:-1;;1071:26702:49;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;1071:26702:49;;;;;;:::i;:::-;10793:10;10784:5;-1:-1:-1;;;;;1071:26702:49;10784:19;10780:68;;-1:-1:-1;;;;;1071:26702:49;;24423:55;4549:7;24423:55;;24419:147;;24576:54;1071:26702;;-1:-1:-1;;;;;1071:26702:49;4150:6;;;;;-1:-1:-1;;;;;;4150:6:49;1071:26702;;;;;;24645:56;;1071:26702;;;;;;;24645:56;1071:26702;24419:147;1071:26702;;-1:-1:-1;;;24501:54:49;;1071:26702;;24501:54;10780:68;1071:26702;;-1:-1:-1;;;10826:11:49;;1071:26702;;10826:11;1071:26702;;;;;;-1:-1:-1;;1071:26702:49;;;;;6386:32;1071:26702;-1:-1:-1;;;;;1071:26702:49;;;;;;;;;;;;;;;-1:-1:-1;;1071:26702:49;;;;;-1:-1:-1;;;;;6855:30:49;1071:26702;;;;;;;;;;;;;;-1:-1:-1;;1071:26702:49;;;;;6931:42;1071:26702;-1:-1:-1;;;;;1071:26702:49;;;;;;;;;;;;;;;-1:-1:-1;;1071:26702:49;;;;;;:::i;:::-;10793:10;10784:5;-1:-1:-1;;;;;1071:26702:49;10784:19;10780:68;;22276:15;;;:::i;:::-;1071:26702;;;;;;;-1:-1:-1;;1071:26702:49;;;;;;:::i;:::-;10793:10;10784:5;-1:-1:-1;;;;;1071:26702:49;10784:19;10780:68;;-1:-1:-1;;;;;1071:26702:49;;26279:48;4549:7;26279:48;;26275:117;;26402:40;1071:26702;;-1:-1:-1;;;;1071:26702:49;;;;;;-1:-1:-1;;;1071:26702:49;;;;;;;;;;;;26457:42;;1071:26702;;26457:42;1071:26702;26275:117;1071:26702;;-1:-1:-1;;;26350:31:49;;1071:26702;;26350:31;1071:26702;;;;;;-1:-1:-1;;1071:26702:49;;;;-1:-1:-1;;;;;1071:26702:49;;:::i;:::-;;-1:-1:-1;1071:26702:49;6626:53;1071:26702;;;;-1:-1:-1;1071:26702:49;;;;;;;;;;;-1:-1:-1;;1071:26702:49;;;;;-1:-1:-1;;;;;1071:26702:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1071:26702:49;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;1071:26702:49;;;;;10793:10;10784:5;1071:26702;;10784:19;10780:68;;17902:5;;;;;:::i;:::-;17957:33;1071:26702;;-1:-1:-1;;;;;1071:26702:49;4150:6;;;;-1:-1:-1;;;;;;4150:6:49;1071:26702;;;18000:34;;;-1:-1:-1;;;;;1071:26702:49;;;18000:19;1071:26702;;;;;;;18000:34;1071:26702;-1:-1:-1;;;;;1071:26702:49;;;18102:16;1071:26702;-1:-1:-1;;;;;1071:26702:49;;;;;18098:117;;1071:26702;18272:21;1071:26702;18272:54;;;;;1071:26702;;-1:-1:-1;;;18272:54:49;;1071:26702;18272:54;;1071:26702;;;;-1:-1:-1;;1071:26702:49;;;;;;-1:-1:-1;;18272:54:49;;;;;;;18342:117;18272:54;18342:117;18272:54;;;1071:26702;-1:-1:-1;1071:26702:49;;;;;10793:10;;1071:26702;;;;;;;;;;18342:117;;;;1071:26702;18272:54;;;;;;:::i;:::-;;;;18098:117;18138:20;-1:-1:-1;;;;;4150:6:49;18102:16;4150:6;;18102:16;4150:6;;18138:20;18172:32;-1:-1:-1;;;4150:6:49;18102:16;4150:6;;18102:16;4150:6;;18172:32;18098:117;;1071:26702;;;;;;;;;;;-1:-1:-1;;;;;1071:26702:49;;;;;;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;;;;;10793:10:49;10784:5;1071:26702;;10784:19;10780:68;;23969:38;1071:26702;;;;;;;;-1:-1:-1;;;;;;;1071:26702:49;;;;;;;;;;24023:40;;1071:26702;;24023:40;1071:26702;;;;;;;;;;;;;;1303:62:24;;:::i;:::-;2765:6;1071:26702:49;;-1:-1:-1;;;;;;1071:26702:49;;;;;;;-1:-1:-1;;;;;1071:26702:49;2813:40:24;1071:26702:49;;2813:40:24;1071:26702:49;;;;;;;;;;;-1:-1:-1;;1071:26702:49;;;;;6531:31;1071:26702;;;;;;;;;;;;;;;-1:-1:-1;;1071:26702:49;;;;;;-1:-1:-1;1071:26702:49;6759:63;1071:26702;;;;-1:-1:-1;1071:26702:49;;;;-1:-1:-1;;;;;6759:63:49;;;;;1071:26702;6759:63;;1071:26702;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1071:26702:49;;;;;7218:38;1071:26702;;;;;;;;;;;;;;;-1:-1:-1;;1071:26702:49;;;;1513:6:24;1071:26702:49;;;-1:-1:-1;;;;;1071:26702:49;;;;;;;;;;;;;;-1:-1:-1;;1071:26702:49;;;;-1:-1:-1;1071:26702:49;3314:201:25;1071:26702:49;;;;;3290:14:25;3336:34;;;;;;1071:26702:49;3335:108:25;;;;1071:26702:49;3314:201:25;;:::i;:::-;3525:16;;1071:26702:49;;;3291:13:25;1071:26702:49;;;3291:13:25;1071:26702:49;;3525:16:25;3551:65;;1071:26702:49;3625:1:25;1071:26702:49;;3625:1:25;:::i;:::-;3636:99;;1071:26702:49;3636:99:25;3670:21;1071:26702:49;;3291:13:25;1071:26702:49;;3291:13:25;1071:26702:49;;3670:21:25;1071:26702:49;;3540:1:25;1071:26702:49;;3710:14:25;;1071:26702:49;;3710:14:25;1071:26702:49;3551:65:25;3585:20;1071:26702:49;;;3291:13:25;1071:26702:49;;;3291:13:25;1071:26702:49;;3585:20:25;3551:65;;3335:108;3415:4;1476:19:31;:23;;-1:-1:-1;1476:23:31;3376:66:25;;3335:108;;;;;3376:66;3441:1;1071:26702:49;;;;3425:17:25;3376:66;;;3336:34;3369:1;1071:26702:49;;;3354:16:25;;-1:-1:-1;3336:34:25;;1071:26702:49;;;;;;-1:-1:-1;;1071:26702:49;;;;;;:::i;:::-;10793:10;10784:5;-1:-1:-1;;;;;1071:26702:49;10784:19;10780:68;;-1:-1:-1;;;;;1071:26702:49;;25051:50;4549:7;25051:50;;25047:137;;25194:44;1071:26702;;-1:-1:-1;;;;1071:26702:49;;;;;;-1:-1:-1;;;1071:26702:49;;;;;;;;;;;;25253:46;;1071:26702;;25253:46;1071:26702;25047:137;1071:26702;;-1:-1:-1;;;25124:49:49;;1071:26702;;25124:49;1071:26702;;;;;;-1:-1:-1;;1071:26702:49;;;;;;:::i;:::-;10793:10;10784:5;-1:-1:-1;;;;;1071:26702:49;10784:19;10780:68;;-1:-1:-1;;;;;1071:26702:49;25757:6;25730:33;;25726:100;;1071:26702;4150:6;25898:50;4150:6;-1:-1:-1;;;;;4150:6:49;25835:48;4150:6;;;25835:48;4150:6;1071:26702;;;;;25898:50;1071:26702;25726:100;1071:26702;;-1:-1:-1;;;25786:29:49;;1071:26702;;25786:29;1071:26702;;;;;;-1:-1:-1;;1071:26702:49;;;;;;5519:43;-1:-1:-1;;;;;1071:26702:49;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1071:26702:49;10793:10;10784:5;1071:26702;;10784:19;10780:68;;26854:34;1071:26702;;;;;;;;26809:30;1071:26702;;;26809:30;1071:26702;;;;;;26854:34;1071:26702;;;;;;;-1:-1:-1;;1071:26702:49;;;;;;;-1:-1:-1;;;;;5596:31:49;1071:26702;;;;;;;;;;-1:-1:-1;;1071:26702:49;;;;;5924:32;1071:26702;;;;;;;;;;;;;;;;;-1:-1:-1;;1071:26702:49;;;;;-1:-1:-1;;;;;1071:26702:49;;;:::i;:::-;;-1:-1:-1;1071:26702:49;6211:61;1071:26702;;;-1:-1:-1;1071:26702:49;;6211:61;1071:26702;;6211:61;;1071:26702;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1071:26702:49;;;;;;;:::i;:::-;-1:-1:-1;;;;;1071:26702:49;;;;;;;;;;;;;-1:-1:-1;;1071:26702:49;;;;;-1:-1:-1;;;;;7382:31:49;1071:26702;;;;;;;;;;;;;;;;-1:-1:-1;;1071:26702:49;;;;5996:31;1071:26702;;;;;;;;-1:-1:-1;;;;;1071:26702:49;;;;;;;;;;;;-1:-1:-1;;1071:26702:49;;;;;;5425:59;-1:-1:-1;;;;;1071:26702:49;;;;;;;;;;;;-1:-1:-1;;1071:26702:49;;;;;-1:-1:-1;;;;;7052:33:49;1071:26702;;;;;;;;;;;;;;;;-1:-1:-1;;1071:26702:49;;;;;-1:-1:-1;;;;;6450:28:49;1071:26702;;;;;;;;;;;;;;;;-1:-1:-1;;1071:26702:49;;;;;;7470:35;1071:26702;;;;;;;;;;;;;;;;;;;:::i;:::-;1303:62:24;;:::i;:::-;-1:-1:-1;;;;;1071:26702:49;;2409:22:24;1071:26702:49;;2503:8:24;;;:::i;1071:26702:49:-;;;-1:-1:-1;;;1071:26702:49;;;;;;;;;;;;;;;;;-1:-1:-1;;;1071:26702:49;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1071:26702:49;;;;;;:::o;:::-;;:::i;:::-;;;;;;;-1:-1:-1;;;;;1071:26702:49;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;1071:26702:49;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;1071:26702:49;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;1071:26702:49;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;1071:26702:49;;;;;;;:::o;:::-;;;13362:213;;1071:26702;;;;;;;;-1:-1:-1;;;;;1071:26702:49;;;;;;;:::o;:::-;;;;;;;:::i;:::-;:::o;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;-1:-1:-1;;1071:26702:49;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;-1:-1:-1;;1071:26702:49;;;;;;;-1:-1:-1;1071:26702:49;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;-1:-1:-1;;1071:26702:49;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;-1:-1:-1;;1071:26702:49;;;;;;5655:30;-1:-1:-1;;;;;1071:26702:49;;;;;;;;;;;;-1:-1:-1;;1071:26702:49;;;;;6079:23;1071:26702;;;;;;;;;;;;;;:::i;:::-;15424:31;;;;;;:50;;:31;;-1:-1:-1;;;;;1071:26702:49;;;15424:16;1071:26702;;;;;;;15424:31;:50;1071:26702;-1:-1:-1;;;;;1071:26702:49;;;15424:50;1071:26702;15424:93;15493:24;1071:26702;;;;;15424:93;;:::i;:::-;1071:26702;-1:-1:-1;;;;;15532:15:49;;;1071:26702;;15424:123;15407:219;;4870:4;15640:28;;;;;:::i;:::-;1071:26702;15640:50;15636:112;;15896:5;;;;;;:::i;:::-;1071:26702;;;;;17957:33;1071:26702;;-1:-1:-1;;;;;1071:26702:49;4150:6;;;;-1:-1:-1;;;;;;4150:6:49;1071:26702;;;16046:34;;;-1:-1:-1;;;;;1071:26702:49;;;18000:19;1071:26702;;;;;;;16046:34;1071:26702;16156:20;1071:26702;15493:24;1071:26702;-1:-1:-1;;;;;1071:26702:49;;;;-1:-1:-1;;;;;1071:26702:49;;;16156:20;16152:129;;15922:944;16346:21;-1:-1:-1;;;;;1071:26702:49;16346:54;;;;;1071:26702;;-1:-1:-1;;;16346:54:49;;1071:26702;16346:54;;1071:26702;;;;-1:-1:-1;;1071:26702:49;;;;;;-1:-1:-1;;16346:54:49;;;;;;;16881;16346;16881;16346;;;15922:944;;1071:26702;;;;;16924:10;;1071:26702;;;;;;;;;;16152:129;16196:20;-1:-1:-1;;;;;4150:6:49;18102:16;4150:6;;18102:16;4150:6;;16196:20;16234:32;-1:-1:-1;;;4150:6:49;18102:16;4150:6;;18102:16;4150:6;;16234:32;16152:129;;15922:944;16881:54;15922:944;1071:26702;16881:54;15922:944;;;:::i;:::-;16564:18;;1071:26702;15493:24;1071:26702;-1:-1:-1;;;;;1071:26702:49;;;;16564:18;:::i;:::-;-1:-1:-1;;;;;1071:26702:49;-1:-1:-1;;;;;4150:6:49;15493:24;4150:6;;;15493:24;4150:6;;16564:18;1071:26702;;:::i;:::-;-1:-1:-1;;;;;15532:15:49;1071:26702;;;4150:6;;15532:15;-1:-1:-1;;;;;1071:26702:49;;16640:215;;;4150:6;16640:215;;;4150:6;16640:215;;;;4150:6;16596:41;1071:26702;15493:24;1071:26702;-1:-1:-1;;;;;1071:26702:49;;;;-1:-1:-1;;;;;1071:26702:49;;;16596:23;1071:26702;;;;;;;16596:41;1071:26702;:::i;:::-;15922:944;;15636:112;1071:26702;;-1:-1:-1;;;15713:24:49;;1071:26702;;15713:24;15407:219;1071:26702;;-1:-1:-1;;;15579:36:49;;1071:26702;;15579:36;1599:130:24;1513:6;1071:26702:49;-1:-1:-1;;;;;1071:26702:49;929:10:32;1662:23:24;1071:26702:49;;1599:130:24:o;1071:26702:49:-;;;;;;;;;;;;;;;;;;;;;;;;;2673:187:24;2765:6;1071:26702:49;;-1:-1:-1;;;;;1071:26702:49;;;-1:-1:-1;;;;;;1071:26702:49;;;;;;;;;;2813:40:24;-1:-1:-1;;2813:40:24;2673:187::o;1071:26702:49:-;;;;:::o;:::-;;;-1:-1:-1;;;1071:26702:49;;;;;;;;;;;;;;;;;-1:-1:-1;;;1071:26702:49;;;;;;;10546:197;10650:1;1071:26702;;10630:19;1071:26702;;;10650:1;1071:26702;;;10650:1;1071:26702;;;;;;;1195:12:24;929:10:32;1195:12:24;:::i;1071:26702:49:-;;;-1:-1:-1;;;1071:26702:49;;;;;;;;;;;;;;;;;-1:-1:-1;;;1071:26702:49;;;;;;;4870:4;1071:26702;;;4870:4;;;;;;;;;-1:-1:-1;;4870:4:49;;;;;;;:::o;:::-;;:::i;:::-;1071:26702;;;4870:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;1071:26702;;;;;;:::i;:::-;-1:-1:-1;;;;;4870:4:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;1071:26702;;;13362:213;1071:26702;;-1:-1:-1;;1071:26702:49;4870:4;;1071:26702;;:::i;:::-;4870:4;;;;;;;;;;;;-1:-1:-1;4870:4:49;;1071:26702;4870:4;;1071:26702;4870:4;;;;;;;;;;;;;;;1071:26702;4870:4;;;;;1071:26702;:::i;:::-;;4870:4;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;1071:26702;;4870:4;;;;;;;4150:6;;;;-1:-1:-1;;;;;1071:26702:49;;;;;;4150:6;;;;;;:::o;:::-;4870:4;;1071:26702;;4150:6;;;;;;;;;;-1:-1:-1;;4150:6:49;-1:-1:-1;;;;;1071:26702:49;;;4150:6;;;;;;;1071:26702;4150:6;;;;;-1:-1:-1;;;;4150:6:49;1071:26702;;4150:6;;-1:-1:-1;;;4150:6:49;;;;;1071:26702;-1:-1:-1;;;;;1071:26702:49;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;;;1071:26702:49;;;;;;;;;;;:::o;:::-;;;;;;-1:-1:-1;;;;;1071:26702:49;4150:6;;;1071:26702;;4150:6;-1:-1:-1;;;;;1071:26702:49;-1:-1:-1;;;;;4150:6:49;;;;;;;;1071:26702;;;;4150:6;;;-1:-1:-1;;;;4150:6:49;1071:26702;;4150:6;;-1:-1:-1;;;4150:6:49;;;;;1071:26702;;;;4870:4;1071:26702;;;;;4870:4;1071:26702;;;:::o;18842:1849::-;;;;;19117:22;;:::i;:::-;-1:-1:-1;;;;;1071:26702:49;;;;;;;19230:20;;;;19386:34;1071:26702;19404:16;1071:26702;-1:-1:-1;;;;;1071:26702:49;;;19386:34;-1:-1:-1;19382:106:49;;19847:53;1071:26702;19588:70;;;-1:-1:-1;;;;;1071:26702:49;;;16596:23;1071:26702;;;;;;;19588:70;1071:26702;;;-1:-1:-1;;;;;1071:26702:49;;;19847:53;1071:26702;;19847:53;19843:137;;19226:1196;;;1071:26702;;;20465:41;;20461:116;;1071:26702;;20615:22;1071:26702;;;;:::i;:::-;;;;;:::i;20615:22::-;20611:74;;18842:1849::o;20611:74::-;1071:26702;;-1:-1:-1;;;20660:14:49;;;;;20461:116;1071:26702;;-1:-1:-1;;;20529:37:49;;;;;19843:137;1071:26702;;-1:-1:-1;;;19927:38:49;;;;;19382:106;1071:26702;;-1:-1:-1;;;19447:26:49;;;;;19226:1196;20063:33;;;;-1:-1:-1;;;;;1071:26702:49;;;18000:19;1071:26702;;;;;;;20063:33;1071:26702;20115:26;20111:98;;1071:26702;;;;;;20295:39;20291:121;;19226:1196;;;;20291:121;1071:26702;;-1:-1:-1;;;20361:36:49;;;;;20111:98;1071:26702;;-1:-1:-1;;;20168:26:49;;;;;20911:957;21026:16;1071:26702;-1:-1:-1;;;;;1071:26702:49;;;;;;;;;21026:47;;;21022:840;;20911:957;;;:::o;21022:840::-;1071:26702;4150:6;;;;;;21241:44;;;:::i;:::-;21237:615;;20911:957;;:::o;21237:615::-;1071:26702;21446:35;;21406:100;21446:35;;:::i;:::-;1071:26702;;;21406:100;;:::i;:::-;21616:46;;;;:::i;:::-;;;;21711:18;;;;:::i;21612:226::-;21802:16;;;22494:1149;22763:28;1071:26702;;-1:-1:-1;;;;;1071:26702:49;;;;;;;;;;22744:47;;;;;:97;;;22494:1149;22727:178;;;;22958:62;;-1:-1:-1;;;;;1071:26702:49;;;16596:23;1071:26702;;;;;;;22958:62;1071:26702;;;;-1:-1:-1;;;;;1071:26702:49;;;;;;;17957:33;1071:26702;;-1:-1:-1;;;;;1071:26702:49;4150:6;;;;-1:-1:-1;;;;;;4150:6:49;1071:26702;;;23132:40;23311:46;23226:42;;;1071:26702;;;23182:41;;-1:-1:-1;;;;;1071:26702:49;;;18000:19;1071:26702;;;;;;;23182:41;1071:26702;-1:-1:-1;;;22763:28:49;4150:6;;;;;;-1:-1:-1;;;4150:6:49;;;22763:28;4150:6;;23311:46;23452:28;;;;;1071:26702;;23415:21;-1:-1:-1;;;;;1071:26702:49;23415:66;;;;;1071:26702;;-1:-1:-1;;;23415:66:49;;;;;1071:26702;;;;-1:-1:-1;;1071:26702:49;;;;;;-1:-1:-1;;23415:66:49;;;;;;;23497:139;23415:66;;;22494:1149;-1:-1:-1;1071:26702:49;;;;;;;;;;;23497:139;22494:1149::o;23415:66::-;;;;;;:::i;:::-;;;;22727:178;1071:26702;;-1:-1:-1;;;22873:21:49;;;;;22744:97;1071:26702;22807:34;;;-1:-1:-1;22744:97:49;;;;27048:249;27123:16;1071:26702;-1:-1:-1;;;;;1071:26702:49;;;27123:20;;1071:26702;;-1:-1:-1;1071:26702:49;27166:23;1071:26702;;;-1:-1:-1;1071:26702:49;;;;;27159:66;:::o;27119:172::-;1071:26702;;27263:17;1071:26702;;;27256:24;:::o;27529:242::-;-1:-1:-1;;;;;1071:26702:49;;;-1:-1:-1;1071:26702:49;27648:23;1071:26702;;27648:84;1071:26702;;-1:-1:-1;1071:26702:49;;;;27713:19;1071:26702;;;;27648:84;;:::i;:::-;27748:15;1071:26702;;27648:115;;;27529:242::o;1071:26702::-;-1:-1:-1;;;;;1071:26702:49;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;13362:213;1071:26702;13362:213;;1071:26702;;:::i;:::-;;;;;;;;:::o;:::-;4870:4;;1071:26702;;;;;;:::o;:::-;4870:4;;6100:1:62;1071:26702:49;;;;;;;:::o;:::-;4870:4;;6120:1:62;1071:26702:49;;;;;;;:::o;:::-;4870:4;;6140:1:62;1071:26702:49;;;;;;;:::o;:::-;4870:4;;1071:26702;;;;;;;;;;;;:::o;9322:400:62:-;1071:26702:49;;;;;:::i;:::-;9482:1:62;1071:26702:49;;;;;;;;;;-1:-1:-1;9519:16:62;;;;;;9604:26;;;;;;:::i;:::-;;;9651:11;:::o;9600:116::-;9693:12;-1:-1:-1;9693:12:62;:::o;9537:3::-;1071:26702:49;9537:3:62;1071:26702:49;;;;;;9555:25:62;;;;:::i;:::-;4150:6:49;9537:3:62;:::i;:::-;9507:10;;1071:26702:49;;8680:1:62;1071:26702:49;;;;;;;:::o;:::-;;4201:1:62;1071:26702:49;;;;;;;:::o;:::-;;4244:1:62;1071:26702:49;;;;;;;:::o;:::-;;4287:1:62;1071:26702:49;;;;;;;:::o;:::-;;4330:1:62;1071:26702:49;;;;;;;:::o;:::-;;;;:::o;8396:921:62:-;;;;8633:14;;:::i;:::-;4870:4:49;8665:16:62;4870:4:49;;8665:16:62;:::i;:::-;8685:12;8657:48;8685:12;;;;;;4870:4:49;8665:39:62;8657:48;:::i;:::-;1071:26702:49;;:::i;:::-;-1:-1:-1;4150:6:49;;-1:-1:-1;8792:21:62;;;4150:6:49;8828:10:62;-1:-1:-1;8823:197:62;8858:3;4870:4:49;;8840:16:62;;;;;8936:73;8858:3;8885:8;8877:38;8521:77;8885:8;;;;:::i;:::-;1071:26702:49;8885:29:62;8877:38;:::i;:::-;8959:49;8978:19;:12;;8991:5;;;:::i;:::-;8978:19;;:::i;:::-;;8999:8;;;;:::i;:::-;1071:26702:49;8959:49:62;;:::i;:::-;8936:73;;:::i;8858:3::-;8828:10;;;8840:16;9088:194;8840:16;;;;9089:193;8840:16;;9059:15;9036:39;8840:16;;9059:12;:15;:::i;:::-;;9036:39;;:::i;:::-;9124:7;;9133;9155:20;8792:21;9133:7;;;9155:20;;:::i;:::-;9177:8;9200:23;1071:26702:49;9177:8:62;;;;9215:7;;;9200:23;:::i;:::-;9225:8;;;;;9263;8792:21;9248:24;9263:8;;9248:24;:::i;:::-;9274:7;;;9089:193;;:::i;:::-;9088:194;;1071:26702:49;9088:194:62;9085:207;;-1:-1:-1;8396:921:62;:::o;9085:207::-;8680:1;9284:8;:::o;1071:26702:49:-;;;;;;;:::i;:::-;-1:-1:-1;1071:26702:49;;;;;;;:::o;2077:340:62:-;1071:26702:49;;:::i;:::-;;;;2312:8:62;:20;;;2077:340;2308:58;;2401:3;1071:26702:49;;2221:77:62;;2401:3;;;;1071:26702:49;;;;;;;;;;;;;;;:::i;:::-;4150:6;;2401:3:62;2383:27;;4150:6:49;2077:340:62;:::o;2308:58::-;1071:26702:49;;;;;;:::i;:::-;-1:-1:-1;4150:6:49;;-1:-1:-1;2353:13:62;;;4150:6:49;2346:20:62;:::o;2312:::-;2324:3;;;;1071:26702:49;2324:8:62;2312:20;;1071:26702:49;;;;;;;:::i;:::-;;;;;:::o;2468:493:62:-;2641:4;2468:493;;2727:202;1071:26702:49;2468:493:62;1071:26702:49;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;4150:6;;2641:4:62;1071:26702:49;;;;4150:6;1071:26702;;;;;4150:6;2691:4:62;1071:26702:49;;;;4150:6;2727:202:62;-1:-1:-1;;2727:202:62;;;;;;2468:493::o;2727:202::-;;3118:454;;;1071:26702:49;3118:454:62;3337:202;1071:26702:49;;:::i;:::-;;;;3280:3:62;1071:26702:49;;;;;;:::i;:::-;;;;;;;4150:6;;3280:3:62;1071:26702:49;3280:3:62;1071:26702:49;;4150:6;1071:26702;;;4150:6;3337:202:62;-1:-1:-1;;3337:202:62;;;;;;3118:454::o;1071:26702:49:-;;;;;;;:::i;:::-;6017:1:62;1071:26702:49;;;-1:-1:-1;1071:26702:49;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;6916:156:62;1071:26702:49;;;-1:-1:-1;1071:26702:49;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::o;5714:552:62:-;;;;;;;;6003:16;;:::i;:::-;1071:26702:49;;;;;;;:::i;:::-;6017:1:62;1071:26702:49;;-1:-1:-1;1071:26702:49;;;;;;6077:10:62;6244:15;6077:10;;;;;:::i;:::-;;;;;:::i;:::-;;6097;;;:::i;:::-;;;;;:::i;:::-;;6117;;;:::i;:::-;;;;;:::i;:::-;;6137;;;:::i;:::-;;;;;:::i;:::-;;6157;;;:::i;:::-;;;;;:::i;:::-;;6177;;;:::i;:::-;;;;;:::i;:::-;;6197;;;:::i;:::-;;;;;:::i;:::-;;6217;;;:::i;:::-;;;;;:::i;:::-;;6244:15;:::i;:::-;5714:552;:::o;1071:26702:49:-;;;;;:::i;:::-;;;;;;;;;;;;3985:1:62;1071:26702:49;;;;;;3985:1:62;1071:26702:49;;;;;;;:::o;3783:923:62:-;4870:4:49;;3881:31:62;4870:4:49;;3889:22:62;;3881:31;:::i;:::-;3974:12;;;:::i;:::-;4018:21;;;;:::i;:::-;4054:10;-1:-1:-1;4066:12:62;;;;;;1071:26702:49;;;;4166:7:62;1071:26702:49;;;;;:::i;:::-;4415:231:62;;;4330:1;4415:231;;;;-1:-1:-1;;4415:231:62;;;;;;;4655:16;;;:::i;:::-;1071:26702:49;4688:11:62;;3783:923;:::o;4080:3::-;4126:5;;4080:3;4126:5;;;:::i;:::-;;1071:26702:49;4107:26:62;4113:5;;;:::i;:::-;4107:26;;:::i;:::-;4150:6:49;4166:7:62;:5;;;;;:::i;:::-;;:7;1071:26702:49;4147:26:62;4153:9;:5;;;:::i;:::-;:9;:::i;:::-;4147:26;;:::i;:::-;4150:6:49;4206:10:62;:5;;;;:::i;:::-;;:7;1071:26702:49;;;;4206:10:62;1071:26702:49;4187:29:62;4193:9;:5;;;:::i;:::-;:9;:::i;4187:29::-;4150:6:49;4249:5:62;;;;:::i;:::-;;:7;1071:26702:49;4230:29:62;4236:9;:5;;;:::i;:::-;:9;:::i;4230:29::-;4150:6:49;4292:10:62;:5;;;;;:::i;:::-;;:7;;1071:26702:49;;;;4292:10:62;1071:26702:49;4273:29:62;4279:9;:5;;;:::i;:::-;:9;:::i;4273:29::-;4150:6:49;4335:5:62;;;;:::i;:::-;;:7;;1071:26702:49;4316:29:62;4322:9;:5;;;:::i;:::-;:9;:::i;4080:3::-;4054:10;;1071:26702:49;;;;;;;;;;-1:-1:-1;;;;;1071:26702:49;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::o;6617:1774:62:-;1071:26702:49;;:::i;:::-;;8194:190:62;1071:26702:49;;:::i;:::-;6725:77:62;4150:6:49;;6709:171:62;;6804:75;6709:171;;;4150:6:49;6698:182:62;;1071:26702:49;;:::i;:::-;6917:75:62;4150:6:49;;6994:77:62;6916:156;;;4150:6:49;1071:26702;;:::i;:::-;7075:76:62;4150:6:49;;7153:77:62;7074:157;;;4150:6:49;1071:26702;;:::i;:::-;4150:6;;;6900:332:62;;;4150:6:49;6890:7:62;;;:342;1071:26702:49;;:::i;:::-;7270:74:62;4150:6:49;;7346:77:62;7269:155;;;4150:6:49;1071:26702;;:::i;:::-;7427:76:62;4150:6:49;;7505:75:62;7426:155;;;4150:6:49;1071:26702;;:::i;:::-;4150:6;;;7253:329:62;;;4150:6:49;1071:26702;7242:8:62;;:340;1071:26702:49;;:::i;:::-;7620:77:62;4150:6:49;;7699:75:62;7619:156;;;4150:6:49;1071:26702;;:::i;:::-;7778:77:62;4150:6:49;;7857:77:62;7777:158;;;4150:6:49;1071:26702;;:::i;:::-;4150:6;;;7603:333:62;;;4150:6:49;7592:8:62;;;:344;7961:24;;:::i;:::-;7946:12;;;:39;;;7995:189;1071:26702:49;;:::i;:::-;8029:76:62;4150:6:49;;8107:76:62;8013:171;;;4150:6:49;7995:12:62;;:189;;;;:::i;:::-;;;:::i;:::-;;8306:77;1071:26702:49;;:::i;:::-;4150:6;8228:76:62;4150:6:49;;8212:172:62;;4150:6:49;8194:12:62;:190;;;;:::i;:::-;;;:::i;:::-;;6617:1774::o","linkReferences":{},"immutableReferences":{"52501":[{"start":1552,"length":32},{"start":2888,"length":32},{"start":4750,"length":32},{"start":6354,"length":32},{"start":8411,"length":32}],"52504":[{"start":1059,"length":32},{"start":4226,"length":32}],"52506":[{"start":4441,"length":32}],"52508":[{"start":739,"length":32},{"start":1956,"length":32},{"start":2290,"length":32},{"start":2374,"length":32},{"start":2741,"length":32},{"start":3167,"length":32},{"start":3858,"length":32},{"start":4059,"length":32},{"start":4299,"length":32},{"start":6030,"length":32}]}},"methodIdentifiers":{"admin()":"f851a440","batchFee()":"f8b823e4","batchNumToStateRoot(uint64)":"5392c5e0","bridgeAddress()":"a3c573eb","chainID()":"adc879e9","consolidatePendingState(uint64)":"4a910e6a","forceBatchTimeout()":"c754c7ed","getLastVerifiedBatch()":"c0ed84e0","globalExitRootManager()":"d02103ca","initialize(bytes32)":"9498bd71","isForcedBatchDisallowed()":"ed6b0104","isPendingStateConsolidable(uint64)":"383b3be8","lastBatchSequenced()":"423fa856","lastForceBatch()":"e7a7ed02","lastPendingState()":"458c0477","lastPendingStateConsolidated()":"4a1a89a7","lastTimestamp()":"19d8ac61","lastVerifiedBatch()":"7fcb3653","multiplierBatchFee()":"afd23cbe","owner()":"8da5cb5b","pendingAdmin()":"26782247","pendingStateTimeout()":"d939b315","pendingStateTransitions(uint256)":"837a4738","renounceOwnership()":"715018a6","sequenceBatches((bytes,bytes32,uint64)[])":"03537393","sequencedBatches(uint64)":"b4d63f58","setForceBatchTimeout(uint64)":"4e487706","setPendingStateTimeout(uint64)":"9c9f3dfe","setTrustedAggregatorTimeout(uint64)":"394218e9","setTrustedSequencer(address)":"6ff512cc","setVerifyBatchTimeTarget(uint64)":"a066215c","transferAdminRole(address)":"ada8f919","transferOwnership(address)":"f2fde38b","trustedAggregatorTimeout()":"841b24d7","trustedSequencer()":"cfa8ed47","verifyBatchTimeTarget()":"0a0d9fbe","verifyBatches(uint64,uint64,uint64,bytes32,bytes32,((uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256)),uint256[1])":"fc3781bd","verifyBatchesTrustedAggregator(uint64,uint64,uint64,bytes32,bytes32,((uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256)),uint256[1])":"6d00000a","verifyTx(((uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256)),uint256[1])":"f48d7729"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IEigenGlobalExitRoot\",\"name\":\"_globalExitRootManager\",\"type\":\"address\"},{\"internalType\":\"contract IEigenBridge\",\"name\":\"_bridgeAddress\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"_chainID\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BatchAlreadyVerified\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BatchNotSequencedOrNotSequenceEnd\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExceedMaxVerifyBatches\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FinalNumBatchBelowLastVerifiedBatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FinalNumBatchDoesNotMatchPendingState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FinalPendingStateNumInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ForceBatchNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ForceBatchesOverflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ForcedDataDoesNotMatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GlobalExitRootNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HaltTimeoutNotExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InitNumBatchAboveLastVerifiedBatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InitNumBatchDoesNotMatchPendingState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRangeBatchTimeTarget\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRangeForceBatchTimeout\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRangeMultiplierBatchFee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NewAccInputHashDoesNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NewPendingStateTimeoutMustBeLower\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NewStateRootNotInsidePrime\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NewTrustedAggregatorTimeoutMustBeLower\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OldAccInputHashDoesNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OldStateRootDoesNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyTrustedAggregator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyTrustedSequencer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PendingStateDoesNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PendingStateInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PendingStateNotConsolidable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PendingStateTimeoutExceedHaltAggregationTimeout\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SequenceZeroBatches\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SequencedTimestampBelowForcedTimestamp\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SequencedTimestampInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StoredRootMustBeDifferentThanNewRoot\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransactionsLengthAboveMax\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TrustedAggregatorTimeoutExceedHaltAggregationTimeout\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TrustedAggregatorTimeoutNotExpired\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AcceptAdminRole\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"numBatch\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"pendingStateNum\",\"type\":\"uint64\"}],\"name\":\"ConsolidatePendingState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"storedStateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"provedStateRoot\",\"type\":\"bytes32\"}],\"name\":\"ProveNonDeterministicPendingState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"numBatch\",\"type\":\"uint64\"}],\"name\":\"SequenceBatches\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"numBatch\",\"type\":\"uint64\"}],\"name\":\"SequenceForceBatches\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"newforceBatchTimeout\",\"type\":\"uint64\"}],\"name\":\"SetForceBatchTimeout\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"newPendingStateTimeout\",\"type\":\"uint64\"}],\"name\":\"SetPendingStateTimeout\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newTrustedAggregator\",\"type\":\"address\"}],\"name\":\"SetTrustedAggregator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"newTrustedAggregatorTimeout\",\"type\":\"uint64\"}],\"name\":\"SetTrustedAggregatorTimeout\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newTrustedSequencer\",\"type\":\"address\"}],\"name\":\"SetTrustedSequencer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"newTrustedSequencerURL\",\"type\":\"string\"}],\"name\":\"SetTrustedSequencerURL\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"newVerifyBatchTimeTarget\",\"type\":\"uint64\"}],\"name\":\"SetVerifyBatchTimeTarget\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newPendingAdmin\",\"type\":\"address\"}],\"name\":\"TransferAdminRole\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"numBatch\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"aggregator\",\"type\":\"address\"}],\"name\":\"VerifyBatches\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"numBatch\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"aggregator\",\"type\":\"address\"}],\"name\":\"VerifyBatchesTrustedAggregator\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"batchNumToStateRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridgeAddress\",\"outputs\":[{\"internalType\":\"contract IEigenBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"chainID\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"pendingStateNum\",\"type\":\"uint64\"}],\"name\":\"consolidatePendingState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"forceBatchTimeout\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastVerifiedBatch\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"globalExitRootManager\",\"outputs\":[{\"internalType\":\"contract IEigenGlobalExitRoot\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isForcedBatchDisallowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"pendingStateNum\",\"type\":\"uint64\"}],\"name\":\"isPendingStateConsolidable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastBatchSequenced\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastForceBatch\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastPendingState\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastPendingStateConsolidated\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastTimestamp\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastVerifiedBatch\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"multiplierBatchFee\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingStateTimeout\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"pendingStateTransitions\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"lastVerifiedBatch\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"exitRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"transactions\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"globalExitRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"internalType\":\"struct EigenZkVM.BatchData[]\",\"name\":\"batches\",\"type\":\"tuple[]\"}],\"name\":\"sequenceBatches\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"sequencedBatches\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"accInputHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sequencedTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"previousLastBatchSequenced\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newforceBatchTimeout\",\"type\":\"uint64\"}],\"name\":\"setForceBatchTimeout\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newPendingStateTimeout\",\"type\":\"uint64\"}],\"name\":\"setPendingStateTimeout\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newTrustedAggregatorTimeout\",\"type\":\"uint64\"}],\"name\":\"setTrustedAggregatorTimeout\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newTrustedSequencer\",\"type\":\"address\"}],\"name\":\"setTrustedSequencer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newVerifyBatchTimeTarget\",\"type\":\"uint64\"}],\"name\":\"setVerifyBatchTimeTarget\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newPendingAdmin\",\"type\":\"address\"}],\"name\":\"transferAdminRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"trustedAggregatorTimeout\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"trustedSequencer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifyBatchTimeTarget\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"pendingStateNum\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"initNumBatch\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"finalNewBatch\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"newLocalExitRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"newStateRoot\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct Pairing.G1Point\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct Pairing.G2Point\",\"name\":\"b\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct Pairing.G1Point\",\"name\":\"c\",\"type\":\"tuple\"}],\"internalType\":\"struct Verifier.Proof\",\"name\":\"proof\",\"type\":\"tuple\"},{\"internalType\":\"uint256[1]\",\"name\":\"input\",\"type\":\"uint256[1]\"}],\"name\":\"verifyBatches\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"pendingStateNum\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"initNumBatch\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"finalNewBatch\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"newLocalExitRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"newStateRoot\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct Pairing.G1Point\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct Pairing.G2Point\",\"name\":\"b\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct Pairing.G1Point\",\"name\":\"c\",\"type\":\"tuple\"}],\"internalType\":\"struct Verifier.Proof\",\"name\":\"proof\",\"type\":\"tuple\"},{\"internalType\":\"uint256[1]\",\"name\":\"input\",\"type\":\"uint256[1]\"}],\"name\":\"verifyBatchesTrustedAggregator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct Pairing.G1Point\",\"name\":\"a\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct Pairing.G2Point\",\"name\":\"b\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct Pairing.G1Point\",\"name\":\"c\",\"type\":\"tuple\"}],\"internalType\":\"struct Verifier.Proof\",\"name\":\"proof\",\"type\":\"tuple\"},{\"internalType\":\"uint256[1]\",\"name\":\"input\",\"type\":\"uint256[1]\"}],\"name\":\"verifyTx\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"r\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"BatchAlreadyVerified()\":[{\"details\":\"Thrown when the batch is already verified when attempting to activate the emergency state\"}],\"BatchNotSequencedOrNotSequenceEnd()\":[{\"details\":\"Thrown when the batch is not sequenced or not at the end of a sequence when attempting to activate the emergency state\"}],\"ExceedMaxVerifyBatches()\":[{\"details\":\"Thrown when attempting to sequence or verify more batches than _MAX_VERIFY_BATCHES\"}],\"FinalNumBatchBelowLastVerifiedBatch()\":[{\"details\":\"Thrown when the final verification batch is below or equal the last verification batch\"}],\"FinalNumBatchDoesNotMatchPendingState()\":[{\"details\":\"Thrown when the final num batch does not match with the one in the pending state\"}],\"FinalPendingStateNumInvalid()\":[{\"details\":\"Thrown when the final pending state num is not in a valid range\"}],\"ForceBatchNotAllowed()\":[{\"details\":\"Thrown when force batch is not allowed\"}],\"ForceBatchesOverflow()\":[{\"details\":\"Thrown when there are more sequenced force batches than were actually submitted, should be unreachable\"}],\"ForcedDataDoesNotMatch()\":[{\"details\":\"Thrown when the forced data does not match\"}],\"GlobalExitRootNotExist()\":[{\"details\":\"Thrown when a global exit root is not zero and does not exist\"}],\"HaltTimeoutNotExpired()\":[{\"details\":\"Thrown when the halt timeout is not expired when attempting to activate the emergency state\"}],\"InitNumBatchAboveLastVerifiedBatch()\":[{\"details\":\"Thrown when the init verification batch is above the last verification batch\"}],\"InitNumBatchDoesNotMatchPendingState()\":[{\"details\":\"Thrown when the init num batch does not match with the one in the pending state\"}],\"InvalidProof()\":[{\"details\":\"Thrown when the zkproof is not valid\"}],\"InvalidRangeBatchTimeTarget()\":[{\"details\":\"Thrown when attempting to set a batch time target in an invalid range of values\"}],\"InvalidRangeForceBatchTimeout()\":[{\"details\":\"Thrown when attempting to set a force batch timeout in an invalid range of values\"}],\"InvalidRangeMultiplierBatchFee()\":[{\"details\":\"Thrown when attempting to set a new multiplier batch fee in a invalid range of values\"}],\"NewAccInputHashDoesNotExist()\":[{\"details\":\"Thrown when the new accumulate input hash does not exist\"}],\"NewPendingStateTimeoutMustBeLower()\":[{\"details\":\"Thrown when attempting to set a new pending state timeout equal or bigger than current one\"}],\"NewStateRootNotInsidePrime()\":[{\"details\":\"Thrown when the new state root is not inside prime\"}],\"NewTrustedAggregatorTimeoutMustBeLower()\":[{\"details\":\"Thrown when attempting to set a new trusted aggregator timeout equal or bigger than current one\"}],\"OldAccInputHashDoesNotExist()\":[{\"details\":\"Thrown when the old accumulate input hash does not exist\"}],\"OldStateRootDoesNotExist()\":[{\"details\":\"Thrown when the old state root of a certain batch does not exist\"}],\"OnlyAdmin()\":[{\"details\":\"Thrown when the caller is not the admin\"}],\"OnlyPendingAdmin()\":[{\"details\":\"Thrown when the caller is not the pending admin\"}],\"OnlyTrustedAggregator()\":[{\"details\":\"Thrown when the caller is not the trusted aggregator\"}],\"OnlyTrustedSequencer()\":[{\"details\":\"Thrown when the caller is not the trusted sequencer\"}],\"PendingStateDoesNotExist()\":[{\"details\":\"Thrown when attempting to access a pending state that does not exist\"}],\"PendingStateInvalid()\":[{\"details\":\"Thrown when attempting to consolidate a pending state that is already consolidated or does not exist\"}],\"PendingStateNotConsolidable()\":[{\"details\":\"Thrown when attempting to consolidate a pending state not yet consolidable\"}],\"PendingStateTimeoutExceedHaltAggregationTimeout()\":[{\"details\":\"Thrown when the pending state timeout exceeds the _HALT_AGGREGATION_TIMEOUT\"}],\"SequenceZeroBatches()\":[{\"details\":\"Thrown when attempting to sequence 0 batches\"}],\"SequencedTimestampBelowForcedTimestamp()\":[{\"details\":\"Thrown when the sequenced timestamp is below the forced minimum timestamp\"}],\"SequencedTimestampInvalid()\":[{\"details\":\"Thrown when a sequenced timestamp is not inside a correct range.\"}],\"StoredRootMustBeDifferentThanNewRoot()\":[{\"details\":\"Thrown when the stored root matches the new root proving a different state\"}],\"TransactionsLengthAboveMax()\":[{\"details\":\"Thrown when transactions array length is above _MAX_TRANSACTIONS_BYTE_LENGTH.\"}],\"TrustedAggregatorTimeoutExceedHaltAggregationTimeout()\":[{\"details\":\"Thrown when the trusted aggregator timeout exceeds the _HALT_AGGREGATION_TIMEOUT\"}],\"TrustedAggregatorTimeoutNotExpired()\":[{\"details\":\"Thrown when there are more sequenced force batches than were actually submitted\"}]},\"events\":{\"AcceptAdminRole(address)\":{\"details\":\"Emitted when the pending admin accepts the admin role\"},\"ConsolidatePendingState(uint64,bytes32,uint64)\":{\"details\":\"Emitted when pending state is consolidated\"},\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"ProveNonDeterministicPendingState(bytes32,bytes32)\":{\"details\":\"Emitted when is proved a different state given the same batches\"},\"SequenceBatches(uint64)\":{\"details\":\"Emitted when the trusted sequencer sends a new batch of transactions\"},\"SequenceForceBatches(uint64)\":{\"details\":\"Emitted when forced batches are sequenced by not the trusted sequencer\"},\"SetForceBatchTimeout(uint64)\":{\"details\":\"Emitted when the admin update the force batch timeout\"},\"SetPendingStateTimeout(uint64)\":{\"details\":\"Emitted when the admin updates the pending state timeout\"},\"SetTrustedAggregator(address)\":{\"details\":\"Emitted when the admin updates the trusted aggregator address\"},\"SetTrustedAggregatorTimeout(uint64)\":{\"details\":\"Emitted when the admin updates the trusted aggregator timeout\"},\"SetTrustedSequencer(address)\":{\"details\":\"Emitted when the admin updates the trusted sequencer address\"},\"SetTrustedSequencerURL(string)\":{\"details\":\"Emitted when the admin updates the sequencer URL\"},\"SetVerifyBatchTimeTarget(uint64)\":{\"details\":\"Emitted when the admin updates the verify batch timeout\"},\"TransferAdminRole(address)\":{\"details\":\"Emitted when the admin starts the two-step transfer role setting a new pending admin\"},\"VerifyBatches(uint64,bytes32,address)\":{\"details\":\"Emitted when a aggregator verifies batches\"},\"VerifyBatchesTrustedAggregator(uint64,bytes32,address)\":{\"details\":\"Emitted when the trusted aggregator verifies batches\"}},\"kind\":\"dev\",\"methods\":{\"consolidatePendingState(uint64)\":{\"params\":{\"pendingStateNum\":\"Pending state to consolidate\"}},\"constructor\":{\"params\":{\"_bridgeAddress\":\"Bridge address\",\"_chainID\":\"L2 chainID\",\"_globalExitRootManager\":\"Global exit root manager address\"}},\"initialize(bytes32)\":{\"params\":{\"stateRoot\":\"Rollup genesis root\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"sequenceBatches((bytes,bytes32,uint64)[])\":{\"params\":{\"batches\":\"Struct array which holds the necessary data to append new batches to the sequence\"}},\"setForceBatchTimeout(uint64)\":{\"params\":{\"newforceBatchTimeout\":\"New force batch timeout\"}},\"setPendingStateTimeout(uint64)\":{\"params\":{\"newPendingStateTimeout\":\"Trusted aggregator timeout\"}},\"setTrustedAggregatorTimeout(uint64)\":{\"params\":{\"newTrustedAggregatorTimeout\":\"Trusted aggregator timeout\"}},\"setTrustedSequencer(address)\":{\"params\":{\"newTrustedSequencer\":\"Address of the new trusted sequencer\"}},\"setVerifyBatchTimeTarget(uint64)\":{\"params\":{\"newVerifyBatchTimeTarget\":\"Verify batch time target\"}},\"transferAdminRole(address)\":{\"params\":{\"newPendingAdmin\":\"Address of the new pending admin\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"verifyBatches(uint64,uint64,uint64,bytes32,bytes32,((uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256)),uint256[1])\":{\"params\":{\"finalNewBatch\":\"Last batch aggregator intends to verify\",\"initNumBatch\":\"Batch which the aggregator starts the verification\",\"newLocalExitRoot\":\"New local exit root once the batch is processed\",\"newStateRoot\":\"New State root once the batch is processed\",\"pendingStateNum\":\"Init pending state, 0 if consolidated state is used\",\"proof\":\"groth16 proof\"}},\"verifyBatchesTrustedAggregator(uint64,uint64,uint64,bytes32,bytes32,((uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256)),uint256[1])\":{\"params\":{\"finalNewBatch\":\"Last batch aggregator intends to verify\",\"initNumBatch\":\"Batch which the aggregator starts the verification\",\"input\":\"Public input\",\"newLocalExitRoot\":\"New local exit root once the batch is processed\",\"newStateRoot\":\"New State root once the batch is processed\",\"pendingStateNum\":\"Init pending state, 0 if consolidated state is used\",\"proof\":\"Groth16 proof\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"consolidatePendingState(uint64)\":{\"notice\":\"Allows to consolidate any pending state that has already exceed the pendingStateTimeout Can be called by the trusted aggregator, which can consolidate any state without the timeout restrictions\"},\"getLastVerifiedBatch()\":{\"notice\":\"Get the last verified batch\"},\"isPendingStateConsolidable(uint64)\":{\"notice\":\"Returns a boolean that indicates if the pendingStateNum is or not consolidable Note that his function does not check if the pending state currently exists, or if it's consolidated already\"},\"sequenceBatches((bytes,bytes32,uint64)[])\":{\"notice\":\"Allows a sequencer to send multiple batches\"},\"setForceBatchTimeout(uint64)\":{\"notice\":\"Allow the admin to set the forcedBatchTimeout The new value can only be lower, except if emergency state is active\"},\"setPendingStateTimeout(uint64)\":{\"notice\":\"Allow the admin to set a new trusted aggregator timeout The timeout can only be lowered, except if emergency state is active\"},\"setTrustedAggregatorTimeout(uint64)\":{\"notice\":\"Allow the admin to set a new pending state timeout The timeout can only be lowered, except if emergency state is active\"},\"setTrustedSequencer(address)\":{\"notice\":\"Allow the admin to set a new trusted sequencer\"},\"setVerifyBatchTimeTarget(uint64)\":{\"notice\":\"Allow the admin to set a new verify batch time target This value will only be relevant once the aggregation is decentralized, so the trustedAggregatorTimeout should be zero or very close to zero\"},\"transferAdminRole(address)\":{\"notice\":\"Starts the admin role transfer This is a two step process, the pending admin must accepted to finalize the process\"},\"verifyBatches(uint64,uint64,uint64,bytes32,bytes32,((uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256)),uint256[1])\":{\"notice\":\"Allows an aggregator to verify multiple batches\"},\"verifyBatchesTrustedAggregator(uint64,uint64,uint64,bytes32,bytes32,((uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256)),uint256[1])\":{\"notice\":\"Allows an aggregator to verify multiple batches\"}},\"notice\":\"Contract responsible for managing the states and the updates of L2 network. There will be a trusted sequencer, which is able to send transactions. Any user can force some transaction and the sequencer will have a timeout to add them in the queue. The sequenced state is deterministic and can be precalculated before it's actually verified by a zkProof. The aggregators will be able to verify the sequenced state with zkProofs and therefore make available the withdrawals from L2 network. To enter and exit of the L2 network will be used a EigenBridge smart contract that will be deployed in both networks.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/EigenZkVM.sol\":\"EigenZkVM\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x037c334add4b033ad3493038c25be1682d78c00992e1acb0e2795caff3925271\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8a313cf42389440e2706837c91370323b85971c06afd6d056d21e2bc86459618\",\"dweb:/ipfs/QmT8XUrUvQ9aZaPKrqgRU2JVGWnaxBcUYJA7Q7K5KcLBSZ\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol\":{\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2\",\"dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol\":{\"keccak256\":\"0xcc70d8e2281fb3ff69e8ab242500f10142cd0a7fa8dd9e45882be270d4d09024\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://17a4063bc918df0f7bb9cbf04c6f0bb4977afab3f2fc212bc138a178312a221d\",\"dweb:/ipfs/QmZMdvsHP5mDEAAdrK4bNeNh47TfmSFgN9qEBFTbie7zmm\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/utils/SafeERC20Upgradeable.sol\":{\"keccak256\":\"0x220c4a5af915e656be2aaa85ca57505d102418e476b1e2ef6c62e0c6ac143871\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6ed2c33173f7e7000889abed7c339b7a0e3b7867cdea546caaf6bc917ef1039c\",\"dweb:/ipfs/QmQ4Ye5h7jm6V4CdhT3r6hvf25DtiV74ErppQVE4SpRKj6\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://72460c66cd1c3b1c11b863e0d8df0a1c56f37743019e468dc312c754f43e3b06\",\"dweb:/ipfs/QmPExYKiNb9PUsgktQBupPaM33kzDHxaYoVeJdLhv8s879\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"src/EigenZkVM.sol\":{\"keccak256\":\"0x17cc013dd25b83c5a1272540c34412b726c32b76e6720a4184f22865dda0c97f\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://57d412f9ccd33e2f5d31320024d4a6dce6d03323dbc088674f19974f177547be\",\"dweb:/ipfs/QmY4o9W29sL1i4SUf2hWwrDfHqsDdrxTuiCneoH7W8aFts\"]},\"src/interfaces/IBaseEigenGlobalExitRoot.sol\":{\"keccak256\":\"0x0bdb62f7f1768609452b0a01b4117244618c5eedeabffcea2bea58fdfbd3f10b\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://e28035a02708916b119760ac259aa9634bd3c89b1fe7661f2874550501398aff\",\"dweb:/ipfs/Qmd3mCpaEfmm7Kfd3bQ7ZXp5f5a5WJnoN2gATUpgsiE1GG\"]},\"src/interfaces/IEigenBridge.sol\":{\"keccak256\":\"0x8158ce57eeb87a6b9eec480f98b83db5d8f5bc95c236aa3cc2eb175f3bf48cf8\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://6e33fb0117d1867957284e1d4bee6f155a849139a1ca5e145e9ee37e2460bf8c\",\"dweb:/ipfs/QmXpFm7DKfpLpD4Cor6tkdFzA4v7tAyRMUVun6cfWu4PqC\"]},\"src/interfaces/IEigenErrors.sol\":{\"keccak256\":\"0xb7cbf6a1b44474dcd9f4be8257bd66d09c9d5efc963304aa85051dd0137e739b\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://e49accd9eb96478ead9b93394002e1583a94ff1258448e6cfeed73d4b8dc4db8\",\"dweb:/ipfs/QmNyHpgvNNaQDAoDdrAT4j34a6gnFsbWDmqJqqzdb8YU8R\"]},\"src/interfaces/IEigenGlobalExitRoot.sol\":{\"keccak256\":\"0x4eb0f24f3c71a640a5027dac4986e228bf69049c1d001683361b95123637dfdc\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://040ec9e59aa2f208e4646a0808e97f6f2ba1801493b1cfbedeceae8362b30eaf\",\"dweb:/ipfs/QmaxJKauNTn3t8jWmn89Fp9Zoza5j9ws7RsFiWFBhuwQ5o\"]},\"src/interfaces/IVerifierRollup.sol\":{\"keccak256\":\"0xa97b9be34645430ac505d2ea3029ae48005240c2b2e484f20124fe24d4274283\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://bca405d61e4de5d4e91c1d85847452fd2370aa5d2d4098d58d7e9d4b343ed966\",\"dweb:/ipfs/QmQtX7eN8VfBZEvy5M1vU4PxfBdBbCjJh5GgJm7WXYQpz9\"]},\"src/verifiers/Groth16Verifier.sol\":{\"keccak256\":\"0x83feda73fd0d5e9419841634bc61a67faf97c58fd703466bcf2e3bc6881a5912\",\"urls\":[\"bzz-raw://19affea24b9633324381392543e3ef95e2eec35a9b968a7bb535033ae96a4447\",\"dweb:/ipfs/QmTj3uP3bUzccyEQamCEGVvUWsENtQ7DbRTKNsc7Fa3gfy\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.21+commit.d9974bed"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"contract IEigenGlobalExitRoot","name":"_globalExitRootManager","type":"address"},{"internalType":"contract IEigenBridge","name":"_bridgeAddress","type":"address"},{"internalType":"uint64","name":"_chainID","type":"uint64"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"BatchAlreadyVerified"},{"inputs":[],"type":"error","name":"BatchNotSequencedOrNotSequenceEnd"},{"inputs":[],"type":"error","name":"ExceedMaxVerifyBatches"},{"inputs":[],"type":"error","name":"FinalNumBatchBelowLastVerifiedBatch"},{"inputs":[],"type":"error","name":"FinalNumBatchDoesNotMatchPendingState"},{"inputs":[],"type":"error","name":"FinalPendingStateNumInvalid"},{"inputs":[],"type":"error","name":"ForceBatchNotAllowed"},{"inputs":[],"type":"error","name":"ForceBatchesOverflow"},{"inputs":[],"type":"error","name":"ForcedDataDoesNotMatch"},{"inputs":[],"type":"error","name":"GlobalExitRootNotExist"},{"inputs":[],"type":"error","name":"HaltTimeoutNotExpired"},{"inputs":[],"type":"error","name":"InitNumBatchAboveLastVerifiedBatch"},{"inputs":[],"type":"error","name":"InitNumBatchDoesNotMatchPendingState"},{"inputs":[],"type":"error","name":"InvalidProof"},{"inputs":[],"type":"error","name":"InvalidRangeBatchTimeTarget"},{"inputs":[],"type":"error","name":"InvalidRangeForceBatchTimeout"},{"inputs":[],"type":"error","name":"InvalidRangeMultiplierBatchFee"},{"inputs":[],"type":"error","name":"NewAccInputHashDoesNotExist"},{"inputs":[],"type":"error","name":"NewPendingStateTimeoutMustBeLower"},{"inputs":[],"type":"error","name":"NewStateRootNotInsidePrime"},{"inputs":[],"type":"error","name":"NewTrustedAggregatorTimeoutMustBeLower"},{"inputs":[],"type":"error","name":"OldAccInputHashDoesNotExist"},{"inputs":[],"type":"error","name":"OldStateRootDoesNotExist"},{"inputs":[],"type":"error","name":"OnlyAdmin"},{"inputs":[],"type":"error","name":"OnlyPendingAdmin"},{"inputs":[],"type":"error","name":"OnlyTrustedAggregator"},{"inputs":[],"type":"error","name":"OnlyTrustedSequencer"},{"inputs":[],"type":"error","name":"PendingStateDoesNotExist"},{"inputs":[],"type":"error","name":"PendingStateInvalid"},{"inputs":[],"type":"error","name":"PendingStateNotConsolidable"},{"inputs":[],"type":"error","name":"PendingStateTimeoutExceedHaltAggregationTimeout"},{"inputs":[],"type":"error","name":"SequenceZeroBatches"},{"inputs":[],"type":"error","name":"SequencedTimestampBelowForcedTimestamp"},{"inputs":[],"type":"error","name":"SequencedTimestampInvalid"},{"inputs":[],"type":"error","name":"StoredRootMustBeDifferentThanNewRoot"},{"inputs":[],"type":"error","name":"TransactionsLengthAboveMax"},{"inputs":[],"type":"error","name":"TrustedAggregatorTimeoutExceedHaltAggregationTimeout"},{"inputs":[],"type":"error","name":"TrustedAggregatorTimeoutNotExpired"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address","indexed":false}],"type":"event","name":"AcceptAdminRole","anonymous":false},{"inputs":[{"internalType":"uint64","name":"numBatch","type":"uint64","indexed":true},{"internalType":"bytes32","name":"stateRoot","type":"bytes32","indexed":false},{"internalType":"uint64","name":"pendingStateNum","type":"uint64","indexed":true}],"type":"event","name":"ConsolidatePendingState","anonymous":false},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"storedStateRoot","type":"bytes32","indexed":false},{"internalType":"bytes32","name":"provedStateRoot","type":"bytes32","indexed":false}],"type":"event","name":"ProveNonDeterministicPendingState","anonymous":false},{"inputs":[{"internalType":"uint64","name":"numBatch","type":"uint64","indexed":true}],"type":"event","name":"SequenceBatches","anonymous":false},{"inputs":[{"internalType":"uint64","name":"numBatch","type":"uint64","indexed":true}],"type":"event","name":"SequenceForceBatches","anonymous":false},{"inputs":[{"internalType":"uint64","name":"newforceBatchTimeout","type":"uint64","indexed":false}],"type":"event","name":"SetForceBatchTimeout","anonymous":false},{"inputs":[{"internalType":"uint64","name":"newPendingStateTimeout","type":"uint64","indexed":false}],"type":"event","name":"SetPendingStateTimeout","anonymous":false},{"inputs":[{"internalType":"address","name":"newTrustedAggregator","type":"address","indexed":false}],"type":"event","name":"SetTrustedAggregator","anonymous":false},{"inputs":[{"internalType":"uint64","name":"newTrustedAggregatorTimeout","type":"uint64","indexed":false}],"type":"event","name":"SetTrustedAggregatorTimeout","anonymous":false},{"inputs":[{"internalType":"address","name":"newTrustedSequencer","type":"address","indexed":false}],"type":"event","name":"SetTrustedSequencer","anonymous":false},{"inputs":[{"internalType":"string","name":"newTrustedSequencerURL","type":"string","indexed":false}],"type":"event","name":"SetTrustedSequencerURL","anonymous":false},{"inputs":[{"internalType":"uint64","name":"newVerifyBatchTimeTarget","type":"uint64","indexed":false}],"type":"event","name":"SetVerifyBatchTimeTarget","anonymous":false},{"inputs":[{"internalType":"address","name":"newPendingAdmin","type":"address","indexed":false}],"type":"event","name":"TransferAdminRole","anonymous":false},{"inputs":[{"internalType":"uint64","name":"numBatch","type":"uint64","indexed":true},{"internalType":"bytes32","name":"stateRoot","type":"bytes32","indexed":false},{"internalType":"address","name":"aggregator","type":"address","indexed":true}],"type":"event","name":"VerifyBatches","anonymous":false},{"inputs":[{"internalType":"uint64","name":"numBatch","type":"uint64","indexed":true},{"internalType":"bytes32","name":"stateRoot","type":"bytes32","indexed":false},{"internalType":"address","name":"aggregator","type":"address","indexed":true}],"type":"event","name":"VerifyBatchesTrustedAggregator","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"batchFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function","name":"batchNumToStateRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"bridgeAddress","outputs":[{"internalType":"contract IEigenBridge","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"chainID","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[{"internalType":"uint64","name":"pendingStateNum","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"consolidatePendingState"},{"inputs":[],"stateMutability":"view","type":"function","name":"forceBatchTimeout","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getLastVerifiedBatch","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"globalExitRootManager","outputs":[{"internalType":"contract IEigenGlobalExitRoot","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes32","name":"stateRoot","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"isForcedBatchDisallowed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint64","name":"pendingStateNum","type":"uint64"}],"stateMutability":"view","type":"function","name":"isPendingStateConsolidable","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"lastBatchSequenced","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"lastForceBatch","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"lastPendingState","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"lastPendingStateConsolidated","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"lastTimestamp","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"lastVerifiedBatch","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"multiplierBatchFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"pendingStateTimeout","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"pendingStateTransitions","outputs":[{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint64","name":"lastVerifiedBatch","type":"uint64"},{"internalType":"bytes32","name":"exitRoot","type":"bytes32"},{"internalType":"bytes32","name":"stateRoot","type":"bytes32"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"struct EigenZkVM.BatchData[]","name":"batches","type":"tuple[]","components":[{"internalType":"bytes","name":"transactions","type":"bytes"},{"internalType":"bytes32","name":"globalExitRoot","type":"bytes32"},{"internalType":"uint64","name":"timestamp","type":"uint64"}]}],"stateMutability":"nonpayable","type":"function","name":"sequenceBatches"},{"inputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function","name":"sequencedBatches","outputs":[{"internalType":"bytes32","name":"accInputHash","type":"bytes32"},{"internalType":"uint64","name":"sequencedTimestamp","type":"uint64"},{"internalType":"uint64","name":"previousLastBatchSequenced","type":"uint64"}]},{"inputs":[{"internalType":"uint64","name":"newforceBatchTimeout","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"setForceBatchTimeout"},{"inputs":[{"internalType":"uint64","name":"newPendingStateTimeout","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"setPendingStateTimeout"},{"inputs":[{"internalType":"uint64","name":"newTrustedAggregatorTimeout","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"setTrustedAggregatorTimeout"},{"inputs":[{"internalType":"address","name":"newTrustedSequencer","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setTrustedSequencer"},{"inputs":[{"internalType":"uint64","name":"newVerifyBatchTimeTarget","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"setVerifyBatchTimeTarget"},{"inputs":[{"internalType":"address","name":"newPendingAdmin","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferAdminRole"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"trustedAggregatorTimeout","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"trustedSequencer","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"verifyBatchTimeTarget","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[{"internalType":"uint64","name":"pendingStateNum","type":"uint64"},{"internalType":"uint64","name":"initNumBatch","type":"uint64"},{"internalType":"uint64","name":"finalNewBatch","type":"uint64"},{"internalType":"bytes32","name":"newLocalExitRoot","type":"bytes32"},{"internalType":"bytes32","name":"newStateRoot","type":"bytes32"},{"internalType":"struct Verifier.Proof","name":"proof","type":"tuple","components":[{"internalType":"struct Pairing.G1Point","name":"a","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct Pairing.G2Point","name":"b","type":"tuple","components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}]},{"internalType":"struct Pairing.G1Point","name":"c","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]}]},{"internalType":"uint256[1]","name":"input","type":"uint256[1]"}],"stateMutability":"nonpayable","type":"function","name":"verifyBatches"},{"inputs":[{"internalType":"uint64","name":"pendingStateNum","type":"uint64"},{"internalType":"uint64","name":"initNumBatch","type":"uint64"},{"internalType":"uint64","name":"finalNewBatch","type":"uint64"},{"internalType":"bytes32","name":"newLocalExitRoot","type":"bytes32"},{"internalType":"bytes32","name":"newStateRoot","type":"bytes32"},{"internalType":"struct Verifier.Proof","name":"proof","type":"tuple","components":[{"internalType":"struct Pairing.G1Point","name":"a","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct Pairing.G2Point","name":"b","type":"tuple","components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}]},{"internalType":"struct Pairing.G1Point","name":"c","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]}]},{"internalType":"uint256[1]","name":"input","type":"uint256[1]"}],"stateMutability":"nonpayable","type":"function","name":"verifyBatchesTrustedAggregator"},{"inputs":[{"internalType":"struct Verifier.Proof","name":"proof","type":"tuple","components":[{"internalType":"struct Pairing.G1Point","name":"a","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]},{"internalType":"struct Pairing.G2Point","name":"b","type":"tuple","components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}]},{"internalType":"struct Pairing.G1Point","name":"c","type":"tuple","components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}]}]},{"internalType":"uint256[1]","name":"input","type":"uint256[1]"}],"stateMutability":"view","type":"function","name":"verifyTx","outputs":[{"internalType":"bool","name":"r","type":"bool"}]}],"devdoc":{"kind":"dev","methods":{"consolidatePendingState(uint64)":{"params":{"pendingStateNum":"Pending state to consolidate"}},"constructor":{"params":{"_bridgeAddress":"Bridge address","_chainID":"L2 chainID","_globalExitRootManager":"Global exit root manager address"}},"initialize(bytes32)":{"params":{"stateRoot":"Rollup genesis root"}},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"sequenceBatches((bytes,bytes32,uint64)[])":{"params":{"batches":"Struct array which holds the necessary data to append new batches to the sequence"}},"setForceBatchTimeout(uint64)":{"params":{"newforceBatchTimeout":"New force batch timeout"}},"setPendingStateTimeout(uint64)":{"params":{"newPendingStateTimeout":"Trusted aggregator timeout"}},"setTrustedAggregatorTimeout(uint64)":{"params":{"newTrustedAggregatorTimeout":"Trusted aggregator timeout"}},"setTrustedSequencer(address)":{"params":{"newTrustedSequencer":"Address of the new trusted sequencer"}},"setVerifyBatchTimeTarget(uint64)":{"params":{"newVerifyBatchTimeTarget":"Verify batch time target"}},"transferAdminRole(address)":{"params":{"newPendingAdmin":"Address of the new pending admin"}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"verifyBatches(uint64,uint64,uint64,bytes32,bytes32,((uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256)),uint256[1])":{"params":{"finalNewBatch":"Last batch aggregator intends to verify","initNumBatch":"Batch which the aggregator starts the verification","newLocalExitRoot":"New local exit root once the batch is processed","newStateRoot":"New State root once the batch is processed","pendingStateNum":"Init pending state, 0 if consolidated state is used","proof":"groth16 proof"}},"verifyBatchesTrustedAggregator(uint64,uint64,uint64,bytes32,bytes32,((uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256)),uint256[1])":{"params":{"finalNewBatch":"Last batch aggregator intends to verify","initNumBatch":"Batch which the aggregator starts the verification","input":"Public input","newLocalExitRoot":"New local exit root once the batch is processed","newStateRoot":"New State root once the batch is processed","pendingStateNum":"Init pending state, 0 if consolidated state is used","proof":"Groth16 proof"}}},"version":1},"userdoc":{"kind":"user","methods":{"consolidatePendingState(uint64)":{"notice":"Allows to consolidate any pending state that has already exceed the pendingStateTimeout Can be called by the trusted aggregator, which can consolidate any state without the timeout restrictions"},"getLastVerifiedBatch()":{"notice":"Get the last verified batch"},"isPendingStateConsolidable(uint64)":{"notice":"Returns a boolean that indicates if the pendingStateNum is or not consolidable Note that his function does not check if the pending state currently exists, or if it's consolidated already"},"sequenceBatches((bytes,bytes32,uint64)[])":{"notice":"Allows a sequencer to send multiple batches"},"setForceBatchTimeout(uint64)":{"notice":"Allow the admin to set the forcedBatchTimeout The new value can only be lower, except if emergency state is active"},"setPendingStateTimeout(uint64)":{"notice":"Allow the admin to set a new trusted aggregator timeout The timeout can only be lowered, except if emergency state is active"},"setTrustedAggregatorTimeout(uint64)":{"notice":"Allow the admin to set a new pending state timeout The timeout can only be lowered, except if emergency state is active"},"setTrustedSequencer(address)":{"notice":"Allow the admin to set a new trusted sequencer"},"setVerifyBatchTimeTarget(uint64)":{"notice":"Allow the admin to set a new verify batch time target This value will only be relevant once the aggregation is decentralized, so the trustedAggregatorTimeout should be zero or very close to zero"},"transferAdminRole(address)":{"notice":"Starts the admin role transfer This is a two step process, the pending admin must accepted to finalize the process"},"verifyBatches(uint64,uint64,uint64,bytes32,bytes32,((uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256)),uint256[1])":{"notice":"Allows an aggregator to verify multiple batches"},"verifyBatchesTrustedAggregator(uint64,uint64,uint64,bytes32,bytes32,((uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256)),uint256[1])":{"notice":"Allows an aggregator to verify multiple batches"}},"version":1}},"settings":{"remappings":["ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/EigenZkVM.sol":"EigenZkVM"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888","urls":["bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a","dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x037c334add4b033ad3493038c25be1682d78c00992e1acb0e2795caff3925271","urls":["bzz-raw://8a313cf42389440e2706837c91370323b85971c06afd6d056d21e2bc86459618","dweb:/ipfs/QmT8XUrUvQ9aZaPKrqgRU2JVGWnaxBcUYJA7Q7K5KcLBSZ"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol":{"keccak256":"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff","urls":["bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2","dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol":{"keccak256":"0xcc70d8e2281fb3ff69e8ab242500f10142cd0a7fa8dd9e45882be270d4d09024","urls":["bzz-raw://17a4063bc918df0f7bb9cbf04c6f0bb4977afab3f2fc212bc138a178312a221d","dweb:/ipfs/QmZMdvsHP5mDEAAdrK4bNeNh47TfmSFgN9qEBFTbie7zmm"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/utils/SafeERC20Upgradeable.sol":{"keccak256":"0x220c4a5af915e656be2aaa85ca57505d102418e476b1e2ef6c62e0c6ac143871","urls":["bzz-raw://6ed2c33173f7e7000889abed7c339b7a0e3b7867cdea546caaf6bc917ef1039c","dweb:/ipfs/QmQ4Ye5h7jm6V4CdhT3r6hvf25DtiV74ErppQVE4SpRKj6"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol":{"keccak256":"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183","urls":["bzz-raw://72460c66cd1c3b1c11b863e0d8df0a1c56f37743019e468dc312c754f43e3b06","dweb:/ipfs/QmPExYKiNb9PUsgktQBupPaM33kzDHxaYoVeJdLhv8s879"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149","urls":["bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c","dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a"],"license":"MIT"},"src/EigenZkVM.sol":{"keccak256":"0x17cc013dd25b83c5a1272540c34412b726c32b76e6720a4184f22865dda0c97f","urls":["bzz-raw://57d412f9ccd33e2f5d31320024d4a6dce6d03323dbc088674f19974f177547be","dweb:/ipfs/QmY4o9W29sL1i4SUf2hWwrDfHqsDdrxTuiCneoH7W8aFts"],"license":"AGPL-3.0"},"src/interfaces/IBaseEigenGlobalExitRoot.sol":{"keccak256":"0x0bdb62f7f1768609452b0a01b4117244618c5eedeabffcea2bea58fdfbd3f10b","urls":["bzz-raw://e28035a02708916b119760ac259aa9634bd3c89b1fe7661f2874550501398aff","dweb:/ipfs/Qmd3mCpaEfmm7Kfd3bQ7ZXp5f5a5WJnoN2gATUpgsiE1GG"],"license":"AGPL-3.0"},"src/interfaces/IEigenBridge.sol":{"keccak256":"0x8158ce57eeb87a6b9eec480f98b83db5d8f5bc95c236aa3cc2eb175f3bf48cf8","urls":["bzz-raw://6e33fb0117d1867957284e1d4bee6f155a849139a1ca5e145e9ee37e2460bf8c","dweb:/ipfs/QmXpFm7DKfpLpD4Cor6tkdFzA4v7tAyRMUVun6cfWu4PqC"],"license":"AGPL-3.0"},"src/interfaces/IEigenErrors.sol":{"keccak256":"0xb7cbf6a1b44474dcd9f4be8257bd66d09c9d5efc963304aa85051dd0137e739b","urls":["bzz-raw://e49accd9eb96478ead9b93394002e1583a94ff1258448e6cfeed73d4b8dc4db8","dweb:/ipfs/QmNyHpgvNNaQDAoDdrAT4j34a6gnFsbWDmqJqqzdb8YU8R"],"license":"AGPL-3.0"},"src/interfaces/IEigenGlobalExitRoot.sol":{"keccak256":"0x4eb0f24f3c71a640a5027dac4986e228bf69049c1d001683361b95123637dfdc","urls":["bzz-raw://040ec9e59aa2f208e4646a0808e97f6f2ba1801493b1cfbedeceae8362b30eaf","dweb:/ipfs/QmaxJKauNTn3t8jWmn89Fp9Zoza5j9ws7RsFiWFBhuwQ5o"],"license":"AGPL-3.0"},"src/interfaces/IVerifierRollup.sol":{"keccak256":"0xa97b9be34645430ac505d2ea3029ae48005240c2b2e484f20124fe24d4274283","urls":["bzz-raw://bca405d61e4de5d4e91c1d85847452fd2370aa5d2d4098d58d7e9d4b343ed966","dweb:/ipfs/QmQtX7eN8VfBZEvy5M1vU4PxfBdBbCjJh5GgJm7WXYQpz9"],"license":"AGPL-3.0"},"src/verifiers/Groth16Verifier.sol":{"keccak256":"0x83feda73fd0d5e9419841634bc61a67faf97c58fd703466bcf2e3bc6881a5912","urls":["bzz-raw://19affea24b9633324381392543e3ef95e2eec35a9b968a7bb535033ae96a4447","dweb:/ipfs/QmTj3uP3bUzccyEQamCEGVvUWsENtQ7DbRTKNsc7Fa3gfy"],"license":null}},"version":1},"id":49} \ No newline at end of file diff --git a/contracts/EigenZkvm.json b/contracts/EigenZkvm.json deleted file mode 100644 index 6e48293..0000000 --- a/contracts/EigenZkvm.json +++ /dev/null @@ -1 +0,0 @@ -[{"type":"constructor","inputs":[{"name":"_globalExitRootManager","type":"address","internalType":"contract IEigenGlobalExitRoot"},{"name":"_bridgeAddress","type":"address","internalType":"contract IEigenBridge"},{"name":"_chainID","type":"uint64","internalType":"uint64"}],"stateMutability":"nonpayable"},{"type":"function","name":"admin","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"batchFee","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"batchNumToStateRoot","inputs":[{"name":"","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"bridgeAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IEigenBridge"}],"stateMutability":"view"},{"type":"function","name":"chainID","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"consolidatePendingState","inputs":[{"name":"pendingStateNum","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"forceBatchTimeout","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"forcedBatches","inputs":[{"name":"","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getLastVerifiedBatch","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"globalExitRootManager","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IEigenGlobalExitRoot"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"stateRoot","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isForcedBatchDisallowed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isPendingStateConsolidable","inputs":[{"name":"pendingStateNum","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"lastBatchSequenced","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"lastForceBatch","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"lastForceBatchSequenced","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"lastPendingState","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"lastPendingStateConsolidated","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"lastTimestamp","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"lastVerifiedBatch","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"multiplierBatchFee","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"pendingAdmin","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"pendingStateTimeout","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"pendingStateTransitions","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"lastVerifiedBatch","type":"uint64","internalType":"uint64"},{"name":"exitRoot","type":"bytes32","internalType":"bytes32"},{"name":"stateRoot","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"sequenceBatches","inputs":[{"name":"batches","type":"tuple[]","internalType":"struct EigenZkVM.BatchData[]","components":[{"name":"transactions","type":"bytes","internalType":"bytes"},{"name":"globalExitRoot","type":"bytes32","internalType":"bytes32"},{"name":"timestamp","type":"uint64","internalType":"uint64"},{"name":"minForcedTimestamp","type":"uint64","internalType":"uint64"}]},{"name":"l2Coinbase","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"sequencedBatches","inputs":[{"name":"","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"accInputHash","type":"bytes32","internalType":"bytes32"},{"name":"sequencedTimestamp","type":"uint64","internalType":"uint64"},{"name":"previousLastBatchSequenced","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"setForceBatchTimeout","inputs":[{"name":"newforceBatchTimeout","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPendingStateTimeout","inputs":[{"name":"newPendingStateTimeout","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setTrustedAggregatorTimeout","inputs":[{"name":"newTrustedAggregatorTimeout","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setTrustedSequencer","inputs":[{"name":"newTrustedSequencer","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setVerifyBatchTimeTarget","inputs":[{"name":"newVerifyBatchTimeTarget","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferAdminRole","inputs":[{"name":"newPendingAdmin","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"trustedAggregatorTimeout","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"trustedSequencer","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"verifyBatchTimeTarget","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"verifyBatches","inputs":[{"name":"pendingStateNum","type":"uint64","internalType":"uint64"},{"name":"initNumBatch","type":"uint64","internalType":"uint64"},{"name":"finalNewBatch","type":"uint64","internalType":"uint64"},{"name":"newLocalExitRoot","type":"bytes32","internalType":"bytes32"},{"name":"newStateRoot","type":"bytes32","internalType":"bytes32"},{"name":"proof","type":"tuple","internalType":"struct Verifier.Proof","components":[{"name":"a","type":"tuple","internalType":"struct Pairing.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"b","type":"tuple","internalType":"struct Pairing.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"c","type":"tuple","internalType":"struct Pairing.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]}]},{"name":"input","type":"uint256[1]","internalType":"uint256[1]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"verifyBatchesTrustedAggregator","inputs":[{"name":"pendingStateNum","type":"uint64","internalType":"uint64"},{"name":"initNumBatch","type":"uint64","internalType":"uint64"},{"name":"finalNewBatch","type":"uint64","internalType":"uint64"},{"name":"newLocalExitRoot","type":"bytes32","internalType":"bytes32"},{"name":"newStateRoot","type":"bytes32","internalType":"bytes32"},{"name":"proof","type":"tuple","internalType":"struct Verifier.Proof","components":[{"name":"a","type":"tuple","internalType":"struct Pairing.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"b","type":"tuple","internalType":"struct Pairing.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"c","type":"tuple","internalType":"struct Pairing.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]}]},{"name":"input","type":"uint256[1]","internalType":"uint256[1]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"verifyTx","inputs":[{"name":"proof","type":"tuple","internalType":"struct Verifier.Proof","components":[{"name":"a","type":"tuple","internalType":"struct Pairing.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]},{"name":"b","type":"tuple","internalType":"struct Pairing.G2Point","components":[{"name":"X","type":"uint256[2]","internalType":"uint256[2]"},{"name":"Y","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"c","type":"tuple","internalType":"struct Pairing.G1Point","components":[{"name":"X","type":"uint256","internalType":"uint256"},{"name":"Y","type":"uint256","internalType":"uint256"}]}]},{"name":"input","type":"uint256[1]","internalType":"uint256[1]"}],"outputs":[{"name":"r","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"event","name":"AcceptAdminRole","inputs":[{"name":"newAdmin","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ConsolidatePendingState","inputs":[{"name":"numBatch","type":"uint64","indexed":true,"internalType":"uint64"},{"name":"stateRoot","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"pendingStateNum","type":"uint64","indexed":true,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ProveNonDeterministicPendingState","inputs":[{"name":"storedStateRoot","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"provedStateRoot","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"SequenceBatches","inputs":[{"name":"numBatch","type":"uint64","indexed":true,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"SequenceForceBatches","inputs":[{"name":"numBatch","type":"uint64","indexed":true,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"SetForceBatchTimeout","inputs":[{"name":"newforceBatchTimeout","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"SetPendingStateTimeout","inputs":[{"name":"newPendingStateTimeout","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"SetTrustedAggregator","inputs":[{"name":"newTrustedAggregator","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"SetTrustedAggregatorTimeout","inputs":[{"name":"newTrustedAggregatorTimeout","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"SetTrustedSequencer","inputs":[{"name":"newTrustedSequencer","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"SetTrustedSequencerURL","inputs":[{"name":"newTrustedSequencerURL","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"SetVerifyBatchTimeTarget","inputs":[{"name":"newVerifyBatchTimeTarget","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"TransferAdminRole","inputs":[{"name":"newPendingAdmin","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"VerifyBatches","inputs":[{"name":"numBatch","type":"uint64","indexed":true,"internalType":"uint64"},{"name":"stateRoot","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"aggregator","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"VerifyBatchesTrustedAggregator","inputs":[{"name":"numBatch","type":"uint64","indexed":true,"internalType":"uint64"},{"name":"stateRoot","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"aggregator","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"BatchAlreadyVerified","inputs":[]},{"type":"error","name":"BatchNotSequencedOrNotSequenceEnd","inputs":[]},{"type":"error","name":"ExceedMaxVerifyBatches","inputs":[]},{"type":"error","name":"FinalNumBatchBelowLastVerifiedBatch","inputs":[]},{"type":"error","name":"FinalNumBatchDoesNotMatchPendingState","inputs":[]},{"type":"error","name":"FinalPendingStateNumInvalid","inputs":[]},{"type":"error","name":"ForceBatchNotAllowed","inputs":[]},{"type":"error","name":"ForceBatchesOverflow","inputs":[]},{"type":"error","name":"ForcedDataDoesNotMatch","inputs":[]},{"type":"error","name":"GlobalExitRootNotExist","inputs":[]},{"type":"error","name":"HaltTimeoutNotExpired","inputs":[]},{"type":"error","name":"InitNumBatchAboveLastVerifiedBatch","inputs":[]},{"type":"error","name":"InitNumBatchDoesNotMatchPendingState","inputs":[]},{"type":"error","name":"InvalidProof","inputs":[]},{"type":"error","name":"InvalidRangeBatchTimeTarget","inputs":[]},{"type":"error","name":"InvalidRangeForceBatchTimeout","inputs":[]},{"type":"error","name":"InvalidRangeMultiplierBatchFee","inputs":[]},{"type":"error","name":"NewAccInputHashDoesNotExist","inputs":[]},{"type":"error","name":"NewPendingStateTimeoutMustBeLower","inputs":[]},{"type":"error","name":"NewStateRootNotInsidePrime","inputs":[]},{"type":"error","name":"NewTrustedAggregatorTimeoutMustBeLower","inputs":[]},{"type":"error","name":"OldAccInputHashDoesNotExist","inputs":[]},{"type":"error","name":"OldStateRootDoesNotExist","inputs":[]},{"type":"error","name":"OnlyAdmin","inputs":[]},{"type":"error","name":"OnlyPendingAdmin","inputs":[]},{"type":"error","name":"OnlyTrustedAggregator","inputs":[]},{"type":"error","name":"OnlyTrustedSequencer","inputs":[]},{"type":"error","name":"PendingStateDoesNotExist","inputs":[]},{"type":"error","name":"PendingStateInvalid","inputs":[]},{"type":"error","name":"PendingStateNotConsolidable","inputs":[]},{"type":"error","name":"PendingStateTimeoutExceedHaltAggregationTimeout","inputs":[]},{"type":"error","name":"SequenceZeroBatches","inputs":[]},{"type":"error","name":"SequencedTimestampBelowForcedTimestamp","inputs":[]},{"type":"error","name":"SequencedTimestampInvalid","inputs":[]},{"type":"error","name":"StoredRootMustBeDifferentThanNewRoot","inputs":[]},{"type":"error","name":"TransactionsLengthAboveMax","inputs":[]},{"type":"error","name":"TrustedAggregatorTimeoutExceedHaltAggregationTimeout","inputs":[]},{"type":"error","name":"TrustedAggregatorTimeoutNotExpired","inputs":[]}] \ No newline at end of file diff --git a/src/batch_proposer/mod.rs b/src/batch_proposer/mod.rs index b82faa3..2234c99 100644 --- a/src/batch_proposer/mod.rs +++ b/src/batch_proposer/mod.rs @@ -7,7 +7,7 @@ use std::time::Duration; use tokio::sync::broadcast; use tokio::{select, time}; -const L2_WATCHER_INTERVAL: Duration = Duration::from_secs(1); +const L2_WATCHER_INTERVAL: Duration = Duration::from_secs(30); pub struct L2Watcher { pub db: Arc>, pub l2provider: Provider, diff --git a/src/commands/run.rs b/src/commands/run.rs index 2e088c5..89f5045 100644 --- a/src/commands/run.rs +++ b/src/commands/run.rs @@ -143,7 +143,7 @@ pub enum SettlementLayer { impl RunCmd { pub async fn run(&self) -> Result<()> { // initialize the logger - std::env::set_var("RUST_LOG", self.log_level.to_string()); + // std::env::set_var("RUST_LOG", self.log_level.to_string()); env_logger::init(); log::info!("Initialized logger with level: {}", self.log_level); diff --git a/src/db/mod.rs b/src/db/mod.rs index 3a57073..d1ad389 100644 --- a/src/db/mod.rs +++ b/src/db/mod.rs @@ -33,6 +33,7 @@ pub(crate) mod keys { pub const KEY_LAST_SEQUENCE_FINALITY_BLOCK_NUMBER: &[u8] = b"LAST_SEQUENCE_FINALITY_BLOCK_NUMBER"; pub const KEY_NEXT_BATCH: &[u8] = b"NEXT_BATCH"; + pub const KEY_LAST_SUBMITTED_BLOCK_NUMBER: &[u8] = b"LAST_SUBMITTED_BLOCK_NUMBER"; pub const KEY_LAST_PROVEN_BLOCK_NUMBER: &[u8] = b"LAST_PROVEN_BLOCK_NUMBER"; pub const KEY_LAST_VERIFIED_BLOCK_NUMBER: &[u8] = b"LAST_VERIFIED_BLOCK_NUMBER"; } diff --git a/src/operator.rs b/src/operator.rs index ab1cead..daf7c28 100644 --- a/src/operator.rs +++ b/src/operator.rs @@ -47,7 +47,8 @@ impl Operator { log::info!("Initializing reth Provider with address: {}", l2addr); let l2provider = Provider::::try_from(l2addr) .map_err(|e| anyhow!("Failed to init l2 provider: {:?}", e))?; - let mut l2watcher = L2Watcher::new(rollup_db.clone(), l2provider); + let l2provider_clone = l2provider.clone(); + let mut l2watcher = L2Watcher::new(rollup_db.clone(), l2provider_clone); // start all components of the eigen-zeth full node // start the L2Watcher @@ -55,11 +56,12 @@ impl Operator { // start the verify worker let arc_db_for_verify_worker = rollup_db.clone(); + let settlement_provider_for_verify_worker = arc_settlement_provider.clone(); let (verify_stop_tx, verify_stop_rx) = mpsc::channel::<()>(1); tokio::spawn(async move { Settler::verify_worker( arc_db_for_verify_worker, - arc_settlement_provider.clone(), + settlement_provider_for_verify_worker, verify_stop_rx, ) .await @@ -72,12 +74,27 @@ impl Operator { Settler::proof_worker(arc_db_for_proof_worker, prover, proof_stop_rx).await }); + let arc_db_for_submit_worker = rollup_db.clone(); + let settlement_provider_for_submit_worker = arc_settlement_provider.clone(); + let l2provider_for_submit_worker = l2provider.clone(); + let (submit_stop_tx, submit_stop_rx) = mpsc::channel::<()>(1); + tokio::spawn(async move { + Settler::submit_worker( + arc_db_for_submit_worker, + l2provider_for_submit_worker, + settlement_provider_for_submit_worker, + submit_stop_rx, + ) + .await + }); + // wait for the stop signal tokio::select! { _ = stop_rx.recv() => { l2watcher.stop().await.unwrap(); verify_stop_tx.send(()).await.unwrap(); proof_stop_tx.send(()).await.unwrap(); + submit_stop_tx.send(()).await.unwrap(); log::info!("Operator stopped"); Ok(()) } diff --git a/src/settlement/ethereum/interfaces/mod.rs b/src/settlement/ethereum/interfaces/mod.rs index 4f57a1d..99ac9a8 100644 --- a/src/settlement/ethereum/interfaces/mod.rs +++ b/src/settlement/ethereum/interfaces/mod.rs @@ -1,3 +1,4 @@ pub(crate) mod bridge; pub(crate) mod global_exit_root; +pub(crate) mod zeth_global_exit_root; pub(crate) mod zkvm; diff --git a/src/settlement/ethereum/interfaces/zeth_global_exit_root.rs b/src/settlement/ethereum/interfaces/zeth_global_exit_root.rs new file mode 100644 index 0000000..a89b385 --- /dev/null +++ b/src/settlement/ethereum/interfaces/zeth_global_exit_root.rs @@ -0,0 +1,31 @@ +use anyhow::Result; +use ethers::middleware::SignerMiddleware; +use ethers::prelude::LocalWallet; +use ethers_contract::abigen; +use ethers_core::types::Address; +use ethers_providers::{Http, Provider}; +use std::sync::Arc; + +abigen!( + EigenGlobalExitRoot, + r#"[ + function lastRollupExitRoot() public view returns (bytes32) + ]"#, +); + +pub struct ZethGlobalExitRootContractClient { + pub contract: EigenGlobalExitRoot, LocalWallet>>, +} + +impl ZethGlobalExitRootContractClient { + pub fn new(contract_address: Address, provider: Provider, wallet: LocalWallet) -> Self { + let client = SignerMiddleware::new(provider, wallet); + let contract = EigenGlobalExitRoot::new(contract_address, Arc::new(client)); + ZethGlobalExitRootContractClient { contract } + } + + pub async fn last_rollup_exit_root(&self) -> Result<[u8; 32]> { + let last_global_exit_root = self.contract.last_rollup_exit_root().call().await?; + Ok(last_global_exit_root) + } +} diff --git a/src/settlement/ethereum/interfaces/zkvm.rs b/src/settlement/ethereum/interfaces/zkvm.rs index 622582b..58a3756 100644 --- a/src/settlement/ethereum/interfaces/zkvm.rs +++ b/src/settlement/ethereum/interfaces/zkvm.rs @@ -8,7 +8,7 @@ use ethers_contract::abigen; use ethers_providers::{Http, Provider}; use std::sync::Arc; -abigen!(EigenZkVM, "contracts/EigenZkvm.json"); +abigen!(EigenZkVM, "contracts/EigenZkVM.json"); pub struct ZkVMContractClient { contract: EigenZkVM, LocalWallet>>, @@ -34,16 +34,12 @@ impl ZkVMContractClient { */ // TODO: Fixme #[allow(clippy::too_many_arguments)] - pub async fn sequence_batches( - &self, - batches: Vec, - l2_coinbase: ethers::types::Address, - ) -> Result<()> { + pub async fn sequence_batches(&self, batches: Vec) -> Result<()> { // TODO: refactor gas_limit config let gas_limit = ethers::prelude::U256::from(5000000); self.contract - .sequence_batches(batches, l2_coinbase) + .sequence_batches(batches) .gas(gas_limit) .send() .await diff --git a/src/settlement/ethereum/mod.rs b/src/settlement/ethereum/mod.rs index 8ec0825..e2cc7ca 100644 --- a/src/settlement/ethereum/mod.rs +++ b/src/settlement/ethereum/mod.rs @@ -4,6 +4,7 @@ pub(crate) mod interfaces; use super::BatchData as RustBatchData; use crate::settlement::ethereum::interfaces::bridge::BridgeContractClient; use crate::settlement::ethereum::interfaces::global_exit_root::GlobalExitRootContractClient; +use crate::settlement::ethereum::interfaces::zeth_global_exit_root::ZethGlobalExitRootContractClient; use crate::settlement::ethereum::interfaces::zkvm::{ BatchData, G1Point, G2Point, Proof, ZkVMContractClient, }; @@ -23,6 +24,7 @@ pub struct EthereumSettlement { pub bridge_client: BridgeContractClient, pub global_exit_root_client: GlobalExitRootContractClient, pub zkvm_contract_client: ZkVMContractClient, + pub zeth_global_exit_root_client: ZethGlobalExitRootContractClient, } #[derive(Debug, Clone, Deserialize)] @@ -30,6 +32,7 @@ pub struct EthereumSettlementConfig { pub provider_url: String, pub local_wallet: LocalWalletConfig, pub l1_contracts_addr: EthContractsAddr, + pub zeth_config: ZethConfig, } #[derive(Debug, Clone, Deserialize)] @@ -45,6 +48,18 @@ pub struct EthContractsAddr { pub zkvm: String, } +#[derive(Debug, Clone, Deserialize)] +pub struct ZethConfig { + pub provider_url: String, + pub local_wallet: LocalWalletConfig, + pub zeth_contracts_addr: ZethContractsAddr, +} + +#[derive(Debug, Clone, Deserialize)] +pub struct ZethContractsAddr { + pub global_exit: String, +} + impl EthereumSettlementConfig { pub fn from_conf_path(conf_path: &str) -> Result { log::info!("Load the Ethereum settlement config from: {}", conf_path); @@ -62,7 +77,7 @@ impl EthereumSettlementConfig { impl EthereumSettlement { pub fn new(config: EthereumSettlementConfig) -> Result { - let provider = Provider::::try_from(&config.provider_url).map_err(|e| { + let l1_provider = Provider::::try_from(&config.provider_url).map_err(|e| { anyhow!( "Failed to create provider from URL {}: {:?}", config.provider_url, @@ -70,19 +85,42 @@ impl EthereumSettlement { ) })?; - let kye_bytes = hex::decode(&config.local_wallet.private_key).map_err(|e| { + let zeth_provider = + Provider::::try_from(&config.zeth_config.provider_url).map_err(|e| { + anyhow!( + "Failed to create provider from URL {}: {:?}", + config.zeth_config.provider_url, + e + ) + })?; + + let l1_kye_bytes = hex::decode(&config.local_wallet.private_key).map_err(|e| { anyhow!( "Failed to decode private key {}: {:?}", config.local_wallet.private_key, e ) })?; + let zeth_key_bytes = + hex::decode(&config.zeth_config.local_wallet.private_key).map_err(|e| { + anyhow!( + "Failed to decode zeth private key {}: {:?}", + config.zeth_config.local_wallet.private_key, + e + ) + })?; - let secret_key = SecretKey::from_slice(&kye_bytes) + let l1_secret_key = SecretKey::from_slice(&l1_kye_bytes) .map_err(|e| anyhow!("Failed to parse secret key: {:?}", e))?; - let local_wallet: LocalWallet = - LocalWallet::from(secret_key).with_chain_id(config.local_wallet.chain_id); + let zeth_secret_key = SecretKey::from_slice(&zeth_key_bytes) + .map_err(|e| anyhow!("Failed to parse zeht secret key: {:?}", e))?; + + let l1_local_wallet: LocalWallet = + LocalWallet::from(l1_secret_key).with_chain_id(config.local_wallet.chain_id); + + let zeth_local_wallet: LocalWallet = LocalWallet::from(zeth_secret_key) + .with_chain_id(config.zeth_config.local_wallet.chain_id); let bridge_address: Address = config.l1_contracts_addr.bridge.parse().map_err(|e| { anyhow!( @@ -109,18 +147,40 @@ impl EthereumSettlement { ) })?; + let zeth_global_exit_root_address: Address = config + .zeth_config + .zeth_contracts_addr + .global_exit + .parse() + .map_err(|e| { + anyhow!( + "Failed to parse zeth global exit root address {}: {:?}", + config.zeth_config.zeth_contracts_addr.global_exit, + e + ) + })?; + Ok(EthereumSettlement { bridge_client: BridgeContractClient::new( bridge_address, - provider.clone(), - local_wallet.clone(), + l1_provider.clone(), + l1_local_wallet.clone(), ), global_exit_root_client: GlobalExitRootContractClient::new( global_exit_root_address, - provider.clone(), - local_wallet.clone(), + l1_provider.clone(), + l1_local_wallet.clone(), + ), + zkvm_contract_client: ZkVMContractClient::new( + zkvm_address, + l1_provider.clone(), + l1_local_wallet.clone(), + ), + zeth_global_exit_root_client: ZethGlobalExitRootContractClient::new( + zeth_global_exit_root_address, + zeth_provider, + zeth_local_wallet, ), - zkvm_contract_client: ZkVMContractClient::new(zkvm_address, provider, local_wallet), }) } } @@ -260,23 +320,18 @@ impl Settlement for EthereumSettlement { // } /// ``` /// - async fn sequence_batches( - &self, - batches: Vec, - l2_coinbase: Address, - ) -> Result<()> { + async fn sequence_batches(&self, batches: Vec) -> Result<()> { let solidity_batches = batches .iter() .map(|b| BatchData { transactions: Bytes::from(b.transactions.clone()), global_exit_root: b.global_exit_root, timestamp: b.timestamp, - min_forced_timestamp: b.min_forced_timestamp, }) .collect(); self.zkvm_contract_client - .sequence_batches(solidity_batches, l2_coinbase) + .sequence_batches(solidity_batches) .await } @@ -379,6 +434,12 @@ impl Settlement for EthereumSettlement { ) .await } + + async fn get_zeth_last_rollup_exit_root(&self) -> Result<[u8; 32]> { + self.zeth_global_exit_root_client + .last_rollup_exit_root() + .await + } } pub fn parse_proof(json_str: &str) -> Result { diff --git a/src/settlement/mod.rs b/src/settlement/mod.rs index 4cc49c7..22e3b56 100644 --- a/src/settlement/mod.rs +++ b/src/settlement/mod.rs @@ -15,7 +15,6 @@ pub(crate) struct BatchData { pub transactions: Vec, pub global_exit_root: [u8; 32], pub timestamp: u64, - pub min_forced_timestamp: u64, } // TODO: Fixme @@ -77,7 +76,7 @@ pub trait Settlement: Send + Sync { async fn get_global_exit_root(&self) -> Result<[u8; 32]>; // zkvm - async fn sequence_batches(&self, batches: Vec, l2_coinbase: Address) -> Result<()>; + async fn sequence_batches(&self, batches: Vec) -> Result<()>; async fn verify_batches( &self, @@ -101,9 +100,12 @@ pub trait Settlement: Send + Sync { _input: String, ) -> Result<()>; + async fn get_zeth_last_rollup_exit_root(&self) -> Result<[u8; 32]>; + // TODO: add more interfaces } +#[allow(clippy::large_enum_variant)] #[derive(Clone, Debug)] pub enum NetworkSpec { Ethereum(ethereum::EthereumSettlementConfig), diff --git a/src/settlement/worker.rs b/src/settlement/worker.rs index b1a7bf9..84f6e62 100644 --- a/src/settlement/worker.rs +++ b/src/settlement/worker.rs @@ -1,13 +1,19 @@ use crate::db::{keys, prefix, Database, ProofResult, Status}; use crate::prover::ProverChannel; -use crate::settlement::Settlement; -use anyhow::Result; +use crate::settlement::{BatchData, Settlement}; +use alloy_rlp::{length_of_length, BytesMut, Encodable, Header}; +use anyhow::{anyhow, Result}; +use ethers_core::types::Transaction; +use ethers_providers::{Http, Middleware, Provider}; +use prost::bytes; +use reth_primitives::{Bytes, TransactionKind, TxLegacy}; use std::sync::Arc; use std::time::Duration; use tokio::sync::mpsc; -const PROOF_INTERVAL: Duration = Duration::from_secs(1); -const VERIFY_INTERVAL: Duration = Duration::from_secs(1); +const PROOF_INTERVAL: Duration = Duration::from_secs(30); +const VERIFY_INTERVAL: Duration = Duration::from_secs(30); +const SUBMIT_INTERVAL: Duration = Duration::from_secs(30); pub(crate) struct Settler {} @@ -24,7 +30,7 @@ impl Settler { loop { tokio::select! { _ = ticker.tick() => { - let last_sequence_finality_block = match db.get(keys::KEY_LAST_SEQUENCE_FINALITY_BLOCK_NUMBER) { + let last_submitted_block = match db.get(keys::KEY_LAST_SUBMITTED_BLOCK_NUMBER) { None => { // db.put(keys::KEY_LAST_SEQUENCE_FINALITY_BLOCK_NUMBER.to_vec(), 0_u64.to_be_bytes().to_vec()); 0 @@ -49,8 +55,8 @@ impl Settler { } }; - // - if next_batch > last_sequence_finality_block { + if next_batch > last_submitted_block { + log::info!("no new block to prove, try again later"); continue; } @@ -167,15 +173,16 @@ impl Settler { log::info!("start to verify the proof of the next block({})", last_verified_block + 1); // get the proof of the next block let next_proof_key = format!("{}{}", std::str::from_utf8(prefix::PREFIX_BATCH_PROOF).unwrap(), last_verified_block + 1); - if let Some(proof_bytes) = db.get(next_proof_key.as_bytes()){ + if let Some(proof_bytes) = db.get(next_proof_key.as_bytes()) { let proof_data: ProofResult = serde_json::from_slice(&proof_bytes).unwrap(); // verify the proof // TODO: update the new_local_exit_root + let zeth_last_rollup_exit_root = settlement_provider.get_zeth_last_rollup_exit_root().await.map_err(|e| anyhow!("failed to get zeth last rollup exit root, err: {:?}", e))?; match settlement_provider.verify_batches( 0, last_verified_block, last_verified_block + 1, - [0; 32], + zeth_last_rollup_exit_root, proof_data.post_state_root, proof_data.proof, proof_data.public_input, @@ -205,4 +212,176 @@ impl Settler { } } } + + pub(crate) async fn submit_worker( + db: Arc>, + l2provider: Provider, + settlement_provider: Arc>, + mut stop_rx: mpsc::Receiver<()>, + ) -> Result<()> { + let mut ticker = tokio::time::interval(SUBMIT_INTERVAL); + log::info!("Submit Worker started"); + loop { + tokio::select! { + _ = ticker.tick() => { + // get the last submitted block + let last_submitted_block = match db.get(keys::KEY_LAST_SEQUENCE_FINALITY_BLOCK_NUMBER) { + None => { + db.put(keys::KEY_LAST_SEQUENCE_FINALITY_BLOCK_NUMBER.to_vec(), 0_u64.to_be_bytes().to_vec()); + 0 + } + Some(block_number_bytes) => { + u64::from_be_bytes(block_number_bytes.try_into().unwrap()) + } + }; + + // get the last fetched block + let last_fetched_block = match db.get(keys::KEY_LAST_VERIFIED_BLOCK_NUMBER) { + None => { + db.put(keys::KEY_LAST_VERIFIED_BLOCK_NUMBER.to_vec(), 0_u64.to_be_bytes().to_vec()); + 0 + } + Some(block_number_bytes) => { + u64::from_be_bytes(block_number_bytes.try_into().unwrap()) + } + }; + + if last_submitted_block >= last_fetched_block { + log::info!("no new block to submit, try again later"); + continue; + } + + log::info!("start to submit the block({})", last_submitted_block + 1); + let block = l2provider.get_block_with_txs(last_submitted_block + 1).await.map_err(|e| anyhow!(e))?.ok_or(anyhow!("block not found"))?; + let txs = block.transactions; + let mut batches = Vec::::new(); + let global_exit_root = settlement_provider.get_global_exit_root().await.map_err(|e| anyhow!("failed to get global exit root, err: {:?}", e))?; + for tx in txs { + let tx_legacy = convert_to_tx_legacy(&tx)?; + + let mut v_vec = tx.v.to_string().as_bytes().to_vec(); + let mut r_vec = tx.r.to_string().as_bytes().to_vec(); + let mut s_vec = tx.s.to_string().as_bytes().to_vec(); + + let mut buf = BytesMut::with_capacity(payload_len_for_signature(&tx_legacy)); + encode_for_signing(&tx_legacy, &mut buf); + let mut rlp_vec = buf.to_vec(); + rlp_vec.append(&mut v_vec); + rlp_vec.append(&mut r_vec); + rlp_vec.append(&mut s_vec); + + // the batches will be changed, now the structure is: + // one batches contains one batch_data + // one batch_data contains one block + // one block contains one transaction + let batch_data = BatchData { + transactions: rlp_vec, + global_exit_root, + timestamp: block.timestamp.as_u64(), + }; + batches.push(batch_data); + } + + // BatchData + match settlement_provider.sequence_batches(batches).await { + Ok(_) => { + log::info!("submit block({}) success", last_submitted_block + 1); + db.put(keys::KEY_LAST_SUBMITTED_BLOCK_NUMBER.to_vec(), (last_submitted_block + 1).to_be_bytes().to_vec()); + // update the block status to Submitted + let status_key = format!("{}{}", std::str::from_utf8(prefix::PREFIX_BLOCK_STATUS).unwrap(), last_submitted_block + 1); + let status = Status::Submitted; + let encoded_status = serde_json::to_vec(&status).unwrap(); + db.put(status_key.as_bytes().to_vec(), encoded_status); + } + Err(e) => { + log::error!("submit block({}) failed: {:?}", last_submitted_block + 1, e); + } + } + } + _ = stop_rx.recv() => { + log::info!("Submit Worker stopped"); + return Ok(()); + } + } + } + } +} + +fn convert_to_tx_legacy(tx: &Transaction) -> Result { + // create a legacy transaction + let chain_id = tx.chain_id.ok_or_else(|| anyhow!("chain id is required"))?; + let gas_price = tx + .gas_price + .ok_or_else(|| anyhow!("gas price is required"))?; + let input = Bytes::from(tx.input.clone().to_vec()); + + let tx_legacy = TxLegacy { + chain_id: Some(chain_id.as_u64()), + nonce: tx.nonce.as_u64(), + gas_price: gas_price.as_u128(), + gas_limit: tx.gas.as_u64(), + to: match tx.to { + Some(address) => { + TransactionKind::Call(reth_primitives::Address::from_slice(address.as_bytes())) + } + None => TransactionKind::Create, + }, + value: reth_primitives::alloy_primitives::Uint::from(tx.value.as_u128()), + input, + }; + + Ok(tx_legacy) +} + +// === wrap the reth/crates/primitives/src/transaction/legacy.rs TxLegacy private methods === + +pub fn payload_len_for_signature(tx: &TxLegacy) -> usize { + let payload_length = fields_len(tx) + eip155_fields_len(tx); + // 'header length' + 'payload length' + length_of_length(payload_length) + payload_length +} + +pub fn encode_for_signing(tx: &TxLegacy, out: &mut dyn bytes::BufMut) { + let payload_length = fields_len(tx) + eip155_fields_len(tx); + Header { + list: true, + payload_length, + } + .encode(out); + encode_fields(tx, out); + encode_eip155_fields(tx, out); +} + +pub fn fields_len(tx: &TxLegacy) -> usize { + tx.nonce.length() + + tx.gas_price.length() + + tx.gas_limit.length() + + tx.to.length() + + tx.value.length() + + tx.input.0.length() +} + +pub fn eip155_fields_len(tx: &TxLegacy) -> usize { + if let Some(id) = tx.chain_id { + id.length() + 2 + } else { + 0 + } +} + +pub fn encode_fields(tx: &TxLegacy, out: &mut dyn bytes::BufMut) { + tx.nonce.encode(out); + tx.gas_price.encode(out); + tx.gas_limit.encode(out); + tx.to.encode(out); + tx.value.encode(out); + tx.input.0.encode(out); +} + +pub fn encode_eip155_fields(tx: &TxLegacy, out: &mut dyn bytes::BufMut) { + if let Some(id) = tx.chain_id { + id.encode(out); + 0x00u8.encode(out); + 0x00u8.encode(out); + } }