@@ -112,24 +112,40 @@ impl CmdRun for AutomaticGenerateKeysCmd {
112
112
let bytes = hex:: decode ( & decoded_hex[ 2 ..] ) . map_err ( |e| {
113
113
anyhow:: anyhow!( "Failed to decode runtime API response: {}" , e)
114
114
} ) ?;
115
- // The runtime API may return either Vec<(key_type, key)> directly
116
- // or Option<Vec<..>> (introduced in newer FRAME versions). Handle both.
115
+ // The runtime API may return:
116
+ // 1. Vec<(Vec<u8>, Vec<u8>)> – legacy order (key_type bytes, pubkey)
117
+ // 2. Vec<(Vec<u8>, KeyTypeId)> – current sp_session order (pubkey, KeyTypeId)
118
+ // 3. Option<Vec<..>> wrapper – newer FRAME versions add Option
119
+ // Try each pattern progressively.
117
120
decoded_keys = {
118
121
// Attempt direct Vec decode first.
119
122
let mut cursor = & bytes[ ..] ;
120
123
match <Vec < ( Vec < u8 > , Vec < u8 > ) > >:: decode ( & mut cursor) {
121
124
Ok ( vec) if cursor. is_empty ( ) => vec,
122
125
_ => {
123
- // Fallback: try Option<Vec<..>>
124
- let mut cursor_opt = & bytes[ ..] ;
125
- <Option < Vec < ( Vec < u8 > , Vec < u8 > ) > > >:: decode ( & mut cursor_opt)
126
- . map_err ( |e| {
127
- anyhow:: anyhow!(
128
- "Failed to SCALE decode Option<Vec> keys: {}" ,
129
- e
130
- )
131
- } ) ?
132
- . unwrap_or_default ( )
126
+ // Try Vec<(Vec<u8>, u32)> where u32 is KeyTypeId
127
+ let mut cursor_alt = & bytes[ ..] ;
128
+ if let Ok ( vec_u32) =
129
+ <Vec < ( Vec < u8 > , u32 ) > >:: decode ( & mut cursor_alt)
130
+ {
131
+ vec_u32
132
+ . into_iter ( )
133
+ . map ( |( pubkey, key_type) | {
134
+ ( key_type. to_le_bytes ( ) . to_vec ( ) , pubkey)
135
+ } )
136
+ . collect :: < Vec < _ > > ( )
137
+ } else {
138
+ // Fallback: try Option<Vec<(Vec<u8>, Vec<u8>)>>
139
+ let mut cursor_opt = & bytes[ ..] ;
140
+ <Option < Vec < ( Vec < u8 > , Vec < u8 > ) > > >:: decode ( & mut cursor_opt)
141
+ . map_err ( |e| {
142
+ anyhow:: anyhow!(
143
+ "Failed to SCALE decode Option<Vec> keys: {}" ,
144
+ e
145
+ )
146
+ } ) ?
147
+ . unwrap_or_default ( )
148
+ }
133
149
} ,
134
150
}
135
151
} ;
0 commit comments