From dfc435434ef822eb2fa02d4e5e33d30e1c27d66b Mon Sep 17 00:00:00 2001 From: librelois <c@elo.tf> Date: Sun, 4 Apr 2021 20:30:15 +0200 Subject: [PATCH] [ref] dbs: DunpNodeIdV1Db must be indexed by pubkey --- .../duniter-dbs/src/keys/dunp_node_id.rs | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/rust-libs/duniter-dbs/src/keys/dunp_node_id.rs b/rust-libs/duniter-dbs/src/keys/dunp_node_id.rs index 951846460..31e232d41 100644 --- a/rust-libs/duniter-dbs/src/keys/dunp_node_id.rs +++ b/rust-libs/duniter-dbs/src/keys/dunp_node_id.rs @@ -26,24 +26,24 @@ pub struct DunpNodeIdV1Db([u8; 37]); // uuid ++ pubkey impl DunpNodeIdV1Db { pub fn new(uuid: u32, pubkey: PublicKey) -> Self { let mut buffer = uninit_array![u8; 37]; - let (uuid_buffer, pubkey_buffer) = buffer.as_out().split_at_out(4); + let (pubkey_buffer, uuid_buffer) = buffer.as_out().split_at_out(33); - uuid_buffer.copy_from_slice(&uuid.to_be_bytes()[..]); pubkey_buffer.copy_from_slice(pubkey.as_ref()); + uuid_buffer.copy_from_slice(&uuid.to_be_bytes()[..]); Self(unsafe { std::mem::transmute(buffer) }) } pub fn get_uuid(&self) -> u32 { let mut buffer = uninit_array![u8; 4]; - buffer.as_out().copy_from_slice(&self.0[..4]); + buffer.as_out().copy_from_slice(&self.0[33..]); u32::from_be_bytes(unsafe { std::mem::transmute(buffer) }) } pub fn get_pubkey(&self) -> PublicKey { let mut buffer = uninit_array![u8; 33]; - buffer.as_out().copy_from_slice(&self.0[4..]); + buffer.as_out().copy_from_slice(&self.0[..33]); let bytes: [u8; 33] = unsafe { std::mem::transmute(buffer) }; PublicKey::try_from(&bytes[..]).unwrap_or_else(|_| unreachable!()) @@ -93,3 +93,19 @@ impl ExplorableKey for DunpNodeIdV1Db { Ok(self.to_string()) } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_serde() { + let node_id = DunpNodeIdV1Db::new(42, PublicKey::default()); + assert_eq!(node_id.get_uuid(), 42); + assert_eq!(node_id.get_pubkey(), PublicKey::default()); + let mut node_id_ = DunpNodeIdV1Db([0u8; 37]); + node_id_.0[32] = 32; + node_id_.0[36] = 42; + assert_eq!(node_id_, node_id) + } +} -- GitLab