Skip to content
Snippets Groups Projects
Commit 5a35a676 authored by Éloïs's avatar Éloïs
Browse files

Merge branch 'dunp-v1-node-id' into 'dev'

[ref] dbs: DunpNodeIdV1Db must be indexed by pubkey

See merge request nodes/typescript/duniter!1372
parents ce88f841 dfc43543
No related branches found
No related tags found
1 merge request!1372[ref] dbs: DunpNodeIdV1Db must be indexed by pubkey
...@@ -26,24 +26,24 @@ pub struct DunpNodeIdV1Db([u8; 37]); // uuid ++ pubkey ...@@ -26,24 +26,24 @@ pub struct DunpNodeIdV1Db([u8; 37]); // uuid ++ pubkey
impl DunpNodeIdV1Db { impl DunpNodeIdV1Db {
pub fn new(uuid: u32, pubkey: PublicKey) -> Self { pub fn new(uuid: u32, pubkey: PublicKey) -> Self {
let mut buffer = uninit_array![u8; 37]; 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()); pubkey_buffer.copy_from_slice(pubkey.as_ref());
uuid_buffer.copy_from_slice(&uuid.to_be_bytes()[..]);
Self(unsafe { std::mem::transmute(buffer) }) Self(unsafe { std::mem::transmute(buffer) })
} }
pub fn get_uuid(&self) -> u32 { pub fn get_uuid(&self) -> u32 {
let mut buffer = uninit_array![u8; 4]; 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) }) u32::from_be_bytes(unsafe { std::mem::transmute(buffer) })
} }
pub fn get_pubkey(&self) -> PublicKey { pub fn get_pubkey(&self) -> PublicKey {
let mut buffer = uninit_array![u8; 33]; 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) }; let bytes: [u8; 33] = unsafe { std::mem::transmute(buffer) };
PublicKey::try_from(&bytes[..]).unwrap_or_else(|_| unreachable!()) PublicKey::try_from(&bytes[..]).unwrap_or_else(|_| unreachable!())
...@@ -93,3 +93,19 @@ impl ExplorableKey for DunpNodeIdV1Db { ...@@ -93,3 +93,19 @@ impl ExplorableKey for DunpNodeIdV1Db {
Ok(self.to_string()) 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)
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment