mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Add multi-vault planning doc
This commit is contained in:
parent
0182f8a4e9
commit
dec282f4fd
175
docs/multi_vault_planning.md
Normal file
175
docs/multi_vault_planning.md
Normal file
@ -0,0 +1,175 @@
|
||||
https://hackmd.io/JwIwDMDGKQZgtAFgKZjEgbARhPAhgKxZbwAcA7LAWOQCaKEgFA==?edit
|
||||
|
||||
Subscribablez(initState)
|
||||
.subscribe()
|
||||
.emitUpdate(newState)
|
||||
//.getState()
|
||||
|
||||
|
||||
var initState = fromDisk()
|
||||
ReduxStore(reducer, initState)
|
||||
.reduce(action) -> .emitUpdate()
|
||||
|
||||
ReduxStore.subscribe(toDisk)
|
||||
|
||||
|
||||
### KeyChainManager / idStore 2.0 (maybe just in MetaMaskController)
|
||||
keychains: []
|
||||
getAllAccounts(cb)
|
||||
getAllKeychainViewStates(cb) -> returns [ KeyChainViewState]
|
||||
|
||||
#### Old idStore external methods, for feature parity:
|
||||
|
||||
- init(configManager)
|
||||
- setStore(ethStore)
|
||||
- getState()
|
||||
- getSelectedAddres()
|
||||
- setSelectedAddress()
|
||||
- createNewVault()
|
||||
- recoverFromSeed()
|
||||
- submitPassword()
|
||||
- approveTransaction()
|
||||
- cancelTransaction()
|
||||
- addUnconfirmedMessage(msgParams, cb)
|
||||
- signMessage()
|
||||
- cancelMessage()
|
||||
- setLocked()
|
||||
- clearSeedWordCache()
|
||||
- exportAccount()
|
||||
- revealAccount()
|
||||
- saveAccountLabel()
|
||||
- tryPassword()
|
||||
- recoverSeed()
|
||||
- getNetwork()
|
||||
|
||||
##### Of those methods
|
||||
|
||||
Where they should end up:
|
||||
|
||||
##### MetaMaskController
|
||||
|
||||
- getNetwork()
|
||||
|
||||
##### KeyChainManager
|
||||
|
||||
- init(configManager)
|
||||
- setStore(ethStore)
|
||||
- getState() // Deprecate for unidirectional flow
|
||||
- on('update', cb)
|
||||
- createNewVault(password)
|
||||
- getSelectedAddres()
|
||||
- setSelectedAddress()
|
||||
- submitPassword()
|
||||
- tryPassword()
|
||||
- approveTransaction()
|
||||
- cancelTransaction()
|
||||
- signMessage()
|
||||
- cancelMessage()
|
||||
- setLocked()
|
||||
- exportAccount()
|
||||
|
||||
##### Bip44 KeyChain
|
||||
|
||||
- getState() // Deprecate for unidirectional flow
|
||||
- on('update', cb)
|
||||
|
||||
If we adopt a ReactStore style unidirectional action dispatching data flow, these methods will be unified under a `dispatch` method, and rather than having a cb will emit an update to the UI:
|
||||
|
||||
- createNewKeyChain(entropy)
|
||||
- recoverFromSeed()
|
||||
- approveTransaction()
|
||||
- signMessage()
|
||||
- clearSeedWordCache()
|
||||
- exportAccount()
|
||||
- revealAccount()
|
||||
- saveAccountLabel()
|
||||
- recoverSeed()
|
||||
|
||||
### KeyChain (ReduxStore?)
|
||||
// attributes
|
||||
@name
|
||||
|
||||
signTx(txParams, cb)
|
||||
signMsg(msg, cb)
|
||||
|
||||
getAddressList(cb)
|
||||
|
||||
getViewState(cb) -> returns KeyChainViewState
|
||||
|
||||
serialize(cb) -> obj
|
||||
deserialize(obj)
|
||||
|
||||
### KeyChainViewState
|
||||
// The serialized, renderable keychain data
|
||||
accountList: [],
|
||||
typeName: 'uPort',
|
||||
iconAddress: 'uport.gif',
|
||||
internal: {} // Subclass-defined metadata
|
||||
|
||||
### KeyChainReactComponent
|
||||
// takes a KeyChainViewState
|
||||
|
||||
// Subclasses of this:
|
||||
- KeyChainListItemComponent
|
||||
- KeyChainInitComponent - Maybe part of the List Item
|
||||
- KeyChainAccountHeaderComponent
|
||||
- KeyChainConfirmationComponent
|
||||
// Account list item, tx confirmation extra data (like a QR code),
|
||||
// Maybe an options screen, init screen,
|
||||
|
||||
how to send actions?
|
||||
emitAction(keychains.<id>.didInit)
|
||||
|
||||
|
||||
gimmeRemoteKeychain((err, remoteKeychain)=>
|
||||
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
KeyChainReactComponent({
|
||||
keychain
|
||||
})
|
||||
|
||||
Keychain:
|
||||
methods:{},
|
||||
cachedAccountList: [],
|
||||
name: '',
|
||||
|
||||
|
||||
CoinbaseKeychain
|
||||
getAccountList
|
||||
|
||||
|
||||
CoinbaseKeychainComponent
|
||||
isLoading = true
|
||||
keychain.getAccountList(()=>{
|
||||
isLoading=false
|
||||
accountList=accounts
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
KeyChainViewState {
|
||||
attributes: {
|
||||
//mandatory:
|
||||
accountList: [],
|
||||
typeName: 'uPort',
|
||||
iconAddress: 'uport.gif',
|
||||
|
||||
internal: {
|
||||
// keychain-specific metadata
|
||||
proxyAddresses: {
|
||||
0xReal: '0xProxy'
|
||||
}
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
// arbitrary, internal
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user