This repository was archived by the owner on Jan 22, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 4.9k
CLI: collect and deduplicate signers #8398
Merged
CriesofCarrots
merged 14 commits into
solana-labs:master
from
CriesofCarrots:cli-simplify-signers
Feb 25, 2020
Merged
CLI: collect and deduplicate signers #8398
CriesofCarrots
merged 14 commits into
solana-labs:master
from
CriesofCarrots:cli-simplify-signers
Feb 25, 2020
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
72a05ca
to
202300a
Compare
Codecov Report
@@ Coverage Diff @@
## master #8398 +/- ##
========================================
+ Coverage 80.2% 80.2% +<.1%
========================================
Files 253 253
Lines 55616 55951 +335
========================================
+ Hits 44640 44928 +288
- Misses 10976 11023 +47 |
049753e
to
67d7c7c
Compare
t-nelson
reviewed
Feb 22, 2020
t-nelson
reviewed
Feb 22, 2020
t-nelson
reviewed
Feb 22, 2020
t-nelson
reviewed
Feb 22, 2020
t-nelson
reviewed
Feb 22, 2020
t-nelson
reviewed
Feb 22, 2020
t-nelson
previously approved these changes
Feb 22, 2020
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice work! I like the direction overall
Aside from the few nits, my only concern is that managing the indices into the signers
Vec
feels brittle. I don't have a better idea off-hand, that isn't more cumbersome, so won't hold this up on that account. Perhaps another reviewer will have a suggestion
67d7c7c
to
a0ff77d
Compare
Pull request has been modified.
ec4ec5c
to
8792ece
Compare
8792ece
to
404e662
Compare
t-nelson
reviewed
Feb 24, 2020
mergify bot
pushed a commit
that referenced
this pull request
Feb 25, 2020
* Rename (keypair util is not a thing) * Add method to generate_unique_signers * Cli: refactor signer handling and remote-wallet init * Fixup unit tests * Fixup intergation tests * Update keypair path print statement * Remove &None * Use deterministic key in test * Retain storage-account as index * Make signer index-handling less brittle * Cache pubkey on RemoteKeypair::new * Make signer_of consistent + return pubkey * Remove &matches double references * Nonce authorities need special handling (cherry picked from commit 12a9b5f)
solana-grimes
pushed a commit
that referenced
this pull request
Feb 25, 2020
CriesofCarrots
added a commit
to CriesofCarrots/solana
that referenced
this pull request
Feb 26, 2020
* Rename (keypair util is not a thing) * Add method to generate_unique_signers * Cli: refactor signer handling and remote-wallet init * Fixup unit tests * Fixup intergation tests * Update keypair path print statement * Remove &None * Use deterministic key in test * Retain storage-account as index * Make signer index-handling less brittle * Cache pubkey on RemoteKeypair::new * Make signer_of consistent + return pubkey * Remove &matches double references * Nonce authorities need special handling
CriesofCarrots
added a commit
that referenced
this pull request
Feb 27, 2020
…#8487) * CLI: dynamic signing reboot (#8384) * Add keypair_util_from_path helper * Cli: impl config.keypair as a trait object * SDK: Add Debug and PartialEq for dyn Signer * ClapUtils: Arg parsing from pubkey+signers to Presigner * Impl Signers for &dyn Signer collections * CLI: Add helper for getting signers from args * CLI: Replace SigningAuthority with Signer trait-objs * CLI: Drop disused signers command field * CLI: Drop redundant tests * Add clap validator that handles all current signer types * clap_utils: Factor Presigner resolution to helper * SDK: `From` for boxing Signer implementors to trait objects * SDK: Derive `Clone` for `Presigner` * Remove panic * Cli: dedup signers in transfer for remote-wallet ergonomics * Update docs vis-a-vis ASK changes * Cli: update transaction types to use new dynamic-signer methods * CLI: Fix tests No. 1 what to do about write_keypair outstanding * Work around `CliConfig`'s signer not necessarily being a `Keypair` * CLI: Fix tests No. 2 * Remove unused arg * Remove unused methods * Move offline arg constants upstream * Make cli signing fallible Co-authored-by: Trent Nelson <[email protected]> * Reinstate `create-stale-account` w/ seed test (#8401) automerge * CLI: collect and deduplicate signers (#8398) * Rename (keypair util is not a thing) * Add method to generate_unique_signers * Cli: refactor signer handling and remote-wallet init * Fixup unit tests * Fixup intergation tests * Update keypair path print statement * Remove &None * Use deterministic key in test * Retain storage-account as index * Make signer index-handling less brittle * Cache pubkey on RemoteKeypair::new * Make signer_of consistent + return pubkey * Remove &matches double references * Nonce authorities need special handling * Make solana root key accessible on Ledger (#8421) * Use 44/501 key as ledger id * Add error codes * Ledger key path rework (#8453) automerge * Ledger hardware wallet docs (#8472) * Update protocol documentation * Correct app-version command const * Rough initial Ledger docs * Add more docs * Cleanup * Add remote-wallet to docs TOC Co-authored-by: Greg Fitzgerald <[email protected]> * Add flag to confirm key on device Co-authored-by: Trent Nelson <[email protected]> Co-authored-by: Greg Fitzgerald <[email protected]>
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
Two problems involving CLI signers:
Hardware wallet users may want to sign transactions with multiple different keys. One appealing use case, for example, would be to make a transfer from one account, but pay the fees from another.
Currently, the CLI only supports using one RemoteKeypair to sign a CLI command. This is because the CLI tries to reinitialize the remote-wallet-manager on every RemoteKeypair parse, running into the existing handle on repeated attempts.
The CLI currently signs each transaction with every signer collected during the parse-command step. These Signer collections may contain duplicate keys when the same key is being used for multiple signing roles (for instance, when using the default signer for everything). The CLI happily signs the transaction repeatedly for each dupe. In most cases, this doesn't present as anything more than a performance hit. But in the case of remote wallets -- which require manual button-pushing for each signature -- it is very disruptive.
Summary of Changes
process_
methods. Identify various signing roles by index, rather than copying signers willy-nilly.Most of the churn in this PR is updating tests to reflect: additional arg expected in
parse_command()
, and changes to the CliConfig and CliCommandInfo structs. The meat of this PR is in 86a9365 and cli/src/cli.rs in 9f431c0.