@@ -977,6 +977,14 @@ def header_beacon_root_required(
977977 del block_number , timestamp
978978 return False
979979
980+ @classmethod
981+ def header_slot_number_required (
982+ cls , * , block_number : int = 0 , timestamp : int = 0
983+ ) -> bool :
984+ """At genesis, header must not contain slot number (EIP-7843)."""
985+ del block_number , timestamp
986+ return False
987+
980988 @classmethod
981989 def engine_new_payload_blob_hashes (
982990 cls , * , block_number : int = 0 , timestamp : int = 0
@@ -3362,9 +3370,7 @@ class Amsterdam(BPO2):
33623370 def header_bal_hash_required (
33633371 cls , * , block_number : int = 0 , timestamp : int = 0
33643372 ) -> bool :
3365- """
3366- From Amsterdam, header must contain block access list hash (EIP-7928).
3367- """
3373+ """BAL hash in header required from Amsterdam (EIP-7928)."""
33683374 del block_number , timestamp
33693375 return True
33703376
@@ -3373,6 +3379,31 @@ def is_deployed(cls) -> bool:
33733379 """Return True if this fork is deployed."""
33743380 return False
33753381
3382+ @classmethod
3383+ def valid_opcodes (
3384+ cls , * , block_number : int = 0 , timestamp : int = 0
3385+ ) -> List [Opcodes ]:
3386+ """Add SLOTNUM opcode for Amsterdam (EIP-7843)."""
3387+ return [Opcodes .SLOTNUM ] + super (Amsterdam , cls ).valid_opcodes (
3388+ block_number = block_number , timestamp = timestamp
3389+ )
3390+
3391+ @classmethod
3392+ def opcode_gas_map (
3393+ cls , * , block_number : int = 0 , timestamp : int = 0
3394+ ) -> Dict [OpcodeBase , int | Callable [[OpcodeBase ], int ]]:
3395+ """Add SLOTNUM opcode gas cost for Amsterdam (EIP-7843)."""
3396+ gas_costs = cls .gas_costs (
3397+ block_number = block_number , timestamp = timestamp
3398+ )
3399+ base_map = super (Amsterdam , cls ).opcode_gas_map (
3400+ block_number = block_number , timestamp = timestamp
3401+ )
3402+ return {
3403+ ** base_map ,
3404+ Opcodes .SLOTNUM : gas_costs .G_BASE ,
3405+ }
3406+
33763407 @classmethod
33773408 def engine_new_payload_version (
33783409 cls , * , block_number : int = 0 , timestamp : int = 0
@@ -3391,3 +3422,11 @@ def engine_execution_payload_block_access_list(
33913422 """
33923423 del block_number , timestamp
33933424 return True
3425+
3426+ @classmethod
3427+ def header_slot_number_required (
3428+ cls , * , block_number : int = 0 , timestamp : int = 0
3429+ ) -> bool :
3430+ """Slot number in header required from Amsterdam (EIP-7843)."""
3431+ del block_number , timestamp
3432+ return True
0 commit comments