|
|
|
@ -75,7 +75,7 @@ var ( |
|
|
|
|
// This is the content of the genesis block used by the benchmarks.
|
|
|
|
|
benchRootKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") |
|
|
|
|
benchRootAddr = crypto.PubkeyToAddress(benchRootKey.PublicKey) |
|
|
|
|
benchRootFunds = math.BigPow(2, 100) |
|
|
|
|
benchRootFunds = math.BigPow(2, 200) |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
// genValueTx returns a block generator that includes a single
|
|
|
|
@ -86,7 +86,19 @@ func genValueTx(nbytes int) func(int, *BlockGen) { |
|
|
|
|
toaddr := common.Address{} |
|
|
|
|
data := make([]byte, nbytes) |
|
|
|
|
gas, _ := IntrinsicGas(data, nil, false, false, false) |
|
|
|
|
tx, _ := types.SignTx(types.NewTransaction(gen.TxNonce(benchRootAddr), toaddr, big.NewInt(1), gas, nil, data), types.HomesteadSigner{}, benchRootKey) |
|
|
|
|
signer := types.MakeSigner(gen.config, big.NewInt(int64(i))) |
|
|
|
|
gasPrice := big.NewInt(0) |
|
|
|
|
if gen.header.BaseFee != nil { |
|
|
|
|
gasPrice = gen.header.BaseFee |
|
|
|
|
} |
|
|
|
|
tx, _ := types.SignNewTx(benchRootKey, signer, &types.LegacyTx{ |
|
|
|
|
Nonce: gen.TxNonce(benchRootAddr), |
|
|
|
|
To: &toaddr, |
|
|
|
|
Value: big.NewInt(1), |
|
|
|
|
Gas: gas, |
|
|
|
|
Data: data, |
|
|
|
|
GasPrice: gasPrice, |
|
|
|
|
}) |
|
|
|
|
gen.AddTx(tx) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -110,24 +122,38 @@ func init() { |
|
|
|
|
// and fills the blocks with many small transactions.
|
|
|
|
|
func genTxRing(naccounts int) func(int, *BlockGen) { |
|
|
|
|
from := 0 |
|
|
|
|
availableFunds := new(big.Int).Set(benchRootFunds) |
|
|
|
|
return func(i int, gen *BlockGen) { |
|
|
|
|
block := gen.PrevBlock(i - 1) |
|
|
|
|
gas := block.GasLimit() |
|
|
|
|
gasPrice := big.NewInt(0) |
|
|
|
|
if gen.header.BaseFee != nil { |
|
|
|
|
gasPrice = gen.header.BaseFee |
|
|
|
|
} |
|
|
|
|
signer := types.MakeSigner(gen.config, big.NewInt(int64(i))) |
|
|
|
|
for { |
|
|
|
|
gas -= params.TxGas |
|
|
|
|
if gas < params.TxGas { |
|
|
|
|
break |
|
|
|
|
} |
|
|
|
|
to := (from + 1) % naccounts |
|
|
|
|
tx := types.NewTransaction( |
|
|
|
|
gen.TxNonce(ringAddrs[from]), |
|
|
|
|
ringAddrs[to], |
|
|
|
|
benchRootFunds, |
|
|
|
|
params.TxGas, |
|
|
|
|
nil, |
|
|
|
|
nil, |
|
|
|
|
) |
|
|
|
|
tx, _ = types.SignTx(tx, types.HomesteadSigner{}, ringKeys[from]) |
|
|
|
|
burn := new(big.Int).SetUint64(params.TxGas) |
|
|
|
|
burn.Mul(burn, gen.header.BaseFee) |
|
|
|
|
availableFunds.Sub(availableFunds, burn) |
|
|
|
|
if availableFunds.Cmp(big.NewInt(1)) < 0 { |
|
|
|
|
panic("not enough funds") |
|
|
|
|
} |
|
|
|
|
tx, err := types.SignNewTx(ringKeys[from], signer, |
|
|
|
|
&types.LegacyTx{ |
|
|
|
|
Nonce: gen.TxNonce(ringAddrs[from]), |
|
|
|
|
To: &ringAddrs[to], |
|
|
|
|
Value: availableFunds, |
|
|
|
|
Gas: params.TxGas, |
|
|
|
|
GasPrice: gasPrice, |
|
|
|
|
}) |
|
|
|
|
if err != nil { |
|
|
|
|
panic(err) |
|
|
|
|
} |
|
|
|
|
gen.AddTx(tx) |
|
|
|
|
from = to |
|
|
|
|
} |
|
|
|
@ -245,6 +271,7 @@ func makeChainForBench(db ethdb.Database, full bool, count uint64) { |
|
|
|
|
block := types.NewBlockWithHeader(header) |
|
|
|
|
rawdb.WriteBody(db, hash, n, block.Body()) |
|
|
|
|
rawdb.WriteReceipts(db, hash, n, nil) |
|
|
|
|
rawdb.WriteHeadBlockHash(db, hash) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -278,6 +305,8 @@ func benchReadChain(b *testing.B, full bool, count uint64) { |
|
|
|
|
} |
|
|
|
|
makeChainForBench(db, full, count) |
|
|
|
|
db.Close() |
|
|
|
|
cacheConfig := *defaultCacheConfig |
|
|
|
|
cacheConfig.TrieDirtyDisabled = true |
|
|
|
|
|
|
|
|
|
b.ReportAllocs() |
|
|
|
|
b.ResetTimer() |
|
|
|
@ -287,7 +316,7 @@ func benchReadChain(b *testing.B, full bool, count uint64) { |
|
|
|
|
if err != nil { |
|
|
|
|
b.Fatalf("error opening database at %v: %v", dir, err) |
|
|
|
|
} |
|
|
|
|
chain, err := NewBlockChain(db, nil, params.TestChainConfig, ethash.NewFaker(), vm.Config{}, nil, nil) |
|
|
|
|
chain, err := NewBlockChain(db, &cacheConfig, params.TestChainConfig, ethash.NewFaker(), vm.Config{}, nil, nil) |
|
|
|
|
if err != nil { |
|
|
|
|
b.Fatalf("error creating chain: %v", err) |
|
|
|
|
} |
|
|
|
|