|
2 | 2 | pragma solidity ^0.8.13;
|
3 | 3 |
|
4 | 4 | import {Output, OutputLib, Receipt, ReceiptClaim, ReceiptClaimLib, IRiscZeroVerifier, SystemExitCode, ExitCode} from "./IRiscZeroVerifier.sol";
|
| 5 | +import {Groth16Verifier} from "./groth16/Groth16Verifier.sol"; |
5 | 6 | import {SafeCast} from "openzeppelin-contracts/contracts/utils/math/SafeCast.sol";
|
6 | 7 |
|
7 |
| -contract Dispute is IRISC0Verifier { |
| 8 | +contract Dispute is IRiscZeroVerifier, Groth16Verifier { |
8 | 9 | struct Validator {
|
9 | 10 | bool isRegistered;
|
10 | 11 | uint256 stake;
|
@@ -42,24 +43,29 @@ contract Dispute is IRISC0Verifier {
|
42 | 43 | uint256 public constant MIN_STAKE = 1 ether;
|
43 | 44 | uint256 public delta; // Time window for filing a dispute
|
44 | 45 | uint256 public p; // Time to run the zero-knowledge proof
|
| 46 | + uint256 public m; // Minimum number of validators required to accept a block |
45 | 47 |
|
46 | 48 | mapping(address => Validator) public validators;
|
47 | 49 | mapping(bytes => Dispute) public disputes;
|
48 | 50 | mapping(bytes32 => Proof) public verifiedProofs; // Maps blockHash to Proof
|
| 51 | + mapping(bytes32 => OptimisticCommitment) public optimisticCommitments; // Maps blockHash to OptimisticCommitment |
49 | 52 |
|
50 |
| - IRISC0Verifier public verifier; |
| 53 | + IRiscZeroVerifier public verifier; |
51 | 54 |
|
52 | 55 | event ValidatorRegistered(address indexed validator, uint256 stake);
|
53 | 56 | event ValidatorDeregistered(address indexed validator);
|
54 | 57 | event DisputeSubmitted(bytes indexed disputeHash, bytes blockHash, address indexed submitter);
|
55 | 58 | event DisputeResolved(bytes indexed disputeHash, DisputeState state);
|
56 | 59 | event ProofSubmitted(bytes32 indexed blockHash, bool isValid);
|
57 | 60 | event ProofVerified(bytes32 indexed blockHash, bool isValid);
|
| 61 | + event BlockAccepted(bytes32 indexed blockHash); |
| 62 | + event OptimisticCommitmentSubmitted(bytes32 indexed blockHash, bytes stateCommitment, uint256 validatorCount); |
58 | 63 |
|
59 |
| - constructor(uint256 _delta, uint256 _p, address _verifier) { |
| 64 | + constructor(uint256 _delta, uint256 _p, uint256 _m, address _verifier) { |
60 | 65 | delta = _delta;
|
61 | 66 | p = _p;
|
62 |
| - verifier = IRISC0Verifier(_verifier); |
| 67 | + m = _m; |
| 68 | + verifier = IRiscZeroVerifier(_verifier); |
63 | 69 | }
|
64 | 70 |
|
65 | 71 | function registerValidator() external payable {
|
@@ -96,9 +102,9 @@ contract Dispute is IRISC0Verifier {
|
96 | 102 | emit DisputeResolved(disputeHash, state);
|
97 | 103 | }
|
98 | 104 |
|
99 |
| - function submitProof(bytes32 blockHash, bytes calldata proof, bytes32[] calldata publicInputs) external { |
| 105 | + function submitProof(bytes32 blockHash, Receipt calldata receipt, bytes32[] calldata publicInputs) external { |
100 | 106 | require(!verifiedProofs[blockHash].exists, "Proof already submitted for this block");
|
101 |
| - bool isValid = verifier.verifyProof(proof, publicInputs); |
| 107 | + bool isValid = verifier.verify_integrity(receipt); |
102 | 108 | verifiedProofs[blockHash] = Proof(blockHash, isValid, true);
|
103 | 109 | emit ProofSubmitted(blockHash, isValid);
|
104 | 110 | }
|
|
0 commit comments