risc0 / zeth

A "Type 0" zkEVM. Prove validity of Ethereum blocks using RISC Zero's zkVM
Apache License 2.0
381 stars 68 forks source link

Feature request: support eip-4844 #87

Open dyxushuai opened 9 months ago

dyxushuai commented 9 months ago

Background

Holesky has released the Cankun fork, and supported the eip-4844, it added new transaction type(3), so zeth will panic when decode the new transaction from holesky

https://github.com/risc0/zeth/blob/6867af4ebf012476248c57258422dfd0d379fe5b/primitives/src/ethers.rs#L221

FYI

EIP: https://eips.ethereum.org/EIPS/eip-4844

ethers-rs status

Related issues: https://github.com/gakonst/ethers-rs/issues/1742, https://github.com/gakonst/ethers-rs/issues/2719

Suggestion

By the way, reth has already supported the new EIP https://github.com/paradigmxyz/reth/blob/34216727d2994761ae6c756e899404f3b5eb312a/crates/primitives/src/transaction/eip4844.rs#L192, maybe zeth can move from ethers to reth

TODOs

Wollac commented 9 months ago

Yes, to support EIP-4844 we'd need support for blob transactions. We tried to use the reth types some time ago, but it wasn't feasible because their code base wasn't modular enough and included stuff that wasn't zkVM compatible. This was exactly the reason we had to start the primitives' crate and reimplement certain types. This may have changed, but I was waiting for transactions to be added toalloy` to be able to use them.

Also, I don't think just adding the new transaction type is enough for Cancun support, there are also changes in execution and header for example. So it is a slightly larger change that is not a top priority for us right now.

dyxushuai commented 9 months ago

Also, I don't think just adding the new transaction type is enough for Cancun support, there are also changes in execution and header for example. So it is a slightly larger change that is not a top priority for us right now.

Exactly, the new blob tx also has a dynamic format for supporting kzg https://github.com/ethereum/go-ethereum/blob/2ab365f6d8c51d0e313d5ed30d777e49c7dd1213/core/types/tx_blob.go#L207

dyxushuai commented 9 months ago

primitives' crate and reimplement certain types. This may have changed, but I was waiting for transactions to be added toalloy`

Alloy has already supported the 4844, https://github.com/alloy-rs/alloy/blob/42213c0d78c18141836f7129eda92ba2c8c59525/crates/consensus/src/transaction/eip4844.rs#L74 and rpc-provider, so is it a timing to migrate from ethers to alloy? I can help with this issue

gakonst commented 8 months ago

Strong rec to move towards Alloy and we'll prioritize anything missing, Alloy is good to go on 4844 and has everything you need except some client side log queries.

dyxushuai commented 8 months ago

Strong rec to move towards Alloy and we'll prioritize anything missing, Alloy is good to go on 4844 and has everything you need except some client side log queries.

Alloy requires the MSRV 1.75 alloy-rs/alloy@main/Cargo.toml#L8, but the latest version of risc0's toolchain is only 1.70.

dyxushuai commented 8 months ago

Risc0's rustc has already supported the 1.75 by upgradecargo risczero install --version v2024-02-08.1