diff --git a/da-contracts/contracts/da-layers/eigenda/EigenDAL1DAValidator.sol b/da-contracts/contracts/da-layers/eigenda/EigenDAL1DAValidator.sol index 056ba50ad7..f468f9573a 100644 --- a/da-contracts/contracts/da-layers/eigenda/EigenDAL1DAValidator.sol +++ b/da-contracts/contracts/da-layers/eigenda/EigenDAL1DAValidator.sol @@ -5,18 +5,25 @@ pragma solidity 0.8.28; import {IL1DAValidator, L1DAValidatorOutput} from "../../IL1DAValidator.sol"; import {OperatorDAInputTooSmall} from "../../DAContractsErrors.sol"; -interface IEigenDABlobProofRegistry { - function isVerified(bytes calldata inclusion_data) external view returns (bool, bytes32); +interface IRiscZeroVerifier { + function verify(bytes calldata seal, bytes32 imageId, bytes32 journalDigest) external view; +} + +struct EigenDAInclusionData { + bytes seal; + bytes32 imageId; + bytes32 journalDigest; + bytes32 eigenDAHash; } contract EigenDAL1DAValidator is IL1DAValidator { error InvalidValidatorOutputHash(); error ProofNotVerified(); - IEigenDABlobProofRegistry public eigenDACertAndBlobVerifier; + IRiscZeroVerifier public risc0Verifier; - constructor(address eigendaCertAndBlobVerifierAddress) { - eigenDACertAndBlobVerifier = IEigenDABlobProofRegistry(eigendaCertAndBlobVerifierAddress); + constructor(address risc0VerifierAddress) { + risc0Verifier = IRiscZeroVerifier(risc0VerifierAddress); } function checkDA( @@ -31,13 +38,14 @@ contract EigenDAL1DAValidator is IL1DAValidator { } bytes32 stateDiffHash = bytes32(operatorDAInput[:32]); - // Check that the proof for the given inclusion data was verified in the EigenDA CertAndBlobVerifier contract - (bool isVerified, bytes32 eigenDAHash) = eigenDACertAndBlobVerifier.isVerified(operatorDAInput[32:]); + // Decode the inclusion data from the operatorDAInput + EigenDAInclusionData memory inclusionData = abi.decode(operatorDAInput[32:], (EigenDAInclusionData)); - if (!isVerified) revert ProofNotVerified(); + // Verify the risczero proof + risc0Verifier.verify(inclusionData.seal, inclusionData.imageId, inclusionData.journalDigest); - // Check that the eigenDAHash from the EigenDACertAndBlobVerifier (originally calculted on Risc0 guest) is correct - if (l2DAValidatorOutputHash != keccak256(abi.encodePacked(stateDiffHash, eigenDAHash))) + // Check that the eigenDAHash from the Inclusion Data (originally calculated on Risc0 guest) is correct + if (l2DAValidatorOutputHash != keccak256(abi.encodePacked(stateDiffHash, inclusionData.eigenDAHash))) revert InvalidValidatorOutputHash(); output.stateDiffHash = stateDiffHash; diff --git a/l1-contracts/deploy-scripts/DeployL1.s.sol b/l1-contracts/deploy-scripts/DeployL1.s.sol index f2244a48e5..189ffcc46a 100644 --- a/l1-contracts/deploy-scripts/DeployL1.s.sol +++ b/l1-contracts/deploy-scripts/DeployL1.s.sol @@ -284,10 +284,10 @@ contract DeployL1Script is Script, DeployUtils { } if (config.contracts.eigenDAL1DAValidator == address(0)) { - if (config.contracts.eigenDACertAndBlobVerifier == address(0)) { - console.log("EigenDACertAndBlobVerifier not deployed, do not use for production"); + if (config.contracts.eigenDARiscZeroVerifier == address(0)) { + console.log("EigenDARiscZeroVerifier not deployed, do not use for production"); } - addresses.daAddresses.eigenDACertAndBlobVerifier = config.contracts.eigenDACertAndBlobVerifier; + addresses.daAddresses.eigenDARiscZeroVerifier = config.contracts.eigenDARiscZeroVerifier; addresses.daAddresses.eigenDAL1DAValidator = deploySimpleContract("EigenDAL1DAValidator", false); } else { addresses.daAddresses.eigenDAL1DAValidator = config.contracts.eigenDAL1DAValidator; @@ -604,8 +604,8 @@ contract DeployL1Script is Script, DeployUtils { vm.serializeAddress( "deployed_addresses", - "eigenda_cert_and_blob_verifier_addr", - addresses.daAddresses.eigenDACertAndBlobVerifier + "eigenda_risc_zero_verifier_addr", + addresses.daAddresses.eigenDARiscZeroVerifier ); string memory deployedAddresses = vm.serializeAddress( diff --git a/l1-contracts/deploy-scripts/DeployUtils.s.sol b/l1-contracts/deploy-scripts/DeployUtils.s.sol index 4c1b609789..60b2f76037 100644 --- a/l1-contracts/deploy-scripts/DeployUtils.s.sol +++ b/l1-contracts/deploy-scripts/DeployUtils.s.sol @@ -64,7 +64,7 @@ struct DataAvailabilityDeployedAddresses { address availBridge; address availL1DAValidator; address eigenDAL1DAValidator; - address eigenDACertAndBlobVerifier; + address eigenDARiscZeroVerifier; } // solhint-disable-next-line gas-struct-packing @@ -129,7 +129,7 @@ struct ContractsConfig { bytes32 evmEmulatorHash; address availL1DAValidator; address eigenDAL1DAValidator; - address eigenDACertAndBlobVerifier; + address eigenDARiscZeroVerifier; } struct TokensConfig { @@ -212,10 +212,8 @@ abstract contract DeployUtils is Create2FactoryUtils { config.contracts.eigenDAL1DAValidator = toml.readAddress("$.contracts.eigenda_l1_validator"); } - if (vm.keyExistsToml(toml, "$.contracts.eigenda_cert_and_blob_verifier_addr")) { - config.contracts.eigenDACertAndBlobVerifier = toml.readAddress( - "$.contracts.eigenda_cert_and_blob_verifier_addr" - ); + if (vm.keyExistsToml(toml, "$.contracts.eigenda_risc_zero_verifier_addr")) { + config.contracts.eigenDARiscZeroVerifier = toml.readAddress("$.contracts.eigenda_risc_zero_verifier_addr"); } config.tokens.tokenWethAddress = toml.readAddress("$.tokens.token_weth_address"); @@ -446,7 +444,7 @@ abstract contract DeployUtils is Create2FactoryUtils { } else if (compareStrings(contractName, "DummyAvailBridge")) { return abi.encode(); } else if (compareStrings(contractName, "EigenDAL1DAValidator")) { - return abi.encode(addresses.daAddresses.eigenDACertAndBlobVerifier); + return abi.encode(addresses.daAddresses.eigenDARiscZeroVerifier); } else if (compareStrings(contractName, "Verifier")) { return abi.encode(addresses.stateTransition.verifierFflonk, addresses.stateTransition.verifierPlonk); } else if (compareStrings(contractName, "VerifierFflonk")) {