System addresses and topics¶
The protocol-defined system actors: the pseudo-caller of block-level system calls, the system predeploys they target, and the EIP-7708 transfer-log identity. Pure data — no registers, no externs.
| Name | Address / Topic | Source |
|---|---|---|
SYSTEM_ADDRESS |
0xfffe…fffe |
EIP-4788/2935/7002/7251 caller |
BEACON_ROOTS_ADDR |
0x000f…ac02 |
EIP-4788 |
HISTORY_STORAGE_ADDR |
0x0000…2935 |
EIP-2935 |
WITHDRAWAL_REQUEST_ADDR |
0x0000…7002 |
EIP-7002 |
CONSOLIDATION_REQUEST_ADDR |
0x0000…7251 |
EIP-7251 |
BUILDER_DEPOSIT_REQUEST_ADDR |
0x0000…8282 |
EIP-8282 |
BUILDER_EXIT_REQUEST_ADDR |
0x0000…8282 |
EIP-8282 |
DEPOSIT_CONTRACT_ADDR |
0x0000…05fa |
EIP-6110 |
EIP7708_TRANSFER_TOPIC |
keccak256("Transfer(…)") |
EIP-7708 |
let SYSTEM_ADDRESS¶
The pseudo-caller of protocol system calls (EIP-4788, EIP-2935, EIP-7002, EIP-7251, EIP-8282).
let SYSTEM_ADDRESS : address = address_from_bits(0x000000000000000000000000fffffffffffffffffffffffffffffffffffffffe)Interprets the low 160 bits of full-width bits as an address.
function address_from_bits(value : bits(256)) -> address = {
let word_value = word_from_bits(value);
word_to_address(word_value)
}A 20-byte account address (YP §4.1), in canonical protocol byte order.
type address = vector(20, inc, byte)let BEACON_ROOTS_ADDR¶
let BEACON_ROOTS_ADDR : address = address_from_bits(0x000000000000000000000000000f3df6d732807ef1319fb7b8bb8522d0beac02)Interprets the low 160 bits of full-width bits as an address.
function address_from_bits(value : bits(256)) -> address = {
let word_value = word_from_bits(value);
word_to_address(word_value)
}A 20-byte account address (YP §4.1), in canonical protocol byte order.
type address = vector(20, inc, byte)let HISTORY_STORAGE_ADDR¶
let HISTORY_STORAGE_ADDR : address = address_from_bits(
0x0000000000000000000000000000f90827f1c53a10cb7a02335b175320002935,
)Interprets the low 160 bits of full-width bits as an address.
function address_from_bits(value : bits(256)) -> address = {
let word_value = word_from_bits(value);
word_to_address(word_value)
}A 20-byte account address (YP §4.1), in canonical protocol byte order.
type address = vector(20, inc, byte)let WITHDRAWAL_REQUEST_ADDR¶
let WITHDRAWAL_REQUEST_ADDR : address = address_from_bits(
0x00000000000000000000000000000961ef480eb55e80d19ad83579a64c007002,
)Interprets the low 160 bits of full-width bits as an address.
function address_from_bits(value : bits(256)) -> address = {
let word_value = word_from_bits(value);
word_to_address(word_value)
}A 20-byte account address (YP §4.1), in canonical protocol byte order.
type address = vector(20, inc, byte)let CONSOLIDATION_REQUEST_ADDR¶
let CONSOLIDATION_REQUEST_ADDR : address = address_from_bits(
0x0000000000000000000000000000bbddc7ce488642fb579f8b00f3a590007251,
)Interprets the low 160 bits of full-width bits as an address.
function address_from_bits(value : bits(256)) -> address = {
let word_value = word_from_bits(value);
word_to_address(word_value)
}A 20-byte account address (YP §4.1), in canonical protocol byte order.
type address = vector(20, inc, byte)let BUILDER_DEPOSIT_REQUEST_ADDR¶
let BUILDER_DEPOSIT_REQUEST_ADDR : address = address_from_bits(
0x0000000000000000000000000000bff46984e3725691fa540a8c7589300d8282,
)Interprets the low 160 bits of full-width bits as an address.
function address_from_bits(value : bits(256)) -> address = {
let word_value = word_from_bits(value);
word_to_address(word_value)
}A 20-byte account address (YP §4.1), in canonical protocol byte order.
type address = vector(20, inc, byte)let BUILDER_EXIT_REQUEST_ADDR¶
let BUILDER_EXIT_REQUEST_ADDR : address = address_from_bits(
0x000000000000000000000000000064d678505ad48f8ccb093bc65613800e8282,
)Interprets the low 160 bits of full-width bits as an address.
function address_from_bits(value : bits(256)) -> address = {
let word_value = word_from_bits(value);
word_to_address(word_value)
}A 20-byte account address (YP §4.1), in canonical protocol byte order.
type address = vector(20, inc, byte)let DEPOSIT_CONTRACT_ADDR¶
let DEPOSIT_CONTRACT_ADDR : address = address_from_bits(
0x00000000000000000000000000000000219ab540356cbb839cbe05303d7705fa,
)Interprets the low 160 bits of full-width bits as an address.
function address_from_bits(value : bits(256)) -> address = {
let word_value = word_from_bits(value);
word_to_address(word_value)
}A 20-byte account address (YP §4.1), in canonical protocol byte order.
type address = vector(20, inc, byte)let DEPOSIT_EVENT_TOPIC¶
let DEPOSIT_EVENT_TOPIC : word = word_from_bits(0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5)Interprets one full-width bitvector as an EVM word. This named boundary keeps protocol constants readable without hiding conversion chains.
function word_from_bits(value : bits(256)) -> word = {
let natural_value = unsigned(value);
u256(natural_value)
}The EVM 256-bit machine word (YP §9.1). A transparent range keeps the mathematical subtype relation visible: narrower non-negative ranges can be passed as words without a model-level conversion.
type word = range(0, 2 ^ 256 - 1)let EIP7708_SYSTEM_ADDRESS¶
let EIP7708_SYSTEM_ADDRESS : address = address_from_bits(
0x000000000000000000000000fffffffffffffffffffffffffffffffffffffffe,
)Interprets the low 160 bits of full-width bits as an address.
function address_from_bits(value : bits(256)) -> address = {
let word_value = word_from_bits(value);
word_to_address(word_value)
}A 20-byte account address (YP §4.1), in canonical protocol byte order.
type address = vector(20, inc, byte)let EIP7708_TRANSFER_TOPIC¶
let EIP7708_TRANSFER_TOPIC : word = word_from_bits(0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef)Interprets one full-width bitvector as an EVM word. This named boundary keeps protocol constants readable without hiding conversion chains.
function word_from_bits(value : bits(256)) -> word = {
let natural_value = unsigned(value);
u256(natural_value)
}The EVM 256-bit machine word (YP §9.1). A transparent range keeps the mathematical subtype relation visible: narrower non-negative ranges can be passed as words without a model-level conversion.
type word = range(0, 2 ^ 256 - 1)let EIP7708_BURN_TOPIC¶
let EIP7708_BURN_TOPIC : word = word_from_bits(0xcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5)Interprets one full-width bitvector as an EVM word. This named boundary keeps protocol constants readable without hiding conversion chains.
function word_from_bits(value : bits(256)) -> word = {
let natural_value = unsigned(value);
u256(natural_value)
}The EVM 256-bit machine word (YP §9.1). A transparent range keeps the mathematical subtype relation visible: narrower non-negative ranges can be passed as words without a model-level conversion.
type word = range(0, 2 ^ 256 - 1)