Cli: Remove units from various subcommands (#8301)

* Cli: Remove unit arg from various subcommands

* Update book usage page

* Update scripts and docs
This commit is contained in:
Tyera Eulberg 2020-02-15 12:53:52 -07:00 committed by GitHub
parent 9bcca268a3
commit b997d3eb4e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 491 additions and 401 deletions

View File

@ -22,12 +22,6 @@ $ solana airdrop 2
// Return // Return
"2.00000000 SOL" "2.00000000 SOL"
// Command
$ solana airdrop 123 --lamports
// Return
"123 lamports"
``` ```
### Get Balance ### Get Balance

View File

@ -191,12 +191,17 @@ FLAGS:
-v, --verbose Show extra information header -v, --verbose Show extra information header
OPTIONS: OPTIONS:
--ask-seed-phrase <KEYPAIR NAME> Recover a keypair using a seed phrase and optional passphrase [possible --ask-seed-phrase <KEYPAIR NAME>
values: keypair] Recover a keypair using a seed phrase and optional passphrase [possible values: keypair]
-C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] -C, --config <PATH>
Configuration file to use [default: ~/.config/solana/cli/config.yml]
--derivation-path <ACCOUNT or ACCOUNT/CHANGE>
Derivation path to use: m/44'/501'/ACCOUNT'/CHANGE'; default key is device base pubkey: m/44'/501'/0'
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
SUBCOMMANDS: SUBCOMMANDS:
account Show the contents of an account account Show the contents of an account
@ -226,6 +231,8 @@ SUBCOMMANDS:
genesis-hash Get the genesis hash genesis-hash Get the genesis hash
gossip Show the current gossip network nodes gossip Show the current gossip network nodes
help Prints this message or the help of the given subcommand(s) help Prints this message or the help of the given subcommand(s)
leader-schedule Display leader schedule
live-slots Show information about the current slot progression
new-nonce Generate a new nonce, rendering the existing nonce useless new-nonce Generate a new nonce, rendering the existing nonce useless
nonce Get the current nonce value nonce Get the current nonce value
nonce-account Show the contents of a nonce account nonce-account Show the contents of a nonce account
@ -233,14 +240,17 @@ SUBCOMMANDS:
ping Submit transactions sequentially ping Submit transactions sequentially
send-signature Send a signature to authorize a transfer send-signature Send a signature to authorize a transfer
send-timestamp Send a timestamp to unlock a transfer send-timestamp Send a timestamp to unlock a transfer
show-stake-account Show the contents of a stake account
slot Get current slot slot Get current slot
split-stake Split a stake account
stake-account Show the contents of a stake account
stake-authorize-staker Authorize a new stake signing keypair for the given stake account stake-authorize-staker Authorize a new stake signing keypair for the given stake account
stake-authorize-withdrawer Authorize a new withdraw signing keypair for the given stake account stake-authorize-withdrawer Authorize a new withdraw signing keypair for the given stake account
stake-history Show the stake history stake-history Show the stake history
stake-set-lockup Set Lockup for the stake account
stakes Show stake account information stakes Show stake account information
storage-account Show the contents of a storage account storage-account Show the contents of a storage account
transaction-count Get current transaction count transaction-count Get current transaction count
transfer Transfer funds between system accounts
validator-info Publish/get Validator info on Solana validator-info Publish/get Validator info on Solana
validators Show summary information about the current validators validators Show summary information about the current validators
vote-account Show the contents of a vote account vote-account Show the contents of a vote account
@ -273,7 +283,7 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
-o, --output <FILE> Write the account data to this file -o, --output <FILE> Write the account data to this file
ARGS: ARGS:
@ -301,7 +311,7 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
``` ```
#### solana-airdrop #### solana-airdrop
@ -310,7 +320,7 @@ solana-airdrop
Request lamports Request lamports
USAGE: USAGE:
solana airdrop [FLAGS] [OPTIONS] <AMOUNT> [UNIT] solana airdrop [FLAGS] [OPTIONS] <AMOUNT>
FLAGS: FLAGS:
-h, --help Prints help information -h, --help Prints help information
@ -327,11 +337,10 @@ OPTIONS:
--faucet-host <HOST> Faucet host to use [default: the --url host] --faucet-host <HOST> Faucet host to use [default: the --url host]
--faucet-port <PORT> Faucet port to use [default: 9900] --faucet-port <PORT> Faucet port to use [default: 9900]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
ARGS: ARGS:
<AMOUNT> The airdrop amount to request (default unit SOL) <AMOUNT> The airdrop amount to request, in SOL
<UNIT> Specify unit to use for request and balance display [possible values: SOL, lamports]
``` ```
#### solana-authorize-nonce-account #### solana-authorize-nonce-account
@ -357,7 +366,7 @@ OPTIONS:
Configuration file to use [default: ~/.config/solana/cli/config.yml] Configuration file to use [default: ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
--nonce-authority <KEYPAIR or PUBKEY> --nonce-authority <KEYPAIR or PUBKEY>
Provide the nonce authority keypair to use when signing a nonced transaction Provide the nonce authority keypair to use when signing a nonced transaction
@ -392,7 +401,7 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
ARGS: ARGS:
<PUBKEY> The public key of the balance to check <PUBKEY> The public key of the balance to check
@ -420,7 +429,7 @@ OPTIONS:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
--epoch <epoch> Epoch to show block production for [default: current epoch] --epoch <epoch> Epoch to show block production for [default: current epoch]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
--slot-limit <slot_limit> Limit results to this many slots from the end of the epoch [default: full --slot-limit <slot_limit> Limit results to this many slots from the end of the epoch [default: full
epoch] epoch]
``` ```
@ -446,7 +455,7 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
ARGS: ARGS:
<SLOT> Slot number of the block to query <SLOT> Slot number of the block to query
@ -473,7 +482,7 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
ARGS: ARGS:
<PROCESS ID> The process id of the transfer to cancel <PROCESS ID> The process id of the transfer to cancel
@ -500,7 +509,7 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
ARGS: ARGS:
<PUBKEY> Identity pubkey of the validator <PUBKEY> Identity pubkey of the validator
@ -527,7 +536,7 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
ARGS: ARGS:
<NODE PUBKEY> The node account to credit the rewards to <NODE PUBKEY> The node account to credit the rewards to
@ -555,7 +564,7 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
``` ```
#### solana-config #### solana-config
@ -579,7 +588,7 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
SUBCOMMANDS: SUBCOMMANDS:
get Get current config settings get Get current config settings
@ -608,7 +617,7 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
ARGS: ARGS:
<SIGNATURE> The transaction signature to confirm <SIGNATURE> The transaction signature to confirm
@ -636,7 +645,7 @@ OPTIONS:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
--from <PUBKEY> From (base) key, defaults to client keypair. --from <PUBKEY> From (base) key, defaults to client keypair.
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
ARGS: ARGS:
<SEED_STRING> The seed. Must not take more than 32 bytes to encode as utf-8 <SEED_STRING> The seed. Must not take more than 32 bytes to encode as utf-8
@ -665,7 +674,7 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
ARGS: ARGS:
<STORAGE ACCOUNT OWNER PUBKEY> <STORAGE ACCOUNT OWNER PUBKEY>
@ -678,7 +687,7 @@ solana-create-nonce-account
Create a nonce account Create a nonce account
USAGE: USAGE:
solana create-nonce-account [FLAGS] [OPTIONS] <NONCE ACCOUNT> <AMOUNT> [UNIT] solana create-nonce-account [FLAGS] [OPTIONS] <NONCE ACCOUNT> <AMOUNT>
FLAGS: FLAGS:
-h, --help Prints help information -h, --help Prints help information
@ -693,13 +702,12 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
--nonce-authority <BASE58_PUBKEY> Assign noncing authority to another entity --nonce-authority <BASE58_PUBKEY> Assign noncing authority to another entity
ARGS: ARGS:
<NONCE ACCOUNT> Keypair of the nonce account to fund <NONCE ACCOUNT> Keypair of the nonce account to fund
<AMOUNT> The amount to load the nonce account with (default unit SOL) <AMOUNT> The amount to load the nonce account with, in SOL
<UNIT> Specify unit to use for request [possible values: SOL, lamports]
``` ```
#### solana-create-stake-account #### solana-create-stake-account
@ -708,34 +716,56 @@ solana-create-stake-account
Create a stake account Create a stake account
USAGE: USAGE:
solana create-stake-account [FLAGS] [OPTIONS] <STAKE ACCOUNT> <AMOUNT> [UNIT] solana create-stake-account [FLAGS] [OPTIONS] <STAKE ACCOUNT> <AMOUNT>
FLAGS: FLAGS:
-h, --help Prints help information -h, --help Prints help information
--sign-only Sign the transaction offline
--skip-seed-phrase-validation Skip validation of seed phrases. Use this if your phrase does not use the BIP39 --skip-seed-phrase-validation Skip validation of seed phrases. Use this if your phrase does not use the BIP39
official English word list official English word list
-V, --version Prints version information -V, --version Prints version information
-v, --verbose Show extra information header -v, --verbose Show extra information header
OPTIONS: OPTIONS:
--ask-seed-phrase <KEYPAIR NAME> Recover a keypair using a seed phrase and optional passphrase [possible --ask-seed-phrase <KEYPAIR NAME>
values: keypair] Recover a keypair using a seed phrase and optional passphrase [possible values: keypair]
-C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] --blockhash <BLOCKHASH> Use the supplied blockhash
--custodian <PUBKEY> Identity of the custodian (can withdraw before lockup expires) -C, --config <PATH>
Configuration file to use [default: ~/.config/solana/cli/config.yml]
--custodian <KEYPAIR or PUBKEY> Identity of the custodian (can withdraw before lockup expires)
--fee-payer <KEYPAIR or PUBKEY>
Specify the fee-payer account. This may be a keypair file, the ASK keyword
or the pubkey of an offline signer, provided an appropriate --signer argument
is also passed. Defaults to the client keypair.
--from <KEYPAIR or PUBKEY> Source account of funds (if different from client local account)
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
--lockup-date <RFC3339 DATE TIME> The date and time at which this account will be available for withdrawal --lockup-date <RFC3339 DATE TIME>
--lockup-epoch <EPOCH> The epoch height at which this account will be available for withdrawal The date and time at which this account will be available for withdrawal
--seed <SEED STRING> Seed for address generation; if specified, the resulting account will be at
a derived address of the STAKE ACCOUNT pubkey --lockup-epoch <EPOCH>
The epoch height at which this account will be available for withdrawal
--nonce <PUBKEY>
Provide the nonce account to use when creating a nonced
transaction. Nonced transactions are useful when a transaction
requires a lengthy signing process. Learn more about nonced
transactions at https://docs.solana.com/offline-signing/durable-nonce
--nonce-authority <KEYPAIR or PUBKEY>
Provide the nonce authority keypair to use when signing a nonced transaction
--seed <SEED STRING>
Seed for address generation; if specified, the resulting account will be at a derived address of the STAKE
ACCOUNT pubkey
--signer <BASE58_PUBKEY=BASE58_SIG>... Provide a public-key/signature pair for the transaction
--stake-authority <PUBKEY> Public key of authorized staker (defaults to cli config pubkey) --stake-authority <PUBKEY> Public key of authorized staker (defaults to cli config pubkey)
--withdraw-authority <PUBKEY> Public key of authorized withdrawer (defaults to cli config pubkey) --withdraw-authority <PUBKEY> Public key of authorized withdrawer (defaults to cli config pubkey)
ARGS: ARGS:
<STAKE ACCOUNT> Keypair of the stake account to fund <STAKE ACCOUNT> Signing authority of the stake address to fund
<AMOUNT> The amount of send to the vote account (default unit SOL) <AMOUNT> The amount of send to the vote account, in SOL
<UNIT> Specify unit to use for request [possible values: SOL, lamports]
``` ```
#### solana-create-validator-storage-account #### solana-create-validator-storage-account
@ -759,7 +789,7 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
ARGS: ARGS:
<STORAGE ACCOUNT OWNER PUBKEY> <STORAGE ACCOUNT OWNER PUBKEY>
@ -790,7 +820,7 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
--seed <SEED STRING> Seed for address generation; if specified, the resulting account will be at --seed <SEED STRING> Seed for address generation; if specified, the resulting account will be at
a derived address of the VOTE ACCOUNT pubkey a derived address of the VOTE ACCOUNT pubkey
@ -823,8 +853,12 @@ OPTIONS:
-C, --config <PATH> -C, --config <PATH>
Configuration file to use [default: ~/.config/solana/cli/config.yml] Configuration file to use [default: ~/.config/solana/cli/config.yml]
--fee-payer <KEYPAIR or PUBKEY>
Specify the fee-payer account. This may be a keypair file, the ASK keyword
or the pubkey of an offline signer, provided an appropriate --signer argument
is also passed. Defaults to the client keypair.
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
--nonce <PUBKEY> --nonce <PUBKEY>
Provide the nonce account to use when creating a nonced Provide the nonce account to use when creating a nonced
transaction. Nonced transactions are useful when a transaction transaction. Nonced transactions are useful when a transaction
@ -833,8 +867,8 @@ OPTIONS:
--nonce-authority <KEYPAIR or PUBKEY> --nonce-authority <KEYPAIR or PUBKEY>
Provide the nonce authority keypair to use when signing a nonced transaction Provide the nonce authority keypair to use when signing a nonced transaction
--signer <PUBKEY=BASE58_SIG>... Provide a public-key/signature pair for the transaction --signer <BASE58_PUBKEY=BASE58_SIG>... Provide a public-key/signature pair for the transaction
--stake-authority <KEYPAIR of PUBKEY> Public key of authorized staker (defaults to cli config pubkey) --stake-authority <KEYPAIR or PUBKEY> Public key of authorized staker (defaults to cli config pubkey)
ARGS: ARGS:
<STAKE ACCOUNT> Stake account to be deactivated. <STAKE ACCOUNT> Stake account to be deactivated.
@ -864,8 +898,12 @@ OPTIONS:
-C, --config <PATH> -C, --config <PATH>
Configuration file to use [default: ~/.config/solana/cli/config.yml] Configuration file to use [default: ~/.config/solana/cli/config.yml]
--fee-payer <KEYPAIR or PUBKEY>
Specify the fee-payer account. This may be a keypair file, the ASK keyword
or the pubkey of an offline signer, provided an appropriate --signer argument
is also passed. Defaults to the client keypair.
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
--nonce <PUBKEY> --nonce <PUBKEY>
Provide the nonce account to use when creating a nonced Provide the nonce account to use when creating a nonced
transaction. Nonced transactions are useful when a transaction transaction. Nonced transactions are useful when a transaction
@ -874,8 +912,8 @@ OPTIONS:
--nonce-authority <KEYPAIR or PUBKEY> --nonce-authority <KEYPAIR or PUBKEY>
Provide the nonce authority keypair to use when signing a nonced transaction Provide the nonce authority keypair to use when signing a nonced transaction
--signer <PUBKEY=BASE58_SIG>... Provide a public-key/signature pair for the transaction --signer <BASE58_PUBKEY=BASE58_SIG>... Provide a public-key/signature pair for the transaction
--stake-authority <KEYPAIR of PUBKEY> Public key of authorized staker (defaults to cli config pubkey) --stake-authority <KEYPAIR or PUBKEY> Public key of authorized staker (defaults to cli config pubkey)
ARGS: ARGS:
<STAKE ACCOUNT> Stake account to delegate <STAKE ACCOUNT> Stake account to delegate
@ -903,7 +941,7 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
ARGS: ARGS:
<PATH TO BPF PROGRAM> /path/to/program.o <PATH TO BPF PROGRAM> /path/to/program.o
@ -931,7 +969,7 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
``` ```
#### solana-fees #### solana-fees
@ -955,7 +993,7 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
``` ```
#### solana-genesis-hash #### solana-genesis-hash
@ -979,7 +1017,7 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
``` ```
#### solana-gossip #### solana-gossip
@ -1003,7 +1041,7 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
``` ```
#### solana-help #### solana-help
@ -1018,6 +1056,55 @@ ARGS:
<subcommand>... The subcommand whose help message to display <subcommand>... The subcommand whose help message to display
``` ```
#### solana-leader-schedule
```text
solana-leader-schedule
Display leader schedule
USAGE:
solana leader-schedule [FLAGS] [OPTIONS]
FLAGS:
-h, --help Prints help information
--skip-seed-phrase-validation Skip validation of seed phrases. Use this if your phrase does not use the BIP39
official English word list
-V, --version Prints version information
-v, --verbose Show extra information header
OPTIONS:
--ask-seed-phrase <KEYPAIR NAME> Recover a keypair using a seed phrase and optional passphrase [possible
values: keypair]
-C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
```
#### solana-live-slots
```text
solana-live-slots
Show information about the current slot progression
USAGE:
solana live-slots [FLAGS] [OPTIONS]
FLAGS:
-h, --help Prints help information
--skip-seed-phrase-validation Skip validation of seed phrases. Use this if your phrase does not use the BIP39
official English word list
-V, --version Prints version information
-v, --verbose Show extra information header
OPTIONS:
--ask-seed-phrase <KEYPAIR NAME> Recover a keypair using a seed phrase and optional passphrase [possible
values: keypair]
-C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
-w, --ws <URL> WebSocket URL for PubSub RPC connection [default: ws://127.0.0.1:8900]
```
#### solana-new-nonce #### solana-new-nonce
```text ```text
solana-new-nonce solana-new-nonce
@ -1041,7 +1128,7 @@ OPTIONS:
Configuration file to use [default: ~/.config/solana/cli/config.yml] Configuration file to use [default: ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
--nonce-authority <KEYPAIR or PUBKEY> --nonce-authority <KEYPAIR or PUBKEY>
Provide the nonce authority keypair to use when signing a nonced transaction Provide the nonce authority keypair to use when signing a nonced transaction
@ -1071,7 +1158,7 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
ARGS: ARGS:
<NONCE ACCOUNT> Address of the nonce account to display <NONCE ACCOUNT> Address of the nonce account to display
@ -1099,7 +1186,7 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
ARGS: ARGS:
<NONCE ACCOUNT> Address of the nonce account to display <NONCE ACCOUNT> Address of the nonce account to display
@ -1111,7 +1198,7 @@ solana-pay
Send a payment Send a payment
USAGE: USAGE:
solana pay [FLAGS] [OPTIONS] <TO PUBKEY> <AMOUNT> [--] [UNIT] solana pay [FLAGS] [OPTIONS] <TO PUBKEY> <AMOUNT>
FLAGS: FLAGS:
--cancelable --cancelable
@ -1131,7 +1218,7 @@ OPTIONS:
Configuration file to use [default: ~/.config/solana/cli/config.yml] Configuration file to use [default: ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
--nonce <PUBKEY> --nonce <PUBKEY>
Provide the nonce account to use when creating a nonced Provide the nonce account to use when creating a nonced
transaction. Nonced transactions are useful when a transaction transaction. Nonced transactions are useful when a transaction
@ -1140,15 +1227,14 @@ OPTIONS:
--nonce-authority <KEYPAIR or PUBKEY> --nonce-authority <KEYPAIR or PUBKEY>
Provide the nonce authority keypair to use when signing a nonced transaction Provide the nonce authority keypair to use when signing a nonced transaction
--signer <PUBKEY=BASE58_SIG>... Provide a public-key/signature pair for the transaction --signer <BASE58_PUBKEY=BASE58_SIG>... Provide a public-key/signature pair for the transaction
--after <DATETIME> A timestamp after which transaction will execute --after <DATETIME> A timestamp after which transaction will execute
--require-timestamp-from <PUBKEY> Require timestamp from this third party --require-timestamp-from <PUBKEY> Require timestamp from this third party
--require-signature-from <PUBKEY>... Any third party signatures required to unlock the lamports --require-signature-from <PUBKEY>... Any third party signatures required to unlock the lamports
ARGS: ARGS:
<TO PUBKEY> The pubkey of recipient <TO PUBKEY> The pubkey of recipient
<AMOUNT> The amount to send (default unit SOL) <AMOUNT> The amount to send, in SOL
<UNIT> Specify unit to use for request [possible values: SOL, lamports]
``` ```
#### solana-ping #### solana-ping
@ -1175,7 +1261,7 @@ OPTIONS:
-c, --count <NUMBER> Stop after submitting count transactions -c, --count <NUMBER> Stop after submitting count transactions
-i, --interval <SECONDS> Wait interval seconds between submitting the next transaction [default: 2] -i, --interval <SECONDS> Wait interval seconds between submitting the next transaction [default: 2]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
--lamports <NUMBER> Number of lamports to transfer for each transaction [default: 1] --lamports <NUMBER> Number of lamports to transfer for each transaction [default: 1]
-t, --timeout <SECONDS> Wait up to timeout seconds for transaction confirmation [default: 15] -t, --timeout <SECONDS> Wait up to timeout seconds for transaction confirmation [default: 15]
``` ```
@ -1201,7 +1287,7 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
ARGS: ARGS:
<PUBKEY> The pubkey of recipient <PUBKEY> The pubkey of recipient
@ -1230,41 +1316,13 @@ OPTIONS:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
--date <DATETIME> Optional arbitrary timestamp to apply --date <DATETIME> Optional arbitrary timestamp to apply
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
ARGS: ARGS:
<PUBKEY> The pubkey of recipient <PUBKEY> The pubkey of recipient
<PROCESS ID> The process id of the transfer to unlock <PROCESS ID> The process id of the transfer to unlock
``` ```
#### solana-show-stake-account
```text
solana-show-stake-account
Show the contents of a stake account
USAGE:
solana show-stake-account [FLAGS] [OPTIONS] <STAKE ACCOUNT>
FLAGS:
-h, --help Prints help information
--lamports Display balance in lamports instead of SOL
--skip-seed-phrase-validation Skip validation of seed phrases. Use this if your phrase does not use the BIP39
official English word list
-V, --version Prints version information
-v, --verbose Show extra information header
OPTIONS:
--ask-seed-phrase <KEYPAIR NAME> Recover a keypair using a seed phrase and optional passphrase [possible
values: keypair]
-C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json
ARGS:
<STAKE ACCOUNT> Address of the stake account to display
```
#### solana-slot #### solana-slot
```text ```text
solana-slot solana-slot
@ -1287,7 +1345,85 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
```
#### solana-split-stake
```text
solana-split-stake
Split a stake account
USAGE:
solana split-stake [FLAGS] [OPTIONS] <STAKE ACCOUNT> <SPLIT STAKE ACCOUNT> <AMOUNT>
FLAGS:
-h, --help Prints help information
--sign-only Sign the transaction offline
--skip-seed-phrase-validation Skip validation of seed phrases. Use this if your phrase does not use the BIP39
official English word list
-V, --version Prints version information
-v, --verbose Show extra information header
OPTIONS:
--ask-seed-phrase <KEYPAIR NAME>
Recover a keypair using a seed phrase and optional passphrase [possible values: keypair]
--blockhash <BLOCKHASH> Use the supplied blockhash
-C, --config <PATH>
Configuration file to use [default: ~/.config/solana/cli/config.yml]
--fee-payer <KEYPAIR or PUBKEY>
Specify the fee-payer account. This may be a keypair file, the ASK keyword
or the pubkey of an offline signer, provided an appropriate --signer argument
is also passed. Defaults to the client keypair.
-u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
--nonce <PUBKEY>
Provide the nonce account to use when creating a nonced
transaction. Nonced transactions are useful when a transaction
requires a lengthy signing process. Learn more about nonced
transactions at https://docs.solana.com/offline-signing/durable-nonce
--nonce-authority <KEYPAIR or PUBKEY>
Provide the nonce authority keypair to use when signing a nonced transaction
--seed <SEED STRING>
Seed for address generation; if specified, the resulting account will be at a derived address of the SPLIT
STAKE ACCOUNT pubkey
--signer <BASE58_PUBKEY=BASE58_SIG>... Provide a public-key/signature pair for the transaction
--stake-authority <KEYPAIR or PUBKEY> Public key of authorized staker (defaults to cli config pubkey)
ARGS:
<STAKE ACCOUNT> Stake account to be split
<SPLIT STAKE ACCOUNT> Keypair of the new stake account to split funds into
<AMOUNT> The amount to move into the new stake account, in unit SOL
```
#### solana-stake-account
```text
solana-stake-account
Show the contents of a stake account
USAGE:
solana stake-account [FLAGS] [OPTIONS] <STAKE ACCOUNT>
FLAGS:
-h, --help Prints help information
--lamports Display balance in lamports instead of SOL
--skip-seed-phrase-validation Skip validation of seed phrases. Use this if your phrase does not use the BIP39
official English word list
-V, --version Prints version information
-v, --verbose Show extra information header
OPTIONS:
--ask-seed-phrase <KEYPAIR NAME> Recover a keypair using a seed phrase and optional passphrase [possible
values: keypair]
-C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
ARGS:
<STAKE ACCOUNT> Address of the stake account to display
``` ```
#### solana-stake-authorize-staker #### solana-stake-authorize-staker
@ -1314,8 +1450,12 @@ OPTIONS:
-C, --config <PATH> -C, --config <PATH>
Configuration file to use [default: ~/.config/solana/cli/config.yml] Configuration file to use [default: ~/.config/solana/cli/config.yml]
--fee-payer <KEYPAIR or PUBKEY>
Specify the fee-payer account. This may be a keypair file, the ASK keyword
or the pubkey of an offline signer, provided an appropriate --signer argument
is also passed. Defaults to the client keypair.
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
--nonce <PUBKEY> --nonce <PUBKEY>
Provide the nonce account to use when creating a nonced Provide the nonce account to use when creating a nonced
transaction. Nonced transactions are useful when a transaction transaction. Nonced transactions are useful when a transaction
@ -1324,8 +1464,8 @@ OPTIONS:
--nonce-authority <KEYPAIR or PUBKEY> --nonce-authority <KEYPAIR or PUBKEY>
Provide the nonce authority keypair to use when signing a nonced transaction Provide the nonce authority keypair to use when signing a nonced transaction
--signer <PUBKEY=BASE58_SIG>... Provide a public-key/signature pair for the transaction --signer <BASE58_PUBKEY=BASE58_SIG>... Provide a public-key/signature pair for the transaction
--stake-authority <KEYPAIR of PUBKEY> Public key of authorized staker (defaults to cli config pubkey) --stake-authority <KEYPAIR or PUBKEY> Public key of authorized staker (defaults to cli config pubkey)
ARGS: ARGS:
<STAKE ACCOUNT> Stake account in which to set the authorized staker <STAKE ACCOUNT> Stake account in which to set the authorized staker
@ -1356,8 +1496,12 @@ OPTIONS:
-C, --config <PATH> -C, --config <PATH>
Configuration file to use [default: ~/.config/solana/cli/config.yml] Configuration file to use [default: ~/.config/solana/cli/config.yml]
--fee-payer <KEYPAIR or PUBKEY>
Specify the fee-payer account. This may be a keypair file, the ASK keyword
or the pubkey of an offline signer, provided an appropriate --signer argument
is also passed. Defaults to the client keypair.
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
--nonce <PUBKEY> --nonce <PUBKEY>
Provide the nonce account to use when creating a nonced Provide the nonce account to use when creating a nonced
transaction. Nonced transactions are useful when a transaction transaction. Nonced transactions are useful when a transaction
@ -1366,7 +1510,7 @@ OPTIONS:
--nonce-authority <KEYPAIR or PUBKEY> --nonce-authority <KEYPAIR or PUBKEY>
Provide the nonce authority keypair to use when signing a nonced transaction Provide the nonce authority keypair to use when signing a nonced transaction
--signer <PUBKEY=BASE58_SIG>... Provide a public-key/signature pair for the transaction --signer <BASE58_PUBKEY=BASE58_SIG>... Provide a public-key/signature pair for the transaction
--withdraw-authority <KEYPAIR or PUBKEY> Public key of authorized withdrawer (defaults to cli config pubkey) --withdraw-authority <KEYPAIR or PUBKEY> Public key of authorized withdrawer (defaults to cli config pubkey)
ARGS: ARGS:
@ -1396,7 +1540,61 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
```
#### solana-stake-set-lockup
```text
solana-stake-set-lockup
Set Lockup for the stake account
USAGE:
solana stake-set-lockup [FLAGS] [OPTIONS] <STAKE ACCOUNT>
FLAGS:
-h, --help Prints help information
--sign-only Sign the transaction offline
--skip-seed-phrase-validation Skip validation of seed phrases. Use this if your phrase does not use the BIP39
official English word list
-V, --version Prints version information
-v, --verbose Show extra information header
OPTIONS:
--ask-seed-phrase <KEYPAIR NAME>
Recover a keypair using a seed phrase and optional passphrase [possible values: keypair]
--blockhash <BLOCKHASH> Use the supplied blockhash
-C, --config <PATH>
Configuration file to use [default: ~/.config/solana/cli/config.yml]
--custodian <KEYPAIR or PUBKEY> Public key of signing custodian (defaults to cli config pubkey)
--fee-payer <KEYPAIR or PUBKEY>
Specify the fee-payer account. This may be a keypair file, the ASK keyword
or the pubkey of an offline signer, provided an appropriate --signer argument
is also passed. Defaults to the client keypair.
-u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
--lockup-date <RFC3339 DATE TIME>
The date and time at which this account will be available for withdrawal
--lockup-epoch <EPOCH>
The epoch height at which this account will be available for withdrawal
--new-custodian <KEYPAIR or PUBKEY>
Identity of the new lockup custodian (can withdraw before lockup expires)
--nonce <PUBKEY>
Provide the nonce account to use when creating a nonced
transaction. Nonced transactions are useful when a transaction
requires a lengthy signing process. Learn more about nonced
transactions at https://docs.solana.com/offline-signing/durable-nonce
--nonce-authority <KEYPAIR or PUBKEY>
Provide the nonce authority keypair to use when signing a nonced transaction
--signer <BASE58_PUBKEY=BASE58_SIG>... Provide a public-key/signature pair for the transaction
ARGS:
<STAKE ACCOUNT> Stake account for which to set Lockup
``` ```
#### solana-stakes #### solana-stakes
@ -1421,7 +1619,7 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
ARGS: ARGS:
<VOTE ACCOUNT PUBKEYS>... Only show stake accounts delegated to the provided vote accounts <VOTE ACCOUNT PUBKEYS>... Only show stake accounts delegated to the provided vote accounts
@ -1448,7 +1646,7 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
ARGS: ARGS:
<STORAGE ACCOUNT PUBKEY> Storage account pubkey <STORAGE ACCOUNT PUBKEY> Storage account pubkey
@ -1476,7 +1674,53 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
```
#### solana-transfer
```text
solana-transfer
Transfer funds between system accounts
USAGE:
solana transfer [FLAGS] [OPTIONS] <TO PUBKEY> <AMOUNT>
FLAGS:
-h, --help Prints help information
--sign-only Sign the transaction offline
--skip-seed-phrase-validation Skip validation of seed phrases. Use this if your phrase does not use the BIP39
official English word list
-V, --version Prints version information
-v, --verbose Show extra information header
OPTIONS:
--ask-seed-phrase <KEYPAIR NAME>
Recover a keypair using a seed phrase and optional passphrase [possible values: keypair]
--blockhash <BLOCKHASH> Use the supplied blockhash
-C, --config <PATH>
Configuration file to use [default: ~/.config/solana/cli/config.yml]
--fee-payer <KEYPAIR or PUBKEY>
Specify the fee-payer account. This may be a keypair file, the ASK keyword
or the pubkey of an offline signer, provided an appropriate --signer argument
is also passed. Defaults to the client keypair.
--from <KEYPAIR or PUBKEY> Source account of funds (if different from client local account)
-u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
--nonce <PUBKEY>
Provide the nonce account to use when creating a nonced
transaction. Nonced transactions are useful when a transaction
requires a lengthy signing process. Learn more about nonced
transactions at https://docs.solana.com/offline-signing/durable-nonce
--nonce-authority <KEYPAIR or PUBKEY>
Provide the nonce authority keypair to use when signing a nonced transaction
--signer <BASE58_PUBKEY=BASE58_SIG>... Provide a public-key/signature pair for the transaction
ARGS:
<TO PUBKEY> The pubkey of recipient
<AMOUNT> The amount to send, in SOL
``` ```
#### solana-validator-info #### solana-validator-info
@ -1500,7 +1744,7 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
SUBCOMMANDS: SUBCOMMANDS:
get Get and parse Solana Validator info get Get and parse Solana Validator info
@ -1530,7 +1774,7 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
``` ```
#### solana-vote-account #### solana-vote-account
@ -1555,7 +1799,7 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
ARGS: ARGS:
<VOTE ACCOUNT PUBKEY> Vote account pubkey <VOTE ACCOUNT PUBKEY> Vote account pubkey
@ -1582,7 +1826,7 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
ARGS: ARGS:
<VOTE ACCOUNT PUBKEY> Vote account in which to set the authorized voter <VOTE ACCOUNT PUBKEY> Vote account in which to set the authorized voter
@ -1610,7 +1854,7 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
ARGS: ARGS:
<VOTE ACCOUNT PUBKEY> Vote account in which to set the authorized withdrawer <VOTE ACCOUNT PUBKEY> Vote account in which to set the authorized withdrawer
@ -1638,7 +1882,7 @@ OPTIONS:
-C, --config <PATH> Configuration file to use [default: -C, --config <PATH> Configuration file to use [default:
~/.config/solana/cli/config.yml] ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
ARGS: ARGS:
<VOTE ACCOUNT PUBKEY> Vote account to update <VOTE ACCOUNT PUBKEY> Vote account to update
@ -1652,7 +1896,7 @@ solana-withdraw-from-nonce-account
Withdraw lamports from the nonce account Withdraw lamports from the nonce account
USAGE: USAGE:
solana withdraw-from-nonce-account [FLAGS] [OPTIONS] <NONCE ACCOUNT> <DESTINATION ACCOUNT> <AMOUNT> [UNIT] solana withdraw-from-nonce-account [FLAGS] [OPTIONS] <NONCE ACCOUNT> <DESTINATION ACCOUNT> <AMOUNT>
FLAGS: FLAGS:
-h, --help Prints help information -h, --help Prints help information
@ -1669,7 +1913,7 @@ OPTIONS:
Configuration file to use [default: ~/.config/solana/cli/config.yml] Configuration file to use [default: ~/.config/solana/cli/config.yml]
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
--nonce-authority <KEYPAIR or PUBKEY> --nonce-authority <KEYPAIR or PUBKEY>
Provide the nonce authority keypair to use when signing a nonced transaction Provide the nonce authority keypair to use when signing a nonced transaction
@ -1677,8 +1921,7 @@ OPTIONS:
ARGS: ARGS:
<NONCE ACCOUNT> Nonce account from to withdraw from <NONCE ACCOUNT> Nonce account from to withdraw from
<DESTINATION ACCOUNT> The account to which the lamports should be transferred <DESTINATION ACCOUNT> The account to which the lamports should be transferred
<AMOUNT> The amount to withdraw from the nonce account (default unit SOL) <AMOUNT> The amount to withdraw from the nonce account, in SOL
<UNIT> Specify unit to use for request [possible values: SOL, lamports]
``` ```
#### solana-withdraw-stake #### solana-withdraw-stake
@ -1687,10 +1930,11 @@ solana-withdraw-stake
Withdraw the unstaked lamports from the stake account Withdraw the unstaked lamports from the stake account
USAGE: USAGE:
solana withdraw-stake [FLAGS] [OPTIONS] <STAKE ACCOUNT> <DESTINATION ACCOUNT> <AMOUNT> [UNIT] solana withdraw-stake [FLAGS] [OPTIONS] <STAKE ACCOUNT> <DESTINATION ACCOUNT> <AMOUNT>
FLAGS: FLAGS:
-h, --help Prints help information -h, --help Prints help information
--sign-only Sign the transaction offline
--skip-seed-phrase-validation Skip validation of seed phrases. Use this if your phrase does not use the BIP39 --skip-seed-phrase-validation Skip validation of seed phrases. Use this if your phrase does not use the BIP39
official English word list official English word list
-V, --version Prints version information -V, --version Prints version information
@ -1700,17 +1944,29 @@ OPTIONS:
--ask-seed-phrase <KEYPAIR NAME> --ask-seed-phrase <KEYPAIR NAME>
Recover a keypair using a seed phrase and optional passphrase [possible values: keypair] Recover a keypair using a seed phrase and optional passphrase [possible values: keypair]
--blockhash <BLOCKHASH> Use the supplied blockhash
-C, --config <PATH> -C, --config <PATH>
Configuration file to use [default: ~/.config/solana/cli/config.yml] Configuration file to use [default: ~/.config/solana/cli/config.yml]
--fee-payer <KEYPAIR or PUBKEY>
Specify the fee-payer account. This may be a keypair file, the ASK keyword
or the pubkey of an offline signer, provided an appropriate --signer argument
is also passed. Defaults to the client keypair.
-u, --url <URL> JSON RPC URL for the solana cluster -u, --url <URL> JSON RPC URL for the solana cluster
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json or usb://remote/wallet/path
--nonce <PUBKEY>
Provide the nonce account to use when creating a nonced
transaction. Nonced transactions are useful when a transaction
requires a lengthy signing process. Learn more about nonced
transactions at https://docs.solana.com/offline-signing/durable-nonce
--nonce-authority <KEYPAIR or PUBKEY>
Provide the nonce authority keypair to use when signing a nonced transaction
--signer <BASE58_PUBKEY=BASE58_SIG>... Provide a public-key/signature pair for the transaction
--withdraw-authority <KEYPAIR or PUBKEY> Public key of authorized withdrawer (defaults to cli config pubkey) --withdraw-authority <KEYPAIR or PUBKEY> Public key of authorized withdrawer (defaults to cli config pubkey)
ARGS: ARGS:
<STAKE ACCOUNT> Stake account from which to withdraw <STAKE ACCOUNT> Stake account from which to withdraw
<DESTINATION ACCOUNT> The account to which the lamports should be transferred <DESTINATION ACCOUNT> The account to which the lamports should be transferred
<AMOUNT> The amount to withdraw from the stake account (default unit SOL) <AMOUNT> The amount to withdraw from the stake account, in SOL
<UNIT> Specify unit to use for request [possible values: SOL, lamports]
``` ```

View File

@ -37,7 +37,7 @@ Command
```bash ```bash
solana@offline$ solana pay --sign-only --blockhash 5Tx8F3jgSHx21CbtjwmdaKPLM5tWmreWAnPrbqHomSJF \ solana@offline$ solana pay --sign-only --blockhash 5Tx8F3jgSHx21CbtjwmdaKPLM5tWmreWAnPrbqHomSJF \
recipient-keypair.json 1 SOL recipient-keypair.json 1
``` ```
Output Output
@ -67,7 +67,7 @@ Command
```bash ```bash
solana@online$ solana pay --blockhash 5Tx8F3jgSHx21CbtjwmdaKPLM5tWmreWAnPrbqHomSJF \ solana@online$ solana pay --blockhash 5Tx8F3jgSHx21CbtjwmdaKPLM5tWmreWAnPrbqHomSJF \
--signer FhtzLVsmcV7S5XqGD79ErgoseCLhZYmEZnz9kQg1Rp7j=4vC38p4bz7XyiXrk6HtaooUqwxTWKocf45cstASGtmrD398biNJnmTcUCVEojE7wVQvgdYbjHJqRFZPpzfCQpmUN --signer FhtzLVsmcV7S5XqGD79ErgoseCLhZYmEZnz9kQg1Rp7j=4vC38p4bz7XyiXrk6HtaooUqwxTWKocf45cstASGtmrD398biNJnmTcUCVEojE7wVQvgdYbjHJqRFZPpzfCQpmUN
recipient-keypair.json 1 SOL recipient-keypair.json 1
``` ```
Output Output

View File

@ -36,7 +36,7 @@ A nonce account is created by first generating a new keypair, then create the ac
```bash ```bash
solana-keygen new -o nonce-keypair.json solana-keygen new -o nonce-keypair.json
solana create-nonce-account nonce-keypair.json 1 SOL solana create-nonce-account nonce-keypair.json 1
``` ```
- Output - Output
@ -127,7 +127,7 @@ Withdraw funds from a nonce account with
- Command - Command
```bash ```bash
solana withdraw-from-nonce-account nonce-keypair.json ~/.config/solana/id.json 0.5 SOL solana withdraw-from-nonce-account nonce-keypair.json ~/.config/solana/id.json 0.5
``` ```
- Output - Output
@ -197,7 +197,7 @@ Alice will need some funds to create a nonce account and send to Bob. Airdrop
her some SOL her some SOL
```bash ```bash
$ solana airdrop -k alice.json 10 SOL $ solana airdrop -k alice.json 10
10 SOL 10 SOL
``` ```
@ -211,7 +211,7 @@ has full authority over the nonce account
{% endhint %} {% endhint %}
```bash ```bash
$ solana create-nonce-account -k alice.json nonce.json 1 SOL $ solana create-nonce-account -k alice.json nonce.json 1
3KPZr96BTsL3hqera9up82KAU462Gz31xjqJ6eHUAjF935Yf8i1kmfEbo6SVbNaACKE5z6gySrNjVRvmS8DcPuwV 3KPZr96BTsL3hqera9up82KAU462Gz31xjqJ6eHUAjF935Yf8i1kmfEbo6SVbNaACKE5z6gySrNjVRvmS8DcPuwV
``` ```
@ -221,7 +221,7 @@ Alice attempts to pay Bob, but takes too long to sign. The specified blockhash
expires and the transaction fails expires and the transaction fails
```bash ```bash
$ solana pay -k alice.json --blockhash expiredDTaxfagttWjQweib42b6ZHADSx94Tw8gHx3W7 bob.json 1 SOL $ solana pay -k alice.json --blockhash expiredDTaxfagttWjQweib42b6ZHADSx94Tw8gHx3W7 bob.json 1
[2020-01-02T18:48:28.462911000Z ERROR solana_cli::cli] Io(Custom { kind: Other, error: "Transaction \"33gQQaoPc9jWePMvDAeyJpcnSPiGUAdtVg8zREWv4GiKjkcGNufgpcbFyRKRrA25NkgjZySEeKue5rawyeH5TzsV\" failed: None" }) [2020-01-02T18:48:28.462911000Z ERROR solana_cli::cli] Io(Custom { kind: Other, error: "Transaction \"33gQQaoPc9jWePMvDAeyJpcnSPiGUAdtVg8zREWv4GiKjkcGNufgpcbFyRKRrA25NkgjZySEeKue5rawyeH5TzsV\" failed: None" })
Error: Io(Custom { kind: Other, error: "Transaction \"33gQQaoPc9jWePMvDAeyJpcnSPiGUAdtVg8zREWv4GiKjkcGNufgpcbFyRKRrA25NkgjZySEeKue5rawyeH5TzsV\" failed: None" }) Error: Io(Custom { kind: Other, error: "Transaction \"33gQQaoPc9jWePMvDAeyJpcnSPiGUAdtVg8zREWv4GiKjkcGNufgpcbFyRKRrA25NkgjZySEeKue5rawyeH5TzsV\" failed: None" })
``` ```
@ -242,7 +242,7 @@ minimum balance required: 0.00136416 SOL
nonce: F7vmkY3DTaxfagttWjQweib42b6ZHADSx94Tw8gHx3W7 nonce: F7vmkY3DTaxfagttWjQweib42b6ZHADSx94Tw8gHx3W7
``` ```
```bash ```bash
$ solana pay -k alice.json --blockhash F7vmkY3DTaxfagttWjQweib42b6ZHADSx94Tw8gHx3W7 --nonce nonce.json bob.json 1 SOL $ solana pay -k alice.json --blockhash F7vmkY3DTaxfagttWjQweib42b6ZHADSx94Tw8gHx3W7 --nonce nonce.json bob.json 1
HR1368UKHVZyenmH7yVz5sBAijV6XAPeWbEiXEGVYQorRMcoijeNAbzZqEZiH8cDB8tk65ckqeegFjK8dHwNFgQ HR1368UKHVZyenmH7yVz5sBAijV6XAPeWbEiXEGVYQorRMcoijeNAbzZqEZiH8cDB8tk65ckqeegFjK8dHwNFgQ
``` ```

View File

@ -169,7 +169,7 @@ trigger a seed phrase input prompt for the stake account and use
`--ask-seed-phrase keypair` to securely input the funding keypair. `--ask-seed-phrase keypair` to securely input the funding keypair.
```bash ```bash
solana create-stake-account ASK 1 SOL --ask-seed-phrase keypair solana create-stake-account ASK 1 --ask-seed-phrase keypair
[stake_account] seed phrase: 🔒 [stake_account] seed phrase: 🔒
[stake_account] If this seed phrase has an associated passphrase, enter it now. Otherwise, press ENTER to continue: [stake_account] If this seed phrase has an associated passphrase, enter it now. Otherwise, press ENTER to continue:

View File

@ -129,7 +129,7 @@ Use solana-keygen to show the public keys for each of the keypairs, they will be
```text ```text
Then set up the storage accounts for your archiver by running: Then set up the storage accounts for your archiver by running:
```bash ```bash
solana --keypair archiver-keypair.json airdrop 100000 lamports solana --keypair archiver-keypair.json airdrop .0001
solana --keypair archiver-keypair.json create-archiver-storage-account $ARCHIVER_IDENTITY $STORAGE_IDENTITY solana --keypair archiver-keypair.json create-archiver-storage-account $ARCHIVER_IDENTITY $STORAGE_IDENTITY
``` ```

View File

@ -35,7 +35,7 @@ solana-keygen new -o ~/validator-stake-keypair.json
Now delegate 1 SOL to your validator by first creating your stake account: Now delegate 1 SOL to your validator by first creating your stake account:
```bash ```bash
solana create-stake-account ~/validator-stake-keypair.json 1 SOL solana create-stake-account ~/validator-stake-keypair.json 1
``` ```
and then delegating that stake to your validator: and then delegating that stake to your validator:

View File

@ -93,13 +93,9 @@ pub fn pubkeys_sigs_of(matches: &ArgMatches<'_>, name: &str) -> Option<Vec<(Pubk
}) })
} }
pub fn amount_of(matches: &ArgMatches<'_>, name: &str, unit: &str) -> Option<u64> { pub fn lamports_of_sol(matches: &ArgMatches<'_>, name: &str) -> Option<u64> {
if matches.value_of(unit) == Some("lamports") {
value_of(matches, name)
} else {
value_of(matches, name).map(sol_to_lamports) value_of(matches, name).map(sol_to_lamports)
} }
}
pub fn derivation_of(matches: &ArgMatches<'_>, name: &str) -> Option<DerivationPath> { pub fn derivation_of(matches: &ArgMatches<'_>, name: &str) -> Option<DerivationPath> {
matches.value_of(name).map(|derivation_str| { matches.value_of(name).map(|derivation_str| {
@ -269,24 +265,21 @@ mod tests {
} }
#[test] #[test]
fn test_amount_of() { fn test_lamports_of_sol() {
let matches = app() let matches = app()
.clone() .clone()
.get_matches_from(vec!["test", "--single", "50", "--unit", "lamports"]); .get_matches_from(vec!["test", "--single", "50"]);
assert_eq!(amount_of(&matches, "single", "unit"), Some(50)); assert_eq!(lamports_of_sol(&matches, "single"), Some(50000000000));
assert_eq!(amount_of(&matches, "multiple", "unit"), None); assert_eq!(lamports_of_sol(&matches, "multiple"), None);
let matches = app() let matches = app()
.clone() .clone()
.get_matches_from(vec!["test", "--single", "50", "--unit", "SOL"]); .get_matches_from(vec!["test", "--single", "1.5"]);
assert_eq!(amount_of(&matches, "single", "unit"), Some(50000000000)); assert_eq!(lamports_of_sol(&matches, "single"), Some(1500000000));
assert_eq!(lamports_of_sol(&matches, "multiple"), None);
let matches = app() let matches = app()
.clone() .clone()
.get_matches_from(vec!["test", "--single", "1.5", "--unit", "SOL"]); .get_matches_from(vec!["test", "--single", "0.03"]);
assert_eq!(amount_of(&matches, "single", "unit"), Some(1500000000)); assert_eq!(lamports_of_sol(&matches, "single"), Some(30000000));
let matches = app()
.clone()
.get_matches_from(vec!["test", "--single", "1.5", "--unit", "lamports"]);
assert_eq!(amount_of(&matches, "single", "unit"), None);
} }
#[test] #[test]

View File

@ -411,7 +411,6 @@ pub enum CliCommand {
faucet_host: Option<IpAddr>, faucet_host: Option<IpAddr>,
faucet_port: u16, faucet_port: u16,
lamports: u64, lamports: u64,
use_lamports_unit: bool,
}, },
Balance { Balance {
pubkey: Option<Pubkey>, pubkey: Option<Pubkey>,
@ -644,14 +643,12 @@ pub fn parse_command(matches: &ArgMatches<'_>) -> Result<CliCommandInfo, Box<dyn
} else { } else {
None None
}; };
let lamports = required_lamports_from(matches, "amount", "unit")?; let lamports = lamports_of_sol(matches, "amount").unwrap();
let use_lamports_unit = matches.value_of("unit") == Some("lamports");
Ok(CliCommandInfo { Ok(CliCommandInfo {
command: CliCommand::Airdrop { command: CliCommand::Airdrop {
faucet_host, faucet_host,
faucet_port, faucet_port,
lamports, lamports,
use_lamports_unit,
}, },
require_keypair: true, require_keypair: true,
}) })
@ -684,7 +681,7 @@ pub fn parse_command(matches: &ArgMatches<'_>) -> Result<CliCommandInfo, Box<dyn
} }
}, },
("pay", Some(matches)) => { ("pay", Some(matches)) => {
let lamports = required_lamports_from(matches, "amount", "unit")?; let lamports = lamports_of_sol(matches, "amount").unwrap();
let to = pubkey_of(&matches, "to").unwrap(); let to = pubkey_of(&matches, "to").unwrap();
let timestamp = if matches.is_present("timestamp") { let timestamp = if matches.is_present("timestamp") {
// Parse input for serde_json // Parse input for serde_json
@ -768,7 +765,7 @@ pub fn parse_command(matches: &ArgMatches<'_>) -> Result<CliCommandInfo, Box<dyn
}) })
} }
("transfer", Some(matches)) => { ("transfer", Some(matches)) => {
let lamports = required_lamports_from(matches, "amount", "unit")?; let lamports = lamports_of_sol(matches, "amount").unwrap();
let to = pubkey_of(&matches, "to").unwrap(); let to = pubkey_of(&matches, "to").unwrap();
let sign_only = matches.is_present(SIGN_ONLY_ARG.name); let sign_only = matches.is_present(SIGN_ONLY_ARG.name);
let signers = pubkeys_sigs_of(&matches, SIGNER_ARG.name); let signers = pubkeys_sigs_of(&matches, SIGNER_ARG.name);
@ -947,12 +944,11 @@ fn process_airdrop(
config: &CliConfig, config: &CliConfig,
faucet_addr: &SocketAddr, faucet_addr: &SocketAddr,
lamports: u64, lamports: u64,
use_lamports_unit: bool,
) -> ProcessResult { ) -> ProcessResult {
let pubkey = config.pubkey()?; let pubkey = config.pubkey()?;
println!( println!(
"Requesting airdrop of {} from {}", "Requesting airdrop of {} from {}",
build_balance_message(lamports, use_lamports_unit, true), build_balance_message(lamports, false, true),
faucet_addr faucet_addr
); );
let previous_balance = match rpc_client.retry_get_balance(&pubkey, 5)? { let previous_balance = match rpc_client.retry_get_balance(&pubkey, 5)? {
@ -971,11 +967,7 @@ fn process_airdrop(
.retry_get_balance(&pubkey, 5)? .retry_get_balance(&pubkey, 5)?
.unwrap_or(previous_balance); .unwrap_or(previous_balance);
Ok(build_balance_message( Ok(build_balance_message(current_balance, false, true))
current_balance,
use_lamports_unit,
true,
))
} }
fn process_balance( fn process_balance(
@ -1858,7 +1850,6 @@ pub fn process_command(config: &CliConfig) -> ProcessResult {
faucet_host, faucet_host,
faucet_port, faucet_port,
lamports, lamports,
use_lamports_unit,
} => { } => {
let faucet_addr = SocketAddr::new( let faucet_addr = SocketAddr::new(
faucet_host.unwrap_or_else(|| { faucet_host.unwrap_or_else(|| {
@ -1874,13 +1865,7 @@ pub fn process_command(config: &CliConfig) -> ProcessResult {
*faucet_port, *faucet_port,
); );
process_airdrop( process_airdrop(&rpc_client, config, &faucet_addr, *lamports)
&rpc_client,
config,
&faucet_addr,
*lamports,
*use_lamports_unit,
)
} }
// Check client balance // Check client balance
CliCommand::Balance { CliCommand::Balance {
@ -2055,22 +2040,6 @@ where
} }
} }
// If clap arg `name` is_required, and specifies an amount of either lamports or SOL, the only way
// `amount_of()` can return None is if `name` is an f64 and `unit`== "lamports". This method
// catches that case and converts it to an Error.
pub(crate) fn required_lamports_from(
matches: &ArgMatches<'_>,
name: &str,
unit: &str,
) -> Result<u64, CliError> {
amount_of(matches, name, unit).ok_or_else(|| {
CliError::BadParameter(format!(
"Lamports cannot be fractional: {}",
matches.value_of("amount").unwrap()
))
})
}
pub(crate) fn build_balance_message( pub(crate) fn build_balance_message(
lamports: u64, lamports: u64,
use_lamports_unit: bool, use_lamports_unit: bool,
@ -2128,15 +2097,7 @@ pub fn app<'ab, 'v>(name: &str, about: &'ab str, version: &'v str) -> App<'ab, '
.takes_value(true) .takes_value(true)
.validator(is_amount) .validator(is_amount)
.required(true) .required(true)
.help("The airdrop amount to request (default unit SOL)"), .help("The airdrop amount to request, in SOL"),
)
.arg(
Arg::with_name("unit")
.index(2)
.value_name("UNIT")
.takes_value(true)
.possible_values(&["SOL", "lamports"])
.help("Specify unit to use for request and balance display"),
), ),
) )
.subcommand( .subcommand(
@ -2245,15 +2206,7 @@ pub fn app<'ab, 'v>(name: &str, about: &'ab str, version: &'v str) -> App<'ab, '
.takes_value(true) .takes_value(true)
.validator(is_amount) .validator(is_amount)
.required(true) .required(true)
.help("The amount to send (default unit SOL)"), .help("The amount to send, in SOL"),
)
.arg(
Arg::with_name("unit")
.index(3)
.value_name("UNIT")
.takes_value(true)
.possible_values(&["SOL", "lamports"])
.help("Specify unit to use for request"),
) )
.arg( .arg(
Arg::with_name("timestamp") Arg::with_name("timestamp")
@ -2358,15 +2311,7 @@ pub fn app<'ab, 'v>(name: &str, about: &'ab str, version: &'v str) -> App<'ab, '
.takes_value(true) .takes_value(true)
.validator(is_amount) .validator(is_amount)
.required(true) .required(true)
.help("The amount to send (default unit SOL)"), .help("The amount to send, in SOL"),
)
.arg(
Arg::with_name("unit")
.index(3)
.value_name("UNIT")
.takes_value(true)
.possible_values(&["SOL", "lamports"])
.help("Specify unit to use for request"),
) )
.arg( .arg(
Arg::with_name("from") Arg::with_name("from")
@ -2468,15 +2413,14 @@ mod tests {
// Test Airdrop Subcommand // Test Airdrop Subcommand
let test_airdrop = test_commands let test_airdrop = test_commands
.clone() .clone()
.get_matches_from(vec!["test", "airdrop", "50", "lamports"]); .get_matches_from(vec!["test", "airdrop", "50"]);
assert_eq!( assert_eq!(
parse_command(&test_airdrop).unwrap(), parse_command(&test_airdrop).unwrap(),
CliCommandInfo { CliCommandInfo {
command: CliCommand::Airdrop { command: CliCommand::Airdrop {
faucet_host: None, faucet_host: None,
faucet_port: solana_faucet::faucet::FAUCET_PORT, faucet_port: solana_faucet::faucet::FAUCET_PORT,
lamports: 50, lamports: 50_000_000_000,
use_lamports_unit: true,
}, },
require_keypair: true, require_keypair: true,
} }
@ -2624,18 +2568,15 @@ mod tests {
); );
// Test Simple Pay Subcommand // Test Simple Pay Subcommand
let test_pay = test_commands.clone().get_matches_from(vec![ let test_pay =
"test", test_commands
"pay", .clone()
&pubkey_string, .get_matches_from(vec!["test", "pay", &pubkey_string, "50"]);
"50",
"lamports",
]);
assert_eq!( assert_eq!(
parse_command(&test_pay).unwrap(), parse_command(&test_pay).unwrap(),
CliCommandInfo { CliCommandInfo {
command: CliCommand::Pay(PayCommand { command: CliCommand::Pay(PayCommand {
lamports: 50, lamports: 50_000_000_000,
to: pubkey, to: pubkey,
..PayCommand::default() ..PayCommand::default()
}), }),
@ -2649,7 +2590,6 @@ mod tests {
"pay", "pay",
&pubkey_string, &pubkey_string,
"50", "50",
"lamports",
"--require-signature-from", "--require-signature-from",
&witness0_string, &witness0_string,
"--require-signature-from", "--require-signature-from",
@ -2659,7 +2599,7 @@ mod tests {
parse_command(&test_pay_multiple_witnesses).unwrap(), parse_command(&test_pay_multiple_witnesses).unwrap(),
CliCommandInfo { CliCommandInfo {
command: CliCommand::Pay(PayCommand { command: CliCommand::Pay(PayCommand {
lamports: 50, lamports: 50_000_000_000,
to: pubkey, to: pubkey,
witnesses: Some(vec![witness0, witness1]), witnesses: Some(vec![witness0, witness1]),
..PayCommand::default() ..PayCommand::default()
@ -2672,7 +2612,6 @@ mod tests {
"pay", "pay",
&pubkey_string, &pubkey_string,
"50", "50",
"lamports",
"--require-signature-from", "--require-signature-from",
&witness0_string, &witness0_string,
]); ]);
@ -2680,7 +2619,7 @@ mod tests {
parse_command(&test_pay_single_witness).unwrap(), parse_command(&test_pay_single_witness).unwrap(),
CliCommandInfo { CliCommandInfo {
command: CliCommand::Pay(PayCommand { command: CliCommand::Pay(PayCommand {
lamports: 50, lamports: 50_000_000_000,
to: pubkey, to: pubkey,
witnesses: Some(vec![witness0]), witnesses: Some(vec![witness0]),
..PayCommand::default() ..PayCommand::default()
@ -2695,7 +2634,6 @@ mod tests {
"pay", "pay",
&pubkey_string, &pubkey_string,
"50", "50",
"lamports",
"--after", "--after",
"2018-09-19T17:30:59", "2018-09-19T17:30:59",
"--require-timestamp-from", "--require-timestamp-from",
@ -2705,7 +2643,7 @@ mod tests {
parse_command(&test_pay_timestamp).unwrap(), parse_command(&test_pay_timestamp).unwrap(),
CliCommandInfo { CliCommandInfo {
command: CliCommand::Pay(PayCommand { command: CliCommand::Pay(PayCommand {
lamports: 50, lamports: 50_000_000_000,
to: pubkey, to: pubkey,
timestamp: Some(dt), timestamp: Some(dt),
timestamp_pubkey: Some(witness0), timestamp_pubkey: Some(witness0),
@ -2723,7 +2661,6 @@ mod tests {
"pay", "pay",
&pubkey_string, &pubkey_string,
"50", "50",
"lamports",
"--blockhash", "--blockhash",
&blockhash_string, &blockhash_string,
"--sign-only", "--sign-only",
@ -2732,7 +2669,7 @@ mod tests {
parse_command(&test_pay).unwrap(), parse_command(&test_pay).unwrap(),
CliCommandInfo { CliCommandInfo {
command: CliCommand::Pay(PayCommand { command: CliCommand::Pay(PayCommand {
lamports: 50, lamports: 50_000_000_000,
to: pubkey, to: pubkey,
blockhash_query: BlockhashQuery::None(blockhash, FeeCalculator::default()), blockhash_query: BlockhashQuery::None(blockhash, FeeCalculator::default()),
sign_only: true, sign_only: true,
@ -2751,7 +2688,6 @@ mod tests {
"pay", "pay",
&pubkey_string, &pubkey_string,
"50", "50",
"lamports",
"--blockhash", "--blockhash",
&blockhash_string, &blockhash_string,
"--signer", "--signer",
@ -2761,7 +2697,7 @@ mod tests {
parse_command(&test_pay).unwrap(), parse_command(&test_pay).unwrap(),
CliCommandInfo { CliCommandInfo {
command: CliCommand::Pay(PayCommand { command: CliCommand::Pay(PayCommand {
lamports: 50, lamports: 50_000_000_000,
to: pubkey, to: pubkey,
blockhash_query: BlockhashQuery::FeeCalculator(blockhash), blockhash_query: BlockhashQuery::FeeCalculator(blockhash),
signers: Some(vec![(key1, sig1)]), signers: Some(vec![(key1, sig1)]),
@ -2780,7 +2716,6 @@ mod tests {
"pay", "pay",
&pubkey_string, &pubkey_string,
"50", "50",
"lamports",
"--blockhash", "--blockhash",
&blockhash_string, &blockhash_string,
"--signer", "--signer",
@ -2792,7 +2727,7 @@ mod tests {
parse_command(&test_pay).unwrap(), parse_command(&test_pay).unwrap(),
CliCommandInfo { CliCommandInfo {
command: CliCommand::Pay(PayCommand { command: CliCommand::Pay(PayCommand {
lamports: 50, lamports: 50_000_000_000,
to: pubkey, to: pubkey,
blockhash_query: BlockhashQuery::FeeCalculator(blockhash), blockhash_query: BlockhashQuery::FeeCalculator(blockhash),
signers: Some(vec![(key1, sig1), (key2, sig2)]), signers: Some(vec![(key1, sig1), (key2, sig2)]),
@ -2808,7 +2743,6 @@ mod tests {
"pay", "pay",
&pubkey_string, &pubkey_string,
"50", "50",
"lamports",
"--blockhash", "--blockhash",
&blockhash_string, &blockhash_string,
]); ]);
@ -2816,7 +2750,7 @@ mod tests {
parse_command(&test_pay).unwrap(), parse_command(&test_pay).unwrap(),
CliCommandInfo { CliCommandInfo {
command: CliCommand::Pay(PayCommand { command: CliCommand::Pay(PayCommand {
lamports: 50, lamports: 50_000_000_000,
to: pubkey, to: pubkey,
blockhash_query: BlockhashQuery::FeeCalculator(blockhash), blockhash_query: BlockhashQuery::FeeCalculator(blockhash),
..PayCommand::default() ..PayCommand::default()
@ -2833,7 +2767,6 @@ mod tests {
"pay", "pay",
&pubkey_string, &pubkey_string,
"50", "50",
"lamports",
"--blockhash", "--blockhash",
&blockhash_string, &blockhash_string,
"--nonce", "--nonce",
@ -2843,7 +2776,7 @@ mod tests {
parse_command(&test_pay).unwrap(), parse_command(&test_pay).unwrap(),
CliCommandInfo { CliCommandInfo {
command: CliCommand::Pay(PayCommand { command: CliCommand::Pay(PayCommand {
lamports: 50, lamports: 50_000_000_000,
to: pubkey, to: pubkey,
blockhash_query: BlockhashQuery::FeeCalculator(blockhash), blockhash_query: BlockhashQuery::FeeCalculator(blockhash),
nonce_account: Some(pubkey), nonce_account: Some(pubkey),
@ -2862,7 +2795,6 @@ mod tests {
"pay", "pay",
&pubkey_string, &pubkey_string,
"50", "50",
"lamports",
"--blockhash", "--blockhash",
&blockhash_string, &blockhash_string,
"--nonce", "--nonce",
@ -2874,7 +2806,7 @@ mod tests {
parse_command(&test_pay).unwrap(), parse_command(&test_pay).unwrap(),
CliCommandInfo { CliCommandInfo {
command: CliCommand::Pay(PayCommand { command: CliCommand::Pay(PayCommand {
lamports: 50, lamports: 50_000_000_000,
to: pubkey, to: pubkey,
blockhash_query: BlockhashQuery::FeeCalculator(blockhash), blockhash_query: BlockhashQuery::FeeCalculator(blockhash),
nonce_account: Some(pubkey), nonce_account: Some(pubkey),
@ -2896,7 +2828,6 @@ mod tests {
"pay", "pay",
&pubkey_string, &pubkey_string,
"50", "50",
"lamports",
"--blockhash", "--blockhash",
&blockhash_string, &blockhash_string,
"--nonce", "--nonce",
@ -2910,7 +2841,7 @@ mod tests {
parse_command(&test_pay).unwrap(), parse_command(&test_pay).unwrap(),
CliCommandInfo { CliCommandInfo {
command: CliCommand::Pay(PayCommand { command: CliCommand::Pay(PayCommand {
lamports: 50, lamports: 50_000_000_000,
to: pubkey, to: pubkey,
blockhash_query: BlockhashQuery::FeeCalculator(blockhash), blockhash_query: BlockhashQuery::FeeCalculator(blockhash),
nonce_account: Some(pubkey), nonce_account: Some(pubkey),
@ -2934,7 +2865,6 @@ mod tests {
"pay", "pay",
&pubkey_string, &pubkey_string,
"50", "50",
"lamports",
"--blockhash", "--blockhash",
&blockhash_string, &blockhash_string,
"--nonce", "--nonce",
@ -2965,7 +2895,6 @@ mod tests {
"pay", "pay",
&pubkey_string, &pubkey_string,
"50", "50",
"lamports",
"--after", "--after",
"2018-09-19T17:30:59", "2018-09-19T17:30:59",
"--require-signature-from", "--require-signature-from",
@ -2979,7 +2908,7 @@ mod tests {
parse_command(&test_pay_multiple_witnesses).unwrap(), parse_command(&test_pay_multiple_witnesses).unwrap(),
CliCommandInfo { CliCommandInfo {
command: CliCommand::Pay(PayCommand { command: CliCommand::Pay(PayCommand {
lamports: 50, lamports: 50_000_000_000,
to: pubkey, to: pubkey,
timestamp: Some(dt), timestamp: Some(dt),
timestamp_pubkey: Some(witness0), timestamp_pubkey: Some(witness0),
@ -3284,7 +3213,6 @@ mod tests {
faucet_host: None, faucet_host: None,
faucet_port: 1234, faucet_port: 1234,
lamports: 50, lamports: 50,
use_lamports_unit: true,
}; };
assert!(process_command(&config).is_ok()); assert!(process_command(&config).is_ok());
@ -3322,7 +3250,6 @@ mod tests {
faucet_host: None, faucet_host: None,
faucet_port: 1234, faucet_port: 1234,
lamports: 50, lamports: 50,
use_lamports_unit: true,
}; };
assert!(process_command(&config).is_err()); assert!(process_command(&config).is_err());
@ -3431,35 +3358,13 @@ mod tests {
fn test_parse_transfer_subcommand() { fn test_parse_transfer_subcommand() {
let test_commands = app("test", "desc", "version"); let test_commands = app("test", "desc", "version");
//Test Transfer Subcommand, lamports //Test Transfer Subcommand, SOL
let from_keypair = keypair_from_seed(&[0u8; 32]).unwrap(); let from_keypair = keypair_from_seed(&[0u8; 32]).unwrap();
let from_pubkey = from_keypair.pubkey(); let from_pubkey = from_keypair.pubkey();
let from_string = from_pubkey.to_string(); let from_string = from_pubkey.to_string();
let to_keypair = keypair_from_seed(&[1u8; 32]).unwrap(); let to_keypair = keypair_from_seed(&[1u8; 32]).unwrap();
let to_pubkey = to_keypair.pubkey(); let to_pubkey = to_keypair.pubkey();
let to_string = to_pubkey.to_string(); let to_string = to_pubkey.to_string();
let test_transfer = test_commands
.clone()
.get_matches_from(vec!["test", "transfer", &to_string, "42", "lamports"]);
assert_eq!(
parse_command(&test_transfer).unwrap(),
CliCommandInfo {
command: CliCommand::Transfer {
lamports: 42,
to: to_pubkey,
from: None,
sign_only: false,
signers: None,
blockhash_query: BlockhashQuery::All,
nonce_account: None,
nonce_authority: None,
fee_payer: None,
},
require_keypair: true,
}
);
//Test Transfer Subcommand, SOL
let test_transfer = test_commands let test_transfer = test_commands
.clone() .clone()
.get_matches_from(vec!["test", "transfer", &to_string, "42"]); .get_matches_from(vec!["test", "transfer", &to_string, "42"]);
@ -3489,7 +3394,6 @@ mod tests {
"transfer", "transfer",
&to_string, &to_string,
"42", "42",
"lamports",
"--blockhash", "--blockhash",
&blockhash_string, &blockhash_string,
"--sign-only", "--sign-only",
@ -3498,7 +3402,7 @@ mod tests {
parse_command(&test_transfer).unwrap(), parse_command(&test_transfer).unwrap(),
CliCommandInfo { CliCommandInfo {
command: CliCommand::Transfer { command: CliCommand::Transfer {
lamports: 42, lamports: 42_000_000_000,
to: to_pubkey, to: to_pubkey,
from: None, from: None,
sign_only: true, sign_only: true,
@ -3520,7 +3424,6 @@ mod tests {
"transfer", "transfer",
&to_string, &to_string,
"42", "42",
"lamports",
"--from", "--from",
&from_string, &from_string,
"--fee-payer", "--fee-payer",
@ -3534,7 +3437,7 @@ mod tests {
parse_command(&test_transfer).unwrap(), parse_command(&test_transfer).unwrap(),
CliCommandInfo { CliCommandInfo {
command: CliCommand::Transfer { command: CliCommand::Transfer {
lamports: 42, lamports: 42_000_000_000,
to: to_pubkey, to: to_pubkey,
from: Some(from_pubkey.into()), from: Some(from_pubkey.into()),
sign_only: false, sign_only: false,
@ -3559,7 +3462,6 @@ mod tests {
"transfer", "transfer",
&to_string, &to_string,
"42", "42",
"lamports",
"--blockhash", "--blockhash",
&blockhash_string, &blockhash_string,
"--nonce", "--nonce",
@ -3571,7 +3473,7 @@ mod tests {
parse_command(&test_transfer).unwrap(), parse_command(&test_transfer).unwrap(),
CliCommandInfo { CliCommandInfo {
command: CliCommand::Transfer { command: CliCommand::Transfer {
lamports: 42, lamports: 42_000_000_000,
to: to_pubkey, to: to_pubkey,
from: None, from: None,
sign_only: false, sign_only: false,

View File

@ -1,7 +1,7 @@
use crate::cli::{ use crate::cli::{
build_balance_message, check_account_for_fee, check_unique_pubkeys, build_balance_message, check_account_for_fee, check_unique_pubkeys,
log_instruction_custom_error, required_lamports_from, CliCommand, CliCommandInfo, CliConfig, log_instruction_custom_error, CliCommand, CliCommandInfo, CliConfig, CliError, ProcessResult,
CliError, ProcessResult, SigningAuthority, SigningAuthority,
}; };
use crate::offline::BLOCKHASH_ARG; use crate::offline::BLOCKHASH_ARG;
use clap::{App, Arg, ArgMatches, SubCommand}; use clap::{App, Arg, ArgMatches, SubCommand};
@ -121,15 +121,7 @@ impl NonceSubCommands for App<'_, '_> {
.takes_value(true) .takes_value(true)
.required(true) .required(true)
.validator(is_amount) .validator(is_amount)
.help("The amount to load the nonce account with (default unit SOL)"), .help("The amount to load the nonce account with, in SOL"),
)
.arg(
Arg::with_name("unit")
.index(3)
.value_name("UNIT")
.takes_value(true)
.possible_values(&["SOL", "lamports"])
.help("Specify unit to use for request"),
) )
.arg( .arg(
Arg::with_name(NONCE_AUTHORITY_ARG.name) Arg::with_name(NONCE_AUTHORITY_ARG.name)
@ -216,15 +208,7 @@ impl NonceSubCommands for App<'_, '_> {
.takes_value(true) .takes_value(true)
.required(true) .required(true)
.validator(is_amount) .validator(is_amount)
.help("The amount to withdraw from the nonce account (default unit SOL)"), .help("The amount to withdraw from the nonce account, in SOL"),
)
.arg(
Arg::with_name("unit")
.index(4)
.value_name("UNIT")
.takes_value(true)
.possible_values(&["SOL", "lamports"])
.help("Specify unit to use for request"),
) )
.arg(nonce_authority_arg()), .arg(nonce_authority_arg()),
) )
@ -250,7 +234,7 @@ pub fn parse_authorize_nonce_account(matches: &ArgMatches<'_>) -> Result<CliComm
pub fn parse_nonce_create_account(matches: &ArgMatches<'_>) -> Result<CliCommandInfo, CliError> { pub fn parse_nonce_create_account(matches: &ArgMatches<'_>) -> Result<CliCommandInfo, CliError> {
let nonce_account = keypair_of(matches, "nonce_account_keypair").unwrap(); let nonce_account = keypair_of(matches, "nonce_account_keypair").unwrap();
let seed = matches.value_of("seed").map(|s| s.to_string()); let seed = matches.value_of("seed").map(|s| s.to_string());
let lamports = required_lamports_from(matches, "amount", "unit")?; let lamports = lamports_of_sol(matches, "amount").unwrap();
let nonce_authority = pubkey_of(matches, NONCE_AUTHORITY_ARG.name); let nonce_authority = pubkey_of(matches, NONCE_AUTHORITY_ARG.name);
Ok(CliCommandInfo { Ok(CliCommandInfo {
@ -305,7 +289,7 @@ pub fn parse_withdraw_from_nonce_account(
) -> Result<CliCommandInfo, CliError> { ) -> Result<CliCommandInfo, CliError> {
let nonce_account = pubkey_of(matches, "nonce_account_keypair").unwrap(); let nonce_account = pubkey_of(matches, "nonce_account_keypair").unwrap();
let destination_account_pubkey = pubkey_of(matches, "destination_account_pubkey").unwrap(); let destination_account_pubkey = pubkey_of(matches, "destination_account_pubkey").unwrap();
let lamports = required_lamports_from(matches, "amount", "unit")?; let lamports = lamports_of_sol(matches, "amount").unwrap();
let nonce_authority = let nonce_authority =
SigningAuthority::new_from_matches(&matches, NONCE_AUTHORITY_ARG.name, None)?; SigningAuthority::new_from_matches(&matches, NONCE_AUTHORITY_ARG.name, None)?;
@ -689,7 +673,6 @@ mod tests {
"create-nonce-account", "create-nonce-account",
&keypair_file, &keypair_file,
"50", "50",
"lamports",
]); ]);
assert_eq!( assert_eq!(
parse_command(&test_create_nonce_account).unwrap(), parse_command(&test_create_nonce_account).unwrap(),
@ -698,7 +681,7 @@ mod tests {
nonce_account: read_keypair_file(&keypair_file).unwrap().into(), nonce_account: read_keypair_file(&keypair_file).unwrap().into(),
seed: None, seed: None,
nonce_authority: None, nonce_authority: None,
lamports: 50, lamports: 50_000_000_000,
}, },
require_keypair: true require_keypair: true
} }
@ -710,7 +693,6 @@ mod tests {
"create-nonce-account", "create-nonce-account",
&keypair_file, &keypair_file,
"50", "50",
"lamports",
"--nonce-authority", "--nonce-authority",
&authority_keypair_file, &authority_keypair_file,
]); ]);
@ -723,7 +705,7 @@ mod tests {
nonce_authority: Some( nonce_authority: Some(
read_keypair_file(&authority_keypair_file).unwrap().pubkey() read_keypair_file(&authority_keypair_file).unwrap().pubkey()
), ),
lamports: 50, lamports: 50_000_000_000,
}, },
require_keypair: true require_keypair: true
} }
@ -806,7 +788,6 @@ mod tests {
&keypair_file, &keypair_file,
&nonce_account_string, &nonce_account_string,
"42", "42",
"lamports",
]); ]);
assert_eq!( assert_eq!(
parse_command(&test_withdraw_from_nonce_account).unwrap(), parse_command(&test_withdraw_from_nonce_account).unwrap(),
@ -815,7 +796,7 @@ mod tests {
nonce_account: read_keypair_file(&keypair_file).unwrap().pubkey(), nonce_account: read_keypair_file(&keypair_file).unwrap().pubkey(),
nonce_authority: None, nonce_authority: None,
destination_account_pubkey: nonce_account_pubkey, destination_account_pubkey: nonce_account_pubkey,
lamports: 42 lamports: 42_000_000_000
}, },
require_keypair: true require_keypair: true
} }
@ -827,7 +808,6 @@ mod tests {
&keypair_file, &keypair_file,
&nonce_account_string, &nonce_account_string,
"42", "42",
"SOL",
]); ]);
assert_eq!( assert_eq!(
parse_command(&test_withdraw_from_nonce_account).unwrap(), parse_command(&test_withdraw_from_nonce_account).unwrap(),
@ -849,7 +829,6 @@ mod tests {
&keypair_file, &keypair_file,
&nonce_account_string, &nonce_account_string,
"42", "42",
"lamports",
"--nonce-authority", "--nonce-authority",
&authority_keypair_file, &authority_keypair_file,
]); ]);
@ -862,7 +841,7 @@ mod tests {
read_keypair_file(&authority_keypair_file).unwrap().into() read_keypair_file(&authority_keypair_file).unwrap().into()
), ),
destination_account_pubkey: nonce_account_pubkey, destination_account_pubkey: nonce_account_pubkey,
lamports: 42 lamports: 42_000_000_000
}, },
require_keypair: true require_keypair: true
} }

View File

@ -1,9 +1,9 @@
use crate::{ use crate::{
cli::{ cli::{
build_balance_message, check_account_for_fee, check_unique_pubkeys, fee_payer_arg, build_balance_message, check_account_for_fee, check_unique_pubkeys, fee_payer_arg,
log_instruction_custom_error, nonce_authority_arg, replace_signatures, log_instruction_custom_error, nonce_authority_arg, replace_signatures, return_signers,
required_lamports_from, return_signers, CliCommand, CliCommandInfo, CliConfig, CliError, CliCommand, CliCommandInfo, CliConfig, CliError, ProcessResult, SigningAuthority,
ProcessResult, SigningAuthority, FEE_PAYER_ARG, FEE_PAYER_ARG,
}, },
nonce::{check_nonce_account, nonce_arg, NONCE_ARG, NONCE_AUTHORITY_ARG}, nonce::{check_nonce_account, nonce_arg, NONCE_ARG, NONCE_AUTHORITY_ARG},
offline::*, offline::*,
@ -86,15 +86,7 @@ impl StakeSubCommands for App<'_, '_> {
.takes_value(true) .takes_value(true)
.validator(is_amount) .validator(is_amount)
.required(true) .required(true)
.help("The amount of send to the vote account (default unit SOL)") .help("The amount of send to the vote account, in SOL")
)
.arg(
Arg::with_name("unit")
.index(3)
.value_name("UNIT")
.takes_value(true)
.possible_values(&["SOL", "lamports"])
.help("Specify unit to use for request")
) )
.arg( .arg(
Arg::with_name("custodian") Arg::with_name("custodian")
@ -287,15 +279,7 @@ impl StakeSubCommands for App<'_, '_> {
.takes_value(true) .takes_value(true)
.validator(is_amount) .validator(is_amount)
.required(true) .required(true)
.help("The amount to move into the new stake account (default unit SOL)") .help("The amount to move into the new stake account, in unit SOL")
)
.arg(
Arg::with_name("unit")
.index(4)
.value_name("UNIT")
.takes_value(true)
.possible_values(&["SOL", "lamports"])
.help("Specify unit to use for request")
) )
.arg( .arg(
Arg::with_name("seed") Arg::with_name("seed")
@ -338,15 +322,7 @@ impl StakeSubCommands for App<'_, '_> {
.takes_value(true) .takes_value(true)
.validator(is_amount) .validator(is_amount)
.required(true) .required(true)
.help("The amount to withdraw from the stake account (default unit SOL)") .help("The amount to withdraw from the stake account, in SOL")
)
.arg(
Arg::with_name("unit")
.index(4)
.value_name("UNIT")
.takes_value(true)
.possible_values(&["SOL", "lamports"])
.help("Specify unit to use for request")
) )
.arg(withdraw_authority_arg()) .arg(withdraw_authority_arg())
.offline_args() .offline_args()
@ -443,7 +419,7 @@ pub fn parse_stake_create_account(matches: &ArgMatches<'_>) -> Result<CliCommand
let custodian = pubkey_of(matches, "custodian").unwrap_or_default(); let custodian = pubkey_of(matches, "custodian").unwrap_or_default();
let staker = pubkey_of(matches, STAKE_AUTHORITY_ARG.name); let staker = pubkey_of(matches, STAKE_AUTHORITY_ARG.name);
let withdrawer = pubkey_of(matches, WITHDRAW_AUTHORITY_ARG.name); let withdrawer = pubkey_of(matches, WITHDRAW_AUTHORITY_ARG.name);
let lamports = required_lamports_from(matches, "amount", "unit")?; let lamports = lamports_of_sol(matches, "amount").unwrap();
let sign_only = matches.is_present(SIGN_ONLY_ARG.name); let sign_only = matches.is_present(SIGN_ONLY_ARG.name);
let signers = pubkeys_sigs_of(&matches, SIGNER_ARG.name); let signers = pubkeys_sigs_of(&matches, SIGNER_ARG.name);
let blockhash_query = BlockhashQuery::new_from_matches(matches); let blockhash_query = BlockhashQuery::new_from_matches(matches);
@ -557,7 +533,7 @@ pub fn parse_stake_authorize(
pub fn parse_split_stake(matches: &ArgMatches<'_>) -> Result<CliCommandInfo, CliError> { pub fn parse_split_stake(matches: &ArgMatches<'_>) -> Result<CliCommandInfo, CliError> {
let stake_account_pubkey = pubkey_of(matches, "stake_account_pubkey").unwrap(); let stake_account_pubkey = pubkey_of(matches, "stake_account_pubkey").unwrap();
let split_stake_account = keypair_of(matches, "split_stake_account").unwrap(); let split_stake_account = keypair_of(matches, "split_stake_account").unwrap();
let lamports = required_lamports_from(matches, "amount", "unit")?; let lamports = lamports_of_sol(matches, "amount").unwrap();
let seed = matches.value_of("seed").map(|s| s.to_string()); let seed = matches.value_of("seed").map(|s| s.to_string());
let sign_only = matches.is_present(SIGN_ONLY_ARG.name); let sign_only = matches.is_present(SIGN_ONLY_ARG.name);
@ -622,7 +598,7 @@ pub fn parse_stake_deactivate_stake(matches: &ArgMatches<'_>) -> Result<CliComma
pub fn parse_stake_withdraw_stake(matches: &ArgMatches<'_>) -> Result<CliCommandInfo, CliError> { pub fn parse_stake_withdraw_stake(matches: &ArgMatches<'_>) -> Result<CliCommandInfo, CliError> {
let stake_account_pubkey = pubkey_of(matches, "stake_account_pubkey").unwrap(); let stake_account_pubkey = pubkey_of(matches, "stake_account_pubkey").unwrap();
let destination_account_pubkey = pubkey_of(matches, "destination_account_pubkey").unwrap(); let destination_account_pubkey = pubkey_of(matches, "destination_account_pubkey").unwrap();
let lamports = required_lamports_from(matches, "amount", "unit")?; let lamports = lamports_of_sol(matches, "amount").unwrap();
let sign_only = matches.is_present(SIGN_ONLY_ARG.name); let sign_only = matches.is_present(SIGN_ONLY_ARG.name);
let signers = pubkeys_sigs_of(&matches, SIGNER_ARG.name); let signers = pubkeys_sigs_of(&matches, SIGNER_ARG.name);
let blockhash_query = BlockhashQuery::new_from_matches(matches); let blockhash_query = BlockhashQuery::new_from_matches(matches);
@ -1865,7 +1841,6 @@ mod tests {
&custodian_string, &custodian_string,
"--lockup-epoch", "--lockup-epoch",
"43", "43",
"lamports",
]); ]);
assert_eq!( assert_eq!(
parse_command(&test_create_stake_account).unwrap(), parse_command(&test_create_stake_account).unwrap(),
@ -1880,7 +1855,7 @@ mod tests {
unix_timestamp: 0, unix_timestamp: 0,
custodian, custodian,
}, },
lamports: 50, lamports: 50_000_000_000,
sign_only: false, sign_only: false,
signers: None, signers: None,
blockhash_query: BlockhashQuery::All, blockhash_query: BlockhashQuery::All,
@ -1904,7 +1879,6 @@ mod tests {
"create-stake-account", "create-stake-account",
&keypair_file, &keypair_file,
"50", "50",
"lamports",
]); ]);
assert_eq!( assert_eq!(
@ -1916,7 +1890,7 @@ mod tests {
staker: None, staker: None,
withdrawer: None, withdrawer: None,
lockup: Lockup::default(), lockup: Lockup::default(),
lamports: 50, lamports: 50_000_000_000,
sign_only: false, sign_only: false,
signers: None, signers: None,
blockhash_query: BlockhashQuery::All, blockhash_query: BlockhashQuery::All,
@ -1944,7 +1918,6 @@ mod tests {
"create-stake-account", "create-stake-account",
&keypair_file, &keypair_file,
"50", "50",
"lamports",
"--blockhash", "--blockhash",
&nonce_hash_string, &nonce_hash_string,
"--nonce", "--nonce",
@ -1968,7 +1941,7 @@ mod tests {
staker: None, staker: None,
withdrawer: None, withdrawer: None,
lockup: Lockup::default(), lockup: Lockup::default(),
lamports: 50, lamports: 50_000_000_000,
sign_only: false, sign_only: false,
signers: Some(vec![(offline_pubkey, offline_sig)]), signers: Some(vec![(offline_pubkey, offline_sig)]),
blockhash_query: BlockhashQuery::FeeCalculator(nonce_hash), blockhash_query: BlockhashQuery::FeeCalculator(nonce_hash),
@ -2270,7 +2243,6 @@ mod tests {
&stake_account_string, &stake_account_string,
&stake_account_string, &stake_account_string,
"42", "42",
"lamports",
]); ]);
assert_eq!( assert_eq!(
@ -2279,7 +2251,7 @@ mod tests {
command: CliCommand::WithdrawStake { command: CliCommand::WithdrawStake {
stake_account_pubkey, stake_account_pubkey,
destination_account_pubkey: stake_account_pubkey, destination_account_pubkey: stake_account_pubkey,
lamports: 42, lamports: 42_000_000_000,
withdraw_authority: None, withdraw_authority: None,
sign_only: false, sign_only: false,
signers: None, signers: None,
@ -2299,7 +2271,6 @@ mod tests {
&stake_account_string, &stake_account_string,
&stake_account_string, &stake_account_string,
"42", "42",
"lamports",
"--withdraw-authority", "--withdraw-authority",
&stake_authority_keypair_file, &stake_authority_keypair_file,
]); ]);
@ -2310,7 +2281,7 @@ mod tests {
command: CliCommand::WithdrawStake { command: CliCommand::WithdrawStake {
stake_account_pubkey, stake_account_pubkey,
destination_account_pubkey: stake_account_pubkey, destination_account_pubkey: stake_account_pubkey,
lamports: 42, lamports: 42_000_000_000,
withdraw_authority: Some( withdraw_authority: Some(
read_keypair_file(&stake_authority_keypair_file) read_keypair_file(&stake_authority_keypair_file)
.unwrap() .unwrap()
@ -2334,7 +2305,6 @@ mod tests {
&stake_account_string, &stake_account_string,
&stake_account_string, &stake_account_string,
"42", "42",
"lamports",
"--withdraw-authority", "--withdraw-authority",
&stake_authority_keypair_file, &stake_authority_keypair_file,
"--blockhash", "--blockhash",
@ -2355,7 +2325,7 @@ mod tests {
command: CliCommand::WithdrawStake { command: CliCommand::WithdrawStake {
stake_account_pubkey, stake_account_pubkey,
destination_account_pubkey: stake_account_pubkey, destination_account_pubkey: stake_account_pubkey,
lamports: 42, lamports: 42_000_000_000,
withdraw_authority: Some( withdraw_authority: Some(
read_keypair_file(&stake_authority_keypair_file) read_keypair_file(&stake_authority_keypair_file)
.unwrap() .unwrap()
@ -2608,7 +2578,6 @@ mod tests {
&keypair_file, &keypair_file,
&split_stake_account_keypair_file, &split_stake_account_keypair_file,
"50", "50",
"lamports",
]); ]);
assert_eq!( assert_eq!(
parse_command(&test_split_stake_account).unwrap(), parse_command(&test_split_stake_account).unwrap(),
@ -2625,7 +2594,7 @@ mod tests {
.unwrap() .unwrap()
.into(), .into(),
seed: None, seed: None,
lamports: 50, lamports: 50_000_000_000,
fee_payer: None, fee_payer: None,
}, },
require_keypair: true require_keypair: true
@ -2654,7 +2623,6 @@ mod tests {
&keypair_file, &keypair_file,
&split_stake_account_keypair_file, &split_stake_account_keypair_file,
"50", "50",
"lamports",
"--stake-authority", "--stake-authority",
&stake_auth_string, &stake_auth_string,
"--blockhash", "--blockhash",
@ -2688,7 +2656,7 @@ mod tests {
.unwrap() .unwrap()
.into(), .into(),
seed: None, seed: None,
lamports: 50, lamports: 50_000_000_000,
fee_payer: Some(nonce_auth_pubkey.into()), fee_payer: Some(nonce_auth_pubkey.into()),
}, },
require_keypair: false, require_keypair: false,

View File

@ -43,7 +43,6 @@ fn test_cli_deploy_program() {
faucet_host: None, faucet_host: None,
faucet_port: faucet_addr.port(), faucet_port: faucet_addr.port(),
lamports: minimum_balance_for_rent_exemption + 1, // min balance for rent exemption + leftover for tx processing lamports: minimum_balance_for_rent_exemption + 1, // min balance for rent exemption + leftover for tx processing
use_lamports_unit: true,
}; };
process_command(&config).unwrap(); process_command(&config).unwrap();

View File

@ -19,7 +19,6 @@ fn test_cli_request_airdrop() {
faucet_host: None, faucet_host: None,
faucet_port: faucet_addr.port(), faucet_port: faucet_addr.port(),
lamports: 50, lamports: 50,
use_lamports_unit: true,
}; };
let sig_response = process_command(&bob_config); let sig_response = process_command(&bob_config);

View File

@ -8,7 +8,7 @@ here=$(dirname "$0")
# shellcheck source=multinode-demo/common.sh # shellcheck source=multinode-demo/common.sh
source "$here"/common.sh source "$here"/common.sh
stake_lamports=1000000000 # default number of lamports to assign as stake (1 SOL) stake_sol=1 # default number of SOL to assign as stake (1 SOL)
url=http://127.0.0.1:8899 # default RPC url url=http://127.0.0.1:8899 # default RPC url
usage() { usage() {
@ -18,7 +18,7 @@ usage() {
fi fi
cat <<EOF cat <<EOF
usage: $0 [OPTIONS] <lamports to stake ($stake_lamports)> usage: $0 [OPTIONS] <SOL to stake ($stake_sol)>
Add stake to a validator Add stake to a validator
@ -75,7 +75,7 @@ if [[ ${#positional_args[@]} -gt 1 ]]; then
usage "$@" usage "$@"
fi fi
if [[ -n ${positional_args[0]} ]]; then if [[ -n ${positional_args[0]} ]]; then
stake_lamports=${positional_args[0]} stake_sol=${positional_args[0]}
fi fi
config_dir="$SOLANA_CONFIG_DIR/validator$label" config_dir="$SOLANA_CONFIG_DIR/validator$label"
@ -93,7 +93,7 @@ if [[ -f $stake_keypair_path ]]; then
fi fi
if ((airdrops_enabled)); then if ((airdrops_enabled)); then
$solana_cli "${common_args[@]}" airdrop "$stake_lamports" lamports $solana_cli "${common_args[@]}" airdrop "$stake_sol"
fi fi
$solana_keygen new --no-passphrase -so "$stake_keypair_path" $solana_keygen new --no-passphrase -so "$stake_keypair_path"
@ -102,7 +102,7 @@ set -x
$solana_cli "${common_args[@]}" \ $solana_cli "${common_args[@]}" \
vote-account "$vote_keypair_path" vote-account "$vote_keypair_path"
$solana_cli "${common_args[@]}" \ $solana_cli "${common_args[@]}" \
create-stake-account "$stake_keypair_path" "$stake_lamports" lamports create-stake-account "$stake_keypair_path" "$stake_sol"
$solana_cli "${common_args[@]}" \ $solana_cli "${common_args[@]}" \
delegate-stake $maybe_force "$stake_keypair_path" "$vote_keypair_path" delegate-stake $maybe_force "$stake_keypair_path" "$vote_keypair_path"
$solana_cli "${common_args[@]}" stakes "$stake_keypair_path" $solana_cli "${common_args[@]}" stakes "$stake_keypair_path"

View File

@ -8,7 +8,7 @@ source "$here"/common.sh
args=() args=()
airdrops_enabled=1 airdrops_enabled=1
node_lamports=500000000000 # 500 SOL: number of lamports to airdrop the node for transaction fees and vote account rent exemption (ignored if airdrops_enabled=0) node_sol=500 # 500 SOL: number of SOL to airdrop the node for transaction fees and vote account rent exemption (ignored if airdrops_enabled=0)
label= label=
identity_keypair_path= identity_keypair_path=
voting_keypair_path= voting_keypair_path=
@ -33,7 +33,7 @@ OPTIONS:
--init-complete-file FILE - create this file, if it doesn't already exist, once node initialization is complete --init-complete-file FILE - create this file, if it doesn't already exist, once node initialization is complete
--label LABEL - Append the given label to the configuration files, useful when running --label LABEL - Append the given label to the configuration files, useful when running
multiple validators in the same workspace multiple validators in the same workspace
--node-lamports LAMPORTS - Number of lamports this node has been funded from the genesis config (default: $node_lamports) --node-sol SOL - Number of SOL this node has been funded from the genesis config (default: $node_sol)
--no-voting - start node without vote signer --no-voting - start node without vote signer
--rpc-port port - custom RPC port for this node --rpc-port port - custom RPC port for this node
--no-restart - do not restart the node if it exits --no-restart - do not restart the node if it exits
@ -53,8 +53,8 @@ while [[ -n $1 ]]; do
elif [[ $1 = --no-restart ]]; then elif [[ $1 = --no-restart ]]; then
no_restart=1 no_restart=1
shift shift
elif [[ $1 = --node-lamports ]]; then elif [[ $1 = --node-sol ]]; then
node_lamports="$2" node_sol="$2"
shift 2 shift 2
elif [[ $1 = --no-airdrop ]]; then elif [[ $1 = --no-airdrop ]]; then
airdrops_enabled=0 airdrops_enabled=0
@ -251,12 +251,12 @@ wallet() {
} }
setup_validator_accounts() { setup_validator_accounts() {
declare node_lamports=$1 declare node_sol=$1
if ! wallet vote-account "$voting_keypair_path"; then if ! wallet vote-account "$voting_keypair_path"; then
if ((airdrops_enabled)); then if ((airdrops_enabled)); then
echo "Adding $node_lamports to validator identity account:" echo "Adding $node_sol to validator identity account:"
wallet airdrop "$node_lamports" lamports || return $? wallet airdrop "$node_sol" || return $?
fi fi
echo "Creating validator vote account" echo "Creating validator vote account"
@ -271,7 +271,7 @@ setup_validator_accounts() {
echo "Validator storage account configured" echo "Validator storage account configured"
echo "Validator identity account balance:" echo "Validator identity account balance:"
wallet balance --lamports || return $? wallet balance || return $?
return 0 return 0
} }
@ -282,7 +282,7 @@ rpc_url=$($solana_gossip rpc-url --entrypoint "$gossip_entrypoint" --any)
[[ -r "$voting_keypair_path" ]] || $solana_keygen new --no-passphrase -so "$voting_keypair_path" [[ -r "$voting_keypair_path" ]] || $solana_keygen new --no-passphrase -so "$voting_keypair_path"
[[ -r "$storage_keypair_path" ]] || $solana_keygen new --no-passphrase -so "$storage_keypair_path" [[ -r "$storage_keypair_path" ]] || $solana_keygen new --no-passphrase -so "$storage_keypair_path"
setup_validator_accounts "$node_lamports" setup_validator_accounts "$node_sol"
while true; do while true; do
echo "$PS4$program ${args[*]}" echo "$PS4$program ${args[*]}"

View File

@ -75,7 +75,7 @@ set -x
balance=$(solana $maybeKeypair --url "$URL" balance --lamports) balance=$(solana $maybeKeypair --url "$URL" balance --lamports)
if [[ $balance = "0 lamports" ]]; then if [[ $balance = "0 lamports" ]]; then
# shellcheck disable=SC2086 # Don't want to double quote $maybeKeypair # shellcheck disable=SC2086 # Don't want to double quote $maybeKeypair
solana $maybeKeypair --url "$URL" airdrop 42 lamports solana $maybeKeypair --url "$URL" airdrop 0.000000042
fi fi
# shellcheck disable=SC2086 # Don't want to double quote $maybeKeypair # shellcheck disable=SC2086 # Don't want to double quote $maybeKeypair