mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-17 10:20:44 +00:00
core: implement EIP-8282: Builder Execution Requests
This commit is contained in:
parent
c5e22b6124
commit
fba2bf7f92
4 changed files with 37 additions and 1 deletions
|
|
@ -718,6 +718,9 @@ func DeveloperGenesisBlock(gasLimit uint64, faucet *common.Address) *Genesis {
|
||||||
params.HistoryStorageAddress: {Nonce: 1, Code: params.HistoryStorageCode, Balance: common.Big0},
|
params.HistoryStorageAddress: {Nonce: 1, Code: params.HistoryStorageCode, Balance: common.Big0},
|
||||||
params.WithdrawalQueueAddress: {Nonce: 1, Code: params.WithdrawalQueueCode, Balance: common.Big0},
|
params.WithdrawalQueueAddress: {Nonce: 1, Code: params.WithdrawalQueueCode, Balance: common.Big0},
|
||||||
params.ConsolidationQueueAddress: {Nonce: 1, Code: params.ConsolidationQueueCode, Balance: common.Big0},
|
params.ConsolidationQueueAddress: {Nonce: 1, Code: params.ConsolidationQueueCode, Balance: common.Big0},
|
||||||
|
// EIP-8282 - Builder Execution Requests
|
||||||
|
params.BuilderDepositAddress: {Nonce: 1, Code: params.BuilderDepositCode, Balance: common.Big0},
|
||||||
|
params.BuilderExitAddress: {Nonce: 1, Code: params.BuilderExitCode, Balance: common.Big0},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
if faucet != nil {
|
if faucet != nil {
|
||||||
|
|
|
||||||
|
|
@ -167,9 +167,9 @@ func PostExecution(ctx context.Context, config *params.ChainConfig, number *big.
|
||||||
if config.IsAmsterdam(number, time) {
|
if config.IsAmsterdam(number, time) {
|
||||||
blockAccessList = bal.NewConstructionBlockAccessList()
|
blockAccessList = bal.NewConstructionBlockAccessList()
|
||||||
}
|
}
|
||||||
|
rules := config.Rules(number, true, time) // IsMerge is always true
|
||||||
// Read requests if Prague is enabled.
|
// Read requests if Prague is enabled.
|
||||||
if config.IsPrague(number, time) {
|
if config.IsPrague(number, time) {
|
||||||
rules := config.Rules(number, true, time) // IsMerge is always true
|
|
||||||
|
|
||||||
requests = [][]byte{}
|
requests = [][]byte{}
|
||||||
// EIP-6110
|
// EIP-6110
|
||||||
|
|
@ -185,6 +185,16 @@ func PostExecution(ctx context.Context, config *params.ChainConfig, number *big.
|
||||||
return nil, nil, fmt.Errorf("failed to process consolidation queue: %w", err)
|
return nil, nil, fmt.Errorf("failed to process consolidation queue: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if config.IsAmsterdam(number, time) {
|
||||||
|
// EIP-8282
|
||||||
|
if err := ProcessBuilderDepositQueue(&requests, rules, evm, blockAccessIndex, blockAccessList); err != nil {
|
||||||
|
return nil, nil, fmt.Errorf("failed to process builder deposit queue: %w", err)
|
||||||
|
}
|
||||||
|
if err := ProcessBuilderExitQueue(&requests, rules, evm, blockAccessIndex, blockAccessList); err != nil {
|
||||||
|
return nil, nil, fmt.Errorf("failed to process builder exit queue: %w", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
return requests, blockAccessList, nil
|
return requests, blockAccessList, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -361,6 +371,18 @@ func ProcessConsolidationQueue(requests *[][]byte, rules params.Rules, evm *vm.E
|
||||||
return processRequestsSystemCall(requests, rules, evm, 0x02, params.ConsolidationQueueAddress, blockAccessIndex, blockAccessList)
|
return processRequestsSystemCall(requests, rules, evm, 0x02, params.ConsolidationQueueAddress, blockAccessIndex, blockAccessList)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ProcessBuilderDepositQueue calls the EIP-8282 builder deposit contract.
|
||||||
|
// It returns the opaque request data returned by the contract.
|
||||||
|
func ProcessBuilderDepositQueue(requests *[][]byte, rules params.Rules, evm *vm.EVM, blockAccessIndex uint32, blockAccessList *bal.ConstructionBlockAccessList) error {
|
||||||
|
return processRequestsSystemCall(requests, rules, evm, 0x03, params.BuilderDepositAddress, blockAccessIndex, blockAccessList)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ProcessBuilderExitQueue calls the EIP-8282 builder exit contract.
|
||||||
|
// It returns the opaque request data returned by the contract.
|
||||||
|
func ProcessBuilderExitQueue(requests *[][]byte, rules params.Rules, evm *vm.EVM, blockAccessIndex uint32, blockAccessList *bal.ConstructionBlockAccessList) error {
|
||||||
|
return processRequestsSystemCall(requests, rules, evm, 0x04, params.BuilderExitAddress, blockAccessIndex, blockAccessList)
|
||||||
|
}
|
||||||
|
|
||||||
func processRequestsSystemCall(requests *[][]byte, rules params.Rules, evm *vm.EVM, requestType byte, addr common.Address, blockAccessIndex uint32, blockAccessList *bal.ConstructionBlockAccessList) error {
|
func processRequestsSystemCall(requests *[][]byte, rules params.Rules, evm *vm.EVM, requestType byte, addr common.Address, blockAccessIndex uint32, blockAccessList *bal.ConstructionBlockAccessList) error {
|
||||||
if tracer := evm.Config.Tracer; tracer != nil {
|
if tracer := evm.Config.Tracer; tracer != nil {
|
||||||
onSystemCallStart(tracer, evm.GetVMContext())
|
onSystemCallStart(tracer, evm.GetVMContext())
|
||||||
|
|
|
||||||
|
|
@ -1198,6 +1198,11 @@ func (c *ChainConfig) BlobConfig(fork forks.Fork) *BlobConfig {
|
||||||
func (c *ChainConfig) ActiveSystemContracts(time uint64) map[string]common.Address {
|
func (c *ChainConfig) ActiveSystemContracts(time uint64) map[string]common.Address {
|
||||||
fork := c.LatestFork(time)
|
fork := c.LatestFork(time)
|
||||||
active := make(map[string]common.Address)
|
active := make(map[string]common.Address)
|
||||||
|
if fork >= forks.Amsterdam {
|
||||||
|
// EIP-8282 - Builder Execution Requests
|
||||||
|
active["BUILDER_DEPOSIT_CONTRACT_ADDRESS"] = BuilderDepositAddress
|
||||||
|
active["BUILDER_EXIT_CONTRACT_ADDRESS"] = BuilderExitAddress
|
||||||
|
}
|
||||||
if fork >= forks.Osaka {
|
if fork >= forks.Osaka {
|
||||||
// no new system contracts
|
// no new system contracts
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -247,6 +247,12 @@ var (
|
||||||
// EIP-7251 - Increase the MAX_EFFECTIVE_BALANCE
|
// EIP-7251 - Increase the MAX_EFFECTIVE_BALANCE
|
||||||
ConsolidationQueueAddress = common.HexToAddress("0x0000BBdDc7CE488642fb579F8B00f3a590007251")
|
ConsolidationQueueAddress = common.HexToAddress("0x0000BBdDc7CE488642fb579F8B00f3a590007251")
|
||||||
ConsolidationQueueCode = common.FromHex("3373fffffffffffffffffffffffffffffffffffffffe1460d35760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1461019a57600182026001905f5b5f82111560685781019083028483029004916001019190604d565b9093900492505050366060146088573661019a573461019a575f5260205ff35b341061019a57600154600101600155600354806004026004013381556001015f358155600101602035815560010160403590553360601b5f5260605f60143760745fa0600101600355005b6003546002548082038060021160e7575060025b5f5b8181146101295782810160040260040181607402815460601b815260140181600101548152602001816002015481526020019060030154905260010160e9565b910180921461013b5790600255610146565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff141561017357505f5b6001546001828201116101885750505f61018e565b01600190035b5f555f6001556074025ff35b5f5ffd")
|
ConsolidationQueueCode = common.FromHex("3373fffffffffffffffffffffffffffffffffffffffe1460d35760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1461019a57600182026001905f5b5f82111560685781019083028483029004916001019190604d565b9093900492505050366060146088573661019a573461019a575f5260205ff35b341061019a57600154600101600155600354806004026004013381556001015f358155600101602035815560010160403590553360601b5f5260605f60143760745fa0600101600355005b6003546002548082038060021160e7575060025b5f5b8181146101295782810160040260040181607402815460601b815260140181600101548152602001816002015481526020019060030154905260010160e9565b910180921461013b5790600255610146565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff141561017357505f5b6001546001828201116101885750505f61018e565b01600190035b5f555f6001556074025ff35b5f5ffd")
|
||||||
|
|
||||||
|
// EIP-8282 - Builder Execution Requests
|
||||||
|
BuilderDepositAddress = common.HexToAddress("0x0000000000000000000000000000000000007732")
|
||||||
|
BuilderDepositCode = common.FromHex("") // TODO (MariusVanDerWijden) add code
|
||||||
|
BuilderExitAddress = common.HexToAddress("0x0000000000000000000000000000000000007733")
|
||||||
|
BuilderExitCode = common.FromHex("") // TODO (MariusVanDerWijden) add code
|
||||||
)
|
)
|
||||||
|
|
||||||
// System log events.
|
// System log events.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue