EIP-4844: Shard Blob Transactions

The precompile pointevaluation internally depends on another precompile sha256. This looks like design mistake: the hash function cannot be changed by users. None of the rationale or comments here explain this decision.

Congrats! As this is going to final soon, Congrats on authors and developers who work days and nights to carry out EIP-4844, hurah!!!

I know the implementation is done mostly, comments here are mostly about editorial clarification to ensure a smooth finalization.

  1. for a hash specification, such as
keccak256(BLOB_TX_TYPE || rlp([chain_id, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit, to, value, data, access_list, max_fee_per_blob_gas, blob_versioned_hashes]))

can I suggest we specify the length of data? I know itā€™s probably implied in the execution-spec, but sometimes when itā€™s implied, we donā€™t know for sure, resulting in confusions that need to be resolved, such as this attempt EIP-2294: Explicit bound to Chain ID size

  1. This ā€œMUST NOTā€ specification seems unenforcable from what it reads today.
Nodes MUST NOT automatically broadcast blob transactions to 
their peers. Instead, those transactions are only announced using NewPooledTransactionHashes messages, and can then be 
manually requested via GetPooledTransactions.

Maybe a better way to say it is that

Nodes MUST ONLY rely on NewPooledTransactionHashes
messages for announcement, and Nodes MUST provide a pull
interface for query named `GetPooledTransactions` etc.
  1. A rationale discussion of POINT_EVALUATION_PRECOMPILE_GAS to be specified as 50000 was not included in the Rationale section. I have no doubt deep thoughts has been put in to finding the right amount. But it would be good if authors could include that analysis in this proposal.

I would like to see the nomenclature around the ā€œgas priceā€/ā€œbase feeā€ changed to be consistent with type 2 transactions and London blocks. I have created a PR that just renames ā€œgas priceā€ to ā€œbase feeā€ throughout the document. I donā€™t believe this has any actual impact on the specification itself or consensus, but it is useful for communication within the community to use consistent naming for similar concepts, and as we start working on standardizing the 4844 JSON-RPC methods it may become necessary to standardize on a name.

2 Likes

This EIP does not make it clear to users or node implementations how users would send blob transactions. Is there going to be a new eth_sendBlobTransaction RPC call or will nodes accept the encoded form at eth_sendTransaction as given in the Networking section, which, if I am not mistaken, does not even include the EIP-2718 number for blobs (3)?

edit: The networking section is not very clear, imo it should also mention that the TransactionType is BLOB_TX_TYPE again. Yes, you send it through eth_sendTransaction but with the transaction type (0x03) prepended to that rlp array it says in that section.

Amazing to see the progress on this EIP. I have a question regarding the behaviour of a node after MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS if it hasnā€™t been able to download the blob before, or alternatively a node that comes online after MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS has passed. Will such a node continue to try to download the blob and, if it fails, will it consider the block to be valid? At what point will nodes assume that old blobs were/are available even if they never downloaded them?

The relevant section of the consensus spec seems to be in fork-choice.md:

The block MUST NOT be considered valid until all valid Blobs have been downloaded. Blocks that have been previously validated as available SHOULD be considered available even if the associated Blobs have subsequently been pruned.

Although it doesnā€™t say what a node would do after MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS, am I correct in assuming that a node would attempt to confirm availability even after MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS?