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