From 7c180f851c6110b4f46a12f3d895bd0dd520bdc2 Mon Sep 17 00:00:00 2001 From: nthumann Date: Tue, 1 Jul 2025 08:07:33 +0100 Subject: [PATCH] internal/ethapi: prealloc map for the txpool api (#32110) use `make(map, len(txpool))` to prealloc the map for the txpool content, to avoid the map growing in the loop. --- internal/ethapi/api.go | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index 8f9442acee..9151249308 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -186,15 +186,15 @@ func NewTxPoolAPI(b Backend) *TxPoolAPI { // Content returns the transactions contained within the transaction pool. func (api *TxPoolAPI) Content() map[string]map[string]map[string]*RPCTransaction { - content := map[string]map[string]map[string]*RPCTransaction{ - "pending": make(map[string]map[string]*RPCTransaction), - "queued": make(map[string]map[string]*RPCTransaction), - } pending, queue := api.b.TxPoolContent() + content := map[string]map[string]map[string]*RPCTransaction{ + "pending": make(map[string]map[string]*RPCTransaction, len(pending)), + "queued": make(map[string]map[string]*RPCTransaction, len(queue)), + } curHeader := api.b.CurrentHeader() // Flatten the pending transactions for account, txs := range pending { - dump := make(map[string]*RPCTransaction) + dump := make(map[string]*RPCTransaction, len(txs)) for _, tx := range txs { dump[fmt.Sprintf("%d", tx.Nonce())] = NewRPCPendingTransaction(tx, curHeader, api.b.ChainConfig()) } @@ -202,7 +202,7 @@ func (api *TxPoolAPI) Content() map[string]map[string]map[string]*RPCTransaction } // Flatten the queued transactions for account, txs := range queue { - dump := make(map[string]*RPCTransaction) + dump := make(map[string]*RPCTransaction, len(txs)) for _, tx := range txs { dump[fmt.Sprintf("%d", tx.Nonce())] = NewRPCPendingTransaction(tx, curHeader, api.b.ChainConfig()) } @@ -246,11 +246,11 @@ func (api *TxPoolAPI) Status() map[string]hexutil.Uint { // Inspect retrieves the content of the transaction pool and flattens it into an // easily inspectable list. func (api *TxPoolAPI) Inspect() map[string]map[string]map[string]string { - content := map[string]map[string]map[string]string{ - "pending": make(map[string]map[string]string), - "queued": make(map[string]map[string]string), - } pending, queue := api.b.TxPoolContent() + content := map[string]map[string]map[string]string{ + "pending": make(map[string]map[string]string, len(pending)), + "queued": make(map[string]map[string]string, len(queue)), + } // Define a formatter to flatten a transaction into a string format := func(tx *types.Transaction) string { @@ -261,7 +261,7 @@ func (api *TxPoolAPI) Inspect() map[string]map[string]map[string]string { } // Flatten the pending transactions for account, txs := range pending { - dump := make(map[string]string) + dump := make(map[string]string, len(txs)) for _, tx := range txs { dump[fmt.Sprintf("%d", tx.Nonce())] = format(tx) } @@ -269,7 +269,7 @@ func (api *TxPoolAPI) Inspect() map[string]map[string]map[string]string { } // Flatten the queued transactions for account, txs := range queue { - dump := make(map[string]string) + dump := make(map[string]string, len(txs)) for _, tx := range txs { dump[fmt.Sprintf("%d", tx.Nonce())] = format(tx) }