@@ -35,18 +35,21 @@ import (
35
35
//
36
36
// StateProcessor implements Processor.
37
37
type StateProcessor struct {
38
- config * params.ChainConfig // Chain configuration options
39
- chain * HeaderChain // Canonical header chain
38
+ chain ChainContext // Chain context interface
40
39
}
41
40
42
41
// NewStateProcessor initialises a new StateProcessor.
43
- func NewStateProcessor (config * params. ChainConfig , chain * HeaderChain ) * StateProcessor {
42
+ func NewStateProcessor (chain ChainContext ) * StateProcessor {
44
43
return & StateProcessor {
45
- config : config ,
46
- chain : chain ,
44
+ chain : chain ,
47
45
}
48
46
}
49
47
48
+ // chainConfig returns the chain configuration.
49
+ func (p * StateProcessor ) chainConfig () * params.ChainConfig {
50
+ return p .chain .Config ()
51
+ }
52
+
50
53
// Process processes the state changes according to the Ethereum rules by running
51
54
// the transaction messages using the statedb and applying any rewards to both
52
55
// the processor (coinbase) and any included uncles.
@@ -56,6 +59,7 @@ func NewStateProcessor(config *params.ChainConfig, chain *HeaderChain) *StatePro
56
59
// transactions failed to execute due to insufficient gas it will return an error.
57
60
func (p * StateProcessor ) Process (block * types.Block , statedb * state.StateDB , cfg vm.Config ) (* ProcessResult , error ) {
58
61
var (
62
+ config = p .chainConfig ()
59
63
receipts types.Receipts
60
64
usedGas = new (uint64 )
61
65
header = block .Header ()
@@ -66,12 +70,12 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg
66
70
)
67
71
68
72
// Mutate the block and state according to any hard-fork specs
69
- if p . config .DAOForkSupport && p . config .DAOForkBlock != nil && p . config .DAOForkBlock .Cmp (block .Number ()) == 0 {
73
+ if config .DAOForkSupport && config .DAOForkBlock != nil && config .DAOForkBlock .Cmp (block .Number ()) == 0 {
70
74
misc .ApplyDAOHardFork (statedb )
71
75
}
72
76
var (
73
77
context vm.BlockContext
74
- signer = types .MakeSigner (p . config , header .Number , header .Time )
78
+ signer = types .MakeSigner (config , header .Number , header .Time )
75
79
)
76
80
77
81
// Apply pre-execution system calls.
@@ -80,12 +84,12 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg
80
84
tracingStateDB = state .NewHookedState (statedb , hooks )
81
85
}
82
86
context = NewEVMBlockContext (header , p .chain , nil )
83
- evm := vm .NewEVM (context , tracingStateDB , p . config , cfg )
87
+ evm := vm .NewEVM (context , tracingStateDB , config , cfg )
84
88
85
89
if beaconRoot := block .BeaconRoot (); beaconRoot != nil {
86
90
ProcessBeaconBlockRoot (* beaconRoot , evm )
87
91
}
88
- if p . config .IsPrague (block .Number (), block .Time ()) || p . config .IsVerkle (block .Number (), block .Time ()) {
92
+ if config .IsPrague (block .Number (), block .Time ()) || config .IsVerkle (block .Number (), block .Time ()) {
89
93
ProcessParentBlockHash (block .ParentHash (), evm )
90
94
}
91
95
@@ -106,10 +110,10 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg
106
110
}
107
111
// Read requests if Prague is enabled.
108
112
var requests [][]byte
109
- if p . config .IsPrague (block .Number (), block .Time ()) {
113
+ if config .IsPrague (block .Number (), block .Time ()) {
110
114
requests = [][]byte {}
111
115
// EIP-6110
112
- if err := ParseDepositLogs (& requests , allLogs , p . config ); err != nil {
116
+ if err := ParseDepositLogs (& requests , allLogs , config ); err != nil {
113
117
return nil , fmt .Errorf ("failed to parse deposit logs: %w" , err )
114
118
}
115
119
// EIP-7002
@@ -123,7 +127,7 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg
123
127
}
124
128
125
129
// Finalize the block, applying any consensus engine specific extras (e.g. block rewards)
126
- p .chain .engine .Finalize (p .chain , header , tracingStateDB , block .Body ())
130
+ p .chain .Engine () .Finalize (p .chain , header , tracingStateDB , block .Body ())
127
131
128
132
return & ProcessResult {
129
133
Receipts : receipts ,
0 commit comments