mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-01-09 15:37:56 -05:00
Accounts V2: Wallet Recover (#6661)
* Implement derived wallet recover * Fix log * Fix tests * Comments * Merge branch 'master' of github.com:prysmaticlabs/prysm into derived-recover * Remove log * Comments * Fix fatal * add comment * Merge refs/heads/master into derived-recover * Merge refs/heads/master into derived-recover * Merge refs/heads/master into derived-recover * Merge refs/heads/master into derived-recover
This commit is contained in:
@@ -28,6 +28,7 @@ import (
|
||||
"github.com/prysmaticlabs/prysm/validator/accounts/v2/iface"
|
||||
v2keymanager "github.com/prysmaticlabs/prysm/validator/keymanager/v2"
|
||||
"github.com/sirupsen/logrus"
|
||||
"github.com/tyler-smith/go-bip39"
|
||||
util "github.com/wealdtech/go-eth2-util"
|
||||
keystorev4 "github.com/wealdtech/go-eth2-wallet-encryptor-keystorev4"
|
||||
)
|
||||
@@ -203,6 +204,31 @@ func InitializeWalletSeedFile(ctx context.Context, password string, skipMnemonic
|
||||
}, nil
|
||||
}
|
||||
|
||||
// SeedFileFromMnemonic uses the provided mnemonic seed phrase to generate the
|
||||
// appropriate seed file for recovering a derived wallets.
|
||||
func SeedFileFromMnemonic(ctx context.Context, mnemonic string, password string) (*SeedConfig, error) {
|
||||
walletSeed, err := bip39.MnemonicToByteArray(mnemonic)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "could not convert mnemonic to wallet seed")
|
||||
}
|
||||
encryptor := keystorev4.New()
|
||||
cryptoFields, err := encryptor.Encrypt(walletSeed, []byte(password))
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "could not encrypt seed phrase into keystore")
|
||||
}
|
||||
id, err := uuid.NewRandom()
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "could not generate unique UUID")
|
||||
}
|
||||
return &SeedConfig{
|
||||
Crypto: cryptoFields,
|
||||
ID: id.String(),
|
||||
NextAccount: 0,
|
||||
Version: encryptor.Version(),
|
||||
Name: encryptor.Name(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// MarshalEncryptedSeedFile json encodes the seed configuration for a derived keymanager.
|
||||
func MarshalEncryptedSeedFile(ctx context.Context, seedCfg *SeedConfig) ([]byte, error) {
|
||||
return json.MarshalIndent(seedCfg, "", "\t")
|
||||
|
||||
Reference in New Issue
Block a user