From dd79c2e7d6ce17d7b3e5950cc4b62b2fe92d6395 Mon Sep 17 00:00:00 2001 From: nk_ysg Date: Sun, 30 Mar 2025 17:02:23 +0800 Subject: [PATCH] uses bytes for code cleanup --- Cargo.lock | 1 + doge-light-client/Cargo.toml | 1 + doge-light-client/src/core_data.rs | 50 +++++++++++++++++------------- 3 files changed, 30 insertions(+), 22 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b8e1c51..476a3d5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -486,6 +486,7 @@ dependencies = [ "bitcoin", "borsh 0.10.4", "bs58", + "bytes", "hex", "hex-literal", "num-derive 0.3.3", diff --git a/doge-light-client/Cargo.toml b/doge-light-client/Cargo.toml index d2999c1..9e83592 100644 --- a/doge-light-client/Cargo.toml +++ b/doge-light-client/Cargo.toml @@ -13,6 +13,7 @@ sha2 = ["dep:sha2"] std = [] [dependencies] +bytes = "1.10" serde = { version = "^1.0", features = ["derive"], optional = true } serde_with = { version = "^3.0", optional = true } bs58 = { version = "0.5.1", default-features = false, features = ["check", "alloc"] } diff --git a/doge-light-client/src/core_data.rs b/doge-light-client/src/core_data.rs index 7786024..7f6a41f 100644 --- a/doge-light-client/src/core_data.rs +++ b/doge-light-client/src/core_data.rs @@ -34,11 +34,10 @@ use zerocopy_derive::{FromBytes, Immutable, IntoBytes}; use crate::{ constants::{DogeNetworkConfig, MERGED_MINING_HEADER, VERSION_AUXPOW}, doge::transaction::BTCTransaction, error::{DogeBridgeError, QDogeResult}, hash::{ - scrypt_doge::scrypt_1024_1_1_256, - sha256::QBTCHash256Hasher, - traits::{BytesHasher, MerkleHasher}, + merkle, scrypt_doge::scrypt_1024_1_1_256, sha256::QBTCHash256Hasher, traits::{BytesHasher, MerkleHasher} } }; +use bytes::{Buf, BufMut}; pub type QHash256 = [u8; 32]; pub type QHash160 = [u8; 20]; @@ -76,23 +75,27 @@ pub struct QStandardBlockHeader { impl QStandardBlockHeader { pub fn to_bytes_fixed(&self) -> [u8; 80] { - let mut bytes = [0u8; 80]; - bytes[0..4].copy_from_slice(&self.version.to_le_bytes()); - bytes[4..36].copy_from_slice(&self.previous_block_hash); - bytes[36..68].copy_from_slice(&self.merkle_root); - bytes[68..72].copy_from_slice(&self.timestamp.to_le_bytes()); - bytes[72..76].copy_from_slice(&self.bits.to_le_bytes()); - bytes[76..80].copy_from_slice(&self.nonce.to_le_bytes()); + let mut bytes = [0u8; 80]; + let mut buf = &mut bytes[..]; + buf.put_u32_le(self.version); + buf.put_slice(&self.previous_block_hash); + buf.put_slice(&self.merkle_root); + buf.put_u32_le(self.timestamp); + buf.put_u32_le(self.bits); + buf.put_u32_le(self.nonce); bytes } pub fn from_bytes_fixed(data: &[u8; 80]) -> Self { - let version = u32::from_le_bytes(data[0..4].try_into().unwrap()); - let previous_block_hash: [u8; 32] = data[4..36].try_into().unwrap(); - let merkle_root: [u8; 32] = data[36..68].try_into().unwrap(); - let timestamp = u32::from_le_bytes(data[68..72].try_into().unwrap()); - let bits = u32::from_le_bytes(data[72..76].try_into().unwrap()); - let nonce = u32::from_le_bytes(data[76..80].try_into().unwrap()); + let mut buf = data.as_ref(); + let version = buf.get_u32_le(); + let mut previous_block_hash = [0u8; 32]; + let mut merkle_root = [0u8; 32]; + buf.copy_to_slice(&mut previous_block_hash); + buf.copy_to_slice(&mut merkle_root); + let timestamp = buf.get_u32_le(); + let bits = buf.get_u32_le(); + let nonce = buf.get_u32_le(); Self { version, previous_block_hash, @@ -110,12 +113,15 @@ impl QStandardBlockHeader { data.len() ); } - let version = u32::from_le_bytes(data[0..4].try_into().unwrap()); - let previous_block_hash: [u8; 32] = data[4..36].try_into().unwrap(); - let merkle_root: [u8; 32] = data[36..68].try_into().unwrap(); - let timestamp = u32::from_le_bytes(data[68..72].try_into().unwrap()); - let bits = u32::from_le_bytes(data[72..76].try_into().unwrap()); - let nonce = u32::from_le_bytes(data[76..80].try_into().unwrap()); + let mut buf = data; + let version = buf.get_u32_le(); + let mut previous_block_hash = [0u8; 32]; + let mut merkle_root = [0u8; 32]; + buf.copy_to_slice(&mut previous_block_hash); + buf.copy_to_slice(&mut merkle_root); + let timestamp = buf.get_u32_le(); + let bits = buf.get_u32_le(); + let nonce = buf.get_u32_le(); Ok(Self { version, previous_block_hash,