fix(network): fix bad codec for tx monitoring messages (#298)

This commit is contained in:
Santiago Carmuega 2023-10-03 14:26:11 -03:00 committed by GitHub
parent dea731d58b
commit 90b228492c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 6 deletions

View file

@ -80,12 +80,13 @@ impl<'b> Decode<'b, ()> for Message {
// find the specs
4 => Ok(Message::AwaitAcquire),
5 => Ok(Message::RequestNextTx),
6 => match d.array()? {
Some(_) => {
let cbor: pallas_codec::utils::CborWrap<Tx> = d.decode()?;
Ok(Message::ResponseNextTx(Some(cbor.unwrap())))
6 => match d.datatype()? {
pallas_codec::minicbor::data::Type::Array
| pallas_codec::minicbor::data::Type::ArrayIndef => {
let tx = d.decode()?;
Ok(Message::ResponseNextTx(Some(tx)))
}
None => Ok(Message::ResponseNextTx(None)),
_ => Ok(Message::ResponseNextTx(None)),
},
7 => {
let id = d.decode()?;
@ -112,3 +113,21 @@ impl<'b> Decode<'b, ()> for Message {
}
}
}
#[cfg(test)]
pub mod tests {
const EXAMPLE_RESPONSE_NEXT_TX_WITH_DATA: &str = "82068205d81859013184a5008282582003e4aea27ebacf5f50b10ac60cc84deba96569ce8a47fdf9199998d1fd16ec0601825820eebf8249544b7eefa7839510dfd58a7ed420f2254bd3bf632baea8cd0928b00102018182583901b98f57f569aba4cffc4d9c791f099374e9403ed5e2cb614eab25b78278b1312c2c271d260db425b8b9847ab142b395b4598d3c0b383aa696821a00924172a1581c09f2d4e4a5c3662f4c1e6a7d9600e9605279dbdcedb22d4507cb6e75a1435350461a0422bb35021a00029f3d031a063ec6470800a100818258208293ac2260e28a07657f77087d1d7ff5e3ced29ff4385abf60a9546e2bcbc04a5840d69ce3a8f9713513a9baf473c1be08fd17d1a85df2881dc107fb1f68ce02c8e7adcf1c91bce7fb58868908f7ac47310a8e97d95780beadcfd8493bebbb914d0df5f6";
#[test]
fn test_next_tx_response() {
let bytes = hex::decode(EXAMPLE_RESPONSE_NEXT_TX_WITH_DATA).unwrap();
let msg: super::Message = pallas_codec::minicbor::decode(&bytes).unwrap();
if let super::Message::ResponseNextTx(Some((era, body))) = msg {
assert_eq!(era, 5);
assert_eq!(body.len(), 305);
} else {
unreachable!();
}
}
}

View file

@ -1,6 +1,10 @@
use pallas_codec::utils::TagWrap;
pub type Slot = u64;
pub type TxId = String;
pub type Tx = Vec<u8>;
pub type Era = u8;
pub type TxBody = pallas_codec::utils::Bytes;
pub type Tx = (Era, TagWrap<TxBody, 24>);
#[derive(Debug, PartialEq, Eq, Clone)]
pub enum State {