PBH Architecture
World Chain is an OP Stack chain that enables Priority Blockspace for Humans (PBH) through the World Chain Builder. World Chain leverages rollup-boost to support external block production, allowing the builder to propose PBH blocks to the sequencer while remaining fully compatible with the OP Stack.
Block Production on the OP Stack
The Engine API defines the communication protocol between the Consensus Layer (CL) and the Execution Layer (EL) and is responsible for orchestrating block production on the OP Stack. Periodically, the sequencer's consensus client will send a fork choice update (FCU) to its execution client, signaling for a new block to be built. After a series of API calls between the CL and EL, the EL will return a new ExecutionPayload containing a newly constructed block. The CL will then advance the unsafe head of the chain and peer the new block to other nodes in the network.
sequenceDiagram
box OP Stack Sequencer
participant sequencer-cl as Sequencer CL
participant sequencer-el as Sequencer EL
end
box Network
participant peers-cl as Peers
end
Note over sequencer-cl: FCU with Attributes
sequencer-cl->>sequencer-el: engine_forkChoiceUpdatedV3(ForkChoiceState, Attrs)
sequencer-el-->>sequencer-cl: {payloadStatus: {status: VALID, ...}, payloadId: PayloadId}
sequencer-el->>sequencer-el: Build execution payload
sequencer-cl->>sequencer-el: engine_getPayloadV3(PayloadId)
sequencer-el-->>sequencer-cl: {executionPayload, blockValue}
sequencer-cl->>peers-cl: Propagate new block
For a detailed look at how block production works on the OP Stack, see the OP Stack specs.
Rollup Boost
rollup-boost is a block building sidecar for OP Stack chains, enabling external block production while remaining fully compatible with the OP Stack. rollup-boost acts as an intermediary between the sequencer's consensus and execution client. When sequencer-cl sends a new FCU to rollup-boost, the request will be multiplexed to both the sequencer's execution client and external block builders signaling that a new block should be built.
When the sequencer is ready to propose a new block, op-node will send an engine_getPayload request to rollup-boost which is forwarded to the default execution client and external block builders.
Once rollup-boost receives the built block from external builder, it will then validate the block by sending it to the sequencer's execution client via engine_newPayload. If the external block is valid, it is returned to the sequencer's op-node, otherwise rollup-boost will return the fallback block. Note that rollup-boost will always fallback to the default execution client's block in the case that the external builder does not respond in time or returns an invalid block.
sequenceDiagram
box Sequencer
participant sequencer-cl as Sequencer CL
participant rollup-boost
participant sequencer-el as Sequencer EL
end
box Builder
participant builder-el as Builder EL
end
Note over sequencer-cl: FCU with Attributes
sequencer-cl->>rollup-boost: engine_forkChoiceUpdatedV3(..., Attrs)
Note over rollup-boost: Forward FCU
rollup-boost->>builder-el: engine_forkChoiceUpdatedV3(..., Attrs)
rollup-boost->>sequencer-el: engine_forkChoiceUpdatedV3(..., Attrs)
sequencer-el-->>rollup-boost: {payloadId: PayloadId}
rollup-boost-->>sequencer-cl: {payloadId: PayloadId}
Note over sequencer-cl: Get Payload
sequencer-cl->>rollup-boost: engine_getPayloadV3(PayloadId)
Note over rollup-boost: Forward Get Payload
rollup-boost->>sequencer-el: engine_getPayloadV3(PayloadId)
rollup-boost->>builder-el: engine_getPayloadV3(PayloadId)
builder-el-->>rollup-boost: {executionPayload, blockValue}
sequencer-el-->>rollup-boost: {executionPayload, blockValue}
Note over rollup-boost, sequencer-el: Validate builder block
rollup-boost->>sequencer-el: engine_newPayloadV3(ExecutionPayload)
sequencer-el->>rollup-boost: {status: VALID, ...}
Note over rollup-boost: Propose execution payload
rollup-boost->>sequencer-cl: {executionPayload, blockValue}
Note over sequencer-cl: Propagate new block
In addition to Engine API requests, rollup-boost will proxy all RPC calls from the sequencer op-node to its local execution client. The following RPC calls will also be forwarded to external builders:
miner_*- The Miner API is used to notify execution clients of changes in effective gas price, extra data, and DA throttling requests from the batcher.
eth_sendRawTransaction*- Forwards transactions the sequencer receives to the builder for block building.
Block Production on World Chain
World Chain leverages rollup-boost to enable external block production and integrates the World Chain Builder as a block builder in the network. The World Chain Builder implements a custom block ordering policy (ie. PBH) to provide priority inclusion for transactions with a valid World ID proof. Note that the custom ordering policy adheres to the OP Stack spec.
Each block has a "PBH blockspace capacity", which determines how many PBH transactions will be included in the block. Blocks on World Chain will always reserve a percentage of blockspace for non-PBH transactions to ensure inclusion for automated systems and non-verified users. If there are not enough pending PBH transactions to fill the entirety of PBH blockspace, standard transactions will be used to fill the remainder of the block.
| Tx Hash | Fee |
|---|---|
| 0xaaaa | $0.04 |
| 0xbbbb | $0.04 |
| 0xcccc | $0.03 |
| 0xdddd | $0.03 |
| 0xeeee | $0.03 |
| 0x2222 | $0.02 |
| 0x3333 | $0.02 |
| 0x4444 | $0.02 |
| 0x5555 | $0.01 |
| 0x6666 | $0.01 |
| Tx Hash | Fee |
|---|---|
| 0x3333 | $0.02 |
| 0x4444 | $0.02 |
| 0x5555 | $0.01 |
| 0x6666 | $0.01 |
| 0xaaaa | $0.04 |
| 0xbbbb | $0.04 |
| 0xcccc | $0.03 |
| 0xdddd | $0.03 |
| 0xeeee | $0.03 |
| 0x2222 | $0.02 |
If the amount of pending PBH transactions exceed the PBH blockspace capacity, the remaining PBH transactions will carry over to the next block. PBH transactions aim to provide verified users with faster, cheaper transaction inclusion, especially during network congestion. Note that transactions within PBH blockspace are ordered by priority fee.
In the event that the block builder is offline, rollup-boost will fallback to the block built by the default execution client with standard OP Stack ordering rules.