diff --git a/api/src/server.rs b/api/src/server.rs index a15698425..acaa34116 100644 --- a/api/src/server.rs +++ b/api/src/server.rs @@ -153,6 +153,8 @@ where ?self.network, sort_key, sort_value, controller, "subscribe params" ); + let context = ""; + let blocknumber = 0; let offset = offset .map(|float| { let int = float as usize; @@ -189,16 +191,28 @@ where .map_err(|err| ApiError(format!("stream_id: {err}")))?; ( start_builder + .with_context(context) + .with_blocknumber(blocknumber) .with_controller(&controller) .with_init(&stream_id.cid), stop_builder + .with_context(context) + .with_blocknumber(blocknumber) .with_controller(&controller) .with_init(&stream_id.cid), ) } (Some(controller), None) => ( - start_builder.with_controller(&controller).with_min_init(), - stop_builder.with_controller(&controller).with_max_init(), + start_builder + .with_context(context) + .with_blocknumber(blocknumber) + .with_controller(&controller) + .with_min_init(), + stop_builder + .with_context(context) + .with_blocknumber(blocknumber) + .with_controller(&controller) + .with_max_init(), ), (None, Some(_)) => { return Err(ApiError( @@ -206,13 +220,21 @@ where )) } (None, None) => ( - start_builder.with_min_controller().with_min_init(), - stop_builder.with_max_controller().with_max_init(), + start_builder + .with_context(context) + .with_blocknumber(blocknumber) + .with_min_controller() + .with_min_init(), + stop_builder + .with_context(context) + .with_blocknumber(blocknumber) + .with_max_controller() + .with_max_init(), ), }; - let start = start_builder.with_min_event_height().build_fencepost(); - let stop = stop_builder.with_max_event_height().build_fencepost(); + let start = start_builder.build_fencepost(); + let stop = stop_builder.build_fencepost(); // Update interest ranges to include this new subscription. let interest = Interest::builder() @@ -330,15 +352,24 @@ mod tests { async fn create_event() { let peer_id = PeerId::random(); let network = Network::InMemory; - let event_id = EventId::new( - &network, - "model", - "k2t6wz4ylx0qr6v7dvbczbxqy7pqjb0879qx930c1e27gacg3r8sllonqt4xx9", // cspell:disable-line - "did:key:zGs1Det7LHNeu7DXT4nvoYrPfj3n6g7d6bj2K4AMXEvg1", // cspell:disable-line - &Cid::from_str("baejbeihyr3kf77etqdccjfoc33dmko2ijyugn6qk6yucfkioasjssz3bbu").unwrap(), // cspell:disable-line - 0, - &Cid::from_str("baejbeicqtpe5si4qvbffs2s7vtbk5ccbsfg6owmpidfj3zeluqz4hlnz6m").unwrap(), // cspell:disable-line - ); + let event_id = EventId::builder() + .with_network(&network) + .with_sort_value( + "model", + "k2t6wz4ylx0qr6v7dvbczbxqy7pqjb0879qx930c1e27gacg3r8sllonqt4xx9", + ) // cspell:disable-line + .with_context("") + .with_blocknumber(0) + .with_controller("did:key:zGs1Det7LHNeu7DXT4nvoYrPfj3n6g7d6bj2K4AMXEvg1") // cspell:disable-line + .with_init( + &Cid::from_str("baejbeihyr3kf77etqdccjfoc33dmko2ijyugn6qk6yucfkioasjssz3bbu") + .unwrap(), + ) // cspell:disable-line + .with_event( + &Cid::from_str("baejbeicqtpe5si4qvbffs2s7vtbk5ccbsfg6owmpidfj3zeluqz4hlnz6m") + .unwrap(), + ) // cspell:disable-line + .build(); let event_id_str = multibase::encode(Base::Base16Lower, event_id.to_bytes()); let mock_interest = MockReconInterestTest::new(); let mut mock_model = MockReconModelTest::new(); @@ -365,27 +396,33 @@ mod tests { let peer_id = PeerId::random(); let network = Network::InMemory; let model = "k2t6wz4ylx0qr6v7dvbczbxqy7pqjb0879qx930c1e27gacg3r8sllonqt4xx9"; // cspell:disable-line + let context = ""; + let blocknumber = 0; // Construct start and end event ids let start = EventId::builder() .with_network(&network) .with_sort_value("model", model) + .with_context(context) + .with_blocknumber(blocknumber) .with_min_controller() .with_min_init() - .with_min_event_height() .build_fencepost(); let end = EventId::builder() .with_network(&network) .with_sort_value("model", model) + .with_context(context) + .with_blocknumber(blocknumber) .with_max_controller() .with_max_init() - .with_max_event_height() .build_fencepost(); // Construct event to be returned let event_id = EventId::builder() .with_network(&network) .with_sort_value("model", model) + .with_context(context) + .with_blocknumber(blocknumber) .with_controller("did:key:zH3RdYVn3WtYR3LXmXk8wA6XWUjWMLgRa5ia1tgR3uR9D") .with_init( &StreamId::from_str( @@ -394,7 +431,6 @@ mod tests { .unwrap() .cid, ) - .with_event_height(9) .with_event( &Cid::from_str("baejbeibmbnp2ffyug3cfamsw7cno3plz5qkwfednrkyse6azcz7fycdym4") // cspell:disable-line .unwrap(), @@ -456,16 +492,18 @@ mod tests { let start = EventId::builder() .with_network(&network) .with_sort_value("model", model) + .with_context("") + .with_blocknumber(0) .with_controller(controller) .with_min_init() - .with_min_event_height() .build_fencepost(); let end = EventId::builder() .with_network(&network) .with_sort_value("model", model) + .with_context("") + .with_blocknumber(0) .with_controller(controller) .with_max_init() - .with_max_event_height() .build_fencepost(); let mut mock_interest = MockReconInterestTest::new(); mock_interest @@ -519,16 +557,18 @@ mod tests { let start = EventId::builder() .with_network(&network) .with_sort_value("model", model) + .with_context("") + .with_blocknumber(0) .with_controller(controller) .with_init(&stream.cid) - .with_min_event_height() .build_fencepost(); let end = EventId::builder() .with_network(&network) .with_sort_value("model", model) + .with_context("") + .with_blocknumber(0) .with_controller(controller) .with_init(&stream.cid) - .with_max_event_height() .build_fencepost(); let mut mock_interest = MockReconInterestTest::new(); mock_interest @@ -575,6 +615,8 @@ mod tests { let peer_id = PeerId::random(); let network = Network::InMemory; let model = "k2t6wz4ylx0qr6v7dvbczbxqy7pqjb0879qx930c1e27gacg3r8sllonqt4xx9"; // cspell:disable-line + let context = ""; + let blocknumber = 0; let controller = "did:key:zGs1Det7LHNeu7DXT4nvoYrPfj3n6g7d6bj2K4AMXEvg1"; let stream = StreamId::from_str("k2t6wz4ylx0qs435j9oi1s6469uekyk6qkxfcb21ikm5ag2g1cook14ole90aw") // cspell:disable-line @@ -582,16 +624,18 @@ mod tests { let start = EventId::builder() .with_network(&network) .with_sort_value("model", model) + .with_context(context) + .with_blocknumber(blocknumber) .with_controller(controller) .with_init(&stream.cid) - .with_min_event_height() .build_fencepost(); let end = EventId::builder() .with_network(&network) .with_sort_value("model", model) + .with_context(context) + .with_blocknumber(blocknumber) .with_controller(controller) .with_init(&stream.cid) - .with_max_event_height() .build_fencepost(); let mut mock_interest = MockReconInterestTest::new(); mock_interest diff --git a/core/src/event_id.rs b/core/src/event_id.rs index 196255c02..c61996437 100644 --- a/core/src/event_id.rs +++ b/core/src/event_id.rs @@ -1,18 +1,15 @@ //! EventId generates EventIDs from event data. //! -//! varint(0xce) + // streamid, 1 byte -//! varint(0x05) + // cip-124 EventID, 1 byte -//! varint(networkId), // 1 byte (5 for local network) -//! last8Bytes(sha256(separator_key + "|" + separator_value)), // 16 bytes -//! last8Bytes(sha256(stream_controller_DID)), // 16 bytes -//! last4Bytes(init_event_CID) // 8 bytes -//! cbor(eventHeight), // 1-3 bytes -//! eventCID // 36 bytes -//! 0x01 cidv1, 1 byte -//! 0x71 dag-cbor, 1 byte -//! 0x12 sha2-256, 1byte -//! 0x20 varint(hash length), 1 byte -//! hash bytes, 32 bytes +//! varint(0xce) + // streamid, 2 bytes b'\xce\x01' +//! varint(0x05) + // cip-124_EventID, 1 byte b'\x05' +//! varint(networkId), // networkId 1 byte wellknown or 5 bytes for local network +//! last8Bytes(sha256(separator_key + "|" + separator_value)), // separator 16 bytes +//! context // first 8 bytes provided by application, 0 pad at end to 8 bytes, truncate to 8 bytes +//! cbor(blockNumber), // u64_max 9 bytes +//! last8Bytes(sha256(stream_controller_DID)), // controller 8 bytes +//! last4Bytes(init_event_CID) // stream 4 bytes +//! eventCID // mostly 36 bytes but could be inline CID +//! 2 + 1 + 5 + 8 + 8 + 9 + 8 + 4 + 36 = 81 #![warn(missing_docs, missing_debug_implementations, clippy::all)] use cid::{ @@ -37,25 +34,6 @@ impl EventId { pub fn builder() -> Builder { Builder { state: Init } } - /// EventId.new builds a Vec with the event id data. - pub fn new( - network: &Network, - sort_key: &str, - sort_value: &str, - controller: &str, - init: &Cid, - event_height: u64, - event_cid: &Cid, - ) -> EventId { - EventId::builder() - .with_network(network) - .with_sort_value(sort_key, sort_value) - .with_controller(controller) - .with_init(init) - .with_event_height(event_height) - .with_event(event_cid) - .build() - } /// Extract the raw bytes from an EventId pub fn to_bytes(&self) -> Vec { @@ -80,10 +58,10 @@ impl EventId { let (_network_id, mut remainder) = de_varint(remainder).unwrap_or_default(); - // strip separator [u8; 8] controller [u8; 8] StreamID [u8; 4] - remainder = &remainder[(8 + 8 + 4)..]; + // strip separator [u8; 8] context [u8; 8] + remainder = &remainder[(8 + 8)..]; - // height cbor unsigned integer + // blockNumber cbor unsigned integer if remainder[0] <= 23 { // 0 - 23 remainder = &remainder[1..] @@ -103,6 +81,10 @@ impl EventId { // not a cbor unsigned int return None; }; + + // strip controller [u8; 8] StreamID [u8; 4] + remainder = &remainder[(8 + 4)..]; + match Cid::read_bytes(remainder) { Ok(v) => Some(v), Err(_) => None, // not a CID @@ -150,6 +132,13 @@ fn sha256_digest(s: &str) -> [u8; 32] { hasher.finalize().try_into().unwrap() } +fn pad8_bytes(buf: &[u8]) -> [u8; 8] { + let mut bytes: [u8; 8] = [0; 8]; + let length = if buf.len() > 8 { 8 } else { buf.len() }; + bytes[..length].copy_from_slice(&buf[..length]); + bytes +} + fn last8_bytes(buf: &[u8]) -> &[u8] { &buf[(buf.len() - 8)..] } @@ -190,6 +179,20 @@ pub struct WithSortValue { } impl BuilderState for WithSortValue {} +/// Builder with context set. +#[derive(Debug)] +pub struct WithContext { + bytes: Vec, +} +impl BuilderState for WithContext {} + +/// Builder with context set. +#[derive(Debug)] +pub struct WithBlockNumber { + bytes: Vec, +} +impl BuilderState for WithBlockNumber {} + /// Builder with controller set. #[derive(Debug)] pub struct WithController { @@ -204,13 +207,6 @@ pub struct WithInit { } impl BuilderState for WithInit {} -/// Builder with event height set. -#[derive(Debug)] -pub struct WithEventHeight { - bytes: Vec, -} -impl BuilderState for WithEventHeight {} - /// Builder with event CID set. #[derive(Debug)] pub struct WithEvent { @@ -220,18 +216,11 @@ impl BuilderState for WithEvent {} impl Builder { pub fn with_network(self, network: &Network) -> Builder { - // Maximum EventId size is 72. - // - // varint(0xce) + // streamid, 1 byte - // varint(0x05) + // cip-124 EventID, 1 byte - // varint(networkId), // 5 bytes for local network - //! last8Bytes(sha256(separator_key + "|" + separator_value)), // 16 bytes - // last8Bytes(sha256(stream_controller_DID)), // 8 bytes - // last4Bytes(init_event_CID) // 4 bytes - // cbor(eventHeight), // u64_max 9 bytes - // eventCID // mostly 36 bytes but could be inline CID - - let mut bytes = Vec::with_capacity(72); + //! varint(0xce) + // streamid, 2 bytes b'\xce\x01' + //! varint(0x05) + // cip-124_EventID, 1 byte b'\x05' + //! varint(networkId), // networkId 1 byte wellknown or 5 bytes for local network + + let mut bytes = Vec::with_capacity(128); // streamid varint bytes.extend(varint(0xce, &mut [0_u8; 10])); // cip-124 EventID varint @@ -244,7 +233,7 @@ impl Builder { } } impl Builder { - // TODO sort_value should be bytes not str + // last8Bytes(sha256(separator_key + "|" + separator_value)), // separator 16 bytes pub fn with_sort_value(mut self, sort_key: &str, sort_value: &str) -> Builder { self.state.bytes.extend(last8_bytes(&sha256_digest(&format!( "{}|{}", @@ -258,6 +247,36 @@ impl Builder { } } impl Builder { + // context // first 8 bytes provided by application, 0 pad at end to 8 bytes, truncate to 8 bytes + pub fn with_context(mut self, context: &str) -> Builder { + self.state + .bytes + .extend(last8_bytes(&pad8_bytes(context.as_bytes()))); + Builder { + state: WithContext { + bytes: self.state.bytes, + }, + } + } +} +impl Builder { + // cbor(blockNumber), // u64_max 9 bytes + pub fn with_blocknumber(mut self, blocknumber: u64) -> Builder { + let blocknumber_cbor = minicbor::to_vec(blocknumber).unwrap(); + self.state.bytes.extend(blocknumber_cbor); + Builder { + state: WithBlockNumber { + bytes: self.state.bytes, + }, + } + } + + pub fn with_max_blocknumber_fencepost(mut self) -> EventId { + self.state.bytes.extend(&[0xFF; 1]); // 0xff is grater then all CBOR numbers + EventId(self.state.bytes) + } +} +impl Builder { pub fn with_min_controller(mut self) -> Builder { self.state.bytes.extend(ZEROS_8); Builder { @@ -274,6 +293,7 @@ impl Builder { }, } } + // last8Bytes(sha256(stream_controller_DID)), // controller 8 bytes pub fn with_controller(mut self, controller: &str) -> Builder { self.state .bytes @@ -302,6 +322,7 @@ impl Builder { }, } } + // last4Bytes(init_event_CID) // stream 4 bytes pub fn with_init(mut self, init: &Cid) -> Builder { self.state .bytes @@ -313,42 +334,26 @@ impl Builder { } } } -impl Builder { - pub fn with_min_event_height(mut self) -> Builder { - // 0x00 is the cbor encoding of 0. - self.state.bytes.push(0x00); - Builder { - state: WithEventHeight { - bytes: self.state.bytes, - }, - } - } - pub fn with_max_event_height(mut self) -> Builder { - // 0xFF is the break stop code in CBOR, and will sort higher than any cbor encoded unsigned - // integer. - self.state.bytes.push(0xFF); - Builder { - state: WithEventHeight { - bytes: self.state.bytes, - }, - } - } - pub fn with_event_height(mut self, event_height: u64) -> Builder { - let event_height_cbor = minicbor::to_vec(event_height).unwrap(); - // event_height cbor unsigned int - self.state.bytes.extend(event_height_cbor); + +impl Builder { + // last4Bytes(init_event_CID) // stream 4 bytes + pub fn with_event(mut self, init: &Cid) -> Builder { + self.state + .bytes + .extend(last4_bytes(init.to_bytes().as_slice())); Builder { - state: WithEventHeight { + state: WithInit { bytes: self.state.bytes, }, } } } -impl Builder { +impl Builder { /// Builds the final EventId as a fencepost pub fn build_fencepost(self) -> EventId { EventId(self.state.bytes) } + // eventCID // mostly 36 bytes but could be inline CID pub fn with_event(mut self, event: &Cid) -> Builder { self.state.bytes.extend(event.to_bytes()); Builder { @@ -379,69 +384,68 @@ mod tests { let controller = "did:key:z6MkgSV3tAuw7gUWqKCUY7ae6uWNxqYgdwPhUJbJhF9EFXm9".to_string(); let init = Cid::from_str("bagcqceraplay4erv6l32qrki522uhiz7rf46xccwniw7ypmvs3cvu2b3oulq").unwrap(); // cspell:disable-line - let event_height = 255; // so we get 2 bytes b'\x18\xff' let event_cid = Cid::from_str("bafyreihu557meceujusxajkaro3epfe6nnzjgbjaxsapgtml7ox5ezb5qy").unwrap(); // cspell:disable-line - let eid = EventId::new( - &Network::Mainnet, - &sort_key, - &separator, - &controller, - &init, - event_height, - &event_cid, - ); + let eid = EventId::builder() + .with_network(&Network::Mainnet) + .with_sort_value(&sort_key, &separator) + .with_context("") + .with_blocknumber(18679472) + .with_controller(&controller) + .with_init(&init) + .with_event(&event_cid) + .build(); expect![[ - "fce0105007e710e217fa0e25945cc7c072ff729ea683b751718ff01711220f4ef7ec208944d257025408bb647949e6b72930520bc80f34d8bfbafd2643d86" + "fce0105007e710e217fa0e25900000000000000001a011d06b045cc7c072ff729ea683b751701711220f4ef7ec208944d257025408bb647949e6b72930520bc80f34d8bfbafd2643d86" ]] .assert_eq(&multibase::encode(Base::Base16Lower, eid.0)); - let eid = EventId::new( - &Network::TestnetClay, - &sort_key, - &separator, - &controller, - &init, - event_height, - &event_cid, - ); - expect!["fce0105017e710e217fa0e25945cc7c072ff729ea683b751718ff01711220f4ef7ec208944d257025408bb647949e6b72930520bc80f34d8bfbafd2643d86"] + let eid = EventId::builder() + .with_network(&Network::TestnetClay) + .with_sort_value(&sort_key, &separator) + .with_context("") + .with_blocknumber(18679472) + .with_controller(&controller) + .with_init(&init) + .with_event(&event_cid) + .build(); + expect!["fce0105017e710e217fa0e25900000000000000001a011d06b045cc7c072ff729ea683b751701711220f4ef7ec208944d257025408bb647949e6b72930520bc80f34d8bfbafd2643d86"] .assert_eq(&multibase::encode(Base::Base16Lower, eid.0)); - let eid = EventId::new( - &Network::DevUnstable, - &sort_key, - &separator, - &controller, - &init, - event_height, - &event_cid, - ); - expect!["fce0105027e710e217fa0e25945cc7c072ff729ea683b751718ff01711220f4ef7ec208944d257025408bb647949e6b72930520bc80f34d8bfbafd2643d86"] + let eid = EventId::builder() + .with_network(&Network::DevUnstable) + .with_sort_value(&sort_key, &separator) + .with_context("") + .with_blocknumber(18679472) + .with_controller(&controller) + .with_init(&init) + .with_event(&event_cid) + .build(); + expect!["fce0105027e710e217fa0e25900000000000000001a011d06b045cc7c072ff729ea683b751701711220f4ef7ec208944d257025408bb647949e6b72930520bc80f34d8bfbafd2643d86"] .assert_eq(&multibase::encode(Base::Base16Lower, eid.0)); - let eid = EventId::new( - &Network::InMemory, - &sort_key, - &separator, - &controller, - &init, - event_height, - &event_cid, - ); - expect!["fce0105ff017e710e217fa0e25945cc7c072ff729ea683b751718ff01711220f4ef7ec208944d257025408bb647949e6b72930520bc80f34d8bfbafd2643d86"].assert_eq(&multibase::encode(Base::Base16Lower, eid.0)); - - let eid = EventId::new( - &Network::Local(0xce4a441c), - &sort_key, - &separator, - &controller, - &init, - event_height, - &event_cid, - ); - expect!["fce01059c88a9f21c7e710e217fa0e25945cc7c072ff729ea683b751718ff01711220f4ef7ec208944d257025408bb647949e6b72930520bc80f34d8bfbafd2643d86"].assert_eq(&multibase::encode(Base::Base16Lower, eid.0)); + let eid = EventId::builder() + .with_network(&Network::InMemory) + .with_sort_value(&sort_key, &separator) + .with_context("") + .with_blocknumber(18679472) + .with_controller(&controller) + .with_init(&init) + .with_event(&event_cid) + .build(); + expect!["fce0105ff017e710e217fa0e25900000000000000001a011d06b045cc7c072ff729ea683b751701711220f4ef7ec208944d257025408bb647949e6b72930520bc80f34d8bfbafd2643d86"].assert_eq(&multibase::encode(Base::Base16Lower, eid.0)); + + let eid = EventId::builder() + .with_network(&Network::Local(0xce4a441c)) + .with_sort_value(&sort_key, &separator) + .with_context("") + .with_blocknumber(18679472) + .with_controller(&controller) + .with_init(&init) + .with_event(&event_cid) + .build(); + expect!["fce01059c88a9f21c7e710e217fa0e25900000000000000001a011d06b045cc7c072ff729ea683b751701711220f4ef7ec208944d257025408bb647949e6b72930520bc80f34d8bfbafd2643d86"].assert_eq(&multibase::encode(Base::Base16Lower, eid.0)); } #[test] @@ -451,101 +455,111 @@ mod tests { let controller = "did:key:z6MkgSV3tAuw7gUWqKCUY7ae6uWNxqYgdwPhUJbJhF9EFXm9".to_string(); let init = Cid::from_str("bagcqceraplay4erv6l32qrki522uhiz7rf46xccwniw7ypmvs3cvu2b3oulq").unwrap(); // cspell:disable-line - let event_height = 255; // so we get 2 bytes b'\x18\xff' let event_cid = Cid::from_str("bafyreihu557meceujusxajkaro3epfe6nnzjgbjaxsapgtml7ox5ezb5qy").unwrap(); // cspell:disable-line - let received = EventId::new( - &Network::Mainnet, - &sort_key, - &separator, - &controller, - &init, - event_height, - &event_cid, - ); + let received = EventId::builder() + .with_network(&Network::Mainnet) + .with_sort_value(&sort_key, &separator) + .with_context("0123456789") + .with_blocknumber(18679472) + .with_controller(&controller) + .with_init(&init) + .with_event(&event_cid) + .build(); let received_cbor = hex::encode(serde_ipld_dagcbor::ser::to_vec(&received).unwrap()); println!("serde_json {}", serde_json::to_string(&received).unwrap()); // Message as json expect![[ - "583ece0105007e710e217fa0e25945cc7c072ff729ea683b751718ff01711220f4ef7ec208944d257025408bb647949e6b72930520bc80f34d8bfbafd2643d86" + "5849ce0105007e710e217fa0e25930313233343536371a011d06b045cc7c072ff729ea683b751701711220f4ef7ec208944d257025408bb647949e6b72930520bc80f34d8bfbafd2643d86" ]].assert_eq(&received_cbor); } #[test] fn test_deserialize() { - let bytes = hex::decode("583ece0105007e710e217fa0e25945cc7c072ff729ea683b751718ff01711220f4ef7ec208944d257025408bb647949e6b72930520bc80f34d8bfbafd2643d86").unwrap(); + let bytes = hex::decode("5849ce0105007e710e217fa0e25930313233343536371a011d06b045cc7c072ff729ea683b751701711220f4ef7ec208944d257025408bb647949e6b72930520bc80f34d8bfbafd2643d86").unwrap(); let x = serde_ipld_dagcbor::de::from_slice(bytes.as_slice()); let received: EventId = x.unwrap(); let cid = received.cid(); println!("{:?}, {:?}", &received, &cid); expect![[r#" - EventId( - [ - 206, - 1, - 5, - 0, - 126, - 113, - 14, - 33, - 127, - 160, - 226, - 89, - 69, - 204, - 124, - 7, - 47, - 247, - 41, - 234, - 104, - 59, - 117, - 23, - 24, - 255, - 1, - 113, - 18, - 32, - 244, - 239, - 126, - 194, - 8, - 148, - 77, - 37, - 112, - 37, - 64, - 139, - 182, - 71, - 148, - 158, - 107, - 114, - 147, - 5, - 32, - 188, - 128, - 243, - 77, - 139, - 251, - 175, - 210, - 100, - 61, - 134, - ], - ) + EventId( + [ + 206, + 1, + 5, + 0, + 126, + 113, + 14, + 33, + 127, + 160, + 226, + 89, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 26, + 1, + 29, + 6, + 176, + 69, + 204, + 124, + 7, + 47, + 247, + 41, + 234, + 104, + 59, + 117, + 23, + 1, + 113, + 18, + 32, + 244, + 239, + 126, + 194, + 8, + 148, + 77, + 37, + 112, + 37, + 64, + 139, + 182, + 71, + 148, + 158, + 107, + 114, + 147, + 5, + 32, + 188, + 128, + 243, + 77, + 139, + 251, + 175, + 210, + 100, + 61, + 134, + ], + ) "#]] .assert_debug_eq(&received); @@ -559,19 +573,17 @@ mod tests { let controller = "did:key:z6MkgSV3tAuw7gUWqKCUY7ae6uWNxqYgdwPhUJbJhF9EFXm9".to_string(); let init = Cid::from_str("bagcqceraplay4erv6l32qrki522uhiz7rf46xccwniw7ypmvs3cvu2b3oulq").unwrap(); // cspell:disable-line - let event_height = 255; // so we get 2 bytes b'\x18\xff' let event_cid = Cid::from_str("bafyreihu557meceujusxajkaro3epfe6nnzjgbjaxsapgtml7ox5ezb5qy").unwrap(); // cspell:disable-line - - let event_id = EventId::new( - &Network::Mainnet, - &sort_key, - &separator, - &controller, - &init, - event_height, - &event_cid, - ); + let event_id = EventId::builder() + .with_network(&Network::Mainnet) + .with_sort_value(&sort_key, &separator) + .with_context("0123456789") + .with_blocknumber(18679472) + .with_controller(&controller) + .with_init(&init) + .with_event(&event_cid) + .build(); assert_eq!(Some(event_cid), event_id.cid()); } #[test] @@ -586,9 +598,10 @@ mod tests { let event_id = EventId::builder() .with_network(&Network::Mainnet) .with_sort_value(&sort_key, &separator) + .with_context("1234567890") + .with_blocknumber(18679472) .with_controller(&controller) .with_init(&init) - .with_max_event_height() .build_fencepost(); assert_eq!(None, event_id.cid()); @@ -596,9 +609,10 @@ mod tests { let event_id = EventId::builder() .with_network(&Network::Mainnet) .with_sort_value(&sort_key, &separator) + .with_context("") + .with_blocknumber(18679472) .with_controller(&controller) .with_init(&init) - .with_min_event_height() .build_fencepost(); assert_eq!(None, event_id.cid()); } diff --git a/recon/src/libp2p/tests.rs b/recon/src/libp2p/tests.rs index 7fa5109d9..c5a196e78 100644 --- a/recon/src/libp2p/tests.rs +++ b/recon/src/libp2p/tests.rs @@ -80,33 +80,33 @@ fn build_swarm(runtime: &Runtime, name: &str, config: Config) -> SwarmTest { BTreeStore::from_set( [ // Initialize with three events - EventId::new( - &Network::Mainnet, - "model", - &format!("{}_model", name), - &format!("{}_controller", name), - &random_cid(), - 10, - &random_cid(), - ), - EventId::new( - &Network::Mainnet, - "model", - &format!("{}_model", name), - &format!("{}_controller", name), - &random_cid(), - 10, - &random_cid(), - ), - EventId::new( - &Network::Mainnet, - "model", - &format!("{}_model", name), - &format!("{}_controller", name), - &random_cid(), - 10, - &random_cid(), - ), + EventId::builder() + .with_network(&Network::Mainnet) + .with_sort_value("model", &format!("{}_model", name)) + .with_context("") + .with_blocknumber(0) + .with_controller(&format!("{}_controller", name)) + .with_init(&random_cid()) + .with_event(&random_cid()) + .build(), + EventId::builder() + .with_network(&Network::Mainnet) + .with_sort_value("model", &format!("{}_model", name)) + .with_context("") + .with_blocknumber(0) + .with_controller(&format!("{}_controller", name)) + .with_init(&random_cid()) + .with_event(&random_cid()) + .build(), + EventId::builder() + .with_network(&Network::Mainnet) + .with_sort_value("model", &format!("{}_model", name)) + .with_context("") + .with_blocknumber(0) + .with_controller(&format!("{}_controller", name)) + .with_init(&random_cid()) + .with_event(&random_cid()) + .build(), ] .into(), ),