mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-15 16:33:47 +00:00
Move inlined function as global sizedDataTransaction
This commit is contained in:
parent
33340c9399
commit
c7d8cb8c56
1 changed files with 41 additions and 36 deletions
|
|
@ -1167,20 +1167,55 @@ func TestAllowedTxSize(t *testing.T) {
|
||||||
account := crypto.PubkeyToAddress(key.PublicKey)
|
account := crypto.PubkeyToAddress(key.PublicKey)
|
||||||
testAddBalance(pool, account, big.NewInt(1000000000))
|
testAddBalance(pool, account, big.NewInt(1000000000))
|
||||||
|
|
||||||
|
gasLimit := pool.currentHead.Load().GasLimit
|
||||||
|
|
||||||
|
// Try adding a transaction with maximal allowed size
|
||||||
|
tx := sizedDataTransaction(t, txMaxSize, 0, gasLimit, key)
|
||||||
|
if err := pool.addRemoteSync(tx); err != nil {
|
||||||
|
t.Fatalf("failed to add transaction of size %d, close to maximal: %v", int(tx.Size()), err)
|
||||||
|
}
|
||||||
|
// Try adding a transaction with random allowed size
|
||||||
|
tx = sizedDataTransaction(t, uint64(rand.Intn(txMaxSize+1)), 1, gasLimit, key)
|
||||||
|
if err := pool.addRemoteSync(tx); err != nil {
|
||||||
|
t.Fatalf("failed to add transaction of random allowed size: %v", err)
|
||||||
|
}
|
||||||
|
// Try adding a transaction above maximum size by one
|
||||||
|
tx = sizedDataTransaction(t, txMaxSize+1, 2, gasLimit, key)
|
||||||
|
if err := pool.addRemoteSync(tx); err == nil {
|
||||||
|
t.Fatalf("expected rejection on slightly oversize transaction")
|
||||||
|
}
|
||||||
|
// Try adding a transaction above maximum size by more than one
|
||||||
|
tx = sizedDataTransaction(t, txMaxSize+2+uint64(rand.Intn(10*txMaxSize)), 2, gasLimit, key)
|
||||||
|
if err := pool.addRemoteSync(tx); err == nil {
|
||||||
|
t.Fatalf("expected rejection on oversize transaction")
|
||||||
|
}
|
||||||
|
// Run some sanity checks on the pool internals
|
||||||
|
pending, queued := pool.Stats()
|
||||||
|
if pending != 2 {
|
||||||
|
t.Fatalf("pending transactions mismatched: have %d, want %d", pending, 2)
|
||||||
|
}
|
||||||
|
if queued != 0 {
|
||||||
|
t.Fatalf("queued transactions mismatched: have %d, want %d", queued, 0)
|
||||||
|
}
|
||||||
|
if err := validatePoolInternals(pool); err != nil {
|
||||||
|
t.Fatalf("pool internal state corrupted: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func sizedDataTransaction(t *testing.T, targetSize, nonce, gasLimit uint64, key *ecdsa.PrivateKey) *types.Transaction {
|
||||||
|
t.Helper()
|
||||||
|
|
||||||
|
gasPrice := big.NewInt(1)
|
||||||
|
|
||||||
// Find the "usual" transaction length without data.
|
// Find the "usual" transaction length without data.
|
||||||
// This varies depending on the data length and data content in the transaction:
|
// This varies depending on the data length and data content in the transaction:
|
||||||
// - The data length encoding varies from 0 to 5 bytes
|
// - The data length encoding varies from 0 to 5 bytes
|
||||||
// - The signature encoding varies from 3 bytes to 68 bytes depending on the data content
|
// - The signature encoding varies from 3 bytes to 68 bytes depending on the data content
|
||||||
// However, in most cases, the maximum transaction length without data is 103 bytes,
|
// However, in most cases, the maximum transaction length without data is 103 bytes,
|
||||||
// which is used as a starting point to create transactions below.
|
// which is used as a starting point to create transactions below.
|
||||||
txWithLargeData := pricedDataTransaction(0, pool.currentHead.Load().GasLimit, big.NewInt(1), key, txMaxSize)
|
txWithLargeData := pricedDataTransaction(0, gasLimit, gasPrice, key, txMaxSize)
|
||||||
usualTxLengthWithoutData := txWithLargeData.Size() - txMaxSize
|
usualTxLengthWithoutData := txWithLargeData.Size() - txMaxSize
|
||||||
|
|
||||||
makeTx := func(t *testing.T, nonce, targetSize uint64) *types.Transaction {
|
|
||||||
t.Helper()
|
|
||||||
gasLimit := pool.currentHead.Load().GasLimit
|
|
||||||
gasPrice := big.NewInt(1)
|
|
||||||
|
|
||||||
dataLength := targetSize - usualTxLengthWithoutData
|
dataLength := targetSize - usualTxLengthWithoutData
|
||||||
|
|
||||||
const tries = 68 - // 68 is the maximum signature encoding size
|
const tries = 68 - // 68 is the maximum signature encoding size
|
||||||
|
|
@ -1206,36 +1241,6 @@ func TestAllowedTxSize(t *testing.T) {
|
||||||
t.Fatalf("could not generate a transaction of size %d after %d tries",
|
t.Fatalf("could not generate a transaction of size %d after %d tries",
|
||||||
targetSize, tries)
|
targetSize, tries)
|
||||||
return nil
|
return nil
|
||||||
}
|
|
||||||
|
|
||||||
// Try adding a transaction with maximal allowed size
|
|
||||||
tx := makeTx(t, 0, txMaxSize)
|
|
||||||
if err := pool.addRemoteSync(tx); err != nil {
|
|
||||||
t.Fatalf("failed to add transaction of size %d, close to maximal: %v", int(tx.Size()), err)
|
|
||||||
}
|
|
||||||
// Try adding a transaction with random allowed size
|
|
||||||
if err := pool.addRemoteSync(makeTx(t, 1, uint64(rand.Intn(txMaxSize+1)))); err != nil {
|
|
||||||
t.Fatalf("failed to add transaction of random allowed size: %v", err)
|
|
||||||
}
|
|
||||||
// Try adding a transaction above maximum size by one
|
|
||||||
if err := pool.addRemoteSync(makeTx(t, 2, txMaxSize+1)); err == nil {
|
|
||||||
t.Fatalf("expected rejection on slightly oversize transaction")
|
|
||||||
}
|
|
||||||
// Try adding a transaction above maximum size by more than one
|
|
||||||
if err := pool.addRemoteSync(makeTx(t, 2, txMaxSize+2+uint64(rand.Intn(10*txMaxSize)))); err == nil {
|
|
||||||
t.Fatalf("expected rejection on oversize transaction")
|
|
||||||
}
|
|
||||||
// Run some sanity checks on the pool internals
|
|
||||||
pending, queued := pool.Stats()
|
|
||||||
if pending != 2 {
|
|
||||||
t.Fatalf("pending transactions mismatched: have %d, want %d", pending, 2)
|
|
||||||
}
|
|
||||||
if queued != 0 {
|
|
||||||
t.Fatalf("queued transactions mismatched: have %d, want %d", queued, 0)
|
|
||||||
}
|
|
||||||
if err := validatePoolInternals(pool); err != nil {
|
|
||||||
t.Fatalf("pool internal state corrupted: %v", err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tests that if transactions start being capped, transactions are also removed from 'all'
|
// Tests that if transactions start being capped, transactions are also removed from 'all'
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue