Emurgo / cardano-serialization-lib

This is a library, written in Rust, for serialization & deserialization of data structures used in Cardano's Haskell implementation of Alonzo along with useful utility functions.
Other
230 stars 124 forks source link

De-serialization failure on plutus data in witness set for valid tx #635

Closed Scitz0 closed 12 months ago

Scitz0 commented 12 months ago

Hi,

We noticed that a few transactions fail to de-serialize using Transaction.from_bytes() that are valid transactions on-chain (mainnet).

CSL: 11.5.0 Error: Deserialization failed in Transaction.witness_set.TransactionWitnessSet.plutus_data.PlutusList.PlutusDataEnum.PlutusDataEnum because: No variant matched Tx hash: 610415a99ed08f62f2b0a085122893d46285a6587a4ab3363742cfed267a8a2a Tx cbor:

84a9008282582041087d2d68898c0f7c1bb9d6adcc48be928110913379496b5b00aafdbd24bf240382582014c517cdde87f419fc26e62ff316f601f55952bfc41973f4d31eaedd95f3dcd801018483581d7162ef3f906b0a32726e5bb7edcb9f58308d58fa462bc9e022f74ce752821a0012378ea1581c4523c5e21d409b81c95b45b0aea275b8ea1406e6cafea5583b9f8a5fa14b000643b042756431323139015820b090a994bc086fb988188047290a3c4f432ca0eb41f8241770f55cf12dbcf543a300581d710c20befc4e3ff0d33bfb5235e19fcb2bc9291abf0002b9379fb2975001821a00129c92a1581cd5e6bf0500378d4f0da4e8dde6becec7621cd8cbf5cbb9b87013d4cca14c53706163654275643132313901028201d818581e581c4523c5e21d409b81c95b45b0aea275b8ea1406e6cafea5583b9f8a5f82583901a20893d2cd9373c8194bc9162408171c5cf4187713c628dd5d84167dee2064d48dcb09741cb74271e4710ac7b1e59302f761480740456c0f821a006f573eb4581c07f019ce45fb638353258bda4316ce5eb3d0f76a3fb739c451740849a14553414c54591b00000001cf8b9a40581c086849cd9f672e731e0d9590a2d28a6a690ffa2f73bae0e1970f0491a1494754494a303239353301581c4523c5e21d409b81c95b45b0aea275b8ea1406e6cafea5583b9f8a5fa14b000de1404275643132313901581c477cec772adb1466b301fb8161f505aa66ed1ee8d69d3e7984256a43a155477574656e62657267204269626c6520233636353601581c56971e75cc105f613c1aa2aeeaf8c53a92efa85fd025cb8febd49cc0a14f5365656b65724f475061737339323101581c637bae5845e801779651d997bedc2dad53ddbe0d5f940b4ff723d769a1524d656c74696e674d6f6f6e626f793338313101581c684ffa75d83ccd4dfe179bd37fe679e74d33cce181a6f473337df098a24868756e6b34333139014868756e6b3632353601581c6c0394ebf4b6d7ed9709cf901863c254448a40785819a57f7c39a130af544461676765726f6653616372696c656765363831015452696e676f66496e766f636174696f6e31373931015452696e676f66496e766f636174696f6e35333133015452696e676f66496e766f636174696f6e353630380155416d756c65746f66496e666c75656e6365323034310155416d756c65746f66496e666c75656e6365353837340155416d756c65746f66496e666c75656e63653632383101554461676765726f6653616372696c6567653335373301554461676765726f6653616372696c65676533393433015753706561726f6643697263756d7374616e636531303035015753706561726f6643697263756d7374616e636534313630015753706561726f6643697263756d7374616e63653438333201581d4375704f66436f6e667573696f6e416e64496e74656c6c65637431363901581e4375704f66436f6e667573696f6e416e64496e74656c6c6563743237333001581e4375704f66436f6e667573696f6e416e64496e74656c6c6563743237393901581c742b004c42b6dd7f7935c85f5d3884037778c8d80a0f9724d3b57049a14e434352323032324343303038343801581c86ec26a91051e4d42df00b023202e177a0027dca4294a20a0326a116a24e617175616661726d657231343532014e617175616661726d65723534303701581c8a1cfae21368b8bebbbed9800fec304e95cce39a2a57dc35e2e3ebaaa1444d494c4b03581c8b7224e18aa76248b2c3c9f9a87c6b545d58fe3923eca93598a3f50ea158194d616c6c6172644f72646572496e7669746174696f6e32343501581c901ba6e9831b078e131a1cc403d6139af21bda255cea6c9f770f4834a6504d616c6c6172644f726465723133363701504d616c6c6172644f726465723233363601504d616c6c6172644f726465723437323801504d616c6c6172644f726465723439373601504d616c6c6172644f726465723534373801504d616c6c6172644f726465723538303301581c9c27cd4cf23f51f1251f52caee258fed56c6b30a4df5ca223a9e3468a34e5365656b6572546f6f6c30343632014e5365656b6572546f6f6c30343731014e5365656b6572546f6f6c3133333501581cb024c9cbca03eb9ab49330b69ecd18a7619fcf39f3c34bd783ea360fa14e43464a423230303248303932303801581cb6a7467ea1deb012808ef4e87b5ff371e85f7142d7b356a40d9b42a0a1581e436f726e75636f70696173205b76696120436861696e506f72742e696f5d1a09be04ad581cc56d4cceb8a8550534968e1bf165137ca41e908d2d780cc1402079bda14f4368696c6c65644b6f6e673436323601581cc9281d64953f9531304e57e4ff15111f0c5445167c0b413f70fcd50ca14452554e451913a8581cd34743543ccbda22bb948400a4a919b7b54e82123030702e38cc62b6a14e414c4c45594b41545a303533353101581cd87eb533ae76ea82700747e425c6ec11825bf58020bfd00d366d43e4a151547572746c65734f6e436861696e3635320182583901a20893d2cd9373c8194bc9162408171c5cf4187713c628dd5d84167dee2064d48dcb09741cb74271e4710ac7b1e59302f761480740456c0f1a093251c5021a0009794009a1581c4523c5e21d409b81c95b45b0aea275b8ea1406e6cafea5583b9f8a5fa24b000643b042756431323139014b000de14042756431323139010b582050c169e980ba8d420683cd74ef4654ecdadc6118f4f0ac013d8f2e13e14de1600d8182582014c517cdde87f419fc26e62ff316f601f55952bfc41973f4d31eaedd95f3dcd8011082583901a20893d2cd9373c8194bc9162408171c5cf4187713c628dd5d84167dee2064d48dcb09741cb74271e4710ac7b1e59302f761480740456c0f1a0952586f111a000e35e012818258208b5c8b7c8c4420f191fc8c4b539fd4bf85350ebccfc38fe65183d27a8700a4f800a3008182582059f167ae494578841731b314607a6ada8001254a3a39b1cd97351786e13341295840c968c44afb628b0115c05eee2824bcc86704d4980839c31cb1b782017add9b5b8cc1b8005045476a70538b01199274fb3071cf1e474509c96d910e4b67961f04049fd8799fa5446e616d654e5370616365427564202331323139467472616974739f4a4368657374706c6174654442656c744e436f76657265642048656c6d657447536e6f726b656c455761746368ff447479706545526f626f7445696d6167655842697066733a2f2f6261666b726569616d7a63636b676272683564676e336969637579727161336f3666677937686967356578726e7a777673706a6a7964347a67626d4673686132353658200cc884a30627e8ccdda102a623006dde29b1f3a0dd25e2dcdab27a5381f3260b01d87980ffff0581840100d8799f9f9fd8799fd8799f5820fb983db282508e72483bcfeaa5fbf02bad47c79bb9e06c4af4e6838ec06d1203ffffd8799fd8799f5820c50c5825d450e8f727dad7d436c8cfc6b50c9688cc2415e39dc08a12a1e560e8ffffd8799fd8799f58204a4ce53f5a3bb284fb571fd6b45c6e5930cb26aff60e854965fffff1dd37183fffffd8799fd8799f58209eb94df26b1b6675c0706741ff8af5d3b4967414eaee83acbee8a353e949b559ffffd87a9fd8799f58208ce976e14e61c84f50aaa3d2b2620f55c6df089fbb620671aef52930c47e349effffd87a9fd8799f5820ffb190b982b533a7f4842439ac3176a01659dc891d97fbaa161b6e624172ae5dffffd8799fd8799f58205bfb5275d478dd2dfc71a41ef7daac270430f78c749f488a579960661fe6d4f5ffffd8799fd8799f5820f18a5a3c531a870c58afca9d8cd1e3a3dfa6c856dcb9094a4de19026e9ae3bc9ffffd8799fd8799f5820544075bec08fa9a4dbe9e952fccdaffd1d3fad5fe51ec5ef240305bd748026e1ffffd8799fd8799f5820df65cbedd125f2e9b117c3b7435022881b8a1646d5b456b2344b61e7d6d4c108ffffd8799fd8799f5820b87ec65d14efefdb3eb3c01c207f66d260adf5af2f0f6625f17e37bc12b58f47ffffd87a9fd8799f58202dfdb7922ec9767ba2a6b96ab3383f254dec670532cdba89061b561f8c5528bcffffd87a9fd8799f5820cc29b57db9665508e10a85b4ed7ce0828b60581367d94bb818408a130dd6f68effffd87a9fd8799f58207a17b54918aae0b3d326635286675a8033539dea877201dfe9a2bb90f9c69cdeffffffffff821a00402d6e1a478904d2f5f6
lisicky commented 12 months ago

Hi @Scitz0 ! Datum has limit in 64 bytes for a definite encoded length bytes and 64 bytes for a chunk for indefinite encoded length bytes https://github.com/input-output-hk/cardano-ledger/blob/a3ed8fc299273ebd720c307c35f1b31644b976e7/eras/babbage/test-suite/cddl-files/mock/extras.cddl#L36-L45

I have checked your tx cbor and tx cbor from block and seems they are encoded in different ways. In your cbor one of your bytes field in a datum has definite encoded length for 66 bytes that is bigger than 64. But in the block the same data encoded is indefinite encoded length bytes with chunks with 64 bytes and 2 bytes

Scitz0 commented 12 months ago

Ok thanks, I will investigate where this discrepancy comes from on our end.