From 78a5bf21a029ebc3f58828b4b4af0bfda8c01d6f Mon Sep 17 00:00:00 2001 From: David Edey Date: Thu, 22 Aug 2024 00:35:36 +0100 Subject: [PATCH] tweak: Imported a LocalTransactionExecutionV1 representative to catch issues sooner --- ...al_transaction_execution_v1_bottlenose.txt | 1 + .../src/transaction/system_structure.rs | 7 +- .../src/transaction/system_structure_v1.txt | 1 - .../src/transaction/transaction_receipt.rs | 33 ++ radix-sbor-derive/src/lib.rs | 27 +- sbor-derive-common/src/sbor_assert.rs | 318 +++++++++++------- sbor-derive/src/lib.rs | 27 +- .../comparisons_and_assertions.rs | 14 +- 8 files changed, 264 insertions(+), 164 deletions(-) create mode 100644 radix-engine/src/transaction/node_local_transaction_execution_v1_bottlenose.txt delete mode 100644 radix-engine/src/transaction/system_structure_v1.txt diff --git a/radix-engine/src/transaction/node_local_transaction_execution_v1_bottlenose.txt b/radix-engine/src/transaction/node_local_transaction_execution_v1_bottlenose.txt new file mode 100644 index 00000000000..dfbacf161c0 --- /dev/null +++ b/radix-engine/src/transaction/node_local_transaction_execution_v1_bottlenose.txt @@ -0,0 +1 @@ +5c210222000121032022a5010e0120220c01010a010000000000000001010a780000000000000001010a790000000000000001010a7b0000000000000001010a7e0000000000000001010a7f0000000000000001010a800000000000000001010a830000000000000001010a8b0000000000000001010a8d0000000000000001010a9b0000000000000001010a9f000000000000000f01230720020022010001074201220101010a02000000000000000f012307200700220101010a030000000000000001220101010a230000000000000002220101010a3c0000000000000003220101010a490000000000000004220101010a4b0000000000000005220101010a4f0000000000000006220101010a44000000000000000f012307200400220101010a040000000000000001220101010a21000000000000000222010001070903220101010a22000000000000000f012307201000220101010a050000000000000001220101010a060000000000000002220101010a090000000000000003220101010a0f0000000000000004220101010a100000000000000005220101010a110000000000000006220101010a140000000000000007220101010a150000000000000008220101010a190000000000000009220101010a1a000000000000000a220101010a1b000000000000000b220101010a1c000000000000000c220101010a1d000000000000000d220101010a1e000000000000000e220101010a1f000000000000000f220101010a20000000000000000f012307200100220101010a06000000000000000f012307200400220101010a070000000000000001220101010a080000000000000002220101010a080000000000000003220101010a08000000000000000f012307200200220101010a080000000000000001220101010a08000000000000000d0122000107070f012307200300220101010a0a0000000000000001220101010a0c0000000000000002220101010a0e000000000000000f012307200600220101010a070000000000000001220101010a080000000000000002220101010a080000000000000003220101010a080000000000000004220101010a080000000000000005220101010a0b000000000000000f012307200300220101010a080000000000000001220101010a080000000000000002220101010a08000000000000000f012307200400220101010a080000000000000001220101010a0d000000000000000222000322000f012307200f0022010001070a0122020001070a0001070a02220200010707000107070322020001070700010707042201000107070522020001070a0001070a06220200010707000107070722010001070708220100010707092201000107070a22000b22000c22010001070a0d22000e22000f01230720010022000f012307200400220101010a070000000000000001220101010a080000000000000002220101010a080000000000000003220101010a0a000000000000000f012307200100220101010a08000000000000000f012307200600220101010a080000000000000001220101010a120000000000000002220101010a080000000000000003220101010a0b0000000000000004220101010a08000000000000000522000f012307200200220101010a080000000000000001220101010a130000000000000007000f012307200100220101010a08000000000000000f012307200800220101010a080000000000000001220002220003220101010a0c0000000000000004220301010a080000000000000001010a130000000000000001010a160000000000000005220006220301010a080000000000000001010a130000000000000001010a160000000000000007220301010a080000000000000001010a130000000000000001010a16000000000000000f0123072003002201000107070122010001074102220101010a17000000000000000e0120220201010a1800000000000000000107410d0122000107070f01230720020022010001070901220101010a08000000000000000f0123072001002201000107090f01230720040022010001070901220101010a0a0000000000000002220003220101010a0e000000000000000f012307200200220101010a080000000000000001220101010a0c000000000000000f012307200300220101010a080000000000000001220101010a080000000000000002220101010a0c000000000000000f012307200300220101010a080000000000000001220101010a080000000000000002220101010a0c000000000000000f012307200300220101010a080000000000000001220301010a080000000000000001010a130000000000000001010a160000000000000002220101010a0c000000000000000f012307200300220101010a080000000000000001220301010a080000000000000001010a130000000000000001010a160000000000000002220101010a0c000000000000000f01230720010022000d012201010a08000000000000000f012307202f0022000122000222000322000422000522000622000722000822000922000a22000b22000c22000d22000e22000f220010220101010a240000000000000011220201010a29000000000000000001070712220201010a29000000000000000001070713220401010a29000000000000000001070701010a340000000000000001010a34000000000000001422001522020001070900010707162201000107f11722001822001922001a220101010a35000000000000001b2201000107f01c22001d22001e220101010a36000000000000001f220101010a37000000000000002022002122010001070c22220023220101010a380000000000000024220101010a380000000000000025220101010a390000000000000026220101010a3b000000000000002722002822002922002a22002b22010001070c2c22010001070c2d22002e22010001070c0f01230720090022020001070a0001070a01220101010a250000000000000002220101010a270000000000000003220201010a28000000000000000001070704220201010a280000000000000001010a310000000000000005220301010a280000000000000001010a31000000000000000001070c06220201010a33000000000000000001070c0722000822000f012307200200220101010a26000000000000000122010001070a07000e01202203000107830001070c0001070c0e0120220501010a290000000000000001010a2a0000000000000001010a2b0000000000000001010a2c0000000000000001010a2d000000000000000e01202202000107830001070c0e012022030001070900010709000107090f0123072002002201000107810122000d01220001070c0d012201010a2e000000000000000f012307200200220101010a2f0000000000000001220101010a27000000000000000e0120220201010a300000000000000001010a25000000000000000d0122000107070f01230720060022020001070c01010a32000000000000000122010001070c022201000107070322020001070701010a33000000000000000422020001070701010a33000000000000000522020001070701010a33000000000000000f01230720020022000122000f01230720020022000122000f01230720030022000122000222000f01230720030022000122000222000e0120220201010a290000000000000001010a29000000000000000f01230720060022010001070c01220201010a29000000000000000001070702220201010a29000000000000000001070703220201010a29000000000000000001070704220201010a29000000000000000001070c0522010001070c0e01202203000107830001070c01010a2a000000000000000e01202203000107830001070c01010a3a000000000000000f0123072002002200012201000107830e0120220401010a0800000000000000000107830001070c01010a3a000000000000000f012307200400220101010a3d0000000000000001220101010a440000000000000002220101010a470000000000000003220101010a48000000000000000f012307200600220101010a3e0000000000000001220101010a3e0000000000000002220101010a080000000000000003220101010a3f000000000000000422010001070c0522000e0120220201010a29000000000000000001070c0e0120220201010a400000000000000001010a3e000000000000000f012307200200220101010a410000000000000001220101010a43000000000000000d012201010a42000000000000000e01202202000107e701010a43000000000000000d0122000107e00f012307200100220101010a45000000000000000f0123072005002202000107c0000107c0012200022203000107090001070900010709032201000107c004220101010a46000000000000000f01230720010022000f012307200b0022010001070a0122010001070a0222010001070a0322000422020001070a0001070a0522020001070a0001070a0622020001070a0001070a0722020001070a0001070a0822020001070a0001070a0922000a22000f012307200400220201010a29000000000000000001070c0122010001070c0222000322000f01230720080022000122010001070c0222010001070c03220101010a4a0000000000000004220101010a0d000000000000000522020001070c0001070c06220101010a0d000000000000000722020001070c0001070c0f01230720030022000122000222000f012307200300220101010a4c0000000000000001220101010a4d0000000000000002220101010a4e000000000000000f01230720020022000122030001070c000107400001070c0f012307201b0022010001070c0122000222000322010001070c0422000522010001070906220101010a0d000000000000000722000822000922000a2201000107090b2201000107090c220101010a0d000000000000000d220101010a0d000000000000000e220101010a0d000000000000000f220101010a0d0000000000000010220101010a0d0000000000000011220012220101010a0d0000000000000013220101010a45000000000000001422010001070915220016220017220101010a0d0000000000000018220101010a0d0000000000000019220101010a0d000000000000001a22000f01230720010022010001070a0f01230720170022010001070c01220101010a0d000000000000000222010001070c03220101010a500000000000000004220101010a520000000000000005220101010a540000000000000006220101010a550000000000000007220101010a580000000000000008220101010a5f0000000000000009220101010a61000000000000000a220101010a62000000000000000b220101010a63000000000000000c220101010a66000000000000000d220101010a68000000000000000e220101010a69000000000000000f220101010a6a0000000000000010220101010a6b0000000000000011220101010a6c0000000000000012220101010a6e0000000000000013220101010a6f0000000000000014220101010a740000000000000015220101010a750000000000000016220101010a76000000000000000f01230720080022010001070c0122000222020001070a0001070a03220004220005220101010a51000000000000000622000722000f01230720020022000122030001070c0001070c0001070a0f01230720040022020001070a0001070a0122020001070a0001070a02220101010a0d0000000000000003220101010a53000000000000000f01230720020022010001070c0122010001070c0f0123072003002202000107f2000107f2012200022201000107f20f012307200d0022010001070901220100010709022201000107090322010001070904220101010a560000000000000005220101010a0d0000000000000006220101010a0d0000000000000007220101010a080000000000000008220101010a08000000000000000922000a220101010a0d000000000000000b220101010a57000000000000000c22000d0122000107070f01230720050022010001070a0122020001070a0001070a0222020001070700010707032202000107070001070704220200010707000107070f012307202900220101010a590000000000000001220101010a5d000000000000000222000322010001070c04220005220006220101010a25000000000000000722020001070c01010a5e000000000000000822020001070c01010a5e000000000000000922000a22000b22000c220101010a51000000000000000d22000e22010001070c0f220101010a2500000000000000102201000107071122001222020001070c0001070c13220101010a50000000000000001422001522020001070c000107e71622020001070a0001070a1722020001070a0001070a1822020001070a0001070a1922020001070a0001070a1a22020001070a0001070a1b22020001070a0001070a1c22020001070a0001070a1d2201000107e71e22030001070c0001070a0001070a1f22020001070c0001070c2022030001070c0001070a0001070a2122020001070c0001070c2222030001070c0001070a0001070a2322020001070c0001070c242202000107f2000107f22522010001070c262200272201000107f22822010001070c0f01230720180022000122010001070c02220003220004220101010a5a0000000000000005220101010a5b0000000000000006220101010a5c000000000000000722010001070c0822000922000a22000b220200010709000107090c220200010709000107090d22000e22010001070c0f22001022001122010001070c1222010001070c1322010001070c1422001522010001070c1622010001070c1722000f01230720030022010001070c0122030001070c0001070a0001070a0222010001070c0f01230720050022000122000222000322000422000f01230720020022000122000f01230720160022000122000222010001070a0322010001070a0422000522000622000722000822000922000a22000b22000c22000d22000e22000f22001022001122010001070c1222001322001422001522000f01230720020022000122010001070c0f012307200a00220201010a600000000000000001010a600000000000000001220200010705000107050222020001070a0001070a032202000107070001070a0422000522000622000722000822010001070509220200010709000107090a000f01230720090022000122000222000322000422000522000622000722020001070a0001070a0822000f0123072007002202000107c000010707012200022201000107070322000422000522000622000f012307200b002201000107c3012201000107c30222010001070c03220201010a640000000000000001010a640000000000000004220005220101010a65000000000000000622000722000822000922000a22000f01230720040022000122000222000322000f012307200500220101010a5d000000000000000122000222000322000422010001070c0f012307200500220101010a670000000000000001220101010a680000000000000002220101010a0800000000000000032201000107c00422000f0123072004002202000107c0000107c0012200022201000107c20322000f01230720010022000f0123072003002201000107c20122000222000f012307200900220101010a670000000000000001220101010a6800000000000000022201000107c0032200042200052200062200072202000107c0000107c00822000f01230720020022000122000f012307200100220101010a6d000000000000000f01230720040022000122000222000322000f01230720040022010001078501220100010785022200032201000107e40f012307200a00220001220002220101010a700000000000000003220101010a700000000000000004220101010a700000000000000005220101010a700000000000000006220007220008220201010a710000000000000001010a71000000000000000922000f01230720020022000122000e0120220201010a720000000000000001010a73000000000000000e01202203000107e0000107e0000107e00f0123072002002200012201000107090f0123072009002201000107850122000222020001078500010785032200042200052200062200072200082201000107850f012307200a002201000107850122000222020001078500010785032201000107850422000522000622000722000822000922000f012307200d0022010001078501220002220200010785000107850322010001078504220101010a77000000000000000522000622000722000822000922000a22000b22000c22000d0122000107850e012022070001070900010709000107c0000107c0000107c0000107c0000107c00e0120220101010a7a0000000000000010022201010a080000000000000022000107c00e01202204000107c0000107c0000107c001010a7c0000000000000010022201010a7d0000000000000022000107c00f01230720020022020001078301010a08000000000000000122020001078401010a08000000000000000e01202208000107c00001070900010709000107c000010709000107c0000107c0000107c00e0120220200010708000107c00d012201010a81000000000000000e0120220201010a82000000000000000001070c0f01230720050022000122000222000322000422000e0120220501010a840000000000000001010a850000000000000001010a770000000000000001010a860000000000000001010a87000000000000000d0122000107830d0122000107840d01220001078210022201010a08000000000000002201010a88000000000000000e012022020001078501010a89000000000000000f0123072002002201000107c001220201010a8a0000000000000001010a8a000000000000000d0122000107c2100222000107812201010a8c00000000000000100222000107852201010a89000000000000000d012201010a8e000000000000000f012307200700220101010a8f0000000000000001220002220101010a910000000000000003220101010a930000000000000004220101010a980000000000000005220101010a990000000000000006220101010a9a000000000000000e0120220101010a90000000000000000f01230720040022000122000222000322000e0120220201010a920000000000000001010a92000000000000000e0120220301010a080000000000000001010a300000000000000001010a25000000000000000e0120220101010a94000000000000000f012307200200220101010a950000000000000001220101010a97000000000000000e0120220101010a96000000000000000e012022030001078301010a300000000000000001010a25000000000000000e012022020001070701010a92000000000000000e0120220201010a940000000000000001010a94000000000000000e0120220201010a940000000000000001010a94000000000000000e0120220201010a940000000000000001010a940000000000000010022201010a9c000000000000002201010a9e000000000000000e0120220201010a9d000000000000000001070c0f012307200200220101010a290000000000000001220201010a0800000000000000000107f00e0120220101010a95000000000000000f012307200200220001220101010aa0000000000000000e0120220301010aa10000000000000001010aa20000000000000001010aa4000000000000000a00100222000107842201010aa3000000000000000e01202202000107d1000107c01002220001070c22000107c02021a501022201010c1b4c6f63616c5472616e73616374696f6e457865637574696f6e5631220101220001200c0c076f7574636f6d650b6665655f73756d6d6172790a6665655f736f757263650f6665655f64657374696e6174696f6e19656e67696e655f636f7374696e675f706172616d65746572731e7472616e73616374696f6e5f636f7374696e675f706172616d6574657273106170706c69636174696f6e5f6c6f67731473746174655f7570646174655f73756d6d61727916676c6f62616c5f62616c616e63655f73756d6d6172791a7375627374617465735f73797374656d5f737472756374757265176576656e74735f73797374656d5f7374727563747572650a6e6578745f65706f6368022201010c06526573756c742201012201012307210200022201010c024f6b22000001022201010c03457272220000022201010c0c52756e74696d654572726f722201012201012307210700022201010c0b4b65726e656c4572726f7222000001022201010c0b53797374656d4572726f7222000002022201010c1153797374656d4d6f64756c654572726f7222000003022201010c1353797374656d557073747265616d4572726f7222000004022201010c07566d4572726f7222000005022201010c104170706c69636174696f6e4572726f7222000006022201010c1846696e616c697a6174696f6e436f7374696e674572726f72220000022201010c0b4b65726e656c4572726f722201012201012307210400022201010c0e43616c6c4672616d654572726f7222000001022201010c114964416c6c6f636174696f6e4572726f7222000002022201010c1a537562737461746548616e646c65446f65734e6f74457869737422000003022201010c0d4f727068616e65644e6f646573220000022201010c0e43616c6c4672616d654572726f722201012201012307211000022201010c104372656174654672616d654572726f7222000001022201010c10506173734d6573736167654572726f7222000002022201010c0f4372656174654e6f64654572726f7222000003022201010c0d44726f704e6f64654572726f7222000004022201010c0c50696e4e6f64654572726f7222000005022201010c124d6f7665506172746974696f6e4572726f7222000006022201010c1a4d61726b5472616e7369656e7453756273746174654572726f7222000007022201010c114f70656e53756273746174654572726f7222000008022201010c12436c6f736553756273746174654572726f7222000009022201010c115265616453756273746174654572726f722200000a022201010c12577269746553756273746174654572726f722200000b022201010c125363616e5375627374617465734572726f722200000c022201010c13447261696e5375627374617465734572726f722200000d022201010c185363616e536f727465645375627374617465734572726f722200000e022201010c115365745375627374617465734572726f722200000f022201010c1452656d6f76655375627374617465734572726f72220000022201010c104372656174654672616d654572726f722201012201012307210100022201010c10506173734d6573736167654572726f72220000022201010c10506173734d6573736167654572726f722201012201012307210400022201010c0d54616b654e6f64654572726f7222000001022201010c11476c6f62616c5265664e6f74466f756e6422000002022201010c114469726563745265664e6f74466f756e6422000003022201010c145472616e7369656e745265664e6f74466f756e64220000022201010c0d54616b654e6f64654572726f722201012201012307210200022201010c0b4f776e4e6f74466f756e6422000001022201010c105375627374617465426f72726f776564220000022201010c064e6f64654964220000022201010c0f4372656174654e6f64654572726f722201012201012307210300022201010c1450726f6365737353756273746174654572726f7222000001022201010c1750726f6365737353756273746174654b65794572726f7222000002022201010c115375627374617465446966664572726f72220000022201010c1450726f6365737353756273746174654572726f722201012201012307210600022201010c0d54616b654e6f64654572726f7222000001022201010c1343616e7444726f704e6f6465496e53746f726522000002022201010c0b5265664e6f74466f756e6422000003022201010c1852656643616e7442654164646564546f537562737461746522000004022201010c164e6f6e476c6f62616c5265664e6f74416c6c6f77656422000005022201010c10506572736973744e6f64654572726f72220000022201010c10506572736973744e6f64654572726f722201012201012307210300022201010c14436f6e7461696e734e6f6e476c6f62616c52656622000001022201010c0c4e6f6465426f72726f77656422000002022201010c1743616e6e6f745065727369737450696e6e65644e6f6465220000022201010c1750726f6365737353756273746174654b65794572726f722201012201012307210400022201010c0e4e6f64654e6f7456697369626c6522000001022201010c0b4465636f64654572726f7222000002022201010c154f776e65644e6f64654e6f74537570706f7274656422000003022201010c184e6f6e476c6f62616c5265664e6f74537570706f72746564220000022201010c0b4465636f64654572726f722201012201012307210f00022201010c124578747261547261696c696e67427974657322000001022201010c0f427566666572556e646572666c6f77220101220001200c020872657175697265640972656d61696e696e6702022201010c17556e65787065637465645061796c6f6164507265666978220101220001200c020865787065637465640661637475616c03022201010c13556e657870656374656456616c75654b696e64220101220001200c020865787065637465640661637475616c04022201010c19556e6578706563746564437573746f6d56616c75654b696e64220101220001200c010661637475616c05022201010c0e556e657870656374656453697a65220101220001200c020865787065637465640661637475616c06022201010c17556e65787065637465644469736372696d696e61746f72220101220001200c020865787065637465640661637475616c07022201010c10556e6b6e6f776e56616c75654b696e6422000008022201010c14556e6b6e6f776e4469736372696d696e61746f7222000009022201010c0b496e76616c6964426f6f6c2200000a022201010c0b496e76616c6964557466382200000b022201010c0b496e76616c696453697a652200000c022201010c104d6178446570746845786365656465642200000d022201010c0c4475706c69636174654b65792200000e022201010c12496e76616c6964437573746f6d56616c7565220000022201010c115375627374617465446966664572726f722201012201012307210100022201010c15436f6e7461696e734475706c69636174654f776e73220000022201010c0d44726f704e6f64654572726f722201012201012307210400022201010c0d54616b654e6f64654572726f7222000001022201010c0c4e6f6465426f72726f77656422000002022201010c105375627374617465426f72726f77656422000003022201010c1450726f6365737353756273746174654572726f72220000022201010c0c50696e4e6f64654572726f722201012201012307210100022201010c0e4e6f64654e6f7456697369626c65220000022201010c124d6f7665506172746974696f6e4572726f722201012201012307210600022201010c104e6f64654e6f74417661696c61626c6522000001022201010c184865617052656d6f7665506172746974696f6e4572726f7222000002022201010c164e6f6e476c6f62616c5265664e6f74416c6c6f77656422000003022201010c10506572736973744e6f64654572726f7222000004022201010c105375627374617465426f72726f77656422000005022201010c194d6f766546726f6d53746f72654e6f745065726d6974746564220000022201010c184865617052656d6f7665506172746974696f6e4572726f722201012201012307210200022201010c0c4e6f64654e6f74466f756e6422000001022201010c0e4d6f64756c654e6f74466f756e64220000022201010c0f506172746974696f6e4e756d626572220000022201010c1a4d61726b5472616e7369656e7453756273746174654572726f722201012201012307210100022201010c0e4e6f64654e6f7456697369626c65220000022201010c114f70656e53756273746174654572726f722201012201012307210800022201010c0e4e6f64654e6f7456697369626c6522000001022201010c0d53756273746174654661756c7422000002022201010c13496e76616c696444656661756c7456616c756522000003022201010c1750726f6365737353756273746174654b65794572726f7222000004022201010c0e53756273746174654c6f636b656422000005022201010c1c4c6f636b556e6d6f646966696564426173654f6e486561704e6f646522000006022201010c1f4c6f636b556e6d6f646966696564426173654f6e4e6577537562737461746522000007022201010c254c6f636b556e6d6f646966696564426173654f6e4f6e557064617465645375627374617465220000022201010c0b53756273746174654b65792201012201012307210300022201010c054669656c6422000001022201010c034d617022000002022201010c06536f727465642200000222000022000002220000220000022201010c12436c6f736553756273746174654572726f722201012201012307210200022201010c0e48616e646c654e6f74466f756e6422000001022201010c105375627374617465426f72726f776564220000022201010c115265616453756273746174654572726f722201012201012307210100022201010c0e48616e646c654e6f74466f756e64220000022201010c12577269746553756273746174654572726f722201012201012307210400022201010c0e48616e646c654e6f74466f756e6422000001022201010c1450726f6365737353756273746174654572726f7222000002022201010c114e6f57726974655065726d697373696f6e22000003022201010c115375627374617465446966664572726f72220000022201010c1643616c6c4672616d655363616e4b6579734572726f722201012201012307210200022201010c0e4e6f64654e6f7456697369626c6522000001022201010c1750726f6365737353756273746174654b65794572726f72220000022201010c1c43616c6c4672616d65447261696e5375627374617465734572726f722201012201012307210300022201010c0e4e6f64654e6f7456697369626c6522000001022201010c184e6f6e476c6f62616c5265664e6f74537570706f7274656422000002022201010c1750726f6365737353756273746174654b65794572726f72220000022201010c2143616c6c4672616d655363616e536f727465645375627374617465734572726f722201012201012307210300022201010c0e4e6f64654e6f7456697369626c6522000001022201010c154f776e65644e6f64654e6f74537570706f7274656422000002022201010c1750726f6365737353756273746174654b65794572726f72220000022201010c1943616c6c4672616d6553657453756273746174654572726f722201012201012307210300022201010c0e4e6f64654e6f7456697369626c6522000001022201010c0e53756273746174654c6f636b656422000002022201010c1750726f6365737353756273746174654b65794572726f72220000022201010c1c43616c6c4672616d6552656d6f766553756273746174654572726f722201012201012307210300022201010c0e4e6f64654e6f7456697369626c6522000001022201010c0e53756273746174654c6f636b656422000002022201010c1750726f6365737353756273746174654b65794572726f72220000022201010c114964416c6c6f636174696f6e4572726f722201012201012307210100022201010c074f75744f66494422000002220000220000022201010c0b53797374656d4572726f722201012201012307212f00022201010c0d4e6f426c75657072696e74496422000001022201010c104e6f5061636b6167654164647265737322000002022201010c17496e76616c69644163746f72537461746548616e646c6522000003022201010c15496e76616c69644163746f7252656648616e646c6522000004022201010c1d476c6f62616c697a696e675472616e7369656e74426c75657072696e7422000005022201010c19476c6f62616c41646472657373446f65734e6f74457869737422000006022201010c174e6f74416e416464726573735265736572766174696f6e22000007022201010c0b4e6f74416e4f626a65637422000008022201010c114e6f74414b657956616c756553746f726522000009022201010c1b4d6f64756c6573446f6e74486176654f757465724f626a656374732200000a022201010c174163746f724e6f64654964446f65734e6f7445786973742200000b022201010c174f757465724f626a656374446f65734e6f7445786973742200000c022201010c0f4e6f74414669656c6448616e646c652200000d022201010c144e6f74414669656c64577269746548616e646c652200000e022201010c0d526f6f744861734e6f547970652200000f022201010c1841646472657373426563683332456e636f64654572726f7222000010022201010c0e54797065436865636b4572726f7222000011022201010c114669656c64446f65734e6f74457869737422000012022201010c1b436f6c6c656374696f6e496e646578446f65734e6f74457869737422000013022201010c1c436f6c6c656374696f6e496e64657849734f6657726f6e675479706522000014022201010c134b657956616c7565456e7472794c6f636b656422000015022201010c0b4669656c644c6f636b656422000016022201010c184f626a6563744d6f64756c65446f65734e6f74457869737422000017022201010c174e6f74414b657956616c7565456e74727948616e646c6522000018022201010c1c4e6f74414b657956616c7565456e747279577269746548616e646c6522000019022201010c10496e76616c69644c6f636b466c6167732200001a022201010c0f43616e6e6f74476c6f62616c697a652200001b022201010c0d4d697373696e674d6f64756c652200001c022201010c1f496e76616c6964476c6f62616c416464726573735265736572766174696f6e2200001d022201010c1a496e76616c69644368696c644f626a6563744372656174696f6e2200001e022201010c11496e76616c69644d6f64756c65547970652200001f022201010c114372656174654f626a6563744572726f7222000020022201010c12496e76616c696447656e657269634172677322000021022201010c0e496e76616c69644665617475726522000022022201010c1641737365727441636365737352756c654661696c656422000023022201010c15426c75657072696e74446f65734e6f74457869737422000024022201010c184175746854656d706c617465446f65734e6f74457869737422000025022201010c16496e76616c6964476c6f62616c697a6541636365737322000026022201010c11496e76616c696444726f7041636365737322000027022201010c17436f7374696e674d6f64756c654e6f74456e61626c656422000028022201010c14417574684d6f64756c654e6f74456e61626c656422000029022201010c225472616e73616374696f6e52756e74696d654d6f64756c654e6f74456e61626c65642200002a022201010c1e466f72636557726974654576656e74466c6167734e6f74416c6c6f7765642200002b022201010c15426c75657072696e74547970654e6f74466f756e642200002c022201010c08426c734572726f722200002d022201010c0e496e70757444617461456d7074792200002e022201010c0b53797374656d50616e6963220000022201010c0e54797065436865636b4572726f722201012201012307210900022201010c1a496e76616c69644e756d6265724f6647656e6572696341726773220101220001200c020865787065637465640661637475616c01022201010c12496e76616c69644c6f63616c54797065496422000002022201010c1e496e76616c6964426c75657072696e74547970654964656e74696669657222000003022201010c16496e76616c6964436f6c6c656374696f6e496e64657822000004022201010c1c426c75657072696e745061796c6f6164446f65734e6f74457869737422000005022201010c1f426c75657072696e745061796c6f616456616c69646174696f6e4572726f7222000006022201010c234b657956616c756553746f72655061796c6f616456616c69646174696f6e4572726f7222000007022201010c16496e7374616e6365536368656d614e6f74466f756e6422000008022201010c0d4d697373696e67536368656d61220000022201010c0b4c6f63616c5479706549642201012201012307210200022201010c0957656c6c4b6e6f776e22000001022201010c10536368656d614c6f63616c496e646578220000022201010c0f57656c6c4b6e6f776e547970654964220000022201010c17426c75657072696e74547970654964656e746966696572220101220001200c030f7061636b6167655f616464726573730e626c75657072696e745f6e616d6509747970655f6e616d65022201010c0d426c75657072696e74496e666f220101220001200c050c626c75657072696e745f696411626c75657072696e745f76657273696f6e0e6f757465725f6f626a5f696e666f0866656174757265731567656e657269635f737562737469747574696f6e73022201010c0b426c75657072696e744964220101220001200c020f7061636b6167655f616464726573730e626c75657072696e745f6e616d65022201010c10426c75657072696e7456657273696f6e220101220001200c03056d616a6f72056d696e6f72057061746368022201010c0f4f757465724f626a656374496e666f2201012201012307210200022201010c04536f6d65220101220001200c010c6f757465725f6f626a65637401022201010c044e6f6e652200000222000022000002220000220000022201010c1347656e65726963537562737469747574696f6e2201012201012307210200022201010c054c6f63616c22000001022201010c0652656d6f7465220000022201010c0c53636f706564547970654964220000022201010c0a536368656d6148617368220000022201010c1a426c75657072696e745061796c6f61644964656e7469666965722201012201012307210600022201010c0846756e6374696f6e22000001022201010c054576656e7422000002022201010c054669656c6422000003022201010c0d4b657956616c7565456e74727922000004022201010c0a496e646578456e74727922000005022201010c10536f72746564496e646578456e747279220000022201010c0d496e7075744f724f75747075742201012201012307210200022201010c05496e70757422000001022201010c064f7574707574220000022201010c0a4b65794f7256616c75652201012201012307210200022201010c034b657922000001022201010c0556616c7565220000022201010c16426c75657072696e74506172746974696f6e547970652201012201012307210300022201010c124b657956616c7565436f6c6c656374696f6e22000001022201010c0f496e646578436f6c6c656374696f6e22000002022201010c15536f72746564496e646578436f6c6c656374696f6e220000022201010c1443616e6e6f74476c6f62616c697a654572726f722201012201012307210300022201010c0b4e6f74416e4f626a65637422000001022201010c11416c7265616479476c6f62616c697a656422000002022201010c12496e76616c6964426c75657072696e744964220000022201010c11496e76616c69644d6f64756c6554797065220101220001200c021265787065637465645f626c75657072696e741061637475616c5f626c75657072696e74022201010c114372656174654f626a6563744572726f722201012201012307210600022201010c11426c75657072696e744e6f74466f756e6422000001022201010c18496e76616c69644669656c64447565546f4665617475726522000002022201010c0c4d697373696e674669656c6422000003022201010c11496e76616c69644669656c64496e64657822000004022201010c15536368656d6156616c69646174696f6e4572726f7222000005022201010c14496e76616c696453756273746174655772697465220000022201010c1443616e6f6e6963616c426c75657072696e744964220101220001200c03076164647265737309626c75657072696e740776657273696f6e022201010c16496e76616c6964476c6f62616c697a65416363657373220101220001200c030f7061636b6167655f616464726573730e626c75657072696e745f6e616d650d6163746f725f7061636b616765022201010c064f7074696f6e2201012201012307210200022201010c044e6f6e6522000001022201010c04536f6d65220000022201010c11496e76616c696444726f70416363657373220101220001200c04076e6f64655f69640f7061636b6167655f616464726573730e626c75657072696e745f6e616d650d6163746f725f7061636b616765022201010c1153797374656d4d6f64756c654572726f722201012201012307210400022201010c09417574684572726f7222000001022201010c0c436f7374696e674572726f7222000002022201010c165472616e73616374696f6e4c696d6974734572726f7222000003022201010c0a4576656e744572726f72220000022201010c09417574684572726f722201012201012307210600022201010c0a4e6f46756e6374696f6e22000001022201010c0f4e6f4d6574686f644d617070696e6722000002022201010c0f5669736962696c6974794572726f7222000003022201010c0c556e617574686f72697a656422000004022201010c1a496e6e6572426c75657072696e74446f65734e6f74457869737422000005022201010c19496e76616c69644f757465724f626a6563744d617070696e67220000022201010c0c466e4964656e746966696572220101220001200c020c626c75657072696e745f6964056964656e74022201010c0c556e617574686f72697a6564220101220001200c02136661696c65645f6163636573735f72756c65730d666e5f6964656e746966696572022201010c114661696c656441636365737352756c65732201012201012307210200022201010c08526f6c654c69737422000001022201010c0a41636365737352756c65220000022200002200000222000022000002220000220000022201010c0c436f7374696e674572726f722201012201012307210100022201010c0f466565526573657276654572726f72220000022201010c0f466565526573657276654572726f722201012201012307210500022201010c13496e73756666696369656e7442616c616e6365220101220001200c020872657175697265640972656d61696e696e6701022201010c084f766572666c6f7722000002022201010c0d4c696d69744578636565646564220101220001200c03056c696d697409636f6d6d6974746564036e657703022201010c134c6f616e52657061796d656e744661696c6564220101220001200c01087872645f6f77656404022201010c0541626f7274220000022201010c0b41626f7274526561736f6e2201012201012307210100022201010c2a436f6e6669677572656441626f72745472696767657265644f6e4665654c6f616e52657061796d656e74220000022201010c165472616e73616374696f6e4c696d6974734572726f722201012201012307210b00022201010c1a4d617853756273746174654b657953697a65457863656564656422000001022201010c174d6178537562737461746553697a65457863656564656422000002022201010c1c4d6178496e766f6b655061796c6f616453697a65457863656564656422000003022201010c184d617843616c6c44657074684c696d69745265616368656422000004022201010c19547261636b537562737461746553697a654578636565646564220101220001200c020661637475616c036d617805022201010c1848656170537562737461746553697a654578636565646564220101220001200c020661637475616c036d617806022201010c0f4c6f6753697a65546f6f4c61726765220101220001200c020661637475616c036d617807022201010c114576656e7453697a65546f6f4c61726765220101220001200c020661637475616c036d617808022201010c1850616e69634d65737361676553697a65546f6f4c61726765220101220001200c020661637475616c036d617809022201010c0b546f6f4d616e794c6f67732200000a022201010c0d546f6f4d616e794576656e7473220000022201010c0a4576656e744572726f722201012201012307210400022201010c13536368656d614e6f74466f756e644572726f72220101220001200c0209626c75657072696e740a6576656e745f6e616d6501022201010c134576656e74536368656d614e6f744d6174636822000002022201010c134e6f4173736f6369617465645061636b61676522000003022201010c0c496e76616c69644163746f72220000022201010c1353797374656d557073747265616d4572726f722201012201012307210800022201010c1c53797374656d46756e6374696f6e43616c6c4e6f74416c6c6f77656422000001022201010c0a466e4e6f74466f756e6422000002022201010c1052656365697665724e6f744d6174636822000003022201010c0c486f6f6b4e6f74466f756e6422000004022201010c10496e7075744465636f64654572726f7222000005022201010c13496e707574536368656d614e6f744d6174636822000006022201010c114f75747075744465636f64654572726f7222000007022201010c144f7574707574536368656d614e6f744d61746368220000022201010c0d426c75657072696e74486f6f6b2201012201012307210300022201010c0c4f6e5669727475616c697a6522000001022201010c064f6e4d6f766522000002022201010c064f6e44726f70220000022201010c07566d4572726f722201012201012307210300022201010c064e617469766522000001022201010c045761736d22000002022201010c105363727970746f566d56657273696f6e220000022201010c124e617469766552756e74696d654572726f722201012201012307210200022201010c0d496e76616c6964436f6465496422000001022201010c0454726170220101220001200c030b6578706f72745f6e616d6505696e707574056572726f72022201010c105761736d52756e74696d654572726f722201012201012307211b00022201010c0d556e6b6e6f776e4578706f727422000001022201010c114d656d6f72794163636573734572726f7222000002022201010c12496e76616c69645761736d506f696e74657222000003022201010c0e457865637574696f6e4572726f7222000004022201010c0e4e6f74496d706c656d656e74656422000005022201010c0e4275666665724e6f74466f756e6422000006022201010c0e496e76616c69644164647265737322000007022201010c0d496e76616c6964537472696e6722000008022201010c0d496e76616c69644e6f6465496422000009022201010c1f496e76616c6964476c6f62616c416464726573735265736572766174696f6e2200000a022201010c14496e76616c69645265666572656e6365547970652200000b022201010c17496e76616c696441747461636865644d6f64756c6549642200000c022201010c13496e76616c69644f626a6563745374617465732200000d022201010c11496e76616c696441636365737352756c652200000e022201010c0e496e76616c69644d6f64756c65732200000f022201010c13496e76616c696454656d706c6174654172677322000010022201010c1a496e76616c69644b657956616c756553746f7265536368656d6122000011022201010c10496e76616c69644c6f636b466c61677322000012022201010c0f496e76616c69644c6f674c6576656c22000013022201010c0f466565526573657276654572726f7222000014022201010c11496e76616c69644576656e74466c61677322000015022201010c15496e76616c69645061636b6167654164647265737322000016022201010c0e546f6f4d616e794275666665727322000017022201010c13496e76616c6964426c735075626c69634b657922000018022201010c13496e76616c6964426c735369676e617475726522000019022201010c1c496e76616c6964426c735075626c69634b65794f724d6573736167652200001a022201010c0e496e70757444617461456d707479220000022201010c155363727970746f566d56657273696f6e4572726f722201012201012307210100022201010c0c46726f6d496e744572726f72220000022201010c104170706c69636174696f6e4572726f722201012201012307211700022201010c124578706f7274446f65734e6f74457869737422000001022201010c10496e7075744465636f64654572726f7222000002022201010c0c50616e69634d65737361676522000003022201010c13526f6c6541737369676e6d656e744572726f7222000004022201010c0d4d657461646174614572726f7222000005022201010c15436f6d706f6e656e74526f79616c74794572726f7222000006022201010c195472616e73616374696f6e50726f636573736f724572726f7222000007022201010c0c5061636b6167654572726f7222000008022201010c15436f6e73656e7375734d616e616765724572726f7222000009022201010c0e56616c696461746f724572726f722200000a022201010c1c46756e6769626c655265736f757263654d616e616765724572726f722200000b022201010c1f4e6f6e46756e6769626c655265736f757263654d616e616765724572726f722200000c022201010c0b4275636b65744572726f722200000d022201010c0a50726f6f664572726f722200000e022201010c154e6f6e46756e6769626c655661756c744572726f722200000f022201010c0a5661756c744572726f7222000010022201010c0c576f726b746f704572726f7222000011022201010c0d417574685a6f6e654572726f7222000012022201010c0c4163636f756e744572726f7222000013022201010c15416363657373436f6e74726f6c6c65724572726f7222000014022201010c144f6e655265736f75726365506f6f6c4572726f7222000015022201010c1454776f5265736f75726365506f6f6c4572726f7222000016022201010c164d756c74695265736f75726365506f6f6c4572726f72220000022201010c13526f6c6541737369676e6d656e744572726f722201012201012307210800022201010c10557365645265736572766564526f6c6522000001022201010c11557365645265736572766564537061636522000002022201010c1645786365656465644d6178526f6c654e616d654c656e220101220001200c02056c696d69740661637475616c03022201010c1a45786365656465644d617841636365737352756c65446570746822000004022201010c1a45786365656465644d617841636365737352756c654e6f64657322000005022201010c0b496e76616c69644e616d6522000006022201010c1045786365656465644d6178526f6c657322000007022201010c1a43616e6e6f74536574526f6c6549664e6f744174746163686564220000022201010c10496e76616c69644e616d654572726f722201012201012307210200022201010c0b456d707479537472696e6722000001022201010c0b496e76616c696443686172220101220001200c03046e616d650e76696f6c6174696e675f6368617205696e646578022201010c0d4d657461646174614572726f722201012201012307210400022201010c194b6579537472696e67457863656564734d61784c656e677468220101220001200c02036d61780661637475616c01022201010c1956616c756553626f72457863656564734d61784c656e677468220101220001200c02036d61780661637475616c02022201010c1056616c75654465636f64654572726f7222000003022201010c174d6574616461746156616c69646174696f6e4572726f72220000022201010c174d6574616461746156616c69646174696f6e4572726f722201012201012307210200022201010c0a496e76616c696455524c22000001022201010c0d496e76616c69644f726967696e220000022201010c15436f6d706f6e656e74526f79616c74794572726f722201012201012307210300022201010c21526f79616c7479416d6f756e744973477265617465725468616e416c6c6f776564220101220001200c02036d61780661637475616c01022201010c21556e6578706563746564446563696d616c436f6d7075746174696f6e4572726f7222000002022201010c17526f79616c7479416d6f756e7449734e65676174697665220000022201010c195472616e73616374696f6e50726f636573736f724572726f722201012201012307210d00022201010c0e4275636b65744e6f74466f756e6422000001022201010c0d50726f6f664e6f74466f756e6422000002022201010c1a416464726573735265736572766174696f6e4e6f74466f756e6422000003022201010c0f416464726573734e6f74466f756e6422000004022201010c0c426c6f624e6f74466f756e6422000005022201010c0f496e76616c696443616c6c4461746122000006022201010c14496e76616c69645061636b616765536368656d6122000007022201010c114e6f745061636b6167654164647265737322000008022201010c104e6f74476c6f62616c4164647265737322000009022201010c0f417574685a6f6e654973456d7074792200000a022201010c1b496e766f636174696f6e4f75747075744465636f64654572726f722200000b022201010c0f41726773456e636f64654572726f722200000c022201010c1a546f74616c426c6f6253697a654c696d69744578636565646564220000022201010c0448617368220000022201010c0b456e636f64654572726f722201012201012307210500022201010c104d61784465707468457863656564656422000001022201010c0c53697a65546f6f4c61726765220101220001200c020661637475616c0b6d61785f616c6c6f77656402022201010c204d69736d61746368696e674172726179456c656d656e7456616c75654b696e64220101220001200c0212656c656d656e745f76616c75655f6b696e641161637475616c5f76616c75655f6b696e6403022201010c1a4d69736d61746368696e674d61704b657956616c75654b696e64220101220001200c020e6b65795f76616c75655f6b696e641161637475616c5f76616c75655f6b696e6404022201010c1c4d69736d61746368696e674d617056616c756556616c75654b696e64220101220001200c021076616c75655f76616c75655f6b696e641161637475616c5f76616c75655f6b696e64022201010c0c5061636b6167654572726f722201012201012307212900022201010c0b496e76616c69645761736d22000001022201010c16496e76616c6964426c75657072696e74536368656d6122000002022201010c16546f6f4d616e795375627374617465536368656d617322000003022201010c1346656174757265446f65734e6f74457869737422000004022201010c15496e76616c69645472616e7369656e744669656c6422000005022201010c1e53797374656d496e737472756374696f6e734e6f74537570706f7274656422000006022201010c1a4661696c6564546f5265736f6c76654c6f63616c536368656d61220101220001200c010d6c6f63616c5f747970655f696407022201010c114576656e744e616d654d69736d61746368220101220001200c020865787065637465640661637475616c08022201010c10547970654e616d654d69736d61746368220101220001200c020865787065637465640661637475616c09022201010c12496e76616c69644576656e74536368656d612200000a022201010c15496e76616c696453797374656d46756e6374696f6e2200000b022201010c11496e76616c696454797065506172656e742200000c022201010c0b496e76616c69644e616d652200000d022201010c154d697373696e674f75746572426c75657072696e742200000e022201010c0f5761736d556e737570706f727465642200000f022201010c12496e76616c69644c6f63616c54797065496422000010022201010c10496e76616c696447656e65726963496422000011022201010c1c4576656e7447656e65726963547970654e6f74537570706f7274656422000012022201010c244f75746572426c75657072696e7443616e744265416e496e6e6572426c75657072696e74220101220001200c0205696e6e65720f76696f6c6174696e675f6f7574657213022201010c13526f6c6541737369676e6d656e744572726f7222000014022201010c10496e76616c696441757468536574757022000015022201010c17446566696e696e675265736572766564526f6c654b657922000016022201010c1045786365656465644d6178526f6c6573220101220001200c02056c696d69740661637475616c17022201010c1645786365656465644d6178526f6c654e616d654c656e220101220001200c02056c696d69740661637475616c18022201010c1b45786365656465644d6178426c75657072696e744e616d654c656e220101220001200c02056c696d69740661637475616c19022201010c1745786365656465644d61784576656e744e616d654c656e220101220001200c02056c696d69740661637475616c1a022201010c1645786365656465644d6178547970654e616d654c656e220101220001200c02056c696d69740661637475616c1b022201010c1a45786365656465644d617846756e6374696f6e4e616d654c656e220101220001200c02056c696d69740661637475616c1c022201010c1945786365656465644d6178466561747572654e616d654c656e220101220001200c02056c696d69740661637475616c1d022201010c0b4d697373696e67526f6c652200001e022201010c1c556e65787065637465644e756d6265724f664d6574686f6441757468220101220001200c0309626c75657072696e740865787065637465640661637475616c1f022201010c174d697373696e674d6574686f645065726d697373696f6e220101220001200c0209626c75657072696e74056964656e7420022201010c1e556e65787065637465644e756d6265724f6646756e6374696f6e41757468220101220001200c0309626c75657072696e740865787065637465640661637475616c21022201010c194d697373696e6746756e6374696f6e5065726d697373696f6e220101220001200c0209626c75657072696e74056964656e7422022201010c23556e65787065637465644e756d6265724f6646756e6374696f6e526f79616c74696573220101220001200c0309626c75657072696e740865787065637465640661637475616c23022201010c164d697373696e6746756e6374696f6e526f79616c7479220101220001200c0209626c75657072696e74056964656e7424022201010c21526f79616c7479416d6f756e744973477265617465725468616e416c6c6f776564220101220001200c02036d61780661637475616c25022201010c12496e76616c69644d657461646174614b657922000026022201010c13526f79616c746965734e6f74456e61626c656422000027022201010c17526f79616c7479416d6f756e7449734e6567617469766522000028022201010c1b5265736572766564526f6c654b657949734e6f74446566696e6564220000022201010c0c507265706172654572726f722201012201012307211800022201010c14446573657269616c697a6174696f6e4572726f7222000001022201010c0f56616c69646174696f6e4572726f7222000002022201010c1253657269616c697a6174696f6e4572726f7222000003022201010c17537461727446756e6374696f6e4e6f74416c6c6f77656422000004022201010c0d496e76616c6964496d706f727422000005022201010c0d496e76616c69644d656d6f727922000006022201010c0c496e76616c69645461626c6522000007022201010c11496e76616c69644578706f72744e616d6522000008022201010c17546f6f4d616e7954617267657473496e42725461626c6522000009022201010c10546f6f4d616e7946756e6374696f6e732200000a022201010c15546f6f4d616e7946756e6374696f6e506172616d732200000b022201010c15546f6f4d616e7946756e6374696f6e4c6f63616c73220101220001200c02036d61780661637475616c0c022201010c0e546f6f4d616e79476c6f62616c73220101220001200c02036d61780763757272656e740d022201010c0f4e6f4578706f727453656374696f6e2200000e022201010c0d4d697373696e674578706f7274220101220001200c010b6578706f72745f6e616d650f022201010c144e6f5363727970746f416c6c6f634578706f727422000010022201010c134e6f5363727970746f467265654578706f727422000011022201010c1d52656a65637465644279496e737472756374696f6e4d65746572696e67220101220001200c0106726561736f6e12022201010c1752656a65637465644279537461636b4d65746572696e67220101220001200c0106726561736f6e13022201010c114e6f74496e7374616e7469617461626c65220101220001200c0106726561736f6e14022201010c0d4e6f74436f6d70696c61626c6522000015022201010c0f4d6f64756c65496e666f4572726f7222000016022201010c0f5761736d5061727365724572726f7222000017022201010c084f766572666c6f77220000022201010c0d496e76616c6964496d706f72742201012201012307210300022201010c10496d706f72744e6f74416c6c6f77656422000001022201010c1750726f746f636f6c56657273696f6e4d69736d61746368220101220001200c03046e616d650f63757272656e745f76657273696f6e1065787065637465645f76657273696f6e02022201010c13496e76616c696446756e6374696f6e54797065220000022201010c0d496e76616c69644d656d6f72792201012201012307210500022201010c144d697373696e674d656d6f727953656374696f6e22000001022201010c124e6f4d656d6f7279446566696e6974696f6e22000002022201010c17546f6f4d616e794d656d6f7279446566696e6974696f6e22000003022201010c174d656d6f727953697a654c696d6974457863656564656422000004022201010c114d656d6f72794e6f744578706f72746564220000022201010c0c496e76616c69645461626c652201012201012307210200022201010c104d6f72655468616e4f6e655461626c6522000001022201010c1d496e697469616c5461626c6553697a654c696d69744578636565646564220000022201010c15536368656d6156616c69646174696f6e4572726f722201012201012307211600022201010c164d657461646174614c656e6774684d69736d6174636822000001022201010c1956616c69646174696f6e734c656e6774684d69736d6174636822000002022201010c14547970654b696e645475706c65546f6f4c6f6e67220101220001200c01086d61785f73697a6503022201010c1a547970654b696e64456e756d56617269616e74546f6f4c6f6e67220101220001200c01086d61785f73697a6504022201010c1f547970654b696e64496e76616c6964536368656d614c6f63616c496e64657822000005022201010c1d547970654b696e64496e76616c696457656c6c4b6e6f776e496e64657822000006022201010c29547970654d65746164617461436f6e7461696e6564556e65787065637465644368696c644e616d657322000007022201010c28547970654d65746164617461436f6e7461696e65644475706c69636174654669656c644e616d657322000008022201010c30547970654d657461646174614669656c644e616d65436f756e74446f65734e6f744d617463684669656c64436f756e7422000009022201010c2b547970654d65746164617461436f6e7461696e6564556e6578706563746564456e756d56617269616e74732200000a022201010c2a547970654d65746164617461436f6e7461696e6564556e65787065637465644e616d65644669656c64732200000b022201010c2a547970654d65746164617461436f6e7461696e656457726f6e674e756d6265724f6656617269616e74732200000c022201010c1e547970654d65746164617461456e756d4e616d65497352657175697265642200000d022201010c25547970654d65746164617461456e756d56617269616e744e616d65497352657175697265642200000e022201010c2d547970654d65746164617461466f72456e756d49734e6f74456e756d56617269616e744368696c644e616d65732200000f022201010c2b547970654d657461646174614861734d69736d61746368696e67456e756d4469736372696d696e61746f7222000010022201010c2e547970654d65746164617461436f6e7461696e65644475706c6963617465456e756d56617269616e744e616d657322000011022201010c10496e76616c69644964656e744e616d65220101220001200c01076d65737361676512022201010c165479706556616c69646174696f6e4d69736d6174636822000013022201010c265479706556616c69646174696f6e4e756d6572696356616c69646174696f6e496e76616c696422000014022201010c255479706556616c69646174696f6e4c656e67746856616c69646174696f6e496e76616c696422000015022201010c225479706556616c69646174696f6e4174746163686564546f437573746f6d54797065220000022201010c064f7074696f6e2201012201012307210200022201010c044e6f6e6522000001022201010c04536f6d65220000022201010c15436f6e73656e7375734d616e616765724572726f722201012201012307210a00022201010c12496e76616c6964526f756e64557064617465220101220001200c020466726f6d02746f01022201010c1e496e76616c696450726f706f73657254696d657374616d70557064617465220101220001200c020b66726f6d5f6d696c6c697309746f5f6d696c6c697302022201010c15496e636f6e73697374656e74476170526f756e6473220101220001200c020a6761705f726f756e64731170726f677265737365645f726f756e647303022201010c15496e76616c696456616c696461746f72496e646578220101220001200c0205696e64657805636f756e7404022201010c0e416c72656164795374617274656422000005022201010c064e6f7458726422000006022201010c21556e6578706563746564446563696d616c436f6d7075746174696f6e4572726f7222000007022201010c1145706f63684d6174684f766572666c6f7722000008022201010c14496e76616c6964436f6e73656e73757354696d6522000009022201010c16457863656564656456616c696461746f72436f756e74220101220001200c020763757272656e74036d6178022201010c05526f756e64220000022201010c0e56616c696461746f724572726f722201012201012307210900022201010c14496e76616c6964436c61696d5265736f7572636522000001022201010c1a496e76616c6964476574526564656d7074696f6e416d6f756e7422000002022201010c21556e6578706563746564446563696d616c436f6d7075746174696f6e4572726f7222000003022201010c1c45706f6368556e6c6f636b4861734e6f744f6363757272656459657422000004022201010c2750656e64696e674f776e65725374616b655769746864726177616c4c696d69745265616368656422000005022201010c19496e76616c696456616c696461746f72466565466163746f7222000006022201010c2556616c696461746f7249734e6f74416363657074696e6744656c6567617465645374616b6522000007022201010c20496e76616c696450726f746f636f6c56657273696f6e4e616d654c656e677468220101220001200c020865787065637465640661637475616c08022201010c1145706f63684d6174684f766572666c6f77220000022201010c1c46756e6769626c655265736f757263654d616e616765724572726f722201012201012307210700022201010c0d496e76616c6964416d6f756e7422000001022201010c154d61784d696e74416d6f756e74457863656564656422000002022201010c13496e76616c696444697669736962696c69747922000003022201010c1244726f704e6f6e456d7074794275636b657422000004022201010c0b4e6f744d696e7461626c6522000005022201010c0b4e6f744275726e61626c6522000006022201010c21556e6578706563746564446563696d616c436f6d7075746174696f6e4572726f72220000022201010c1f4e6f6e46756e6769626c655265736f757263654d616e616765724572726f722201012201012307210b00022201010c184e6f6e46756e6769626c65416c726561647945786973747322000001022201010c134e6f6e46756e6769626c654e6f74466f756e6422000002022201010c17556e6b6e6f776e4d757461626c654669656c644e616d6522000003022201010c1d4e6f6e46756e6769626c65496454797065446f65734e6f744d6174636822000004022201010c18496e76616c69644e6f6e46756e6769626c6549645479706522000005022201010c18496e76616c69644e6f6e46756e6769626c65536368656d6122000006022201010c254e6f6e46756e6769626c654c6f63616c496450726f7669646564466f72525549445479706522000007022201010c1244726f704e6f6e456d7074794275636b657422000008022201010c0b4e6f744d696e7461626c6522000009022201010c0b4e6f744275726e61626c652200000a022201010c21556e6578706563746564446563696d616c436f6d7075746174696f6e4572726f72220000022201010c114e6f6e46756e6769626c654964547970652201012201012307210400022201010c06537472696e6722000001022201010c07496e746567657222000002022201010c05427974657322000003022201010c0452554944220000022201010c18496e76616c69644e6f6e46756e6769626c65536368656d612201012201012307210500022201010c15536368656d6156616c69646174696f6e4572726f7222000001022201010c12496e76616c69644c6f63616c54797065496422000002022201010c094e6f74415475706c6522000003022201010c114d697373696e674669656c644e616d657322000004022201010c184d757461626c654669656c64446f65734e6f744578697374220000022201010c0b4275636b65744572726f722201012201012307210500022201010c0d5265736f757263654572726f7222000001022201010c0a50726f6f664572726f7222000002022201010c064c6f636b656422000003022201010c0d496e76616c6964416d6f756e7422000004022201010c0f446563696d616c4f766572666c6f77220000022201010c0d5265736f757263654572726f722201012201012307210400022201010c13496e73756666696369656e7442616c616e6365220101220001200c02097265717565737465640661637475616c01022201010c11496e76616c696454616b65416d6f756e7422000002022201010c194d697373696e674e6f6e46756e6769626c654c6f63616c496422000003022201010c0f446563696d616c4f766572666c6f77220000022201010c0a50726f6f664572726f722201012201012307210100022201010c14456d70747950726f6f664e6f74416c6c6f776564220000022201010c154e6f6e46756e6769626c655661756c744572726f722201012201012307210300022201010c094d697373696e67496422000001022201010c0f4e6f74456e6f756768416d6f756e7422000002022201010c0f446563696d616c4f766572666c6f77220000022201010c0a5661756c744572726f722201012201012307210900022201010c0d5265736f757263654572726f7222000001022201010c0a50726f6f664572726f7222000002022201010c0d496e76616c6964416d6f756e7422000003022201010c0c4e6f74467265657a61626c6522000004022201010c0d4e6f74526563616c6c61626c6522000005022201010c0d5661756c74497346726f7a656e22000006022201010c144c6f636b4665654e6f745261646978546f6b656e22000007022201010c1a4c6f636b466565496e73756666696369656e7442616c616e6365220101220001200c02097265717565737465640661637475616c08022201010c0f446563696d616c4f766572666c6f77220000022201010c0c576f726b746f704572726f722201012201012307210200022201010c0f417373657274696f6e4661696c656422000001022201010c13496e73756666696369656e7442616c616e6365220000022201010c0d417574685a6f6e654572726f722201012201012307210100022201010c11436f6d706f736550726f6f664572726f72220000022201010c11436f6d706f736550726f6f664572726f722201012201012307210400022201010c204e6f6e46756e6769626c654f7065726174696f6e4e6f74537570706f7274656422000001022201010c16496e73756666696369656e744261736550726f6f667322000002022201010c0d496e76616c6964416d6f756e7422000003022201010c21556e6578706563746564446563696d616c436f6d7075746174696f6e4572726f72220000022201010c0c4163636f756e744572726f722201012201012307210400022201010c115661756c74446f65734e6f744578697374220101220001200c01107265736f757263655f6164647265737301022201010c134465706f7369744973446973616c6c6f776564220101220001200c01107265736f757263655f6164647265737302022201010c1d4e6f74416c6c4275636b657473436f756c6442654465706f736974656422000003022201010c184e6f74416e417574686f72697a65644465706f7369746f72220101220001200c01096465706f7369746f72022201010c15416363657373436f6e74726f6c6c65724572726f722201012201012307210a00022201010c244f7065726174696f6e5265717569726573556e6c6f636b65645072696d617279526f6c6522000001022201010c0c54696d654f766572666c6f7722000002022201010c205265636f76657279416c7265616479457869737473466f7250726f706f736572220101220001200c010870726f706f73657203022201010c1b4e6f5265636f76657279457869737473466f7250726f706f736572220101220001200c010870726f706f73657204022201010c2c42616467655769746864726177417474656d7074416c7265616479457869737473466f7250726f706f736572220101220001200c010870726f706f73657205022201010c274e6f42616467655769746864726177417474656d7074457869737473466f7250726f706f736572220101220001200c010870726f706f73657206022201010c164e6f54696d65645265636f766572696573466f756e6422000007022201010c1f54696d65645265636f7665727944656c61794861734e6f74456c617073656422000008022201010c185265636f7665727950726f706f73616c4d69736d61746368220101220001200c0208657870656374656405666f756e6409022201010c0d4e6f5872644665655661756c74220000022201010c0850726f706f7365722201012201012307210200022201010c075072696d61727922000001022201010c085265636f76657279220000022201010c105265636f7665727950726f706f73616c220101220001200c020872756c655f7365741f74696d65645f7265636f766572795f64656c61795f696e5f6d696e75746573022201010c0752756c65536574220101220001200c030c7072696d6172795f726f6c650d7265636f766572795f726f6c6511636f6e6669726d6174696f6e5f726f6c65022201010c064f7074696f6e2201012201012307210200022201010c044e6f6e6522000001022201010c04536f6d65220000022201010c054572726f722201012201012307210900022201010c224e6f6e46756e6769626c655265736f75726365734172654e6f744163636570746564220101220001200c01107265736f757263655f6164647265737301022201010c244e6f6e5a65726f506f6f6c556e6974537570706c794275745a65726f526573657276657322000002022201010c17496e76616c6964506f6f6c556e69745265736f75726365220101220001200c020865787065637465640661637475616c03022201010c1e436f6e747269627574696f6e4f66456d7074794275636b65744572726f7222000004022201010c14446563696d616c4f766572666c6f774572726f7222000005022201010c1a496e76616c6964476574526564656d7074696f6e416d6f756e7422000006022201010c135a65726f506f6f6c556e6974734d696e74656422000007022201010c1252656465656d65645a65726f546f6b656e7322000008022201010c1b5265736f75726365446f65734e6f7442656c6f6e67546f506f6f6c220101220001200c01107265736f757263655f61646472657373022201010c054572726f722201012201012307210a00022201010c224e6f6e46756e6769626c655265736f75726365734172654e6f744163636570746564220101220001200c01107265736f757263655f6164647265737301022201010c244e6f6e5a65726f506f6f6c556e6974537570706c794275745a65726f526573657276657322000002022201010c17496e76616c6964506f6f6c556e69745265736f75726365220101220001200c020865787065637465640661637475616c03022201010c1b5265736f75726365446f65734e6f7442656c6f6e67546f506f6f6c220101220001200c01107265736f757263655f6164647265737304022201010c1c506f6f6c4372656174696f6e5769746853616d655265736f7572636522000005022201010c1e436f6e747269627574696f6e4f66456d7074794275636b65744572726f7222000006022201010c14446563696d616c4f766572666c6f774572726f7222000007022201010c1a496e76616c6964476574526564656d7074696f6e416d6f756e7422000008022201010c135a65726f506f6f6c556e6974734d696e74656422000009022201010c254c6172676572436f6e747269627574696f6e5265717569726564546f4d656574526174696f220000022201010c054572726f722201012201012307210d00022201010c224e6f6e46756e6769626c655265736f75726365734172654e6f744163636570746564220101220001200c01107265736f757263655f6164647265737301022201010c244e6f6e5a65726f506f6f6c556e6974537570706c794275745a65726f526573657276657322000002022201010c17496e76616c6964506f6f6c556e69745265736f75726365220101220001200c020865787065637465640661637475616c03022201010c1b5265736f75726365446f65734e6f7442656c6f6e67546f506f6f6c220101220001200c01107265736f757263655f6164647265737304022201010c154d697373696e674f72456d7074794275636b657473220101220001200c01127265736f757263655f61646472657373657305022201010c1c506f6f6c4372656174696f6e5769746853616d655265736f7572636522000006022201010c1e436f6e747269627574696f6e4f66456d7074794275636b65744572726f7222000007022201010c2543616e74437265617465506f6f6c576974684c6573735468616e4f6e655265736f7572636522000008022201010c14446563696d616c4f766572666c6f774572726f7222000009022201010c1a496e76616c6964476574526564656d7074696f6e416d6f756e742200000a022201010c0e4e6f4d696e696d756d526174696f2200000b022201010c135a65726f506f6f6c556e6974734d696e7465642200000c022201010c254c6172676572436f6e747269627574696f6e5265717569726564546f4d656574526174696f22000002220000220000022201010c155472616e73616374696f6e46656553756d6d617279220101220001200c0723746f74616c5f657865637574696f6e5f636f73745f756e6974735f636f6e73756d656426746f74616c5f66696e616c697a6174696f6e5f636f73745f756e6974735f636f6e73756d65641b746f74616c5f657865637574696f6e5f636f73745f696e5f7872641e746f74616c5f66696e616c697a6174696f6e5f636f73745f696e5f78726419746f74616c5f74697070696e675f636f73745f696e5f78726419746f74616c5f73746f726167655f636f73745f696e5f78726419746f74616c5f726f79616c74795f636f73745f696e5f787264022201010c09466565536f75726365220101220001200c010d706179696e675f7661756c747302220000220000022201010c0e46656544657374696e6174696f6e220101220001200c040b746f5f70726f706f73657210746f5f76616c696461746f725f73657407746f5f6275726e15746f5f726f79616c74795f726563697069656e747302220000220000022201010c10526f79616c7479526563697069656e742201012201012307210200022201010c075061636b61676522000001022201010c09436f6d706f6e656e74220000022201010c11436f7374696e67506172616d6574657273220101220001200c0819657865637574696f6e5f636f73745f756e69745f707269636519657865637574696f6e5f636f73745f756e69745f6c696d697418657865637574696f6e5f636f73745f756e69745f6c6f616e1c66696e616c697a6174696f6e5f636f73745f756e69745f70726963651c66696e616c697a6174696f6e5f636f73745f756e69745f6c696d6974097573645f70726963651373746174655f73746f726167655f707269636515617263686976655f73746f726167655f7072696365022201010c235472616e73616374696f6e436f7374696e67506172616d657465727352656365697074220101220001200c020e7469705f70657263656e7461676512667265655f6372656469745f696e5f7872640222000022000002220000220000022201010c054c6576656c2201012201012307210500022201010c054572726f7222000001022201010c045761726e22000002022201010c04496e666f22000003022201010c05446562756722000004022201010c055472616365220000022201010c12537461746555706461746553756d6d617279220101220001200c050c6e65775f7061636b616765730e6e65775f636f6d706f6e656e74730d6e65775f7265736f75726365730a6e65775f7661756c7473157661756c745f62616c616e63655f6368616e6765730222000022000002220000220000022200002200000222000022000002220000220000022201010c0d42616c616e63654368616e67652201012201012307210200022201010c0846756e6769626c6522000001022201010c0b4e6f6e46756e6769626c65220101220001200c020561646465640772656d6f76656402220000220000022200002200000222000022000002220000220000022201010c17537562737461746553797374656d5374727563747572652201012201012307210700022201010c0b53797374656d4669656c6422000001022201010c0c53797374656d536368656d6122000002022201010c124b657956616c756553746f7265456e74727922000003022201010c0b4f626a6563744669656c6422000004022201010c1c4f626a6563744b657956616c7565506172746974696f6e456e74727922000005022201010c194f626a656374496e646578506172746974696f6e456e74727922000006022201010c1f4f626a656374536f72746564496e646578506172746974696f6e456e747279220000022201010c1453797374656d4669656c64537472756374757265220101220001200c010a6669656c645f6b696e64022201010c0f53797374656d4669656c644b696e642201012201012307210400022201010c0854797065496e666f22000001022201010c06566d426f6f7422000002022201010c0a53797374656d426f6f7422000003022201010c0a4b65726e656c426f6f74220000022201010c1b4b657956616c756553746f7265456e747279537472756374757265220101220001200c02106b65795f66756c6c5f747970655f69641276616c75655f66756c6c5f747970655f6964022201010c1146756c6c7953636f706564547970654964220000022201010c0e4669656c64537472756374757265220101220001200c010c76616c75655f736368656d61022201010c1b4f626a6563745375627374617465547970655265666572656e63652201012201012307210200022201010c075061636b61676522000001022201010c0e4f626a656374496e7374616e6365220000022201010c145061636b616765547970655265666572656e6365220101220001200c010c66756c6c5f747970655f6964022201010c1146756c6c7953636f706564547970654964220000022201010c1b4f626a656374496e7374616e6365547970655265666572656e6365220101220001200c0210696e7374616e63655f747970655f6964157265736f6c7665645f66756c6c5f747970655f6964022201010c1f4b657956616c7565506172746974696f6e456e747279537472756374757265220101220001200c020a6b65795f736368656d610c76616c75655f736368656d61022201010c1c496e646578506172746974696f6e456e747279537472756374757265220101220001200c020a6b65795f736368656d610c76616c75655f736368656d61022201010c22536f72746564496e646578506172746974696f6e456e747279537472756374757265220101220001200c020a6b65795f736368656d610c76616c75655f736368656d6102220000220000022201010c134576656e74547970654964656e746966696572220000022201010c07456d69747465722201012201012307210200022201010c0846756e6374696f6e22000001022201010c064d6574686f64220000022201010c144576656e7453797374656d537472756374757265220101220001200c01167061636b6167655f747970655f7265666572656e6365022201010c064f7074696f6e2201012201012307210200022201010c044e6f6e6522000001022201010c04536f6d65220000022201010c1045706f63684368616e67654576656e74220101220001200c030565706f63680d76616c696461746f725f736574257369676e69666963616e745f70726f746f636f6c5f7570646174655f72656164696e657373022201010c0545706f6368220000022201010c1241637469766556616c696461746f72536574220000022201010c0956616c696461746f72220101220001200c02036b6579057374616b65022200002200002022a501000000000000000000000000000000000c012102220101091e000000220101091e0000000000000000000000000000000000000000000000000000000000000000000c01210222010109020000002201010902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0121022201010920000000220101092000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c012102220101092000000022010109200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002201010a0000000000000000 \ No newline at end of file diff --git a/radix-engine/src/transaction/system_structure.rs b/radix-engine/src/transaction/system_structure.rs index 90c95869aed..27616d75532 100644 --- a/radix-engine/src/transaction/system_structure.rs +++ b/radix-engine/src/transaction/system_structure.rs @@ -88,12 +88,7 @@ pub struct EventSystemStructure { pub type SubstateSystemStructures = IndexMap>>; -#[derive(Default, Debug, Clone, ScryptoSbor, PartialEq, Eq, ScryptoSborAssertion)] -// This is currently persisted in the node's `LocalTransactionExecution` store, -// so needs to be backwards compatible to avoid breaking the Core API transaction stream. -// This assertion can be removed when `radixdlt-scrypto` is merged into the node, -// because there will be an equivalent assertion against the `LocalTransactionExecution` itself. -#[sbor_assert(backwards_compatible(bottlenose = "FILE:system_structure_v1.txt"))] +#[derive(Default, Debug, Clone, ScryptoSbor, PartialEq, Eq)] pub struct SystemStructure { pub substate_system_structures: SubstateSystemStructures, pub event_system_structures: IndexMap, diff --git a/radix-engine/src/transaction/system_structure_v1.txt b/radix-engine/src/transaction/system_structure_v1.txt deleted file mode 100644 index b6b7a3f16be..00000000000 --- a/radix-engine/src/transaction/system_structure_v1.txt +++ /dev/null @@ -1 +0,0 @@ -5c2102220001210320221e0e0120220201010a010000000000000001010a190000000000000010022201010a02000000000000002201010a03000000000000000d01220001070710022201010a04000000000000002201010a0500000000000000070010022201010a06000000000000002201010a09000000000000000f0123072003002201000107070122010001074102220101010a07000000000000000e0120220201010a0800000000000000000107410d0122000107070f012307200700220101010a0a0000000000000001220002220101010a0c0000000000000003220101010a110000000000000004220101010a160000000000000005220101010a170000000000000006220101010a18000000000000000e0120220101010a0b000000000000000f01230720040022000122000222000322000e0120220201010a0d0000000000000001010a0d000000000000000e0120220301010a020000000000000001010a0e0000000000000001010a0f000000000000000d0122000107070f012307200200220101010a10000000000000000122010001070a07000e0120220101010a12000000000000000f012307200200220101010a130000000000000001220101010a15000000000000000e0120220101010a14000000000000000e012022030001078301010a0e0000000000000001010a0f000000000000000e012022020001070701010a0d000000000000000e0120220201010a120000000000000001010a12000000000000000e0120220201010a120000000000000001010a12000000000000000e0120220201010a120000000000000001010a120000000000000010022201010a1a000000000000002201010a1d000000000000000e0120220201010a1b000000000000000001070c0f012307200200220101010a1c0000000000000001220201010a0200000000000000000107f00e01202202000107830001070c0e0120220101010a130000000000000020211e022201010c0f53797374656d537472756374757265220101220001200c021a73756273746174655f73797374656d5f73747275637475726573176576656e745f73797374656d5f7374727563747572657302220000220000022201010c064e6f6465496422000002220000220000022201010c0f506172746974696f6e4e756d62657222000002220000220000022201010c0b53756273746174654b65792201012201012307210300022201010c054669656c6422000001022201010c034d617022000002022201010c06536f727465642200000222000022000002220000220000022201010c17537562737461746553797374656d5374727563747572652201012201012307210700022201010c0b53797374656d4669656c6422000001022201010c0c53797374656d536368656d6122000002022201010c124b657956616c756553746f7265456e74727922000003022201010c0b4f626a6563744669656c6422000004022201010c1c4f626a6563744b657956616c7565506172746974696f6e456e74727922000005022201010c194f626a656374496e646578506172746974696f6e456e74727922000006022201010c1f4f626a656374536f72746564496e646578506172746974696f6e456e747279220000022201010c1453797374656d4669656c64537472756374757265220101220001200c010a6669656c645f6b696e64022201010c0f53797374656d4669656c644b696e642201012201012307210400022201010c0854797065496e666f22000001022201010c06566d426f6f7422000002022201010c0a53797374656d426f6f7422000003022201010c0a4b65726e656c426f6f74220000022201010c1b4b657956616c756553746f7265456e747279537472756374757265220101220001200c02106b65795f66756c6c5f747970655f69641276616c75655f66756c6c5f747970655f6964022201010c1146756c6c7953636f706564547970654964220000022201010c0a536368656d6148617368220000022201010c0b4c6f63616c5479706549642201012201012307210200022201010c0957656c6c4b6e6f776e22000001022201010c10536368656d614c6f63616c496e646578220000022201010c0f57656c6c4b6e6f776e547970654964220000022201010c0e4669656c64537472756374757265220101220001200c010c76616c75655f736368656d61022201010c1b4f626a6563745375627374617465547970655265666572656e63652201012201012307210200022201010c075061636b61676522000001022201010c0e4f626a656374496e7374616e6365220000022201010c145061636b616765547970655265666572656e6365220101220001200c010c66756c6c5f747970655f6964022201010c1146756c6c7953636f706564547970654964220000022201010c1b4f626a656374496e7374616e6365547970655265666572656e6365220101220001200c0210696e7374616e63655f747970655f6964157265736f6c7665645f66756c6c5f747970655f6964022201010c1f4b657956616c7565506172746974696f6e456e747279537472756374757265220101220001200c020a6b65795f736368656d610c76616c75655f736368656d61022201010c1c496e646578506172746974696f6e456e747279537472756374757265220101220001200c020a6b65795f736368656d610c76616c75655f736368656d61022201010c22536f72746564496e646578506172746974696f6e456e747279537472756374757265220101220001200c020a6b65795f736368656d610c76616c75655f736368656d6102220000220000022201010c134576656e74547970654964656e746966696572220000022201010c07456d69747465722201012201012307210200022201010c0846756e6374696f6e22000001022201010c064d6574686f64220000022201010c0b426c75657072696e744964220101220001200c020f7061636b6167655f616464726573730e626c75657072696e745f6e616d65022201010c144576656e7453797374656d537472756374757265220101220001200c01167061636b6167655f747970655f7265666572656e636520221e000000000c012102220101091e000000220101091e000000000000000000000000000c01210222010109020000002201010902000000000000000000000000000c012102220101092000000022010109200000000000000000000000000000000000000000000000000000000000000000002201010a0000000000000000 \ No newline at end of file diff --git a/radix-engine/src/transaction/transaction_receipt.rs b/radix-engine/src/transaction/transaction_receipt.rs index a52689006e6..1ec46dff0ad 100644 --- a/radix-engine/src/transaction/transaction_receipt.rs +++ b/radix-engine/src/transaction/transaction_receipt.rs @@ -1670,3 +1670,36 @@ pub enum FlamegraphError { CreationError, DetailedCostBreakdownNotAvailable, } + +#[cfg(test)] +mod tests { + use super::*; + + // This is an effective copy of the V1 contents of the local transaction execution store in the node. + // This needs to be decodable! + // By all means introduce _new versions_ of the included types, with conversions between them, + // and we can introduce a higher LocalTransactionExecutionVX in the node. + // But this schema can't change, else we won't be able to decode existing executions in the node. + // NOTE: This is just copied here to catch issues / changes earlier; an identical test exists in the node. + #[derive(ScryptoSbor, ScryptoSborAssertion)] + #[sbor_assert( + backwards_compatible( + bottlenose = "FILE:node_local_transaction_execution_v1_bottlenose.txt", + ), + settings(allow_name_changes) + )] + struct LocalTransactionExecutionV1 { + outcome: Result<(), RuntimeError>, + fee_summary: TransactionFeeSummary, + fee_source: FeeSource, + fee_destination: FeeDestination, + engine_costing_parameters: CostingParameters, + transaction_costing_parameters: TransactionCostingParametersReceipt, + application_logs: Vec<(Level, String)>, + state_update_summary: StateUpdateSummary, + global_balance_summary: IndexMap>, + substates_system_structure: Vec, + events_system_structure: IndexMap, + next_epoch: Option, + } +} diff --git a/radix-sbor-derive/src/lib.rs b/radix-sbor-derive/src/lib.rs index 5521fd94f69..feb1aefc27b 100644 --- a/radix-sbor-derive/src/lib.rs +++ b/radix-sbor-derive/src/lib.rs @@ -172,32 +172,35 @@ pub fn scrypto_sbor(input: TokenStream) -> TokenStream { /// A macro for outputting tests and marker traits to assert that a type has maintained its shape over time. /// /// There are two types of assertion modes: -/// * "fixed" mode is used to ensure that a type is unchanged. -/// * "backwards_compatible" mode is used when multiple versions of the type are permissible, but +/// * `fixed` mode is used to ensure that a type is unchanged. +/// * `backwards_compatible` mode is used when multiple versions of the type are permissible, but /// newer versions of the type must be compatible with the older version where they align. /// This mode (A) ensures that the type's current schema is equivalent to the latest version, and /// (B) ensures that each of the schemas is a strict extension of the previous mode. /// -/// There is also a "generate" mode which can be used to export the current schema. Upon running the generated test, -/// the schema is either written to a file, or output in a panic message. +/// ## Initial schema generation and regeneration /// -/// ## Initial schema generation +/// To output a generated schema, temporarily add a `generate` parameter or a `regenerate` parameter, +/// after the `fixed` or `backwards_compatible` parameter, and then run the created test. +/// If using Rust Analyzer this can be run from the IDE, or it can be run via `cargo test`. /// -/// To output the generated schema to a file path relative to the source file, add an attribute like this - -/// and then run the test which gets generated. If using Rust Analyzer this can be run from the IDE, -/// or it can be run via `cargo test`. +/// To protect against accidentally doing the wrong thing, `generate` can only be used for initial generation, +/// whereas `regenerate` can only be used for replacing an existing generation. +/// +/// If a "FILE:.." path is specified, it will (re)generate that file, else it will output to the console: +/// * In `fixed` mode, this will (re)generate against the given schema location. +/// * In `backwards_compatible` mode, this will (re)generate against the latest schema location (the last in the list). +/// +/// The test will then panic to ensure it fails, and can't be left accidentally in (re)generate state. /// /// ```no_run /// #[derive(ScryptoSbor, ScryptoSborAssertion)] -/// #[sbor_assert(generate("FILE:MyType-schema-v1.txt"))] +/// #[sbor_assert(fixed("FILE:MyType-schema-v1.txt"), generate)] /// struct MyType { /// // ... /// } /// ``` /// -/// The test should generate the given file and then panic. If you wish to only generate the schema -/// in the panic message, you can with `#[sbor_assert(generate("INLINE"))]`. -/// /// ## Fixed schema verification /// /// To verify the type's schema is unchanged, do: diff --git a/sbor-derive-common/src/sbor_assert.rs b/sbor-derive-common/src/sbor_assert.rs index 90b7d125119..23358c9f669 100644 --- a/sbor-derive-common/src/sbor_assert.rs +++ b/sbor-derive-common/src/sbor_assert.rs @@ -33,7 +33,6 @@ pub fn handle_sbor_assert_derive( let (assertion_variant, advanced_settings) = extract_settings(&parsed.attrs)?; let output = match assertion_variant { - AssertionMode::Generate(params) => handle_generate(context_custom_schema, parsed, params), AssertionMode::Fixed(params) => { handle_fixed(context_custom_schema, parsed, params, advanced_settings) } @@ -46,14 +45,14 @@ pub fn handle_sbor_assert_derive( Ok(output) } -const GENERAL_PARSE_ERROR_MESSAGE: &'static str = "Expected `#[sbor_assert(generate(..))]` OR `#[sbor_assert(fixed(..))]` OR `#[sbor_assert(backwards_compatible(..))], with an optional second `settings(..)` parameter to `sbor_assert`."; +const GENERAL_PARSE_ERROR_MESSAGE: &'static str = "Expected `#[sbor_assert(fixed(..))]` OR `#[sbor_assert(backwards_compatible(..))]`, with optional additional parameters `generate`, `regenerate`, and `settings(..)`. A command such as `#[sbor_assert(fixed(\"FILE:my_schema.txt\"), generate)]` can be used to generate the schema initially."; fn extract_settings(attributes: &[Attribute]) -> Result<(AssertionMode, AdvancedSettings)> { // When we come to extract fixed named types, let inner_attributes = extract_wrapped_root_attributes(attributes, "sbor_assert")?; let keyed_inner_attributes = extract_wrapped_inner_attributes(&inner_attributes, GENERAL_PARSE_ERROR_MESSAGE)?; - if keyed_inner_attributes.len() == 0 || keyed_inner_attributes.len() > 2 { + if keyed_inner_attributes.len() == 0 { return Err(Error::new(Span::call_site(), GENERAL_PARSE_ERROR_MESSAGE)); } @@ -62,10 +61,6 @@ fn extract_settings(attributes: &[Attribute]) -> Result<(AssertionMode, Advanced keyed_inner_attributes.get_index(0).unwrap(); let error_span = attribute_name_ident.span(); match attribute_name.as_str() { - "generate" => AssertionMode::Generate(extract_generation_options( - attribute_value.as_ref(), - error_span, - )?), "backwards_compatible" => { AssertionMode::BackwardsCompatible(extract_backwards_compatible_schema_parameters( attribute_value.as_ref(), @@ -80,45 +75,48 @@ fn extract_settings(attributes: &[Attribute]) -> Result<(AssertionMode, Advanced } }; - let advanced_settings = if let Some(second_attribute) = keyed_inner_attributes.get_index(1) { - let (attribute_name, (attribute_name_ident, attribute_value)) = second_attribute; - let error_span = attribute_name_ident.span(); + let mut advanced_settings = AdvancedSettings { + settings_resolution: ComparisonSettingsResolution::Default, + generate_mode: GenerateMode::NoGenerate, + }; + for (attribute_name, (attribute_name_ident, attribute_value)) in + keyed_inner_attributes.iter().skip(1) + { + let error_span = attribute_name_ident.span(); match attribute_name.as_str() { - "settings" => extract_advanced_settings(attribute_value.as_ref(), error_span)?, - _ => return Err(Error::new(error_span, SETTINGS_PARSE_ERROR_MESSAGE)), - } - } else { - AdvancedSettings { - settings_resolution: ComparisonSettingsResolution::Default, + "settings" => { + let SettingsOverrides { + settings_resolution, + } = extract_settings_overrides(attribute_value.as_ref(), error_span)?; + if let Some(settings_resolution) = settings_resolution { + advanced_settings.settings_resolution = settings_resolution; + } + } + "generate" => { + if attribute_value.is_some() { + return Err(Error::new(error_span, GENERATE_PARSE_ERROR_MESSAGE)); + } + advanced_settings.generate_mode = GenerateMode::Generate { + is_regenerate: false, + }; + } + "regenerate" => { + if attribute_value.is_some() { + return Err(Error::new(error_span, GENERATE_PARSE_ERROR_MESSAGE)); + } + advanced_settings.generate_mode = GenerateMode::Generate { + is_regenerate: true, + }; + } + _ => return Err(Error::new(error_span, GENERAL_PARSE_ERROR_MESSAGE)), } - }; + } Ok((assertion_mode, advanced_settings)) } -const GENERATE_PARSE_ERROR_MESSAGE: &'static str = "Expected `#[sbor_assert(generate(\"INLINE\"))]` OR `#[sbor_assert(generate(\"FILE:\"))]`"; - -fn extract_generation_options( - attribute_value: Option<&Vec<&NestedMeta>>, - error_span: Span, -) -> Result { - match attribute_value { - Some(meta_list) if meta_list.len() == 1 => match meta_list[0] { - NestedMeta::Lit(Lit::Str(lit_str)) => { - let content = lit_str.value(); - if content == "INLINE" { - return Ok(GenerationOptions::Inline); - } else if let Some(file_path) = extract_prefixed(lit_str, "FILE:") { - return Ok(GenerationOptions::File { file_path }); - } - } - _ => {} - }, - _ => {} - }; - return Err(Error::new(error_span, GENERATE_PARSE_ERROR_MESSAGE)); -} +const GENERATE_PARSE_ERROR_MESSAGE: &'static str = "Expected just `generate` or `regenerate` without any value, for example: `#[sbor_assert(fixed(..), generate)]` OR `#[sbor_assert(backwards_compatible(..), settings(..), regenerate)]`"; const FIXED_PARSE_ERROR_MESSAGE: &'static str = "Expected `#[sbor_assert(fixed(X))]` where `X` is one of:\n* `\"INLINE:\"`\n* `\"FILE:\"`\n* Either `NAMED_CONSTANT` or `\"CONST:\"` where `` is the name of a defined constant string literal or some other type implementing `IntoSchema`"; @@ -225,10 +223,14 @@ fn extract_schema_location_from_string(lit_str: &LitStr) -> Result, +} + +fn extract_settings_overrides( attribute_value: Option<&Vec<&NestedMeta>>, error_span: Span, -) -> Result { +) -> Result { match attribute_value { Some(meta_list) if meta_list.len() == 1 => match meta_list[0] { NestedMeta::Meta(Meta::Path(path)) => { @@ -238,15 +240,16 @@ fn extract_advanced_settings( false }; if allow_name_changes { - return Ok(AdvancedSettings { - settings_resolution: + return Ok(SettingsOverrides { + settings_resolution: Some( ComparisonSettingsResolution::DefaultAllowingNameChanges, + ), }); } else { - return Ok(AdvancedSettings { - settings_resolution: ComparisonSettingsResolution::FromConstant { + return Ok(SettingsOverrides { + settings_resolution: Some(ComparisonSettingsResolution::FromConstant { constant_path: path.clone(), - }, + }), }); } } @@ -268,14 +271,16 @@ fn extract_prefixed(lit_str: &LitStr, prefix: &str) -> Option { } enum AssertionMode { - Generate(GenerationOptions), Fixed(SchemaLocation), BackwardsCompatible(BackwardsCompatibleSchemaParameters), } -enum GenerationOptions { +enum GenerationTarget { Inline, - File { file_path: LitStr }, + File { + file_path: LitStr, + is_regenerate: bool, + }, } enum SchemaLocation { @@ -296,6 +301,12 @@ struct NamedSchema { struct AdvancedSettings { settings_resolution: ComparisonSettingsResolution, + generate_mode: GenerateMode, +} + +enum GenerateMode { + NoGenerate, + Generate { is_regenerate: bool }, } enum ComparisonSettingsResolution { @@ -306,92 +317,114 @@ enum ComparisonSettingsResolution { /// Only supposed to be used as a temporary mode, to assist with generating the schema. The generated test always panics. fn handle_generate( - context_custom_schema: &str, - parsed: DeriveInput, - options: GenerationOptions, + ident: &Ident, + custom_schema: Path, + test_ident: Ident, + generation_target: GenerationTarget, ) -> Result { - let DeriveInput { ident, .. } = &parsed; - - let custom_schema: Path = parse_str(context_custom_schema)?; - let test_ident = format_ident!("test_{}_type_schema_is_generated", ident); - - let output_content = match options { - GenerationOptions::Inline => quote! { + let output_content = match generation_target { + GenerationTarget::Inline => quote! { panic!( - "Copy the below encoded type schema and replace `generate` with `fixed` or `backwards_compatible` in the attribute to receive further instructions.\n The current type schema is:\n{hex}" + "After copying this, remove the `generate` / `regenerate` from the attribute value. The current type schema is:\n{hex}" ); }, - GenerationOptions::File { file_path } => quote! { - use std::path::{Path, PathBuf}; - use std::fs::File; - use std::io::Write; - use std::convert::AsRef; - - // So `file!()` is only intended for debugging, and is currently a relative path against `CARGO_RUSTC_CURRENT_DIR`. - // However `CARGO_RUSTC_CURRENT_DIR` is a nightly-only env variable. - // - // For single crates, `CARGO_RUSTC_CURRENT_DIR` = `CARGO_MANIFEST_DIR` - // For workspaces, `CARGO_RUSTC_CURRENT_DIR` is the workspace root, typically an ancestor of `CARGO_MANIFEST_DIR` - // - // So we add some resolution logic to resolve things... - // - // RELEVANT LINKS: - // * https://github.com/rust-lang/cargo/issues/3946#issuecomment-412363291 - Absolute use of `file!()` - // * https://github.com/rust-lang/cargo/issues/3946#issuecomment-1832514876 - // * https://github.com/rust-lang/cargo/pull/13644 - blocked stabilization of `CARGO_RUSTC_CURRENT_DIR` - - let manifest_dir = env!("CARGO_MANIFEST_DIR"); - let relative_source_file_path = file!(); - - let mut path_root = PathBuf::from(&manifest_dir); - let source_file_path = loop { - let candidate_source_file_path = path_root.as_path().join(relative_source_file_path); - if candidate_source_file_path.is_file() { - break candidate_source_file_path; + GenerationTarget::File { + file_path, + is_regenerate, + } => { + let file_open_code = if is_regenerate { + quote! { + OpenOptions::new() + .write(true) + .truncate(true) + .open(full_file_path.as_path()) + .unwrap_or_else(|err| panic!( + "\nCould not open existing file to regenerate into. If you wish to generate it for the first time, use `generate` rather than `regenerate`.\nPath: {}\nError: {}\n", + full_file_path.display(), + err, + )); } - if !path_root.pop() { + } else { + quote! { + OpenOptions::new() + .write(true) + .create_new(true) + .open(full_file_path.as_path()) + .unwrap_or_else(|err| panic!( + "\nCould not create new file to generate into. If it already exists, and you intend to replace it, use `regenerate` rather than `generate`.\nPath: {}\nError: {}\n", + full_file_path.display(), + err, + )); + } + }; + + quote! { + use std::path::{Path, PathBuf}; + use std::fs::OpenOptions; + use std::io::Write; + use std::convert::AsRef; + + // So `file!()` is only intended for debugging, and is currently a relative path against `CARGO_RUSTC_CURRENT_DIR`. + // However `CARGO_RUSTC_CURRENT_DIR` is a nightly-only env variable. + // + // For single crates, `CARGO_RUSTC_CURRENT_DIR` = `CARGO_MANIFEST_DIR` + // For workspaces, `CARGO_RUSTC_CURRENT_DIR` is the workspace root, typically an ancestor of `CARGO_MANIFEST_DIR` + // + // So we add some resolution logic to resolve things... + // + // RELEVANT LINKS: + // * https://github.com/rust-lang/cargo/issues/3946#issuecomment-412363291 - Absolute use of `file!()` + // * https://github.com/rust-lang/cargo/issues/3946#issuecomment-1832514876 + // * https://github.com/rust-lang/cargo/pull/13644 - blocked stabilization of `CARGO_RUSTC_CURRENT_DIR` + + let manifest_dir = env!("CARGO_MANIFEST_DIR"); + let relative_source_file_path = file!(); + + let mut path_root = PathBuf::from(&manifest_dir); + let source_file_path = loop { + let candidate_source_file_path = path_root.as_path().join(relative_source_file_path); + if candidate_source_file_path.is_file() { + break candidate_source_file_path; + } + if !path_root.pop() { + panic!( + "Could not resolve the source file path from CARGO_MANIFEST_DIR ({}) and file!() path ({})", + manifest_dir, + relative_source_file_path, + ); + } + }; + + let source_file_folder = source_file_path + .parent() + .unwrap_or_else(|| panic!( + "Could not resolve the parent folder of the current source file: {}", + source_file_path.display(), + )); + + if !source_file_folder.is_dir() { panic!( - "Could not resolve the source file path from CARGO_MANIFEST_DIR ({}) and file!() path ({})", - manifest_dir, - relative_source_file_path, + "The resolved parent folder of the current source file doesn't appear to exist: {}", + source_file_folder.display(), ); } - }; - let source_file_folder = source_file_path - .parent() - .unwrap_or_else(|| panic!( - "Could not resolve the parent folder of the current source file: {}", - source_file_path.display(), - )); - - if !source_file_folder.is_dir() { - panic!( - "The resolved parent folder of the current source file doesn't appear to exist: {}", - source_file_folder.display(), - ); - } + // Resolve the provided file path relative to the source file's folder + let full_file_path = source_file_folder.join(#file_path); - // Resolve the provided file path relative to the source file's folder - let full_file_path = source_file_folder.join(#file_path); - - let mut file = File::create_new(full_file_path.as_path()) - .unwrap_or_else(|err| panic!( - "Could not open new file for writing - perhaps it already exists? If you wish to replace it, delete it first: {} - Error: {}", - full_file_path.display(), - err, - )); - - file.write_all(hex.as_ref()) - .unwrap_or_else(|err| panic!( - "Schema could not be written to {} - Error: {}", - full_file_path.display(), - err, - )); - - // We panic because the generate test is always expected to fail - so that someone doesn't leave it in generate mode accidentally. - panic!("\n\nSchema written successfully to:\n {}\n\nNow panicking so that you can't accidentally leave this in generate mode and have your tests pass!\n\n", full_file_path.display()); - }, + let mut file = #file_open_code; + + file.write_all(hex.as_ref()) + .unwrap_or_else(|err| panic!( + "Schema could not be written to {} - Error: {}", + full_file_path.display(), + err, + )); + + // We panic because the generate test is always expected to fail - so that someone doesn't leave it in generate mode accidentally. + panic!("\n\nSchema written successfully to:\n {}\n\nNow panicking so that you can't accidentally leave this in (re)generate mode and have your tests pass!\n\n", full_file_path.display()); + } + } }; // NOTE: Generics are explicitly _NOT_ supported for now, because we need a concrete type @@ -423,6 +456,18 @@ fn handle_fixed( let custom_schema: Path = parse_str(context_custom_schema)?; let test_ident = format_ident!("test_{}_type_is_fixed", ident); + if let GenerateMode::Generate { is_regenerate } = advanced_settings.generate_mode { + let generation_target = match schema_location { + SchemaLocation::InlineString { .. } => GenerationTarget::Inline, + SchemaLocation::FromConstant { .. } => GenerationTarget::Inline, + SchemaLocation::StringFromFile { file_path } => GenerationTarget::File { + file_path, + is_regenerate, + }, + }; + return handle_generate(ident, custom_schema, test_ident, generation_target); + } + let comparison_settings = match advanced_settings.settings_resolution { ComparisonSettingsResolution::Default => quote! { sbor::schema::SchemaComparisonSettings::require_equality() @@ -455,8 +500,7 @@ fn handle_fixed( use sbor::rust::prelude::String; let mut error = String::new(); writeln!(&mut error, "{error_message}").unwrap(); - writeln!(&mut error, "If you are sure the fixed version is incorrect, it can be updated to the current version which is:").unwrap(); - writeln!(&mut error, "{}", current.encode_to_hex()).unwrap(); + writeln!(&mut error, "If you are sure the fixed version is incorrect, you can regenerate by changing to `#[sbor_assert(fixed(..), generate)]` and re-running the test.").unwrap(); panic!("{error}"); } } @@ -492,6 +536,26 @@ fn handle_backwards_compatible( let custom_schema: Path = parse_str(context_custom_schema)?; let test_ident = format_ident!("test_{}_type_is_backwards_compatible", ident); + if let GenerateMode::Generate { is_regenerate } = advanced_settings.generate_mode { + let generation_target = match params { + BackwardsCompatibleSchemaParameters::FromConstant { .. } => GenerationTarget::Inline, + BackwardsCompatibleSchemaParameters::NamedSchemas { mut named_schemas } => { + let Some(latest_named_schema) = named_schemas.pop() else { + return Err(Error::new(ident.span(), "At least one named schema placeholder needs adding in order for generation to work, e.g. `#[sbor_assert(backwards_compatible(latest = \"FILE:my_schema.txt\"), generate)]")); + }; + match latest_named_schema.schema { + SchemaLocation::InlineString { .. } => GenerationTarget::Inline, + SchemaLocation::FromConstant { .. } => GenerationTarget::Inline, + SchemaLocation::StringFromFile { file_path } => GenerationTarget::File { + file_path, + is_regenerate, + }, + } + } + }; + return handle_generate(ident, custom_schema, test_ident, generation_target); + } + let comparison_settings = match advanced_settings.settings_resolution { ComparisonSettingsResolution::Default => quote! { sbor::schema::SchemaComparisonSettings::allow_extension() diff --git a/sbor-derive/src/lib.rs b/sbor-derive/src/lib.rs index 96b09a802ba..d145d4f66b5 100644 --- a/sbor-derive/src/lib.rs +++ b/sbor-derive/src/lib.rs @@ -280,32 +280,35 @@ pub fn basic_sbor(input: TokenStream) -> TokenStream { /// A macro for outputting tests and marker traits to assert that a type has maintained its shape over time. /// /// There are two types of assertion modes: -/// * "fixed" mode is used to ensure that a type is unchanged. -/// * "backwards_compatible" mode is used when multiple versions of the type are permissible, but +/// * `fixed` mode is used to ensure that a type is unchanged. +/// * `backwards_compatible` mode is used when multiple versions of the type are permissible, but /// newer versions of the type must be compatible with the older version where they align. /// This mode (A) ensures that the type's current schema is equivalent to the latest version, and /// (B) ensures that each of the schemas is a strict extension of the previous mode. /// -/// There is also a "generate" mode which can be used to export the current schema. Upon running the generated test, -/// the schema is either written to a file, or output in a panic message. +/// ## Initial schema generation and regeneration /// -/// ## Initial schema generation +/// To output a generated schema, temporarily add a `generate` parameter or a `regenerate` parameter, +/// after the `fixed` or `backwards_compatible` parameter, and then run the created test. +/// If using Rust Analyzer this can be run from the IDE, or it can be run via `cargo test`. /// -/// To output the generated schema to a file path relative to the source file, add an attribute like this - -/// and then run the test which gets generated. If using Rust Analyzer this can be run from the IDE, -/// or it can be run via `cargo test`. +/// To protect against accidentally doing the wrong thing, `generate` can only be used for initial generation, +/// whereas `regenerate` can only be used for replacing an existing generation. +/// +/// If a "FILE:.." path is specified, it will (re)generate that file, else it will output to the console: +/// * In `fixed` mode, this will (re)generate against the given schema location. +/// * In `backwards_compatible` mode, this will (re)generate against the latest schema location (the last in the list). +/// +/// The test will then panic to ensure it fails, and can't be left accidentally in (re)generate state. /// /// ```no_run /// #[derive(BasicSbor, BasicSborAssertion)] -/// #[sbor_assert(generate("FILE:MyType-schema-v1.txt"))] +/// #[sbor_assert(fixed("FILE:MyType-schema-v1.txt"), generate)] /// struct MyType { /// // ... /// } /// ``` /// -/// The test should generate the given file and then panic. If you wish to only generate the schema -/// in the panic message, you can with `#[sbor_assert(generate("INLINE"))]`. -/// /// ## Fixed schema verification /// /// To verify the type's schema is unchanged, do: diff --git a/sbor/src/schema/schema_comparison/comparisons_and_assertions.rs b/sbor/src/schema/schema_comparison/comparisons_and_assertions.rs index 58d0f51a2c5..dfdfa522a09 100644 --- a/sbor/src/schema/schema_comparison/comparisons_and_assertions.rs +++ b/sbor/src/schema/schema_comparison/comparisons_and_assertions.rs @@ -184,20 +184,22 @@ fn assert_schema_compatibility>( writeln!(&mut error).unwrap(); write!(&mut error, "{error_message}").unwrap(); writeln!(&mut error).unwrap(); - writeln!(&mut error, "You will either want to:").unwrap(); writeln!( &mut error, - "(A) Add a new named version to the list, to be supported going forward." + "You will likely want to do one of the following:" ) .unwrap(); + writeln!(&mut error, "(A) Revert an unintended change to some model.").unwrap(); writeln!( &mut error, - "(B) Replace the latest version. ONLY do this if the version has not yet been in use." + "(B) Add a new named version to the list, to be supported going forward. You must then generate its schema with `#[sbor_assert(backwards_compatible(..), generate)]`, running the test, and removing `generate`." + ) + .unwrap(); + writeln!( + &mut error, + "(C) If the latest version is under development, and has not been used / release, you can regenerate it with `#[sbor_assert(backwards_compatible(..), regenerate)]`, running the test, and removing `regenerate`." ) .unwrap(); - writeln!(&mut error).unwrap(); - writeln!(&mut error, "The latest version is:").unwrap(); - writeln!(&mut error, "{}", current.encode_to_hex()).unwrap(); panic!("{error}"); }