Skip to content

Commit

Permalink
chore: Add block-decoding example (#78)
Browse files Browse the repository at this point in the history
  • Loading branch information
scarmuega authored Mar 18, 2022
1 parent d43e122 commit aafaec2
Show file tree
Hide file tree
Showing 10 changed files with 41 additions and 64 deletions.
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@ members = [
"pallas-primitives",
"pallas",
"examples/block-download",
"examples/byron-decoder",
"examples/block-decode",
]
File renamed without changes.
File renamed without changes.
1 change: 1 addition & 0 deletions examples/block-decode/src/blocks/allegra.block
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
820384828f1a004f3c641a011e1523582008d4d3e0caf55d66233e1e3421f97ea7423c2a82666e22ae216e464ff431a85058203593d74edc6c343c9e9b9d329f8356aedda414992f2f97c2bef93cf606b7b87a58205cd4a875fd1317f8176a910c6705cfdc80308d031c9a3fa6b1bc2b4b4d5621468258407b7d4c4bb23bf66c8aca7ce4830b9f1cadaee5061f89fa57995a8d07ec59f126730368e2b03c754b143a38a31c7a39ca830fb6de287129a27496a48602d39df058500c8cdf0ccba508d39bb915018c420dd057cd5d94fd2cf17b1c3a5f4522581dbdecc54e9de4d1e61d12b4d09db5a5be92b145d1b63e563ee8039af378b69b2e81669daca047d5e34750c34542e3503f0c825840000607436ed04d36164ca57f0f70bfe10ddc3f276540750dff3c0ca399047292c3355e4a488d0f13e548134661056f434f4c966c52f20c6580252c8a25601ded5850cb50509a5659569e8a1881d77dc335a781b245a14a499a7c04cdb9f6ee04be3ab3bf096c42a6c817198477bd2f10a426f7a7cf70d579d2238fecc3ca4597f8793ca02b02574ceb45fe9892997509ed0f1908ae5820dc6af41ca2a4eeb3d2969e559ddb65d2672f1b9aaf901fe4af425407952e290958209d0d3abaefdf5a2ccad0832a80759b8f8eb3c0629e9dc8bda3d44ebf658ab97601188d584051977ef95fbb458fa81ddc7e1ca6345e3f5fc70ae5b80b47d95fd39ed2940d1751ca7ce6dd24901265c299bf1994b3830ca10e995d7fde4beab807cbce03470604005901c0750da95fc1de2debd8cbde31d7f658bb41170695319a9468cde8cf21a93124f7db032571299748da724cbfda88d5f79fd89ac2b3fbd0748e25129ec2e74da20f96364f691ca551f8a7e71305d225a810783947759bf28d580a51244029c290e7c27e1d249f52ed39ac65f66529240ab76e36a4001df5a24b971557475379b24a695a9529646eeb7f1681a3d215fd6fe550654a1e7b06089b68f525b0aba6d91adf229eef5af4a3d602c1d29ba5f18c8a93bd6c950134f37ccf0ebf1b78fa2909f98ed560220de39302f56453b979da7843f6b0cacbe1a33739aa272f193bf9de69d083c2c885c1e226c0e0a35a2400059cead716cfa8064fb98f20162b2b3586c5dd29ac557ad542c610dd6576669823c757353fd03208313d8715268b32ef8ab62e02edaad3ea9c96de888d5933ccfc13e757f92bba98b23a5deb1cb860550f272f685a5bb9b88e2f6bbf227c049f90aea4540347bdac041b09bb75c83352fcea02f91c648156aeada5877eb3adba690c073a6fc1372a48ce8115ba3537243938ce366078d07c2f9dfdd92db07e0047b8d78d32fb4b55fec8810fd9d128c88df3c5d435dc82e163f9275dac718d06f680a3be8db4dc8dd512b059b1631191f283a500818258201e8f5d41ab9915c4cb0fcf1c4127e18585d957ac95b2b4879c3e02b02205cdcf00018182583901495a5a4dd65a483a5eaf6630f59a2c33e02e2c15d1d1bc39d1708ac457fd410378da5864e6b313db03488a085ca56376af0ab5e9854376401a3b76264b021a00029eb9031a011e324b05a1581de157fd410378da5864e6b313db03488a085ca56376af0ab5e9854376401a0068d5dba400848258201f15d61fa4462dffdb330d625b1fcbec930ea633b7bff5fce23e969660702ef500825820cc59f188f8e4027e98fa33404a7ce69b76e0c6b211f11ad71b4daacf67906ec900825820da82abf561c83cffd8657c05d27244081739eacb880b3b5b4db03b1a411911fa0d825820e125166ebe2e0b7bc781b9e7aa886a032ec87cb40e0bdc1acb5058a0555a8f82000188825839015fa4a029126ea6679f6cf29d15369dde7206472bf0f9d63e12a88f575fa4a029126ea6679f6cf29d15369dde7206472bf0f9d63e12a88f571b000000019fbcb30c82583901785eb7eb6c8286b8011a0adbf3ca1b4d37589b80cc6e42fdb4679adc39bc6cf63c0f9dd4f03df80accce7246bea60d649de4a8c4d5c0dca41a16d9fbfb82584c82d818584283581cacf4df690f13b4eaf82b816f399b2e1d8ab86976da93009b813d7758a101581e581cca3e553c9c63c5c2eef54d43a2e23449490865698bb72b3b1c039082001afa0dcc441b00000067e78e120582582b82d818582183581c62d2399c601895246274b8068266fa3138fd09f79fe636aa432db929a0001a5d1abc701a1263562082584c82d818584283581c3cc42d469376e7a5cfba6823160d341b5867c66d009124bd000bb109a101581e581cca3e553c9c63c5e89765f8436cd338c66da66d119ab3c27738826333001a65307a281b00000004dc9ffb9982584c82d818584283581c05bd51fb87d91b5290ecf18958de205badec391e4d643740edb2f0dfa101581e581c735437123ef5c61d0591c67ef0c94a5dc5c18653d6c629949595edef001adf8508d81a2c932a0382584c82d818584283581c5acbd13c916ce291ac4f41b1df2c4c75b8e917622040b54e3376e42da101581e581cca3e553c9c63c5dd0255704321b81423e0ffb4018d237e8e9a96ce3e001af6cde4f81b000000095b4f070082584c82d818584283581c8c8a6f436c8b04fe1c682aa81d417f2e82b41ebb06bf9aeb8a65a198a101581e581cca3e553c9c63c5b7f725d5432632ff88fecdf5936a00291efb732202001a1ec13f971b0000003452024d88021a00036a91031a011e30d9a5008182582026571cc2e731014dfee8536a0be0b816cc38b10ce38501db0e1a5eec4f04ae860001818258390192da16a658a4ecdb2c18b01e464f4ce2924f8830a304648674c1c2756162cdee35822637a84e896c6a8b05214cf21947f91b69122eb985891a00495250021a00061a1c031a011e3123048183028200581c6162cdee35822637a84e896c6a8b05214cf21947f91b69122eb98589581cae66e56ab11ccb39e882669f220a37956c683e4ce84fefd910012d7a83a100828258205f6f43cb12b59a3e5bf242528c8ab85e4feeb2acb89aa08e4948968f7bf2d9e0584010d19b492320347d5b6adf2137ec89f9c13d3fc07cc9b32f86a71fe001fcb75f36e3958949ef2b7e37377d89246b4a39463846402fa870f81d1845ef7c5c1d04825820f49ae225837477663687484ce73ac607ab7fe78600ca08d61db09e2e35d8e1b6584096c80781bd34262ab6f7b12f6592f0b943021e97e9c70ffc23635272c742932a51e4a252341c47a79f4e698235ab22beb3a75256b6476fd46749a68c6e86f60fa102848458200915adaebbd25d0f9a3242bb83c14bf5b012967ab8462acdee1912062a76117f58407a9ebc40eefdbcb1586e9805043ccc3285ee3864686fb1fb0d6d8075a41abd026864d0e92224982acfef061da2765effb26c75faa62c5ef3b656386782987c065820aa35c675609419a21a79ed83318278cbe669d4a4dadbfdcd6234e1315ba7c9685822a101581e581cca3e553c9c63c5a59118f7438117a8d6603837bc193303b5001b095b8458202f84330afbe6ab81c368ab0a850e8b6fa02daacc91709faf6bbdc811b4b5f82e5840bb878822cb198b1d245e2c46c20c930996067fbcb3469a8d36b68d6531add3e3e5081200890d906c70b1bd9e4333115a7c17df8da18eb19148a88a431993900f5820e91eab0e2dae5b26ff019c4b1d56183bfd8f5abd1fd258e4f58b13d55cba36f55822a101581e581cca3e553c9c63c5c0e20ac0433519070b0d32e51dbf04b191a57d44b3845820894b8d96727c3d68a30a7165c67c9bff346260628ee624268dc35d660e55794b584062b68793ff855c0b11a0c0e147de91a9f0631c565d28d270fdc146571d0c23839c970996188bf4e86b7a2d529e694b4301de1692366349913b4966f06be9df01582033aacbefeda60713a90163575735e391b5a1a00fe8629e52875657ed5c93ecba5822a101581e581cca3e553c9c63c58681fbd14353af0a213e5ab85001e4e2cbad09ec518458208e2c6fc08234b2a3437e5bae310f6957c69a62143318c562bc1b72c85141df6d58402f02c6375f5074b287aa72e940a3280f39d6fd2c24240b087f208fb92cb2abaf911657eb06b6e24756dea333628972c611da12aad9cc8dfa6b15a41f1e4bb70258201d6ed1791e5bb28ead7bcc582d7e5e70d264cf5293222352597bf0c2a773e9925822a101581e581cca3e553c9c63c5f777eddd432f2063462cf96a64e586148173444979a10082825820036dc0c351864d35c3d8fb72a0acbd0efb343e005f457b0a845e3a82a48bdaee5840ef6eaf7713acfa2623a589e6a5764f93fff7bed4d60d549a0e47d985bcccdba34e79b6954768b423db879e99be2ea205a151974072734fa996d240dd876bf600825820f2acaa3d79a96db3f8cfbf87792b62e39fa74a4d9ba1bcb82ba1562ca524c0a158406da704b6ca04547fd8fda632d1acdc1f15c5efaaee4e1d92f35c714b59148511828870dce8602de968da15263e938c6f71b37e6db9b47fa217661efc1c117b01a0
1 change: 1 addition & 0 deletions examples/block-decode/src/blocks/alonzo.block

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions examples/block-decode/src/blocks/byron.block
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
820183851a2d964a095820b5bdd15fbfbe7f618d2b7db0b20632658466b1b17654e9a8b865ec0e9fdccd4e8483015820c2c44f1f28599c08c6c1da0e375dc995d2b686c445b19110fa96ca68dfb2880e5820314b3c77650d6eba459864966dbcda18c438ee21bdd7e6b3272bf1e6b241d75d83025820d36a2619a672494604e11bb447cbcf5231e9f2ba25c2169177edc941bd50ad6c5820d36a2619a672494604e11bb447cbcf5231e9f2ba25c2169177edc941bd50ad6c5820afc0da64183bf2664f3d4eec7238d524ba607faeeab24fc100eb861dba69971b58204e66280cd94d591072349bec0a3090a53aa945562efb6d08d56e53654b0e4098848201195457584026566e86fc6b9b177c8480e275b2b112b573f6d073f9deea53b8d99c4ed976b335b2b3842f0e380001f090bc923caa9691ed9115e286da9421e2745c7acc87f18119a89f8202828400584026566e86fc6b9b177c8480e275b2b112b573f6d073f9deea53b8d99c4ed976b335b2b3842f0e380001f090bc923caa9691ed9115e286da9421e2745c7acc87f15840f14f712dc600d793052d4842d50cefa4e65884ea6cf83707079eb8ce302efc85dae922d5eb3838d2b91784f04824d26767bfb65bd36a36e74fec46d09d98858d58408ab43e904b06e799c1817c5ced4f3a7bbe15cdbf422dea9d2d5dc2c6105ce2f4d4c71e5d4779f6c44b770a133636109949e1f7786acb5a732bcdea0470fea4065840cfd641e91f908471af31762e7124147e8d3b27036d436f24d785de7330ebe33c03dae5ec27eb2944a82545fbcc30016737ba7696fb5e3fcaf8963ea12dbb87098483000000826a63617264616e6f2d736c01a058204ba92aa320c60acc9ad7b9a64f2eda55c4d2ec28e604faf186708b4f0c4e8edf849f82839f8200d81858248258200ca95f3bb516e3fa36b3c5ce18316a3d197b4faf2e36635baecae47e8a714b8d00ff9f8282d818584283581caca526063940ef762c899b92f20134264a43c5ab36d46cc6d36540d1a101581e581c2729cbfd641133bd0633ff422b246fa0d95cc2bef293d39adf3fd22b001aa25f5bd41b0000021a9f3ab0c28282d818584283581ce0751a974c40abdac7e71ee5b09d12b0591b1f4ecab73062ac8f96caa101581e581cca3e553c9c63c531002ff143535ea35088673bf86d25026baf12db3e001afdf29bac1a02625a00ffa0818200d81858858258408b9397dce473d3f296ad24e24e48795a495ad2f1602896e913fdc7e55e55e21f6fa53491a197e86428c86fadc0253ddec8d88bee623d474632603633643b26eb5840555e2f86fd803d1ed5bb3a3bc7f08dd82896744c4a0d99ce7b61f696ef632b12f6d8bd4787fcfe27de2bb7b1127fb1646d8d2f26755b4186f605210709016709ff8302a0d90102809fff82809fff81a0
1 change: 1 addition & 0 deletions examples/block-decode/src/blocks/mary.block

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions examples/block-decode/src/blocks/shelley.block
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
820284828f1a004723dd1a007949425820c175f470d30216341423a98a6087175642250acec7d9f53a311cf2e0a1c9c7b258208b53207629f9a30e4b2015044f337c01735abe67243c19470c9dae8c7b732798582090561cf5fb4eada778f0564060b9b5138fbfa50c0e74fc496956c8c3507301a6825840d266d923d59fc8a1b7e964dab2b6db804b494c202586eae8e2db929ca2361d9f01154c4a78b95a2e6bf19ebe98e775f894ad53971bd1ceeee125ee8473747d60585011614e11e284d28aa303da9ca3a37bfde35f931d308ae3da36e381ac42910d36dc26d91bfa726d7b4a7ae1fb263e037e8f9e80e3411a8754863b8b5601047b9e04d0f72f00206ea616c6cffc75fc48018258405620f9239d562aed34442b72c8bc840bb9a5ef897b470132430a02cd0ce69052a6ebb17896177180c1d88afed3d7614878549c5573c0f281d5dad2f29bda5a6d5850f349597045cc5f65a9724770f971e6964e09fd85db8e36ef789f390afd4629a3f5e96b4e5ee8280ec26236a6323cbc16867a1868645566e0607d7a474fd7d06b44c3afbcd85a41098a80ba6faeb7400b190596582000ef8e1bebe7d404a910c7c467fb5aafbc7dee7fcaac94cb9693e08ea9dd7d2a5820674617ebe299bcba144026e4342e9f54c861165c1dde1373fd1206e654f985b800183758405befdeffa73bc8b4a1cd22aa2c896f189a698175e5bfc4a562e3a15b5f6580953e6fcc72a37386816031e36fdf19718351417f01af02c7314fbe9f2792b29e0c02005901c0c597caba74923b7901d5b8162f27338413b12941e411e9371b06a01375b8690aab067a42dde22db909bf77db373ca8645b751711256ba5f360e2935f64d14104cfdfb6c7865c6f4219e67af060cdcf4dc3d874ede00c394e9ecac7ba1f663b367e0f482e1bfaff08808d6567590cd6bf43c849ebacfb5fb185f4592ff3bf0a479d5a1f3f19f819b59f662cad2b6ff2187ec94b4c5fac6b8375b02d6b52d229ae24b389ff2d72b584f47f77cbc62a43f1880e486fda30ac1600f475dc4857e66090fe7399f4e3bff4929ea1c1929371846a34391473c79f9409f05f65fe8d2acb6f5eceb84474555d163db96d809aa77b9c2f80156d0356e75204ab5032e833bbacecf407038c8a28da4900c1c63a5bb32672dd345c37e1c866b15da5d2c41ab76c214bc8e3efd9e34cf092f1166edc2de2b03ccaca01b2c0261bfaf3f166f3937c21128c3ebb96ceefab6c80897da9f096a7cc113c4b9c0cd8b97fe3d29f6a2c9960005d2f1ce2e8bfeca9b1f8ebe80637f59133692e11ad9f9c557c10102472aef7f472d72920bbff7a7f4e344988c2d5f98482fbbae7a081d7f10b55b33a7c4dea90483223bea2093cb068b2db39973dd06700ea4eb65fa3210d7d53430c9c84a5008182582050eba65e73c8c5f7b09f4ea28cf15dce169f3d1c322ca3deff03725f51518bb200018182583901f53fd6f6b96f74cc90fd995afad1bfdbd49ff7d04fc9e7a2f81285b75c465cbf8c5536970e8a29bb7adcda0d663b20007d481813694c64ef1b0000021f05a734bb021a0002a389031a0079652c048183028200581c5c465cbf8c5536970e8a29bb7adcda0d663b20007d481813694c64ef581c6b5180a258275c671690c94c704f074190e90ea900ed565b4c29abe8a50081825820368f24c09763ee846f68c60f987eeca4d9a7e9cb537cea2cc593e77dd9c0ac67000181825839019a5d1ab9ca1eb592973a0d3f5ffdd006e7e4c0be6a7b43211325168932dd8b472ba9876597a01259896cdb4650a62402aa9737175d539fe81b00000045d92911df021a0002a389031a0079652c048183028200581c32dd8b472ba9876597a01259896cdb4650a62402aa9737175d539fe8581c76e80e1b3f622c7051f222453497b0667e12892f5d94ee565d17dc52a40081825820cffac1e93f583d1f272142df5b793666e613c66cea4e500b18437aded85febbc00018282581d614497e18047e5c891ead6a215b3f5dce026921a8b76c7fe27a2ba9f681a000f424082583901a76b7122a3773792b6275c9a0fb0bf4ae0c17c52363de66062eca50c13ce7fae17ab762c4390c4d77bd74f7d4651af480508ea237b1dd0b51a0086a7f3021a0002ac4d031a007950a4a400828258201c3b9c2016d9ae6b3e86e1888296e6bc180e6bcfd344711b7305651ae90f87e60182582038d2f2cf6a2ce8563cc3b84b4b0e003404363a352fe1ac7ef5a6b5bb014c3d6c07018282582b82d818582183581c5f6712df165e03b5eb5e72e50058a181777696b222c54d844944da14a0001add85ea5a1a22dad5bd82581d614db3b10bedda3b9dd3d3a8886ca9d8a581162b874a7460edaab406fb1a032fcbef021a0003447f031a0098968084a10082825820e3968f45134a774f66b011c2c463ad64a5ba7e17f4774be460d08477a07e31f458402c551fc904b8e55a58d437e744566d0307a186af8f08d51a637456e0eb8247a0b639441a4fb25807b46edd60766a9e766b19e7c33caf5eea1752fc017b840100825820590a7c4229d9aede28c43f2626fcd36bc383cc3e622a654ad962e4c49570938c584042f3ed22755c5523a66864cb644330b82ace0b7cd483f4ea4e4c4d3ff88e62785811bf6a7da08e386f218301ff50bf8d000ca3df07dd831b9160b469ac95110ca10082825820feef653d2ba57531b9a442258cc0ad12feda29141b3e2a05e4a037262c4bb34d5840def966f7d8ea6e9ceb519606a9b7076b85677b6edcebd386f42f71c5c942c6ef90cbfad2265634cf5ebae00f8b86760151c6559bc82b52c130547eed5414120b825820d91dc0521946003bc7ded1a54938a04bee80a860382c51ef7c9e4563346979345840ab999c3cbb8edd48da9b884a4dcb86a8e7b7110ee08f312264a018fa6d50e4a0635f124916be7773c38c8bec8a0fa7f2ac5058a776932ebfd557a8a263552409a100818258205ee8a66efac254382955ec4d643a9f24015d0ac1ed32480b1b7235f10e87a0e458400fc033349c1a9ecf966902e05f35b7459a642f7b3818c80003b08179631521c810a8a52e30c5211a38a88732369fdf07d96c83963564f11b14048c060a2d410ea10082825820a1ecd258e4f23d09803873e6b8a5ed21107738e12004ed7b1fe1bf89c9c49e5a5840789070b47a7d4bf6ee4d56773ace2faaed2f76905848d65e5c35bfb75339060ec9c6e904b9a8fc54cf861a6da4aa3d8f607cb325b1f1cc266e49fb8a6dc3ef01825820a1ecd258e4f23d09803873e6b8a5ed21107738e12004ed7b1fe1bf89c9c49e5a5840789070b47a7d4bf6ee4d56773ace2faaed2f76905848d65e5c35bfb75339060ec9c6e904b9a8fc54cf861a6da4aa3d8f607cb325b1f1cc266e49fb8a6dc3ef01a0
35 changes: 35 additions & 0 deletions examples/block-decode/src/main.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
use std::fmt::Debug;

use net2::TcpStreamExt;

use pallas::ledger::primitives::{alonzo, byron, probing, Era, Fragment};

fn pretty_print(block: impl Debug) {
println!("{:?}", block)
}

fn main() {
let blocks = vec![
include_str!("blocks/byron.block"),
include_str!("blocks/shelley.block"),
include_str!("blocks/mary.block"),
include_str!("blocks/allegra.block"),
include_str!("blocks/alonzo.block"),
];

for (idx, block_str) in blocks.iter().enumerate() {
let bytes = hex::decode(block_str).expect("valid hex");

match probing::probe_block_cbor_era(&bytes) {
probing::Outcome::Matched(era) => match era {
Era::Byron => pretty_print(byron::Block::decode_fragment(&bytes)),
// we use alonzo for everything post-shelly since it's backward compatible
Era::Shelley => pretty_print(alonzo::BlockWrapper::decode_fragment(&bytes)),
Era::Allegra => pretty_print(alonzo::BlockWrapper::decode_fragment(&bytes)),
Era::Mary => pretty_print(alonzo::BlockWrapper::decode_fragment(&bytes)),
Era::Alonzo => pretty_print(alonzo::BlockWrapper::decode_fragment(&bytes)),
},
_ => println!("couldn't infer block era"),
};
}
}
63 changes: 0 additions & 63 deletions examples/byron-decoder/src/main.rs

This file was deleted.

0 comments on commit aafaec2

Please sign in to comment.