Skip to content

Commit

Permalink
Byron block hash with prefix bytes (#316)
Browse files Browse the repository at this point in the history
Fixes #315
  • Loading branch information
rooooooooob authored Mar 7, 2024
1 parent 34742b9 commit 0c3c937
Showing 1 changed file with 24 additions and 4 deletions.
28 changes: 24 additions & 4 deletions multi-era/rust/src/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -237,10 +237,20 @@ impl MultiEraBlock {

pub fn hash(&self) -> [u8; 32] {
let bytes = match self {
Self::Byron(block) => match block {
ByronBlock::EpochBoundary(ebb) => ebb.header.to_bytes(),
ByronBlock::Main(mb) => mb.header.to_bytes(),
},
Self::Byron(block) => {
let mut tagged_bytes = vec![0x82];
match block {
ByronBlock::EpochBoundary(ebb) => {
tagged_bytes.push(0x00);
tagged_bytes.extend(&ebb.header.to_bytes());
}
ByronBlock::Main(mb) => {
tagged_bytes.push(0x01);
tagged_bytes.extend(&mb.header.to_bytes());
}
}
tagged_bytes
}
Self::Shelley(block) => block.header.to_cbor_bytes(),
Self::Allegra(block) => block.header.to_cbor_bytes(),
Self::Mary(block) => block.header.to_cbor_bytes(),
Expand Down Expand Up @@ -1398,4 +1408,14 @@ mod test {
let bytes = hex::decode("820785828a1a0006ddf41a0089a98c58205172bc8843f4b565ecf0f72f86944afb0103d126bd1b6940de33a6125988be665820149174cec3572f88abaa0e3c22aa992f2f254db15ebfea54f93b59c71151801a58207e7f6a8978acb0ed37219cc5a917f8cd5bf6fd53538254ac921790e159baf8ad825840438fe265be4b13d6e1f5af3a6fe8a7a4c0ef1b832b614f697b80def3467db19740640fc9aed4ef158230ad910af46e597de22030a2c47556d17805c13866d7ca5850ab4849c172cf814f266bab8ae5327902bd481a0bfab03141d00c2e4e810732bea4739f94e068621a0573870379c51e76229e8cc345163781f8cb43683e1a79805ed84576fc3bf3fb4b431074241dac0519010858200ea62bbbba0549c668a54579873e3c35e64a899007f191bdf17b43bd01b4c7a28458205f7a4914a82f0120d63e3e63a235ad20ed871d816ba28f032c75f69e3a7df3e20018445840a437a97e0dd7b08a7744107cc329a6a661d6c1c844d0f35e72906f5e5762260b4189bc49be29993aa0b64a338e5fa8462953c55a2b4b4299edf40c8617f1e8038209005901c0aba65daed3986c74218c9e2d026e9285fbc5276efcdab8f41358df8cd7879574257f95b76540de3ac02d24a5e00f05327621e9fd01c6cf8f302771fe069b3b03c7e3637ea1b36208c4ab40b97866d05055ee2d8254fb44f54e26bef97b9e412a1377bb2a7224f8ed5430a83bdaeb963a9c492f721cb499a42a9dc49957315aa7144f304fe3af8f28a619d9b48e57293fd18332d0a277b8beb1651f502f6617d400c63dc3c0f3de0fc2a52b6c05a0557d5f1bf907a15a85ef5bb6a91406f01f2d63801e68e3fb16a8cf654afc9c7f9da3958c79fca1806405802a743377c89bb933ac69598ce1153cc7dda40a504ae5555af78e9052e8b767c7d8dbb943bffbf7093896c7238aeb4031bd72e794c23c2710b973e351ac5004ebf014b7a0d3daaa1070e7ed0288f45e5c776f174f826c0c810cff417b2ce0767f6210dc26710e4958f68800addfe210f1f7388edd1b6b96c9ad9e2a615cdc6d472daa421449c33eedda2a193755b70258fca6a9ae1a4cc0cd16bf1e37664f9562ef82c458cd170a71c2c45ff0cba71736d78d60abb33febace57b324410260f179cb8bd837c80ce114339d89daecbe578a2518877dd2b4109624153c717f1f4c704386a88e3590c81a40081825820917aaf395181a0359ca8ee314fe8355c5e2239d66483b164c62cac2e41ea4a0d000181a200583900db1bc3c3f99ce68977ceaf27ab4dd917123ef9e73f85c304236eab2397a993b0c8166aa8c48345be19257a4025ab764c86e799beab15b303011b0000000253fcbcba021a00028bfd048184108200581c97a993b0c8166aa8c48345be19257a4025ab764c86e799beab15b30300f681a100818258205f89ea8c6ab580e2e7a32c3586869eb95fae54f42ac982639b6665359601f63e58401c012befc2a4d4e22e6c7be4483de4d7ac550050ac3ff7d481c503cef64ce234a76ea6dcbd70f9a79de6adb869b3599d28d2cf351643a5cc6e36205d39efc50da080").unwrap();
let _block = MultiEraBlock::from_explicit_network_cbor_bytes(&bytes).unwrap();
}

#[test]
fn byron_block_hash() {
let bytes = hex::decode("820183851a2d964a095820d667b66b3234630d7c43a29d8ac1431cc74929218456688c4833664563d7f3af84830058200e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a85820afc0da64183bf2664f3d4eec7238d524ba607faeeab24fc100eb861dba69971b83025820d36a2619a672494604e11bb447cbcf5231e9f2ba25c2169177edc941bd50ad6c5820d36a2619a672494604e11bb447cbcf5231e9f2ba25c2169177edc941bd50ad6c5820afc0da64183bf2664f3d4eec7238d524ba607faeeab24fc100eb861dba69971b58204e66280cd94d591072349bec0a3090a53aa945562efb6d08d56e53654b0e40988482071945b358400bdb1f5ef3d994037593f2266255f134a564658bb2df814b3b9cefb96da34fa9c888591c85b770fd36726d5f3d991c668828affc7bbe0872fd699136e664d9d8811a00029434820282840058400bdb1f5ef3d994037593f2266255f134a564658bb2df814b3b9cefb96da34fa9c888591c85b770fd36726d5f3d991c668828affc7bbe0872fd699136e664d9d858405fddeedade2714d6db2f9e1104743d2d8d818ecddc306e176108db14caadd441b457d5840c60f8840b99c8f78c290ae229d4f8431e678ba7a545c35607b94ddb5840552741f728196e62f218047b944b24ce4d374300d04b9b281426f55aa000d53ded66989ad5ea0908e6ff6492001ff18ece6c7040a934060759e9ae09863bf20358407ac79f732d0a4956c5214c59d36ce7cd3a7887784c825caea7f424fd0b0984b5a0d5edee4257a8de1c56591b623ff266a64bf3d64d5c63f46120abb1f3ef24038483000000826a63617264616e6f2d736c02a058204ba92aa320c60acc9ad7b9a64f2eda55c4d2ec28e604faf186708b4f0c4e8edf849fff8302a0d90102809fff82809fff81a0").unwrap();
let block = MultiEraBlock::from_explicit_network_cbor_bytes(&bytes).unwrap();
assert_eq!(
hex::encode(block.hash()),
"42f01b7eb6e7a822427057b5f7578a8f8048fb599642e562f38aa65da1aba0d5"
);
}
}

0 comments on commit 0c3c937

Please sign in to comment.