@@ -278,18 +278,54 @@ pub trait RpcApi: Sized {
278278 blank : Option < bool > ,
279279 passphrase : Option < & str > ,
280280 avoid_reuse : Option < bool > ,
281+ descriptors : Option < bool > ,
281282 ) -> Result < json:: LoadWalletResult > {
282- let mut args = [
283- wallet. into ( ) ,
284- opt_into_json ( disable_private_keys) ?,
285- opt_into_json ( blank) ?,
286- opt_into_json ( passphrase) ?,
287- opt_into_json ( avoid_reuse) ?,
288- ] ;
289- self . call (
290- "createwallet" ,
291- handle_defaults ( & mut args, & [ false . into ( ) , false . into ( ) , into_json ( "" ) ?, false . into ( ) ] ) ,
292- )
283+ // the descriptors argument was added in version 21
284+ if self . version ( ) ? < 210000 {
285+ // note: we allow Some(false) since it's the default behavior
286+ if let Some ( true ) = descriptors {
287+ return Err ( Error :: Unsupported ) ;
288+ }
289+ // no descriptors argument yet
290+ let mut args = [
291+ wallet. into ( ) ,
292+ opt_into_json ( disable_private_keys) ?,
293+ opt_into_json ( blank) ?,
294+ opt_into_json ( passphrase) ?,
295+ opt_into_json ( avoid_reuse) ?,
296+ ] ;
297+ self . call (
298+ "createwallet" ,
299+ handle_defaults (
300+ & mut args,
301+ & [ false . into ( ) , false . into ( ) , into_json ( "" ) ?, false . into ( ) ] ,
302+ ) ,
303+ )
304+ } else {
305+ let mut args = [
306+ wallet. into ( ) ,
307+ opt_into_json ( disable_private_keys) ?,
308+ opt_into_json ( blank) ?,
309+ opt_into_json ( passphrase) ?,
310+ opt_into_json ( avoid_reuse) ?,
311+ opt_into_json ( descriptors) ?,
312+ ] ;
313+ // from 23 on, the default value of the descriptors argument is true
314+ let default_descriptors = self . version ( ) ? >= 230000 ;
315+ self . call (
316+ "createwallet" ,
317+ handle_defaults (
318+ & mut args,
319+ & [
320+ false . into ( ) ,
321+ false . into ( ) ,
322+ into_json ( "" ) ?,
323+ false . into ( ) ,
324+ default_descriptors. into ( ) ,
325+ ] ,
326+ ) ,
327+ )
328+ }
293329 }
294330
295331 fn list_wallets ( & self ) -> Result < Vec < String > > {
0 commit comments