status-im/status-go

View on GitHub
account/keystore_geth.go

Summary

Maintainability
A
0 mins
Test Coverage
D
65%
package account

import (
    "os"

    "github.com/ethereum/go-ethereum/accounts"
    "github.com/ethereum/go-ethereum/accounts/keystore"

    gethbridge "github.com/status-im/status-go/eth-node/bridge/geth"
    "github.com/status-im/status-go/eth-node/types"
)

// makeAccountManager creates ethereum accounts.Manager with single disk backend and lightweight kdf.
// If keydir is empty new temporary directory with go-ethereum-keystore will be intialized.
func makeAccountManager(keydir string) (manager *accounts.Manager, err error) {
    if keydir == "" {
        // There is no datadir.
        keydir, err = os.MkdirTemp("", "go-ethereum-keystore")
    }
    if err != nil {
        return nil, err
    }
    if err := os.MkdirAll(keydir, 0700); err != nil {
        return nil, err
    }
    config := accounts.Config{InsecureUnlockAllowed: false}
    return accounts.NewManager(&config, keystore.NewKeyStore(keydir, keystore.LightScryptN, keystore.LightScryptP)), nil
}

func makeKeyStore(manager *accounts.Manager) (types.KeyStore, error) {
    backends := manager.Backends(keystore.KeyStoreType)
    if len(backends) == 0 {
        return nil, ErrAccountKeyStoreMissing
    }
    keyStore, ok := backends[0].(*keystore.KeyStore)
    if !ok {
        return nil, ErrAccountKeyStoreMissing
    }

    return gethbridge.WrapKeyStore(keyStore), nil
}