diff options
author | Felix Lange <fjl@twurst.com> | 2016-04-30 05:09:37 +0800 |
---|---|---|
committer | Felix Lange <fjl@twurst.com> | 2016-04-30 05:09:37 +0800 |
commit | 1c20313a6a1a35d5f540f878e7c263327c2ccfc1 (patch) | |
tree | 4835cd7f3085edb6c6ed41b62edf15be9f9e42dc | |
parent | cfa999f006c30613aa4acce42d8edad056f39c10 (diff) | |
parent | 572da73d4d475db0443f457d9383a3d513f189ee (diff) | |
download | go-tangerine-1c20313a6a1a35d5f540f878e7c263327c2ccfc1.tar.gz go-tangerine-1c20313a6a1a35d5f540f878e7c263327c2ccfc1.tar.zst go-tangerine-1c20313a6a1a35d5f540f878e7c263327c2ccfc1.zip |
Merge pull request #2493 from almindor/develop
eth: add personal_importRawKey
-rw-r--r-- | accounts/account_manager.go | 7 | ||||
-rw-r--r-- | eth/api.go | 11 | ||||
-rw-r--r-- | internal/web3ext/web3ext.go | 27 |
3 files changed, 38 insertions, 7 deletions
diff --git a/accounts/account_manager.go b/accounts/account_manager.go index 56499672e..3afadf6b2 100644 --- a/accounts/account_manager.go +++ b/accounts/account_manager.go @@ -284,7 +284,12 @@ func (am *Manager) Import(keyJSON []byte, passphrase, newPassphrase string) (Acc // ImportECDSA stores the given key into the key directory, encrypting it with the passphrase. func (am *Manager) ImportECDSA(priv *ecdsa.PrivateKey, passphrase string) (Account, error) { - return am.importKey(newKeyFromECDSA(priv), passphrase) + key := newKeyFromECDSA(priv) + if am.cache.hasAddress(key.Address) { + return Account{}, fmt.Errorf("account already exists") + } + + return am.importKey(key, passphrase) } func (am *Manager) importKey(key *Key, passphrase string) (Account, error) { diff --git a/eth/api.go b/eth/api.go index 02b34541f..2c84cf471 100644 --- a/eth/api.go +++ b/eth/api.go @@ -18,6 +18,7 @@ package eth import ( "bytes" + "encoding/hex" "encoding/json" "errors" "fmt" @@ -448,6 +449,16 @@ func (s *PrivateAccountAPI) NewAccount(password string) (common.Address, error) return common.Address{}, err } +func (s *PrivateAccountAPI) ImportRawKey(privkey string, password string) (common.Address, error) { + hexkey, err := hex.DecodeString(privkey) + if err != nil { + return common.Address{}, err + } + + acc, err := s.am.ImportECDSA(crypto.ToECDSA(hexkey), password) + return acc.Address, err +} + // UnlockAccount will unlock the account associated with the given address with // the given password for duration seconds. If duration is nil it will use a // default of 300 seconds. It returns an indication if the account was unlocked. diff --git a/internal/web3ext/web3ext.go b/internal/web3ext/web3ext.go index bc1e46921..14700b05c 100644 --- a/internal/web3ext/web3ext.go +++ b/internal/web3ext/web3ext.go @@ -18,12 +18,13 @@ package web3ext var Modules = map[string]string{ - "txpool": TxPool_JS, - "admin": Admin_JS, - "eth": Eth_JS, - "miner": Miner_JS, - "debug": Debug_JS, - "net": Net_JS, + "txpool": TxPool_JS, + "admin": Admin_JS, + "personal": Personal_JS, + "eth": Eth_JS, + "miner": Miner_JS, + "debug": Debug_JS, + "net": Net_JS, } const TxPool_JS = ` @@ -175,6 +176,20 @@ web3._extend({ }); ` +const Personal_JS = ` +web3._extend({ + property: 'personal', + methods: + [ + new web3._extend.Method({ + name: 'importRawKey', + call: 'personal_importRawKey', + params: 2 + }) + ] +}); +` + const Eth_JS = ` web3._extend({ property: 'eth', |