From b4369bbcdd70ef9ef0cf89c3c19c45a91282c45d Mon Sep 17 00:00:00 2001 From: karim-en Date: Fri, 14 Jul 2023 01:11:17 +0100 Subject: [PATCH 01/22] Update `eth-types` for cancun --- contracts/near/eth-types/src/lib.rs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/contracts/near/eth-types/src/lib.rs b/contracts/near/eth-types/src/lib.rs index c2fb72f6..65b0d75c 100644 --- a/contracts/near/eth-types/src/lib.rs +++ b/contracts/near/eth-types/src/lib.rs @@ -159,6 +159,16 @@ pub struct BlockHeader { )] pub base_fee_per_gas: Option, pub withdrawals_root: Option, + #[cfg_attr( + all(feature = "eth2", not(target_arch = "wasm32")), + serde(deserialize_with = "u64_hex_be_option") + )] + pub data_gas_used: Option, + #[cfg_attr( + all(feature = "eth2", not(target_arch = "wasm32")), + serde(deserialize_with = "u64_hex_be_option") + )] + pub excess_data_gas: Option, pub hash: Option, pub partial_hash: Option, @@ -192,6 +202,12 @@ impl BlockHeader { if self.withdrawals_root.is_some() { list_size += 1; } + if self.data_gas_used.is_some() { + list_size += 1; + } + if self.excess_data_gas.is_some() { + list_size += 1; + } stream.begin_list(list_size); @@ -221,6 +237,14 @@ impl BlockHeader { if let Some(withdrawals_root) = &self.withdrawals_root { stream.append(withdrawals_root); } + + if let Some(data_gas_used) = &self.data_gas_used { + stream.append(data_gas_used); + } + + if let Some(excess_data_gas) = &self.excess_data_gas { + stream.append(excess_data_gas); + } } pub fn calculate_hash(&self) -> H256 { @@ -259,6 +283,8 @@ impl RlpDecodable for BlockHeader { nonce: serialized.val_at(14)?, base_fee_per_gas: serialized.val_at(15).ok(), withdrawals_root: serialized.val_at(16).ok(), + data_gas_used: serialized.val_at(17).ok(), + excess_data_gas: serialized.val_at(18).ok(), hash: None, partial_hash: None, }; From cdac3c9cd7b0958128c137e1de5ac9c29b1e0a21 Mon Sep 17 00:00:00 2001 From: karim-en Date: Fri, 14 Jul 2023 01:47:53 +0100 Subject: [PATCH 02/22] Add `sepolia` network config --- contracts/near/eth2-utility/src/consensus.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/contracts/near/eth2-utility/src/consensus.rs b/contracts/near/eth2-utility/src/consensus.rs index 4174d9b8..91dd95d7 100644 --- a/contracts/near/eth2-utility/src/consensus.rs +++ b/contracts/near/eth2-utility/src/consensus.rs @@ -31,6 +31,7 @@ pub const EXECUTION_PROOF_SIZE: usize = pub enum Network { Mainnet, Goerli, + Sepolia, } impl FromStr for Network { @@ -77,6 +78,17 @@ impl NetworkConfig { capella_fork_version: [0x03, 0x00, 0x10, 0x20], capella_fork_epoch: 162304, }, + Network::Sepolia => Self { + genesis_validators_root: [ + 0xd8, 0xea, 0x17, 0x1f, 0x3c, 0x94, 0xae, 0xa2, 0x1e, 0xbc, 0x42, 0xa1, 0xed, + 0x61, 0x05, 0x2a, 0xcf, 0x3f, 0x92, 0x09, 0xc0, 0x0e, 0x4e, 0xfb, 0xaa, 0xdd, + 0xac, 0x09, 0xed, 0x9b, 0x80, 0x78, + ], + bellatrix_fork_version: [0x90, 0x00, 0x00, 0x71], + bellatrix_fork_epoch: 100, + capella_fork_version: [0x90, 0x00, 0x00, 0x72], + capella_fork_epoch: 56832, + }, } } From 036cfe11aafb15652f186a4da730c8664a12599b Mon Sep 17 00:00:00 2001 From: karim-en Date: Sun, 10 Dec 2023 02:10:15 +0000 Subject: [PATCH 03/22] Update `BlockHeader` fields --- contracts/near/eth-types/src/lib.rs | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/contracts/near/eth-types/src/lib.rs b/contracts/near/eth-types/src/lib.rs index 65b0d75c..e5e962a0 100644 --- a/contracts/near/eth-types/src/lib.rs +++ b/contracts/near/eth-types/src/lib.rs @@ -163,12 +163,13 @@ pub struct BlockHeader { all(feature = "eth2", not(target_arch = "wasm32")), serde(deserialize_with = "u64_hex_be_option") )] - pub data_gas_used: Option, + pub blob_gas_used: Option, #[cfg_attr( all(feature = "eth2", not(target_arch = "wasm32")), serde(deserialize_with = "u64_hex_be_option") )] - pub excess_data_gas: Option, + pub excess_blob_gas: Option, + pub parent_beacon_block_root: Option, pub hash: Option, pub partial_hash: Option, @@ -202,10 +203,13 @@ impl BlockHeader { if self.withdrawals_root.is_some() { list_size += 1; } - if self.data_gas_used.is_some() { + if self.blob_gas_used.is_some() { list_size += 1; } - if self.excess_data_gas.is_some() { + if self.excess_blob_gas.is_some() { + list_size += 1; + } + if self.parent_beacon_block_root.is_some() { list_size += 1; } @@ -238,12 +242,16 @@ impl BlockHeader { stream.append(withdrawals_root); } - if let Some(data_gas_used) = &self.data_gas_used { - stream.append(data_gas_used); + if let Some(blob_gas_used) = &self.blob_gas_used { + stream.append(blob_gas_used); + } + + if let Some(excess_blob_gas) = &self.excess_blob_gas { + stream.append(excess_blob_gas); } - if let Some(excess_data_gas) = &self.excess_data_gas { - stream.append(excess_data_gas); + if let Some(parent_beacon_block_root) = &self.parent_beacon_block_root { + stream.append(parent_beacon_block_root); } } @@ -283,8 +291,9 @@ impl RlpDecodable for BlockHeader { nonce: serialized.val_at(14)?, base_fee_per_gas: serialized.val_at(15).ok(), withdrawals_root: serialized.val_at(16).ok(), - data_gas_used: serialized.val_at(17).ok(), - excess_data_gas: serialized.val_at(18).ok(), + blob_gas_used: serialized.val_at(17).ok(), + excess_blob_gas: serialized.val_at(18).ok(), + parent_beacon_block_root: serialized.val_at(19).ok(), hash: None, partial_hash: None, }; From 548863d68ede96c1fda6e96096bad7cbc234ab9a Mon Sep 17 00:00:00 2001 From: karim-en Date: Thu, 11 Jan 2024 03:02:07 +0000 Subject: [PATCH 04/22] Add deneb config for sepolia and goerli --- contracts/near/eth2-utility/src/consensus.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/contracts/near/eth2-utility/src/consensus.rs b/contracts/near/eth2-utility/src/consensus.rs index 91dd95d7..bb8461d6 100644 --- a/contracts/near/eth2-utility/src/consensus.rs +++ b/contracts/near/eth2-utility/src/consensus.rs @@ -51,6 +51,8 @@ pub struct NetworkConfig { pub bellatrix_fork_epoch: u64, pub capella_fork_version: ForkVersion, pub capella_fork_epoch: u64, + pub deneb_fork_version: ForkVersion, + pub deneb_fork_epoch: u64, } impl NetworkConfig { @@ -66,6 +68,8 @@ impl NetworkConfig { bellatrix_fork_epoch: 144896, capella_fork_version: [0x03, 0x00, 0x00, 0x00], capella_fork_epoch: 194048, + deneb_fork_version: [0x04, 0x00, 0x00, 0x00], + deneb_fork_epoch: u64::MAX, }, Network::Goerli => Self { genesis_validators_root: [ @@ -77,6 +81,8 @@ impl NetworkConfig { bellatrix_fork_epoch: 112260, capella_fork_version: [0x03, 0x00, 0x10, 0x20], capella_fork_epoch: 162304, + deneb_fork_version: [0x04, 0x00, 0x10, 0x20], + deneb_fork_epoch: 231680, }, Network::Sepolia => Self { genesis_validators_root: [ @@ -88,6 +94,8 @@ impl NetworkConfig { bellatrix_fork_epoch: 100, capella_fork_version: [0x90, 0x00, 0x00, 0x72], capella_fork_epoch: 56832, + deneb_fork_version: [0x04, 0x00, 0x10, 0x20], + deneb_fork_epoch: 132608, }, } } From 5f5c7cc6bbfce6f28f03f0738bc53430bbf827c1 Mon Sep 17 00:00:00 2001 From: karim-en Date: Thu, 11 Jan 2024 19:05:45 +0000 Subject: [PATCH 05/22] Fix `compute_fork_version` --- contracts/near/eth2-utility/src/consensus.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/contracts/near/eth2-utility/src/consensus.rs b/contracts/near/eth2-utility/src/consensus.rs index bb8461d6..828f8f9d 100644 --- a/contracts/near/eth2-utility/src/consensus.rs +++ b/contracts/near/eth2-utility/src/consensus.rs @@ -101,6 +101,10 @@ impl NetworkConfig { } pub fn compute_fork_version(&self, epoch: Epoch) -> Option { + if epoch >= self.deneb_fork_epoch { + return Some(self.deneb_fork_version); + } + if epoch >= self.capella_fork_epoch { return Some(self.capella_fork_version); } From be4977dabe38c82c9b35dc4b19682f8f0f538218 Mon Sep 17 00:00:00 2001 From: karim-en Date: Thu, 11 Jan 2024 19:49:09 +0000 Subject: [PATCH 06/22] Use workspace version --- eth2near/Cargo.toml | 8 ++++++++ eth2near/eth2-contract-init/Cargo.toml | 8 ++++---- eth2near/eth2near-block-relay-rs/Cargo.toml | 10 +++++----- eth2near/eth_rpc_client/Cargo.toml | 10 +++++----- eth2near/finality-update-verify/Cargo.toml | 6 +++--- 5 files changed, 25 insertions(+), 17 deletions(-) diff --git a/eth2near/Cargo.toml b/eth2near/Cargo.toml index be768805..65406fad 100644 --- a/eth2near/Cargo.toml +++ b/eth2near/Cargo.toml @@ -9,6 +9,14 @@ members = [ "logger", ] +[workspace.dependencies] +bls = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } +types = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } +tree_hash = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } +merkle_proof = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } +eth2_hashing = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } +eth2_ssz = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } + [patch] [patch.crates-io] eth2_ssz = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } diff --git a/eth2near/eth2-contract-init/Cargo.toml b/eth2near/eth2-contract-init/Cargo.toml index bdbd133f..ddef4661 100644 --- a/eth2near/eth2-contract-init/Cargo.toml +++ b/eth2near/eth2-contract-init/Cargo.toml @@ -4,10 +4,10 @@ version = "0.3.0" edition = "2021" [dependencies] -tree_hash = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } -merkle_proof = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } -types = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } -eth2_to_near_relay = { path = "../eth2near-block-relay-rs" } +tree_hash = { workspace = true } +merkle_proof = { workspace = true } +types = { workspace = true } +eth2_to_near_relay = { path = "../eth2near-block-relay-rs"} eth_rpc_client = { path = "../eth_rpc_client" } eth-types = { path = "../../contracts/near/eth-types/" } eth2-utility = { path = "../../contracts/near/eth2-utility" } diff --git a/eth2near/eth2near-block-relay-rs/Cargo.toml b/eth2near/eth2near-block-relay-rs/Cargo.toml index 9503c93c..040ac798 100644 --- a/eth2near/eth2near-block-relay-rs/Cargo.toml +++ b/eth2near/eth2near-block-relay-rs/Cargo.toml @@ -4,11 +4,11 @@ version = "0.3.0" edition = "2021" [dependencies] -types = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } -tree_hash = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } -merkle_proof = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } -eth2_hashing = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } -eth2_ssz = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } +types = { workspace = true } +tree_hash = { workspace = true } +merkle_proof = { workspace = true } +eth2_hashing = { workspace = true } +eth2_ssz = { workspace = true } eth-types = { path = "../../contracts/near/eth-types/" } eth2-utility = { path = "../../contracts/near/eth2-utility" } diff --git a/eth2near/eth_rpc_client/Cargo.toml b/eth2near/eth_rpc_client/Cargo.toml index 83b6c7fe..28207eae 100644 --- a/eth2near/eth_rpc_client/Cargo.toml +++ b/eth2near/eth_rpc_client/Cargo.toml @@ -6,11 +6,11 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -types = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } -tree_hash = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } -merkle_proof = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } -eth2_hashing = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } -eth2_ssz = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } +types = { workspace = true } +tree_hash = { workspace = true } +merkle_proof = { workspace = true } +eth2_hashing = { workspace = true } +eth2_ssz = { workspace = true } log = { version = "0.4", features = ["std", "serde"] } serde_json = "1.0.74" serde = { version = "1.0", features = ["derive"] } diff --git a/eth2near/finality-update-verify/Cargo.toml b/eth2near/finality-update-verify/Cargo.toml index 8ffbd70b..30cc90e1 100644 --- a/eth2near/finality-update-verify/Cargo.toml +++ b/eth2near/finality-update-verify/Cargo.toml @@ -4,9 +4,9 @@ version = "0.1.0" edition = "2021" [dependencies] -bls = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } -tree_hash = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } -types = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } +bls = { workspace = true } +tree_hash = { workspace = true } +types = { workspace = true } eth-types = { path ="../../contracts/near/eth-types/" } eth2-utility = { path ="../../contracts/near/eth2-utility"} bitvec = "1.0.0" From 22ea171747ad5739a153cfc99f4ff030d7cb6ab8 Mon Sep 17 00:00:00 2001 From: karim-en Date: Thu, 11 Jan 2024 23:46:40 +0000 Subject: [PATCH 07/22] Update & cleanup dependencies --- contracts/near/Cargo.lock | 204 +++++++++--------- contracts/near/Cargo.toml | 27 ++- contracts/near/eth-prover/Cargo.toml | 13 +- contracts/near/eth-types/Cargo.toml | 26 +-- contracts/near/eth-types/src/eth2.rs | 15 +- contracts/near/eth-types/src/lib.rs | 17 +- contracts/near/eth-types/src/macros.rs | 5 +- contracts/near/eth2-client/Cargo.toml | 15 +- contracts/near/eth2-client/src/lib.rs | 28 +-- .../near/eth2-client/src/tests/unit_tests.rs | 6 +- contracts/near/eth2-utility/Cargo.toml | 12 +- contracts/near/eth2-utility/src/consensus.rs | 53 ++++- contracts/near/eth2_hashing/Cargo.toml | 8 +- 13 files changed, 236 insertions(+), 193 deletions(-) diff --git a/contracts/near/Cargo.lock b/contracts/near/Cargo.lock index 822ae64e..81b1dba5 100644 --- a/contracts/near/Cargo.lock +++ b/contracts/near/Cargo.lock @@ -98,7 +98,7 @@ dependencies = [ [[package]] name = "amcl" version = "0.3.0" -source = "git+https://github.com/sigp/milagro_bls?tag=v1.4.2#16655aa033175a90c10ef02aa144e2835de23aec" +source = "git+https://github.com/sigp/milagro_bls?tag=v1.5.1#d3fc0a40cfe8b72ccda46ba050ee6786a59ce753" [[package]] name = "android_system_properties" @@ -433,17 +433,17 @@ dependencies = [ [[package]] name = "bls" version = "0.2.0" -source = "git+https://github.com/aurora-is-near/lighthouse.git?tag=v3.5.1-wasm#ce4e2b44630f5ddc04eda933eaa69c33d582c3f0" +source = "git+https://github.com/aurora-is-near/lighthouse.git?tag=v4.6.0-wasm#7f7b139b5f9d81bcb9ed8bbdd5561cfb9e38bb12" dependencies = [ - "eth2_hashing", - "eth2_serde_utils", - "eth2_ssz", + "arbitrary", "ethereum-types 0.14.1", + "ethereum_hashing", + "ethereum_serde_utils", + "ethereum_ssz", "hex 0.4.3", "milagro_bls", - "rand 0.7.3", + "rand 0.8.5", "serde", - "serde_derive", "tree_hash", "zeroize", ] @@ -1125,10 +1125,10 @@ version = "0.1.0" dependencies = [ "borsh", "derive_more", - "eth2_serde_utils", - "eth2_ssz", - "eth2_ssz_derive", "ethereum-types 0.14.1", + "ethereum_serde_utils", + "ethereum_ssz", + "ethereum_ssz_derive", "hex 0.4.3", "near-sdk", "rlp 0.5.2", @@ -1153,7 +1153,6 @@ dependencies = [ "ethereum-types 0.14.1", "hex 0.4.3", "lazy_static", - "merkle_proof", "near-plugins", "near-sdk", "near-units", @@ -1171,55 +1170,14 @@ dependencies = [ "borsh", "eth-types", "ethereum-types 0.14.1", + "ethereum_hashing", "hex 0.4.3", "lazy_static", - "merkle_proof", "near-sdk", "serde_json", "tree_hash", ] -[[package]] -name = "eth2_hashing" -version = "0.3.0" -dependencies = [ - "lazy_static", - "near-sdk", -] - -[[package]] -name = "eth2_serde_utils" -version = "0.1.1" -source = "git+https://github.com/aurora-is-near/lighthouse.git?tag=v3.5.1-wasm#ce4e2b44630f5ddc04eda933eaa69c33d582c3f0" -dependencies = [ - "ethereum-types 0.14.1", - "hex 0.4.3", - "serde", - "serde_derive", - "serde_json", -] - -[[package]] -name = "eth2_ssz" -version = "0.4.1" -source = "git+https://github.com/aurora-is-near/lighthouse.git?tag=v3.5.1-wasm#ce4e2b44630f5ddc04eda933eaa69c33d582c3f0" -dependencies = [ - "ethereum-types 0.14.1", - "itertools", - "smallvec 1.10.0", -] - -[[package]] -name = "eth2_ssz_derive" -version = "0.3.1" -source = "git+https://github.com/aurora-is-near/lighthouse.git?tag=v3.5.1-wasm#ce4e2b44630f5ddc04eda933eaa69c33d582c3f0" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "ethabi" version = "16.0.0" @@ -1232,7 +1190,7 @@ dependencies = [ "serde_json", "sha3 0.9.1", "thiserror", - "uint 0.9.5", + "uint 0.9.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1254,7 +1212,7 @@ checksum = "bfb684ac8fa8f6c5759f788862bb22ec6fe3cb392f6bfd08e3c64b603661e3f8" dependencies = [ "crunchy", "fixed-hash 0.7.0", - "impl-rlp 0.3.0", + "impl-rlp 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "impl-serde 0.3.2", "tiny-keccak", ] @@ -1262,12 +1220,11 @@ dependencies = [ [[package]] name = "ethbloom" version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" +source = "git+https://github.com/aurora-is-near/parity-common?tag=v0.14.1-wasm#2594d5a479cb9eb4962edf9d82434219be1c8f4f" dependencies = [ "crunchy", "fixed-hash 0.8.0", - "impl-rlp 0.3.0", + "impl-rlp 0.3.0 (git+https://github.com/aurora-is-near/parity-common?tag=v0.14.1-wasm)", "impl-serde 0.4.0", "tiny-keccak", ] @@ -1280,24 +1237,67 @@ checksum = "05136f7057fe789f06e6d41d07b34e6f70d8c86e5693b60f97aaa6553553bdaf" dependencies = [ "ethbloom 0.11.1", "fixed-hash 0.7.0", - "impl-rlp 0.3.0", + "impl-rlp 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "impl-serde 0.3.2", "primitive-types 0.10.1", - "uint 0.9.5", + "uint 0.9.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "ethereum-types" version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" +source = "git+https://github.com/aurora-is-near/parity-common?tag=v0.14.1-wasm#2594d5a479cb9eb4962edf9d82434219be1c8f4f" dependencies = [ "ethbloom 0.13.0", "fixed-hash 0.8.0", - "impl-rlp 0.3.0", + "impl-rlp 0.3.0 (git+https://github.com/aurora-is-near/parity-common?tag=v0.14.1-wasm)", "impl-serde 0.4.0", "primitive-types 0.12.1", - "uint 0.9.5", + "uint 0.9.5 (git+https://github.com/aurora-is-near/parity-common?tag=v0.14.1-wasm)", +] + +[[package]] +name = "ethereum_hashing" +version = "1.0.0-beta.2" +dependencies = [ + "lazy_static", + "near-sdk", +] + +[[package]] +name = "ethereum_serde_utils" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de4d5951468846963c24e8744c133d44f39dff2cd3a233f6be22b370d08a524f" +dependencies = [ + "ethereum-types 0.14.1", + "hex 0.4.3", + "serde", + "serde_derive", + "serde_json", +] + +[[package]] +name = "ethereum_ssz" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e61ffea29f26e8249d35128a82ec8d3bd4fbc80179ea5f5e5e3daafef6a80fcb" +dependencies = [ + "ethereum-types 0.14.1", + "itertools", + "smallvec 1.10.0", +] + +[[package]] +name = "ethereum_ssz_derive" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6085d7fd3cf84bd2b8fec150d54c8467fb491d8db9c460607c5534f653a0ee38" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -1373,8 +1373,7 @@ dependencies = [ [[package]] name = "fixed-hash" version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +source = "git+https://github.com/aurora-is-near/parity-common?tag=v0.14.1-wasm#2594d5a479cb9eb4962edf9d82434219be1c8f4f" dependencies = [ "byteorder", "rustc-hex", @@ -1889,6 +1888,14 @@ dependencies = [ "rlp 0.5.2", ] +[[package]] +name = "impl-rlp" +version = "0.3.0" +source = "git+https://github.com/aurora-is-near/parity-common?tag=v0.14.1-wasm#2594d5a479cb9eb4962edf9d82434219be1c8f4f" +dependencies = [ + "rlp 0.5.2", +] + [[package]] name = "impl-serde" version = "0.3.2" @@ -1901,8 +1908,7 @@ dependencies = [ [[package]] name = "impl-serde" version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" +source = "git+https://github.com/aurora-is-near/parity-common?tag=v0.14.1-wasm#2594d5a479cb9eb4962edf9d82434219be1c8f4f" dependencies = [ "serde", ] @@ -2122,26 +2128,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" -[[package]] -name = "merkle_proof" -version = "0.2.0" -source = "git+https://github.com/aurora-is-near/lighthouse.git?tag=v3.5.1-wasm#ce4e2b44630f5ddc04eda933eaa69c33d582c3f0" -dependencies = [ - "eth2_hashing", - "ethereum-types 0.14.1", - "lazy_static", - "safe_arith", -] - [[package]] name = "milagro_bls" -version = "1.4.2" -source = "git+https://github.com/sigp/milagro_bls?tag=v1.4.2#16655aa033175a90c10ef02aa144e2835de23aec" +version = "1.5.1" +source = "git+https://github.com/sigp/milagro_bls?tag=v1.5.1#d3fc0a40cfe8b72ccda46ba050ee6786a59ce753" dependencies = [ "amcl", "hex 0.4.3", "lazy_static", - "rand 0.7.3", + "rand 0.8.5", "zeroize", ] @@ -3230,21 +3225,20 @@ checksum = "05e4722c697a58a99d5d06a08c30821d7c082a4632198de1eaa5a6c22ef42373" dependencies = [ "fixed-hash 0.7.0", "impl-codec", - "impl-rlp 0.3.0", + "impl-rlp 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "impl-serde 0.3.2", - "uint 0.9.5", + "uint 0.9.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "primitive-types" version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f3486ccba82358b11a77516035647c34ba167dfa53312630de83b12bd4f3d66" +source = "git+https://github.com/aurora-is-near/parity-common?tag=v0.14.1-wasm#2594d5a479cb9eb4962edf9d82434219be1c8f4f" dependencies = [ "fixed-hash 0.8.0", - "impl-rlp 0.3.0", + "impl-rlp 0.3.0 (git+https://github.com/aurora-is-near/parity-common?tag=v0.14.1-wasm)", "impl-serde 0.4.0", - "uint 0.9.5", + "uint 0.9.5 (git+https://github.com/aurora-is-near/parity-common?tag=v0.14.1-wasm)", ] [[package]] @@ -3595,8 +3589,7 @@ dependencies = [ [[package]] name = "rlp" version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" +source = "git+https://github.com/aurora-is-near/parity-common?tag=v0.14.1-wasm#2594d5a479cb9eb4962edf9d82434219be1c8f4f" dependencies = [ "bytes", "rustc-hex", @@ -3605,8 +3598,7 @@ dependencies = [ [[package]] name = "rlp-derive" version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" +source = "git+https://github.com/aurora-is-near/parity-common?tag=v0.14.1-wasm#2594d5a479cb9eb4962edf9d82434219be1c8f4f" dependencies = [ "proc-macro2", "quote", @@ -3672,11 +3664,6 @@ version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" -[[package]] -name = "safe_arith" -version = "0.1.0" -source = "git+https://github.com/aurora-is-near/lighthouse.git?tag=v3.5.1-wasm#ce4e2b44630f5ddc04eda933eaa69c33d582c3f0" - [[package]] name = "schannel" version = "0.1.21" @@ -4567,18 +4554,20 @@ dependencies = [ [[package]] name = "tree_hash" -version = "0.4.1" -source = "git+https://github.com/aurora-is-near/lighthouse.git?tag=v3.5.1-wasm#ce4e2b44630f5ddc04eda933eaa69c33d582c3f0" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c998ac5fe2b07c025444bdd522e6258110b63861c6698eedc610c071980238d" dependencies = [ - "eth2_hashing", "ethereum-types 0.14.1", + "ethereum_hashing", "smallvec 1.10.0", ] [[package]] name = "tree_hash_derive" -version = "0.4.0" -source = "git+https://github.com/aurora-is-near/lighthouse.git?tag=v3.5.1-wasm#ce4e2b44630f5ddc04eda933eaa69c33d582c3f0" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84303a9c7cda5f085a3ed9cd241d1e95e04d88aab1d679b02f212e653537ba86" dependencies = [ "darling", "quote", @@ -4621,6 +4610,17 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "uint" +version = "0.9.5" +source = "git+https://github.com/aurora-is-near/parity-common?tag=v0.14.1-wasm#2594d5a479cb9eb4962edf9d82434219be1c8f4f" +dependencies = [ + "byteorder", + "crunchy", + "hex 0.4.3", + "static_assertions", +] + [[package]] name = "unicode-bidi" version = "0.3.11" diff --git a/contracts/near/Cargo.toml b/contracts/near/Cargo.toml index b8b50805..02ffcdea 100644 --- a/contracts/near/Cargo.toml +++ b/contracts/near/Cargo.toml @@ -16,11 +16,26 @@ debug = false panic = "abort" overflow-checks = true +[workspace.dependencies] +near-sdk = "4.1.1" +borsh = "0.9.3" +rlp = "0.5.2" +rlp-derive = "0.1.0" +ethereum-types = "0.14.1" +tree_hash = "0.5" +tree_hash_derive = "0.5" +ethereum_ssz = "0.5" +ethereum_ssz_derive = "0.5" +ethereum_serde_utils = "0.5" +ethereum_hashing = { version = "1.0.0-beta.2", default-features = false } +derive_more = "^0.99.2" +hex = "0.4.2" +bitvec = "1.0.0" +near-plugins = { git = "https://github.com/aurora-is-near/near-plugins", tag = "v0.1.0" } + [patch] [patch.crates-io] -eth2_hashing = { path = "eth2_hashing" } -eth2_ssz = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } -tree_hash = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm"} -tree_hash_derive = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm"} -eth2_serde_utils = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } -eth2_ssz_derive = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } \ No newline at end of file +ethereum_hashing = { path = "eth2_hashing" } +ethereum-types = { git = "https://github.com/aurora-is-near/parity-common", tag = "v0.14.1-wasm" } +rlp = { git = "https://github.com/aurora-is-near/parity-common", tag = "v0.14.1-wasm" } +rlp-derive = { git = "https://github.com/aurora-is-near/parity-common", tag = "v0.14.1-wasm" } diff --git a/contracts/near/eth-prover/Cargo.toml b/contracts/near/eth-prover/Cargo.toml index 6bc071dc..d3b009d4 100644 --- a/contracts/near/eth-prover/Cargo.toml +++ b/contracts/near/eth-prover/Cargo.toml @@ -9,15 +9,14 @@ crate-type = ["cdylib", "rlib"] [dependencies] eth-types = { path = "../eth-types", default-features = false } -serde = { version = "1.0", features = ["derive"] } -serde_json = "1.0" -near-sdk = "4.1.1" -borsh = "0.9.3" -rlp = "0.5.2" -hex = "0.4.2" -near-plugins = { git = "https://github.com/aurora-is-near/near-plugins", tag = "v0.1.0" } +near-sdk.workspace = true +borsh.workspace = true +rlp.workspace = true +near-plugins.workspace = true [dev-dependencies] +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" hex = { version = "0.4.3", features = ["serde"] } indicatif = "0.14" lazy_static = "*" diff --git a/contracts/near/eth-types/Cargo.toml b/contracts/near/eth-types/Cargo.toml index 868c2c46..d5576a75 100644 --- a/contracts/near/eth-types/Cargo.toml +++ b/contracts/near/eth-types/Cargo.toml @@ -9,18 +9,18 @@ crate-type = ["cdylib", "rlib"] [dependencies] serde = { version = "1.0", features = ["derive"] } -near-sdk = "4.1.1" -borsh = "0.9.3" -rlp = "0.5.2" -rlp-derive = "0.1.0" -ethereum-types = { version = "0.14.1", features = ["rlp", "serialize"], default-features = false } -derive_more = "^0.99.2" -eth2_ssz = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm", optional = true } -eth2_ssz_derive = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm", optional = true } -tree_hash = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm", optional = true } -tree_hash_derive = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm", optional = true } -eth2_serde_utils = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm", optional = true } -hex = "0.4.0" +near-sdk.workspace = true +borsh.workspace = true +rlp.workspace = true +rlp-derive.workspace = true +ethereum-types.workspace = true +derive_more.workspace = true +ethereum_ssz = { workspace = true, optional = true } +ethereum_ssz_derive = { workspace = true, optional = true } +tree_hash = { workspace = true, optional = true } +tree_hash_derive = { workspace = true, optional = true } +ethereum_serde_utils = { workspace = true, optional = true } +hex.workspace = true [target.'cfg(not(target_arch = "wasm32"))'.dependencies] serde-big-array = "0.4.1" @@ -28,4 +28,4 @@ sha3 = "0.10.0" [features] default = ["eth2"] -eth2 = ["dep:eth2_ssz", "dep:eth2_ssz_derive", "dep:tree_hash", "dep:tree_hash_derive", "dep:eth2_serde_utils"] \ No newline at end of file +eth2 = ["dep:ethereum_ssz", "dep:ethereum_ssz_derive", "dep:tree_hash", "dep:tree_hash_derive", "dep:ethereum_serde_utils"] \ No newline at end of file diff --git a/contracts/near/eth-types/src/eth2.rs b/contracts/near/eth-types/src/eth2.rs index fba9590a..e1908089 100644 --- a/contracts/near/eth-types/src/eth2.rs +++ b/contracts/near/eth-types/src/eth2.rs @@ -32,15 +32,9 @@ arr_wrapper_impl_tree_hash_and_borsh!(SyncCommitteeBits, SYNC_COMMITTEE_BITS_SIZ #[derive(Debug, Clone, BorshDeserialize, BorshSerialize, tree_hash_derive::TreeHash)] #[cfg_attr(not(target_arch = "wasm32"), derive(Serialize, Deserialize))] pub struct BeaconBlockHeader { - #[cfg_attr( - not(target_arch = "wasm32"), - serde(with = "eth2_serde_utils::quoted_u64") - )] + #[cfg_attr(not(target_arch = "wasm32"), serde(with = "serde_utils::quoted_u64"))] pub slot: Slot, - #[cfg_attr( - not(target_arch = "wasm32"), - serde(with = "eth2_serde_utils::quoted_u64") - )] + #[cfg_attr(not(target_arch = "wasm32"), serde(with = "serde_utils::quoted_u64"))] pub proposer_index: u64, pub parent_root: H256, pub state_root: H256, @@ -124,10 +118,7 @@ pub struct FinalizedHeaderUpdate { pub struct LightClientUpdate { pub attested_beacon_header: BeaconBlockHeader, pub sync_aggregate: SyncAggregate, - #[cfg_attr( - not(target_arch = "wasm32"), - serde(with = "eth2_serde_utils::quoted_u64") - )] + #[cfg_attr(not(target_arch = "wasm32"), serde(with = "serde_utils::quoted_u64"))] pub signature_slot: Slot, pub finality_update: FinalizedHeaderUpdate, pub sync_committee_update: Option, diff --git a/contracts/near/eth-types/src/lib.rs b/contracts/near/eth-types/src/lib.rs index e5e962a0..57edda73 100644 --- a/contracts/near/eth-types/src/lib.rs +++ b/contracts/near/eth-types/src/lib.rs @@ -136,19 +136,19 @@ pub struct BlockHeader { pub difficulty: U256, #[cfg_attr( all(feature = "eth2", not(target_arch = "wasm32")), - serde(with = "eth2_serde_utils::u64_hex_be") + serde(with = "serde_utils::u64_hex_be") )] pub number: u64, pub gas_limit: U256, pub gas_used: U256, #[cfg_attr( all(feature = "eth2", not(target_arch = "wasm32")), - serde(with = "eth2_serde_utils::u64_hex_be") + serde(with = "serde_utils::u64_hex_be") )] pub timestamp: u64, #[cfg_attr( all(feature = "eth2", not(target_arch = "wasm32")), - serde(with = "eth2_serde_utils::hex_vec") + serde(with = "serde_utils::hex_vec") )] pub extra_data: Vec, pub mix_hash: H256, @@ -161,14 +161,17 @@ pub struct BlockHeader { pub withdrawals_root: Option, #[cfg_attr( all(feature = "eth2", not(target_arch = "wasm32")), - serde(deserialize_with = "u64_hex_be_option") + serde(deserialize_with = "u64_hex_be_option"), + serde(default) )] pub blob_gas_used: Option, #[cfg_attr( all(feature = "eth2", not(target_arch = "wasm32")), - serde(deserialize_with = "u64_hex_be_option") + serde(deserialize_with = "u64_hex_be_option"), + serde(default) )] pub excess_blob_gas: Option, + #[cfg_attr(all(feature = "eth2", not(target_arch = "wasm32")), serde(default))] pub parent_beacon_block_root: Option, pub hash: Option, @@ -180,9 +183,7 @@ fn u64_hex_be_option<'de, D>(deserializer: D) -> Result, D::Error> where D: serde::Deserializer<'de>, { - Ok(Some(eth2_serde_utils::u64_hex_be::deserialize( - deserializer, - )?)) + Ok(Some(serde_utils::u64_hex_be::deserialize(deserializer)?)) } impl BlockHeader { diff --git a/contracts/near/eth-types/src/macros.rs b/contracts/near/eth-types/src/macros.rs index a885c60c..01be99e1 100644 --- a/contracts/near/eth-types/src/macros.rs +++ b/contracts/near/eth-types/src/macros.rs @@ -80,7 +80,10 @@ macro_rules! arr_wrapper_impl_tree_hash_and_borsh { #[cfg(not(target_arch = "wasm32"))] impl Serialize for $name { - fn serialize(&self, serializer: S) -> Result<::Ok, ::Error> + fn serialize( + &self, + serializer: S, + ) -> Result<::Ok, ::Error> where S: Serializer, { diff --git a/contracts/near/eth2-client/Cargo.toml b/contracts/near/eth2-client/Cargo.toml index 30713547..938473b7 100644 --- a/contracts/near/eth2-client/Cargo.toml +++ b/contracts/near/eth2-client/Cargo.toml @@ -8,16 +8,15 @@ edition = "2021" crate-type = ["cdylib", "rlib"] [dependencies] -ethereum-types = { version = "0.14.1", features = ["rlp", "serialize"], default-features = false } eth-types = { path = "../eth-types" } eth2-utility = { path = "../eth2-utility" } -tree_hash = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } -merkle_proof = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } -bls = { git = "https://github.com/aurora-is-near/lighthouse.git", optional = true, tag = "v3.5.1-wasm", default-features = false, features = ["milagro"]} -near-sdk = "4.1.1" -borsh = "0.9.3" -bitvec = "1.0.0" -near-plugins = { git = "https://github.com/aurora-is-near/near-plugins", tag = "v0.1.0" } +bls = { git = "https://github.com/aurora-is-near/lighthouse.git", optional = true, tag = "v4.6.0-wasm", default-features = false, features = ["milagro"]} +ethereum-types.workspace = true +tree_hash.workspace = true +near-sdk.workspace = true +borsh.workspace = true +bitvec.workspace = true +near-plugins.workspace = true [dev-dependencies] lazy_static = "1.4.0" diff --git a/contracts/near/eth2-client/src/lib.rs b/contracts/near/eth2-client/src/lib.rs index d9a05fea..9efc256e 100644 --- a/contracts/near/eth2-client/src/lib.rs +++ b/contracts/near/eth2-client/src/lib.rs @@ -449,18 +449,19 @@ impl Eth2Client { // Verify that the `finality_branch`, confirms `finalized_header` // to match the finalized checkpoint root saved in the state of `attested_header`. - let branch = convert_branch(&update.finality_update.finality_branch); require!( - merkle_proof::verify_merkle_proof( - update - .finality_update - .header_update - .beacon_header - .tree_hash_root(), - &branch, + verify_merkle_proof( + H256( + update + .finality_update + .header_update + .beacon_header + .tree_hash_root() + ), + &update.finality_update.finality_branch, FINALITY_TREE_DEPTH.try_into().unwrap(), FINALITY_TREE_INDEX.try_into().unwrap(), - update.attested_beacon_header.state_root.0 + update.attested_beacon_header.state_root ), "Invalid finality proof" ); @@ -476,14 +477,13 @@ impl Eth2Client { .sync_committee_update .as_ref() .unwrap_or_else(|| env::panic_str("The sync committee update is missed")); - let branch = convert_branch(&sync_committee_update.next_sync_committee_branch); require!( - merkle_proof::verify_merkle_proof( - sync_committee_update.next_sync_committee.tree_hash_root(), - &branch, + verify_merkle_proof( + H256(sync_committee_update.next_sync_committee.tree_hash_root()), + &sync_committee_update.next_sync_committee_branch, SYNC_COMMITTEE_TREE_DEPTH.try_into().unwrap(), SYNC_COMMITTEE_TREE_INDEX.try_into().unwrap(), - update.attested_beacon_header.state_root.0 + update.attested_beacon_header.state_root ), "Invalid next sync committee proof" ); diff --git a/contracts/near/eth2-client/src/tests/unit_tests.rs b/contracts/near/eth2-client/src/tests/unit_tests.rs index 61104dca..92d979b3 100644 --- a/contracts/near/eth2-client/src/tests/unit_tests.rs +++ b/contracts/near/eth2-client/src/tests/unit_tests.rs @@ -71,14 +71,14 @@ mod tests { #[cfg(not(feature = "mainnet"))] mod generic_tests { use super::*; - use bitvec::order::Lsb0; use bitvec::bitarr; - use near_sdk::test_utils::accounts; + use bitvec::order::Lsb0; use eth2_utility::consensus::*; use eth_types::{H256, U256}; + use hex::FromHex; use near_plugins::Pausable; + use near_sdk::test_utils::accounts; use tree_hash::TreeHash; - use hex::FromHex; #[test] pub fn test_header_root() { diff --git a/contracts/near/eth2-utility/Cargo.toml b/contracts/near/eth2-utility/Cargo.toml index 4837d72a..e7c11f36 100644 --- a/contracts/near/eth2-utility/Cargo.toml +++ b/contracts/near/eth2-utility/Cargo.toml @@ -8,13 +8,13 @@ edition = "2021" crate-type = ["cdylib", "rlib"] [dependencies] -ethereum-types = { version = "0.14.1", features = ["rlp", "serialize"], default-features = false } eth-types = { path = "../eth-types" } -tree_hash = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } -merkle_proof = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } -near-sdk = "4.1.1" -borsh = "0.9.3" -bitvec = "1.0.0" +ethereum-types.workspace = true +tree_hash.workspace = true +ethereum_hashing.workspace = true +near-sdk.workspace = true +borsh.workspace = true +bitvec.workspace = true [dev-dependencies] lazy_static = "1.4.0" diff --git a/contracts/near/eth2-utility/src/consensus.rs b/contracts/near/eth2-utility/src/consensus.rs index 828f8f9d..2c2b26d5 100644 --- a/contracts/near/eth2-utility/src/consensus.rs +++ b/contracts/near/eth2-utility/src/consensus.rs @@ -187,29 +187,64 @@ pub fn get_participant_pubkeys( result } -pub fn convert_branch(branch: &[H256]) -> Vec { - branch.iter().map(|x| x.0).collect() -} - pub fn validate_beacon_block_header_update(header_update: &HeaderUpdate) -> bool { - let branch = convert_branch(&header_update.execution_hash_branch); + let branch = &header_update.execution_hash_branch; if branch.len() != EXECUTION_PROOF_SIZE { return false; } let l2_proof = &branch[0..L2_EXECUTION_PAYLOAD_PROOF_SIZE]; let l1_proof = &branch[L2_EXECUTION_PAYLOAD_PROOF_SIZE..EXECUTION_PROOF_SIZE]; - let execution_payload_hash = merkle_proof::merkle_root_from_branch( - header_update.execution_block_hash.0, + let execution_payload_hash = merkle_root_from_branch( + header_update.execution_block_hash, l2_proof, L2_EXECUTION_PAYLOAD_PROOF_SIZE, L2_EXECUTION_PAYLOAD_TREE_EXECUTION_BLOCK_INDEX, ); - merkle_proof::verify_merkle_proof( + verify_merkle_proof( execution_payload_hash, l1_proof, BEACON_BLOCK_BODY_TREE_DEPTH, L1_BEACON_BLOCK_BODY_TREE_EXECUTION_PAYLOAD_INDEX, - header_update.beacon_header.body_root.0, + header_update.beacon_header.body_root, ) } + +/// Verify a proof that `leaf` exists at `index` in a Merkle tree rooted at `root`. +/// +/// The `branch` argument is the main component of the proof: it should be a list of internal +/// node hashes such that the root can be reconstructed (in bottom-up order). +pub fn verify_merkle_proof( + leaf: H256, + branch: &[H256], + depth: usize, + index: usize, + root: H256, +) -> bool { + if branch.len() == depth { + merkle_root_from_branch(leaf, branch, depth, index) == root + } else { + false + } +} + +/// Compute a root hash from a leaf and a Merkle proof. +pub fn merkle_root_from_branch(leaf: H256, branch: &[H256], depth: usize, index: usize) -> H256 { + assert_eq!(branch.len(), depth, "proof length should equal depth"); + + let mut merkle_root = leaf.0.as_bytes().to_vec(); + + for (i, leaf) in branch.iter().enumerate().take(depth) { + let ith_bit = (index >> i) & 0x01; + if ith_bit == 1 { + merkle_root = + ethereum_hashing::hash32_concat(leaf.0.as_bytes(), &merkle_root)[..].to_vec(); + } else { + let mut input = merkle_root; + input.extend_from_slice(leaf.0.as_bytes()); + merkle_root = ethereum_hashing::hash(&input); + } + } + + H256(ethereum_types::H256::from_slice(&merkle_root)) +} diff --git a/contracts/near/eth2_hashing/Cargo.toml b/contracts/near/eth2_hashing/Cargo.toml index 7fad833e..7e7c42e0 100644 --- a/contracts/near/eth2_hashing/Cargo.toml +++ b/contracts/near/eth2_hashing/Cargo.toml @@ -1,14 +1,14 @@ [package] -name = "eth2_hashing" -version = "0.3.0" +name = "ethereum_hashing" +version = "1.0.0-beta.2" authors = ["Aurora "] edition = "2021" license = "Apache-2.0" -description = "Reimplemented eth2_hashing using near-sdk, for usage in NEAR WASM contracts" +description = "Reimplemented ethereum_hashing using near-sdk, for usage in NEAR WASM contracts" [dependencies] lazy_static = { version = "1.4.0", optional = true } -near-sdk = "4.1.1" +near-sdk.workspace = true [dev-dependencies] rustc-hex = "2.1.0" From 2d9839a3ca8468341ebcb0d780bfeb729699a853 Mon Sep 17 00:00:00 2001 From: karim-en Date: Fri, 12 Jan 2024 00:39:20 +0000 Subject: [PATCH 08/22] Update eth2near relayer deps --- contracts/near/Cargo.toml | 2 +- eth2near/Cargo.lock | 686 +++++++++++------- eth2near/Cargo.toml | 24 +- eth2near/eth2-contract-init/Cargo.toml | 1 - .../eth2-contract-init/src/init_contract.rs | 25 +- eth2near/eth2near-block-relay-rs/Cargo.toml | 5 +- eth2near/eth_rpc_client/Cargo.toml | 4 +- .../src/execution_block_proof.rs | 6 +- 8 files changed, 468 insertions(+), 285 deletions(-) diff --git a/contracts/near/Cargo.toml b/contracts/near/Cargo.toml index 02ffcdea..44c56aa6 100644 --- a/contracts/near/Cargo.toml +++ b/contracts/near/Cargo.toml @@ -27,7 +27,7 @@ tree_hash_derive = "0.5" ethereum_ssz = "0.5" ethereum_ssz_derive = "0.5" ethereum_serde_utils = "0.5" -ethereum_hashing = { version = "1.0.0-beta.2", default-features = false } +ethereum_hashing = "1.0.0-beta.2" derive_more = "^0.99.2" hex = "0.4.2" bitvec = "1.0.0" diff --git a/eth2near/Cargo.lock b/eth2near/Cargo.lock index fcdf17c8..dcf3a56d 100644 --- a/eth2near/Cargo.lock +++ b/eth2near/Cargo.lock @@ -16,7 +16,7 @@ checksum = "f728064aca1c318585bf4bb04ffcfac9e75e508ab4e8b1bd9ba5dfe04e2cbed5" dependencies = [ "actix-rt", "actix_derive", - "bitflags", + "bitflags 1.3.2", "bytes 1.4.0", "crossbeam-channel", "futures-core", @@ -50,7 +50,7 @@ checksum = "6d44b8fee1ced9671ba043476deddef739dd0959bf77030b26b738cc591737a7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -268,7 +268,7 @@ checksum = "e4655ae1a7b0cdf149156f780c5bf3f1352bc53cbd9e0a361a7ef7b22947e965" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -285,7 +285,7 @@ checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -373,12 +373,41 @@ dependencies = [ "zip", ] +[[package]] +name = "bindgen" +version = "0.66.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b84e06fc203107bfbad243f4aba2af864eb7db3b1cf46ea0a023b0b433d2a7" +dependencies = [ + "bitflags 2.4.1", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "log", + "peeking_take_while", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn 2.0.48", + "which", +] + [[package]] name = "bitflags" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" + [[package]] name = "bitvec" version = "0.20.4" @@ -460,32 +489,30 @@ dependencies = [ [[package]] name = "bls" version = "0.2.0" -source = "git+https://github.com/aurora-is-near/lighthouse.git?tag=v3.5.1-wasm#ce4e2b44630f5ddc04eda933eaa69c33d582c3f0" +source = "git+https://github.com/sigp/lighthouse.git?tag=v4.6.0-rc.0#2e8e1606796cc8392edcb277b698f06ea130d4f1" dependencies = [ "arbitrary", "blst", - "eth2_hashing", - "eth2_serde_utils", - "eth2_ssz", "ethereum-types", + "ethereum_hashing", + "ethereum_serde_utils", + "ethereum_ssz", "hex 0.4.3", - "rand 0.7.3", + "rand 0.8.5", "serde", - "serde_derive", "tree_hash", "zeroize", ] [[package]] name = "blst" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a30d0edd9dd1c60ddb42b80341c7852f6f985279a5c1a83659dcb65899dec99" +checksum = "c94087b935a822949d3291a9989ad2b2051ea141eda0fd4e478a75f6aa3e604b" dependencies = [ "cc", "glob", "threadpool", - "which", "zeroize", ] @@ -509,7 +536,7 @@ dependencies = [ "borsh-schema-derive-internal", "proc-macro-crate 0.1.5", "proc-macro2", - "syn", + "syn 1.0.109", ] [[package]] @@ -520,7 +547,7 @@ checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -531,7 +558,7 @@ checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -610,6 +637,20 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "c-kzg" +version = "0.1.0" +source = "git+https://github.com/ethereum/c-kzg-4844?rev=748283cced543c486145d5f3f38684becdfe3e1b#748283cced543c486145d5f3f38684becdfe3e1b" +dependencies = [ + "bindgen", + "blst", + "cc", + "glob", + "hex 0.4.3", + "libc", + "serde", +] + [[package]] name = "c2-chacha" version = "0.3.3" @@ -623,14 +664,14 @@ dependencies = [ [[package]] name = "cached_tree_hash" version = "0.1.0" -source = "git+https://github.com/aurora-is-near/lighthouse.git?tag=v3.5.1-wasm#ce4e2b44630f5ddc04eda933eaa69c33d582c3f0" +source = "git+https://github.com/sigp/lighthouse.git?tag=v4.6.0-rc.0#2e8e1606796cc8392edcb277b698f06ea130d4f1" dependencies = [ - "eth2_hashing", - "eth2_ssz", - "eth2_ssz_derive", - "eth2_ssz_types", "ethereum-types", + "ethereum_hashing", + "ethereum_ssz", + "ethereum_ssz_derive", "smallvec", + "ssz_types", "tree_hash", ] @@ -640,6 +681,15 @@ version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + [[package]] name = "cfg-if" version = "0.1.10" @@ -677,6 +727,17 @@ dependencies = [ "generic-array", ] +[[package]] +name = "clang-sys" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67523a3b4be3ce1989d607a828d036249522dd9c1c8de7f4dd2dae43a37369d1" +dependencies = [ + "glob", + "libc", + "libloading", +] + [[package]] name = "clap" version = "3.2.23" @@ -684,7 +745,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" dependencies = [ "atty", - "bitflags", + "bitflags 1.3.2", "clap_derive", "clap_lex", "indexmap", @@ -704,7 +765,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -729,15 +790,18 @@ dependencies = [ [[package]] name = "compare_fields" version = "0.2.0" -source = "git+https://github.com/aurora-is-near/lighthouse.git?tag=v3.5.1-wasm#ce4e2b44630f5ddc04eda933eaa69c33d582c3f0" +source = "git+https://github.com/sigp/lighthouse.git?tag=v4.6.0-rc.0#2e8e1606796cc8392edcb277b698f06ea130d4f1" +dependencies = [ + "itertools", +] [[package]] name = "compare_fields_derive" version = "0.2.0" -source = "git+https://github.com/aurora-is-near/lighthouse.git?tag=v3.5.1-wasm#ce4e2b44630f5ddc04eda933eaa69c33d582c3f0" +source = "git+https://github.com/sigp/lighthouse.git?tag=v4.6.0-rc.0#2e8e1606796cc8392edcb277b698f06ea130d4f1" dependencies = [ "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -894,7 +958,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" dependencies = [ "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -964,7 +1028,7 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn", + "syn 1.0.109", ] [[package]] @@ -981,7 +1045,7 @@ checksum = "0b75aed41bb2e6367cae39e6326ef817a851db13c13e4f3263714ca3cfb8de56" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1005,7 +1069,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn", + "syn 1.0.109", ] [[package]] @@ -1016,7 +1080,7 @@ checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" dependencies = [ "darling_core", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1027,7 +1091,7 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1038,7 +1102,7 @@ checksum = "f3cdeb9ec472d588e539a818b2dee436825730da08ad0017c4b1a17676bdc8b7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1051,7 +1115,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn", + "syn 1.0.109", ] [[package]] @@ -1183,7 +1247,7 @@ checksum = "2a4da76b3b6116d758c7ba93f7ec6a35d2e2cf24feda76c6e38a375f4d5c59f2" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1199,6 +1263,15 @@ dependencies = [ "termcolor", ] +[[package]] +name = "erased-serde" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c138974f9d5e7fe373eb04df7cae98833802ae4b11c24ac7039a21d5af4b26c" +dependencies = [ + "serde", +] + [[package]] name = "errno" version = "0.2.8" @@ -1226,10 +1299,10 @@ version = "0.1.0" dependencies = [ "borsh", "derive_more", - "eth2_serde_utils", - "eth2_ssz", - "eth2_ssz_derive", "ethereum-types", + "ethereum_serde_utils", + "ethereum_ssz", + "ethereum_ssz_derive", "hex 0.4.3", "near-sdk", "rlp", @@ -1254,7 +1327,6 @@ dependencies = [ "eth2near-logger", "eth_rpc_client", "log", - "merkle_proof", "near-primitives 0.16.0", "near-sdk", "reqwest", @@ -1275,84 +1347,23 @@ dependencies = [ "borsh", "eth-types", "ethereum-types", - "merkle_proof", + "ethereum_hashing", "near-sdk", "tree_hash", ] -[[package]] -name = "eth2_hashing" -version = "0.3.0" -source = "git+https://github.com/aurora-is-near/lighthouse.git?tag=v3.5.1-wasm#ce4e2b44630f5ddc04eda933eaa69c33d582c3f0" -dependencies = [ - "cpufeatures", - "lazy_static", - "ring", - "sha2 0.10.6", -] - [[package]] name = "eth2_interop_keypairs" version = "0.2.0" -source = "git+https://github.com/aurora-is-near/lighthouse.git?tag=v3.5.1-wasm#ce4e2b44630f5ddc04eda933eaa69c33d582c3f0" +source = "git+https://github.com/sigp/lighthouse.git?tag=v4.6.0-rc.0#2e8e1606796cc8392edcb277b698f06ea130d4f1" dependencies = [ "bls", - "eth2_hashing", + "ethereum_hashing", "hex 0.4.3", "lazy_static", "num-bigint 0.4.3", "serde", - "serde_derive", - "serde_yaml 0.8.26", -] - -[[package]] -name = "eth2_serde_utils" -version = "0.1.1" -source = "git+https://github.com/aurora-is-near/lighthouse.git?tag=v3.5.1-wasm#ce4e2b44630f5ddc04eda933eaa69c33d582c3f0" -dependencies = [ - "ethereum-types", - "hex 0.4.3", - "serde", - "serde_derive", - "serde_json", -] - -[[package]] -name = "eth2_ssz" -version = "0.4.1" -source = "git+https://github.com/aurora-is-near/lighthouse.git?tag=v3.5.1-wasm#ce4e2b44630f5ddc04eda933eaa69c33d582c3f0" -dependencies = [ - "ethereum-types", - "itertools", - "smallvec", -] - -[[package]] -name = "eth2_ssz_derive" -version = "0.3.1" -source = "git+https://github.com/aurora-is-near/lighthouse.git?tag=v3.5.1-wasm#ce4e2b44630f5ddc04eda933eaa69c33d582c3f0" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "eth2_ssz_types" -version = "0.2.2" -source = "git+https://github.com/aurora-is-near/lighthouse.git?tag=v3.5.1-wasm#ce4e2b44630f5ddc04eda933eaa69c33d582c3f0" -dependencies = [ - "arbitrary", - "derivative", - "eth2_serde_utils", - "eth2_ssz", - "serde", - "serde_derive", - "smallvec", - "tree_hash", - "typenum", + "serde_yaml", ] [[package]] @@ -1370,11 +1381,11 @@ dependencies = [ "eth-types", "eth2-contract-init", "eth2-utility", - "eth2_hashing", - "eth2_ssz", "eth2near-logger", "eth_rpc_client", "ethereum-types", + "ethereum_hashing", + "ethereum_ssz", "finality-update-verify", "futures", "hex 0.4.3", @@ -1392,6 +1403,7 @@ dependencies = [ "reqwest", "serde", "serde_json", + "smallvec", "tokio 1.19.2", "toml", "tree_hash", @@ -1421,9 +1433,9 @@ dependencies = [ "dotenv", "env_logger", "eth-types", - "eth2_hashing", - "eth2_ssz", "ethereum-types", + "ethereum_hashing", + "ethereum_ssz", "finality-update-verify", "futures", "hex 0.4.3", @@ -1468,6 +1480,54 @@ dependencies = [ "uint", ] +[[package]] +name = "ethereum_hashing" +version = "1.0.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233dc6f434ce680dbabf4451ee3380cec46cb3c45d66660445a435619710dd35" +dependencies = [ + "cpufeatures", + "lazy_static", + "ring", + "sha2 0.10.6", +] + +[[package]] +name = "ethereum_serde_utils" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de4d5951468846963c24e8744c133d44f39dff2cd3a233f6be22b370d08a524f" +dependencies = [ + "ethereum-types", + "hex 0.4.3", + "serde", + "serde_derive", + "serde_json", +] + +[[package]] +name = "ethereum_ssz" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e61ffea29f26e8249d35128a82ec8d3bd4fbc80179ea5f5e5e3daafef6a80fcb" +dependencies = [ + "ethereum-types", + "itertools", + "smallvec", +] + +[[package]] +name = "ethereum_ssz_derive" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6085d7fd3cf84bd2b8fec150d54c8467fb491d8db9c460607c5534f653a0ee38" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "event-listener" version = "2.5.3" @@ -1492,7 +1552,7 @@ checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "synstructure", ] @@ -1632,7 +1692,7 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" dependencies = [ - "bitflags", + "bitflags 1.3.2", "fuchsia-zircon-sys", ] @@ -1725,7 +1785,7 @@ checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1887,7 +1947,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3e372db8e5c0d213e0cd0b9be18be2aca3d44cf2fe30a9d46a65581cd454584" dependencies = [ "base64 0.13.1", - "bitflags", + "bitflags 1.3.2", "bytes 1.4.0", "headers-core", "http", @@ -2175,7 +2235,7 @@ checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2209,7 +2269,7 @@ dependencies = [ [[package]] name = "int_to_bytes" version = "0.2.0" -source = "git+https://github.com/aurora-is-near/lighthouse.git?tag=v3.5.1-wasm#ce4e2b44630f5ddc04eda933eaa69c33d582c3f0" +source = "git+https://github.com/sigp/lighthouse.git?tag=v4.6.0-rc.0#2e8e1606796cc8392edcb277b698f06ea130d4f1" dependencies = [ "bytes 1.4.0", ] @@ -2312,6 +2372,23 @@ dependencies = [ "log", ] +[[package]] +name = "kzg" +version = "0.1.0" +source = "git+https://github.com/sigp/lighthouse.git?tag=v4.6.0-rc.0#2e8e1606796cc8392edcb277b698f06ea130d4f1" +dependencies = [ + "arbitrary", + "c-kzg", + "derivative", + "ethereum_hashing", + "ethereum_serde_utils", + "ethereum_ssz", + "ethereum_ssz_derive", + "hex 0.4.3", + "serde", + "tree_hash", +] + [[package]] name = "lazy_static" version = "1.4.0" @@ -2321,6 +2398,12 @@ dependencies = [ "spin", ] +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + [[package]] name = "libc" version = "0.2.140" @@ -2347,6 +2430,16 @@ dependencies = [ "rle-decode-fast", ] +[[package]] +name = "libloading" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" +dependencies = [ + "cfg-if 1.0.0", + "windows-sys 0.48.0", +] + [[package]] name = "libsqlite3-sys" version = "0.25.2" @@ -2379,12 +2472,6 @@ dependencies = [ "cc", ] -[[package]] -name = "linked-hash-map" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" - [[package]] name = "linux-raw-sys" version = "0.1.4" @@ -2451,10 +2538,10 @@ checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" [[package]] name = "merkle_proof" version = "0.2.0" -source = "git+https://github.com/aurora-is-near/lighthouse.git?tag=v3.5.1-wasm#ce4e2b44630f5ddc04eda933eaa69c33d582c3f0" +source = "git+https://github.com/sigp/lighthouse.git?tag=v4.6.0-rc.0#2e8e1606796cc8392edcb277b698f06ea130d4f1" dependencies = [ - "eth2_hashing", "ethereum-types", + "ethereum_hashing", "lazy_static", "safe_arith", ] @@ -2479,7 +2566,7 @@ dependencies = [ "proc-macro2", "quote", "smallvec", - "syn", + "syn 1.0.109", ] [[package]] @@ -2498,6 +2585,12 @@ dependencies = [ "unicase", ] +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "miniz_oxide" version = "0.6.2" @@ -2946,7 +3039,7 @@ dependencies = [ "reed-solomon-erasure", "serde", "serde_json", - "serde_yaml 0.9.19", + "serde_yaml", "smart-default", "strum", "thiserror", @@ -3017,7 +3110,7 @@ checksum = "93ee0b41c75ef859c193a8ff1dadfa0c8207bc0ac447cc22259721ad769a1408" dependencies = [ "quote", "serde", - "syn", + "syn 1.0.109", ] [[package]] @@ -3028,7 +3121,7 @@ checksum = "36addf90cc04bd547a627b3a292f59d7de4dd6fb5042115419ae901b93ce6c2d" dependencies = [ "quote", "serde", - "syn", + "syn 1.0.109", ] [[package]] @@ -3039,7 +3132,7 @@ checksum = "d7c867980c023741a39509a58fffe3f700f18de7600b08be54299c2fc4abc52c" dependencies = [ "quote", "serde", - "syn", + "syn 1.0.109", ] [[package]] @@ -3050,7 +3143,7 @@ checksum = "8e837bd4bacd807073ec5ceb85708da7f721b46a4c2a978de86027fb0034ce31" dependencies = [ "near-rpc-error-core 0.14.0", "serde", - "syn", + "syn 1.0.109", ] [[package]] @@ -3061,7 +3154,7 @@ checksum = "0b5beb352f3b91d8c491646c2fa4fdbbbf463c7b9c0226951c28f0197de44f99" dependencies = [ "near-rpc-error-core 0.15.0", "serde", - "syn", + "syn 1.0.109", ] [[package]] @@ -3073,7 +3166,7 @@ dependencies = [ "fs2", "near-rpc-error-core 0.16.0", "serde", - "syn", + "syn 1.0.109", ] [[package]] @@ -3123,7 +3216,7 @@ dependencies = [ "Inflector", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3210,6 +3303,16 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + [[package]] name = "nu-ansi-term" version = "0.46.0" @@ -3311,7 +3414,7 @@ version = "0.10.46" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd2523381e46256e40930512c7fd25562b9eae4812cb52078f155e87217c9d1e" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg-if 1.0.0", "foreign-types", "libc", @@ -3328,7 +3431,7 @@ checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3447,7 +3550,7 @@ dependencies = [ "proc-macro-crate 1.3.1", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3459,7 +3562,7 @@ dependencies = [ "proc-macro-crate 1.3.1", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3503,6 +3606,12 @@ dependencies = [ "windows-sys 0.45.0", ] +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + [[package]] name = "percent-encoding" version = "2.2.0" @@ -3545,7 +3654,7 @@ checksum = "851c8d0ce9bebe43790dedfc86614c23494ac9f423dd618d3a61fc693eafe61e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3556,7 +3665,7 @@ checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3590,7 +3699,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e1f879b2998099c2d69ab9605d145d5b661195627eccc680002c4918a7fb6fa" dependencies = [ "autocfg", - "bitflags", + "bitflags 1.3.2", "cfg-if 1.0.0", "concurrent-queue", "libc", @@ -3614,6 +3723,16 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +[[package]] +name = "prettyplease" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a41cf62165e97c7f814d2221421dbb9afcbcdb0a88068e5ea206e19951c2cbb5" +dependencies = [ + "proc-macro2", + "syn 2.0.48", +] + [[package]] name = "primitive-types" version = "0.10.1" @@ -3666,7 +3785,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "version_check", ] @@ -3683,9 +3802,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.52" +version = "1.0.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224" +checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" dependencies = [ "unicode-ident", ] @@ -3696,7 +3815,7 @@ version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c434e93ef69c216e68e4f417c927b4f31502c3560b72cfdb6827e2321c5c6b3e" dependencies = [ - "bitflags", + "bitflags 1.3.2", "byteorder", "hex 0.4.3", "lazy_static", @@ -3775,7 +3894,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3802,9 +3921,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quote" -version = "1.0.26" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ "proc-macro2", ] @@ -3935,7 +4054,7 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] @@ -4080,7 +4199,7 @@ checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4089,7 +4208,7 @@ version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01e213bc3ecb39ac32e81e51ebe31fd888a940515173e3a18a35f8c6e896422a" dependencies = [ - "bitflags", + "bitflags 1.3.2", "fallible-iterator", "fallible-streaming-iterator", "hashlink", @@ -4115,6 +4234,12 @@ version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + [[package]] name = "rustc-hex" version = "2.1.0" @@ -4136,7 +4261,7 @@ version = "0.36.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd5c6ff11fecd55b40746d1995a02f2eb375bf8c00d192d521ee09f42bef37bc" dependencies = [ - "bitflags", + "bitflags 1.3.2", "errno", "io-lifetimes", "libc", @@ -4159,7 +4284,7 @@ checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" [[package]] name = "safe_arith" version = "0.1.0" -source = "git+https://github.com/aurora-is-near/lighthouse.git?tag=v3.5.1-wasm#ce4e2b44630f5ddc04eda933eaa69c33d582c3f0" +source = "git+https://github.com/sigp/lighthouse.git?tag=v4.6.0-rc.0#2e8e1606796cc8392edcb277b698f06ea130d4f1" [[package]] name = "safemem" @@ -4197,7 +4322,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn", + "syn 1.0.109", ] [[package]] @@ -4243,7 +4368,7 @@ version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "core-foundation-sys", "libc", @@ -4268,9 +4393,9 @@ checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" [[package]] name = "serde" -version = "1.0.156" +version = "1.0.195" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "314b5b092c0ade17c00142951e50ced110ec27cea304b1037c6969246c2469a4" +checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" dependencies = [ "serde_derive", ] @@ -4286,13 +4411,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.156" +version = "1.0.195" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7e29c4601e36bcec74a223228dce795f4cd3616341a4af93520ca1a837c087d" +checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.48", ] [[package]] @@ -4303,7 +4428,7 @@ checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4325,7 +4450,7 @@ checksum = "395627de918015623b32e7669714206363a7fc00382bf477e72c1f7533e8eafc" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4352,40 +4477,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_with" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff" -dependencies = [ - "serde", - "serde_with_macros", -] - -[[package]] -name = "serde_with_macros" -version = "1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_yaml" -version = "0.8.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b" -dependencies = [ - "indexmap", - "ryu", - "serde", - "yaml-rust", -] - [[package]] name = "serde_yaml" version = "0.9.19" @@ -4466,6 +4557,12 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shlex" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380" + [[package]] name = "signal-hook" version = "0.3.15" @@ -4511,12 +4608,15 @@ name = "slog" version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8347046d4ebd943127157b94d63abb990fcf729dc4e9978927fdf4ac3c998d06" +dependencies = [ + "erased-serde", +] [[package]] name = "smallvec" -version = "1.10.0" +version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" [[package]] name = "smart-default" @@ -4526,7 +4626,7 @@ checksum = "133659a15339456eeeb07572eb02a91c91e9815e9cbc89566944d2c8d3efdbf6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4556,6 +4656,24 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +[[package]] +name = "ssz_types" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "382939886cb24ee8ac885d09116a60f6262d827c7a9e36012b4f6d3d0116d0b3" +dependencies = [ + "arbitrary", + "derivative", + "ethereum_serde_utils", + "ethereum_ssz", + "itertools", + "serde", + "serde_derive", + "smallvec", + "tree_hash", + "typenum", +] + [[package]] name = "static_assertions" version = "1.1.0" @@ -4587,7 +4705,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn", + "syn 1.0.109", ] [[package]] @@ -4607,16 +4725,16 @@ dependencies = [ "proc-macro2", "quote", "smallvec", - "syn", + "syn 1.0.109", ] [[package]] name = "swap_or_not_shuffle" version = "0.2.0" -source = "git+https://github.com/aurora-is-near/lighthouse.git?tag=v3.5.1-wasm#ce4e2b44630f5ddc04eda933eaa69c33d582c3f0" +source = "git+https://github.com/sigp/lighthouse.git?tag=v4.6.0-rc.0#2e8e1606796cc8392edcb277b698f06ea130d4f1" dependencies = [ - "eth2_hashing", "ethereum-types", + "ethereum_hashing", ] [[package]] @@ -4630,6 +4748,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn" +version = "2.0.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "synstructure" version = "0.12.6" @@ -4638,7 +4767,7 @@ checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "unicode-xid", ] @@ -4684,10 +4813,10 @@ dependencies = [ [[package]] name = "test_random_derive" version = "0.2.0" -source = "git+https://github.com/aurora-is-near/lighthouse.git?tag=v3.5.1-wasm#ce4e2b44630f5ddc04eda933eaa69c33d582c3f0" +source = "git+https://github.com/sigp/lighthouse.git?tag=v4.6.0-rc.0#2e8e1606796cc8392edcb277b698f06ea130d4f1" dependencies = [ "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4713,7 +4842,7 @@ checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4852,7 +4981,7 @@ checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -5008,7 +5137,7 @@ dependencies = [ "proc-macro2", "prost-build", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -5075,7 +5204,7 @@ checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -5143,22 +5272,24 @@ dependencies = [ [[package]] name = "tree_hash" -version = "0.4.1" -source = "git+https://github.com/aurora-is-near/lighthouse.git?tag=v3.5.1-wasm#ce4e2b44630f5ddc04eda933eaa69c33d582c3f0" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c998ac5fe2b07c025444bdd522e6258110b63861c6698eedc610c071980238d" dependencies = [ - "eth2_hashing", "ethereum-types", + "ethereum_hashing", "smallvec", ] [[package]] name = "tree_hash_derive" -version = "0.4.0" -source = "git+https://github.com/aurora-is-near/lighthouse.git?tag=v3.5.1-wasm#ce4e2b44630f5ddc04eda933eaa69c33d582c3f0" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84303a9c7cda5f085a3ed9cd241d1e95e04d88aab1d679b02f212e653537ba86" dependencies = [ "darling", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -5204,7 +5335,7 @@ checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" [[package]] name = "types" version = "0.2.1" -source = "git+https://github.com/aurora-is-near/lighthouse.git?tag=v3.5.1-wasm#ce4e2b44630f5ddc04eda933eaa69c33d582c3f0" +source = "git+https://github.com/sigp/lighthouse.git?tag=v4.6.0-rc.0#2e8e1606796cc8392edcb277b698f06ea130d4f1" dependencies = [ "arbitrary", "bls", @@ -5212,16 +5343,16 @@ dependencies = [ "compare_fields", "compare_fields_derive", "derivative", - "eth2_hashing", "eth2_interop_keypairs", - "eth2_serde_utils", - "eth2_ssz", - "eth2_ssz_derive", - "eth2_ssz_types", "ethereum-types", + "ethereum_hashing", + "ethereum_serde_utils", + "ethereum_ssz", + "ethereum_ssz_derive", "hex 0.4.3", "int_to_bytes", "itertools", + "kzg", "lazy_static", "log", "maplit", @@ -5235,12 +5366,12 @@ dependencies = [ "rusqlite", "safe_arith", "serde", - "serde_derive", "serde_json", - "serde_with", - "serde_yaml 0.8.26", + "serde_yaml", "slog", "smallvec", + "ssz_types", + "strum", "superstruct", "swap_or_not_shuffle", "tempfile", @@ -5466,7 +5597,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-shared", ] @@ -5500,7 +5631,7 @@ checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -5593,13 +5724,13 @@ version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", ] [[package]] @@ -5608,7 +5739,16 @@ version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows-targets", + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", ] [[package]] @@ -5617,13 +5757,28 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", ] [[package]] @@ -5632,42 +5787,84 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + [[package]] name = "windows_aarch64_msvc" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + [[package]] name = "windows_i686_gnu" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + [[package]] name = "windows_i686_msvc" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + [[package]] name = "windows_x86_64_gnu" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + [[package]] name = "windows_x86_64_msvc" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + [[package]] name = "winnow" version = "0.3.6" @@ -5753,15 +5950,6 @@ dependencies = [ "libc", ] -[[package]] -name = "yaml-rust" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" -dependencies = [ - "linked-hash-map", -] - [[package]] name = "zeroize" version = "1.5.7" @@ -5779,7 +5967,7 @@ checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "synstructure", ] diff --git a/eth2near/Cargo.toml b/eth2near/Cargo.toml index 65406fad..c67c93f7 100644 --- a/eth2near/Cargo.toml +++ b/eth2near/Cargo.toml @@ -10,19 +10,11 @@ members = [ ] [workspace.dependencies] -bls = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } -types = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } -tree_hash = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } -merkle_proof = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } -eth2_hashing = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } -eth2_ssz = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } - -[patch] -[patch.crates-io] -eth2_ssz = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } -eth2_ssz_types = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } -eth2_hashing = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } -tree_hash = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm"} -tree_hash_derive = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm"} -eth2_serde_utils = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } -eth2_ssz_derive = { git = "https://github.com/aurora-is-near/lighthouse.git", tag = "v3.5.1-wasm" } \ No newline at end of file +bls = { git = "https://github.com/sigp/lighthouse.git", tag = "v4.6.0-rc.0" } +types = { git = "https://github.com/sigp/lighthouse.git", tag = "v4.6.0-rc.0" } +merkle_proof = { git = "https://github.com/sigp/lighthouse.git", tag = "v4.6.0-rc.0" } +tree_hash = "0.5" +tree_hash_derive = "0.5" +ethereum_ssz = "0.5" +ethereum_hashing = "1.0.0-beta.2" +smallvec = "1.11.0" diff --git a/eth2near/eth2-contract-init/Cargo.toml b/eth2near/eth2-contract-init/Cargo.toml index ddef4661..f25cce18 100644 --- a/eth2near/eth2-contract-init/Cargo.toml +++ b/eth2near/eth2-contract-init/Cargo.toml @@ -5,7 +5,6 @@ edition = "2021" [dependencies] tree_hash = { workspace = true } -merkle_proof = { workspace = true } types = { workspace = true } eth2_to_near_relay = { path = "../eth2near-block-relay-rs"} eth_rpc_client = { path = "../eth_rpc_client" } diff --git a/eth2near/eth2-contract-init/src/init_contract.rs b/eth2near/eth2-contract-init/src/init_contract.rs index 44c66883..382834aa 100644 --- a/eth2near/eth2-contract-init/src/init_contract.rs +++ b/eth2near/eth2-contract-init/src/init_contract.rs @@ -30,15 +30,16 @@ pub fn verify_light_client_snapshot( return false; } - let branch = consensus::convert_branch(&light_client_snapshot.current_sync_committee_branch); - merkle_proof::verify_merkle_proof( - light_client_snapshot - .current_sync_committee - .tree_hash_root(), - &branch, + consensus::verify_merkle_proof( + eth_types::H256( + light_client_snapshot + .current_sync_committee + .tree_hash_root(), + ), + &light_client_snapshot.current_sync_committee_branch, CURRENT_SYNC_COMMITTEE_TREE_DEPTH.try_into().unwrap(), CURRENT_SYNC_COMMITTEE_TREE_INDEX.try_into().unwrap(), - light_client_snapshot.beacon_header.state_root.0, + light_client_snapshot.beacon_header.state_root, ) } @@ -64,10 +65,12 @@ pub fn init_contract( ); let eth1_rpc_client = Eth1RPCClient::new(&config.eth1_endpoint); - let last_period = BeaconRPCClient::get_period_for_slot(beacon_rpc_client - .get_last_slot_number() - .expect("Error on fetching last slot number") - .as_u64()); + let last_period = BeaconRPCClient::get_period_for_slot( + beacon_rpc_client + .get_last_slot_number() + .expect("Error on fetching last slot number") + .as_u64(), + ); let light_client_update_with_next_sync_committee = beacon_rpc_client .get_light_client_update(last_period) diff --git a/eth2near/eth2near-block-relay-rs/Cargo.toml b/eth2near/eth2near-block-relay-rs/Cargo.toml index 040ac798..4e7d2484 100644 --- a/eth2near/eth2near-block-relay-rs/Cargo.toml +++ b/eth2near/eth2near-block-relay-rs/Cargo.toml @@ -4,11 +4,12 @@ version = "0.3.0" edition = "2021" [dependencies] +smallvec = "1" types = { workspace = true } tree_hash = { workspace = true } merkle_proof = { workspace = true } -eth2_hashing = { workspace = true } -eth2_ssz = { workspace = true } +ethereum_hashing = { workspace = true } +ethereum_ssz = { workspace = true } eth-types = { path = "../../contracts/near/eth-types/" } eth2-utility = { path = "../../contracts/near/eth2-utility" } diff --git a/eth2near/eth_rpc_client/Cargo.toml b/eth2near/eth_rpc_client/Cargo.toml index 28207eae..d223d302 100644 --- a/eth2near/eth_rpc_client/Cargo.toml +++ b/eth2near/eth_rpc_client/Cargo.toml @@ -9,8 +9,8 @@ edition = "2021" types = { workspace = true } tree_hash = { workspace = true } merkle_proof = { workspace = true } -eth2_hashing = { workspace = true } -eth2_ssz = { workspace = true } +ethereum_hashing = { workspace = true } +ethereum_ssz = { workspace = true } log = { version = "0.4", features = ["std", "serde"] } serde_json = "1.0.74" serde = { version = "1.0", features = ["derive"] } diff --git a/eth2near/eth_rpc_client/src/execution_block_proof.rs b/eth2near/eth_rpc_client/src/execution_block_proof.rs index 064341dd..2dfc9893 100644 --- a/eth2near/eth_rpc_client/src/execution_block_proof.rs +++ b/eth2near/eth_rpc_client/src/execution_block_proof.rs @@ -1,6 +1,6 @@ use crate::beacon_block_body_merkle_tree::{BeaconBlockBodyMerkleTree, ExecutionPayloadMerkleTree}; use crate::errors::{MerkleTreeError, MissExecutionPayload}; -use eth2_hashing; +use ethereum_hashing; use ethereum_types::H256; use std::error::Error; use std::fmt; @@ -124,11 +124,11 @@ impl ExecutionBlockProof { let ith_bit = (index >> i) & 0x01; if ith_bit == 1 { merkle_root = - eth2_hashing::hash32_concat(leaf.as_bytes(), &merkle_root)[..].to_vec(); + ethereum_hashing::hash32_concat(leaf.as_bytes(), &merkle_root)[..].to_vec(); } else { let mut input = merkle_root; input.extend_from_slice(leaf.as_bytes()); - merkle_root = eth2_hashing::hash(&input); + merkle_root = ethereum_hashing::hash(&input); } } From 178585fd0024061b5f5f3e78156b5ce685381c64 Mon Sep 17 00:00:00 2001 From: karim-en Date: Fri, 12 Jan 2024 00:59:17 +0000 Subject: [PATCH 09/22] Update contracts builds --- contracts/near/res/eth2_client.wasm | Bin 391705 -> 391085 bytes contracts/near/res/eth_client.wasm | Bin 390421 -> 391410 bytes contracts/near/res/eth_prover.wasm | Bin 365909 -> 366343 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/contracts/near/res/eth2_client.wasm b/contracts/near/res/eth2_client.wasm index 9ab774fe3251771a260157721f1b1141244722e9..43918b9cb27fe94047edd0b1ab607eaaf56310e6 100755 GIT binary patch delta 81811 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 diff --git a/contracts/near/res/eth_client.wasm b/contracts/near/res/eth_client.wasm index e78ba93a8a58452a4261261109dfcac198f2ff66..3f6e58876d4f58cb1a27e0116a3d034ee2ca6b43 100755 GIT binary patch delta 72627 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 z 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 delta 52853 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 UynyiUb1|48Y)5zm;a-IQ1^RvS)&Kwi From 60df6f60dc0b9e6a7119238ce1e829074f0815e3 Mon Sep 17 00:00:00 2001 From: karim-en Date: Fri, 12 Jan 2024 01:58:38 +0000 Subject: [PATCH 10/22] Fix migration test --- contracts/near/Cargo.lock | 2 + contracts/near/eth-types/src/lib.rs | 30 +++++++++----- contracts/near/eth2-client/Cargo.toml | 2 + .../src/tests/integration_tests.rs | 39 +++++++++++++++++-- 4 files changed, 61 insertions(+), 12 deletions(-) diff --git a/contracts/near/Cargo.lock b/contracts/near/Cargo.lock index 81b1dba5..ac20624f 100644 --- a/contracts/near/Cargo.lock +++ b/contracts/near/Cargo.lock @@ -1151,11 +1151,13 @@ dependencies = [ "eth-types", "eth2-utility", "ethereum-types 0.14.1", + "ethereum_serde_utils", "hex 0.4.3", "lazy_static", "near-plugins", "near-sdk", "near-units", + "serde", "serde_json", "tokio", "tree_hash", diff --git a/contracts/near/eth-types/src/lib.rs b/contracts/near/eth-types/src/lib.rs index 57edda73..7338a7cd 100644 --- a/contracts/near/eth-types/src/lib.rs +++ b/contracts/near/eth-types/src/lib.rs @@ -155,19 +155,19 @@ pub struct BlockHeader { pub nonce: H64, #[cfg_attr( all(feature = "eth2", not(target_arch = "wasm32")), - serde(deserialize_with = "u64_hex_be_option") + serde(with = "u64_hex_be_option") )] pub base_fee_per_gas: Option, pub withdrawals_root: Option, #[cfg_attr( all(feature = "eth2", not(target_arch = "wasm32")), - serde(deserialize_with = "u64_hex_be_option"), + serde(with = "u64_hex_be_option"), serde(default) )] pub blob_gas_used: Option, #[cfg_attr( all(feature = "eth2", not(target_arch = "wasm32")), - serde(deserialize_with = "u64_hex_be_option"), + serde(with = "u64_hex_be_option"), serde(default) )] pub excess_blob_gas: Option, @@ -177,13 +177,25 @@ pub struct BlockHeader { pub hash: Option, pub partial_hash: Option, } - #[cfg(all(feature = "eth2", not(target_arch = "wasm32")))] -fn u64_hex_be_option<'de, D>(deserializer: D) -> Result, D::Error> -where - D: serde::Deserializer<'de>, -{ - Ok(Some(serde_utils::u64_hex_be::deserialize(deserializer)?)) +pub mod u64_hex_be_option { + pub fn deserialize<'de, D>(deserializer: D) -> Result, D::Error> + where + D: serde::Deserializer<'de>, + { + Ok(Some(serde_utils::u64_hex_be::deserialize(deserializer)?)) + } + + pub fn serialize(num: &Option, serializer: S) -> Result + where + S: serde::Serializer, + { + if let Some(num) = num { + serde_utils::u64_hex_be::serialize(num, serializer) + } else { + serializer.serialize_none() + } + } } impl BlockHeader { diff --git a/contracts/near/eth2-client/Cargo.toml b/contracts/near/eth2-client/Cargo.toml index 938473b7..6ad619bb 100644 --- a/contracts/near/eth2-client/Cargo.toml +++ b/contracts/near/eth2-client/Cargo.toml @@ -19,7 +19,9 @@ bitvec.workspace = true near-plugins.workspace = true [dev-dependencies] +ethereum_serde_utils.workspace = true lazy_static = "1.4.0" +serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" hex = "0.4.0" workspaces = "0.7" diff --git a/contracts/near/eth2-client/src/tests/integration_tests.rs b/contracts/near/eth2-client/src/tests/integration_tests.rs index f85a2d36..2d6e72fb 100644 --- a/contracts/near/eth2-client/src/tests/integration_tests.rs +++ b/contracts/near/eth2-client/src/tests/integration_tests.rs @@ -4,19 +4,48 @@ mod integration_tests { use borsh::{BorshDeserialize, BorshSerialize}; use eth2_utility::types::InitInput; use eth_types::eth2::{ExtendedBeaconBlockHeader, SyncCommittee}; - use eth_types::H256; + use eth_types::{Address, Bloom, H256, H64, U256}; use near_sdk::ONE_NEAR; use near_units::*; + use serde::{Deserialize, Serialize}; use workspaces::operations::Function; use workspaces::{Account, Contract}; const WASM_FILEPATH: &str = "../target/wasm32-unknown-unknown/release/eth2_client.wasm"; const WASM_V_0_1_0_FILEPATH: &str = "src/data/eth2_client_v0.1.0_testnet.wasm"; + #[derive(Debug, Clone, BorshSerialize, BorshDeserialize, Serialize, Deserialize)] + pub struct BlockHeaderV1 { + pub parent_hash: H256, + pub uncles_hash: H256, + pub author: Address, + pub state_root: H256, + pub transactions_root: H256, + pub receipts_root: H256, + pub log_bloom: Bloom, + pub difficulty: U256, + #[serde(with = "serde_utils::u64_hex_be")] + pub number: u64, + pub gas_limit: U256, + pub gas_used: U256, + #[serde(with = "serde_utils::u64_hex_be")] + pub timestamp: u64, + #[serde(with = "serde_utils::hex_vec")] + pub extra_data: Vec, + pub mix_hash: H256, + pub nonce: H64, + #[serde(with = "eth_types::u64_hex_be_option")] + pub base_fee_per_gas: Option, + pub withdrawals_root: Option, + + pub hash: Option, + pub partial_hash: Option, + } + #[derive(Clone, BorshDeserialize, BorshSerialize)] pub struct InitInputV1 { pub network: String, - pub finalized_execution_header: eth_types::BlockHeader, + pub finalized_execution_header: BlockHeaderV1, pub finalized_beacon_header: ExtendedBeaconBlockHeader, pub current_sync_committee: SyncCommittee, pub next_sync_committee: SyncCommittee, @@ -29,9 +58,13 @@ mod integration_tests { impl From for InitInputV1 { fn from(message: InitInput) -> Self { + let finalized_execution_header: BlockHeaderV1 = serde_json::from_str( + &serde_json::to_string(&message.finalized_execution_header).unwrap(), + ) + .unwrap(); Self { network: message.network, - finalized_execution_header: message.finalized_execution_header, + finalized_execution_header, finalized_beacon_header: message.finalized_beacon_header, current_sync_committee: message.current_sync_committee, next_sync_committee: message.next_sync_committee, From 27ec1dcdf198343ead771b19cd41e0d0df29fd77 Mon Sep 17 00:00:00 2001 From: karim-en Date: Fri, 12 Jan 2024 02:05:45 +0000 Subject: [PATCH 11/22] Update contracts builds --- contracts/near/res/eth2_client.wasm | Bin 391085 -> 391085 bytes contracts/near/res/eth_client.wasm | Bin 391410 -> 391410 bytes contracts/near/res/eth_prover.wasm | Bin 366343 -> 366343 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/contracts/near/res/eth2_client.wasm b/contracts/near/res/eth2_client.wasm index 43918b9cb27fe94047edd0b1ab607eaaf56310e6..3f35ca657d7a72132c15dc9e7ee7c640a8f80331 100755 GIT binary patch delta 27 jcmZ4cUVQC)@rD-07N!>F7M3lnOQ$fd*uHEED|<2krS%H@ delta 27 jcmZ4cUVQC)@rD-07N!>F7M3lnOQ$f-*}iNFD|<2krJ)M& diff --git a/contracts/near/res/eth_client.wasm b/contracts/near/res/eth_client.wasm index 3f6e58876d4f58cb1a27e0116a3d034ee2ca6b43..425eb9b27f99764b81f67d63d1bd1ba892d7279a 100755 GIT binary patch delta 75 zcmezLQT)?K@rD-07N!>F7M3lnhvpbMGcqv9F)%P3F%)1B0n!VBd>$nJ3LxJYiNAUK J=Q*tZqX7wG5@rAZ delta 75 zcmezLQT)?K@rD-07N!>F7M3lnhvpcXGcqv9F)%P3F%)1B0n$@}d>$nJ93bBqiNAdN J=Q*tZqX7ew5;gz; diff --git a/contracts/near/res/eth_prover.wasm b/contracts/near/res/eth_prover.wasm index b6e52d218bdc1615d83fceb5351e3e3ffcc678be..bcd87a96166ef5cd08e659a90af80ed5245dd50e 100755 GIT binary patch delta 59 zcmZo)C)U1Btf7Umg{g(Pg=Gutax+C|Mg|5s1_p){H30?@Al(AwOCs@CY(HVfYM%fA DrjZOq delta 59 zcmZo)C)U1Btf7Umg{g(Pg=Gutax+D9Mg|5s1_p){H30?@AYB3EOCs^-Y(HVfYM%fA Dqg4zc From 7bca636d7796b50a9e18d061f0086191b7f4d8c1 Mon Sep 17 00:00:00 2001 From: karim-en Date: Fri, 12 Jan 2024 13:55:26 +0000 Subject: [PATCH 12/22] Fix migration test --- .../eth2-client/src/tests/integration_tests.rs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/contracts/near/eth2-client/src/tests/integration_tests.rs b/contracts/near/eth2-client/src/tests/integration_tests.rs index 2d6e72fb..f0121535 100644 --- a/contracts/near/eth2-client/src/tests/integration_tests.rs +++ b/contracts/near/eth2-client/src/tests/integration_tests.rs @@ -42,6 +42,12 @@ mod integration_tests { pub partial_hash: Option, } + impl From for BlockHeaderV1 { + fn from(item: eth_types::BlockHeader) -> Self { + serde_json::from_str(&serde_json::to_string(&item).unwrap()).unwrap() + } + } + #[derive(Clone, BorshDeserialize, BorshSerialize)] pub struct InitInputV1 { pub network: String, @@ -58,13 +64,9 @@ mod integration_tests { impl From for InitInputV1 { fn from(message: InitInput) -> Self { - let finalized_execution_header: BlockHeaderV1 = serde_json::from_str( - &serde_json::to_string(&message.finalized_execution_header).unwrap(), - ) - .unwrap(); Self { network: message.network, - finalized_execution_header, + finalized_execution_header: message.finalized_execution_header.into(), finalized_beacon_header: message.finalized_beacon_header, current_sync_committee: message.current_sync_committee, next_sync_committee: message.next_sync_committee, @@ -181,9 +183,10 @@ mod integration_tests { for headers_chunk in headers.chunks(50) { let mut transaction = alice.batch(contract.id()); for header in headers_chunk { + let header_v1: BlockHeaderV1 = header.clone().into(); transaction = transaction.call( Function::new("submit_execution_header") - .args(header.try_to_vec()?) + .args(header_v1.try_to_vec()?) .gas(parse_gas!("6 T") as u64), ); } From 0b5affa77c68078c3098a20f7e1be67c79537020 Mon Sep 17 00:00:00 2001 From: karim-en Date: Wed, 17 Jan 2024 02:14:04 +0000 Subject: [PATCH 13/22] Fix block json namings --- eth2near/eth_rpc_client/src/eth1_rpc_client.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/eth2near/eth_rpc_client/src/eth1_rpc_client.rs b/eth2near/eth_rpc_client/src/eth1_rpc_client.rs index 4ab2e8d2..ffbbf1ad 100644 --- a/eth2near/eth_rpc_client/src/eth1_rpc_client.rs +++ b/eth2near/eth_rpc_client/src/eth1_rpc_client.rs @@ -50,6 +50,9 @@ impl Eth1RPCClient { block_json = block_json.replace("parentHash", "parent_hash"); block_json = block_json.replace("miner", "author"); block_json = block_json.replace("withdrawalsRoot", "withdrawals_root"); + block_json = block_json.replace("blobGasUsed", "blob_gas_used"); + block_json = block_json.replace("excessBlobGas", "excess_blob_gas"); + block_json = block_json.replace("parentBeaconBlockRoot", "parent_beacon_block_root"); let block_header: BlockHeader = serde_json::from_str(&block_json)?; Ok(block_header) From a20e81dcd45af7282810b487ecf00a9d24a83505 Mon Sep 17 00:00:00 2001 From: karim-en Date: Wed, 17 Jan 2024 14:34:59 +0000 Subject: [PATCH 14/22] Fix `validate_beacon_block_header_update` --- contracts/near/eth2-client/src/lib.rs | 3 +- contracts/near/eth2-utility/src/consensus.rs | 89 +++++++++++++------- 2 files changed, 61 insertions(+), 31 deletions(-) diff --git a/contracts/near/eth2-client/src/lib.rs b/contracts/near/eth2-client/src/lib.rs index 9efc256e..15c2ac00 100644 --- a/contracts/near/eth2-client/src/lib.rs +++ b/contracts/near/eth2-client/src/lib.rs @@ -465,8 +465,9 @@ impl Eth2Client { ), "Invalid finality proof" ); + let config = NetworkConfig::new(&self.network); require!( - validate_beacon_block_header_update(&update.finality_update.header_update), + config.validate_beacon_block_header_update(&update.finality_update.header_update), "Invalid execution block hash proof" ); diff --git a/contracts/near/eth2-utility/src/consensus.rs b/contracts/near/eth2-utility/src/consensus.rs index 2c2b26d5..f2cbb434 100644 --- a/contracts/near/eth2-utility/src/consensus.rs +++ b/contracts/near/eth2-utility/src/consensus.rs @@ -19,13 +19,14 @@ pub const FINALITY_TREE_INDEX: u32 = get_subtree_index(FINALIZED_ROOT_INDEX); pub const SYNC_COMMITTEE_TREE_DEPTH: u32 = floorlog2(NEXT_SYNC_COMMITTEE_INDEX); pub const SYNC_COMMITTEE_TREE_INDEX: u32 = get_subtree_index(NEXT_SYNC_COMMITTEE_INDEX); -pub const BEACON_BLOCK_BODY_TREE_DEPTH: usize = 4; -pub const L1_BEACON_BLOCK_BODY_TREE_EXECUTION_PAYLOAD_INDEX: usize = 9; -pub const L2_EXECUTION_PAYLOAD_TREE_EXECUTION_BLOCK_INDEX: usize = 12; -pub const L1_BEACON_BLOCK_BODY_PROOF_SIZE: usize = 4; -pub const L2_EXECUTION_PAYLOAD_PROOF_SIZE: usize = 4; -pub const EXECUTION_PROOF_SIZE: usize = - L1_BEACON_BLOCK_BODY_PROOF_SIZE + L2_EXECUTION_PAYLOAD_PROOF_SIZE; +pub struct ProofSize { + pub beacon_block_body_tree_depth: usize, + pub l1_beacon_block_body_tree_execution_payload_index: usize, + pub l2_execution_payload_tree_execution_block_index: usize, + pub l1_beacon_block_body_proof_size: usize, + pub l2_execution_payload_proof_size: usize, + pub execution_proof_size: usize, +} #[derive(PartialEq, BorshSerialize, BorshDeserialize)] pub enum Network { @@ -119,6 +120,57 @@ impl NetworkConfig { pub fn compute_fork_version_by_slot(&self, slot: Slot) -> Option { self.compute_fork_version(compute_epoch_at_slot(slot)) } + + pub fn compute_proof_size(&self, epoch: Epoch) -> ProofSize { + if epoch >= self.deneb_fork_epoch { + return ProofSize { + beacon_block_body_tree_depth: 4, + l1_beacon_block_body_tree_execution_payload_index: 9, + l2_execution_payload_tree_execution_block_index: 12, + l1_beacon_block_body_proof_size: 4, + l2_execution_payload_proof_size: 5, + execution_proof_size: 9, + }; + } + + ProofSize { + beacon_block_body_tree_depth: 4, + l1_beacon_block_body_tree_execution_payload_index: 9, + l2_execution_payload_tree_execution_block_index: 12, + l1_beacon_block_body_proof_size: 4, + l2_execution_payload_proof_size: 4, + execution_proof_size: 8, + } + } + + pub fn compute_proof_size_by_slot(&self, slot: Slot) -> ProofSize { + self.compute_proof_size(compute_epoch_at_slot(slot)) + } + + pub fn validate_beacon_block_header_update(&self, header_update: &HeaderUpdate) -> bool { + let branch = &header_update.execution_hash_branch; + let proof_size = self.compute_proof_size_by_slot(header_update.beacon_header.slot); + if branch.len() != proof_size.execution_proof_size { + return false; + } + + let l2_proof = &branch[0..proof_size.l2_execution_payload_proof_size]; + let l1_proof = + &branch[proof_size.l2_execution_payload_proof_size..proof_size.execution_proof_size]; + let execution_payload_hash = merkle_root_from_branch( + header_update.execution_block_hash, + l2_proof, + proof_size.l2_execution_payload_proof_size, + proof_size.l2_execution_payload_tree_execution_block_index, + ); + verify_merkle_proof( + execution_payload_hash, + l1_proof, + proof_size.beacon_block_body_tree_depth, + proof_size.l1_beacon_block_body_tree_execution_payload_index, + header_update.beacon_header.body_root, + ) + } } pub const fn compute_epoch_at_slot(slot: Slot) -> u64 { @@ -187,29 +239,6 @@ pub fn get_participant_pubkeys( result } -pub fn validate_beacon_block_header_update(header_update: &HeaderUpdate) -> bool { - let branch = &header_update.execution_hash_branch; - if branch.len() != EXECUTION_PROOF_SIZE { - return false; - } - - let l2_proof = &branch[0..L2_EXECUTION_PAYLOAD_PROOF_SIZE]; - let l1_proof = &branch[L2_EXECUTION_PAYLOAD_PROOF_SIZE..EXECUTION_PROOF_SIZE]; - let execution_payload_hash = merkle_root_from_branch( - header_update.execution_block_hash, - l2_proof, - L2_EXECUTION_PAYLOAD_PROOF_SIZE, - L2_EXECUTION_PAYLOAD_TREE_EXECUTION_BLOCK_INDEX, - ); - verify_merkle_proof( - execution_payload_hash, - l1_proof, - BEACON_BLOCK_BODY_TREE_DEPTH, - L1_BEACON_BLOCK_BODY_TREE_EXECUTION_PAYLOAD_INDEX, - header_update.beacon_header.body_root, - ) -} - /// Verify a proof that `leaf` exists at `index` in a Merkle tree rooted at `root`. /// /// The `branch` argument is the main component of the proof: it should be a list of internal From e37df8ecccbc5fe171ed32ebb13cb11f4bacdf0b Mon Sep 17 00:00:00 2001 From: Olga Kunyavskaya Date: Wed, 17 Jan 2024 22:02:30 +0200 Subject: [PATCH 15/22] fix proof size for deneb --- eth2near/Cargo.lock | 1 + .../src/eth2near_relay.rs | 154 +++++++++--------- eth2near/eth2near-block-relay-rs/src/main.rs | 5 +- eth2near/eth_rpc_client/Cargo.toml | 1 + .../src/beacon_block_body_merkle_tree.rs | 25 ++- .../src/execution_block_proof.rs | 43 +++-- 6 files changed, 124 insertions(+), 105 deletions(-) diff --git a/eth2near/Cargo.lock b/eth2near/Cargo.lock index dcf3a56d..8f571524 100644 --- a/eth2near/Cargo.lock +++ b/eth2near/Cargo.lock @@ -1433,6 +1433,7 @@ dependencies = [ "dotenv", "env_logger", "eth-types", + "eth2-utility", "ethereum-types", "ethereum_hashing", "ethereum_ssz", diff --git a/eth2near/eth2near-block-relay-rs/src/eth2near_relay.rs b/eth2near/eth2near-block-relay-rs/src/eth2near_relay.rs index a3c303cc..c7ddeb47 100644 --- a/eth2near/eth2near-block-relay-rs/src/eth2near_relay.rs +++ b/eth2near/eth2near-block-relay-rs/src/eth2near_relay.rs @@ -2,13 +2,14 @@ use crate::config::Config; use crate::prometheus_metrics; use crate::prometheus_metrics::{ CHAIN_FINALIZED_EXECUTION_BLOCK_HEIGHT_ON_ETH, CHAIN_FINALIZED_EXECUTION_BLOCK_HEIGHT_ON_NEAR, - FAILS_ON_HEADERS_SUBMISSION, FAILS_ON_UPDATES_SUBMISSION, - LAST_FINALIZED_ETH_SLOT, LAST_FINALIZED_ETH_SLOT_ON_NEAR, + FAILS_ON_HEADERS_SUBMISSION, FAILS_ON_UPDATES_SUBMISSION, LAST_FINALIZED_ETH_SLOT, + LAST_FINALIZED_ETH_SLOT_ON_NEAR, }; use bitvec::macros::internal::funty::Fundamental; use contract_wrapper::eth_client_contract_trait::EthClientContractTrait; use contract_wrapper::near_rpc_client::NearRPCClient; use eth2_utility::consensus::{EPOCHS_PER_SYNC_COMMITTEE_PERIOD, SLOTS_PER_EPOCH}; +use eth2_utility::types::ClientMode; use eth_rpc_client::beacon_rpc_client::BeaconRPCClient; use eth_rpc_client::eth1_rpc_client::Eth1RPCClient; use eth_rpc_client::hand_made_finality_light_client_update::HandMadeFinalityLightClientUpdate; @@ -16,7 +17,6 @@ use eth_types::eth2::LightClientUpdate; use eth_types::BlockHeader; use log::{debug, info, trace, warn}; use near_primitives::views::FinalExecutionStatus; -use std::{cmp, fmt}; use std::cmp::max; use std::error::Error; use std::fmt::Display; @@ -24,7 +24,7 @@ use std::thread; use std::thread::sleep; use std::time::Duration; use std::vec::Vec; -use eth2_utility::types::ClientMode; +use std::{cmp, fmt}; use types::Slot; const ONE_EPOCH_IN_SLOTS: u64 = 32; @@ -86,10 +86,7 @@ pub struct SlotByBlockNumberNotFound; impl Display for SlotByBlockNumberNotFound { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!( - f, - "Slot wasn't found for given block number" - ) + write!(f, "Slot wasn't found for given block number") } } @@ -113,10 +110,7 @@ pub struct Eth2NearRelay { } impl Eth2NearRelay { - pub fn init( - config: &Config, - eth_contract: Box, - ) -> Self { + pub fn init(config: &Config, eth_contract: Box) -> Self { info!(target: "relay", "=== Relay initialization === "); let beacon_rpc_client = BeaconRPCClient::new( @@ -216,14 +210,15 @@ impl Eth2NearRelay { info!(target: "relay", "== New relay loop =="); sleep(Duration::from_secs(12)); - let client_mode: ClientMode = skip_fail!(self.eth_client_contract.get_client_mode(), + let client_mode: ClientMode = skip_fail!( + self.eth_client_contract.get_client_mode(), "Fail to get client mode", self.sleep_time_on_sync_secs ); let submitted_in_this_iteration = match client_mode { ClientMode::SubmitLightClientUpdate => self.submit_light_client_update(), - ClientMode::SubmitHeader => self.submit_headers() + ClientMode::SubmitHeader => self.submit_headers(), }; if !submitted_in_this_iteration { @@ -239,11 +234,15 @@ impl Eth2NearRelay { } fn get_max_block_number(&mut self) -> Result> { - if let Some(tail_block_number) = self.eth_client_contract.get_unfinalized_tail_block_number()? { + if let Some(tail_block_number) = self + .eth_client_contract + .get_unfinalized_tail_block_number()? + { Ok(tail_block_number - 1) } else { - self.beacon_rpc_client.get_block_number_for_slot( - Slot::new(self.eth_client_contract.get_finalized_beacon_block_slot()?)) + self.beacon_rpc_client.get_block_number_for_slot(Slot::new( + self.eth_client_contract.get_finalized_beacon_block_slot()?, + )) } } @@ -265,18 +264,17 @@ impl Eth2NearRelay { false ); - let min_block_number_in_batch = - max(min_block_number, current_block_number - self.headers_batch_size + 1); + let min_block_number_in_batch = max( + min_block_number, + current_block_number - self.headers_batch_size + 1, + ); info!(target: "relay", "Get headers block_number=[{}, {}]", min_block_number_in_batch, current_block_number); let mut headers = skip_fail!( - self.get_execution_blocks_between( - min_block_number_in_batch, - current_block_number, - ), - "Network problems during fetching execution blocks", - self.sleep_time_on_sync_secs - ); + self.get_execution_blocks_between(min_block_number_in_batch, current_block_number,), + "Network problems during fetching execution blocks", + self.sleep_time_on_sync_secs + ); headers.reverse(); if !self.submit_execution_blocks(headers) { @@ -346,20 +344,19 @@ impl Eth2NearRelay { for current_block_number in min_block_number..=max_block_number { debug!(target: "relay", "Try add block header for block number={}", current_block_number); - headers.push(self.eth1_rpc_client.get_block_header_by_number(current_block_number)?); + headers.push( + self.eth1_rpc_client + .get_block_header_by_number(current_block_number)?, + ); } Ok(headers) } - fn submit_execution_blocks( - &mut self, - headers: Vec, - ) -> bool { + fn submit_execution_blocks(&mut self, headers: Vec) -> bool { info!(target: "relay", "Try submit headers batch"); let execution_outcome = return_val_on_fail!( - self.eth_client_contract - .send_headers(&headers), + self.eth_client_contract.send_headers(&headers), "Error on header submission", false ); @@ -450,10 +447,7 @@ impl Eth2NearRelay { last_finalized_slot_on_near, last_finalized_slot_on_eth, ) { - self.send_light_client_updates( - last_finalized_slot_on_near, - last_finalized_slot_on_eth, - ); + self.send_light_client_updates(last_finalized_slot_on_near, last_finalized_slot_on_eth); return true; } @@ -651,10 +645,10 @@ impl Eth2NearRelay { light_client_update: LightClientUpdate, ) -> bool { let verification_result = return_val_on_fail!( - self.verify_bls_signature_for_finality_update(&light_client_update), - "Error on bls verification. Skip sending the light client update", - false - ); + self.verify_bls_signature_for_finality_update(&light_client_update), + "Error on bls verification. Skip sending the light client update", + false + ); if verification_result { info!(target: "relay", "PASS bls signature verification!"); @@ -664,12 +658,12 @@ impl Eth2NearRelay { } let execution_outcome = return_val_on_fail_and_sleep!( - self.eth_client_contract - .send_light_client_update(light_client_update.clone()), - "Fail to send light client update", - self.sleep_time_on_sync_secs, - false - ); + self.eth_client_contract + .send_light_client_update(light_client_update.clone()), + "Fail to send light client update", + self.sleep_time_on_sync_secs, + false + ); info!(target: "relay", "Sending light client update"); @@ -682,18 +676,18 @@ impl Eth2NearRelay { self.near_network_name, execution_outcome.transaction.hash); let finalized_block_number = return_val_on_fail!( - self.beacon_rpc_client - .get_block_number_for_slot(types::Slot::new( - light_client_update - .finality_update - .header_update - .beacon_header - .slot - .as_u64() - )), - "Fail on getting finalized block number", - false - ); + self.beacon_rpc_client + .get_block_number_for_slot(types::Slot::new( + light_client_update + .finality_update + .header_update + .beacon_header + .slot + .as_u64() + )), + "Fail on getting finalized block number", + false + ); info!(target: "relay", "Finalized block number from light client update = {}", finalized_block_number); sleep(Duration::from_secs(self.sleep_time_after_submission_secs)); @@ -704,9 +698,9 @@ impl Eth2NearRelay { #[cfg(test)] mod tests { use crate::config_for_tests::ConfigForTests; + use crate::eth2near_relay::ClientMode; use crate::eth2near_relay::{Eth2NearRelay, ONE_EPOCH_IN_SLOTS}; use crate::test_utils::{get_relay, get_relay_from_slot, get_relay_with_update_from_file}; - use crate::eth2near_relay::ClientMode; use eth_rpc_client::beacon_rpc_client::BeaconRPCClient; use eth_rpc_client::hand_made_finality_light_client_update::HandMadeFinalityLightClientUpdate; use eth_types::eth2::LightClientUpdate; @@ -725,7 +719,10 @@ mod tests { .unwrap() } - fn get_execution_block_by_slot(relay: &Eth2NearRelay, slot: u64) -> Result> { + fn get_execution_block_by_slot( + relay: &Eth2NearRelay, + slot: u64, + ) -> Result> { match relay .beacon_rpc_client .get_block_number_for_slot(types::Slot::new(slot)) @@ -741,7 +738,7 @@ mod tests { fn test_submit_zero_headers() { let config_for_test = get_test_config(); - let mut relay = get_relay( true, &config_for_test); + let mut relay = get_relay(true, &config_for_test); let blocks: Vec = vec![]; if let Ok(_) = relay.eth_client_contract.send_headers(&blocks) { @@ -794,10 +791,13 @@ mod tests { let relay = get_relay(true, &config_for_test); - let last_period = BeaconRPCClient::get_period_for_slot(relay.beacon_rpc_client - .get_last_slot_number() - .unwrap() - .as_u64()); + let last_period = BeaconRPCClient::get_period_for_slot( + relay + .beacon_rpc_client + .get_last_slot_number() + .unwrap() + .as_u64(), + ); let light_client_update = relay .beacon_rpc_client @@ -855,7 +855,7 @@ mod tests { fn test_hand_made_light_client_update() { let config_for_test = get_test_config(); - let mut relay = get_relay( true, &config_for_test); + let mut relay = get_relay(true, &config_for_test); let light_client_updates: Vec = serde_json::from_str( &std::fs::read_to_string(config_for_test.path_to_light_client_updates) @@ -890,7 +890,7 @@ mod tests { fn test_send_light_client_update() { let config_for_test = get_test_config(); - let mut relay = get_relay( false, &config_for_test); + let mut relay = get_relay(false, &config_for_test); let finality_slot = get_finalized_slot(&relay); assert!(relay.send_light_client_updates_with_checks()); @@ -976,17 +976,15 @@ mod tests { let light_client_updates: Vec = serde_json::from_str( &std::fs::read_to_string(config_for_test.path_to_light_client_updates) .expect("Unable to read file"), - ).unwrap(); + ) + .unwrap(); relay.send_specific_light_client_update(light_client_updates[1].clone()); let min_block_number = relay.eth_client_contract.get_last_block_number().unwrap() + 1; let max_block_number = relay.get_max_block_number().unwrap(); let blocks = relay - .get_execution_blocks_between( - min_block_number, - max_block_number, - ) + .get_execution_blocks_between(min_block_number, max_block_number) .unwrap(); relay.submit_execution_blocks(blocks); } @@ -1000,9 +998,7 @@ mod tests { let possible_attested_slot = finalized_slot + ONE_EPOCH_IN_SLOTS * 2 + ONE_EPOCH_IN_SLOTS * relay.interval_between_light_client_updates_submission_in_epochs; - if get_execution_block_by_slot(&relay, possible_attested_slot) - .is_ok() - { + if get_execution_block_by_slot(&relay, possible_attested_slot).is_ok() { panic!("possible attested slot has execution block"); } @@ -1016,7 +1012,11 @@ mod tests { let config_for_test = get_test_config(); let mut relay = get_relay(false, &config_for_test); let finality_slot = get_finalized_slot(&relay); - let finality_slot_on_eth = relay.beacon_rpc_client.get_last_finalized_slot_number().unwrap().as_u64(); + let finality_slot_on_eth = relay + .beacon_rpc_client + .get_last_finalized_slot_number() + .unwrap() + .as_u64(); relay.send_regular_light_client_update(finality_slot_on_eth, finality_slot); diff --git a/eth2near/eth2near-block-relay-rs/src/main.rs b/eth2near/eth2near-block-relay-rs/src/main.rs index 6b7ac550..6bf76cd1 100644 --- a/eth2near/eth2near-block-relay-rs/src/main.rs +++ b/eth2near/eth2near-block-relay-rs/src/main.rs @@ -101,10 +101,7 @@ fn main() -> Result<(), Box> { ); init_log(&args, &config); - let mut eth2near_relay = Eth2NearRelay::init( - &config, - get_eth_client_contract(&config) - ); + let mut eth2near_relay = Eth2NearRelay::init(&config, get_eth_client_contract(&config)); eth2near_relay.run(None); Ok(()) diff --git a/eth2near/eth_rpc_client/Cargo.toml b/eth2near/eth_rpc_client/Cargo.toml index d223d302..400405ac 100644 --- a/eth2near/eth_rpc_client/Cargo.toml +++ b/eth2near/eth_rpc_client/Cargo.toml @@ -17,6 +17,7 @@ serde = { version = "1.0", features = ["derive"] } ethereum-types = { version = "0.14.1", features = ["rlp", "serialize"], default-features = false } reqwest = { version = "0.11", features = ["blocking"] } eth-types = { path = "../../contracts/near/eth-types/" } +eth2-utility = { path = "../../contracts/near/eth2-utility/" } contract_wrapper = { path = "../contract_wrapper" } clap = { version = "3.1.6", features = ["derive"] } tokio = { version = "1.1", features = ["macros", "rt", "time"] } diff --git a/eth2near/eth_rpc_client/src/beacon_block_body_merkle_tree.rs b/eth2near/eth_rpc_client/src/beacon_block_body_merkle_tree.rs index 89c84361..cecf1914 100644 --- a/eth2near/eth_rpc_client/src/beacon_block_body_merkle_tree.rs +++ b/eth2near/eth_rpc_client/src/beacon_block_body_merkle_tree.rs @@ -10,7 +10,7 @@ use types::{BeaconBlockBody, BeaconState, ExecutionPayload, MainnetEthSpec}; pub struct BeaconBlockBodyMerkleTree(pub MerkleTree); impl BeaconBlockBodyMerkleTree { - pub const BEACON_BLOCK_BODY_TREE_NUM_LEAVES: usize = 11; + pub const BEACON_BLOCK_BODY_TREE_NUM_LEAVES: usize = 12; pub const BEACON_BLOCK_BODY_TREE_DEPTH: usize = 4; pub fn new(beacon_block_body: &BeaconBlockBody) -> Self { @@ -38,6 +38,12 @@ impl BeaconBlockBodyMerkleTree { } else { H256::zero() }, + + if let Ok(blob_kzg_commitments) = beacon_block_body.blob_kzg_commitments() { + blob_kzg_commitments.tree_hash_root() + } else { + H256::zero() + } ]; Self(MerkleTree::create( @@ -56,11 +62,9 @@ impl BeaconBlockBodyMerkleTree { pub struct ExecutionPayloadMerkleTree(pub MerkleTree); impl ExecutionPayloadMerkleTree { - pub const TREE_NUM_LEAVES: usize = 15; - pub const TREE_DEPTH: usize = 4; - pub fn new(execution_payload: &ExecutionPayload) -> Self { - let leaves: [H256; Self::TREE_NUM_LEAVES] = [ + let mut depth: usize = 4; + let mut leaves: Vec = vec![ execution_payload.parent_hash().tree_hash_root(), execution_payload.fee_recipient().tree_hash_root(), execution_payload.state_root().tree_hash_root(), @@ -82,7 +86,16 @@ impl ExecutionPayloadMerkleTree { }, ]; - Self(MerkleTree::create(&leaves, Self::TREE_DEPTH)) + if let Ok(blob_gas_used) = execution_payload.blob_gas_used() { + depth += 1; + leaves.push(blob_gas_used.tree_hash_root()); + } + + if let Ok(excess_blob_gas) = execution_payload.excess_blob_gas() { + leaves.push(excess_blob_gas.tree_hash_root()); + } + + Self(MerkleTree::create(&leaves, depth)) } } diff --git a/eth2near/eth_rpc_client/src/execution_block_proof.rs b/eth2near/eth_rpc_client/src/execution_block_proof.rs index 2dfc9893..4098fd34 100644 --- a/eth2near/eth_rpc_client/src/execution_block_proof.rs +++ b/eth2near/eth_rpc_client/src/execution_block_proof.rs @@ -5,7 +5,9 @@ use ethereum_types::H256; use std::error::Error; use std::fmt; use std::fmt::Display; -use types::{BeaconBlockBody, ExecutionPayload, MainnetEthSpec}; +use eth_types::eth2::Epoch; +use types::{BeaconBlockBody, ExecutionPayload, ForkName, MainnetEthSpec}; +use eth2_utility::consensus::NetworkConfig; /// `ExecutionBlockProof` contains a `block_hash` (execution block) and /// a proof of its inclusion in the `BeaconBlockBody` tree hash. @@ -17,29 +19,30 @@ use types::{BeaconBlockBody, ExecutionPayload, MainnetEthSpec}; /// The proof starts from the leaf. pub struct ExecutionBlockProof { block_hash: H256, - proof: [H256; Self::PROOF_SIZE], + proof: Vec, } impl ExecutionBlockProof { pub const L1_BEACON_BLOCK_BODY_TREE_EXECUTION_PAYLOAD_INDEX: usize = 9; + pub const L1_BEACON_BLOCK_BODY_PROOF_SIZE: usize = 4; pub const L2_EXECUTION_PAYLOAD_TREE_EXECUTION_BLOCK_INDEX: usize = 12; - pub const L1_BEACON_BLOCK_BODY_PROOF_SIZE: usize = - BeaconBlockBodyMerkleTree::BEACON_BLOCK_BODY_TREE_DEPTH; - pub const L2_EXECUTION_PAYLOAD_PROOF_SIZE: usize = ExecutionPayloadMerkleTree::TREE_DEPTH; - pub const PROOF_SIZE: usize = - Self::L1_BEACON_BLOCK_BODY_PROOF_SIZE + Self::L2_EXECUTION_PAYLOAD_PROOF_SIZE; - - pub fn construct_from_raw_data(block_hash: &H256, proof: &[H256; Self::PROOF_SIZE]) -> Self { + pub fn construct_from_raw_data(block_hash: &H256, proof: Vec) -> Self { Self { block_hash: *block_hash, - proof: *proof, + proof, } } pub fn construct_from_beacon_block_body( beacon_block_body: &BeaconBlockBody, ) -> Result> { + let l2_execution_payload_proof_size: usize = if let ForkName::Deneb = beacon_block_body.to_ref().fork_name() { + 5 + } else { + 4 + }; + let beacon_block_merkle_tree = &BeaconBlockBodyMerkleTree::new(beacon_block_body); let execution_payload_merkle_tree = &ExecutionPayloadMerkleTree::new( @@ -61,7 +64,7 @@ impl ExecutionBlockProof { .0 .generate_proof( Self::L2_EXECUTION_PAYLOAD_TREE_EXECUTION_BLOCK_INDEX, - Self::L2_EXECUTION_PAYLOAD_PROOF_SIZE, + l2_execution_payload_proof_size, ) .map_err(|err| MerkleTreeError(err))? .1; @@ -77,8 +80,8 @@ impl ExecutionBlockProof { }) } - pub fn get_proof(&self) -> [H256; Self::PROOF_SIZE] { - self.proof + pub fn get_proof(&self) -> Vec { + self.proof.clone() } pub fn get_execution_block_hash(&self) -> H256 { @@ -88,22 +91,26 @@ impl ExecutionBlockProof { pub fn verify_proof_for_hash( &self, beacon_block_body_hash: &H256, + network_config: NetworkConfig, + epoch: Epoch ) -> Result { - let l2_proof: &[H256] = &self.proof[0..Self::L2_EXECUTION_PAYLOAD_PROOF_SIZE]; + let proof_size = network_config.compute_proof_size(epoch); + + let l2_proof: &[H256] = &self.proof[0..proof_size.l2_execution_payload_proof_size]; let l1_proof: &[H256] = - &self.proof[Self::L2_EXECUTION_PAYLOAD_PROOF_SIZE..Self::PROOF_SIZE]; + &self.proof[proof_size.l2_execution_payload_proof_size..proof_size.execution_proof_size]; let execution_payload_hash = Self::merkle_root_from_branch( self.block_hash, l2_proof, - Self::L2_EXECUTION_PAYLOAD_PROOF_SIZE, - Self::L2_EXECUTION_PAYLOAD_TREE_EXECUTION_BLOCK_INDEX, + proof_size.l2_execution_payload_proof_size, + proof_size.l2_execution_payload_tree_execution_block_index, )?; Ok(merkle_proof::verify_merkle_proof( execution_payload_hash, l1_proof, BeaconBlockBodyMerkleTree::BEACON_BLOCK_BODY_TREE_DEPTH, - Self::L1_BEACON_BLOCK_BODY_TREE_EXECUTION_PAYLOAD_INDEX, + proof_size.l1_beacon_block_body_tree_execution_payload_index, *beacon_block_body_hash, )) } From cf7ec14f75a728252a52131b99ed8fd7582b6d50 Mon Sep 17 00:00:00 2001 From: Olga Kunyavskaya Date: Wed, 17 Jan 2024 22:49:11 +0200 Subject: [PATCH 16/22] update bin --- contracts/near/res/eth2_client.wasm | Bin 391085 -> 391975 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/contracts/near/res/eth2_client.wasm b/contracts/near/res/eth2_client.wasm index 3f35ca657d7a72132c15dc9e7ee7c640a8f80331..e147691ee25d74b566ac8761ef4d3bd0237fc2ce 100755 GIT binary patch delta 48916 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 mXiLS6xn66A+5;kM=y?Dw2G=& z8tqk-C~7Batu;z(FIrVp`G3y5@4dMxzTfZf_kaG+pXbT@&Y3f3&di)SbLPyM_s+f) zpL;HTVV6)jIeKE=BcTaOh0D@)^WKU`l#y%Zejnn>2(b$0=1qutF!X`(QNKp*ipRy9*XZcOuCeaDu7j>auH2{z zQQx?I?rBjuQD3{KMoo`e5H&w)V$>H=v!doi4U3)~Ju^Bx`f$|IsKThSEM| zs6V1+MSI;JyC=Jcy0hIQ-J{(z-Gkgi+{4{t+ymSL-6P!7+|%7T?iud>?!oT4?)mO7 z-MQ}N?i23A?qlv>+$Y^T-P_$iy1#Spa?g!E<^I!s$^Do6vipkr%jhqnBd<&=J<(gY z)Z^lE-mp^dN!R6JnVBIWF0U{Qnz7s{L-{>bs5dRXM(moAI>%bSG(R)MDq~*uz8F79 z6nam_zaVCN+b7f#YrK6E7Ktl)waRuD;<7h0F}3@lp(x}I@d%G$9r>0E#+f!uXxJtV zE91Zn4V$B36&;w=upt_j;=q)K4bm`a9?AcTi<$4!YuZ6#b)symG_B=1dEbr!&22o>20L^1mlW8f+yC|iU z*OQtWe}tRhF&Y@*DavD{8Bv~4PYE;E`$Xzv;z-`2)ImagqE)9N#Pa)Z0@ zzN850{b z)q=+Rxb$6(@P72JS$H4TgyE~2aBVA^^824nnTsvW_+8!2aM7Ic?`qEYh0Pfr--2<@ zwcz(EEt#gU_`R{kaI+P^-{0z5P%m6}+WX->O!2*Y8Dqh{j6I|^zprQ=+&hE3V_I|X zY`KpyKEI#qKX^aaKd23`^Om*A5|O`Xu?aDM9qK*uV5z)kAM7B-TJM7Pv&H7T$2v3< zNQ~`xciaZuPmq!{BV0?DxqgIq`-)QD%N@&$&+^K2iV<<^ZiAE8uCrH&oq2^_3?bI! z9ewBlq`WmB8GxC%@R3ab^?mdS0fu%z)>r}-)Aeb<`gBba@&3tNFp#A%$vVSNbB%XK zx6(lLb;D%N`?cFULS*MX^>h;hsR_@zxRROAHC1A*x3K#S;1%{r#QWbp(nNu`QqP)r z@6xja;4^x5!TZIY58!X}m)hX(ke4cnwR!Vi`l199kG}f4*y3IPYPy)$KpkD&y_*`rv!k@-&YUE>Ea+;MA)AvSCOFCZuV_yl!Q! zUzHh>UNa=5Nl2)Msds{5%EN_9m}|Wa->4er^gsf1Q<{NUiMg=W`}!L-#S!oHH#b5T;KNIE+2k^w{89Ec@z5X*0953P2RSCVO)R_DrNW) zPG!7n{4>J4Wk`j*0h!B$IP6_GsEqgF0gWRT+5KjIMbC{@9`Dx!R)wACK1!9|;A8hDU|{!IaHG-r>Wa z5i9ae51(8D3=jDvo+V`Z*!CvUgOv$j@}DTw=#tlVsZ~Bdq>QV z%Ue0~4&fjzx)oC1i1~FyY|a2w%EJV`k7;5~@NQYq8vXA1vTmMhP7S88WkKWUuN?|b z9h^J=i$Lz;V!3&qFEJ`Md%j!M?68+4ym9kQ2l1<0A%ex0eh%{fUB{im+j>zt3 zx_G^Zk+3d)$F!nMn?)!8Yn_h-Fw9?=7cR+(lfj8^xug6!r*uxu5Thli-Vm>+3M;Iw z+k0wRe7G}7+mU6d#AL%9%3bJ@R(LwowB%cOn(MhvG}v1Hc)4@jUx`>_!_!lYs1TQ{ zG*4||2~6(A%j>n$9pY++y0|uT0Mldh#2l#K1d}!QGm#jVexJf{=biYSroEsJ=Y_9` z7RI5W-i(zsy!WiEFXnmQTiFAD53hV2g4sC#fSBwpy~+|3y^pQ(U^2hAsvaz?d8@7q zWPG{0IWkVIW>E5)>IOg${J@~B9{}qF4&FP&8jBO``VAGnCRXgyR*8wvf~l_ z?YJ`@WG=EO&R6lb)voUNJ7-rLG2eS(*Arrex9#qCfcgFI)?%bLd`~jotL}M8 zT=Qn{86@&);SpKRTW4>yIOlD#_xV!Va!Yi@hFGV3;J~T?duj3BC(%tYKeZAE$Nwo4 zy|4U~2qHs%s?fxd7alpQndy|Rt|cqYxWgS{6^>>iHDG!Kqc(;)SNKzsSfk0s?|T_D zw*S7K;RoyvxNqDHBf%TKzbe3W_V>cyDf^p>ne^%)RoZ)Y|I%)H60?v5Y}_J<-@+|| z`0d*wh~K&`g7|IQV?!zS4N>0fIcSQt-ns`{>c8>cp$F@UvEJ_vu1325pypvwrA;Ljv zM&WvKnx5(^le`}vc~t!DJ$U40fbakLZnSpr&-aN#-pxPPaO=g_qjd=;lsZ~ltj()` zbV?}1VEc*YtoF@QW%*J4bPE;=^VCGIJe!HP>Zc#_?m2r#!(R2)J9kzr%1b%FJq&7Ngf*!0h<{@iD;yaw?0E7kIT zx-kbBz5zn?1v7M`gn%7GtHQ-sMX5t!VslaIro4gVjua0D5PW?i#ZOAir#3O76&}N5 zL|Z)e*r`NQJciU8rq27?6xBp79X3Uo@{U~HsfErX?}v6Vv^*MbnKlZls1_^AIR(IV zw^;Fc39*ExC5nkOIYAu2`+H@@NtZ+Gm?1(bHdT1&e7uMiOMF0lTi8fLX=;*q79_7H ziDm#bEiZha{6~2)8>z|3A{(hYDu@<9d8LB53qUJXjHU)2aSZQ?DFS2SBC# zHL#+7_*z#NrIpy>>k13Agjh|U24aJ8eFS08Qo$G5P*f2v$DoOE!KB&timFP_HxhNk z&*W_+n&a_fBheI(=*D7<*h4vu#W1vRd$LNU_IHUg4v2oc3vJce57CEB#3V7+SEi|G zBp~H5zS|jdhf~3)vNR2UQKZpN&BP@vq_q8RjOtHRt-0u3>MGBDEH&989e^BJwitfq;yq zx%Y^!Vkwol7bSA3{=H~cF7@vKSshCs-YX{7ur(IyGt;d(k}J+p`pr6ly(=$2iI{yx zLu0X|y6r@Q%2p66hr;Wv#UtVht!pjPK=yoVkj}ZRzXO*bqDBu0xT5Gzh9I^(S7%e4M@#wBU+WSi$)nP=1inprL8klSfQ3Q z$C7wJtODNZ2gLhTohl5p18XtU%@6R;J76@A0lpU=6xh0qrAh5YU81())nq?&jIuYB zxjGNC5pPzO1Z$Pr>Bc!NexV&&yo|nWC#uIg1w(Wxqo~Byc4E3+Lk_rW+Ce1Y@py+| zGSoplD*mS5Is}uMqnLI4wN40BT)U(2a_c%`ko`UGi|&N67T?mo&f;@GGrNeD;ykr{ z2vVF&Js%Rg@o4_AXd-fb?>{VFRW=_@sNxf1HL{LBA==|%H^$fYN%5*MzRjZNx{7$( z(G^WQPu04KC$bUf>fjKr^G-!)YGD0nLt-$8r+5n zXaiO_A3ZIe0}H+@&tpp3^Pnz0@}k&+auvIa7r@<+?qV)d80%`(wTDP3HsB{PjKKpw zs)u++93jtZB9+XZV!c>PKlK!i9gwg7OQMPL=Z|?sY&7lFgUvBdy5%v~Qm@_`eP(Zg z-63u0Ejsw|oAiO=vT6Iy_7Qht7seGW0@{zSiG_Z&&tDf41+R2Jh`vlm2|gGbP%=jFq`v=2lp-c)7{)<^L`N})b`BEb z#TV3Tupl&L+z|1w@3D`?-S9y8kSH(3V9FaNvc!2`v*ALBGM}?O?(B*KUWv8z!w6B8 zJ{W;jP`^KIY7J?$)Qg*$Zhk@aM~W1eV>6+>Tj<%5qISeGtw=dJVWfB{I#9}L4C9?@ zkHn%9Jxas|3Wfl)`Y5zuEj=(wyod!Jnm8fq+D|hZ_7L5NsJcviRsj4v}hk| zD{I4wVR`qYo7-sCXwe4^f>N;xN6Mht<%*y<;N8;}E_6 zrPxvoK7I17;H&(ouT3u^F*xUT)%j4}_W`yleFot@MBjZTiuQ7bW$*NU*BplGy<9x) znkc@e;3~F${;w(m_&2wx_ncdCUY82zGTeujF7&hHdni|wHT+#MZNaSz#(s5c_@KqN zhX3`=t>Nk4`r!#wYN;3{=J-Bcih&k6KKF95Ce(KOCVE0z3F@#;)b>SwFCyHKtGI1g z$JbH^`;oOx%=P?RH}M`z?;P`?^;lPRDG-mqTmU$PcZQ0+5%?2s4x!}*qIRjz^sIr! zz*7c)qRj8fUbfFHrgq!y6z`~$2 z6T=|fm|1h_<(-hyv9xuUNTf2mVDg>jcMptH_Y z?h%>d0(tj{mf|?=+#@~~3#sc~F;vX={jyi<UKC`{4RVk?{wxoUf(F4~h*56S>(i zWJ9cwhK6G2TM4Ys<`lZ?kZ2KhMQ`TcrcTO;qr3kS5j5qHh!c}((IMDlQ)vAm=()?( z{;+r&k9mi6s&1h;BqsUHBchREXL{(RqcHF;)9j<-?vlA_z`RWXTX95+hSkYBO1zpr+>zs4PVF^s6`%d8T6-_-M`hmxCCxya!26;}2cafZM3gd(1!PC&Elj!X; zdI7!Xtaz+cFmqsf4NM%$JuB{jjk517oDf7wzlp1O#GivAT1Exu{J^Hv{yZvMMw`xy z{^EeI{RJ3|c)t6)xL}~b%YTXnG0wUUSEWPxPqdI|*Po&W9^w+r4x+S6;tg@qH~ErS zZD2T`xgzQb(Dhyw^TBkhzhSeUq``kf+2zu&e~Sxg&L+dk)~?_bD|;?xQ$gECZ3)NaLRH754uB1F|;Acslo&2=jdqX{>~^lbX1V zG&~l?8rZRpuV-MN>C1^Wj&t7oEpEyqSRX;A?iTag8~B?gfLlsU7b#&U5kh zMgiRP^m=Cvbut$)q+}AHx?nk z<^4u^UtA3%?{*COz~FqQ)c(%fG(LQyktBTOdl_{Z?e>j)tKP{3*6rWeWzbECUIYV-1BB4vq6Mw|BwCH{&u5fi_?E(fyHsU@Qrx& ze;BX-H}%*}?U!}?&Lni^FyFJIjndqlcRtbG{naPN1f<$}4XpJ1NcL43Yvlju21B&| z3#;!=HGUT*|K{}$r@h+IjI%lOPv3{rjrJnql5G~47ioKrk!4&TPF-ghwZ$dh@EOKI z5#}gpnsGrU($LS0t+2i~J*Kkh#7raFuTpUah26F?=g|9)s|rz}RzkWJ;)$@r&0neR z=f>So&#!)NjKPvDW*N~udCl2Ix)?~?pHx-F*S^nY8&M2hILGKHE{*@f_zj73Ul?$_ z`oiWKJ|R}n$}f#aq0-9CLtjmzF7vcXi_SIfaXTvQiZsG91fA~*7f7E4MzpVgE;>@I z@HJmx9Oq}1MMiyocKwPc*$VnP&-j}4$YSFqJbHg)^aHTV*T%ONuN_gAKcn}`o{yKc2zUg19jaH%+EWK*doNa#N+p`SD57v!+%h9qSH1<2=MKt2d zcgE6ir@&(BSWU*mn0mIRtVowuK);Tsf|@doUR!A-xc%(r$aHfcjaz9vj}_+b2>CFz z%h#x}sj?LP5rKaHA>T*y4UG{>Fr-n}aETy^#tjd}pI^2gPhKa=~n;O-6%=nJc){YoX3j zn~a)hZMBU?^6iTLWS6=dUF={l-=yWF*A`=R#DJAdDve2PHtqw?E`FS(q%B4V3!F;3=k82pKUc_1#rIJW@MK9*q)|Vn&W*kchda@#yr12zxWU~++H+< z3%C1+qc|u-y#p4-czSk+ z@qj(D)oJGr!?cGt#aCh{)~%qzBhdfXb{Q{4e8ZauHx5>*_ijkcWGdKgRLA4*-4M?; z)O?RI3cayqkI^3`I_?DrgJ{=Yqg^R`N=R#ch<24hK60r3PZ;x0Dg7r%(r4t^XH-Sm zHv5c`fnoN2&;6W;e*Sfz(Z?V2vrh`F|3APYOMeh;8M_|^`_uCMsPr;5KVS^UW8(p1 zn+@zk;fIV0;3MsjQ9ckHG+{MUW??{q&NTZFWcxDxd;HuRSrKZtUyWqHHZTXX zK+@<=GJ&T5YIJcsLfpd;8R8@FbBjw+>~R>OdQb8kn3X3C9QjeB6GjeZ>fRGr|8q&4 zG~R+G|ISIHQiQG=p?GbZ1Z`v6`4&8UU4HP0FQ0wZ^HJ&zoQ$d_>5a5L#D7mUX-%o!Jq z&%kcQ-y!TeRfoR#9jj-5`s;VBlKrXW6{9h^FM{MUYIf0h$8EPpS_|Q2?@uc)8q)%` zY+A>)RD&S&`O{zz=kI?S_oA*wm!J~*)1kkN`n2>CRLEs&ciCu#$LPzjAN$k8e?izZ zLhqaM=3O?tHXl7~7T%0C`)i#ct(oxm8|Jc+lz-7krU$MX8Mol&r>h2^I=uL|G5Hp` z<~5@$a$mUyYcH2tUN>6b0?GT2G4J-dO>*9YX?MqNjK ztgH>(I~DzlnHA_QUim^?MQM6a%49QGpKFQif5b?jY$@A7DWz1C$q@@R!8+#U@k%Bq z`0=se`q$otm{a|!p_0u~v`}Mt4XGx>Jt1%iRFfftIXelY=y0^= zq)%B{1EnXGm7YKo?P0NEDiWEBP=GU3?M4g5GU)^BB~oY32M_^C%;!Xduof$;1GDmYz!S<>j*= z_+EKA0t8`T#8XnTtRKLdps}7x*20^gEZIEM!h6<(wY*_+5WxWI9rR}f*$`BL|1yp9 z$a{kd-Q^fCu}5!f2f1i`iu}MXGanwv{8X9bS516OnP$M0b2QQK+jz7BX16t~fYbXC z{z~qO@>OW#eih{?D8#5ra-Qh#`?iwoY~UQ#RaKTR>(@hjV~Z5gWf-OX$*L+_*}H&J zuGVfGv|9`xNS{`f9U27A!MNP;{+V!VO=Gp!+AXbdKXUz8R~-HhZs#OPdJrLD{#=subwCZ|L zhgO#vz-m!PmZQ6C%1EkJBM3EHkL)8g^ql>+hRpI4Ous|&{sD$(C7OMQ9tb~)RGWcU zZPZpaR*J8FEjgRFjt6SX=j{sbwzGO6b+V3p#4c8uUaTwc_gAyCuCC^6UCm_gJEc=5 zg*M+QI{*v9SeM$>^D~n|AJ;2_m#DAd=#9#BZ+*$8@FVr*{K)Y<5E!m(Nu5_373huz z8V{SHO7wCAS;kh>tmL7i+im^+u8nfKiQP^{Tu))ePw`?L|rO5|yH&5URtX0&@fDRAqim1&w5->S3M|54&-E zQcdPdPuSybcnlHg{WZr_rIu(UCn!)W;R)@W8cxZLWlGzVoP*uv5}A$=(v%3iF1BAI zJqDZP2sWL?^2Jl34gYCp&0CxgF`PUQ&=hciWAJoH;Vc@~Se6q}G^?@fkP+#LK&WaI zatn=ga|zed+8qY!*+_n4C&R%@I9esFYr4wTZm#n@wgJLoyZ55Q+X$t33kNvMevJTL z<8&*uh_%MdS~F|V*EVa>%o|gylWxU>wTXAha_P(~xWP6YUXg_KY9S$wB%kCn42S$2 zu}}=A0}8?eFpt!^g$9Z+lM$Y9gq1l&{Y`YaEc7CkZvv$hP7gPcl_3QmG{K03)8r;{ zU>xIvFt{~SwSI}iP~6#6R?Ub+R{&gSAo|yXKgW#M&Dq@bDG_{Jf$jYXBc%k2Uo>=o zM4|ftEHqL>XQ#T^W^r@L&{m$T*@2QSuo>xzO7}#X{dvIBQ!z3RxKS3ROUzDf1N(^9r6i(Z_-oj5uZ^costx#RSVr#D;5+7%{f^@Gq9%qYDw z02QL_^!f=})l!xM-CZr^5vUTMC2OSU;5-k@JQw<$S4GH;_00~nhWFCJDyV8JSrX-% zw1TocP4Bgme+I1Hz;Mw=_sGj=|GW1}#6r=mdu1L{Pqvo7VflODK8Z-I3H06latyX8 z9os-V!28xlCik$rDk{`v`6K0L?g9&b_oB6!Q_wzv;qjwgD~9GoLRuqs2N#~gDeW0J z*G8633=GR3Is}`C1&!CIamf$JOJK0{gK{cb+M=C&o=Ufs--l|UpiU3U=g|y+D~Sk4 zPEHwA*j7GmV?RfCbdbDVF6bb80Mw|X>`}3}H=~ff8TK*({lXp&!<AIUqLB00_Js+?a*siI?2~iBE7R@@6-f%28ufhcvtarXDnH{RJRLE zk;^ori$>knMQ(nFG65AH|)E7~3O(Zeun0=WO#;qZv=ky?*xvfUn)0SAI*+iXJ~ zMXw&9Q;*6iSQv*qChyKzz#WtV>5g&5U_JE+bkahG#kk^y$gm-}+ptLE;mA71Rmy>z zUloI%bH9_!dWQFrGAb4qmK?JpDSRt0OmLCR9GtXYg5m3M}{0J_9a>O7bKit|} z97914fDw|C5ejM?b(fHyS^_i!>$MFv(^JC$4XoHUG(0_(xAB2BTVP|)t9&QW!V0gE zaEK~VbCl_G%nO(Zum~7|E0NkL5LO1jx(LA9Ex@*dV0!{h)X1pCL1uHyY$WSIox^w! z@mmbcAPfb^reMYpe&(dWnFZw#;11DMp}I%d0zH49b5&-UXB5 z>I?Ey^DBKns{}Z*JbWjG=DjFqm9fJ>N`O^Qi8SM3j_?RESI|q{WfQTBKI<;;fK(QA zmoJEQRKJJp7h`us3Cn|H9S?>-zlSVChkD4JkjcEBvH%w9pqH>lZKpq8lJAPS)azwA zR*W5=j$QvHT97WEfM`ebl1;@dYTZlLMe5yNvSnH4)*&pNlrXkz;$ZNELo{=#pqETU zBTn~{7fShqtq`af1|tmlKhe2Yq(6EUv48B%;!H%ZzSJbvvXt00ur{i;kws?Mt#*y&aI z6IieQnp{=#G&{4STrg=gR~)YL&uj9V7J==Uj;vhnPPgVEveFJ}#ekv#hIJx3JrKB$ zBtpax${C|!^!w}BOd+814cP^e5o6wv83vjY`?egcZ$p)(g>TE)YWuVSfg>^(gf-OM zZzsWwTWCP>>rxc?j*O1`iDiK&WKGzCtgdh$gficeW#X>iHfQZ^bN1XeXYXxu{<&Qa zz4DGMReB&>S_nJRIvyekRsBO2O}`+MsOByiR{G4Z`I%4|=q!Xboacm@HHxnha=>0> z!fvMSGW5lr5VJ@Zu;W@xJ=~ zHk!LMef6IFz`R_D${~l2WZqA)l~o*ddS6zG2xL*e_hsL(oj)_1TgQKZb%3uglnb{Z zTe9f&L{%kX=Mm(?6tOQgBxdPk4KxwwrHggK#@9C;tgvG?Ia>4t=-DfW1KUEL4`tOL zdVB{Wt%zQlpPo&^;oP~lw2P*E2m@sU$-c6?ak%i|;SA^kZ32(%$y-b#m5D=Q+r0$`E-UntXJKtduc>CmS*r z@~JkjQ|1>A#KZV${0DhhEk3p3X@-Y2d?l;k7)yLzE1#ccf!+TO9jtxl{=ab3>p4x|Mzw}XE2BSay+l|$Ayy_ztZ)W5C+PhI4E^sNczzHZ zd$|C9Cfp%TS#yn_24Jh4_X5yZ?WYk0Z&4VO*c*g&4eu+tK#IVkVX*DSECT9hu@LY1 zRC72SQLE{};WDwQ&PjCfB2!H+#3r_jQ*4Q!us<_DD04k$(sU3&@Wj&L((~XA-EC|D zhM1=`)6Oaxv~Ft=Yn*Nl;{NmKL8{Lqm1drCO5i}}GpaN~-Wi+4djQNt7-sr7a2NF) zA*%(nEyJueTHBsDnh&WwKyydP$HS&F8?J-i=lYeQ3L|A=#@F^buKhD?gQl{jSjWoN zqP*3q7Up0bX2cOLJJYWZf(vZX1<*>i60zK2MP`}j@lz=4QqIW;5%eu2bEvT~q3n&ts#5SrrLAI?B5Kd^|fNdSDiNN6$nd%wToAw6B8w0Lo7K-)(l$d+Dwwc#?-r$ z;1v0T)&MERFM4Ul36a8EC@g8VJY|Aaz6w@yGGzG}HJmJKMQCic&Z+lg2+$_VnT!*o zbM(t(Sv3%w%*A=Gl$(M%b&Q5g(OZYSDRPbYi{6`xJ$Nq7nhHLTQ2{@4>FQM30BdKR zY1sUqqxYxD+WsjHA3E;93G+`{GEFwE<>%Ic2Ilm7iGv?Z>H?`fympz(lrmjc)^WP* z9n>3Zr_0KLb^pS2aBzvrRhOk|W!) z!EoOU*|N0XU_iy%VptN&7Q^HjaD8p|<+y)3DYu4gc5I`= zGi7`QJK+}vc6Pxd0i|Zcw@~TN<$EYN>T~%e9!+M+X?XlJOD=pYAa-nzXzAvXnTC~l zob`oY_vS<(jtTvg2I0k@d!1~5jo4`wE4GCSXUhkx1p0hB?&2BNOf>P&pyeDyF+NwR z(;TSI9SBLpX7Va+or4YURl55NXptQ>=?jR^kF??o954MvadRO_MVh+pT!_#S%ASjm zx?Gww7b9?l4$qZs!qzx8Uac=>Vo-t3Ut%YIiAH=W+mzYh*Xko8aHI$JvLe#W4Rq>D zSv5@OMMcx9c~}bS&XegS1C`qLXEm8aN9G|GFMpnV;HHIGhs;JD-DSIgT-PSg$UrP`7LJQ$Mo#C@YasBZ60$J4fz%> zfC04QTTIvi^v}1lnQ=XfMxT_pB)k-2Hk3x4L?FZbrLr<-ymK#Z4_{j<`&L-4dEwn7 zwgxA3V)IF6%iir##zzpqpJ~A|*&ys=ZQFFBScRQyzDI=`BZgv&T#CA$m#NfrIZoh* z)B5G|L;I0RJ+Q?q8`%0;2bi!GYn|5>tf5KY$?h@Prx=)GW%3h;AJHpt-Z_j$=40Hv zv@l=Rq<2@y(a!e{U{IE52)hSU(i}}?SE5R&&6To#O!jG}g)wee76W7>+l%yZ9Q_7CCt+}0x9)yYi&bQ zTxO0=*i)L9d&rN++(kJ*$Zmns>o3@)UF&4`x&^=M(#2bW0mT86&he8{mTfofq8aOC zDZc@&V9de@;H-SEZlNwS)KAUiK8e%R@`I=;ZLc_`%#|7&UKn&EeubB{MiFY8w(~E{*nv<#NHo3rW-g3MGnkIRHvC-J|g!=@O z$yFfVs^r)>9Kv8D+4896&}3nZ!&T1D3Sh|Q)3yRxu8dz^A!UsJZJ^Z8G5|hn+h?OEslUPG_cE}19 zX6xpm5gOT?$w~eULkPAWDTrU`vqQ!w{R`=Hjf8I?L3Rexj2*IJyBr2#FP&<%*6s(R zqZ?5rT3@DE$LtD60wri5b_PSyKUzSIUbwzeai_c|?EIhL7CwsJJLUb|a{fR9qYNhT zVD&YGCmYKK&I0UA_^5OnSSAc>9s^D1QVIr1S?9Hya6Ua`A8B$Bz!Wlf$x2Df86RIE z*shWaLd@a(be&Klk}izEZr}H+a#QkdS-sTpVT|D%kYV>+*TjX|-Lh3n zyI&S@f2W4?(INhD5DsJvmieW8wA#+Z>I%O-GMy7Cd>p|FF^AE?-LfaXFw=UEOpnN8 zG7$2`v}6yQ8d&xB$ja6f-O^YqQxAcEF5(z~KYaz+U@6bmH95U$WizIgW-YNx;3fgW zB$f@uSLMo5&R)26zoB(|G1*trg}sPMu@A#wgLwG1>zFu4`!z3`=&T*~gH66pDT(AGZ6+$Z0Pp08z-zaxTXEg@sS z?CSZJVJ=sBKHa#${hH{(D|Zk6ghR;t?FR?n(ail=mK}2oO*8{49p8&Nyk8D8vPO6p z4Jt(+9guNJOLf;_nues_<^*W#0r-b^(Vb`_j%Z^ z9p06Z<%M}0DwzhzEI2F^WAzb!(9zN++IJYnbbq>z$DM<&ppu3Lg2b$gTwg<@C0_BU z!#%0jXZ`;q$nBFk3xvzw#qbf&7cP&XpUa-g*A z7g;ZQhs`o83Je`x`$eWC*$7*m9BkE#O!8}V*RQh1?Ia}*L;TUNvU;`K$biSZ7O2iP zjOe#Z!1=x|Pa!yE@qnVnM8o~YplQJ>>EYpS|xS0n9vb6jvo)ECor{pWRK|kOW zO5^ewotBMlzh8pQitIq;TQ-Wd?OP10{8yx}TBH#{X##nO~^Q-|aNLmZa|G zF9?^r`51DZK8Ezh42Y(8&dLf#_AtMOEP=pT8J%>&-_QS9O^%`1-{9%F$QrV-F@6}$ zXe_#rK1G~p>#8EIsP;K{b7oSHb6B#*5}lLpR+!F6F7$c9-}$=FFY?oGM+R@XF9ueY zTKJ~bu=BEf)hn7u%u@3&yTveM?2kOgIzq)$W+-hvFTY62?$5n=+ChW?7(8XX7jRs6 zjrLuTX|Br-Rbgh5`*#Fj{6Q^#mmgKN>(HS9x@CB465`=uhRx-05MmCXW53Jl@LR_G zA@7Xww`%b}x>eNa59x!SBK)GP)@(3Su>@p1K$8u0f051CgF3=ms6{f#I_41SeNmQo z&tw$aY}$OqTX%P<^7C{d$9l3hv;4yLTyB%1br)szm^Dnn!fwQ-gby56forbnpE6Bk zQKvuUm<)einOg1wy2;@nyBO5ZZ80eC$gLcW=QlL`Gz)J8x5{6-7!+a7D1KfeuB2Bk z$!76>yaT~~GR&Y9Ea={6Ybe@tNmg$%#1=Sq!b4XnRvsXPXkF3MlJBI3S_?JJQ+j;0 zW`XDc(VRg||B}tp&*+RI`@th1mwv|ci!pwN8L{rPa)P0l{P^&^hUDAp&tXF-9Z=>m zIG~HU!bCU!q9cFFw9<}1fy)q6^PUuSwZbkCkP`pf1}LHGBraN2;!-* z*iiU6Jzos!@48}8=;cr=Q%?y0Cq0?BR9^5hGv4qEGYkhmk6^^Ajd%~umP)U!thkM=y`XVOP#JDqR2~`R}iANfZPwj@*6?b$ z7{i9qv+1gGtgSRyy=%>HPM}U#WhZ>aWX4ta#K-BHkc)6R7#BFYyM_L5*HGYtYM-cP z1`VU-iW*97Yp7^yc@3v|fNXQ&>s5Wcs$8+p3!d$*vK=*6iCTJ+2Fw2j;xEKk4b?b|@*bhBX4C<$F*@n^_L#5&N^>#zuQEjR%gxc~pr}-rkTe-l} zkLJRMHq3jqMLF6#A2QcbDtyXi5KWV+S@}ZUT)&R?*FVP@^S`8eG|nDNm`+TcR~Q4M z{G3vWI3n(=)M#u2qe4~1h`@G~4rHsEh$ZY1s;a~085647**lnK#)4t=T^H4b`jk*( zJ6_bCThd%=?_;e>>DI>|bAN{hKyWk-*PvJjWau3}F2I5p3?LjdtWxpETt=P4RJZ?; z=oC$~)c;1bB{d6INg4lU7rgzO-Dc_50!`WV-zgWhfc-!0@Ua`^G%F}zqK=kQ+7qrS z{Etj5)l9hm|7BvGW+LkUUnX|^f5yb3NL8WZVNE{VX=BK3MEJPI@=Nu972*Gl=ow8k z?7w#}&x@8Z`lIN7=rZx}K2g~y)wERpFrIEnR#rBvb*+uP-O?%{*nLEly6IO!_;jrt z?TLc+$sg}lNsU(P=p0_G^;*j-Ee=2Qh64(SeIx8`)20SiP(-FfFPSTcQJn*#O6Bjh zvSOE$v(-q&Iu3uKFjsL-3fnJJXqsEq!Cq;bTU82owpMNQ(U#!aBNqE$0%y-xVQ^2l29C{IKkDq+tvZR!*d@=kMcLMCbVG`KOwLV}V9elm99~8; zUAw;8+AKmq&OB2k1b>R1wwbC~*pji_oLy8hRy~=#O;==CYY@gaf}55SsujHk45wkS zDqoDGwj~k!HHt=+R1ZEpnz5ov;3q5au{|9wkEaf%H?wtCsGX%j$kO5Wcp_qKjLygU z%S91v?JxHU-BC(4%kb)KSX6elIaa5!>^SLhoW|WZ?oC{ugG6qibH&PuxCEH-DrKrBx!8EUoH9ZFRt?b}NG$ zxirM(`cVi)u?G=2@I`4AD|XVd(rPU}rP9BQDvQVDGHOnl!r|N_I3C~?@;oOX>G-C4 zyt)*AnLEf_K8&V~fzkOiO^-ome)E#0R+cc8NM9s&ZjA@H=`fQB^IXp}#Pn zxI@=b0|Sbai%d=5Mn6D%64i^wv0=2mr;0DN+wNlCe4~Fbhv7%&i#W#O5%k1UvUVfw zVzxqD_+n!Qu5Q4!sdZDTXoc(AnYb5%7PI8&3vGVI=lY2HOL*AKBvq>XFx$4#u02Fa zX+MlDYwUk+nWWC?xPRCjTTRwSv~k$adYc24uJsU%QLd6f!va%Xwf0O#?+{_0uf zRYiOad}Dc);deUmH_5dzY6lGLqSuqvGYF-_=f@lQgRQkU#tf^<5Dybe!f#7^Q$$*C08Fhbw=fCR6jYN_h( z#Q&h#GgDPH#P`fiRj(L-q5D&+Qj3ZzG)TJIS5$X|WovOfOqmr`m3Vu6gMWStF*Vq2 zepgXFh5;*GNj-p=^Jgll76>VuUI|0Cj#gJvsgaj?$<;rwMdvE1ZW#V{l~t1K&=>~e z)10`lDgMM9A5mGo<C~uRU38msG>$D{G&%yXnkZ}b>y0z zMy{%=20E%yRWP!S`d3xW;qu9^s-C-jk-O4Vg|IJq4!c9>NNx1}n`x?KydHK;=~n&B zL40n8J7oRLe}>VNH1&ad2%|$ONXvuhvWnGI#jwAb3s+-GIffhZ`KN_)4=slDHjr@B zXJR$g60O)*O?3)e?&TIPr@GZujnj30lVjqh7iU5ztbcAv4w?kc@lQ*|`Zn6GQ9W)TM%4ZD!3 zbhV~xC_eMmt)(IbqM(}9Rv*F7xvVx0efT>C>i+7NdAUGXs{gj}&6?NBah8Dgb=1As zGksD=4X83hcSTr`N#J)qw+b;o=SIL#pwhw%#`DNs zA4#hlsCwZAyy9@`dIR;gv5@HPhM2CIG`FFuZtNXLyX~Z_k@C1Na><5#$-o*koVJft zrGeO?5%B+{fsIrXi0g_*>TX1;Uuy*6olZ>~tNImpk}k!Ew1c=ZKGiq$8NTiWd}Sk( zK54A#8Apau=6+F*er~Mp?|OhsS*4sG1u7Y0jj(@32eU30y&vwVs~=pG@{dhNf88f}wn9XJuw8Gf$5;U+BSSU-RhPU8-D6 zfm7llKe1AlZKBFI_5&B&K&|OnpPFyEQZfE`3x~TAE;)aFgC^Of`!rFXCi{UWY@l6w zw82)QVfv_6Q`J^1rVpB`Y7tAAqf}{rOY@qldY%1^a>&^wEk8HKq5m0o`4pR>I?dDz zE+5x|i5iZr`?O}N7R==>&D1OS!Gb1tt1&TtewR$P%j~-wvapm&H&-2c`tvRaw!zulGE@1yP zSL)sqn0mMt&TvM9QhT9=s_ia@NYh(D%)h3cEilQJ(WMqx+LluFmgt0KL@iZH!oPM{ z|MF)3Fy2y4jPHljM>umfHVmiF_sdGRJA0mLsh-BV;p~KLAWghzFXXybYM5Bhzf)4# z_Aq{a55&)Z!x;JmtJy|-<9F&F6=`ke#{FL(xM6EZPxgg{+woqwUpLa*_p0$>1=D$e zw^GU0s&d%8X`I+d&0AvyS?(lWYOQ*Q9nguDbfC5B7Pi?*w75?_9+vMAn0B8U7Lz}f zMEbXn@rkqziMq1=1^iAXqilUq79r^ zIW(vZR2_cOq78;-0sYoSB|FaJh#z%Ns1Og$u+$62Zhz0>g?l#246y>gQAWKVgdpvw zkq@e8${k>4@WBf(1LJ(=r<@w}8UDgR4{NJBA(-j$wpbG{&_q0pL&NnCF0Nczq5M2H zCe1UtVt=G+U=vBz+o?$rKXWEj)KS{fPSxdm9_>^aJj%3JeZ^Uyx4n8@I7ry~lDnf? z8Z(wFx5`;rGnt7sw7a7kVVoLn-{I@q2`1{NG`5ra8j;2ic7`=^mfq>C9>-%_XY|o8 zbQO>C6LjHyx_aE1=1c#0gyU8??irBP1&hi78r21k!QW|l7xfL6kvAVwDG|r)68IX& z)Q8l);Uhk09{w3lCm&Kz$Lh>fEVkxlMoSGP>$)gk8WA55%nl??WfcoIQ#wdDfJ+J0^{scSY78($*0vL5V@D0RVkAdVgJ)GXe!o(Cc8)v? z`!}0h&#C7Ptlh6Zr)nmAV)rBVM%u+wTmglD&ABdDJ3AQp#&aqPKhG5PJeskHV>~LC z8D|$qUvZqEwONnu1bXFpRXgR&KqFH0`ImFDuFt1Kaf#nc%b!o>t}#9>^57hx|T%kFdQX!+n`AKnlyv`+_BH zgk}O-Tr;Rc6LA8!{zcWL>}}!#W{jX!R}i1xw!4bPdD4^J)rZFMFKAD9RhysTJyey- zIowVtq0D()hyRo#n^Q0Y94I~1Lp{hvruR@a`MI@+y1VoLRMc78{zdTCQ0mrGRY|)g zDj!U9hYE8xcLO%M&yy8q#CfM5EJ1b3DVNBjf}Sd&)MVXDdXKFCC|sKVyC+1L=((4a zCuy!zJou!048vUGMPM^rg6|oZqzx~rq*~uQI+FwGy6EMr7Au9s#*fCL)q8VQ^xrp=)Kpl(cDaP zUQ_jD{tv6XDIFRhS^9M~Ky0H4uOrh->t9#tcB*Pgn4tbT&pUO#@`idb;|5D82j8&U zPnhGJq_FbWf-@_@w#$Jatj{&1To7cqh9m|-eqY0-$_7Dx)ez@LKQ)~l8e&`g8C*9i z3j*1YuQVh&h|tWNAmeX>WZeY$b2T&MY%g?O`!&R2Izxk|YEbi_%7$u4ToB}!@0n1g zAjlpK31)GPh6GnOM?;c=N@Z(^)2}XS|CVaj>@rJG(XS)f&M4gIGB>i+Bkvdu#YgX7NYu|!>GKk8&t(rz>YE8}hwlTg^MbEsg?rrri;^=Moi%#-52NM?j zg|}ja83RsT=U16Z)77_C?TEd4#3Rh{zB}Jhb>%%%<}eff7=dygS1(T_yN~A;gU5MX z*79PINZ@R?AvEiK_`b8&F`?0P@_p78p4H;5#GJ=;{aR-oU)vt1d&K2p`f^6f%&<0BkQ{YYsU>V>cz4O_`Ssg)XMuG6i@A|Ht4 zSWoLSR5Q3wLo;Cu9H4rcP+~vP3z_Q8jNOcl(CkP)vPm`bI0?xJiHcyr0etf)0MVD- zY6k(}J2l`XF2aEO6k*&!0Ju#JD>4XxJ}@kI5uiM~Obz@BauE>@MCN%KV(y_g`m6il zz**W~CAMA8CJaKV^0x*F08kN}8Dj3&jg~b-Ot&;z@_!E!v1ovf{xS3Idiy1`kv{Sm@3UR87leZsw-@bpk6RTSE9~ z>z+X{ad-3Y;MT#|<_uCVI&A9ra{)f~P~2eE^0vQVPah6elZ}F{l<=`?S;;>M7wRhg zPDdDyxSML_*nCjmk5y8|z1&tFME}`l(1Mt4m;MiudEsMhK!2b*Ltv2XqbG+T1mhM0 z3@daze1qSP!Dl&-4uO|)A0=j~Hl=QXN^fVWcf=Svlcj2wE&dzTEGR!SxB3UFMXlclaz2Kb4X6FA8L+PLyZ!-c=iLt4wk>wZ3{O0P?@uil zs_qFZDBv+WM^}cb$~Em%6J8nF1~PhIeb7R*=4_@75s=5vE+JGeh7?*#f zW5cy?vg`=hN2?eEK?m1HtEANY9XzatGpsr;;d>2| z4ycv>J@v+hdB)ZsEE>Ff+{;+z1eQ3hbSlBqk9pRZ59gxHKN&d{+LsosHcFR(c%lH! z&Q@veOfKTGw|{5t=%lk0IR=_PlNyhKXX3Jd(>iwyHttt#3;i-%=);2I^e#Il{!MXu zY`BBQa<6)~)>X|j^K0*H_$y!680O#EFre7ZW{Gj7$Yk#rdtDPK+OYgh)5qZyZ#dl; zry9`pajHa%|MCOzvv>|U^RQUFyPns-2(o?`WoYzxxPm?*L8?_m5kKunl{5133x1@$ za1Z=L>KY<(uTD_>yR`8W)#oVk-Na%=!Y8SoQG<43Y@qSrc;7)EPEw6g>fl^RKrU^a zgx(oWmnNyhVWTt)_wp_?DQ+E?v0UaL2HIs$Q(;;tel=x^>XNeKXJj`F;emvo3}5@( z#DGQ`fYfUIWoDReH zLJX`iPF-i1AAGxH#B`OAu|cDT2ATkZe)e>CI_z-~%U^AXb;f2|6FO}-Psf3<0!KhD zt3F|Q4{60ayK3b8XVp{Q()%#uN+8!o?+QZp6+k zMud?8*sPR{yL;_VNCCmRGsqITe_+g~z}akvz#&t&oItkY1~*N`bnur}Z z|C?}bQhD=F+m~_4gd7k^l?3q$qQ^BHxXpYhs8HV8*|wj?v$mO`fr~_|(8G#tX4C4I zc@3TT;dFd& z+RIg6Lwm{kf?L04uK$BCC5hmm?Pl|K-nQzLzf=Pp4;1T=Cn?#ROhmhyv+E@93!bpu zY#C$gBTBv>cXrCf9tl^nwEJwOpcL}#;=rj>+-U&Im$TiB>RReV8HACY{XX{DU~j== zqgQf&35-q%p^yo?3K+elz|uH;huO4)U6=?ghRa*}m;;5_-^~%ySA|d(h$R_$Tf?(< znBlUGr#cLvoQ-=qct!ONu%|mj-E~p_TcY;JC6F*pNl`e9_YGcKEF4sD?rZNex==3K zfzL^+xoU*fahU~7dA<-!~04_H?#$TVY{mq=iH(qQE|kKxEW zIM^g8sw(y7tj#WS6=JH;&s5rN-UGAUe>YaPS9m7xHb2*co$W62gReMw#RId?Vn;mEdgoHCSvl4V;7ukxwA=0A7iK;Ay#k%nPN>Ci*x0G|v<~FcO%W+dm9KY$}`ut|w+|E{UIqn^si!0V{`uja5$ZBKVR$Q0V zPj?NU?v8ls9W{^Zttu9Z(yjVF99$NHXTEFp_6$B|R;pO}Ld!gP;Hh6ldG#{6MADUm zkE3vQ@sQ&v! zWZ9eit-o4j{*wRJqh99G@#l8?II3;`(T^N7TjKv(ZodS*@u*PEVKTg|h6uLC4yHI| zi5=nh&zg4yW;l zmuG!yW_fKvuBZ7q^KPSE`I_oyWxV>`Z5M0IoBNcN zz#1j)o-4Bw&lH*up<-PuM5lCue<`$gYc~AC40AiC0o#_NjnhV?j3hE}NtqK~8ouX& zFR+r=z-!W+Y&t_oqnA4vUA%Rtm=9hs$JhA4&U-zTcTe<}=99Y5WE`{0M2)_b$tWnt zRVL#~Ij%Apx65&r$yjpB&tzceU7_ssp z^y0Rc&5k_gn%T8NZ7$PwF7LT!-co(1D87y-?>dG%FoD4(*i^Nj?<+BT3@_h={!ri; zx&&C+<+Lq&JLa!9T+kCR0D}k-6gUDtUt+e`U-kswG>_;;(JemxJx-yP+~Og(%p~Lc zTb|>$%ukJ0D;LS=MHORJgwHI;k;HRs4ouOHW>j3s@6v}wSm(s`^@6E3w~ckepNq{0U9<9otEM$6Ji{n9gcoW!qye)s|E@nc^RrrP@cS9iQ^6+EP(Du4;GZ z%5ha2JyE|LTa5t@I$Y1KpU^Y{)0~&~xc+PEM)>!l)M@Q>Ei%w&EAY$2x46YG_!3ic z%ai_#`HWseDW~{p(dseo^eZ~N4|({n=Cb4u<(;u0t&&T1{CG8yA;@ZC<@eO>t}U*}T7q}dby_{Uj*3$38B`|& z6K#wHw{d%edRN^hLw|hrFsrft5Jm8&A=HMu2T&~|e>o2cpio>^aNVHs3bwp0F(H7x zQGStb!oCN@TT7zF0fl%gm-q^ff>(6kbKx&D3W#2$*sBiF04W!$u&dta z?MZTBiUcrRS9xkMMd~l`ieR!Z8U8SsCK?x0IJP?V45>J;x*&7q_I19Ni0oOvF3U!k z!pP^Mqx^n#ibr;XYS2h*rp%=v!XnpF>!5kpaI{hq%)TA-E zv!_=risp4Sk%z;4s3tALZxey_01#^ILL^!yce^S@qGm-_#%u?@k%3wEcXorZMfj;QZCE|*0i^i5Q+C*%yy9YPl52?f z&*zbiCL2mtMo776F}HG4q;YLA4|G#+!7l?xUXz%yMuIyRt<{xr5*lbGYal6OGrt}1y(amTroSV&v^*f&B%?Z2yugW6$BOOy$AlrUTF%l(! zWmV^^2X?dh7Hm*3c4Mlx%8-Ti+WbNby6nUf%Fni>e+KzS!JT5LXYE2s zWm;=ZvvRSjWgoqPC?$p(IU*c5z#5fdrP&P~dj)c0=-t443FSJ%DedVRs`C6;dJ1*; zhgfpjl()S zb+~h99Mk_{8P5vC7o^3VscF3|$pg-1*lklj8Csb(2d&-nPG=gSS6eCe78bCYYn7*I z9Q~?SKB)5DvMbH4d_tkuy3$=n!B)P|l_uR?uvK&b(_z(~A8A^jQY1<5D(b#h%&B$G z-vcbFto}vnGS9~%^j3bl8x4;Kv}GlTnZ^yBl;wW*w8zu3RqdMvVfqy`W)t zI$rO>EAm3EtpgjxJ*Hbfr^&<70M{$)dQh8|d20nmTdUWJyUDQjq{_n{!}W^1sO*Eo zK3H@&M|ngKN`Z;J*aKF1m8VHh=uSV%qkB=Zk%zsU7FzpZXRYdDIjFB;J)XKd!VWw; zo}$*p!&b>k7MN$^=_#Y|MIO@IwvcmsQ&%HHK@UFenR;N(OUM-7ukas~?E`!dJ*n^U z)Vi0N>k;{m564jBM+;4>&>N=PebkPh=|h|U+K&f*Oua{@9YT!-@auY3S~-p^0y>W5CM_$AM_e)OKMpXTm^&}H)g zyvAY99YF6J>1(*hAZpDA22y+QiU!g!C=uTJj`8+TsOXifqBWuwl^3Z+_HP2>RE*tS zS=a0VR4aV*_6|d&Amv0UI9@-}!m(w?JD~W_Aj*r_EH%Oxt1KlsoFn}2!L+`_Og5R`sS?&E2Nt;rTIiZ=LTY zLGSJc1IIdV39h!=R~B{H6@a>wKZL^mT{hj@sZ7vO%i_>EB9A`9lkqhDQmghch-!n<+PUmt?+WIFYpFxcZ}CWeqU#!dZ-PegrgfAbdp*Xb z4TJDLPzXrjC3r^0e0Zr3^Q%k)T}#@#v_{}<^SXR9i9(Hn_8gK*&0728k<{H@@ zxcw`1QeVJ#UZKVz3p%>A2O#Z)Y=}A+aLfi8)LyaQfugDi+w1KlFg`%}@TmYz3$lY{ zZJ>6D^x_7ZTr;neOB)VuAV@Tw*NGoYqr}L#&Ms{%@GD-v!aIRQJ#k!=M%|JX`vb6g z3ELY?uq3YVX*}2Q!=K>U?T63dS;|oP7aZw_KdT@Y9II&t@{#^3wMtI8%T+G^YmkdF zRD3t^ESmMl{`tF8!GADx9PH;`aC1K#2HY5U>Lc#9)5p){fg7o*PiOrgl!Fuq&TNIJ3vw$q_7mNKW+squcG9F-F~JqLSJJ;ar9Q2+o^JQ zmo^UUW+1$$mekFK|C%-he6)KztIAJzVDVF#Pj96S#p@apqrca$XHOW0|eB#uJnx^DU5rve^C=Pv%?(T9M!7zaHiKTgT^~2qP+xy`j zz)}@Q@ygezce09g3fPjW!qb4G{qUo}Qt_2su)qH#V6hQOE?8=`!V7@ARKW0WARmLb zQ#(ufdkOwp`uW=m+_M7qPe&o3X-CaVy`1(O2i?~K`%*7{dY%spe!ok57~(vXk2FVxj{-||^~dr~-TBTQdNlSDf=MHI5+s&E;bc7b@Wax{wXiX- z&!WyXmA_lyiLJSGKVQnCW=39LuCkZr8zp`D>AhIU7{}>*F{@a}7xz+Q<6u9gH_>_B z=*N%0NwMPYdJ~fnxL>_VJtJ=Pb8@pAF-q^C@OF01Ba8pFkLnHy9pKopjd-yd@S|`9 zN?i2gk0oac*N0r}jlvCp#iWLE(LP#iTpYkNvT2&$pU-8};@HB0E^Pp$C%yH^AB#E_ z{>UfiRr_f|$n-%jZ7AdgAgKb=*Bzii#>GKAu+qeff^#JwLXYrK-bV~2Y z*&bSqfmYl>nyW{1=0U7y-G9XLg7>L;@?b!*7YE0= zw2^SvB03q1D9pf8KNU{(Ca3U*3V1WHj9rvm?2mu=ZRPz})7}6>y3T{+JS|RQDJwZV z!KqYRAQ06koB=GRN#XPg_&s1TX-fVHu=HvQe*i2^Lg7=u9sRI@ssTmD`#c1J(aq08 zGhqJ&aP^B_Lsf)5fu(m1_l(P@8akT#tPin7s?Xu9kEl*^$`r?1B_=$U^!Tg<_x$m5 zrjAcc(l&!H4P#y+`Z6!`Ab3*w6B6gm$j37bn>J(oEbSbg1MoaIVfMU)#EA)4fTfI8 zoO6@r%$t~`X}7_bLBgO}NmFMgBG&2i`X&TTbt3g9G<{wIY%X|GIi?_hxQJkC;$*kh z9ef${O`I}*&iIK*33J@z#`OoU8h9gk^(m@jO#zg?d<0ymQk$BXlrUL5;yDF8sgz1K zVdl)~3F8xOS-O&O(J3tGpP0%GPSYcLeb189^l(5;Tp5FanwBxcNp0T@{^2aOteOvO z_e?XmMFAG8HNLL^%OcUdvVa;#PD*syL-OSaDG4hak1~xf^FZT3LqNSj zF`%lTj~{huhd^6F>p-hOi$QZiV?ez@oj}o`P*4!)<}_aV8EsGQHru7O0@Vdo1KpYB z(yoF&1APcO2FeEQ1Z@Jn1WExt37QES3+fN*35o{Q2ZeyDfHcq#GZ7!?Ea*7s-=LkK zEufcYx}vma@vs1t02&3V3>pB62lW8OaQ^4i2uu3KpVMgLSQ6iVo`zQ$GY`q2EPHXr zd3w~ypU1TeX<$gme3#vkh%uC+5Ah@w!aSo7EByi!nS~sEfm&5r_?Sy;2kB#+_Z2nb zCofkhCs^cj8&nRrvJ^_>BrUvjX1b!+hu~>RD68v!{$-=+gilufzku97zZWXt#;^lYca(pz<^Ji7sep5U`}p}k3*65Sf9c5i ziEpSW#vq%&p$=90Kkc$dC~w>K=!b8pCM1=MV5ItU{~|io;5I6-{9Ss+F|I{$kx#8H zO2Fi}Z)wk-wn>vuFz z+yTW@w`SH-mpuS@3F;Ng3;yH9SmzqWnZ?w*#mZ&Qi*1A(1@WBmiIWrD35k>3Qxhj8 zEO4I&U$nH5!>^&)mH>tUR^tBGs84v4XPr)<3tXA#Dh=}9YxD#!%BM=)>N;hjWuLoF z9b8!{FmmvA60T^ITfIf@p~XPbX5vv{q?7f>k|l+QLmuOYJ7H8MZA8f@`Y^A$L7hWp zFL!#Zg>WU$aa?eNT18|6N?-gIT< Nji3dfp`g~F{{gLEjLZN4 From 6f8403efc14234dfdbaa7250a2c4cdb1960f32fd Mon Sep 17 00:00:00 2001 From: karim-en Date: Thu, 18 Jan 2024 17:36:42 +0000 Subject: [PATCH 17/22] Cleanup `ExecutionBlockProof` --- .../src/execution_block_proof.rs | 42 +++++++++---------- 1 file changed, 19 insertions(+), 23 deletions(-) diff --git a/eth2near/eth_rpc_client/src/execution_block_proof.rs b/eth2near/eth_rpc_client/src/execution_block_proof.rs index 4098fd34..eb04f850 100644 --- a/eth2near/eth_rpc_client/src/execution_block_proof.rs +++ b/eth2near/eth_rpc_client/src/execution_block_proof.rs @@ -1,13 +1,12 @@ use crate::beacon_block_body_merkle_tree::{BeaconBlockBodyMerkleTree, ExecutionPayloadMerkleTree}; use crate::errors::{MerkleTreeError, MissExecutionPayload}; +use eth2_utility::consensus::ProofSize; use ethereum_hashing; use ethereum_types::H256; use std::error::Error; use std::fmt; use std::fmt::Display; -use eth_types::eth2::Epoch; use types::{BeaconBlockBody, ExecutionPayload, ForkName, MainnetEthSpec}; -use eth2_utility::consensus::NetworkConfig; /// `ExecutionBlockProof` contains a `block_hash` (execution block) and /// a proof of its inclusion in the `BeaconBlockBody` tree hash. @@ -27,20 +26,16 @@ impl ExecutionBlockProof { pub const L1_BEACON_BLOCK_BODY_PROOF_SIZE: usize = 4; pub const L2_EXECUTION_PAYLOAD_TREE_EXECUTION_BLOCK_INDEX: usize = 12; - pub fn construct_from_raw_data(block_hash: &H256, proof: Vec) -> Self { - Self { - block_hash: *block_hash, - proof, - } + pub fn construct_from_raw_data(block_hash: H256, proof: Vec) -> Self { + Self { block_hash, proof } } pub fn construct_from_beacon_block_body( beacon_block_body: &BeaconBlockBody, ) -> Result> { - let l2_execution_payload_proof_size: usize = if let ForkName::Deneb = beacon_block_body.to_ref().fork_name() { - 5 - } else { - 4 + let l2_execution_payload_proof_size = match beacon_block_body.to_ref().fork_name() { + ForkName::Base | ForkName::Altair | ForkName::Merge | ForkName::Capella => 4, + _ => 5, }; let beacon_block_merkle_tree = &BeaconBlockBodyMerkleTree::new(beacon_block_body); @@ -91,14 +86,11 @@ impl ExecutionBlockProof { pub fn verify_proof_for_hash( &self, beacon_block_body_hash: &H256, - network_config: NetworkConfig, - epoch: Epoch + proof_size: &ProofSize, ) -> Result { - let proof_size = network_config.compute_proof_size(epoch); - - let l2_proof: &[H256] = &self.proof[0..proof_size.l2_execution_payload_proof_size]; - let l1_proof: &[H256] = - &self.proof[proof_size.l2_execution_payload_proof_size..proof_size.execution_proof_size]; + let l2_proof = &self.proof[0..proof_size.l2_execution_payload_proof_size]; + let l1_proof = &self.proof + [proof_size.l2_execution_payload_proof_size..proof_size.execution_proof_size]; let execution_payload_hash = Self::merkle_root_from_branch( self.block_hash, l2_proof, @@ -161,6 +153,7 @@ impl Error for IncorrectBranchLength {} mod tests { use crate::config_for_tests::ConfigForTests; use crate::utils::read_json_file_from_data_dir; + use eth2_utility::consensus::{Network, NetworkConfig}; use types::MainnetEthSpec; use types::{BeaconBlockBody, ExecutionPayload}; @@ -173,8 +166,10 @@ mod tests { #[test] fn test_beacon_block_body_root_verification() { + let slot = 5262172; + let config = NetworkConfig::new(&Network::Goerli); let beacon_block_body_json_str = - read_json_file_from_data_dir("beacon_block_body_goerli_slot_5262172.json"); + read_json_file_from_data_dir(&format!("beacon_block_body_goerli_slot_{slot}.json")); let beacon_block_body: BeaconBlockBody = serde_json::from_str(&beacon_block_body_json_str).unwrap(); @@ -202,17 +197,18 @@ mod tests { types::ExecutionBlockHash::from_root(execution_block_proof.get_execution_block_hash()) ); + let proof_size = config.compute_proof_size_by_slot(slot); assert!(execution_block_proof - .verify_proof_for_hash(&beacon_block_body_merkle_tree.0.hash()) + .verify_proof_for_hash(&beacon_block_body_merkle_tree.0.hash(), &proof_size) .unwrap()); let execution_block_proof_copy = crate::execution_block_proof::ExecutionBlockProof::construct_from_raw_data( - &execution_block_proof.get_execution_block_hash(), - &execution_block_proof.get_proof(), + execution_block_proof.get_execution_block_hash(), + execution_block_proof.get_proof(), ); assert!(execution_block_proof_copy - .verify_proof_for_hash(&beacon_block_body_merkle_tree.0.hash()) + .verify_proof_for_hash(&beacon_block_body_merkle_tree.0.hash(), &proof_size) .unwrap()); } From 2706d4366233c609c71edb8eab57b2ee4d3645f9 Mon Sep 17 00:00:00 2001 From: Olga Kunyavskaya Date: Mon, 22 Jan 2024 12:04:09 +0200 Subject: [PATCH 18/22] fix sync with eth after init test --- eth2near/eth2-contract-init/src/init_contract.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/eth2near/eth2-contract-init/src/init_contract.rs b/eth2near/eth2-contract-init/src/init_contract.rs index 382834aa..1f95bec4 100644 --- a/eth2near/eth2-contract-init/src/init_contract.rs +++ b/eth2near/eth2-contract-init/src/init_contract.rs @@ -256,12 +256,6 @@ mod tests { let mut init_config = get_init_config(&config_for_test, ð_client_contract); init_config.beacon_rpc_version = BeaconRPCVersion::V1_5; - init_contract(&init_config, &mut eth_client_contract).unwrap(); - - let last_finalized_slot_eth_client = eth_client_contract - .get_finalized_beacon_block_slot() - .expect("Error on getting last finalized beacon block slot(Eth client)"); - let beacon_rpc_client = BeaconRPCClient::new( &init_config.beacon_endpoint, init_config.eth_requests_timeout_seconds.unwrap_or(10), @@ -273,8 +267,14 @@ mod tests { .get_last_finalized_slot_number() .expect("Error on getting last finalized beacon block slot"); - const MAX_GAP_IN_EPOCH_BETWEEN_FINALIZED_SLOTS: u64 = 3; + init_contract(&init_config, &mut eth_client_contract).unwrap(); + + let last_finalized_slot_eth_client = eth_client_contract + .get_finalized_beacon_block_slot() + .expect("Error on getting last finalized beacon block slot(Eth client)"); + const MAX_GAP_IN_EPOCH_BETWEEN_FINALIZED_SLOTS: u64 = 3; + assert!( last_finalized_slot_eth_client + ONE_EPOCH_IN_SLOTS * MAX_GAP_IN_EPOCH_BETWEEN_FINALIZED_SLOTS From f4535eb48467a291e4eee3928a3e9ddaef9f559e Mon Sep 17 00:00:00 2001 From: karim-en Date: Sun, 25 Feb 2024 22:19:07 +0000 Subject: [PATCH 19/22] Update fork epoch --- contracts/near/eth2-utility/src/consensus.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contracts/near/eth2-utility/src/consensus.rs b/contracts/near/eth2-utility/src/consensus.rs index f2cbb434..11b497e5 100644 --- a/contracts/near/eth2-utility/src/consensus.rs +++ b/contracts/near/eth2-utility/src/consensus.rs @@ -70,7 +70,7 @@ impl NetworkConfig { capella_fork_version: [0x03, 0x00, 0x00, 0x00], capella_fork_epoch: 194048, deneb_fork_version: [0x04, 0x00, 0x00, 0x00], - deneb_fork_epoch: u64::MAX, + deneb_fork_epoch: 269568, }, Network::Goerli => Self { genesis_validators_root: [ @@ -95,7 +95,7 @@ impl NetworkConfig { bellatrix_fork_epoch: 100, capella_fork_version: [0x90, 0x00, 0x00, 0x72], capella_fork_epoch: 56832, - deneb_fork_version: [0x04, 0x00, 0x10, 0x20], + deneb_fork_version: [0x90, 0x00, 0x00, 0x73], deneb_fork_epoch: 132608, }, } From 4d641fac769c48bacd8237f07511c93b0ccea289 Mon Sep 17 00:00:00 2001 From: karim-en Date: Sun, 25 Feb 2024 23:25:01 +0000 Subject: [PATCH 20/22] Update contract build --- contracts/near/res/eth2_client.wasm | Bin 391975 -> 391986 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/contracts/near/res/eth2_client.wasm b/contracts/near/res/eth2_client.wasm index e147691ee25d74b566ac8761ef4d3bd0237fc2ce..49201d842430ae66fef19bc454613ab4eb0e11d8 100755 GIT binary patch delta 115 zcmZ4fO?=Zg@eR7djH{dVgxmFm8G)E-yPhyJrw`-b?H2LO)=Y+n8L}K34xC|DU@Ws@ zU{GLiJj9Ttzzks?1j;c$m@OR#Sinjg+Gi#*12N0?nTf3LOgI>1Sr|ZId;c`n87Tmj CtsmR~ delta 104 zcmdn=O?>$`@eR7dj0>9egxmFm8G)E-yPhyJrw`+&?H2LO)=X+F){G7c4338xvK$)@ uG%zYKmRT_{00j<#1Qr}%fC#iNNn{3MmhDRtS>Ks({D*?=v!=1mNC5zzu_c`V From fe92233b3012757aa46725655a4490598d6a59e4 Mon Sep 17 00:00:00 2001 From: karim-en Date: Tue, 27 Feb 2024 00:54:22 +0000 Subject: [PATCH 21/22] Fix configs for `sepolia` --- contracts/near/eth2-utility/src/consensus.rs | 1 + eth2near/contract_wrapper/src/eth_network.rs | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/contracts/near/eth2-utility/src/consensus.rs b/contracts/near/eth2-utility/src/consensus.rs index 11b497e5..a8878e76 100644 --- a/contracts/near/eth2-utility/src/consensus.rs +++ b/contracts/near/eth2-utility/src/consensus.rs @@ -41,6 +41,7 @@ impl FromStr for Network { match input { "mainnet" => Ok(Network::Mainnet), "goerli" => Ok(Network::Goerli), + "sepolia" => Ok(Network::Sepolia), _ => Err(format!("Unknown network {}", input)), } } diff --git a/eth2near/contract_wrapper/src/eth_network.rs b/eth2near/contract_wrapper/src/eth_network.rs index 20518a4c..58a01897 100644 --- a/eth2near/contract_wrapper/src/eth_network.rs +++ b/eth2near/contract_wrapper/src/eth_network.rs @@ -10,6 +10,7 @@ pub enum EthNetwork { Kiln, Ropsten, Goerli, + Sepolia, } #[derive(Debug, Clone, Deserialize)] @@ -19,7 +20,7 @@ impl Display for IncorrectEthNetwork { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!( f, - "Unknown Ethereum network. Possible networks: 'Mainnet', 'Kiln', 'Goerli', 'Ropsten'" + "Unknown Ethereum network. Possible networks: 'Mainnet', 'Kiln', 'Goerli', 'Ropsten', 'Sepolia'" ) } } @@ -39,6 +40,7 @@ impl EthNetwork { EthNetwork::Kiln => "kiln", EthNetwork::Goerli => "goerli", EthNetwork::Ropsten => "ropsten", + EthNetwork::Sepolia => "sepolia", } } } @@ -52,6 +54,7 @@ impl FromStr for EthNetwork { "kiln" => Ok(EthNetwork::Kiln), "goerli" => Ok(EthNetwork::Goerli), "ropsten" => Ok(EthNetwork::Ropsten), + "sepolia" => Ok(EthNetwork::Sepolia), _ => Err(IncorrectEthNetwork), } } From 14cb439de8ad3835f56a1a44e0eadf29ae8bcec5 Mon Sep 17 00:00:00 2001 From: karim-en Date: Tue, 27 Feb 2024 01:01:44 +0000 Subject: [PATCH 22/22] Update contract build: --- contracts/near/res/eth2_client.wasm | Bin 391986 -> 392025 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/contracts/near/res/eth2_client.wasm b/contracts/near/res/eth2_client.wasm index 49201d842430ae66fef19bc454613ab4eb0e11d8..14017b525fde932205eb65c49e8750b16e71fbec 100755 GIT binary patch delta 303 zcmdn=P5kCJ@eR7djF+1AgxmFm8G)E-yPhz!h&R(Lrs?qpEaKC3+!=Y8m>j03$1&?` zGb%7SHr_wbz~IO(@UXL?fq|Dvf!R?f%aPHHi2=wmfwN{zUmM39t4`m ztQZ)0n2-b*K?00O0!-W0;+ZX&84pa4PhwVKys*6`i8+9oamMtksmzW{4G*SEq%kWn zcC=fjF#|EncFQzYBYlbD)Pnq+%*4>V?7aN)JcYc}lJfkbY=w^L^;22ZB^T%mFvv16 qFw6sDNg#&t7fjy|lvaHJl$J*lW@ltzU`68d0QutE`KPfervd;d<3ybR delta 263 zcmcclO?=Zg@eR7djH{dVgxmFm8G)E-yPhz!h&R(`#_8)GGm1~wacAV2o*BoiFV5_! zljX>0#>Ak&>}UdKO__c;jyYP6iCclek-?0K1w>gfFz_%U2{3N=jc2xCX52HqEs0r$ z@yzzsNz4Jvj8mrnNo96q`g4D}eHya@V@rEN8Z!{HY)?pIHPROe&CAZqFV9oROD!qS zFUnS6U|?vRzG^C~y5t;v0R~whcP