diff options
author | obscuren <geffobscura@gmail.com> | 2015-05-06 20:53:20 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2015-05-07 00:30:56 +0800 |
commit | 05ac1209c731722a486fb54d3b5cc9282c760c81 (patch) | |
tree | 8c9811ddf1ea9e09ab9e4da00565c036fd944e79 /cmd | |
parent | eb4029257a3166c94fdf82623283e6f946bf19f2 (diff) | |
download | dexon-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.go | 86 |
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(), + } +} |