|
| 1 | +// Copyright 2025 Blink Labs Software |
| 2 | +// |
| 3 | +// Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 | +// you may not use this file except in compliance with the License. |
| 5 | +// You may obtain a copy of the License at |
| 6 | +// |
| 7 | +// http://www.apache.org/licenses/LICENSE-2.0 |
| 8 | +// |
| 9 | +// Unless required by applicable law or agreed to in writing, software |
| 10 | +// distributed under the License is distributed on an "AS IS" BASIS, |
| 11 | +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 12 | +// See the License for the specific language governing permissions and |
| 13 | +// limitations under the License. |
| 14 | + |
1 | 15 | package babbage_test
|
2 | 16 |
|
| 17 | +import ( |
| 18 | + "bytes" |
| 19 | + "encoding/hex" |
| 20 | + "strings" |
| 21 | + "testing" |
| 22 | + |
| 23 | + "github.com/blinklabs-io/gouroboros/cbor" |
| 24 | + "github.com/blinklabs-io/gouroboros/ledger/babbage" |
| 25 | +) |
| 26 | + |
3 | 27 | // https://cexplorer.io/block/def34305d66400160e408c9842181e96ca9d1167cd35d8f98bbc3828cb513fb1
|
4 | 28 | //
|
5 | 29 | //slot:47260741
|
6 | 30 | //hash:def34305d66400160e408c9842181e96ca9d1167cd35d8f98bbc3828cb513fb1
|
7 | 31 | var babbageBlockHex = "85828f1a0064a05a1a02d124455820f5039a11fbec6add444c94e61620cd720c5f097e07f05444604cac5d5c7680425820e9de60013d48279d97a08874664ea5cfb858ea6df3076b650c6c58759ecb803b58206216d3bb98e512daa6e37efff747d8a1c8cbdc1236262678c1f721406454375b8258401c91eda7453b32ef5d997287f46238d6a20f971981c8bee0a8d285ab454ebbf7546071cea3236fa1ea9ee2b378cd208dadc16e3f93297815f8e90da615943a1b5850f4e219da4771d9a7136c279142de356d3c13a591affca8fd18405ef2e5b9b73c6e1ae7c6b6dcf08e3592013ab07a61c5bb4821c43d823384d3dd5e89338e6d15e4e9b2fce2fd3a507b54d6d92dc4a50a82584000064a07b9de212fd99d1a0fa352586dea26939935569c2fc0baecabc35accef53f6ff649723453f42c74b37b42a0342566780ef01dd136fe476f5cc24dd9dcf58500969ff80ff669f83cb18e55deac93ec6b80736ae1a941d2a9fcb9f5f0323feea93c8c4ebd8ca5c8bd305344b1326cddfb485a538f0573bad78a5357cbb801cfe0a3050d847e95d09850df89720a04a071918065820b6838d87b1b2b78372a7a39624a73e7b9cbfe60f5a3185706d272ee93e36f3ef58208069bfd77cd79d7d2f2ee84b16706040d92f9e02fe5575bfcabbe68794df2c4606190140584015bd96123bcfbf60b8ab0baafaef443d96a509364cd9a62ff46a0dac766ee6a5768fbfe0339fba9fd5381a0eeaff4931c5b879802db52f43f003ba020f72150b06005901c024a34c13d649677919590f8c64f97e427724c666ae84381d1e67f6fca6b588e3e7c88c62d309ff85fff5d64c1cdf30a7700a4b31eabefd6c9af1062a1b191e00dd5d525a005e8a977ef5b9a66faae6958cadfa61ea6c8e90980ca9d32e4ba87c81f31ffc323b7e3f5b1decee3a026633061aae34ecdad464375fb12105a1ffdf4fb8dccb4bbe69c623f01ccc320e03bad8d5d93023a62d31e9f811dd77ce971c04f3de0bdf748e95c47ce26569dbee3e8f23545d8055655b3bd77a108bdda863f9d7df117258bd246e52d2f3d4e43a8e7d6e82f1736dca90c6e96c80679fd3b57c0e4673c8174c1e96edc45f60c19381b3ba6735bd1838c29dd72607ee4253bb7c9f0a5fa967a8e29b202560615efcb7facd6d8f802c5a5e08ed9eb87d67a1b498d5605acee0e7a62eead57a10951195b4ba1cd8cc8e9245b3774ae4f1d57f49ff1c54beb94c5c5d0890d07d6e0c71957cd75a58aeb7d51cf8b1daf7cedfcca9779e3197a9907099464e2287dbf5afe60a838d55d89190f9f75bcf99e0faabf2aa4a2cf7943ec6dc2c7a9cd9d6a6e7a002eb13b6eaed6b7b69e70eed0d6d7f06e8bf6e804cc04f6cd9e4310dcb3c3c7e6f91abfc6e7c2428d1a8441e6620d6698ba400828258203d34730eaf05548a8e49eebcf51e6c9ad8201799859c2dd33f0bf786e550b522018258206b01ba4521b6db1b3b29d3d750ca8498e8a903c180a7a51ff3b4c9a5fb1f894f08018282581d613d578fd1329d16f14632fdac42b76eff513958a5fcb6b7044c65de121a001e84808258390144c768ed65cbda093c3b3944c4cdcb8fbeaabddb454bc8215ebefbf8e256fc68d5465a168ebb902ff5aa0915568e08b64e94ee7cbaf20f8f821a0ad7abb2a1581ca0028f350aaabe0545fdcb56b039bfb08e4bb4d8c4d7c3c7d481c235a145484f534b591a793c8b30021a0002bccd031a02d2aac7a5008182582087dcb45cbc04ad1766bd421cd398750a39ab98e38d459b8850939a702629c7bc000181825839017e6fe6a86ddaba04e0d6a86e9fe2b798ea4699e0ebe4149bc7ecd86c9b9c0651c3d2ec1972acab92d685228066d5b29873626937dfa590161a063cc7d2021a0002ceb6031a02d13237048282008200581c9b9c0651c3d2ec1972acab92d685228066d5b29873626937dfa5901683028200581c9b9c0651c3d2ec1972acab92d685228066d5b29873626937dfa59016581cc485ab20bd3f105e59f3c50a0d3fbaf615a51f70a1c6d29d00a1fd27a40081825820cc6e628f27106b7ad61d848b0cdeeefcb229be213111464a0859e8058d0fbf3701018282584c82d818584283581c0691eb395323522c7000aa6184db1ef0cb6797f6bed732dde59cd2cca101581e581c2b0b011ba3683d149cf0922ae6310efac7a12fb9aaa14a74640fa48c001ad9a709ef1a02cab68182581d616904e8b2c26f3dda6c4a5db4b3ec9e31d581c9960977cfe9c6917a431b00000007ae8decb1021a00029cd5031a02d1324ea40083825820ebd76ef3d237c0af87037b330520d9ebc43cbf5b280c23cf4fff4b30f1f22cef028258206b01ba4521b6db1b3b29d3d750ca8498e8a903c180a7a51ff3b4c9a5fb1f894f01825820cb5a50a95a7a5733e9673db4775bf1c1affa30d000873f97f44616c39cfaa11800018282581d613d578fd1329d16f14632fdac42b76eff513958a5fcb6b7044c65de121a001e84808258390135227524fdc6a69e8dec93ed5879e14d760a98c46e949e27eccbd49c2868509d565ac04981e3033b1142dd2c14dc1d2a6a3479fa7b921a30821a00238503a1581ca0028f350aaabe0545fdcb56b039bfb08e4bb4d8c4d7c3c7d481c235a145484f534b591a019c7544021a0002a09d031a02d14047a3008682582013bea1cade794a1d5467e7cfc46b47295e1d37bc5148e6ff580029a4c40a39c6008258202555e959aac9bdb1c60c7462ddad8f85f2cbd4788e39444e32b3c5e72157f66300825820643132411ad05a7b3f8a593b452f8e3058a2ffa6553066df2e3cf8b622ad8e810082582066f82ddb7be854f0b23e91c6edd2f831b96fb4c1d27575c556ac0f0383b08a0a058258209c2af09fe31d5b85a12bb2b32873333e61173f2a20cb7a64c440d9dba903cb3e00825820d364fe589aacdb2cc5df258fba1e17ff442f5cde458f9ad7e3c684df96804a9c00018682583901994ece48a7a131116e2a1a72d8568eb9dd1692a15c19c77651f9e46eccfae0e8377d194c834fa0c6bfaf7d1479cbc4968deb6ea6d9a438c1821a0016e360a1581ca0028f350aaabe0545fdcb56b039bfb08e4bb4d8c4d7c3c7d481c235a145484f534b591a0091221182583901694f5d8515c2a10393b6f0da5b185e2139c1e011339f54d350ae44f0f82c49db66d38f4daa4efa7c685445e5f245292aaec184ce4899bc14821a0016e360a1581ca0028f350aaabe0545fdcb56b039bfb08e4bb4d8c4d7c3c7d481c235a145484f534b591a005756268258390135227524fdc6a69e8dec93ed5879e14d760a98c46e949e27eccbd49c2868509d565ac04981e3033b1142dd2c14dc1d2a6a3479fa7b921a30821a0016e360a1581ca0028f350aaabe0545fdcb56b039bfb08e4bb4d8c4d7c3c7d481c235a145484f534b591a004d88b282583901f05329c96cc1b43fadc84177ab6db64c717cd6c3d1cacbced852abb9dbdcbd948a0742b085060e7a73f9be3bee4a47d1aff86203648003f5821a0016e360a1581ca0028f350aaabe0545fdcb56b039bfb08e4bb4d8c4d7c3c7d481c235a145484f534b591a01087b1082583901c78fdd55c6290368690fe3a08eaae29a06ee52f4894a37ecbfa5ba2263aaf1c26785267aca525db5d6eb69fe6ba618f221845efea7601a2d821a0016e360a1581ca0028f350aaabe0545fdcb56b039bfb08e4bb4d8c4d7c3c7d481c235a145484f534b591a004d893282581d617cd4ce2933a9230cf5f4419b9d1c48d4d6b8da0dbbace50cc5789b38821b00000003608e54fda1581ca0028f350aaabe0545fdcb56b039bfb08e4bb4d8c4d7c3c7d481c235a145484f534b591b000000057b5c8951021a00038139a40083825820cb5a50a95a7a5733e9673db4775bf1c1affa30d000873f97f44616c39cfaa11801825820f98bceb21953be391d1962e58d9776f0d9e615e152244963955a3521c726e14102825820c7932d8af88144805c9063faa0f428938f2a6777ce8ff6338f722068cb451bf701018282581d613d578fd1329d16f14632fdac42b76eff513958a5fcb6b7044c65de121a001e8480825839010cf82bd9f91707a4e48e8c89f96a2d2d45f6552749c2e069ebc1748dd3e4c2ad591be1018c462c57e23f0fc0fa7ffb16fe4d9dc25c3eb770821a002594d1a1581ca0028f350aaabe0545fdcb56b039bfb08e4bb4d8c4d7c3c7d481c235a145484f534b591a0337164d021a0002c329031a02d1403ea400828258200576c31e7ceaa3cf5c78bf29bc595a062038409475ff954ee53d7d321120cfb9008258201a0529ca4ccfecf3b0a65864c0280fcb686a4e832b77a29be852cdd77c20961d00018382583901633f44b1b8f8ba35e2a88f01d9976434f4eaa03315ce647a391c0d8cce22971bad0a2a295e1b1dac28e749bb09beea835d00189138e271131a006624fe8258390199df1e69ce10845d0d491944333131c8ca0839f8016964b425738c3326b7f328849b8604fb414facea42c03162d838217fa1e522cf2f2322821a00172bb5a1581ca5bb0e5bb275a573d744a021f9b3bff73595468e002755b447e01559a156484f534b5943617368477261623030303034363433310182583901815f778a2ba10aa0fdc4acf1436e701f78d6f717361d4164c95dcfb77e9edebd75b1908b72519186c997cd98e6d62e5636f0e3aea1ee51401a000f4240021a0003118f031a033f013ea6008482582009db85e7a762bfbb57b32cf04f1c355e90e077be7efb55d7ef700f376f008892008258202723983e9e4b085db6e3c93f57a9a42acc8bb039eb99dd8fa9118a92746e668b00825820a3529c7fe543b4c6d834b092ad28ec98937861644f2e9e6aa227aae67f95844d03825820d58425e42d2e94531007e4f2ec2cc415988433e7ecf174775d1e66de791f41d4000d80018a825839018a9a85d079208203727090cfbf263fb30b56d85dad34d6aa4779d2b032bc73973236dc7d6f7cfd6ddafb91b65e70001ad791262bcb8934821aabda4cec8258390151843571b4aa1e6517df552e656963ea5e521adf633ca794319a424d83f2bf80b4601e48c4e90e1d6b07c9503516659252c914e29b62bf131a34c0574282583901a252df5e72fadbae8bedda645dd2a2148d7658b0ad341982db3691ca51c2c1f2969f094d9d492019f557253632050280c8395c987474b5151ac35ddab682583901ac469db726e66cf9bca1fb4c60ed5f96ba757146a7de5bd782b084d106c04bb2a6dd85068f635ff77371f2eec40d1b070aa0f8b1224a66e51a0118471282582b82d818582183581cc9924e377d4f23c35c949f285fa189a6bbdfca2ddf9293e3166cf278a0001aecac4fdd1a01fc09d782584c82d818584283581cf8e422e7423136795554f68a598324cd1b0523a381ec3aa467e282a2a101581e581c2b0b011ba3683d55eaa3a82a30b7dbe84e7a690d8c19593cf5ff920a001a4c2461561abadaa37c82584c82d818584283581cbba61babe49fbb0ce9868128603f45de32ef57994f68354b0553656aa101581e581c2b0b011ba3683d0a588d712ab8fc1936ae69af782e6a84f755a8be55001a55db53d21a3965bb9682584c82d818584283581ccea8496d5acfb20a26fafc0ea9c0f08a898c43222c5891f4b45d6ee0a101581e581c2b0b011ba3683d1a209f152ad6791dcff21dfc713898c64464d13361001a0564eca01ad4698fda82584c82d818584283581ce6153e2ae3a8ae674da3db32213a1e2ac60a7ab157988dccad4e9d27a101581e581c2b0b011ba3683d4400f4cc2aac8e0ca0c4a4dc8545d9475876704d01001a43c463851a013fe7a082584c82d818584283581ce454fe8ba7442b0881747d1706baa45a4f4b6cba730a4415b59d39f2a101581e581c2b0b011ba3683d246e555e2a324e286fab497985a4a6ac92a6440c28001ad6b4e0531a023777de021a000384b1031a02d140260e80a400828258206fe6aca3f2508e3c14010ba598cb4058317947ef6692df818a42c5a6e515702d0182582026d8779ca684d8a6b7c95e3a11417372ff92ed5bb08a57c9e1861da97293d51600018282581d613d578fd1329d16f14632fdac42b76eff513958a5fcb6b7044c65de121a001e848082583901694f5d8515c2a10393b6f0da5b185e2139c1e011339f54d350ae44f0f82c49db66d38f4daa4efa7c685445e5f245292aaec184ce4899bc14821a00303306a1581ca0028f350aaabe0545fdcb56b039bfb08e4bb4d8c4d7c3c7d481c235a145484f534b591a01efd69a021a00029a6d031a02d14047a40082825820648877fac8f758dae06fca006690ed1387b2ec2204b1bc016b266bce638bfecc008258206fa89cd3f64122f6244e14b71d2ddd5da532b33bd98730ca3d79353828f3a1fe000183825839010de15f634e8d7e52f432b004c6759fe473dfde8aa42e459bf4c0c63196f63ab876bfa489c6f80114acf55e7aa93d68ab48db25e74fc5bf851a011ed834825839010dedcda071ff3e073c74bae09910551de925b6c9f1b94f1aa1f15c85085b4d63207ae5045b026a9da263509936b67c9ba81889fecf97abbd821a0017bc62a1581cffff5571ecec795284f04ad6e6852ed2d46d924535ed68ad97fa1e70a1581a4861707079486f70706572436c7562506f7374657230303637370182583901815f778a2ba10aa0fdc4acf1436e701f78d6f717361d4164c95dcfb77e9edebd75b1908b72519186c997cd98e6d62e5636f0e3aea1ee51401a000f4240021a0003128c031a033f013ea40081825820614b760d6a77d7d1e55e8a923b566db0b2f9783460905f257a8e66ee416a5fcd010182825839016628e483e260103db8178508368f19e09e064e7161a6bc9670c66a02ee699aeb3c45015267dad04ab3d67d6cfa953fb753fed34ecaa464411b000000012a05f20082581d61d91ef01b73f3010bb173945cf5417257c00c002715a13052015ab54f1b0000000a9bff5964021a00029cd5031a02d1324e8ba10081825820810b493ad7eb21086048625c3997fdb07c7317a392913ac02feda8acb3c4716e584052f9e3436d9a2822490ec5fad02991c930e4d9b121b3b9cc032573d3197780269f631f9c4758862206dff1e740aa815b1bf80ee5a4d80f2f3fc29cecb268e80ca10082825820bb6baee3198d38fa0b4d03509175af17c23d8c16ef1bcfea0faf3f8791a77f515840a31cee004c097aaeba3c014898370b7dfaaa6b450c6ae00487d2664be400ce203ecabdaf70a26de71642750472859ea9ba2e92035998c1061455f20a60360b0582582029a440045e38c8c80c9c14360fc24dea92c6ef070a35357cd93d59f3f18d91485840b39b51e4a0f542da77d1cd754979c4f77a713fb631d8084475debad30347ee717f7ac37cabc268b6c42d4e32595852038c6454d75c64e1fb11e3bf44ea537d05a100818258200d197b7eeef1b961962a2911d4b553f0d9c3114b8d3e61de3beb4f39dc348eb058402e760d569035b2e10b02906e33dcd0ddc236c9b45cb3419264ac9a0b36a6e8ad0960ad03aa788338044eb443eccaf33699f0d7d493667c9203ef907900edd10ca10081825820c116ee479a4ff442d2d3660167d68e235bb364ba33038d0ec42c665886eece015840c3093d7ec89a09a635b9c43cd2ec3465dc4468e02efd3b9666367920b4bd72284402bedcda969123a8bc6b0959bb160eca4ab68dfa4cee6f37f4af984fcaca02a100828258203e9c556c0dd32615166dc28dded1f633409cd1c0cb71b6d2a441466a05e9146858403fea4be8326d261e3929f43ec1fcbca846c20d308eb013f5ae932b3c8a52dcbdb1829e069c5adf83c0c5afad0385c2180373b6c1fb2a963bbc6a96523ea2d609825820c0c19fad21788560e60d7a107512850c5c9b2c00e2d516c58244022ddbdbad665840493df152ccae48f7692b3c8a9b11d49c0f7eab12183d5fa63db15362ddf34f658e0ff561178812a7006dc8557ca2f59b6ed5d0e8984aecac2a4c91d24dc10b03a10083825820e99aa428105d443a8951703eae6ce058a39fe8ce3287188e72be39c00a0493935840d0ba8e7c812df0b90d86abcfbd13f6b4e99dccd61b91152a6696a82496a863cc3a048458058bf6690244022e0c69ded087d1ca9dc6ae735c45f1d6555084e108825820345e42de07d8238215773735dcfb78f59fa6fe268dadf013e6d844c7f7d20e295840440fe4178a4866f64481af152acaf51c3eebaf705baf3b09a4c6a219754380a6e523eddaef0bf39e74d061700f939863d1cb71a73f14a529875433153a3e650582582010008943d7d5859179e04581bd2b9ee085233a0f7393e2bfe6d2ebce701dc9ba58402848b1dcfd59626885d6f3fc6f99173e2158e262dda5e69875075fc6f4a315c9df69ea1e4d8a2e25fd7cee3655e385770bd081a8b6fa4d63595c19c90ece3407a10081825820fe955d3686653e37c86aec94d57186dbf0f1e414867e964b65049b57416c86465840cae23a41f72d40b9d9c4c55195a6c3f51f625a1f89d4c418f328a3fa64a61e318189119b470c4a8c84ef3a23b8dadd20dfdcf42fa7f11130fc063b7221258307a10284845820d6ea97a4aea06aa80380c8fbd6d7fe91286f78acb1149591ab4d57860e0494e558400099134777a40c19f4c71ba2a5703ff9d40eaddc6d92dc1a9088253a8ab3efe3c4a273c956295900aa2d2842354685a71c0839c292302c414755921ca396e70a5820b39b080c850256c089b3251f3ab398e5b94dd17c364689137ca8b3fe49ad404f5822a101581e581c2b0b011ba3683d09e3df362a1c27cb901932f2b3e859b6182c5125858458207037874260fa1f84b455ad67c6ecda64366bac8cad65dffec8f7870a6dc75e4c5840dfd0d3b57b323d47a5aafa9a1890335224122e3e77a77c5bce151103df985f530cddcdf91724d8b886c0e10ab0ff017c8cdb4441a8885ccde60798aea4af800158208c9281701891f2dc0a66bba4bda8f3416431b460ede13bc6784d8d5d7547749e5822a101581e581c2b0b011ba3683d2772fa792a5889e41828cc76ffb7ea2569c225682b8458200704240791a0b1bf27fd81a9d8de9cf62a1ccbba53795413ee733a7b26ee926a584017079517f099ae9d1a047528ba2aba3326c74f6f5aea21ef4a52fbb0d42b129d52984a2d7e11c49548e419908f2729e1103ec6b8251777e53e654420573090045820a0ec57cb668bf73a6e2d94df5ca19ba0b3eb4f561cadcd5829ec56fcd35a86c45822a101581e581c2b0b011ba3683d6f1d0df82ae9435de7d874433338188b2aca8e4d6b8458201477bfd5a93ef5aa5f21cb7793c12bb3554669cc01c0575ae7c7282d7ebcb40e58405d6b53624bc1477de3a1b9f37385f9d1d2a9db39c411e8f11e08e3660b4cc6916c1618800c9f465ae437a59bc2734d8652e1676461b9427724cc2da5174fae0d58207e719362b15ce90d7755fdb1892d8a56c3e38a470cadb9bbc85d73d276e2a53e5822a101581e581c2b0b011ba3683d477e6d862a2533b07c33e15177ab90b3742a4df901a10081825820a62cf49a11ca7cb60f63d140586ca033c8630c0dd05a4fbe98353ac7e91544ca584078626055ddb4269801483b14c4ebe307493a62b1c6a6318ffa1efe6ed10ed26f4234414161d8fec9347f081b0b03769e305e06356e6d96643872420dbbe05007a10081825820e409ab4c9ef9cbac82c4090fe0202d9452151d7610f8a0837481319564cb28fe58401e1a197f1ae918365d3ba6ca5ec3f86f2a83cf7d34319104f8f9e9a412130ac88e392fe29f9e0b850beab23c2fd885b41c45df9f19fa76bbc9dcf15389f5a50ea100818258200d197b7eeef1b961962a2911d4b553f0d9c3114b8d3e61de3beb4f39dc348eb05840a989df7349b26d4f4701d50b5c6820e29c07415200d9f97c3dc36bf32dda505b0da234792db1b13c6b8cd494edfa84593803cc764c9751e004e568afd431500ea080"
|
| 32 | + |
| 33 | +func TestBabbageBlock_CborRoundTrip_UsingCborEncode(t *testing.T) { |
| 34 | + hexStr := strings.TrimSpace(babbageBlockHex) |
| 35 | + |
| 36 | + // Decode the hex string into CBOR bytes |
| 37 | + dataBytes, err := hex.DecodeString(hexStr) |
| 38 | + if err != nil { |
| 39 | + t.Fatalf( |
| 40 | + "Failed to decode Babbage block hex string into CBOR bytes: %v", |
| 41 | + err, |
| 42 | + ) |
| 43 | + } |
| 44 | + |
| 45 | + // Deserialize CBOR bytes into BabbageBlock struct |
| 46 | + var block babbage.BabbageBlock |
| 47 | + err = block.UnmarshalCBOR(dataBytes) |
| 48 | + if err != nil { |
| 49 | + t.Fatalf("Failed to unmarshal CBOR data into BabbageBlock: %v", err) |
| 50 | + } |
| 51 | + |
| 52 | + // Re-encode using the cbor Encode function |
| 53 | + encoded, err := cbor.Encode(block) |
| 54 | + if err != nil { |
| 55 | + t.Fatalf( |
| 56 | + "Failed to marshal BabbageBlock using custom encode function: %v", |
| 57 | + err, |
| 58 | + ) |
| 59 | + } |
| 60 | + if encoded == nil || len(encoded) == 0 { |
| 61 | + t.Fatal("Custom encoded CBOR from BabbageBlock is nil or empty") |
| 62 | + } |
| 63 | + |
| 64 | + // Ensure the original and re-encoded CBOR bytes are identical |
| 65 | + if !bytes.Equal(dataBytes, encoded) { |
| 66 | + t.Errorf( |
| 67 | + "Custom CBOR round-trip mismatch for Babbage block\nOriginal CBOR (hex): %x\nCustom Encoded CBOR (hex): %x", |
| 68 | + dataBytes, |
| 69 | + encoded, |
| 70 | + ) |
| 71 | + |
| 72 | + // Check from which byte it differs |
| 73 | + diffIndex := -1 |
| 74 | + for i := 0; i < len(dataBytes) && i < len(encoded); i++ { |
| 75 | + if dataBytes[i] != encoded[i] { |
| 76 | + diffIndex = i |
| 77 | + break |
| 78 | + } |
| 79 | + } |
| 80 | + if diffIndex != -1 { |
| 81 | + t.Logf("First mismatch at byte index: %d", diffIndex) |
| 82 | + t.Logf( |
| 83 | + "Original byte: 0x%02x, Re-encoded byte: 0x%02x", |
| 84 | + dataBytes[diffIndex], |
| 85 | + encoded[diffIndex], |
| 86 | + ) |
| 87 | + } else { |
| 88 | + t.Logf("Length mismatch: original length = %d, re-encoded length = %d", len(dataBytes), len(encoded)) |
| 89 | + } |
| 90 | + } |
| 91 | +} |
0 commit comments