aboutsummaryrefslogtreecommitdiffstats
path: root/internal/ethapi/api.go
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2018-06-12 19:07:21 +0800
committerGitHub <noreply@github.com>2018-06-12 19:07:21 +0800
commit85cd64df0e3331e46f41ec86a647f1b8ff306eda (patch)
treec8cd3db47a3144063b02f98c6d064bb4de901cf4 /internal/ethapi/api.go
parent9608ccf106584c73e91258518eb9d09ad39cc8ae (diff)
parent90829a04bfe7a1c73e6fe01699b5bbae31e3c3b2 (diff)
downloadgo-tangerine-85cd64df0e3331e46f41ec86a647f1b8ff306eda.tar
go-tangerine-85cd64df0e3331e46f41ec86a647f1b8ff306eda.tar.gz
go-tangerine-85cd64df0e3331e46f41ec86a647f1b8ff306eda.tar.bz2
go-tangerine-85cd64df0e3331e46f41ec86a647f1b8ff306eda.tar.lz
go-tangerine-85cd64df0e3331e46f41ec86a647f1b8ff306eda.tar.xz
go-tangerine-85cd64df0e3331e46f41ec86a647f1b8ff306eda.tar.zst
go-tangerine-85cd64df0e3331e46f41ec86a647f1b8ff306eda.zip
Merge pull request #16958 from karalabe/pending-account-fast
internal/ethapi: reduce pendingTransactions to O(txs+accs) from O(txs*accs)
Diffstat (limited to 'internal/ethapi/api.go')
-rw-r--r--internal/ethapi/api.go13
1 files changed, 9 insertions, 4 deletions
diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go
index f95388d65..f5753da22 100644
--- a/internal/ethapi/api.go
+++ b/internal/ethapi/api.go
@@ -1301,14 +1301,19 @@ func (s *PublicTransactionPoolAPI) SignTransaction(ctx context.Context, args Sen
return &SignTransactionResult{data, tx}, nil
}
-// PendingTransactions returns the transactions that are in the transaction pool and have a from address that is one of
-// the accounts this node manages.
+// PendingTransactions returns the transactions that are in the transaction pool
+// and have a from address that is one of the accounts this node manages.
func (s *PublicTransactionPoolAPI) PendingTransactions() ([]*RPCTransaction, error) {
pending, err := s.b.GetPoolTransactions()
if err != nil {
return nil, err
}
-
+ accounts := make(map[common.Address]struct{})
+ for _, wallet := range s.b.AccountManager().Wallets() {
+ for _, account := range wallet.Accounts() {
+ accounts[account.Address] = struct{}{}
+ }
+ }
transactions := make([]*RPCTransaction, 0, len(pending))
for _, tx := range pending {
var signer types.Signer = types.HomesteadSigner{}
@@ -1316,7 +1321,7 @@ func (s *PublicTransactionPoolAPI) PendingTransactions() ([]*RPCTransaction, err
signer = types.NewEIP155Signer(tx.ChainId())
}
from, _ := types.Sender(signer, tx)
- if _, err := s.b.AccountManager().Find(accounts.Account{Address: from}); err == nil {
+ if _, exists := accounts[from]; exists {
transactions = append(transactions, newRPCPendingTransaction(tx))
}
}