Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "cardano-serialization-lib",
"version": "15.0.2-beta.1",
"version": "15.0.2-beta.2",
"description": "(De)serialization functions for the Cardano blockchain along with related utility functions",
"scripts": {
"publish-all:prod": "node scripts/build-helper.js publish-all --env prod",
Expand Down
2 changes: 1 addition & 1 deletion rust/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "cardano-serialization-lib"
version = "15.0.2-beta.1"
version = "15.0.2-beta.2"
edition = "2018"
authors = ["EMURGO"]
license = "MIT"
Expand Down
2 changes: 1 addition & 1 deletion rust/json-gen/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

116 changes: 48 additions & 68 deletions rust/src/serialization/block/fixed_block.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,54 @@ use crate::*;

impl Deserialize for FixedBlock {
fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
let ((
header,
transaction_bodies,
transaction_witness_sets,
auxiliary_data_set,
invalid_transactions,
), orig_bytes) = deserilized_with_orig_bytes(raw, |raw| -> Result<_, DeserializeError> {
deserialize_block(raw)
}).map_err(|e| e.annotate("Block"))?;
let block_hash = BlockHash(blake2b256(orig_bytes.as_ref()));
let len = raw.array()?;
let mut read_len = CBORReadLen::new(len);
read_len.read_elems(4)?;
let (header, header_bytes) =
deserilized_with_orig_bytes(raw, |raw| -> Result<_, DeserializeError> {
Ok(Header::deserialize(raw)?)
})
.map_err(|e| e.annotate("header"))?;
let transaction_bodies =
(|| -> Result<_, DeserializeError> { Ok(FixedTransactionBodies::deserialize(raw)?) })()
.map_err(|e| e.annotate("fixed_transaction_bodies"))?;
let transaction_witness_sets =
(|| -> Result<_, DeserializeError> { Ok(TransactionWitnessSets::deserialize(raw)?) })()
.map_err(|e| e.annotate("transaction_witness_sets"))?;
let auxiliary_data_set =
(|| -> Result<_, DeserializeError> { Ok(AuxiliaryDataSet::deserialize(raw)?) })()
.map_err(|e| e.annotate("auxiliary_data_set"))?;
let invalid_present = match len {
Len::Indefinite => raw.cbor_type()? == CBORType::Array,
Len::Len(4) => false,
_ => true,
};
let invalid_transactions = (|| -> Result<_, DeserializeError> {
let mut arr = Vec::new();
if invalid_present {
read_len.read_elems(1)?;
let len = raw.array()?;
while match len {
Len::Len(n) => arr.len() < n as usize,
Len::Indefinite => true,
} {
if is_break_tag(raw, "invalid_transactions")? {
break;
}
arr.push(TransactionIndex::deserialize(raw)?);
}
}
Ok(arr)
})()
.map_err(|e| e.annotate("invalid_transactions"))?;
match len {
Len::Len(_) => (),
Len::Indefinite => match raw.special()? {
CBORSpecial::Break => (),
_ => return Err(DeserializeFailure::EndingBreakMissing.into()),
},
}
let block_hash = BlockHash(blake2b256(header_bytes.as_ref()));
Ok(FixedBlock {
header,
transaction_bodies,
Expand All @@ -23,61 +61,3 @@ impl Deserialize for FixedBlock {
})
}
}

fn deserialize_block<R: BufRead + Seek>(
raw: &mut Deserializer<R>,
) -> Result<(Header, FixedTransactionBodies, TransactionWitnessSets, AuxiliaryDataSet, TransactionIndexes), DeserializeError> {
let len = raw.array()?;
let mut read_len = CBORReadLen::new(len);
read_len.read_elems(4)?;
let header = (|| -> Result<_, DeserializeError> { Ok(Header::deserialize(raw)?) })()
.map_err(|e| e.annotate("header"))?;
let transaction_bodies = (|| -> Result<_, DeserializeError> {
Ok(FixedTransactionBodies::deserialize(raw)?)
})()
.map_err(|e| e.annotate("fixed_transaction_bodies"))?;
let transaction_witness_sets = (|| -> Result<_, DeserializeError> {
Ok(TransactionWitnessSets::deserialize(raw)?)
})()
.map_err(|e| e.annotate("transaction_witness_sets"))?;
let auxiliary_data_set =
(|| -> Result<_, DeserializeError> { Ok(AuxiliaryDataSet::deserialize(raw)?) })()
.map_err(|e| e.annotate("auxiliary_data_set"))?;
let invalid_present = match len {
Len::Indefinite => raw.cbor_type()? == CBORType::Array,
Len::Len(4) => false,
_ => true,
};
let invalid_transactions = (|| -> Result<_, DeserializeError> {
let mut arr = Vec::new();
if invalid_present {
read_len.read_elems(1)?;
let len = raw.array()?;
while match len {
Len::Len(n) => arr.len() < n as usize,
Len::Indefinite => true,
} {
if is_break_tag(raw, "Block.invalid_transactions")? {
break;
}
arr.push(TransactionIndex::deserialize(raw)?);
}
}
Ok(arr)
})()
.map_err(|e| e.annotate("invalid_transactions"))?;
match len {
Len::Len(_) => (),
Len::Indefinite => match raw.special()? {
CBORSpecial::Break => (),
_ => return Err(DeserializeFailure::EndingBreakMissing.into()),
},
}
Ok((
header,
transaction_bodies,
transaction_witness_sets,
auxiliary_data_set,
invalid_transactions,
))
}
24 changes: 24 additions & 0 deletions rust/src/tests/protocol_types/fixed_block.rs

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions rust/src/tests/protocol_types/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@ mod certificates;
mod fixed_tx;
mod governance;
mod protocol_param_update;
mod fixed_block;