mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-03 00:31:50 +00:00
Migrate from ethereum-types to alloy-primitives (#6078)
* Remove use of ethers_core::RlpStream
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into remove_use_of_ethers_core
* Remove old code
* Simplify keccak call
* Remove unused package
* Merge branch 'unstable' of https://github.com/ethDreamer/lighthouse into remove_use_of_ethers_core
* Merge branch 'unstable' into remove_use_of_ethers_core
* Run clippy
* Merge branch 'remove_use_of_ethers_core' of https://github.com/dospore/lighthouse into remove_use_of_ethers_core
* Check all cargo fmt
* migrate to alloy primitives init
* fix deps
* integrate alloy-primitives
* resolve dep issues
* more changes based on dep changes
* add TODOs
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into remove_use_of_ethers_core
* Revert lock
* Add BeaconBlocksByRange v3
* continue migration
* Revert "Add BeaconBlocksByRange v3"
This reverts commit e3ce7fc5ea.
* impl hash256 extended trait
* revert some uneeded diffs
* merge conflict resolved
* fix subnet id rshift calc
* rename to FixedBytesExtended
* debugging
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into migrate-to-alloy-primitives
* fix failed test
* fixing more tests
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into remove_use_of_ethers_core
* introduce a shim to convert between the two u256 types
* move alloy to wrokspace
* align alloy versions
* update
* update web3signer test certs
* refactor
* resolve failing tests
* linting
* fix graffiti string test
* fmt
* fix ef test
* resolve merge conflicts
* remove udep and revert cert
* cargo patch
* cyclic dep
* fix build error
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into migrate-to-alloy-primitives
* resolve conflicts, update deps
* merge unstable
* fmt
* fix deps
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into migrate-to-alloy-primitives
* resolve merge conflicts
* resolve conflicts, make necessary changes
* Remove patch
* fmt
* remove file
* merge conflicts
* sneaking in a smol change
* bump versions
* Merge remote-tracking branch 'origin/unstable' into migrate-to-alloy-primitives
* Updates for peerDAS
* Update ethereum_hashing to prevent dupe
* updated alloy-consensus, removed TODOs
* cargo update
* endianess fix
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into migrate-to-alloy-primitives
* fmt
* fix merge
* fix test
* fixed_bytes crate
* minor fixes
* convert u256 to i64
* panic free mixin to_low_u64_le
* from_str_radix
* computbe_subnet api and ensuring we use big-endian
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into migrate-to-alloy-primitives
* fix test
* Simplify subnet_id test
* Simplify some more tests
* Add tests to fixed_bytes crate
* Merge branch 'unstable' into migrate-to-alloy-primitives
This commit is contained in:
@@ -5,13 +5,14 @@ authors = ["Michael Sproul <michael@sigmaprime.io>"]
|
||||
edition = { workspace = true }
|
||||
|
||||
[dependencies]
|
||||
ethereum-types = { workspace = true }
|
||||
alloy-primitives = { workspace = true }
|
||||
ethereum_hashing = { workspace = true }
|
||||
safe_arith = { workspace = true }
|
||||
fixed_bytes = { workspace = true }
|
||||
|
||||
[dev-dependencies]
|
||||
quickcheck = { workspace = true }
|
||||
quickcheck_macros = { workspace = true }
|
||||
|
||||
[features]
|
||||
arbitrary = ["ethereum-types/arbitrary"]
|
||||
arbitrary = ["alloy-primitives/arbitrary"]
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
use ethereum_hashing::{hash, hash32_concat, ZERO_HASHES};
|
||||
use ethereum_types::H256;
|
||||
use safe_arith::ArithError;
|
||||
use std::sync::LazyLock;
|
||||
|
||||
type H256 = fixed_bytes::Hash256;
|
||||
pub use fixed_bytes::FixedBytesExtended;
|
||||
|
||||
const MAX_TREE_DEPTH: usize = 32;
|
||||
const EMPTY_SLICE: &[H256] = &[];
|
||||
|
||||
@@ -86,8 +88,8 @@ impl MerkleTree {
|
||||
let left_subtree = MerkleTree::create(left_leaves, depth - 1);
|
||||
let right_subtree = MerkleTree::create(right_leaves, depth - 1);
|
||||
let hash = H256::from_slice(&hash32_concat(
|
||||
left_subtree.hash().as_bytes(),
|
||||
right_subtree.hash().as_bytes(),
|
||||
left_subtree.hash().as_slice(),
|
||||
right_subtree.hash().as_slice(),
|
||||
));
|
||||
|
||||
Node(hash, Box::new(left_subtree), Box::new(right_subtree))
|
||||
@@ -143,9 +145,9 @@ impl MerkleTree {
|
||||
// All other possibilities are invalid MerkleTrees
|
||||
(_, _) => return Err(MerkleTreeError::Invalid),
|
||||
};
|
||||
hash.assign_from_slice(&hash32_concat(
|
||||
left.hash().as_bytes(),
|
||||
right.hash().as_bytes(),
|
||||
hash.copy_from_slice(&hash32_concat(
|
||||
left.hash().as_slice(),
|
||||
right.hash().as_slice(),
|
||||
));
|
||||
}
|
||||
Finalized(_) => return Err(MerkleTreeError::FinalizedNodePushed),
|
||||
@@ -274,8 +276,8 @@ impl MerkleTree {
|
||||
};
|
||||
|
||||
let hash = H256::from_slice(&hash32_concat(
|
||||
left.hash().as_bytes(),
|
||||
right.hash().as_bytes(),
|
||||
left.hash().as_slice(),
|
||||
right.hash().as_slice(),
|
||||
));
|
||||
Ok(MerkleTree::Node(hash, Box::new(left), Box::new(right)))
|
||||
}
|
||||
@@ -369,15 +371,15 @@ pub fn verify_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.as_bytes().to_vec();
|
||||
let mut merkle_root = leaf.as_slice().to_vec();
|
||||
|
||||
for (i, leaf) in branch.iter().enumerate().take(depth) {
|
||||
let ith_bit = (index >> i) & 0x01;
|
||||
if ith_bit == 1 {
|
||||
merkle_root = hash32_concat(leaf.as_bytes(), &merkle_root)[..].to_vec();
|
||||
merkle_root = hash32_concat(leaf.as_slice(), &merkle_root)[..].to_vec();
|
||||
} else {
|
||||
let mut input = merkle_root;
|
||||
input.extend_from_slice(leaf.as_bytes());
|
||||
input.extend_from_slice(leaf.as_slice());
|
||||
merkle_root = hash(&input);
|
||||
}
|
||||
}
|
||||
@@ -433,7 +435,6 @@ mod tests {
|
||||
}
|
||||
|
||||
let leaves_iter = int_leaves.into_iter().map(H256::from_low_u64_be);
|
||||
|
||||
let mut merkle_tree = MerkleTree::create(&[], depth);
|
||||
|
||||
let proofs_ok = leaves_iter.enumerate().all(|(i, leaf)| {
|
||||
@@ -465,10 +466,10 @@ mod tests {
|
||||
let leaf_b10 = H256::from([0xCC; 32]);
|
||||
let leaf_b11 = H256::from([0xDD; 32]);
|
||||
|
||||
let node_b0x = H256::from_slice(&hash32_concat(leaf_b00.as_bytes(), leaf_b01.as_bytes()));
|
||||
let node_b1x = H256::from_slice(&hash32_concat(leaf_b10.as_bytes(), leaf_b11.as_bytes()));
|
||||
let node_b0x = H256::from_slice(&hash32_concat(leaf_b00.as_slice(), leaf_b01.as_slice()));
|
||||
let node_b1x = H256::from_slice(&hash32_concat(leaf_b10.as_slice(), leaf_b11.as_slice()));
|
||||
|
||||
let root = H256::from_slice(&hash32_concat(node_b0x.as_bytes(), node_b1x.as_bytes()));
|
||||
let root = H256::from_slice(&hash32_concat(node_b0x.as_slice(), node_b1x.as_slice()));
|
||||
|
||||
let tree = MerkleTree::create(&[leaf_b00, leaf_b01, leaf_b10, leaf_b11], 2);
|
||||
assert_eq!(tree.hash(), root);
|
||||
@@ -482,10 +483,10 @@ mod tests {
|
||||
let leaf_b10 = H256::from([0xCC; 32]);
|
||||
let leaf_b11 = H256::from([0xDD; 32]);
|
||||
|
||||
let node_b0x = H256::from_slice(&hash32_concat(leaf_b00.as_bytes(), leaf_b01.as_bytes()));
|
||||
let node_b1x = H256::from_slice(&hash32_concat(leaf_b10.as_bytes(), leaf_b11.as_bytes()));
|
||||
let node_b0x = H256::from_slice(&hash32_concat(leaf_b00.as_slice(), leaf_b01.as_slice()));
|
||||
let node_b1x = H256::from_slice(&hash32_concat(leaf_b10.as_slice(), leaf_b11.as_slice()));
|
||||
|
||||
let root = H256::from_slice(&hash32_concat(node_b0x.as_bytes(), node_b1x.as_bytes()));
|
||||
let root = H256::from_slice(&hash32_concat(node_b0x.as_slice(), node_b1x.as_slice()));
|
||||
|
||||
// Run some proofs
|
||||
assert!(verify_merkle_proof(
|
||||
|
||||
Reference in New Issue
Block a user