Skip to content

Commit a1eecb8

Browse files
authored
Merge pull request #2710 from input-output-hk/jpraynaud/2674-dmq-devnet-e2e
feat: integrate Haskell DMQ network
2 parents bbb0c06 + 2c9cd08 commit a1eecb8

File tree

51 files changed

+810
-214
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+810
-214
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ As a minor extension, we have adopted a slightly different versioning convention
2424
- Client CLI:
2525
- Added `--epoch` optional parameter to `cardano-database snapshot list` commands snapshots, the given value can be a number, `latest`, or `latest-{offset}`.
2626

27+
- **UNSTABLE** :
28+
- Support for Haskell DMQ node and modifications of the DMQ protocol.
29+
2730
- Crates versions:
2831

2932
| Crate | Version |

Cargo.lock

Lines changed: 11 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/mithril-dmq/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[package]
22
name = "mithril-dmq"
33
description = "Mechanisms to publish and consume messages of a 'Decentralized Message Queue network' through a DMQ node"
4-
version = "0.1.12"
4+
version = "0.1.13"
55
authors.workspace = true
66
documentation.workspace = true
77
edition.workspace = true
@@ -30,6 +30,7 @@ serde = { workspace = true }
3030
serde_bytes = "0.11.19"
3131
slog = { workspace = true }
3232
slog-scope = "4.4.0"
33+
thiserror = { workspace = true }
3334
tokio = { workspace = true, features = ["sync","rt-multi-thread"] }
3435

3536
[dev-dependencies]

internal/mithril-dmq/src/consumer/client/pallas.rs

Lines changed: 43 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6,30 +6,30 @@ use slog::{Logger, debug, error};
66
use tokio::sync::{Mutex, MutexGuard};
77

88
use mithril_common::{
9-
CardanoNetwork, StdResult,
9+
StdResult,
1010
crypto_helper::{
1111
OpCert, OpCertWithoutColdVerificationKey, TryFromBytes, ed25519::Ed25519VerificationKey,
1212
},
1313
entities::PartyId,
1414
logging::LoggerExtensions,
1515
};
1616

17-
use crate::DmqConsumerClient;
17+
use crate::{DmqConsumerClient, model::DmqNetwork};
1818

1919
/// A DMQ client consumer implementation.
2020
///
2121
/// This implementation is built upon the n2c mini-protocols DMQ implementation in Pallas.
2222
pub struct DmqConsumerClientPallas<M: TryFromBytes + Debug> {
2323
socket: PathBuf,
24-
network: CardanoNetwork,
24+
network: DmqNetwork,
2525
client: Mutex<Option<DmqClient>>,
2626
logger: Logger,
2727
phantom: PhantomData<M>,
2828
}
2929

3030
impl<M: TryFromBytes + Debug> DmqConsumerClientPallas<M> {
3131
/// Creates a new `DmqConsumerClientPallas` instance.
32-
pub fn new(socket: PathBuf, network: CardanoNetwork, logger: Logger) -> Self {
32+
pub fn new(socket: PathBuf, network: DmqNetwork, logger: Logger) -> Self {
3333
Self {
3434
socket,
3535
network,
@@ -115,11 +115,13 @@ impl<M: TryFromBytes + Debug> DmqConsumerClientPallas<M> {
115115
.0
116116
.into_iter()
117117
.map(|dmq_message| {
118-
let opcert_without_verification_key =
119-
OpCertWithoutColdVerificationKey::try_from_bytes(
120-
&dmq_message.operational_certificate,
121-
)
122-
.with_context(|| "Failed to parse operational certificate")?;
118+
let opcert_without_verification_key = OpCertWithoutColdVerificationKey::try_new(
119+
&dmq_message.operational_certificate.kes_vk,
120+
dmq_message.operational_certificate.issue_number,
121+
dmq_message.operational_certificate.start_kes_period,
122+
&dmq_message.operational_certificate.cert_sig,
123+
)
124+
.with_context(|| "Failed to parse operational certificate")?;
123125
let cold_verification_key =
124126
Ed25519VerificationKey::from_bytes(&dmq_message.cold_verification_key)
125127
.with_context(|| "Failed to parse cold verification key")?
@@ -171,7 +173,7 @@ mod tests {
171173
facades::DmqServer,
172174
miniprotocols::{
173175
localmsgnotification,
174-
localmsgsubmission::{DmqMsg, DmqMsgPayload},
176+
localmsgsubmission::{DmqMsg, DmqMsgOperationalCertificate, DmqMsgPayload},
175177
},
176178
};
177179
use tokio::{net::UnixListener, task::JoinHandle, time::sleep};
@@ -194,14 +196,20 @@ mod tests {
194196
expires_at: 100,
195197
},
196198
kes_signature: vec![0, 1, 2, 3],
197-
operational_certificate: vec![
198-
132, 88, 32, 230, 80, 215, 83, 21, 9, 187, 108, 255, 215, 153, 140, 40, 198,
199-
142, 78, 200, 250, 98, 26, 9, 82, 32, 110, 161, 30, 176, 63, 205, 125, 203, 41,
200-
0, 0, 88, 64, 212, 171, 206, 39, 218, 5, 255, 3, 193, 52, 44, 198, 171, 83, 19,
201-
80, 114, 225, 186, 191, 156, 192, 84, 146, 245, 159, 31, 240, 9, 247, 4, 87,
202-
170, 168, 98, 199, 21, 139, 19, 190, 12, 251, 65, 215, 169, 26, 86, 37, 137,
203-
188, 17, 14, 178, 205, 175, 93, 39, 86, 4, 138, 187, 234, 95, 5,
204-
],
199+
operational_certificate: DmqMsgOperationalCertificate {
200+
kes_vk: vec![
201+
50, 45, 160, 42, 80, 78, 184, 20, 210, 77, 140, 152, 63, 49, 165, 168, 5,
202+
131, 101, 152, 110, 242, 144, 157, 176, 210, 5, 10, 166, 91, 196, 168,
203+
],
204+
issue_number: 0,
205+
start_kes_period: 0,
206+
cert_sig: vec![
207+
207, 135, 144, 168, 238, 41, 179, 216, 245, 74, 164, 231, 4, 158, 234, 141,
208+
5, 19, 166, 11, 78, 34, 210, 211, 183, 72, 127, 83, 185, 156, 107, 55, 160,
209+
190, 73, 251, 204, 47, 197, 86, 174, 231, 13, 49, 7, 83, 173, 177, 27, 53,
210+
209, 66, 24, 203, 226, 152, 3, 91, 66, 56, 244, 206, 79, 0,
211+
],
212+
},
205213
cold_verification_key: vec![
206214
32, 253, 186, 201, 177, 11, 117, 135, 187, 167, 181, 188, 22, 59, 206, 105,
207215
231, 150, 215, 30, 78, 212, 76, 16, 252, 180, 72, 134, 137, 247, 161, 68,
@@ -215,14 +223,20 @@ mod tests {
215223
expires_at: 101,
216224
},
217225
kes_signature: vec![1, 2, 3, 4],
218-
operational_certificate: vec![
219-
132, 88, 32, 230, 80, 215, 83, 21, 9, 187, 108, 255, 215, 153, 140, 40, 198,
220-
142, 78, 200, 250, 98, 26, 9, 82, 32, 110, 161, 30, 176, 63, 205, 125, 203, 41,
221-
0, 0, 88, 64, 212, 171, 206, 39, 218, 5, 255, 3, 193, 52, 44, 198, 171, 83, 19,
222-
80, 114, 225, 186, 191, 156, 192, 84, 146, 245, 159, 31, 240, 9, 247, 4, 87,
223-
170, 168, 98, 199, 21, 139, 19, 190, 12, 251, 65, 215, 169, 26, 86, 37, 137,
224-
188, 17, 14, 178, 205, 175, 93, 39, 86, 4, 138, 187, 234, 95, 5,
225-
],
226+
operational_certificate: DmqMsgOperationalCertificate {
227+
kes_vk: vec![
228+
50, 45, 160, 42, 80, 78, 184, 20, 210, 77, 140, 152, 63, 49, 165, 168, 5,
229+
131, 101, 152, 110, 242, 144, 157, 176, 210, 5, 10, 166, 91, 196, 168,
230+
],
231+
issue_number: 0,
232+
start_kes_period: 0,
233+
cert_sig: vec![
234+
207, 135, 144, 168, 238, 41, 179, 216, 245, 74, 164, 231, 4, 158, 234, 141,
235+
5, 19, 166, 11, 78, 34, 210, 211, 183, 72, 127, 83, 185, 156, 107, 55, 160,
236+
190, 73, 251, 204, 47, 197, 86, 174, 231, 13, 49, 7, 83, 173, 177, 27, 53,
237+
209, 66, 24, 203, 226, 152, 3, 91, 66, 56, 244, 206, 79, 0,
238+
],
239+
},
226240
cold_verification_key: vec![
227241
77, 75, 24, 6, 47, 133, 2, 89, 141, 224, 69, 202, 123, 105, 240, 103, 245, 159,
228242
147, 177, 110, 58, 248, 115, 58, 152, 138, 220, 35, 65, 245, 200,
@@ -278,7 +292,7 @@ mod tests {
278292

279293
let consumer = DmqConsumerClientPallas::new(
280294
socket_path,
281-
CardanoNetwork::TestNet(0),
295+
DmqNetwork::TestNet(0),
282296
TestLogger::stdout(),
283297
);
284298

@@ -314,7 +328,7 @@ mod tests {
314328

315329
let consumer = DmqConsumerClientPallas::<DmqMessageTestPayload>::new(
316330
socket_path,
317-
CardanoNetwork::TestNet(0),
331+
DmqNetwork::TestNet(0),
318332
TestLogger::stdout(),
319333
);
320334

@@ -341,7 +355,7 @@ mod tests {
341355

342356
let consumer = DmqConsumerClientPallas::<DmqMessageTestPayload>::new(
343357
socket_path,
344-
CardanoNetwork::TestNet(0),
358+
DmqNetwork::TestNet(0),
345359
TestLogger::stdout(),
346360
);
347361

internal/mithril-dmq/src/consumer/server/pallas.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,16 @@ use tokio::{
1111

1212
use slog::{Logger, debug, error, info, warn};
1313

14-
use mithril_common::{CardanoNetwork, StdResult, logging::LoggerExtensions};
14+
use mithril_common::{StdResult, logging::LoggerExtensions};
1515

16-
use crate::{DmqConsumerServer, DmqMessage};
16+
use crate::{DmqConsumerServer, DmqMessage, DmqNetwork};
1717

1818
use super::queue::MessageQueue;
1919

2020
/// A DMQ server implementation for messages notification from a DMQ node.
2121
pub struct DmqConsumerServerPallas {
2222
socket: PathBuf,
23-
network: CardanoNetwork,
23+
network: DmqNetwork,
2424
server: Mutex<Option<DmqServer>>,
2525
messages_receiver: Mutex<Option<UnboundedReceiver<DmqMessage>>>,
2626
messages_buffer: MessageQueue,
@@ -32,7 +32,7 @@ impl DmqConsumerServerPallas {
3232
/// Creates a new instance of [DmqConsumerServerPallas].
3333
pub fn new(
3434
socket: PathBuf,
35-
network: CardanoNetwork,
35+
network: DmqNetwork,
3636
stop_rx: Receiver<()>,
3737
logger: Logger,
3838
) -> Self {
@@ -303,10 +303,10 @@ mod tests {
303303
let (stop_tx, stop_rx) = watch::channel(());
304304
let (signature_dmq_tx, signature_dmq_rx) = unbounded_channel::<DmqMessage>();
305305
let socket_path = create_temp_dir(current_function_name).join("node.socket");
306-
let cardano_network = CardanoNetwork::TestNet(0);
306+
let dmq_network = DmqNetwork::TestNet(0);
307307
let dmq_consumer_server = Arc::new(DmqConsumerServerPallas::new(
308308
socket_path.to_path_buf(),
309-
cardano_network.to_owned(),
309+
dmq_network.to_owned(),
310310
stop_rx,
311311
TestLogger::stdout(),
312312
));
@@ -363,10 +363,10 @@ mod tests {
363363
let (stop_tx, stop_rx) = watch::channel(());
364364
let (signature_dmq_tx, signature_dmq_rx) = unbounded_channel::<DmqMessage>();
365365
let socket_path = create_temp_dir(current_function_name).join("node.socket");
366-
let cardano_network = CardanoNetwork::TestNet(0);
366+
let dmq_network = DmqNetwork::TestNet(0);
367367
let dmq_consumer_server = Arc::new(DmqConsumerServerPallas::new(
368368
socket_path.to_path_buf(),
369-
cardano_network.to_owned(),
369+
dmq_network.to_owned(),
370370
stop_rx,
371371
TestLogger::stdout(),
372372
));
@@ -422,10 +422,10 @@ mod tests {
422422
let (_stop_tx, stop_rx) = watch::channel(());
423423
let (_signature_dmq_tx, signature_dmq_rx) = unbounded_channel::<DmqMessage>();
424424
let socket_path = create_temp_dir(current_function!()).join("node.socket");
425-
let cardano_network = CardanoNetwork::TestNet(0);
425+
let dmq_network = DmqNetwork::TestNet(0);
426426
let dmq_consumer_server = Arc::new(DmqConsumerServerPallas::new(
427427
socket_path.to_path_buf(),
428-
cardano_network.to_owned(),
428+
dmq_network.to_owned(),
429429
stop_rx,
430430
TestLogger::stdout(),
431431
));

internal/mithril-dmq/src/consumer/server/queue.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,9 @@ mod tests {
122122
use std::{ops::RangeInclusive, time::Duration};
123123

124124
use anyhow::anyhow;
125-
use pallas_network::miniprotocols::localmsgsubmission::{DmqMsg, DmqMsgPayload};
125+
use pallas_network::miniprotocols::localmsgsubmission::{
126+
DmqMsg, DmqMsgOperationalCertificate, DmqMsgPayload,
127+
};
126128
use tokio::time::sleep;
127129

128130
use crate::model::MockUnixTimestampProvider;
@@ -138,7 +140,12 @@ mod tests {
138140
expires_at: 100,
139141
},
140142
kes_signature: vec![0, 1, 2, 3],
141-
operational_certificate: vec![0, 1, 2, 3, 4],
143+
operational_certificate: DmqMsgOperationalCertificate {
144+
kes_vk: vec![12, 13, 14],
145+
issue_number: 15,
146+
start_kes_period: 16,
147+
cert_sig: vec![17],
148+
},
142149
cold_verification_key: vec![0, 1, 2, 3, 4, 5],
143150
}
144151
}

internal/mithril-dmq/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ pub mod test;
99
#[cfg(unix)]
1010
pub use consumer::DmqConsumerServerPallas;
1111
pub use consumer::{DmqConsumerClient, DmqConsumerClientPallas, DmqConsumerServer};
12-
pub use model::{DmqMessage, DmqMessageBuilder};
12+
pub use model::{DmqMessage, DmqMessageBuilder, DmqNetwork};
1313
#[cfg(unix)]
1414
pub use publisher::DmqPublisherServerPallas;
1515
pub use publisher::{DmqPublisherClient, DmqPublisherClientPallas, DmqPublisherServer};

0 commit comments

Comments
 (0)