parlia: add state prepare for internal SC transaction (#2272)
This commit is contained in:
parent
a4b436806e
commit
e4ddf5881b
@ -1988,16 +1988,19 @@ func applyMessage(
|
|||||||
chainConfig *params.ChainConfig,
|
chainConfig *params.ChainConfig,
|
||||||
chainContext core.ChainContext,
|
chainContext core.ChainContext,
|
||||||
) (uint64, error) {
|
) (uint64, error) {
|
||||||
// TODO(Nathan): state.Prepare should be called here, now accessList related EIP not affect systemtxs
|
|
||||||
// EIP1153 may cause a critical issue in the future
|
|
||||||
// Create a new context to be used in the EVM environment
|
// Create a new context to be used in the EVM environment
|
||||||
context := core.NewEVMBlockContext(header, chainContext, nil)
|
context := core.NewEVMBlockContext(header, chainContext, nil)
|
||||||
// Create a new environment which holds all relevant information
|
// Create a new environment which holds all relevant information
|
||||||
// about the transaction and calling mechanisms.
|
// about the transaction and calling mechanisms.
|
||||||
vmenv := vm.NewEVM(context, vm.TxContext{Origin: msg.From(), GasPrice: big.NewInt(0)}, state, chainConfig, vm.Config{})
|
vmenv := vm.NewEVM(context, vm.TxContext{Origin: msg.From(), GasPrice: big.NewInt(0)}, state, chainConfig, vm.Config{})
|
||||||
// Apply the transaction to the current state (included in the env)
|
// Apply the transaction to the current state (included in the env)
|
||||||
|
if chainConfig.IsCancun(header.Number, header.Time) {
|
||||||
|
rules := vmenv.ChainConfig().Rules(vmenv.Context.BlockNumber, vmenv.Context.Random != nil, vmenv.Context.Time)
|
||||||
|
state.Prepare(rules, msg.From(), vmenv.Context.Coinbase, msg.To(), vm.ActivePrecompiles(rules), msg.AccessList)
|
||||||
|
}
|
||||||
// Increment the nonce for the next transaction
|
// Increment the nonce for the next transaction
|
||||||
state.SetNonce(msg.From(), state.GetNonce(msg.From())+1)
|
state.SetNonce(msg.From(), state.GetNonce(msg.From())+1)
|
||||||
|
|
||||||
ret, returnGas, err := vmenv.Call(
|
ret, returnGas, err := vmenv.Call(
|
||||||
vm.AccountRef(msg.From()),
|
vm.AccountRef(msg.From()),
|
||||||
*msg.To(),
|
*msg.To(),
|
||||||
|
Loading…
Reference in New Issue
Block a user