github.com/status-im/status-go@v1.1.0/account/keystore_geth.go (about) 1 package account 2 3 import ( 4 "os" 5 6 "github.com/ethereum/go-ethereum/accounts" 7 "github.com/ethereum/go-ethereum/accounts/keystore" 8 9 gethbridge "github.com/status-im/status-go/eth-node/bridge/geth" 10 "github.com/status-im/status-go/eth-node/types" 11 ) 12 13 // makeAccountManager creates ethereum accounts.Manager with single disk backend and lightweight kdf. 14 // If keydir is empty new temporary directory with go-ethereum-keystore will be intialized. 15 func makeAccountManager(keydir string) (manager *accounts.Manager, err error) { 16 if keydir == "" { 17 // There is no datadir. 18 keydir, err = os.MkdirTemp("", "go-ethereum-keystore") 19 } 20 if err != nil { 21 return nil, err 22 } 23 if err := os.MkdirAll(keydir, 0700); err != nil { 24 return nil, err 25 } 26 config := accounts.Config{InsecureUnlockAllowed: false} 27 return accounts.NewManager(&config, keystore.NewKeyStore(keydir, keystore.LightScryptN, keystore.LightScryptP)), nil 28 } 29 30 func makeKeyStore(manager *accounts.Manager) (types.KeyStore, error) { 31 backends := manager.Backends(keystore.KeyStoreType) 32 if len(backends) == 0 { 33 return nil, ErrAccountKeyStoreMissing 34 } 35 keyStore, ok := backends[0].(*keystore.KeyStore) 36 if !ok { 37 return nil, ErrAccountKeyStoreMissing 38 } 39 40 return gethbridge.WrapKeyStore(keyStore), nil 41 }