Skip to content

Commit 00fdbfb

Browse files
authored
Merge 880cd56 into dcf80d9
2 parents dcf80d9 + 880cd56 commit 00fdbfb

1 file changed

Lines changed: 11 additions & 55 deletions

File tree

EIPS/eip-8070.md

Lines changed: 11 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -79,64 +79,16 @@ Tenured transactions MAY be subject to resampling in other to test for liveness
7979

8080
### Execution clients :: Local block builders
8181

82-
> TODO: config specification needed.
83-
84-
Client implementations MUST provide configuration options for local block builders to specify a blob inclusion policy when proposing a block. Implementations SHOULD support at least these policies:
85-
86-
1. Conservative: include only blob transactions for which all blob data is fully available locally (equivalent to today's behaviour).
87-
2. Optimistic: also include blob transactions that have been successfully sampled.
88-
3. Proactive: resample prior to blob proposal time in order to assess network-wide confidence of blobs potentially selected for inclusion. This requires an additional Engine API extension for the CL to notify the EL of upcoming proposer duty (TODO).
82+
**Eager mode for block builders.**
83+
A block builder MUST switch its fetch policy to eager mode at least 2-3 slots ahead before assembling execution payload: it acts as a provider (`p = 1.0`) for every type 3 transaction it intends to include, fetching the full blob payload unconditionally regardless of its normally configured `p` value. This guarantees that the builder holds complete blob data for all transactions in the payload.
8984

9085
### Engine API extensions
9186

92-
> TODO: This specification will be moved out to the Execution APIs repo and linked to from here.
93-
94-
**Method `engine_blobCustodyUpdatedV1`**
95-
96-
Called by the Consensus layer client to inform the Execution layer of the indices of their current blob column custody set at startup, as well as subsequent changes during live operation.
97-
98-
Request:
99-
100-
- method: `engine_blobCustodyUpdatedV1`
101-
- params:
102-
- `indices_bitarray`: uint128, interpreted as a bitarray of length `CELLS_PER_EXT_BLOB` indicating which column indices form the custody set.
103-
- timeout: 150ms
104-
105-
Response:
106-
107-
- result: no payload
108-
- error: code and message set in case an error occurs during processing of the request.
109-
110-
Specification:
87+
The CL notifies the EL of its custody column set via the `custodyColumns` parameter on `engine_forkchoiceUpdatedV4`. This parameter is a 16-byte `DATA` value interpreted as a bitarray of length `CELLS_PER_EXT_BLOB`, or `null` if the CL does not provide custody services.
11188

112-
1. The Consensus client MUST call this method whenever its custody set changes. Additionally, it MUST call it on start, on restart, and when an Engine API interruption is detected.
113-
2. The Execution client MUST return an Ok response if the request is well-formed. All subsequent sampling requests MUST adopt the new custody set. Queued sampling requests MAY be patched to reflect the new custody set.
114-
3. For type 3 transactions pending in the blobpool:
115-
1. If the custody set has expanded, the Execution client MUST issue new sampling requests for the delta. It SHOULD broadcast updated `NewPooledTransactionHashes` announcement with the new available set.
116-
2. If the custody set has contracted, the Execution client MAY prune dropped cells from local storage, but only AFTER it has broadcast an updated `NewPooledTransactionHashes` announcement with the reduced available set. This is to avoid peers from perceiving an availability fault if they happen to request those previously announced cells.
117-
4. The Execution client MUST treat a request to update the custody set to the current value as a no-op operation returning an Ok.
89+
The `engine_getBlobsV4` method is used by the CL to retrieve blob cells from the EL blobpool.
11890

119-
**Method `engine_getBlobsV4`**
120-
121-
Called by the Consensus layer client to retrieve blob cells from the Execution layer blobpool.
122-
123-
Request:
124-
125-
- method: `engine_getBlobsV4`
126-
- params:
127-
- `versioned_blob_hashes`: []bytes32, an array of blob versioned hashes.
128-
- `indices_bitarray`: uint128, a bitarray denoting the indices of the cells to retrieve.
129-
- timeout: 500ms
130-
131-
Response:
132-
133-
- result: `[]BlobCellsAndProofsV1`
134-
- error: code and message set in case an error occurs during processing of the request.
135-
136-
**Data structure `BlobCellsAndProofsV1`**
137-
138-
- `blob_cells`: a sequence of byte arrays `[]bytes` representing the partial matrix of the requested blobs, with `nil` entries for missing cells.
139-
- `proofs`: `Array of DATA` - Array of `KZGProof` as defined in [EIP-4844](./eip-4844.md), 48 bytes each (`DATA`)
91+
Both are specified in the [Execution APIs](https://github.com/ethereum/execution-apis) repository. See the [Amsterdam Engine API specification](https://github.com/ethereum/execution-apis/blob/main/src/engine/amsterdam.md) for details.
14092

14193
### Parameters
14294

@@ -204,11 +156,15 @@ TBD
204156

205157
### Attack scenarios and threat model
206158

159+
The goal of threat modeling is to identify potential attack vectors and vulnerabilities in the proposed sparse blobpool mechanism that may hurt the security, availability, or integrity of the type 3 transaction propagation. The threat model assumes a permissionless environment where adversaries can freely join the network, create multiple identities (Sybil attacks), and behave maliciously. Adversaries may aim to disrupt the network, degrade performance, censor transactions, or manipulate the availability of blob data. Below are some potential attack scenarios and their implications:
160+
207161
**DoS attacks.** An important consideration in all mempool sharding mechanisms is the possibility of DoS attacks. This refers to the case where a malicious sender posts a transaction to the mempool disclosing only part of it, which makes the transaction impossible to be included in any future block, while still consuming mempool resources. In this system, such a sender can be detected by nodes that request the full payload of the transaction.
208162

209-
**Selective withholding attacks.** TODO
163+
**Selective withholding attacks.** A malicious peer might selectively withhold full blob data for certain type 3 transactions (e.g. produced by a certain L2), thus slowing down their propagation and potentially leading to reduced availability. This can be mitigated by ensuring a sufficiently large and diverse peerset.
164+
165+
**Eclipse attacks.** Malicious peers can try to isolate a victim node by controlling all its connections, serving only partial blob data and preventing it from obtaining the full payload. This hurts the victim's ability to propagate transactions and can lead to reduced availability of blob data and potential censorship of the honest peer. However, periodic rotation of connections and keeping track of neighbor peer's rate of full payload announcements can help mitigate this attack.
210166

211-
**Eclipse attacks.** TODO
167+
**Free rider attacks.** A peer can send an excessive volume of blob data requests without reciprocating with announcements, thus consuming bandwidth without contributing to the network. This can be mitigated by keeping track of the requests to announcements ratio of peers and disconnecting those that exceed a certain threshold.
212168

213169
### Peer disconnection policies
214170

0 commit comments

Comments
 (0)