mirror of
https://github.com/status-im/status-go.git
synced 2025-01-10 14:47:06 +00:00
c1c7d2dbf6
`CreateAccountFromMnemonic` function renamed to `createAccountFromMnemonicAndDeriveAccountsForPaths` and extended in a way that it is able to derive accounts from passed mnemonic for the given paths, if paths is empty only an account from the given mnemonic will be generated. This endpoint doesn't store anything anywhere.
258 lines
7.4 KiB
Go
258 lines
7.4 KiB
Go
package statusgo
|
|
|
|
import (
|
|
"encoding/json"
|
|
"strings"
|
|
)
|
|
|
|
// MultiAccountGenerateParams are the params sent to MultiAccountGenerate.
|
|
type MultiAccountGenerateParams struct {
|
|
N int `json:"n"`
|
|
MnemonicPhraseLength int `json:"mnemonicPhraseLength"`
|
|
Bip39Passphrase string `json:"bip39Passphrase"`
|
|
}
|
|
|
|
// MultiAccountGenerateAndDeriveAddressesParams are the params sent to MultiAccountGenerateAndDeriveAddresses.
|
|
type MultiAccountGenerateAndDeriveAddressesParams struct {
|
|
MultiAccountGenerateParams
|
|
Paths []string `json:"paths"`
|
|
}
|
|
|
|
// MultiAccountDeriveAddressesParams are the params sent to MultiAccountDeriveAddresses.
|
|
type MultiAccountDeriveAddressesParams struct {
|
|
AccountID string `json:"accountID"`
|
|
Paths []string `json:"paths"`
|
|
}
|
|
|
|
// MultiAccountStoreDerivedAccountsParams are the params sent to MultiAccountStoreDerivedAccounts.
|
|
type MultiAccountStoreDerivedAccountsParams struct {
|
|
MultiAccountDeriveAddressesParams
|
|
Password string `json:"password"`
|
|
}
|
|
|
|
// MultiAccountStoreAccountParams are the params sent to MultiAccountStoreAccount.
|
|
type MultiAccountStoreAccountParams struct {
|
|
AccountID string `json:"accountID"`
|
|
Password string `json:"password"`
|
|
}
|
|
|
|
// MultiAccountImportPrivateKeyParams are the params sent to MultiAccountImportPrivateKey.
|
|
type MultiAccountImportPrivateKeyParams struct {
|
|
PrivateKey string `json:"privateKey"`
|
|
}
|
|
|
|
// MultiAccountLoadAccountParams are the params sent to MultiAccountLoadAccount.
|
|
type MultiAccountLoadAccountParams struct {
|
|
Address string `json:"address"`
|
|
Password string `json:"password"`
|
|
}
|
|
|
|
// MultiAccountImportMnemonicParams are the params sent to MultiAccountImportMnemonic.
|
|
type MultiAccountImportMnemonicParams struct {
|
|
MnemonicPhrase string `json:"mnemonicPhrase"`
|
|
Bip39Passphrase string `json:"Bip39Passphrase"`
|
|
Paths []string `json:"paths"`
|
|
}
|
|
|
|
// MultiAccountGenerate generates account in memory without storing them.
|
|
func MultiAccountGenerate(paramsJSON string) string {
|
|
var p MultiAccountGenerateParams
|
|
|
|
if err := json.Unmarshal([]byte(paramsJSON), &p); err != nil {
|
|
return makeJSONResponse(err)
|
|
}
|
|
|
|
resp, err := statusBackend.AccountManager().AccountsGenerator().Generate(p.MnemonicPhraseLength, p.N, p.Bip39Passphrase)
|
|
if err != nil {
|
|
return makeJSONResponse(err)
|
|
}
|
|
|
|
out, err := json.Marshal(resp)
|
|
if err != nil {
|
|
return makeJSONResponse(err)
|
|
}
|
|
|
|
return string(out)
|
|
}
|
|
|
|
// MultiAccountGenerateAndDeriveAddresses combines Generate and DeriveAddresses in one call.
|
|
func MultiAccountGenerateAndDeriveAddresses(paramsJSON string) string {
|
|
var p MultiAccountGenerateAndDeriveAddressesParams
|
|
|
|
if err := json.Unmarshal([]byte(paramsJSON), &p); err != nil {
|
|
return makeJSONResponse(err)
|
|
}
|
|
|
|
resp, err := statusBackend.AccountManager().AccountsGenerator().GenerateAndDeriveAddresses(p.MnemonicPhraseLength, p.N, p.Bip39Passphrase, p.Paths)
|
|
if err != nil {
|
|
return makeJSONResponse(err)
|
|
}
|
|
|
|
out, err := json.Marshal(resp)
|
|
if err != nil {
|
|
return makeJSONResponse(err)
|
|
}
|
|
|
|
return string(out)
|
|
}
|
|
|
|
// MultiAccountDeriveAddresses derive addresses from an account selected by ID, without storing them.
|
|
func MultiAccountDeriveAddresses(paramsJSON string) string {
|
|
var p MultiAccountDeriveAddressesParams
|
|
|
|
if err := json.Unmarshal([]byte(paramsJSON), &p); err != nil {
|
|
return makeJSONResponse(err)
|
|
}
|
|
|
|
resp, err := statusBackend.AccountManager().AccountsGenerator().DeriveAddresses(p.AccountID, p.Paths)
|
|
if err != nil {
|
|
return makeJSONResponse(err)
|
|
}
|
|
|
|
out, err := json.Marshal(resp)
|
|
if err != nil {
|
|
return makeJSONResponse(err)
|
|
}
|
|
|
|
return string(out)
|
|
}
|
|
|
|
// MultiAccountStoreDerivedAccounts derive accounts from the specified key and store them encrypted with the specified password.
|
|
func MultiAccountStoreDerivedAccounts(paramsJSON string) string {
|
|
var p MultiAccountStoreDerivedAccountsParams
|
|
|
|
if err := json.Unmarshal([]byte(paramsJSON), &p); err != nil {
|
|
return makeJSONResponse(err)
|
|
}
|
|
|
|
resp, err := statusBackend.AccountManager().AccountsGenerator().StoreDerivedAccounts(p.AccountID, p.Password, p.Paths)
|
|
if err != nil {
|
|
return makeJSONResponse(err)
|
|
}
|
|
|
|
out, err := json.Marshal(resp)
|
|
if err != nil {
|
|
return makeJSONResponse(err)
|
|
}
|
|
|
|
return string(out)
|
|
}
|
|
|
|
// MultiAccountImportPrivateKey imports a raw private key without storing it.
|
|
func MultiAccountImportPrivateKey(paramsJSON string) string {
|
|
var p MultiAccountImportPrivateKeyParams
|
|
|
|
if err := json.Unmarshal([]byte(paramsJSON), &p); err != nil {
|
|
return makeJSONResponse(err)
|
|
}
|
|
|
|
resp, err := statusBackend.AccountManager().AccountsGenerator().ImportPrivateKey(p.PrivateKey)
|
|
if err != nil {
|
|
return makeJSONResponse(err)
|
|
}
|
|
|
|
out, err := json.Marshal(resp)
|
|
if err != nil {
|
|
return makeJSONResponse(err)
|
|
}
|
|
|
|
return string(out)
|
|
}
|
|
|
|
// CreateAccountFromMnemonicAndDeriveAccountsForPaths returns an account derived from the mnemonic phrase and the Bip39Passphrase
|
|
// and generate derived accounts for the list of paths without storing it
|
|
func CreateAccountFromMnemonicAndDeriveAccountsForPaths(paramsJSON string) string {
|
|
var p MultiAccountImportMnemonicParams
|
|
|
|
if err := json.Unmarshal([]byte(paramsJSON), &p); err != nil {
|
|
return makeJSONResponse(err)
|
|
}
|
|
|
|
// remove any duplicate whitespaces
|
|
mnemonicPhraseNoExtraSpaces := strings.Join(strings.Fields(p.MnemonicPhrase), " ")
|
|
|
|
resp, err := statusBackend.AccountManager().AccountsGenerator().CreateAccountFromMnemonicAndDeriveAccountsForPaths(mnemonicPhraseNoExtraSpaces, p.Bip39Passphrase, p.Paths)
|
|
if err != nil {
|
|
return makeJSONResponse(err)
|
|
}
|
|
|
|
out, err := json.Marshal(resp)
|
|
if err != nil {
|
|
return makeJSONResponse(err)
|
|
}
|
|
|
|
return string(out)
|
|
}
|
|
|
|
// MultiAccountImportMnemonic imports an account derived from the mnemonic phrase and the Bip39Passphrase storing it.
|
|
func MultiAccountImportMnemonic(paramsJSON string) string {
|
|
var p MultiAccountImportMnemonicParams
|
|
|
|
if err := json.Unmarshal([]byte(paramsJSON), &p); err != nil {
|
|
return makeJSONResponse(err)
|
|
}
|
|
|
|
// remove any duplicate whitespaces
|
|
mnemonicPhraseNoExtraSpaces := strings.Join(strings.Fields(p.MnemonicPhrase), " ")
|
|
|
|
resp, err := statusBackend.AccountManager().AccountsGenerator().ImportMnemonic(mnemonicPhraseNoExtraSpaces, p.Bip39Passphrase)
|
|
if err != nil {
|
|
return makeJSONResponse(err)
|
|
}
|
|
|
|
out, err := json.Marshal(resp)
|
|
if err != nil {
|
|
return makeJSONResponse(err)
|
|
}
|
|
|
|
return string(out)
|
|
}
|
|
|
|
// MultiAccountStoreAccount stores the select account.
|
|
func MultiAccountStoreAccount(paramsJSON string) string {
|
|
var p MultiAccountStoreAccountParams
|
|
|
|
if err := json.Unmarshal([]byte(paramsJSON), &p); err != nil {
|
|
return makeJSONResponse(err)
|
|
}
|
|
|
|
resp, err := statusBackend.AccountManager().AccountsGenerator().StoreAccount(p.AccountID, p.Password)
|
|
if err != nil {
|
|
return makeJSONResponse(err)
|
|
}
|
|
|
|
out, err := json.Marshal(resp)
|
|
if err != nil {
|
|
return makeJSONResponse(err)
|
|
}
|
|
|
|
return string(out)
|
|
}
|
|
|
|
// MultiAccountLoadAccount loads in memory the account specified by address unlocking it with password.
|
|
func MultiAccountLoadAccount(paramsJSON string) string {
|
|
var p MultiAccountLoadAccountParams
|
|
|
|
if err := json.Unmarshal([]byte(paramsJSON), &p); err != nil {
|
|
return makeJSONResponse(err)
|
|
}
|
|
|
|
resp, err := statusBackend.AccountManager().AccountsGenerator().LoadAccount(p.Address, p.Password)
|
|
if err != nil {
|
|
return makeJSONResponse(err)
|
|
}
|
|
|
|
out, err := json.Marshal(resp)
|
|
if err != nil {
|
|
return makeJSONResponse(err)
|
|
}
|
|
|
|
return string(out)
|
|
}
|
|
|
|
// MultiAccountReset remove all the multi-account keys from memory.
|
|
func MultiAccountReset() string {
|
|
statusBackend.AccountManager().AccountsGenerator().Reset()
|
|
return makeJSONResponse(nil)
|
|
}
|