[−][src]Crate minisketch_rs
minisketch-rs
minisketch-rs
is a wrapper around minisketch,
a C++ library by Pieter Wuille for efficient set reconciliation.
Minisketch is proposed as part of an Erlay technique for bandwidth-efficient TX propagation in Bitcoin.
This library exposes type-safe Rust bindings for all minisketch functions by providing Minisketch
structure.
Example
Cargo.toml:
[dependencies]
minisketch-rs = "0.1"
Example of simple set reconciliation between Alice and Bob:
ⓘThis code runs with edition 2018
use minisketch_rs::Minisketch; // Alice's side let mut sketch_a = Minisketch::try_new(12, 0, 4)?; println!("Alice's set:"); for i in 3_000..3_010 { println!("{}", i); sketch_a.add(i); } let sersize = sketch_a.serialized_size(); assert_eq!(sersize, 12 * 4 / 8); // Serialize message for Bob let mut buf_a = vec![0u8; sersize]; sketch_a.serialize(buf_a.as_mut_slice())?; println!("Message: {}, {:?}", buf_a.len(), buf_a); // Bob's side { // Bob's sketch println!("Bob's set:"); let mut sketch_b = Minisketch::try_new(12, 0, 4)?; for i in 3_002..3_012 { println!("{}", i); sketch_b.add(i); } // Alice's sketch let mut sketch_a = Minisketch::try_new(12, 0, 4)?; sketch_a.deserialize(&buf_a); // Load Alice's sketch // Merge the elements from sketch_a into sketch_b. The result is a sketch_b // which contains all elements that occurred in Alice's or Bob's sets, but not // in both. sketch_b.merge(&sketch_a)?; let mut differences = [0u64; 4]; let num_differences = sketch_b.decode(&mut differences[..])?; println!("Differences between Alice and Bob: {}", num_differences); assert!(num_differences > 0); // Sort differences since they may come in arbitrary order from minisketch_decode() let mut differences = Vec::from(&differences[..]); differences.sort(); for (i, diff) in differences.iter().enumerate() { println!("Difference #{}: {}", (i + 1), diff); } assert_eq!(differences[0], 3_000); assert_eq!(differences[1], 3_001); assert_eq!(differences[2], 3_010); assert_eq!(differences[3], 3_011); }
Code snippet above will print:
Alice's set:
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
Message: 6, [1, 224, 210, 249, 116, 105]
Bob's set:
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
Differences between Alice and Bob: 4
Difference #1: 3000
Difference #2: 3001
Difference #3: 3010
Difference #4: 3011
Structs
Minisketch | Describes decoded sketches and holding underlying opaque type inside. |
MinisketchError | Error that originates from |