aboutsummaryrefslogtreecommitdiffstats
path: root/cmd
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2015-05-06 20:53:20 +0800
committerobscuren <geffobscura@gmail.com>2015-05-07 00:30:56 +0800
commit05ac1209c731722a486fb54d3b5cc9282c760c81 (patch)
tree8c9811ddf1ea9e09ab9e4da00565c036fd944e79 /cmd
parenteb4029257a3166c94fdf82623283e6f946bf19f2 (diff)
downloaddexon-05ac1209c731722a486fb54d3b5cc9282c760c81.tar.gz
dexon-05ac1209c731722a486fb54d3b5cc9282c760c81.tar.zst
dexon-05ac1209c731722a486fb54d3b5cc9282c760c81.zip
cmd/geth: limit `pendingTransactions` to owned accounts.
Diffstat (limited to 'cmd')
-rw-r--r--cmd/geth/admin.go86
1 files changed, 53 insertions, 33 deletions
diff --git a/cmd/geth/admin.go b/cmd/geth/admin.go
index 2ee316580..e7cc96ddb 100644
--- a/cmd/geth/admin.go
+++ b/cmd/geth/admin.go
@@ -16,6 +16,7 @@ import (
"github.com/ethereum/go-ethereum/rpc"
"github.com/ethereum/go-ethereum/xeth"
"github.com/robertkrimen/otto"
+ "gopkg.in/fatih/set.v0"
)
/*
@@ -25,7 +26,7 @@ node admin bindings
func (js *jsre) adminBindings() {
ethO, _ := js.re.Get("eth")
eth := ethO.Object()
- eth.Set("transactions", js.transactions)
+ eth.Set("pendingTransactions", js.pendingTransactions)
eth.Set("resend", js.resend)
js.re.Set("admin", struct{}{})
@@ -80,43 +81,30 @@ func (js *jsre) getBlock(call otto.FunctionCall) (*types.Block, error) {
return nil, errors.New("requires block number or block hash as argument")
}
-type tx struct {
- tx *types.Transaction
-
- To string
- From string
- Nonce string
- Value string
- Data string
- GasLimit string
- GasPrice string
-}
+func (js *jsre) pendingTransactions(call otto.FunctionCall) otto.Value {
+ txs := js.ethereum.TxPool().GetTransactions()
-func newTx(t *types.Transaction) *tx {
- from, _ := t.From()
- var to string
- if t := t.To(); t != nil {
- to = t.Hex()
+ // grab the accounts from the account manager. This will help with determening which
+ // transactions should be returned.
+ accounts, err := js.ethereum.AccountManager().Accounts()
+ if err != nil {
+ fmt.Println(err)
+ return otto.UndefinedValue()
}
- return &tx{
- tx: t,
- To: to,
- From: from.Hex(),
- Value: t.Amount.String(),
- Nonce: strconv.Itoa(int(t.Nonce())),
- Data: "0x" + common.Bytes2Hex(t.Data()),
- GasLimit: t.GasLimit.String(),
- GasPrice: t.GasPrice().String(),
+ // Add the accouns to a new set
+ accountSet := set.New()
+ for _, account := range accounts {
+ accountSet.Add(common.BytesToAddress(account.Address))
}
-}
-
-func (js *jsre) transactions(call otto.FunctionCall) otto.Value {
- txs := js.ethereum.TxPool().GetTransactions()
- ltxs := make([]*tx, len(txs))
- for i, tx := range txs {
- ltxs[i] = newTx(tx)
+ //ltxs := make([]*tx, len(txs))
+ var ltxs []*tx
+ for _, tx := range txs {
+ // no need to check err
+ if from, _ := tx.From(); accountSet.Has(from) {
+ ltxs = append(ltxs, newTx(tx))
+ }
}
return js.re.ToVal(ltxs)
@@ -504,3 +492,35 @@ func (js *jsre) dumpBlock(call otto.FunctionCall) otto.Value {
return js.re.ToVal(dump)
}
+
+// internal transaction type which will allow us to resend transactions using `eth.resend`
+type tx struct {
+ tx *types.Transaction
+
+ To string
+ From string
+ Nonce string
+ Value string
+ Data string
+ GasLimit string
+ GasPrice string
+}
+
+func newTx(t *types.Transaction) *tx {
+ from, _ := t.From()
+ var to string
+ if t := t.To(); t != nil {
+ to = t.Hex()
+ }
+
+ return &tx{
+ tx: t,
+ To: to,
+ From: from.Hex(),
+ Value: t.Amount.String(),
+ Nonce: strconv.Itoa(int(t.Nonce())),
+ Data: "0x" + common.Bytes2Hex(t.Data()),
+ GasLimit: t.GasLimit.String(),
+ GasPrice: t.GasPrice().String(),
+ }
+}