core, eth, les: polish txpool API around local/remote txs
This commit is contained in:
		| @@ -133,7 +133,7 @@ func TestStateChangeDuringPoolReset(t *testing.T) { | ||||
| 		t.Fatalf("Invalid nonce, want 0, got %d", nonce) | ||||
| 	} | ||||
|  | ||||
| 	txpool.AddBatch(types.Transactions{tx0, tx1}) | ||||
| 	txpool.AddRemotes(types.Transactions{tx0, tx1}) | ||||
|  | ||||
| 	nonce = txpool.State().GetNonce(address) | ||||
| 	if nonce != 2 { | ||||
| @@ -167,31 +167,29 @@ func TestInvalidTransactions(t *testing.T) { | ||||
| 	from, _ := deriveSender(tx) | ||||
| 	currentState, _ := pool.currentState() | ||||
| 	currentState.AddBalance(from, big.NewInt(1)) | ||||
| 	if err := pool.Add(tx); err != ErrInsufficientFunds { | ||||
| 	if err := pool.AddRemote(tx); err != ErrInsufficientFunds { | ||||
| 		t.Error("expected", ErrInsufficientFunds) | ||||
| 	} | ||||
|  | ||||
| 	balance := new(big.Int).Add(tx.Value(), new(big.Int).Mul(tx.Gas(), tx.GasPrice())) | ||||
| 	currentState.AddBalance(from, balance) | ||||
| 	if err := pool.Add(tx); err != ErrIntrinsicGas { | ||||
| 	if err := pool.AddRemote(tx); err != ErrIntrinsicGas { | ||||
| 		t.Error("expected", ErrIntrinsicGas, "got", err) | ||||
| 	} | ||||
|  | ||||
| 	currentState.SetNonce(from, 1) | ||||
| 	currentState.AddBalance(from, big.NewInt(0xffffffffffffff)) | ||||
| 	tx = transaction(0, big.NewInt(100000), key) | ||||
| 	if err := pool.Add(tx); err != ErrNonceTooLow { | ||||
| 	if err := pool.AddRemote(tx); err != ErrNonceTooLow { | ||||
| 		t.Error("expected", ErrNonceTooLow) | ||||
| 	} | ||||
|  | ||||
| 	tx = transaction(1, big.NewInt(100000), key) | ||||
| 	pool.gasPrice = big.NewInt(1000) | ||||
| 	if err := pool.Add(tx); err != ErrUnderpriced { | ||||
| 	if err := pool.AddRemote(tx); err != ErrUnderpriced { | ||||
| 		t.Error("expected", ErrUnderpriced, "got", err) | ||||
| 	} | ||||
|  | ||||
| 	pool.SetLocal(tx) | ||||
| 	if err := pool.Add(tx); err != nil { | ||||
| 	if err := pool.AddLocal(tx); err != nil { | ||||
| 		t.Error("expected", nil, "got", err) | ||||
| 	} | ||||
| } | ||||
| @@ -282,7 +280,7 @@ func TestNegativeValue(t *testing.T) { | ||||
| 	from, _ := deriveSender(tx) | ||||
| 	currentState, _ := pool.currentState() | ||||
| 	currentState.AddBalance(from, big.NewInt(1)) | ||||
| 	if err := pool.Add(tx); err != ErrNegativeValue { | ||||
| 	if err := pool.AddRemote(tx); err != ErrNegativeValue { | ||||
| 		t.Error("expected", ErrNegativeValue, "got", err) | ||||
| 	} | ||||
| } | ||||
| @@ -301,14 +299,14 @@ func TestTransactionChainFork(t *testing.T) { | ||||
| 	resetState() | ||||
|  | ||||
| 	tx := transaction(0, big.NewInt(100000), key) | ||||
| 	if _, err := pool.add(tx); err != nil { | ||||
| 	if _, err := pool.add(tx, false); err != nil { | ||||
| 		t.Error("didn't expect error", err) | ||||
| 	} | ||||
| 	pool.RemoveBatch([]*types.Transaction{tx}) | ||||
|  | ||||
| 	// reset the pool's internal state | ||||
| 	resetState() | ||||
| 	if _, err := pool.add(tx); err != nil { | ||||
| 	if _, err := pool.add(tx, false); err != nil { | ||||
| 		t.Error("didn't expect error", err) | ||||
| 	} | ||||
| } | ||||
| @@ -332,10 +330,10 @@ func TestTransactionDoubleNonce(t *testing.T) { | ||||
| 	tx3, _ := types.SignTx(types.NewTransaction(0, common.Address{}, big.NewInt(100), big.NewInt(1000000), big.NewInt(1), nil), signer, key) | ||||
|  | ||||
| 	// Add the first two transaction, ensure higher priced stays only | ||||
| 	if replace, err := pool.add(tx1); err != nil || replace { | ||||
| 	if replace, err := pool.add(tx1, false); err != nil || replace { | ||||
| 		t.Errorf("first transaction insert failed (%v) or reported replacement (%v)", err, replace) | ||||
| 	} | ||||
| 	if replace, err := pool.add(tx2); err != nil || !replace { | ||||
| 	if replace, err := pool.add(tx2, false); err != nil || !replace { | ||||
| 		t.Errorf("second transaction insert failed (%v) or not reported replacement (%v)", err, replace) | ||||
| 	} | ||||
| 	state, _ := pool.currentState() | ||||
| @@ -347,7 +345,7 @@ func TestTransactionDoubleNonce(t *testing.T) { | ||||
| 		t.Errorf("transaction mismatch: have %x, want %x", tx.Hash(), tx2.Hash()) | ||||
| 	} | ||||
| 	// Add the third transaction and ensure it's not saved (smaller price) | ||||
| 	pool.add(tx3) | ||||
| 	pool.add(tx3, false) | ||||
| 	pool.promoteExecutables(state, []common.Address{addr}) | ||||
| 	if pool.pending[addr].Len() != 1 { | ||||
| 		t.Error("expected 1 pending transactions, got", pool.pending[addr].Len()) | ||||
| @@ -367,7 +365,7 @@ func TestMissingNonce(t *testing.T) { | ||||
| 	currentState, _ := pool.currentState() | ||||
| 	currentState.AddBalance(addr, big.NewInt(100000000000000)) | ||||
| 	tx := transaction(1, big.NewInt(100000), key) | ||||
| 	if _, err := pool.add(tx); err != nil { | ||||
| 	if _, err := pool.add(tx, false); err != nil { | ||||
| 		t.Error("didn't expect error", err) | ||||
| 	} | ||||
| 	if len(pool.pending) != 0 { | ||||
| @@ -390,7 +388,7 @@ func TestNonceRecovery(t *testing.T) { | ||||
| 	currentState.AddBalance(addr, big.NewInt(100000000000000)) | ||||
| 	pool.resetState() | ||||
| 	tx := transaction(n, big.NewInt(100000), key) | ||||
| 	if err := pool.Add(tx); err != nil { | ||||
| 	if err := pool.AddRemote(tx); err != nil { | ||||
| 		t.Error(err) | ||||
| 	} | ||||
| 	// simulate some weird re-order of transactions and missing nonce(s) | ||||
| @@ -598,7 +596,7 @@ func TestTransactionQueueAccountLimiting(t *testing.T) { | ||||
|  | ||||
| 	// Keep queuing up transactions and make sure all above a limit are dropped | ||||
| 	for i := uint64(1); i <= DefaultTxPoolConfig.AccountQueue+5; i++ { | ||||
| 		if err := pool.Add(transaction(i, big.NewInt(100000), key)); err != nil { | ||||
| 		if err := pool.AddRemote(transaction(i, big.NewInt(100000), key)); err != nil { | ||||
| 			t.Fatalf("tx %d: failed to add transaction: %v", i, err) | ||||
| 		} | ||||
| 		if len(pool.pending) != 0 { | ||||
| @@ -653,7 +651,7 @@ func TestTransactionQueueGlobalLimiting(t *testing.T) { | ||||
| 		nonces[addr]++ | ||||
| 	} | ||||
| 	// Import the batch and verify that limits have been enforced | ||||
| 	pool.AddBatch(txs) | ||||
| 	pool.AddRemotes(txs) | ||||
|  | ||||
| 	queued := 0 | ||||
| 	for addr, list := range pool.queue { | ||||
| @@ -686,7 +684,7 @@ func TestTransactionQueueTimeLimiting(t *testing.T) { | ||||
|  | ||||
| 	// Queue up a batch of transactions | ||||
| 	for i := uint64(1); i <= DefaultTxPoolConfig.AccountQueue; i++ { | ||||
| 		if err := pool.Add(transaction(i, big.NewInt(100000), key)); err != nil { | ||||
| 		if err := pool.AddRemote(transaction(i, big.NewInt(100000), key)); err != nil { | ||||
| 			t.Fatalf("tx %d: failed to add transaction: %v", i, err) | ||||
| 		} | ||||
| 	} | ||||
| @@ -711,7 +709,7 @@ func TestTransactionPendingLimiting(t *testing.T) { | ||||
|  | ||||
| 	// Keep queuing up transactions and make sure all above a limit are dropped | ||||
| 	for i := uint64(0); i < DefaultTxPoolConfig.AccountQueue+5; i++ { | ||||
| 		if err := pool.Add(transaction(i, big.NewInt(100000), key)); err != nil { | ||||
| 		if err := pool.AddRemote(transaction(i, big.NewInt(100000), key)); err != nil { | ||||
| 			t.Fatalf("tx %d: failed to add transaction: %v", i, err) | ||||
| 		} | ||||
| 		if pool.pending[account].Len() != int(i)+1 { | ||||
| @@ -739,7 +737,7 @@ func testTransactionLimitingEquivalency(t *testing.T, origin uint64) { | ||||
| 	state1.AddBalance(account1, big.NewInt(1000000)) | ||||
|  | ||||
| 	for i := uint64(0); i < DefaultTxPoolConfig.AccountQueue+5; i++ { | ||||
| 		if err := pool1.Add(transaction(origin+i, big.NewInt(100000), key1)); err != nil { | ||||
| 		if err := pool1.AddRemote(transaction(origin+i, big.NewInt(100000), key1)); err != nil { | ||||
| 			t.Fatalf("tx %d: failed to add transaction: %v", i, err) | ||||
| 		} | ||||
| 	} | ||||
| @@ -753,7 +751,7 @@ func testTransactionLimitingEquivalency(t *testing.T, origin uint64) { | ||||
| 	for i := uint64(0); i < DefaultTxPoolConfig.AccountQueue+5; i++ { | ||||
| 		txns = append(txns, transaction(origin+i, big.NewInt(100000), key2)) | ||||
| 	} | ||||
| 	pool2.AddBatch(txns) | ||||
| 	pool2.AddRemotes(txns) | ||||
|  | ||||
| 	// Ensure the batch optimization honors the same pool mechanics | ||||
| 	if len(pool1.pending) != len(pool2.pending) { | ||||
| @@ -808,7 +806,7 @@ func TestTransactionPendingGlobalLimiting(t *testing.T) { | ||||
| 		} | ||||
| 	} | ||||
| 	// Import the batch and verify that limits have been enforced | ||||
| 	pool.AddBatch(txs) | ||||
| 	pool.AddRemotes(txs) | ||||
|  | ||||
| 	pending := 0 | ||||
| 	for _, list := range pool.pending { | ||||
| @@ -852,7 +850,7 @@ func TestTransactionCapClearsFromAll(t *testing.T) { | ||||
| 		txs = append(txs, transaction(uint64(j), big.NewInt(100000), key)) | ||||
| 	} | ||||
| 	// Import the batch and verify that limits have been enforced | ||||
| 	pool.AddBatch(txs) | ||||
| 	pool.AddRemotes(txs) | ||||
| 	if err := validateTxPoolInternals(pool); err != nil { | ||||
| 		t.Fatalf("pool internal state corrupted: %v", err) | ||||
| 	} | ||||
| @@ -893,7 +891,7 @@ func TestTransactionPendingMinimumAllowance(t *testing.T) { | ||||
| 		} | ||||
| 	} | ||||
| 	// Import the batch and verify that limits have been enforced | ||||
| 	pool.AddBatch(txs) | ||||
| 	pool.AddRemotes(txs) | ||||
|  | ||||
| 	for addr, list := range pool.pending { | ||||
| 		if list.Len() != int(DefaultTxPoolConfig.AccountSlots) { | ||||
| @@ -937,11 +935,11 @@ func TestTransactionPoolRepricing(t *testing.T) { | ||||
| 	txs = append(txs, pricedTransaction(2, big.NewInt(100000), big.NewInt(1), keys[1])) | ||||
| 	txs = append(txs, pricedTransaction(3, big.NewInt(100000), big.NewInt(2), keys[1])) | ||||
|  | ||||
| 	txs = append(txs, pricedTransaction(0, big.NewInt(100000), big.NewInt(1), keys[2])) | ||||
| 	pool.SetLocal(txs[len(txs)-1]) // prevent this one from ever being dropped | ||||
| 	ltx := pricedTransaction(0, big.NewInt(100000), big.NewInt(1), keys[2]) | ||||
|  | ||||
| 	// Import the batch and that both pending and queued transactions match up | ||||
| 	pool.AddBatch(txs) | ||||
| 	pool.AddRemotes(txs) | ||||
| 	pool.AddLocal(ltx) | ||||
|  | ||||
| 	pending, queued := pool.stats() | ||||
| 	if pending != 4 { | ||||
| @@ -967,10 +965,10 @@ func TestTransactionPoolRepricing(t *testing.T) { | ||||
| 		t.Fatalf("pool internal state corrupted: %v", err) | ||||
| 	} | ||||
| 	// Check that we can't add the old transactions back | ||||
| 	if err := pool.Add(pricedTransaction(1, big.NewInt(100000), big.NewInt(1), keys[0])); err != ErrUnderpriced { | ||||
| 	if err := pool.AddRemote(pricedTransaction(1, big.NewInt(100000), big.NewInt(1), keys[0])); err != ErrUnderpriced { | ||||
| 		t.Fatalf("adding underpriced pending transaction error mismatch: have %v, want %v", err, ErrUnderpriced) | ||||
| 	} | ||||
| 	if err := pool.Add(pricedTransaction(2, big.NewInt(100000), big.NewInt(1), keys[1])); err != ErrUnderpriced { | ||||
| 	if err := pool.AddRemote(pricedTransaction(2, big.NewInt(100000), big.NewInt(1), keys[1])); err != ErrUnderpriced { | ||||
| 		t.Fatalf("adding underpriced queued transaction error mismatch: have %v, want %v", err, ErrUnderpriced) | ||||
| 	} | ||||
| 	if err := validateTxPoolInternals(pool); err != nil { | ||||
| @@ -978,9 +976,7 @@ func TestTransactionPoolRepricing(t *testing.T) { | ||||
| 	} | ||||
| 	// However we can add local underpriced transactions | ||||
| 	tx := pricedTransaction(1, big.NewInt(100000), big.NewInt(1), keys[2]) | ||||
|  | ||||
| 	pool.SetLocal(tx) // prevent this one from ever being dropped | ||||
| 	if err := pool.Add(tx); err != nil { | ||||
| 	if err := pool.AddLocal(tx); err != nil { | ||||
| 		t.Fatalf("failed to add underpriced local transaction: %v", err) | ||||
| 	} | ||||
| 	if pending, _ = pool.stats(); pending != 3 { | ||||
| @@ -1027,11 +1023,11 @@ func TestTransactionPoolUnderpricing(t *testing.T) { | ||||
|  | ||||
| 	txs = append(txs, pricedTransaction(1, big.NewInt(100000), big.NewInt(1), keys[1])) | ||||
|  | ||||
| 	txs = append(txs, pricedTransaction(0, big.NewInt(100000), big.NewInt(1), keys[2])) | ||||
| 	pool.SetLocal(txs[len(txs)-1]) // prevent this one from ever being dropped | ||||
| 	ltx := pricedTransaction(0, big.NewInt(100000), big.NewInt(1), keys[2]) | ||||
|  | ||||
| 	// Import the batch and that both pending and queued transactions match up | ||||
| 	pool.AddBatch(txs) | ||||
| 	pool.AddRemotes(txs) | ||||
| 	pool.AddLocal(ltx) | ||||
|  | ||||
| 	pending, queued := pool.stats() | ||||
| 	if pending != 3 { | ||||
| @@ -1044,17 +1040,17 @@ func TestTransactionPoolUnderpricing(t *testing.T) { | ||||
| 		t.Fatalf("pool internal state corrupted: %v", err) | ||||
| 	} | ||||
| 	// Ensure that adding an underpriced transaction on block limit fails | ||||
| 	if err := pool.Add(pricedTransaction(0, big.NewInt(100000), big.NewInt(1), keys[1])); err != ErrUnderpriced { | ||||
| 	if err := pool.AddRemote(pricedTransaction(0, big.NewInt(100000), big.NewInt(1), keys[1])); err != ErrUnderpriced { | ||||
| 		t.Fatalf("adding underpriced pending transaction error mismatch: have %v, want %v", err, ErrUnderpriced) | ||||
| 	} | ||||
| 	// Ensure that adding high priced transactions drops cheap ones, but not own | ||||
| 	if err := pool.Add(pricedTransaction(0, big.NewInt(100000), big.NewInt(3), keys[1])); err != nil { | ||||
| 	if err := pool.AddRemote(pricedTransaction(0, big.NewInt(100000), big.NewInt(3), keys[1])); err != nil { | ||||
| 		t.Fatalf("failed to add well priced transaction: %v", err) | ||||
| 	} | ||||
| 	if err := pool.Add(pricedTransaction(2, big.NewInt(100000), big.NewInt(4), keys[1])); err != nil { | ||||
| 	if err := pool.AddRemote(pricedTransaction(2, big.NewInt(100000), big.NewInt(4), keys[1])); err != nil { | ||||
| 		t.Fatalf("failed to add well priced transaction: %v", err) | ||||
| 	} | ||||
| 	if err := pool.Add(pricedTransaction(3, big.NewInt(100000), big.NewInt(5), keys[1])); err != nil { | ||||
| 	if err := pool.AddRemote(pricedTransaction(3, big.NewInt(100000), big.NewInt(5), keys[1])); err != nil { | ||||
| 		t.Fatalf("failed to add well priced transaction: %v", err) | ||||
| 	} | ||||
| 	pending, queued = pool.stats() | ||||
| @@ -1069,9 +1065,7 @@ func TestTransactionPoolUnderpricing(t *testing.T) { | ||||
| 	} | ||||
| 	// Ensure that adding local transactions can push out even higher priced ones | ||||
| 	tx := pricedTransaction(1, big.NewInt(100000), big.NewInt(0), keys[2]) | ||||
|  | ||||
| 	pool.SetLocal(tx) // prevent this one from ever being dropped | ||||
| 	if err := pool.Add(tx); err != nil { | ||||
| 	if err := pool.AddLocal(tx); err != nil { | ||||
| 		t.Fatalf("failed to add underpriced local transaction: %v", err) | ||||
| 	} | ||||
| 	pending, queued = pool.stats() | ||||
| @@ -1106,43 +1100,43 @@ func TestTransactionReplacement(t *testing.T) { | ||||
| 	price := int64(100) | ||||
| 	threshold := (price * (100 + int64(DefaultTxPoolConfig.PriceBump))) / 100 | ||||
|  | ||||
| 	if err := pool.Add(pricedTransaction(0, big.NewInt(100000), big.NewInt(1), key)); err != nil { | ||||
| 	if err := pool.AddRemote(pricedTransaction(0, big.NewInt(100000), big.NewInt(1), key)); err != nil { | ||||
| 		t.Fatalf("failed to add original cheap pending transaction: %v", err) | ||||
| 	} | ||||
| 	if err := pool.Add(pricedTransaction(0, big.NewInt(100001), big.NewInt(1), key)); err != ErrReplaceUnderpriced { | ||||
| 	if err := pool.AddRemote(pricedTransaction(0, big.NewInt(100001), big.NewInt(1), key)); err != ErrReplaceUnderpriced { | ||||
| 		t.Fatalf("original cheap pending transaction replacement error mismatch: have %v, want %v", err, ErrReplaceUnderpriced) | ||||
| 	} | ||||
| 	if err := pool.Add(pricedTransaction(0, big.NewInt(100000), big.NewInt(2), key)); err != nil { | ||||
| 	if err := pool.AddRemote(pricedTransaction(0, big.NewInt(100000), big.NewInt(2), key)); err != nil { | ||||
| 		t.Fatalf("failed to replace original cheap pending transaction: %v", err) | ||||
| 	} | ||||
|  | ||||
| 	if err := pool.Add(pricedTransaction(0, big.NewInt(100000), big.NewInt(price), key)); err != nil { | ||||
| 	if err := pool.AddRemote(pricedTransaction(0, big.NewInt(100000), big.NewInt(price), key)); err != nil { | ||||
| 		t.Fatalf("failed to add original proper pending transaction: %v", err) | ||||
| 	} | ||||
| 	if err := pool.Add(pricedTransaction(0, big.NewInt(100000), big.NewInt(threshold), key)); err != ErrReplaceUnderpriced { | ||||
| 	if err := pool.AddRemote(pricedTransaction(0, big.NewInt(100000), big.NewInt(threshold), key)); err != ErrReplaceUnderpriced { | ||||
| 		t.Fatalf("original proper pending transaction replacement error mismatch: have %v, want %v", err, ErrReplaceUnderpriced) | ||||
| 	} | ||||
| 	if err := pool.Add(pricedTransaction(0, big.NewInt(100000), big.NewInt(threshold+1), key)); err != nil { | ||||
| 	if err := pool.AddRemote(pricedTransaction(0, big.NewInt(100000), big.NewInt(threshold+1), key)); err != nil { | ||||
| 		t.Fatalf("failed to replace original proper pending transaction: %v", err) | ||||
| 	} | ||||
| 	// Add queued transactions, ensuring the minimum price bump is enforced for replacement (for ultra low prices too) | ||||
| 	if err := pool.Add(pricedTransaction(2, big.NewInt(100000), big.NewInt(1), key)); err != nil { | ||||
| 	if err := pool.AddRemote(pricedTransaction(2, big.NewInt(100000), big.NewInt(1), key)); err != nil { | ||||
| 		t.Fatalf("failed to add original queued transaction: %v", err) | ||||
| 	} | ||||
| 	if err := pool.Add(pricedTransaction(2, big.NewInt(100001), big.NewInt(1), key)); err != ErrReplaceUnderpriced { | ||||
| 	if err := pool.AddRemote(pricedTransaction(2, big.NewInt(100001), big.NewInt(1), key)); err != ErrReplaceUnderpriced { | ||||
| 		t.Fatalf("original queued transaction replacement error mismatch: have %v, want %v", err, ErrReplaceUnderpriced) | ||||
| 	} | ||||
| 	if err := pool.Add(pricedTransaction(2, big.NewInt(100000), big.NewInt(2), key)); err != nil { | ||||
| 	if err := pool.AddRemote(pricedTransaction(2, big.NewInt(100000), big.NewInt(2), key)); err != nil { | ||||
| 		t.Fatalf("failed to replace original queued transaction: %v", err) | ||||
| 	} | ||||
|  | ||||
| 	if err := pool.Add(pricedTransaction(2, big.NewInt(100000), big.NewInt(price), key)); err != nil { | ||||
| 	if err := pool.AddRemote(pricedTransaction(2, big.NewInt(100000), big.NewInt(price), key)); err != nil { | ||||
| 		t.Fatalf("failed to add original queued transaction: %v", err) | ||||
| 	} | ||||
| 	if err := pool.Add(pricedTransaction(2, big.NewInt(100001), big.NewInt(threshold), key)); err != ErrReplaceUnderpriced { | ||||
| 	if err := pool.AddRemote(pricedTransaction(2, big.NewInt(100001), big.NewInt(threshold), key)); err != ErrReplaceUnderpriced { | ||||
| 		t.Fatalf("original queued transaction replacement error mismatch: have %v, want %v", err, ErrReplaceUnderpriced) | ||||
| 	} | ||||
| 	if err := pool.Add(pricedTransaction(2, big.NewInt(100000), big.NewInt(threshold+1), key)); err != nil { | ||||
| 	if err := pool.AddRemote(pricedTransaction(2, big.NewInt(100000), big.NewInt(threshold+1), key)); err != nil { | ||||
| 		t.Fatalf("failed to replace original queued transaction: %v", err) | ||||
| 	} | ||||
| 	if err := validateTxPoolInternals(pool); err != nil { | ||||
| @@ -1213,7 +1207,7 @@ func BenchmarkPoolInsert(b *testing.B) { | ||||
| 	// Benchmark importing the transactions into the queue | ||||
| 	b.ResetTimer() | ||||
| 	for _, tx := range txs { | ||||
| 		pool.Add(tx) | ||||
| 		pool.AddRemote(tx) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @@ -1239,6 +1233,6 @@ func benchmarkPoolBatchInsert(b *testing.B, size int) { | ||||
| 	// Benchmark importing the transactions into the queue | ||||
| 	b.ResetTimer() | ||||
| 	for _, batch := range batches { | ||||
| 		pool.AddBatch(batch) | ||||
| 		pool.AddRemotes(batch) | ||||
| 	} | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user