|
|
@@ -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
|
|
|
+}
|