Fix edge case for accessing accounts through rpc (#134)

* Add mutex and close keybase database correctly after use

* Add options http request to rpc API for remix
This commit is contained in:
Austin Abell 2019-10-31 11:09:40 -04:00 committed by GitHub
parent c130105b86
commit 9294fa8423
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 15 additions and 8 deletions

View File

@ -74,7 +74,7 @@ func registerRoutes(rs *lcd.RestServer) {
} }
} }
rs.Mux.HandleFunc("/rpc", s.ServeHTTP).Methods("POST") rs.Mux.HandleFunc("/", s.ServeHTTP).Methods("POST", "OPTIONS")
} }
func unlockKeyFromNameAndPassphrase(accountName, passphrase string) (emintKey emintcrypto.PrivKeySecp256k1, err error) { func unlockKeyFromNameAndPassphrase(accountName, passphrase string) (emintKey emintcrypto.PrivKeySecp256k1, err error) {

View File

@ -6,6 +6,7 @@ import (
"log" "log"
"math/big" "math/big"
"strconv" "strconv"
"sync"
emintcrypto "github.com/cosmos/ethermint/crypto" emintcrypto "github.com/cosmos/ethermint/crypto"
emintkeys "github.com/cosmos/ethermint/keys" emintkeys "github.com/cosmos/ethermint/keys"
@ -40,6 +41,7 @@ type PublicEthAPI struct {
cliCtx context.CLIContext cliCtx context.CLIContext
key emintcrypto.PrivKeySecp256k1 key emintcrypto.PrivKeySecp256k1
nonceLock *AddrLocker nonceLock *AddrLocker
keybaseLock sync.Mutex
gasLimit *int64 gasLimit *int64
} }
@ -103,6 +105,8 @@ func (e *PublicEthAPI) GasPrice() *hexutil.Big {
// Accounts returns the list of accounts available to this node. // Accounts returns the list of accounts available to this node.
func (e *PublicEthAPI) Accounts() ([]common.Address, error) { func (e *PublicEthAPI) Accounts() ([]common.Address, error) {
e.keybaseLock.Lock()
addresses := make([]common.Address, 0) // return [] instead of nil if empty addresses := make([]common.Address, 0) // return [] instead of nil if empty
keybase, err := emintkeys.NewKeyBaseFromHomeFlag() keybase, err := emintkeys.NewKeyBaseFromHomeFlag()
if err != nil { if err != nil {
@ -114,6 +118,9 @@ func (e *PublicEthAPI) Accounts() ([]common.Address, error) {
return addresses, err return addresses, err
} }
keybase.CloseDB()
e.keybaseLock.Unlock()
for _, info := range infos { for _, info := range infos {
addressBytes := info.GetPubKey().Address().Bytes() addressBytes := info.GetPubKey().Address().Bytes()
addresses = append(addresses, common.BytesToAddress(addressBytes)) addresses = append(addresses, common.BytesToAddress(addressBytes))

View File

@ -27,7 +27,7 @@ const (
addrAStoreKey = 0 addrAStoreKey = 0
) )
var addr = fmt.Sprintf("http://%s:%d/rpc", host, port) var addr = fmt.Sprintf("http://%s:%d", host, port)
type Request struct { type Request struct {
Version string `json:"jsonrpc"` Version string `json:"jsonrpc"`