all: exclude empty outputs in requests commitment (#30670)
Implements changes from these spec PRs: - https://github.com/ethereum/EIPs/pull/8989 - https://github.com/ethereum/execution-apis/pull/599
This commit is contained in:
parent
2406305175
commit
db8eed860d
|
@ -265,15 +265,7 @@ func ExecutableDataToBlockNoHash(data ExecutableData, versionedHashes []common.H
|
||||||
|
|
||||||
var requestsHash *common.Hash
|
var requestsHash *common.Hash
|
||||||
if requests != nil {
|
if requests != nil {
|
||||||
// Put back request type byte.
|
h := types.CalcRequestsHash(requests)
|
||||||
typedRequests := make([][]byte, len(requests))
|
|
||||||
for i, reqdata := range requests {
|
|
||||||
typedReqdata := make([]byte, len(reqdata)+1)
|
|
||||||
typedReqdata[0] = byte(i)
|
|
||||||
copy(typedReqdata[1:], reqdata)
|
|
||||||
typedRequests[i] = typedReqdata
|
|
||||||
}
|
|
||||||
h := types.CalcRequestsHash(typedRequests)
|
|
||||||
requestsHash = &h
|
requestsHash = &h
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -343,20 +335,11 @@ func BlockToExecutableData(block *types.Block, fees *big.Int, sidecars []*types.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove type byte in requests.
|
|
||||||
var plainRequests [][]byte
|
|
||||||
if requests != nil {
|
|
||||||
plainRequests = make([][]byte, len(requests))
|
|
||||||
for i, reqdata := range requests {
|
|
||||||
plainRequests[i] = reqdata[1:]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return &ExecutionPayloadEnvelope{
|
return &ExecutionPayloadEnvelope{
|
||||||
ExecutionPayload: data,
|
ExecutionPayload: data,
|
||||||
BlockValue: fees,
|
BlockValue: fees,
|
||||||
BlobsBundle: &bundle,
|
BlobsBundle: &bundle,
|
||||||
Requests: plainRequests,
|
Requests: requests,
|
||||||
Override: false,
|
Override: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -366,21 +366,19 @@ func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig,
|
||||||
// Gather the execution-layer triggered requests.
|
// Gather the execution-layer triggered requests.
|
||||||
var requests [][]byte
|
var requests [][]byte
|
||||||
if chainConfig.IsPrague(vmContext.BlockNumber, vmContext.Time) {
|
if chainConfig.IsPrague(vmContext.BlockNumber, vmContext.Time) {
|
||||||
// EIP-6110 deposits
|
requests = [][]byte{}
|
||||||
|
// EIP-6110
|
||||||
var allLogs []*types.Log
|
var allLogs []*types.Log
|
||||||
for _, receipt := range receipts {
|
for _, receipt := range receipts {
|
||||||
allLogs = append(allLogs, receipt.Logs...)
|
allLogs = append(allLogs, receipt.Logs...)
|
||||||
}
|
}
|
||||||
depositRequests, err := core.ParseDepositLogs(allLogs, chainConfig)
|
if err := core.ParseDepositLogs(&requests, allLogs, chainConfig); err != nil {
|
||||||
if err != nil {
|
|
||||||
return nil, nil, nil, NewError(ErrorEVM, fmt.Errorf("could not parse requests logs: %v", err))
|
return nil, nil, nil, NewError(ErrorEVM, fmt.Errorf("could not parse requests logs: %v", err))
|
||||||
}
|
}
|
||||||
requests = append(requests, depositRequests)
|
// EIP-7002
|
||||||
|
core.ProcessWithdrawalQueue(&requests, evm)
|
||||||
// EIP-7002 withdrawals
|
// EIP-7251
|
||||||
requests = append(requests, core.ProcessWithdrawalQueue(evm))
|
core.ProcessConsolidationQueue(&requests, evm)
|
||||||
// EIP-7251 consolidations
|
|
||||||
requests = append(requests, core.ProcessConsolidationQueue(evm))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Commit block
|
// Commit block
|
||||||
|
|
|
@ -349,25 +349,22 @@ func GenerateChain(config *params.ChainConfig, parent *types.Block, engine conse
|
||||||
|
|
||||||
var requests [][]byte
|
var requests [][]byte
|
||||||
if config.IsPrague(b.header.Number, b.header.Time) {
|
if config.IsPrague(b.header.Number, b.header.Time) {
|
||||||
|
requests = [][]byte{}
|
||||||
// EIP-6110 deposits
|
// EIP-6110 deposits
|
||||||
var blockLogs []*types.Log
|
var blockLogs []*types.Log
|
||||||
for _, r := range b.receipts {
|
for _, r := range b.receipts {
|
||||||
blockLogs = append(blockLogs, r.Logs...)
|
blockLogs = append(blockLogs, r.Logs...)
|
||||||
}
|
}
|
||||||
depositRequests, err := ParseDepositLogs(blockLogs, config)
|
if err := ParseDepositLogs(&requests, blockLogs, config); err != nil {
|
||||||
if err != nil {
|
|
||||||
panic(fmt.Sprintf("failed to parse deposit log: %v", err))
|
panic(fmt.Sprintf("failed to parse deposit log: %v", err))
|
||||||
}
|
}
|
||||||
requests = append(requests, depositRequests)
|
|
||||||
// create EVM for system calls
|
// create EVM for system calls
|
||||||
blockContext := NewEVMBlockContext(b.header, cm, &b.header.Coinbase)
|
blockContext := NewEVMBlockContext(b.header, cm, &b.header.Coinbase)
|
||||||
evm := vm.NewEVM(blockContext, statedb, cm.config, vm.Config{})
|
evm := vm.NewEVM(blockContext, statedb, cm.config, vm.Config{})
|
||||||
// EIP-7002 withdrawals
|
// EIP-7002
|
||||||
withdrawalRequests := ProcessWithdrawalQueue(evm)
|
ProcessWithdrawalQueue(&requests, evm)
|
||||||
requests = append(requests, withdrawalRequests)
|
// EIP-7251
|
||||||
// EIP-7251 consolidations
|
ProcessConsolidationQueue(&requests, evm)
|
||||||
consolidationRequests := ProcessConsolidationQueue(evm)
|
|
||||||
requests = append(requests, consolidationRequests)
|
|
||||||
}
|
}
|
||||||
if requests != nil {
|
if requests != nil {
|
||||||
reqHash := types.CalcRequestsHash(requests)
|
reqHash := types.CalcRequestsHash(requests)
|
||||||
|
|
|
@ -472,9 +472,7 @@ func (g *Genesis) toBlockWithRoot(root common.Hash) *types.Block {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if conf.IsPrague(num, g.Timestamp) {
|
if conf.IsPrague(num, g.Timestamp) {
|
||||||
emptyRequests := [][]byte{{0x00}, {0x01}, {0x02}}
|
head.RequestsHash = &types.EmptyRequestsHash
|
||||||
rhash := types.CalcRequestsHash(emptyRequests)
|
|
||||||
head.RequestsHash = &rhash
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return types.NewBlock(head, &types.Body{Withdrawals: withdrawals}, nil, trie.NewStackTrie(nil))
|
return types.NewBlock(head, &types.Body{Withdrawals: withdrawals}, nil, trie.NewStackTrie(nil))
|
||||||
|
|
|
@ -106,18 +106,15 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg
|
||||||
// Read requests if Prague is enabled.
|
// Read requests if Prague is enabled.
|
||||||
var requests [][]byte
|
var requests [][]byte
|
||||||
if p.config.IsPrague(block.Number(), block.Time()) {
|
if p.config.IsPrague(block.Number(), block.Time()) {
|
||||||
// EIP-6110 deposits
|
requests = [][]byte{}
|
||||||
depositRequests, err := ParseDepositLogs(allLogs, p.config)
|
// EIP-6110
|
||||||
if err != nil {
|
if err := ParseDepositLogs(&requests, allLogs, p.config); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
requests = append(requests, depositRequests)
|
// EIP-7002
|
||||||
// EIP-7002 withdrawals
|
ProcessWithdrawalQueue(&requests, evm)
|
||||||
withdrawalRequests := ProcessWithdrawalQueue(evm)
|
// EIP-7251
|
||||||
requests = append(requests, withdrawalRequests)
|
ProcessConsolidationQueue(&requests, evm)
|
||||||
// EIP-7251 consolidations
|
|
||||||
consolidationRequests := ProcessConsolidationQueue(evm)
|
|
||||||
requests = append(requests, consolidationRequests)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Finalize the block, applying any consensus engine specific extras (e.g. block rewards)
|
// Finalize the block, applying any consensus engine specific extras (e.g. block rewards)
|
||||||
|
@ -271,17 +268,17 @@ func ProcessParentBlockHash(prevHash common.Hash, evm *vm.EVM) {
|
||||||
|
|
||||||
// ProcessWithdrawalQueue calls the EIP-7002 withdrawal queue contract.
|
// ProcessWithdrawalQueue calls the EIP-7002 withdrawal queue contract.
|
||||||
// It returns the opaque request data returned by the contract.
|
// It returns the opaque request data returned by the contract.
|
||||||
func ProcessWithdrawalQueue(evm *vm.EVM) []byte {
|
func ProcessWithdrawalQueue(requests *[][]byte, evm *vm.EVM) {
|
||||||
return processRequestsSystemCall(evm, 0x01, params.WithdrawalQueueAddress)
|
processRequestsSystemCall(requests, evm, 0x01, params.WithdrawalQueueAddress)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ProcessConsolidationQueue calls the EIP-7251 consolidation queue contract.
|
// ProcessConsolidationQueue calls the EIP-7251 consolidation queue contract.
|
||||||
// It returns the opaque request data returned by the contract.
|
// It returns the opaque request data returned by the contract.
|
||||||
func ProcessConsolidationQueue(evm *vm.EVM) []byte {
|
func ProcessConsolidationQueue(requests *[][]byte, evm *vm.EVM) {
|
||||||
return processRequestsSystemCall(evm, 0x02, params.ConsolidationQueueAddress)
|
processRequestsSystemCall(requests, evm, 0x02, params.ConsolidationQueueAddress)
|
||||||
}
|
}
|
||||||
|
|
||||||
func processRequestsSystemCall(evm *vm.EVM, requestType byte, addr common.Address) []byte {
|
func processRequestsSystemCall(requests *[][]byte, evm *vm.EVM, requestType byte, addr common.Address) {
|
||||||
if tracer := evm.Config.Tracer; tracer != nil {
|
if tracer := evm.Config.Tracer; tracer != nil {
|
||||||
if tracer.OnSystemCallStart != nil {
|
if tracer.OnSystemCallStart != nil {
|
||||||
tracer.OnSystemCallStart()
|
tracer.OnSystemCallStart()
|
||||||
|
@ -302,26 +299,32 @@ func processRequestsSystemCall(evm *vm.EVM, requestType byte, addr common.Addres
|
||||||
evm.StateDB.AddAddressToAccessList(addr)
|
evm.StateDB.AddAddressToAccessList(addr)
|
||||||
ret, _, _ := evm.Call(vm.AccountRef(msg.From), *msg.To, msg.Data, 30_000_000, common.U2560)
|
ret, _, _ := evm.Call(vm.AccountRef(msg.From), *msg.To, msg.Data, 30_000_000, common.U2560)
|
||||||
evm.StateDB.Finalise(true)
|
evm.StateDB.Finalise(true)
|
||||||
|
if len(ret) == 0 {
|
||||||
|
return // skip empty output
|
||||||
|
}
|
||||||
|
|
||||||
// Create withdrawals requestsData with prefix 0x01
|
// Append prefixed requestsData to the requests list.
|
||||||
requestsData := make([]byte, len(ret)+1)
|
requestsData := make([]byte, len(ret)+1)
|
||||||
requestsData[0] = requestType
|
requestsData[0] = requestType
|
||||||
copy(requestsData[1:], ret)
|
copy(requestsData[1:], ret)
|
||||||
return requestsData
|
*requests = append(*requests, requestsData)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ParseDepositLogs extracts the EIP-6110 deposit values from logs emitted by
|
// ParseDepositLogs extracts the EIP-6110 deposit values from logs emitted by
|
||||||
// BeaconDepositContract.
|
// BeaconDepositContract.
|
||||||
func ParseDepositLogs(logs []*types.Log, config *params.ChainConfig) ([]byte, error) {
|
func ParseDepositLogs(requests *[][]byte, logs []*types.Log, config *params.ChainConfig) error {
|
||||||
deposits := make([]byte, 1) // note: first byte is 0x00 (== deposit request type)
|
deposits := make([]byte, 1) // note: first byte is 0x00 (== deposit request type)
|
||||||
for _, log := range logs {
|
for _, log := range logs {
|
||||||
if log.Address == config.DepositContractAddress {
|
if log.Address == config.DepositContractAddress {
|
||||||
request, err := types.DepositLogToRequest(log.Data)
|
request, err := types.DepositLogToRequest(log.Data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("unable to parse deposit data: %v", err)
|
return fmt.Errorf("unable to parse deposit data: %v", err)
|
||||||
}
|
}
|
||||||
deposits = append(deposits, request...)
|
deposits = append(deposits, request...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return deposits, nil
|
if len(deposits) > 1 {
|
||||||
|
*requests = append(*requests, deposits)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,9 @@ var (
|
||||||
// EmptyWithdrawalsHash is the known hash of the empty withdrawal set.
|
// EmptyWithdrawalsHash is the known hash of the empty withdrawal set.
|
||||||
EmptyWithdrawalsHash = common.HexToHash("56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421")
|
EmptyWithdrawalsHash = common.HexToHash("56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421")
|
||||||
|
|
||||||
|
// EmptyRequestsHash is the known hash of an empty request set, sha256("").
|
||||||
|
EmptyRequestsHash = common.HexToHash("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")
|
||||||
|
|
||||||
// EmptyVerkleHash is the known hash of an empty verkle trie.
|
// EmptyVerkleHash is the known hash of an empty verkle trie.
|
||||||
EmptyVerkleHash = common.Hash{}
|
EmptyVerkleHash = common.Hash{}
|
||||||
)
|
)
|
||||||
|
|
|
@ -86,7 +86,7 @@ func TestSupplyOmittedFields(t *testing.T) {
|
||||||
|
|
||||||
expected := supplyInfo{
|
expected := supplyInfo{
|
||||||
Number: 0,
|
Number: 0,
|
||||||
Hash: common.HexToHash("0xc02ee8ee5b54a40e43f0fa827d431e1bd4f217e941790dda10b2521d1925a20b"),
|
Hash: common.HexToHash("0x3055fc27d6b4a08eb07033a0d1ee755a4b2988086f28a6189eac1b507525eeb1"),
|
||||||
ParentHash: common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
ParentHash: common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000"),
|
||||||
}
|
}
|
||||||
actual := out[expected.Number]
|
actual := out[expected.Number]
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
{
|
{
|
||||||
"blobGasPrice": "0x1",
|
"blobGasPrice": "0x1",
|
||||||
"blobGasUsed": "0x20000",
|
"blobGasUsed": "0x20000",
|
||||||
"blockHash": "0x11e6318d77a45c01f89f76b56d36c6936c5250f4e2bd238cb7b09df73cf0cb7d",
|
"blockHash": "0x17124e31fb075a301b1d7d4135683b0a09fe4e6d453c54e2e734d5ee00744a49",
|
||||||
"blockNumber": "0x6",
|
"blockNumber": "0x6",
|
||||||
"contractAddress": null,
|
"contractAddress": null,
|
||||||
"cumulativeGasUsed": "0x5208",
|
"cumulativeGasUsed": "0x5208",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"blockHash": "0x5526cd89bc188f20fd5e9bb50d8054dc5a51a81a74ed07eacf36a4a8b10de4b1",
|
"blockHash": "0xb3e447c77374fd285964cba692e96b1673a88a959726826b5b6e2dca15472b0a",
|
||||||
"blockNumber": "0x2",
|
"blockNumber": "0x2",
|
||||||
"contractAddress": "0xae9bea628c4ce503dcfd7e305cab4e29e7476592",
|
"contractAddress": "0xae9bea628c4ce503dcfd7e305cab4e29e7476592",
|
||||||
"cumulativeGasUsed": "0xcf50",
|
"cumulativeGasUsed": "0xcf50",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"blockHash": "0x3e946aa9e252873af511b257d9d89a1bcafa54ce7c6a6442f8407ecdf81e288d",
|
"blockHash": "0x102e50de30318ee99a03a09db74387e79cad3165bf6840cc84249806a2a302f3",
|
||||||
"blockNumber": "0x4",
|
"blockNumber": "0x4",
|
||||||
"contractAddress": null,
|
"contractAddress": null,
|
||||||
"cumulativeGasUsed": "0x538d",
|
"cumulativeGasUsed": "0x538d",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"blockHash": "0xc281d4299fc4e8ce5bba7ecb8deb50f5403d604c806b36aa887dfe2ff84c064f",
|
"blockHash": "0xcc6225bf39327429a3d869af71182d619a354155187d0b5a8ecd6a9309cffcaa",
|
||||||
"blockNumber": "0x3",
|
"blockNumber": "0x3",
|
||||||
"contractAddress": null,
|
"contractAddress": null,
|
||||||
"cumulativeGasUsed": "0x5e28",
|
"cumulativeGasUsed": "0x5e28",
|
||||||
|
@ -19,7 +19,7 @@
|
||||||
"blockNumber": "0x3",
|
"blockNumber": "0x3",
|
||||||
"transactionHash": "0xeaf3921cbf03ba45bad4e6ab807b196ce3b2a0b5bacc355b6272fa96b11b4287",
|
"transactionHash": "0xeaf3921cbf03ba45bad4e6ab807b196ce3b2a0b5bacc355b6272fa96b11b4287",
|
||||||
"transactionIndex": "0x0",
|
"transactionIndex": "0x0",
|
||||||
"blockHash": "0xc281d4299fc4e8ce5bba7ecb8deb50f5403d604c806b36aa887dfe2ff84c064f",
|
"blockHash": "0xcc6225bf39327429a3d869af71182d619a354155187d0b5a8ecd6a9309cffcaa",
|
||||||
"logIndex": "0x0",
|
"logIndex": "0x0",
|
||||||
"removed": false
|
"removed": false
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"blockHash": "0xda50d57d8802553b00bb8e4d777bd5c4114086941119ca04edb15429f4818ed9",
|
"blockHash": "0xe9bd1d8c303b1af5c704b9d78e62c54a34af47e0db04ac1389a5ef74a619b9da",
|
||||||
"blockNumber": "0x1",
|
"blockNumber": "0x1",
|
||||||
"contractAddress": null,
|
"contractAddress": null,
|
||||||
"cumulativeGasUsed": "0x5208",
|
"cumulativeGasUsed": "0x5208",
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
{
|
{
|
||||||
"blobGasPrice": "0x1",
|
"blobGasPrice": "0x1",
|
||||||
"blobGasUsed": "0x20000",
|
"blobGasUsed": "0x20000",
|
||||||
"blockHash": "0x11e6318d77a45c01f89f76b56d36c6936c5250f4e2bd238cb7b09df73cf0cb7d",
|
"blockHash": "0x17124e31fb075a301b1d7d4135683b0a09fe4e6d453c54e2e734d5ee00744a49",
|
||||||
"blockNumber": "0x6",
|
"blockNumber": "0x6",
|
||||||
"contractAddress": null,
|
"contractAddress": null,
|
||||||
"cumulativeGasUsed": "0x5208",
|
"cumulativeGasUsed": "0x5208",
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"blobGasPrice": "0x1",
|
"blobGasPrice": "0x1",
|
||||||
"blobGasUsed": "0x20000",
|
"blobGasUsed": "0x20000",
|
||||||
"blockHash": "0x11e6318d77a45c01f89f76b56d36c6936c5250f4e2bd238cb7b09df73cf0cb7d",
|
"blockHash": "0x17124e31fb075a301b1d7d4135683b0a09fe4e6d453c54e2e734d5ee00744a49",
|
||||||
"blockNumber": "0x6",
|
"blockNumber": "0x6",
|
||||||
"contractAddress": null,
|
"contractAddress": null,
|
||||||
"cumulativeGasUsed": "0x5208",
|
"cumulativeGasUsed": "0x5208",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"blockHash": "0x5526cd89bc188f20fd5e9bb50d8054dc5a51a81a74ed07eacf36a4a8b10de4b1",
|
"blockHash": "0xb3e447c77374fd285964cba692e96b1673a88a959726826b5b6e2dca15472b0a",
|
||||||
"blockNumber": "0x2",
|
"blockNumber": "0x2",
|
||||||
"contractAddress": "0xae9bea628c4ce503dcfd7e305cab4e29e7476592",
|
"contractAddress": "0xae9bea628c4ce503dcfd7e305cab4e29e7476592",
|
||||||
"cumulativeGasUsed": "0xcf50",
|
"cumulativeGasUsed": "0xcf50",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"blockHash": "0xa04ad6be58c45fe483991b89416572bc50426b0de44b769757e95c704250f874",
|
"blockHash": "0x53bffe54375c0a31fe7bc0db7455db7d48278234c2400efa4d40d1c57cbe868d",
|
||||||
"blockNumber": "0x5",
|
"blockNumber": "0x5",
|
||||||
"contractAddress": "0xfdaa97661a584d977b4d3abb5370766ff5b86a18",
|
"contractAddress": "0xfdaa97661a584d977b4d3abb5370766ff5b86a18",
|
||||||
"cumulativeGasUsed": "0xe01c",
|
"cumulativeGasUsed": "0xe01c",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"blockHash": "0x3e946aa9e252873af511b257d9d89a1bcafa54ce7c6a6442f8407ecdf81e288d",
|
"blockHash": "0x102e50de30318ee99a03a09db74387e79cad3165bf6840cc84249806a2a302f3",
|
||||||
"blockNumber": "0x4",
|
"blockNumber": "0x4",
|
||||||
"contractAddress": null,
|
"contractAddress": null,
|
||||||
"cumulativeGasUsed": "0x538d",
|
"cumulativeGasUsed": "0x538d",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"blockHash": "0xda50d57d8802553b00bb8e4d777bd5c4114086941119ca04edb15429f4818ed9",
|
"blockHash": "0xe9bd1d8c303b1af5c704b9d78e62c54a34af47e0db04ac1389a5ef74a619b9da",
|
||||||
"blockNumber": "0x1",
|
"blockNumber": "0x1",
|
||||||
"contractAddress": null,
|
"contractAddress": null,
|
||||||
"cumulativeGasUsed": "0x5208",
|
"cumulativeGasUsed": "0x5208",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"blockHash": "0xc281d4299fc4e8ce5bba7ecb8deb50f5403d604c806b36aa887dfe2ff84c064f",
|
"blockHash": "0xcc6225bf39327429a3d869af71182d619a354155187d0b5a8ecd6a9309cffcaa",
|
||||||
"blockNumber": "0x3",
|
"blockNumber": "0x3",
|
||||||
"contractAddress": null,
|
"contractAddress": null,
|
||||||
"cumulativeGasUsed": "0x5e28",
|
"cumulativeGasUsed": "0x5e28",
|
||||||
|
@ -18,7 +18,7 @@
|
||||||
"blockNumber": "0x3",
|
"blockNumber": "0x3",
|
||||||
"transactionHash": "0xeaf3921cbf03ba45bad4e6ab807b196ce3b2a0b5bacc355b6272fa96b11b4287",
|
"transactionHash": "0xeaf3921cbf03ba45bad4e6ab807b196ce3b2a0b5bacc355b6272fa96b11b4287",
|
||||||
"transactionIndex": "0x0",
|
"transactionIndex": "0x0",
|
||||||
"blockHash": "0xc281d4299fc4e8ce5bba7ecb8deb50f5403d604c806b36aa887dfe2ff84c064f",
|
"blockHash": "0xcc6225bf39327429a3d869af71182d619a354155187d0b5a8ecd6a9309cffcaa",
|
||||||
"logIndex": "0x0",
|
"logIndex": "0x0",
|
||||||
"removed": false
|
"removed": false
|
||||||
}
|
}
|
||||||
|
|
|
@ -121,18 +121,15 @@ func (miner *Miner) generateWork(params *generateParams, witness bool) *newPaylo
|
||||||
// Collect consensus-layer requests if Prague is enabled.
|
// Collect consensus-layer requests if Prague is enabled.
|
||||||
var requests [][]byte
|
var requests [][]byte
|
||||||
if miner.chainConfig.IsPrague(work.header.Number, work.header.Time) {
|
if miner.chainConfig.IsPrague(work.header.Number, work.header.Time) {
|
||||||
|
requests = [][]byte{}
|
||||||
// EIP-6110 deposits
|
// EIP-6110 deposits
|
||||||
depositRequests, err := core.ParseDepositLogs(allLogs, miner.chainConfig)
|
if err := core.ParseDepositLogs(&requests, allLogs, miner.chainConfig); err != nil {
|
||||||
if err != nil {
|
|
||||||
return &newPayloadResult{err: err}
|
return &newPayloadResult{err: err}
|
||||||
}
|
}
|
||||||
requests = append(requests, depositRequests)
|
// EIP-7002
|
||||||
// EIP-7002 withdrawals
|
core.ProcessWithdrawalQueue(&requests, work.evm)
|
||||||
withdrawalRequests := core.ProcessWithdrawalQueue(work.evm)
|
|
||||||
requests = append(requests, withdrawalRequests)
|
|
||||||
// EIP-7251 consolidations
|
// EIP-7251 consolidations
|
||||||
consolidationRequests := core.ProcessConsolidationQueue(work.evm)
|
core.ProcessConsolidationQueue(&requests, work.evm)
|
||||||
requests = append(requests, consolidationRequests)
|
|
||||||
}
|
}
|
||||||
if requests != nil {
|
if requests != nil {
|
||||||
reqHash := types.CalcRequestsHash(requests)
|
reqHash := types.CalcRequestsHash(requests)
|
||||||
|
|
Loading…
Reference in New Issue