@@ -23,6 +23,20 @@ impl TryFrom<PlutusData> for PermissionedCandidateDatums {
23
23
}
24
24
}
25
25
26
+ pub fn permissioned_candidates_to_plutus_data (
27
+ candidates : & [ PermissionedCandidateData ] ,
28
+ ) -> PlutusData {
29
+ let mut list = PlutusList :: new ( ) ;
30
+ for candidate in candidates {
31
+ let mut candidate_datum = PlutusList :: new ( ) ;
32
+ candidate_datum. add ( & PlutusData :: new_bytes ( candidate. sidechain_public_key . 0 . clone ( ) ) ) ;
33
+ candidate_datum. add ( & PlutusData :: new_bytes ( candidate. aura_public_key . 0 . clone ( ) ) ) ;
34
+ candidate_datum. add ( & PlutusData :: new_bytes ( candidate. grandpa_public_key . 0 . clone ( ) ) ) ;
35
+ list. add ( & PlutusData :: new_list ( & candidate_datum) ) ;
36
+ }
37
+ PlutusData :: new_list ( & list)
38
+ }
39
+
26
40
/// Parses plutus data schema that was used before datum versioning was added. Kept for backwards compatibility.
27
41
fn decode_legacy_permissioned_candidates_datums (
28
42
datum : PlutusData ,
@@ -112,4 +126,45 @@ mod tests {
112
126
113
127
assert_eq ! ( PermissionedCandidateDatums :: try_from( plutus_data) . unwrap( ) , expected_datum)
114
128
}
129
+
130
+ #[ test]
131
+ fn permissioned_candidates_to_datum ( ) {
132
+ let input = vec ! [
133
+ PermissionedCandidateData {
134
+ sidechain_public_key: SidechainPublicKey (
135
+ hex!( "cb6df9de1efca7a3998a8ead4e02159d5fa99c3e0d4fd6432667390bb4726854" ) . into( ) ,
136
+ ) ,
137
+ aura_public_key: AuraPublicKey (
138
+ hex!( "bf20afa1c1a72af3341fa7a447e3f9eada9f3d054a7408fb9e49ad4d6e6559ec" ) . into( ) ,
139
+ ) ,
140
+ grandpa_public_key: GrandpaPublicKey (
141
+ hex!( "9042a40b0b1baa9adcead024432a923eac706be5e1a89d7f2f2d58bfa8f3c26d" ) . into( ) ,
142
+ ) ,
143
+ } ,
144
+ PermissionedCandidateData {
145
+ sidechain_public_key: SidechainPublicKey (
146
+ hex!( "79c3b7fc0b7697b9414cb87adcb37317d1cab32818ae18c0e97ad76395d1fdcf" ) . into( ) ,
147
+ ) ,
148
+ aura_public_key: AuraPublicKey (
149
+ hex!( "56d1da82e56e4cb35b13de25f69a3e9db917f3e13d6f786321f4b0a9dc153b19" ) . into( ) ,
150
+ ) ,
151
+ grandpa_public_key: GrandpaPublicKey (
152
+ hex!( "7392f3ea668aa2be7997d82c07bcfbec3ee4a9a4e01e3216d92b8f0d0a086c32" ) . into( ) ,
153
+ ) ,
154
+ } ,
155
+ ] ;
156
+ let expected_plutus_data = test_plutus_data ! ( { "list" : [
157
+ { "list" : [
158
+ { "bytes" : "cb6df9de1efca7a3998a8ead4e02159d5fa99c3e0d4fd6432667390bb4726854" } ,
159
+ { "bytes" : "bf20afa1c1a72af3341fa7a447e3f9eada9f3d054a7408fb9e49ad4d6e6559ec" } ,
160
+ { "bytes" : "9042a40b0b1baa9adcead024432a923eac706be5e1a89d7f2f2d58bfa8f3c26d" }
161
+ ] } ,
162
+ { "list" : [
163
+ { "bytes" : "79c3b7fc0b7697b9414cb87adcb37317d1cab32818ae18c0e97ad76395d1fdcf" } ,
164
+ { "bytes" : "56d1da82e56e4cb35b13de25f69a3e9db917f3e13d6f786321f4b0a9dc153b19" } ,
165
+ { "bytes" : "7392f3ea668aa2be7997d82c07bcfbec3ee4a9a4e01e3216d92b8f0d0a086c32" }
166
+ ] }
167
+ ] } ) ;
168
+ assert_eq ! ( permissioned_candidates_to_plutus_data( & input) , expected_plutus_data)
169
+ }
115
170
}
0 commit comments