-
Notifications
You must be signed in to change notification settings - Fork 375
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
JavaScript native keystore #7063
Comments
Seems like the ideal scenario here is something Valora can use (ReactNative compatible), the browser can use (LocalStorage / IndexedDB compatibility) and something the CLI can use (file system access). Where does Metamask store private keys?Metamask uses a library called LocalForage, that acts as a thin wrapper around LocalStorage and IndexedDB. AFAICT metamask simply stores private keys with that, encrypted with a password / pin. |
Added old description for posterity
|
### Description - Implements most basic keystore functionality (encrypt, decrypt, change password) base class (+ file system for data persistence), based on `ethereumjs-wallet` - `Keystore` abstraction should make it fairly straightforward to add additional IO formats (browser storage, DB, however valora wants to do this...) - `KeystoreWalletWrapper` is a bare bones wrapper of a file keystore + the `LocalWallet` -- I expect this to change (+ maybe move into its own directory), but would wait until implementing attestation service/CLI-relevant changes before adding more here, in order to see what's necessary/makes sense ### Tested - Unit tests - Tested instantiating, signing, sending txs via the `KeystoreWalletWrapper` + keystore files - Tested that keystore files created by geth can be copied into this keystore directory and decrypted with the same passphrase; same with the reverse (i.e. keystore files created + encrypted with the `FileKeystore` can be copied to the geth keystore directory, decrypted, and used to send txs) ### Related issues - #7063 - related autogenerated docs (split PR so as to not clutter this one) [old file structure PR](#8160), [docs PR new file structure](#8185) ### Backwards compatibility New module, no changes to existing wallets or tools. ### Remaining TODOs - [later PR] modify KeystoreWalletWrapper as makes sense with future use cases
### Description - Implements most basic keystore functionality (encrypt, decrypt, change password) base class (+ file system for data persistence), based on `ethereumjs-wallet` - `Keystore` abstraction should make it fairly straightforward to add additional IO formats (browser storage, DB, however valora wants to do this...) - `KeystoreWalletWrapper` is a bare bones wrapper of a file keystore + the `LocalWallet` -- I expect this to change (+ maybe move into its own directory), but would wait until implementing attestation service/CLI-relevant changes before adding more here, in order to see what's necessary/makes sense ### Tested - Unit tests - Tested instantiating, signing, sending txs via the `KeystoreWalletWrapper` + keystore files - Tested that keystore files created by geth can be copied into this keystore directory and decrypted with the same passphrase; same with the reverse (i.e. keystore files created + encrypted with the `FileKeystore` can be copied to the geth keystore directory, decrypted, and used to send txs) ### Related issues - #7063 - related autogenerated docs (split PR so as to not clutter this one) [old file structure PR](#8160), [docs PR new file structure](#8185) ### Backwards compatibility New module, no changes to existing wallets or tools. ### Remaining TODOs - [later PR] modify KeystoreWalletWrapper as makes sense with future use cases
Quick Implementation: I see this as basically a state management and persistence library that wraps the LocalWallet functionality already in ContractKit, ideally providing support for each environment we want to run it in. LocalWallet keeps the private key in memory and has support for all operations (sign, decrypt, computeSharedSecret, etc) that we're currently thinking about. In an effort to move away from Geth signing data and controlling keys we just need more people to use this LocalWallet safely.
Could also explore
KeystoreManager
- Basically an API for getting (and decrypting) the private key in a way all the consumers can implement.Use Cases
Thoughts on Clef:
The text was updated successfully, but these errors were encountered: