mirror of
				https://github.com/0glabs/0g-storage-node.git
				synced 2025-11-04 00:27:39 +00:00 
			
		
		
		
	simplify
This commit is contained in:
		
							parent
							
								
									5dbab01534
								
							
						
					
					
						commit
						4a8479e0df
					
				@ -27,9 +27,7 @@ use ethereum_types::H256;
 | 
			
		||||
 | 
			
		||||
impl AppendMerkleTree<OptionalHash, Sha3Algorithm> {
 | 
			
		||||
    /// Convert a proof of OptionalHash to a proof of H256
 | 
			
		||||
    pub fn convert_proof_to_h256(
 | 
			
		||||
        proof: &Proof<OptionalHash>,
 | 
			
		||||
    ) -> Result<Proof<H256>, anyhow::Error> {
 | 
			
		||||
    pub fn convert_proof_to_h256(proof: Proof<OptionalHash>) -> Result<Proof<H256>, anyhow::Error> {
 | 
			
		||||
        let lemma: Result<Vec<H256>, anyhow::Error> = proof
 | 
			
		||||
            .lemma()
 | 
			
		||||
            .iter()
 | 
			
		||||
@ -43,18 +41,41 @@ impl AppendMerkleTree<OptionalHash, Sha3Algorithm> {
 | 
			
		||||
 | 
			
		||||
    /// Convert a range proof of OptionalHash to a range proof of H256  
 | 
			
		||||
    pub fn convert_range_proof_to_h256(
 | 
			
		||||
        proof: &RangeProof<OptionalHash>,
 | 
			
		||||
        proof: RangeProof<OptionalHash>,
 | 
			
		||||
    ) -> Result<RangeProof<H256>, anyhow::Error> {
 | 
			
		||||
        Ok(RangeProof {
 | 
			
		||||
            left_proof: Self::convert_proof_to_h256(&proof.left_proof)?,
 | 
			
		||||
            right_proof: Self::convert_proof_to_h256(&proof.right_proof)?,
 | 
			
		||||
            left_proof: Self::convert_proof_to_h256(proof.left_proof)?,
 | 
			
		||||
            right_proof: Self::convert_proof_to_h256(proof.right_proof)?,
 | 
			
		||||
        })
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Convert a Proof<H256> to Proof<OptionalHash>
 | 
			
		||||
    pub fn convert_proof_from_h256(
 | 
			
		||||
        proof: Proof<H256>,
 | 
			
		||||
    ) -> Result<Proof<OptionalHash>, anyhow::Error> {
 | 
			
		||||
        let lemma = proof
 | 
			
		||||
            .lemma()
 | 
			
		||||
            .iter()
 | 
			
		||||
            .map(|h| OptionalHash::some(*h))
 | 
			
		||||
            .collect();
 | 
			
		||||
        let path = proof.path().to_vec();
 | 
			
		||||
        Proof::new(lemma, path)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Convert a RangeProof<H256> to RangeProof<OptionalHash>
 | 
			
		||||
    pub fn convert_range_proof_from_h256(
 | 
			
		||||
        range_proof: RangeProof<H256>,
 | 
			
		||||
    ) -> Result<RangeProof<OptionalHash>, anyhow::Error> {
 | 
			
		||||
        Ok(RangeProof {
 | 
			
		||||
            left_proof: Self::convert_proof_from_h256(range_proof.left_proof)?,
 | 
			
		||||
            right_proof: Self::convert_proof_from_h256(range_proof.right_proof)?,
 | 
			
		||||
        })
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Generate a proof and convert it to H256
 | 
			
		||||
    pub fn gen_proof_h256(&self, leaf_index: usize) -> Result<Proof<H256>, anyhow::Error> {
 | 
			
		||||
        let proof = self.gen_proof(leaf_index)?;
 | 
			
		||||
        Self::convert_proof_to_h256(&proof)
 | 
			
		||||
        Self::convert_proof_to_h256(proof)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Generate a range proof and convert it to H256
 | 
			
		||||
@ -64,7 +85,7 @@ impl AppendMerkleTree<OptionalHash, Sha3Algorithm> {
 | 
			
		||||
        end_index: usize,
 | 
			
		||||
    ) -> Result<RangeProof<H256>, anyhow::Error> {
 | 
			
		||||
        let proof = self.gen_range_proof(start_index, end_index)?;
 | 
			
		||||
        Self::convert_range_proof_to_h256(&proof)
 | 
			
		||||
        Self::convert_range_proof_to_h256(proof)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Get the root as H256 (unwraps the OptionalHash)
 | 
			
		||||
 | 
			
		||||
@ -44,40 +44,6 @@ impl OptionalHash {
 | 
			
		||||
    pub fn to_h256_or_zero(&self) -> H256 {
 | 
			
		||||
        self.0.unwrap_or_else(H256::zero)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Convert a Proof<OptionalHash> to Proof<H256>
 | 
			
		||||
    pub fn convert_proof_to_h256(proof: Proof<OptionalHash>) -> Result<Proof<H256>, anyhow::Error> {
 | 
			
		||||
        let lemma = proof
 | 
			
		||||
            .lemma()
 | 
			
		||||
            .iter()
 | 
			
		||||
            .map(|oh| oh.to_h256_or_zero())
 | 
			
		||||
            .collect();
 | 
			
		||||
        let path = proof.path().to_vec();
 | 
			
		||||
        Proof::new(lemma, path)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Convert a Proof<H256> to Proof<OptionalHash>
 | 
			
		||||
    pub fn convert_proof_from_h256(
 | 
			
		||||
        proof: Proof<H256>,
 | 
			
		||||
    ) -> Result<Proof<OptionalHash>, anyhow::Error> {
 | 
			
		||||
        let lemma = proof
 | 
			
		||||
            .lemma()
 | 
			
		||||
            .iter()
 | 
			
		||||
            .map(|h| OptionalHash::some(*h))
 | 
			
		||||
            .collect();
 | 
			
		||||
        let path = proof.path().to_vec();
 | 
			
		||||
        Proof::new(lemma, path)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Convert a RangeProof<H256> to RangeProof<OptionalHash>
 | 
			
		||||
    pub fn convert_range_proof_from_h256(
 | 
			
		||||
        range_proof: RangeProof<H256>,
 | 
			
		||||
    ) -> Result<RangeProof<OptionalHash>, anyhow::Error> {
 | 
			
		||||
        Ok(RangeProof {
 | 
			
		||||
            left_proof: Self::convert_proof_from_h256(range_proof.left_proof)?,
 | 
			
		||||
            right_proof: Self::convert_proof_from_h256(range_proof.right_proof)?,
 | 
			
		||||
        })
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Add From conversions for easier usage
 | 
			
		||||
@ -156,8 +122,6 @@ impl Decode for OptionalHash {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let hash = H256::from_ssz_bytes(bytes)?;
 | 
			
		||||
        // If it's H256::zero(), treat it as None, otherwise Some
 | 
			
		||||
 | 
			
		||||
        Ok(OptionalHash::some(hash))
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -196,7 +160,7 @@ impl HashElement for H256 {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn null() -> Self {
 | 
			
		||||
        H256::zero() // Use all zeros instead of 0x0101... to avoid collision
 | 
			
		||||
        H256::repeat_byte(0x01)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -12,7 +12,9 @@ use crate::log_store::{
 | 
			
		||||
use crate::{try_option, ZgsKeyValueDB};
 | 
			
		||||
use any::Any;
 | 
			
		||||
use anyhow::{anyhow, bail, Result};
 | 
			
		||||
use append_merkle::{MerkleTreeRead, NodeDatabase, NodeTransaction, OptionalHash};
 | 
			
		||||
use append_merkle::{
 | 
			
		||||
    AppendMerkleTree, MerkleTreeRead, NodeDatabase, NodeTransaction, OptionalHash,
 | 
			
		||||
};
 | 
			
		||||
use itertools::Itertools;
 | 
			
		||||
use kvdb::DBTransaction;
 | 
			
		||||
use parking_lot::RwLock;
 | 
			
		||||
@ -73,7 +75,7 @@ impl FlowStore {
 | 
			
		||||
            )
 | 
			
		||||
        })?;
 | 
			
		||||
        let optional_proof = merkle.gen_proof(sector_index)?;
 | 
			
		||||
        OptionalHash::convert_proof_to_h256(optional_proof)
 | 
			
		||||
        AppendMerkleTree::convert_proof_to_h256(optional_proof)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn delete_batch_list(&self, batch_list: &[u64]) -> Result<()> {
 | 
			
		||||
 | 
			
		||||
@ -9,7 +9,7 @@ use crate::log_store::{
 | 
			
		||||
};
 | 
			
		||||
use crate::{try_option, ZgsKeyValueDB};
 | 
			
		||||
use anyhow::{anyhow, bail, Result};
 | 
			
		||||
use append_merkle::{Algorithm, MerkleTreeRead, OptionalHash, Sha3Algorithm};
 | 
			
		||||
use append_merkle::{Algorithm, AppendMerkleTree, MerkleTreeRead, OptionalHash, Sha3Algorithm};
 | 
			
		||||
use ethereum_types::H256;
 | 
			
		||||
use kvdb_rocksdb::{Database, DatabaseConfig};
 | 
			
		||||
use merkle_light::merkle::{log2_pow2, MerkleTree};
 | 
			
		||||
@ -221,7 +221,7 @@ impl LogStoreChunkWrite for LogManager {
 | 
			
		||||
 | 
			
		||||
        if let Some(file_proof) = maybe_file_proof {
 | 
			
		||||
            // Convert H256 proof to OptionalHash proof
 | 
			
		||||
            let optional_proof = OptionalHash::convert_proof_from_h256(file_proof)?;
 | 
			
		||||
            let optional_proof = AppendMerkleTree::convert_proof_from_h256(file_proof)?;
 | 
			
		||||
            // Convert H256 merkle nodes to OptionalHash merkle nodes
 | 
			
		||||
            let optional_nodes: Vec<(usize, OptionalHash)> = tx
 | 
			
		||||
                .merkle_nodes
 | 
			
		||||
@ -431,7 +431,7 @@ impl LogStoreWrite for LogManager {
 | 
			
		||||
        let mut merkle = self.merkle.write();
 | 
			
		||||
        if valid {
 | 
			
		||||
            merkle.pora_chunks_merkle.fill_with_range_proof(
 | 
			
		||||
                OptionalHash::convert_range_proof_from_h256(data.proof.clone())?,
 | 
			
		||||
                AppendMerkleTree::convert_range_proof_from_h256(data.proof.clone())?,
 | 
			
		||||
            )?;
 | 
			
		||||
        }
 | 
			
		||||
        Ok(valid)
 | 
			
		||||
@ -893,10 +893,10 @@ impl LogManager {
 | 
			
		||||
        let merkle = self.merkle.read_recursive();
 | 
			
		||||
        let seg_index = sector_to_segment(flow_index);
 | 
			
		||||
        let top_proof = match maybe_tx_seq {
 | 
			
		||||
            None => OptionalHash::convert_proof_to_h256(
 | 
			
		||||
            None => AppendMerkleTree::convert_proof_to_h256(
 | 
			
		||||
                merkle.pora_chunks_merkle.gen_proof(seg_index)?,
 | 
			
		||||
            )?,
 | 
			
		||||
            Some(tx_seq) => OptionalHash::convert_proof_to_h256(
 | 
			
		||||
            Some(tx_seq) => AppendMerkleTree::convert_proof_to_h256(
 | 
			
		||||
                merkle
 | 
			
		||||
                    .pora_chunks_merkle
 | 
			
		||||
                    .at_version(tx_seq)?
 | 
			
		||||
@ -918,12 +918,12 @@ impl LogManager {
 | 
			
		||||
                .gen_proof_in_batch(seg_index, flow_index as usize % PORA_CHUNK_SIZE)?
 | 
			
		||||
        } else {
 | 
			
		||||
            match maybe_tx_seq {
 | 
			
		||||
                None => OptionalHash::convert_proof_to_h256(
 | 
			
		||||
                None => AppendMerkleTree::convert_proof_to_h256(
 | 
			
		||||
                    merkle
 | 
			
		||||
                        .last_chunk_merkle
 | 
			
		||||
                        .gen_proof(flow_index as usize % PORA_CHUNK_SIZE)?,
 | 
			
		||||
                )?,
 | 
			
		||||
                Some(tx_version) => OptionalHash::convert_proof_to_h256(
 | 
			
		||||
                Some(tx_version) => AppendMerkleTree::convert_proof_to_h256(
 | 
			
		||||
                    merkle
 | 
			
		||||
                        .last_chunk_merkle
 | 
			
		||||
                        .at_version(tx_version)?
 | 
			
		||||
@ -1346,18 +1346,13 @@ pub fn data_to_merkle_leaves(leaf_data: &[u8]) -> Result<Vec<OptionalHash>> {
 | 
			
		||||
    Ok(r)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Convert Vec<OptionalHash> to Vec<H256> for compatibility with existing code
 | 
			
		||||
pub fn optional_hash_to_h256_vec(optional_hashes: Vec<OptionalHash>) -> Vec<H256> {
 | 
			
		||||
    optional_hashes
 | 
			
		||||
        .into_iter()
 | 
			
		||||
        .map(|oh| oh.to_h256_or_zero())
 | 
			
		||||
        .collect()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Convenience function that combines data_to_merkle_leaves and conversion to H256
 | 
			
		||||
pub fn data_to_merkle_leaves_h256(leaf_data: &[u8]) -> Result<Vec<H256>> {
 | 
			
		||||
    let optional_hashes = data_to_merkle_leaves(leaf_data)?;
 | 
			
		||||
    Ok(optional_hash_to_h256_vec(optional_hashes))
 | 
			
		||||
    Ok(optional_hashes
 | 
			
		||||
        .into_iter()
 | 
			
		||||
        .map(|oh| oh.to_h256_or_zero())
 | 
			
		||||
        .collect())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub fn bytes_to_entries(size_bytes: u64) -> u64 {
 | 
			
		||||
 | 
			
		||||
@ -94,7 +94,9 @@ fn test_put_get() {
 | 
			
		||||
 | 
			
		||||
        assert_eq!(
 | 
			
		||||
            chunk_with_proof.proof,
 | 
			
		||||
            OptionalHash::convert_proof_to_h256(h256_merkle.gen_proof(i + start_offset).unwrap())
 | 
			
		||||
            AppendMerkleTree::convert_proof_to_h256(
 | 
			
		||||
                h256_merkle.gen_proof(i + start_offset).unwrap()
 | 
			
		||||
            )
 | 
			
		||||
            .unwrap()
 | 
			
		||||
        );
 | 
			
		||||
        let r = chunk_with_proof.proof.validate::<Sha3Algorithm>(
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user