diff options
author | Bas van Kervel <bas@ethdev.com> | 2015-06-24 19:53:37 +0800 |
---|---|---|
committer | Bas van Kervel <bas@ethdev.com> | 2015-06-30 17:20:31 +0800 |
commit | 056e9dd393eeb7ddb4f6bf3e508228e1874bc94e (patch) | |
tree | f21087dbe1e6a955d22b96586a9b846d3471003f /rpc/api/eth.go | |
parent | 9226369b5daf8c1bf738369cd838963a5d58362d (diff) | |
download | dexon-056e9dd393eeb7ddb4f6bf3e508228e1874bc94e.tar.gz dexon-056e9dd393eeb7ddb4f6bf3e508228e1874bc94e.tar.zst dexon-056e9dd393eeb7ddb4f6bf3e508228e1874bc94e.zip |
added eth.pendingTransactions
Diffstat (limited to 'rpc/api/eth.go')
-rw-r--r-- | rpc/api/eth.go | 40 |
1 files changed, 35 insertions, 5 deletions
diff --git a/rpc/api/eth.go b/rpc/api/eth.go index 962c8d0f9..d77bf9803 100644 --- a/rpc/api/eth.go +++ b/rpc/api/eth.go @@ -6,9 +6,11 @@ import ( "math/big" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/rpc/codec" "github.com/ethereum/go-ethereum/rpc/shared" "github.com/ethereum/go-ethereum/xeth" + "gopkg.in/fatih/set.v0" ) const ( @@ -18,9 +20,10 @@ const ( // eth api provider // See https://github.com/ethereum/wiki/wiki/JSON-RPC type ethApi struct { - xeth *xeth.XEth - methods map[string]ethhandler - codec codec.ApiCoder + xeth *xeth.XEth + ethereum *eth.Ethereum + methods map[string]ethhandler + codec codec.ApiCoder } // eth callback handler @@ -71,12 +74,13 @@ var ( "eth_hashrate": (*ethApi).Hashrate, "eth_getWork": (*ethApi).GetWork, "eth_submitWork": (*ethApi).SubmitWork, + "eth_pendingTransactions": (*ethApi).PendingTransactions, } ) // create new ethApi instance -func NewEthApi(xeth *xeth.XEth, codec codec.Codec) *ethApi { - return ðApi{xeth, ethMapping, codec.New(nil)} +func NewEthApi(xeth *xeth.XEth, eth *eth.Ethereum, codec codec.Codec) *ethApi { + return ðApi{xeth, eth, ethMapping, codec.New(nil)} } // collection with supported methods @@ -548,3 +552,29 @@ func (self *ethApi) SubmitWork(req *shared.Request) (interface{}, error) { } return self.xeth.RemoteMining().SubmitWork(args.Nonce, common.HexToHash(args.Digest), common.HexToHash(args.Header)), nil } + +func (self *ethApi) PendingTransactions(req *shared.Request) (interface{}, error) { + txs := self.ethereum.TxPool().GetTransactions() + + // grab the accounts from the account manager. This will help with determening which + // transactions should be returned. + accounts, err := self.ethereum.AccountManager().Accounts() + if err != nil { + return nil, err + } + + // Add the accouns to a new set + accountSet := set.New() + for _, account := range accounts { + accountSet.Add(account.Address) + } + + var ltxs []*tx + for _, tx := range txs { + if from, _ := tx.From(); accountSet.Has(from) { + ltxs = append(ltxs, newTx(tx)) + } + } + + return ltxs, nil +} |