@@ -110,6 +110,12 @@ pub const DELEGATE_ADDRESS_ARG: ArgConstant<'static> = ArgConstant {
110
110
help : "Address of delegate currently assigned to token account. Required by --sign-only" ,
111
111
} ;
112
112
113
+ pub const TRANSFER_LAMPORTS_ARG : ArgConstant < ' static > = ArgConstant {
114
+ name : "transfer_lamports" ,
115
+ long : "transfer-lamports" ,
116
+ help : "Additional lamports to transfer to make account rent-exempt after reallocation. Required by --sign-only" ,
117
+ } ;
118
+
113
119
pub const MULTISIG_SIGNER_ARG : ArgConstant < ' static > = ArgConstant {
114
120
name : "multisig_signer" ,
115
121
long : "multisig-signer" ,
@@ -323,6 +329,15 @@ pub fn delegate_address_arg<'a, 'b>() -> Arg<'a, 'b> {
323
329
. help ( DELEGATE_ADDRESS_ARG . help )
324
330
}
325
331
332
+ pub fn transfer_lamports_arg < ' a , ' b > ( ) -> Arg < ' a , ' b > {
333
+ Arg :: with_name ( TRANSFER_LAMPORTS_ARG . name )
334
+ . long ( TRANSFER_LAMPORTS_ARG . long )
335
+ . takes_value ( true )
336
+ . value_name ( "LAMPORTS" )
337
+ . validator ( is_amount)
338
+ . help ( TRANSFER_LAMPORTS_ARG . help )
339
+ }
340
+
326
341
pub fn multisig_signer_arg < ' a , ' b > ( ) -> Arg < ' a , ' b > {
327
342
Arg :: with_name ( MULTISIG_SIGNER_ARG . name )
328
343
. long ( MULTISIG_SIGNER_ARG . long )
@@ -815,6 +830,7 @@ async fn command_update_metadata(
815
830
authority : Pubkey ,
816
831
field : Field ,
817
832
value : Option < String > ,
833
+ transfer_lamports : Option < u64 > ,
818
834
bulk_signers : Vec < Arc < dyn Signer > > ,
819
835
) -> CommandResult {
820
836
let token = token_client_from_config ( config, & token_pubkey, None ) ?;
@@ -826,6 +842,7 @@ async fn command_update_metadata(
826
842
& authority,
827
843
field,
828
844
value,
845
+ transfer_lamports,
829
846
& bulk_signers,
830
847
)
831
848
. await ?
@@ -2898,6 +2915,16 @@ impl offline::ArgsConfig for SignOnlyNeedsDelegateAddress {
2898
2915
}
2899
2916
}
2900
2917
2918
+ struct SignOnlyNeedsTransferLamports { }
2919
+ impl offline:: ArgsConfig for SignOnlyNeedsTransferLamports {
2920
+ fn sign_only_arg < ' a , ' b > ( & self , arg : Arg < ' a , ' b > ) -> Arg < ' a , ' b > {
2921
+ arg. requires_all ( & [ TRANSFER_LAMPORTS_ARG . name ] )
2922
+ }
2923
+ fn signer_arg < ' a , ' b > ( & self , arg : Arg < ' a , ' b > ) -> Arg < ' a , ' b > {
2924
+ arg. requires_all ( & [ TRANSFER_LAMPORTS_ARG . name ] )
2925
+ }
2926
+ }
2927
+
2901
2928
fn minimum_signers_help_string ( ) -> String {
2902
2929
format ! (
2903
2930
"The minimum number of signers required to allow the operation. [{} <= M <= N]" ,
@@ -3295,7 +3322,8 @@ fn app<'a, 'b>(
3295
3322
. help ( "Specify the metadata update authority keypair. Defaults to the client keypair." )
3296
3323
)
3297
3324
. nonce_args ( true )
3298
- . offline_args ( ) ,
3325
+ . arg ( transfer_lamports_arg ( ) )
3326
+ . offline_args_config ( & SignOnlyNeedsTransferLamports { } ) ,
3299
3327
)
3300
3328
. subcommand (
3301
3329
SubCommand :: with_name ( CommandName :: CreateAccount . into ( ) )
@@ -4622,10 +4650,19 @@ async fn process_command<'a>(
4622
4650
_ => Field :: Key ( field. to_string ( ) ) ,
4623
4651
} ;
4624
4652
let value = arg_matches. value_of ( "value" ) . map ( |v| v. to_string ( ) ) ;
4653
+ let transfer_lamports = value_of :: < u64 > ( arg_matches, TRANSFER_LAMPORTS_ARG . name ) ;
4625
4654
let bulk_signers = vec ! [ authority_signer] ;
4626
4655
4627
- command_update_metadata ( config, token_pubkey, authority, field, value, bulk_signers)
4628
- . await
4656
+ command_update_metadata (
4657
+ config,
4658
+ token_pubkey,
4659
+ authority,
4660
+ field,
4661
+ value,
4662
+ transfer_lamports,
4663
+ bulk_signers,
4664
+ )
4665
+ . await
4629
4666
}
4630
4667
( CommandName :: CreateAccount , arg_matches) => {
4631
4668
let token = pubkey_of_signer ( arg_matches, "token" , & mut wallet_manager)
0 commit comments