mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-17 17:33:47 +00:00
core/types: polish
This commit is contained in:
parent
1715f60b38
commit
80db6321cc
8 changed files with 49 additions and 42 deletions
|
|
@ -304,7 +304,8 @@ func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig,
|
|||
|
||||
// Set the receipt logs and create the bloom filter.
|
||||
receipt.Logs = statedb.GetLogs(tx.Hash(), vmContext.BlockNumber.Uint64(), blockHash)
|
||||
receipt.Bloom = types.CreateBloom(types.Receipts{receipt})
|
||||
receipt.Bloom = types.CreateBloom(receipt)
|
||||
|
||||
// These three are non-consensus fields:
|
||||
//receipt.BlockHash
|
||||
//receipt.BlockNumber
|
||||
|
|
@ -376,7 +377,7 @@ func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig,
|
|||
StateRoot: root,
|
||||
TxRoot: types.DeriveSha(includedTxs, trie.NewStackTrie(nil)),
|
||||
ReceiptRoot: types.DeriveSha(receipts, trie.NewStackTrie(nil)),
|
||||
Bloom: types.CreateBloom(receipts),
|
||||
Bloom: types.MergeBloom(receipts),
|
||||
LogsHash: rlpHash(statedb.Logs()),
|
||||
Receipts: receipts,
|
||||
Rejected: rejectedTxs,
|
||||
|
|
|
|||
|
|
@ -338,7 +338,7 @@ func TestBlockReceiptStorage(t *testing.T) {
|
|||
ContractAddress: common.BytesToAddress([]byte{0x01, 0x11, 0x11}),
|
||||
GasUsed: 111111,
|
||||
}
|
||||
receipt1.Bloom = types.CreateBloom(types.Receipts{receipt1})
|
||||
receipt1.Bloom = types.CreateBloom(receipt1)
|
||||
|
||||
receipt2 := &types.Receipt{
|
||||
PostState: common.Hash{2}.Bytes(),
|
||||
|
|
@ -351,7 +351,7 @@ func TestBlockReceiptStorage(t *testing.T) {
|
|||
ContractAddress: common.BytesToAddress([]byte{0x02, 0x22, 0x22}),
|
||||
GasUsed: 222222,
|
||||
}
|
||||
receipt2.Bloom = types.CreateBloom(types.Receipts{receipt2})
|
||||
receipt2.Bloom = types.CreateBloom(receipt2)
|
||||
receipts := []*types.Receipt{receipt1, receipt2}
|
||||
|
||||
// Check that no receipt entries are in a pristine database
|
||||
|
|
@ -679,7 +679,7 @@ func TestReadLogs(t *testing.T) {
|
|||
ContractAddress: common.BytesToAddress([]byte{0x01, 0x11, 0x11}),
|
||||
GasUsed: 111111,
|
||||
}
|
||||
receipt1.Bloom = types.CreateBloom(types.Receipts{receipt1})
|
||||
receipt1.Bloom = types.CreateBloom(receipt1)
|
||||
|
||||
receipt2 := &types.Receipt{
|
||||
PostState: common.Hash{2}.Bytes(),
|
||||
|
|
@ -692,7 +692,7 @@ func TestReadLogs(t *testing.T) {
|
|||
ContractAddress: common.BytesToAddress([]byte{0x02, 0x22, 0x22}),
|
||||
GasUsed: 222222,
|
||||
}
|
||||
receipt2.Bloom = types.CreateBloom(types.Receipts{receipt2})
|
||||
receipt2.Bloom = types.CreateBloom(receipt2)
|
||||
receipts := []*types.Receipt{receipt1, receipt2}
|
||||
|
||||
hash := common.BytesToHash([]byte{0x03, 0x14})
|
||||
|
|
|
|||
|
|
@ -189,7 +189,7 @@ func MakeReceipt(evm *vm.EVM, result *ExecutionResult, statedb *state.StateDB, b
|
|||
|
||||
// Set the receipt logs and create the bloom filter.
|
||||
receipt.Logs = statedb.GetLogs(tx.Hash(), blockNumber.Uint64(), blockHash)
|
||||
receipt.Bloom = types.CreateBloom(types.Receipts{receipt})
|
||||
receipt.Bloom = types.CreateBloom(receipt)
|
||||
receipt.BlockHash = blockHash
|
||||
receipt.BlockNumber = blockNumber
|
||||
receipt.TransactionIndex = uint(statedb.TxIndex())
|
||||
|
|
|
|||
|
|
@ -100,10 +100,28 @@ func (b *Bloom) UnmarshalText(input []byte) error {
|
|||
return hexutil.UnmarshalFixedText("Bloom", input, b[:])
|
||||
}
|
||||
|
||||
// CreateBloom creates a bloom filter out of the give Receipts (+Logs)
|
||||
func CreateBloom(receipts Receipts) Bloom {
|
||||
buf := make([]byte, 6)
|
||||
var bin Bloom
|
||||
// CreateBloom creates a bloom filter out of the give Receipt (+Logs)
|
||||
func CreateBloom(receipt *Receipt) Bloom {
|
||||
var (
|
||||
bin Bloom
|
||||
buf = make([]byte, 6)
|
||||
)
|
||||
for _, log := range receipt.Logs {
|
||||
bin.add(log.Address.Bytes(), buf)
|
||||
for _, b := range log.Topics {
|
||||
bin.add(b[:], buf)
|
||||
}
|
||||
}
|
||||
return bin
|
||||
}
|
||||
|
||||
// CreateBlooms creates a bloom filter out of the give Receipts (+Logs).
|
||||
// This function is just for benchmarking.
|
||||
func CreateBlooms(receipts []*Receipt) Bloom {
|
||||
var (
|
||||
bin Bloom
|
||||
buf = make([]byte, 6)
|
||||
)
|
||||
for _, receipt := range receipts {
|
||||
for _, log := range receipt.Logs {
|
||||
bin.add(log.Address.Bytes(), buf)
|
||||
|
|
@ -115,9 +133,9 @@ func CreateBloom(receipts Receipts) Bloom {
|
|||
return bin
|
||||
}
|
||||
|
||||
// MergeBloom merges the already calculated bloom in Receipts
|
||||
// without recalculating. So it assumes receipt.Bloom is populated
|
||||
// with the correct bloom already.
|
||||
// MergeBloom merges the precomputed bloom filters in the Receipts without
|
||||
// recalculating them. It assumes that each receipt’s Bloom field is already
|
||||
// correctly populated.
|
||||
func MergeBloom(receipts Receipts) Bloom {
|
||||
var bin Bloom
|
||||
for _, receipt := range receipts {
|
||||
|
|
@ -128,23 +146,9 @@ func MergeBloom(receipts Receipts) Bloom {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
return bin
|
||||
}
|
||||
|
||||
// LogsBloom returns the bloom bytes for the given logs
|
||||
func LogsBloom(logs []*Log) []byte {
|
||||
buf := make([]byte, 6)
|
||||
var bin Bloom
|
||||
for _, log := range logs {
|
||||
bin.add(log.Address.Bytes(), buf)
|
||||
for _, b := range log.Topics {
|
||||
bin.add(b[:], buf)
|
||||
}
|
||||
}
|
||||
return bin[:]
|
||||
}
|
||||
|
||||
// Bloom9 returns the bloom filter for the given data
|
||||
func Bloom9(data []byte) []byte {
|
||||
var b Bloom
|
||||
|
|
|
|||
|
|
@ -130,7 +130,7 @@ func BenchmarkCreateBloom(b *testing.B) {
|
|||
b.ReportAllocs()
|
||||
var bl Bloom
|
||||
for i := 0; i < b.N; i++ {
|
||||
bl = CreateBloom(rSmall)
|
||||
bl = CreateBlooms(rSmall)
|
||||
}
|
||||
b.StopTimer()
|
||||
var exp = common.HexToHash("c384c56ece49458a427c67b90fefe979ebf7104795be65dc398b280f24104949")
|
||||
|
|
@ -143,7 +143,7 @@ func BenchmarkCreateBloom(b *testing.B) {
|
|||
b.ReportAllocs()
|
||||
var bl Bloom
|
||||
for i := 0; i < b.N; i++ {
|
||||
bl = CreateBloom(rLarge)
|
||||
bl = CreateBlooms(rLarge)
|
||||
}
|
||||
b.StopTimer()
|
||||
var exp = common.HexToHash("c384c56ece49458a427c67b90fefe979ebf7104795be65dc398b280f24104949")
|
||||
|
|
@ -154,15 +154,16 @@ func BenchmarkCreateBloom(b *testing.B) {
|
|||
})
|
||||
b.Run("small-mergebloom", func(b *testing.B) {
|
||||
for _, receipt := range rSmall {
|
||||
receipt.Bloom = CreateBloom(Receipts{receipt})
|
||||
receipt.Bloom = CreateBloom(receipt)
|
||||
}
|
||||
|
||||
b.ReportAllocs()
|
||||
|
||||
var bl Bloom
|
||||
for i := 0; i < b.N; i++ {
|
||||
bl = MergeBloom(rSmall)
|
||||
}
|
||||
b.StopTimer()
|
||||
|
||||
var exp = common.HexToHash("c384c56ece49458a427c67b90fefe979ebf7104795be65dc398b280f24104949")
|
||||
got := crypto.Keccak256Hash(bl.Bytes())
|
||||
if got != exp {
|
||||
|
|
@ -171,15 +172,16 @@ func BenchmarkCreateBloom(b *testing.B) {
|
|||
})
|
||||
b.Run("large-mergebloom", func(b *testing.B) {
|
||||
for _, receipt := range rLarge {
|
||||
receipt.Bloom = CreateBloom(Receipts{receipt})
|
||||
receipt.Bloom = CreateBloom(receipt)
|
||||
}
|
||||
|
||||
b.ReportAllocs()
|
||||
|
||||
var bl Bloom
|
||||
for i := 0; i < b.N; i++ {
|
||||
bl = MergeBloom(rLarge)
|
||||
}
|
||||
b.StopTimer()
|
||||
|
||||
var exp = common.HexToHash("c384c56ece49458a427c67b90fefe979ebf7104795be65dc398b280f24104949")
|
||||
got := crypto.Keccak256Hash(bl.Bytes())
|
||||
if got != exp {
|
||||
|
|
|
|||
|
|
@ -291,7 +291,7 @@ func (r *ReceiptForStorage) DecodeRLP(s *rlp.Stream) error {
|
|||
}
|
||||
r.CumulativeGasUsed = stored.CumulativeGasUsed
|
||||
r.Logs = stored.Logs
|
||||
r.Bloom = CreateBloom(Receipts{(*Receipt)(r)})
|
||||
r.Bloom = CreateBloom((*Receipt)(r))
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -394,7 +394,7 @@ func TestTypedReceiptEncodingDecoding(t *testing.T) {
|
|||
|
||||
func TestReceiptMarshalBinary(t *testing.T) {
|
||||
// Legacy Receipt
|
||||
legacyReceipt.Bloom = CreateBloom(Receipts{legacyReceipt})
|
||||
legacyReceipt.Bloom = CreateBloom(legacyReceipt)
|
||||
have, err := legacyReceipt.MarshalBinary()
|
||||
if err != nil {
|
||||
t.Fatalf("marshal binary error: %v", err)
|
||||
|
|
@ -421,7 +421,7 @@ func TestReceiptMarshalBinary(t *testing.T) {
|
|||
|
||||
// 2930 Receipt
|
||||
buf.Reset()
|
||||
accessListReceipt.Bloom = CreateBloom(Receipts{accessListReceipt})
|
||||
accessListReceipt.Bloom = CreateBloom(accessListReceipt)
|
||||
have, err = accessListReceipt.MarshalBinary()
|
||||
if err != nil {
|
||||
t.Fatalf("marshal binary error: %v", err)
|
||||
|
|
@ -439,7 +439,7 @@ func TestReceiptMarshalBinary(t *testing.T) {
|
|||
|
||||
// 1559 Receipt
|
||||
buf.Reset()
|
||||
eip1559Receipt.Bloom = CreateBloom(Receipts{eip1559Receipt})
|
||||
eip1559Receipt.Bloom = CreateBloom(eip1559Receipt)
|
||||
have, err = eip1559Receipt.MarshalBinary()
|
||||
if err != nil {
|
||||
t.Fatalf("marshal binary error: %v", err)
|
||||
|
|
@ -463,7 +463,7 @@ func TestReceiptUnmarshalBinary(t *testing.T) {
|
|||
if err := gotLegacyReceipt.UnmarshalBinary(legacyBinary); err != nil {
|
||||
t.Fatalf("unmarshal binary error: %v", err)
|
||||
}
|
||||
legacyReceipt.Bloom = CreateBloom(Receipts{legacyReceipt})
|
||||
legacyReceipt.Bloom = CreateBloom(legacyReceipt)
|
||||
if !reflect.DeepEqual(gotLegacyReceipt, legacyReceipt) {
|
||||
t.Errorf("receipt unmarshalled from binary mismatch, got %v want %v", gotLegacyReceipt, legacyReceipt)
|
||||
}
|
||||
|
|
@ -474,7 +474,7 @@ func TestReceiptUnmarshalBinary(t *testing.T) {
|
|||
if err := gotAccessListReceipt.UnmarshalBinary(accessListBinary); err != nil {
|
||||
t.Fatalf("unmarshal binary error: %v", err)
|
||||
}
|
||||
accessListReceipt.Bloom = CreateBloom(Receipts{accessListReceipt})
|
||||
accessListReceipt.Bloom = CreateBloom(accessListReceipt)
|
||||
if !reflect.DeepEqual(gotAccessListReceipt, accessListReceipt) {
|
||||
t.Errorf("receipt unmarshalled from binary mismatch, got %v want %v", gotAccessListReceipt, accessListReceipt)
|
||||
}
|
||||
|
|
@ -485,7 +485,7 @@ func TestReceiptUnmarshalBinary(t *testing.T) {
|
|||
if err := got1559Receipt.UnmarshalBinary(eip1559RctBinary); err != nil {
|
||||
t.Fatalf("unmarshal binary error: %v", err)
|
||||
}
|
||||
eip1559Receipt.Bloom = CreateBloom(Receipts{eip1559Receipt})
|
||||
eip1559Receipt.Bloom = CreateBloom(eip1559Receipt)
|
||||
if !reflect.DeepEqual(got1559Receipt, eip1559Receipt) {
|
||||
t.Errorf("receipt unmarshalled from binary mismatch, got %v want %v", got1559Receipt, eip1559Receipt)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ func makeReceipt(addr common.Address) *types.Receipt {
|
|||
receipt.Logs = []*types.Log{
|
||||
{Address: addr},
|
||||
}
|
||||
receipt.Bloom = types.CreateBloom(types.Receipts{receipt})
|
||||
receipt.Bloom = types.CreateBloom(receipt)
|
||||
return receipt
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue