Skip to content

Commit 3fed4d3

Browse files
Allow legacy transaction output in Cip509 (#293)
1 parent 7ab08a0 commit 3fed4d3

File tree

4 files changed

+46
-9
lines changed

4 files changed

+46
-9
lines changed

rust/rbac-registration/src/cardano/cip509/types/role_data.rs

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -108,15 +108,7 @@ fn convert_payment_key(
108108

109109
let address = match outputs.get(index) {
110110
Some(conway::PseudoTransactionOutput::PostAlonzo(o)) => &o.address,
111-
Some(conway::PseudoTransactionOutput::Legacy(_)) => {
112-
report.other(
113-
&format!(
114-
"Unsupported legacy transaction output type in payment key index ({index})"
115-
),
116-
context,
117-
);
118-
return None;
119-
},
111+
Some(conway::PseudoTransactionOutput::Legacy(o)) => &o.address,
120112
None => {
121113
report.other(
122114
&format!(

rust/rbac-registration/src/cardano/cip509/validation.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -647,4 +647,16 @@ mod tests {
647647
assert_eq!(1, addresses.len());
648648
assert_eq!(addresses.first().unwrap(), &hash);
649649
}
650+
651+
// Verify that we are able to parse `Cip509` with legacy transaction output type.
652+
#[test]
653+
fn legacy_transaction_output() {
654+
let data = test::block_7();
655+
656+
let mut registrations = Cip509::from_block(&data.block, &[]);
657+
assert_eq!(1, registrations.len());
658+
659+
let registration = registrations.pop().unwrap();
660+
data.assert_valid(&registration);
661+
}
650662
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
820785828a1a0033fe241a05591e855820aa57658aa957b03384b34a52c21da20fe8973402d7ee5cbdad009d830c0eee6858202f5ad4772c00767b6d75c8c1fae31e3479d91921abf41b1989346d2896b61de258201003b81af09c4acb552e0fbb33ffe12415360f2842c0e020b11b09cb82f7c5e48258407be4dda1c06634169f374d3b2983386480d95660a98dbb91c7ec2a20252c38c1ca1e89d55434379e0fc02ac54efbc074a618b7e526c0b81d6ffec08d681872eb58505cd0c56f614b295de37a4e466d24f4d0385a80155779cae475337af6032e25a0355a1e80976790f82629e86c3cd4a1f09c8ce32c9e1d52efb656fb10ae40dafb58c198114b3a6102060bcb5eb435fb0719174558205bc96bb5d0f0ef102543c2801c174aedf8b11940e197a2f20b0c4a51abebaf89845820b27af410255acc7a2cc55d50d646b2346bc1af598bb81410126031f02b2e75df081902815840ba558c29313de3c138f25aaa0a7d0af9891701aa77517d30610694d9bb436e45adef2e00ad5a0888632c65d668f843e25593f05c9d8e351be6be8519d979f405820a025901c0ed7f40328394ca4b9b98e0607fbff2986ef523e40c32bc980c3575e04ee57170a2866b8f466948ec6731dbec008fcd4f9eb21f92a9eed7c76d350db34634ad0b1457fde8bb06df62517b0b7605de81bf4514e6fac1e56a471f397e5fd457fd7aeb7af8f77e198ee1a1715385fe4d7c946798fc809f2b704d4d76c11e68d401f081b5105cac88def85eeee7f32cdaee4e961a2283d14bab16dc2367c78909a636cfc0338fe96493d06d6b4f2fc65b3d7d5033a144a7493066332834d06148ac2ccdf3167e96994b7f760c71c424e4f50d51c19eba629ab513d9e8a480651942613b6c7d7c774d7629094692ba6f9616dc469fd709dac4daf7c29f28e5da0213503492abb575593e4210bc16364d7551deebece786817a2d3950247cdd80935f4dedbbc79793f87f00adb39df3f2f527215ebb5f1fe1307fb79d619d0682e138b061935b1e06168c8c216d306af8d2abd55337247a31a4f858aea4dad23c00cc37ddde70cb7d2da4f6c54193c0b76690b7c91e27623e0228103af7ece7dcbad0916de0284690c1d0f8c3ac089849be0ccc823d84a6a4b23123d90ad7bb595529f184364b2d5a7460d6ae62a9f9ba6bd6e53b1193d359a003aa0a21f2e389e5f31d86ab00838258207a8a00b7b0dbc2bd0bd31cd0fc70a8742d5812649c9280c8d97652f1800a2e0b02825820827b4c268d62991c45fb55464ca3ccbaf68ec8bf3b3fdce8a84e713d9672860600825820827b4c268d62991c45fb55464ca3ccbaf68ec8bf3b3fdce8a84e713d96728606020183a300581d70284cdf01757311c543fac6e755f9d644dc5865617efcdc2b81b249fd01821a001e8480a1581c2232026bd47c51e9777eae1d913de051ef22242125fafb70159d171fa1484e6f64654665656401028201d818583cd87a9fd8799f581c5d038a0789159458ca38d05c60bec3475d22030f0e038dee393f0046d8799fd8799f1a000f9efa1b000001966286e313ffffffff82581d605d038a0789159458ca38d05c60bec3475d22030f0e038dee393f00461a0089544082581d605d038a0789159458ca38d05c60bec3475d22030f0e038dee393f00461a0096673a021a000775e2031a05591eaa081a05591e320b582052c451191c5d8c6c1f7f7ca012b9aa5c32a5806ce909c7b178ab5b7055f815a20d81825820827b4c268d62991c45fb55464ca3ccbaf68ec8bf3b3fdce8a84e713d96728606020e81581c5d038a0789159458ca38d05c60bec3475d22030f0e038dee393f00461082581d605d038a0789159458ca38d05c60bec3475d22030f0e038dee393f00461a0073e096111a003bede01281825820fee1be4cc8b034a3cb036a0e2857a257905d1634b0b869935c9bc4d33aac556500ab00838258205fff6ab0d2d53f822faea5616e5da401d6b87b1e9c8cd22bb1be7cff0b649ea5018258205fff6ab0d2d53f822faea5616e5da401d6b87b1e9c8cd22bb1be7cff0b649ea502825820813f22b3448a43aabff6bf8ebe6d9c579dc1119dd50db00cc27404c75b75de2b000183a300581d70284cdf01757311c543fac6e755f9d644dc5865617efcdc2b81b249fd01821a001e8480a1581c2232026bd47c51e9777eae1d913de051ef22242125fafb70159d171fa1484e6f64654665656401028201d818583cd87a9fd8799f581cdf4e46bb98ab56936b39b8f5a7f231f5e69aa8820a83d083400a711bd8799fd8799f1a000f9e971b000001966286ed84ffffffff82581d60df4e46bb98ab56936b39b8f5a7f231f5e69aa8820a83d083400a711b1a0089544082581d60df4e46bb98ab56936b39b8f5a7f231f5e69aa8820a83d083400a711b1a006b7cb7021a000778a6031a05591eaa081a05591e320b582075c1045b18eaddfa906835c116a1deb62f37278c7dc584c3289f4aa4cdbf7c310d81825820813f22b3448a43aabff6bf8ebe6d9c579dc1119dd50db00cc27404c75b75de2b010e81581cdf4e46bb98ab56936b39b8f5a7f231f5e69aa8820a83d083400a711b1082581d60df4e46bb98ab56936b39b8f5a7f231f5e69aa8820a83d083400a711b1a004d6660111a003bede01281825820fee1be4cc8b034a3cb036a0e2857a257905d1634b0b869935c9bc4d33aac556500a60081825820158e178aa37902bc1815ce4fd7305482a26d8dfb59e7789656d6e2a4479907ce00018182583900fdf88a9e06fa6c50cd1e36030897b350b42b5b420dbaa364d7b35336e90f90ed83474cbc171026119519c910c23ac729b0a63db50b28899c1b0000000251a05474021a0002f9d10758202140516327a4edb07b309893a5f7c583e805c8c5f73d4820004a1b5b01a5b6310e81581ce90f90ed83474cbc171026119519c910c23ac729b0a63db50b28899c0f00ab0082825820254063a9116381a110d0880114c00a9fe094e4ec3883cc3e802f31f73503e3d702825820bbb4bec9f01894b14412e8078ed708ab94ffc53f286f74ecbf3af4d3755e6a86000183a300581d70284cdf01757311c543fac6e755f9d644dc5865617efcdc2b81b249fd01821a001e8480a1581c2232026bd47c51e9777eae1d913de051ef22242125fafb70159d171fa1484e6f64654665656401028201d818583cd87a9fd8799f581c7dc9ddcd48085cf247489d16d3e813556e6614c5988cf39a10bd4ae3d8799fd8799f1a000f9a691b0000019662871f2effffffff82581d607dc9ddcd48085cf247489d16d3e813556e6614c5988cf39a10bd4ae31a0089544082581d607dc9ddcd48085cf247489d16d3e813556e6614c5988cf39a10bd4ae31a08d7fe83021a00075956031a05591ebb081a05591e430b58201f87fb1dc07d275137530b754ca8b545952b49cc6a5eb3e6bbc0383f0d4ef9d70d81825820bbb4bec9f01894b14412e8078ed708ab94ffc53f286f74ecbf3af4d3755e6a86010e81581c7dc9ddcd48085cf247489d16d3e813556e6614c5988cf39a10bd4ae31082581d607dc9ddcd48085cf247489d16d3e813556e6614c5988cf39a10bd4ae31a004d6660111a003bede01281825820fee1be4cc8b034a3cb036a0e2857a257905d1634b0b869935c9bc4d33aac556500a5008182582018b042be2ac9638b35e11296cfc8a9f153c6ec9f4c3e0fd8274de711ceafe577010182825839003b6529ee91950ff2f2042e75a62b58a70814526247ba64d15fc8382dc7bc453d2742e6d896c02bd13a5c7a059396bd917a47e2114daec32c1a01312d0082583900f0998d4e84d13b14a84a6d7ef34195e82dacd5d97788d1deb1f04765abdc129316614d54f173fe20980a42bcc47a46166729e1947bc66ab91a546db775021a00044c11031a0559222b0758209ee3b3a98a267428f2af2d3500d2ba4a2b449506612b4cb8dda88877486c6523a300d9010281825820d51e85611ce5ad621f7b48a8cfb5d9d70f8628897847fd470acb758f1fc2ce5d00018182583900cc58bc747ce6a297ae46d03d3cbe5de8f36263df686697a847577b0ac520b81e3fe214726828ea245e915c57586ecc47ff463d73bf0adb331b00000001e7df9e33021a0002870186a20081825820bbf1fcb4bf3a1c8fb7765b8c2d5546e771f025b8862fbed3de0c222009afd55f5840a25a0805612408b960f7f2d76fd512ebec44578cda054139f48c19231dc617a314f9223be58925af9a9485405ecd34cbc4af5e688b5b2746aa6b4922430e7d0105a182000182d87980821a0012c8941a106a99c6a20081825820a6ada7ee39223e536b7284e798f5b4a84fc42b4d2cab9dba50f6c6df59e1ed3e5840c93d0214c9daf4834120d43b5462c6e111f0dfadbcac62101e9e276e9929f22fadcdd67106ddd53f969a4475102928ec9f8d1dd2fa976ee7751d6c29d8873d0205a182000282d87980821a0012eff61a1085253da10082825820cbe234f5978f633797b2cd5ae1f44daac8fedfc85e8ffb31d6d047cf65c18a7d58405713f4febd3986b595c1a25cee7dd97ffb2406fecdf27a1ea57558775c71058bbcb430821b2991de06a40a4d8462761969a967ef4905fbc74b0a762f0c6e44038258206d1cf9bb020f3248bc79adb506ebfaa03d5e0f9900c2ad5b94f62ac5cc67cdbf5840f3b6037d73825bfad5e497498031d2df2d97df85eedc73cac9793b2b0f7599cfd0bb3639092757e158f1ff8abbe5cd352ca4cf73d4d1f13b6ceb0d73550a0e02a2008182582004ea8afe91237e1bf12129111e940922b71afe1da54bab818fca2d1cbe7d0fd05840d442c6efede17e5b4877669ff60e1cb959f23191914c749bd3651cfee077ac83587378809e2bbeb46f14e78c5e75e116e48fed154fca88f7b5c96deede3e130d05a182000182d87980821a0011ab681a0f2a9238a10081825820d1cbd644352e1df301ccfa52dc93744d5b57cdfa6fa333add11a82691fb2ab1258405cc31e5292941498976b123b7c3cea52be1db55cc9239ec8f60dc70d4e227868ee8bfa3d654bc480f797f3f35fc88d24deac6e18e418114ae6b6b072b3232c08a100d90102818258205048435cc96ee17711de4b144bdb9a44cd9dee66289efce5c3058589831c2e6f5840a48b376d9e0c5bb1f5503d0469d6ea68d33c2228477c7c65388916f4fc0556e7acf519590f52a251ee701decdff2e0b947129f3068dcda2d82e9bc60d42d150ba202a11901fda40050ca7a1457ef9f4c7f9c747f8c4a4cfa6c01507a86e8e07f3a0b502fd4df9b9f598ab60a875840a30a8159013b308201373081eaa00302010202046b4562ac300506032b657030003022180f32303235303432333132303231305a180f393939393132333132335840353935395a3000304a300506032b65700341006410868688387eda325b56a7132aea60fb11c11645760c62c85fe602cb1a38455ea3ba9b9cab0f4c1064ee8c1f5840380fa15735c86cc96cad4bfcd728b9ead44ffaa3623060305e0603551d110457305586537765622b63617264616e6f3a2f2f616464722f7374616b655f74657358407431757235736c79386473647235653071687a716e70723967656579677679776b383978633276306434707635676e3871327070647961300506032b657003415840001de0267bb521c42c76bfae58297b6716fb96b51bca5b3636572455610915f2136b9166b88e3307cb399933f2d4c653543fc211a566e9fbc4320faefbc497cb584001181e83f7f7d980055820d92e576114f53586c30f974bb7205f24f4e33ba6894a7203a3bb850b2f60b1e1186482a3000001820a000300a300030182181e0203410018635840e404302912753e57bac72fae3ed2ed29f06b8fefd28f714797cc18ff9c6778f8fc2cf971eb873785d0b5d701986c3458dbd3c4f4002a77911b4c6e95e5ead00f04a11a000a39aab85b69757365726461746130705b7b227175657374696f6e223a224f7269757365726461746131706967696e222c22616e7377657273223a69757365726461746132705b224f726967696e2d434f225d7d2c7b6975736572646174613370227175657374696f6e223a224e616d656975736572646174613470222c22616e7377657273223a5b2250616975736572646174613570766974687261225d7d2c7b2271756573697573657264617461367074696f6e223a2250686f6e65204e756d6975736572646174613770626572222c22616e7377657273223a5b697573657264617461387022393138363638303330303839225d7d69757365726461746139702c7b227175657374696f6e223a2246616a757365726461746131307074686572206f722048757362616e64206a75736572646174613131704e616d65222c22616e7377657273223a6a75736572646174613132705b224d616e696b616e64616e225d7d2c6a75736572646174613133707b227175657374696f6e223a225072656a75736572646174613134706665726564204c616e6775616765222c6a757365726461746131357022616e7377657273223a5b2254616d696a75736572646174613136706c225d7d2c7b227175657374696f6e226a75736572646174613137703a22416765222c22616e7377657273226a75736572646174613138703a5b223333225d7d2c7b2271756573746a7573657264617461313970696f6e223a2244617465206f662042696a7573657264617461323070727468222c22616e7377657273223a5b6a757365726461746132317022225d7d2c7b227175657374696f6e226a75736572646174613232703a2241646472657373222c22616e73776a7573657264617461323370657273223a5b222c20204d2f33332c206a7573657264617461323470572f6f202c204e6f2e34392c204d65656a75736572646174613235706e616d70616c707572616d20737472656a757365726461746132367065742c2044722e20416d6265746b61726a75736572646174613237702050616c616d2c204d796c61706f72656a75736572646174613238702c206368656e6e61692d5c6e225d7d2c6a75736572646174613239707b227175657374696f6e223a224964206a757365726461746133307050726f6f662054797065222c22616e736a757365726461746133317077657273223a5b22225d7d2c7b2271756a7573657264617461333270657374696f6e223a2249642050726f6f6a757365726461746133337066204e756d626572222c22616e7377656a75736572646174613334707273223a5b22225d7d2c7b22717565736a757365726461746133357074696f6e223a2243617465676f7279206a75736572646174613336706f66205065746974696f6e222c22616e6a75736572646174613337707377657273223a5b224372696d65225d6a75736572646174613338707d2c7b227175657374696f6e223a22546a7573657264617461333970797065206f66205065746974696f6e226a75736572646174613430702c22616e7377657273223a5b224d6f6e6a757365726461746134317065792044697370757465225d7d2c7b226a75736572646174613432707175657374696f6e223a22436f756e746a75736572646174613433706572205065746974696f6e6572204e616a75736572646174613434706d65222c22616e7377657273223a5b226a75736572646174613435705375726573682c202044616e6173656b6a75736572646174613436706172616e2c225d7d2c7b2271756573746a7573657264617461343770696f6e223a22436f756e7465722050656a7573657264617461343870746974696f6e65722050686f6e65204e6a7573657264617461343970756d626572222c22616e7377657273226a75736572646174613530703a5b22225d7d2c7b227175657374696f6a75736572646174613531706e223a225065746974696f6e204769736a757365726461746135327074222c22616e7377657273223a5b22546a75736572646174613533706865207065746974696f6e65722020616a75736572646174613534706c6c65676564207468617420746865206a757365726461746135357043502077686f206368657465642074686a757365726461746135367065207065746974696f6e6572206f66206a757365726461746135377052732e35206c616b687320756e6465726a757365726461746135387020746865206775697365206f662062756a7573657264617461353970696c64206120686f7573655c6e225d7d6a75736572646174613630702c7b227175657374696f6e223a2250656a7573657264617461363170746974696f6e2044657461696c73222c6a757365726461746136327022616e7377657273223a5b22546865206a75736572646174613633707065746974696f6e65722020616c6c656a7573657264617461363470676564207468617420746865204350206a757365726461746136357077686f206368657465642074686520706a757365726461746136367065746974696f6e6572206f662052732e6a757365726461746136377035206c616b687320756e6465722074686a757365726461746136387065206775697365206f66206275696c646a7573657264617461363970206120686f7573655c6e225d7d2c7b226a75736572646174613730707175657374696f6e223a225a6f6e65226a75736572646174613731702c22616e7377657273223a5b224561736a757365726461746137327074205a6f6e65225d7d2c7b22717565736a757365726461746137337074696f6e223a22444350204f666669636a757365726461746137347065222c22616e7377657273223a5b224d6a7573657264617461373570594c41504f52452044495354225d7d2c6a75736572646174613736707b227175657374696f6e223a224143506a7573657264617461373770204f6666696365222c22616e737765726a757365726461746137387073223a5b224143202d204d796c61706f6a75736572646174613739707265225d7d2c7b227175657374696f6e6a7573657264617461383070223a224a7572697364696374696f6e206a7573657264617461383170506f6c6963652053746174696f6e222c6a757365726461746138327022616e7377657273223a5b224531204d6a7573657264617461383370796c61706f7265225d7d2c7b227175656a75736572646174613834707374696f6e223a225065746974696f6e6a7573657264617461383570204e756d626572222c22616e737765726a757365726461746138367073223a5b22333036312f434f502f56496a75736572646174613837705349544f52532f32303235225d7d2c7b6a7573657264617461383870227175657374696f6e223a22576f726b6a7573657264617461383970666c6f772054797065222c22616e73776a757365726461746139306f657273223a5b224175746f225d7d5d80

rust/rbac-registration/src/utils/test.rs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,38 @@ pub fn block_6() -> BlockTestData {
249249
}
250250
}
251251

252+
/// Returns the decoded `conway_7.block` block that contains 6 transactions.
253+
/// Slot number: `89_726_597`, Block number: `3_407_396`
254+
/// Tx hash: 5f70cb6017e0ff4369689c210bf983bdc6b184d214cb461215373c692d03e7e3
255+
///
256+
/// CIP509 details (valid data):
257+
/// Role: 0
258+
/// Tx index: 2
259+
/// prv hash: None
260+
/// purpose: ca7a1457-ef9f-4c7f-9c74-7f8c4a4cfa6c
261+
/// stake addr: `stake_test1urs8t0ssa3w9wh90ld5tprp3gurxd487rth2qlqk6ernjqcef4ugr`
262+
pub fn block_7() -> BlockTestData {
263+
let data = hex::decode(include_str!("../test_data/cardano/conway_7.block")).unwrap();
264+
BlockTestData {
265+
block: block(data),
266+
slot: 89_726_597.into(),
267+
role: 0.into(),
268+
txn_index: 2.into(),
269+
txn_hash: "5f70cb6017e0ff4369689c210bf983bdc6b184d214cb461215373c692d03e7e3"
270+
.parse()
271+
.unwrap(),
272+
prv_hash: None,
273+
purpose: "ca7a1457-ef9f-4c7f-9c74-7f8c4a4cfa6c"
274+
.parse::<Uuid>()
275+
.unwrap()
276+
.try_into()
277+
.unwrap(),
278+
stake_addr: Some(
279+
"stake_test1urs8t0ssa3w9wh90ld5tprp3gurxd487rth2qlqk6ernjqcef4ugr".to_string(),
280+
),
281+
}
282+
}
283+
252284
/// Converts the given raw data to a block.
253285
fn block(data: Vec<u8>) -> MultiEraBlock {
254286
// This point is used to bypass validation in the block constructor.

0 commit comments

Comments
 (0)