Skip to content

chore: allow mock input validator in CRISP#782

Merged
ctrlc03 merged 1 commit into
mainfrom
chore/mock-input-val
Oct 6, 2025
Merged

chore: allow mock input validator in CRISP#782
ctrlc03 merged 1 commit into
mainfrom
chore/mock-input-val

Conversation

@ctrlc03

@ctrlc03 ctrlc03 commented Oct 3, 2025

Copy link
Copy Markdown
Collaborator

Allow CRISP to have a mock input validator for testing purposes

Summary by CodeRabbit

  • New Features
    • Added an optional mock input validator contract for testing and demos.
  • Refactor
    • Deployment/factory flow updated to accept a pre-deployed input validator address for greater flexibility.
  • Documentation
    • Updated example environment files with a new CRISP program address.
  • Chores
    • Consolidated deployment logs into a single summary block.
    • Updated build metadata for contract artifacts (no functional changes).

@ctrlc03 ctrlc03 requested a review from cedoor October 3, 2025 15:43
@vercel

vercel Bot commented Oct 3, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Preview Comments Updated (UTC)
crisp Ready Ready Preview Comment Oct 6, 2025 1:11pm
1 Skipped Deployment
Project Deployment Preview Comments Updated (UTC)
enclave-docs Skipped Skipped Oct 6, 2025 1:11pm

@coderabbitai

coderabbitai Bot commented Oct 3, 2025

Copy link
Copy Markdown
Contributor

Walkthrough

Refactors CRISP input-validator provisioning to accept an injected validator address, adds a MockCRISPInputValidator, updates deployment to choose and pass the validator address to the factory, updates example E3 program addresses, refreshes some artifact build metadata, and consolidates deploy logging.

Changes

Cohort / File(s) Summary
Env examples
examples/CRISP/client/.env.example, examples/CRISP/server/.env.example
Updated E3 program address to 0x322813Fd9A801c5507c9de605d63CEA4f2CE6c44.
Factory constructor refactor
examples/CRISP/contracts/CRISPInputValidatorFactory.sol
Constructor signature changed to constructor(address inputValidator) and now accepts an existing input-validator address to pass to the base Factory instead of deploying one on construction.
Mock input validator added
examples/CRISP/contracts/Mocks/MockCRISPInputValidator.sol
Added MockCRISPInputValidator implementing IInputValidator and Clone; includes _initialize(), validate(address, bytes) (decodes and returns vote, reverts on empty input), state for policy/noirVerifier, and new errors.
CRISP deploy flow
examples/CRISP/deploy/Deploy.s.sol
Adds USE_MOCK_INPUT_VALIDATOR switch: deploys chosen validator (mock or real), logs its address, and constructs CRISPInputValidatorFactory(inputValidatorAddress).
Artifacts metadata only
packages/enclave-contracts/artifacts/.../ICiphernodeRegistry.json, .../IEnclave.json, .../NaiveRegistryFilter.json
Only buildInfoId in artifact metadata updated (no ABI/bytecode/interface changes).
Deploy script logging
packages/enclave-contracts/scripts/deployEnclave.ts
Removed individual per-step logs and added a consolidated multiline deployments summary; no control-flow changes.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  participant Deployer
  participant MockValidator as MockCRISPInputValidator
  participant RealValidator as CRISPInputValidator
  participant Factory as CRISPInputValidatorFactory

  Deployer->>Deployer: Read USE_MOCK_INPUT_VALIDATOR
  alt use mock
    Deployer->>MockValidator: deploy()
    Deployer->>Deployer: inputValidator = MockValidator.address
  else use real
    Deployer->>RealValidator: deploy()
    Deployer->>Deployer: inputValidator = RealValidator.address
  end
  Deployer->>Factory: new CRISPInputValidatorFactory(inputValidator)
  Note right of Deployer: Log consolidated deployment summary
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Suggested reviewers

  • cedor
  • 0xjei
  • hmzakhalid

Poem

A rabbit nudges bytes and keys,
I swapped a build for gentle ease.
Mock or real, at deploy we choose,
The factory waits — no code to lose.
Hops, logs, and carrots — small delights 🥕🐇

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The title succinctly conveys the primary change by indicating the addition of support for a mock input validator in the CRISP component, matching the pull request’s intent and scope without extraneous detail.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch chore/mock-input-val

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@ctrlc03 ctrlc03 self-assigned this Oct 3, 2025

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
examples/CRISP/contracts/Mocks/MockCRISPInputValidator.sol (1)

42-48: Consider documenting why state is unused in the mock.

The validate function skips all verification checks (appropriate for a mock), but the policy, noirVerifier state variables and InvalidInputData, InvalidNoirProof errors are never used. This might confuse developers reading the code.

Consider adding a comment explaining that this mock bypasses validation for testing purposes, or remove the unused state/errors if they serve no purpose in the mock implementation.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 24c9cac and 3ac7ea6.

📒 Files selected for processing (9)
  • examples/CRISP/client/.env.example (1 hunks)
  • examples/CRISP/contracts/CRISPInputValidatorFactory.sol (1 hunks)
  • examples/CRISP/contracts/Mocks/MockCRISPInputValidator.sol (1 hunks)
  • examples/CRISP/deploy/Deploy.s.sol (2 hunks)
  • examples/CRISP/server/.env.example (1 hunks)
  • packages/enclave-contracts/artifacts/contracts/interfaces/ICiphernodeRegistry.sol/ICiphernodeRegistry.json (1 hunks)
  • packages/enclave-contracts/artifacts/contracts/interfaces/IEnclave.sol/IEnclave.json (1 hunks)
  • packages/enclave-contracts/artifacts/contracts/registry/NaiveRegistryFilter.sol/NaiveRegistryFilter.json (1 hunks)
  • packages/enclave-contracts/scripts/deployEnclave.ts (1 hunks)
🧰 Additional context used
🪛 dotenv-linter (3.3.0)
examples/CRISP/server/.env.example

[warning] 16-16: [UnorderedKey] The E3_PROGRAM_ADDRESS key should go before the ENCLAVE_ADDRESS key

(UnorderedKey)

examples/CRISP/client/.env.example

[warning] 4-4: [UnorderedKey] The VITE_E3_PROGRAM_ADDRESS key should go before the VITE_ENCLAVE_API key

(UnorderedKey)


[warning] 4-4: [ValueWithoutQuotes] This value needs to be surrounded in quotes

(ValueWithoutQuotes)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (7)
  • GitHub Check: build_sdk
  • GitHub Check: integration_prebuild
  • GitHub Check: build_enclave_cli
  • GitHub Check: test_contracts
  • GitHub Check: test_net
  • GitHub Check: rust_unit
  • GitHub Check: Build & Push Image
🔇 Additional comments (11)
packages/enclave-contracts/artifacts/contracts/interfaces/ICiphernodeRegistry.sol/ICiphernodeRegistry.json (1)

222-222: Build metadata updated — no ABI changes in this artifact

Looks fine as a buildInfoId bump aligned with other artifacts.

packages/enclave-contracts/artifacts/contracts/interfaces/IEnclave.sol/IEnclave.json (1)

707-707: Build metadata updated — interface unchanged

Acknowledging buildInfoId refresh; no functional diffs indicated.

packages/enclave-contracts/artifacts/contracts/registry/NaiveRegistryFilter.sol/NaiveRegistryFilter.json (1)

308-309: Approve metadata-only change: verified that ABI, bytecode, and deployedBytecode in all three JSON artifacts match main; only buildInfoId was updated.

examples/CRISP/client/.env.example (1)

4-4: LGTM! Address update is consistent.

The E3_PROGRAM_ADDRESS update aligns with the new deployment flow introduced in this PR.

Note: Static analysis suggests adding quotes and reordering keys, but these are optional style preferences for .env files and can be safely ignored.

examples/CRISP/server/.env.example (1)

16-16: LGTM! Consistent address update.

The E3_PROGRAM_ADDRESS update matches the client configuration and aligns with the new deployment flow.

examples/CRISP/contracts/Mocks/MockCRISPInputValidator.sol (1)

30-36: LGTM! Initialization logic is correct.

The _initialize function properly decodes the policy and verifier addresses from appended bytes, matching the encoding in the factory's deploy() method.

examples/CRISP/deploy/Deploy.s.sol (3)

35-36: LGTM! Necessary imports added.

The imports for both CRISPInputValidator and MockCRISPInputValidator are correctly added to support the conditional deployment logic.


184-194: LGTM! Conditional deployment logic is well-structured.

The conditional deployment pattern matches the existing USE_MOCK_VERIFIER approach and provides clear logging for which validator is deployed. The default to the real validator (false) is appropriate for production use.


196-196: LGTM! Factory instantiation updated correctly.

The factory constructor now receives the deployed input validator address, successfully implementing the dependency injection pattern introduced in this PR.

examples/CRISP/contracts/CRISPInputValidatorFactory.sol (2)

15-15: LGTM! Constructor refactored for dependency injection.

The constructor now accepts the input validator address as a parameter, enabling the factory to work with either the real or mock validator implementation. This is a clean separation of concerns.


27-27: Remove initialize() compatibility concern. Both CRISPInputValidator and MockCRISPInputValidator inherit the external initialize() implementation from Clone, so casting to CRISPInputValidator and calling initialize() on any clone (including those of the mock) is safe.

Likely an incorrect or invalid review comment.

Comment thread packages/enclave-contracts/scripts/deployEnclave.ts
@ctrlc03 ctrlc03 force-pushed the chore/mock-input-val branch from 3ac7ea6 to 8a80981 Compare October 3, 2025 15:56
@vercel vercel Bot temporarily deployed to Preview – enclave-docs October 3, 2025 15:57 Inactive
@vercel vercel Bot temporarily deployed to Preview – crisp October 3, 2025 15:57 Inactive

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (3)
examples/CRISP/contracts/Mocks/MockCRISPInputValidator.sol (3)

16-20: Verify: Unused state variables.

The policy and noirVerifier state variables are initialized in _initialize() but never used in validate(). If this mock is intentionally bypassing policy checks and proof verification for testing purposes, consider removing these unused variables to clarify intent. Otherwise, ensure they're utilized appropriately.


22-27: Consider removing unused error definitions.

InvalidInputData and InvalidNoirProof are defined but never thrown. If they're retained for interface consistency with the real validator, consider adding a comment to clarify. Otherwise, remove them to reduce clutter.


38-48: Consider handling decode failures gracefully.

The validate() function decodes input data without error handling. If the data structure doesn't match (bytes, bytes, bytes32[], bytes), abi.decode will revert with a generic error rather than InvalidInputData. For better debugging in test scenarios, consider wrapping the decode in a try-catch block.

Example:

 function validate(address sender, bytes memory data) external returns (bytes memory input) {
     if (data.length == 0) revert EmptyInputData();
 
-    (,,, bytes memory vote) = abi.decode(data, (bytes, bytes, bytes32[], bytes));
+    try this.decodeData(data) returns (bytes memory vote) {
+        input = vote;
+    } catch {
+        revert InvalidInputData(data);
+    }
+}
 
-    input = vote;
+function decodeData(bytes memory data) external pure returns (bytes memory) {
+    (,,, bytes memory vote) = abi.decode(data, (bytes, bytes, bytes32[], bytes));
+    return vote;
 }
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 3ac7ea6 and 8a80981.

📒 Files selected for processing (9)
  • examples/CRISP/client/.env.example (1 hunks)
  • examples/CRISP/contracts/CRISPInputValidatorFactory.sol (1 hunks)
  • examples/CRISP/contracts/Mocks/MockCRISPInputValidator.sol (1 hunks)
  • examples/CRISP/deploy/Deploy.s.sol (2 hunks)
  • examples/CRISP/server/.env.example (1 hunks)
  • packages/enclave-contracts/artifacts/contracts/interfaces/ICiphernodeRegistry.sol/ICiphernodeRegistry.json (1 hunks)
  • packages/enclave-contracts/artifacts/contracts/interfaces/IEnclave.sol/IEnclave.json (1 hunks)
  • packages/enclave-contracts/artifacts/contracts/registry/NaiveRegistryFilter.sol/NaiveRegistryFilter.json (1 hunks)
  • packages/enclave-contracts/scripts/deployEnclave.ts (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • packages/enclave-contracts/artifacts/contracts/registry/NaiveRegistryFilter.sol/NaiveRegistryFilter.json
🚧 Files skipped from review as they are similar to previous changes (4)
  • packages/enclave-contracts/artifacts/contracts/interfaces/IEnclave.sol/IEnclave.json
  • packages/enclave-contracts/scripts/deployEnclave.ts
  • examples/CRISP/deploy/Deploy.s.sol
  • examples/CRISP/contracts/CRISPInputValidatorFactory.sol
🧰 Additional context used
🪛 dotenv-linter (3.3.0)
examples/CRISP/server/.env.example

[warning] 16-16: [UnorderedKey] The E3_PROGRAM_ADDRESS key should go before the ENCLAVE_ADDRESS key

(UnorderedKey)

examples/CRISP/client/.env.example

[warning] 4-4: [UnorderedKey] The VITE_E3_PROGRAM_ADDRESS key should go before the VITE_ENCLAVE_API key

(UnorderedKey)


[warning] 4-4: [ValueWithoutQuotes] This value needs to be surrounded in quotes

(ValueWithoutQuotes)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (8)
  • GitHub Check: build_sdk
  • GitHub Check: build_e3_support_dev
  • GitHub Check: build_enclave_cli
  • GitHub Check: integration_prebuild
  • GitHub Check: test_net
  • GitHub Check: rust_unit
  • GitHub Check: test_contracts
  • GitHub Check: build_e3_support_risc0
🔇 Additional comments (3)
examples/CRISP/client/.env.example (1)

4-4: LGTM! Address update aligns with deployment changes.

The new E3 program address reflects the updated CRISP deployment flow with injectable input validators.

examples/CRISP/server/.env.example (1)

16-16: LGTM! Consistent address update.

The E3_PROGRAM_ADDRESS update matches the client configuration and reflects the new deployment flow.

examples/CRISP/contracts/Mocks/MockCRISPInputValidator.sol (1)

1-15: LGTM! Contract declaration and imports are correct.

The mock validator correctly implements the required interfaces and imports necessary dependencies.

@cedoor cedoor left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

utACK 👍🏽 Ready to be merged.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (4)
examples/CRISP/contracts/Mocks/MockCRISPInputValidator.sol (4)

16-20: Consider removing unused state variables.

The policy and noirVerifier state variables are initialized in _initialize but never referenced in the validate function. If they're intentionally present for future use or to maintain structural consistency with the real validator, document this. Otherwise, remove them to reduce confusion.

Apply this diff if the state is genuinely unused:

-    /// @notice The policy that will be used to validate the input.
-    IBasePolicy internal policy;
-
-    /// @notice The verifier that will be used to validate the input.
-    IVerifier internal noirVerifier;

And simplify _initialize:

 function _initialize() internal virtual override(Clone) {
     super._initialize();
-
-    (address policyAddr, address verifierAddr) = abi.decode(_getAppendedBytes(), (address, address));
-    policy = IBasePolicy(policyAddr);
-    noirVerifier = IVerifier(verifierAddr);
+    // Mock: appended bytes ignored for testing
 }

24-27: Remove unused error definitions.

InvalidInputData and InvalidNoirProof are defined but never emitted. Remove them to reduce confusion about the mock's behavior.

Apply this diff:

-    /// @notice The error emitted when the input data is invalid.
-    error InvalidInputData(bytes reason);
-    /// @notice The error emitted when the Noir proof is invalid.
-    error InvalidNoirProof();

42-48: Remove unused sender parameter.

The sender parameter is declared but not used in the validation logic. Consider removing it or documenting why it's present but unused.

Apply this diff:

-    function validate(address sender, bytes memory data) external returns (bytes memory input) {
+    function validate(address /* sender */, bytes memory data) external returns (bytes memory input) {

Alternatively, if removing would break the interface:

function validate(address /* sender */, bytes memory data) external returns (bytes memory input) {

13-15: Add documentation clarifying mock behavior.

Since this is a mock validator that bypasses actual validation, add NatSpec comments explaining:

  • What validation is being skipped
  • Why certain state/errors from the real validator are unused
  • The intended test scenarios

Example:

 /// @title MockCRISPInputValidator.
-/// @notice Mock Enclave Input Validator
+/// @notice Mock Enclave Input Validator for testing purposes.
+/// @dev This mock bypasses policy and proof validation, directly extracting
+/// the vote payload from input data. Use only in test environments.
 contract MockCRISPInputValidator is IInputValidator, Clone {
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 29b7102 and 6382c74.

📒 Files selected for processing (9)
  • examples/CRISP/client/.env.example (1 hunks)
  • examples/CRISP/contracts/CRISPInputValidatorFactory.sol (1 hunks)
  • examples/CRISP/contracts/Mocks/MockCRISPInputValidator.sol (1 hunks)
  • examples/CRISP/deploy/Deploy.s.sol (2 hunks)
  • examples/CRISP/server/.env.example (1 hunks)
  • packages/enclave-contracts/artifacts/contracts/interfaces/ICiphernodeRegistry.sol/ICiphernodeRegistry.json (1 hunks)
  • packages/enclave-contracts/artifacts/contracts/interfaces/IEnclave.sol/IEnclave.json (1 hunks)
  • packages/enclave-contracts/artifacts/contracts/registry/NaiveRegistryFilter.sol/NaiveRegistryFilter.json (1 hunks)
  • packages/enclave-contracts/scripts/deployEnclave.ts (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (3)
  • packages/enclave-contracts/artifacts/contracts/registry/NaiveRegistryFilter.sol/NaiveRegistryFilter.json
  • packages/enclave-contracts/artifacts/contracts/interfaces/IEnclave.sol/IEnclave.json
  • packages/enclave-contracts/artifacts/contracts/interfaces/ICiphernodeRegistry.sol/ICiphernodeRegistry.json
🧰 Additional context used
🪛 dotenv-linter (3.3.0)
examples/CRISP/client/.env.example

[warning] 4-4: [UnorderedKey] The VITE_E3_PROGRAM_ADDRESS key should go before the VITE_ENCLAVE_API key

(UnorderedKey)


[warning] 4-4: [ValueWithoutQuotes] This value needs to be surrounded in quotes

(ValueWithoutQuotes)

examples/CRISP/server/.env.example

[warning] 16-16: [UnorderedKey] The E3_PROGRAM_ADDRESS key should go before the ENCLAVE_ADDRESS key

(UnorderedKey)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (7)
  • GitHub Check: build_sdk
  • GitHub Check: build_e3_support_dev
  • GitHub Check: test_net
  • GitHub Check: build_enclave_cli
  • GitHub Check: test_contracts
  • GitHub Check: rust_unit
  • GitHub Check: integration_prebuild
🔇 Additional comments (6)
packages/enclave-contracts/scripts/deployEnclave.ts (1)

72-78: LGTM! Previous readability issue resolved.

The consolidated deployment summary is clear and well-formatted. The spaces after colons that were requested in the previous review have been successfully applied, improving readability.

examples/CRISP/client/.env.example (1)

4-4: LGTM! Environment address updated consistently.

The E3_PROGRAM_ADDRESS has been updated to match the new deployment address, consistent with the server-side configuration.

examples/CRISP/server/.env.example (1)

16-16: LGTM! Environment address synchronized.

The E3_PROGRAM_ADDRESS update aligns with the client configuration and deployment changes.

examples/CRISP/contracts/CRISPInputValidatorFactory.sol (1)

14-15: Good refactor! Address injection enables flexible validator selection.

The updated constructor now accepts an external validator address instead of deploying a new instance internally. This enables runtime selection between CRISPInputValidator and MockCRISPInputValidator, aligning well with the PR objectives.

examples/CRISP/deploy/Deploy.s.sol (2)

35-36: LGTM! Imports added for validator selection.

The new imports support the runtime selection between mock and real input validators.


184-200: Well-implemented validator selection logic.

The runtime selection between MockCRISPInputValidator and CRISPInputValidator via the USE_MOCK_INPUT_VALIDATOR environment variable is clean and well-logged. The deployed validator address is correctly passed to the factory constructor, enabling the intended testing flexibility.

@ctrlc03 ctrlc03 merged commit 2861d9b into main Oct 6, 2025
22 checks passed
@ctrlc03 ctrlc03 mentioned this pull request Oct 8, 2025
hmzakhalid pushed a commit that referenced this pull request Oct 8, 2025
hmzakhalid added a commit that referenced this pull request Oct 9, 2025
* chore: update zkvm to v3.0.0 (#791)

* chore: update zkvm to v3.0.0

* chore: update deployment script

(cherry picked from commit 2d9133e)

* chore: update risc0 version v3.0.3 (#793)

* chore: update risc0 version

* chore: remove risc0 crates from CRISP

(cherry picked from commit c94f5f3)

* chore: update lock and Dockerfile (#794)

(cherry picked from commit c2d7827)

* fix: risc0 dev mode env var (#810)

* fix: risc0 dev mode env var

* chore: lint

* chore: add dev comment

(cherry picked from commit 7e09bad)

* chore: allow mock input validator in CRISP (#782)

(cherry picked from commit 2861d9b)

* chore: update cargo toml and contract

---------

Co-authored-by: ctrlc03 <93448202+ctrlc03@users.noreply.github.com>
Co-authored-by: гλ <contact@rudiyardley.com>
@ctrlc03 ctrlc03 deleted the chore/mock-input-val branch October 11, 2025 16:06
ctrlc03 added a commit that referenced this pull request Oct 11, 2025
* chore: update zkvm to v3.0.0 (#791)

* chore: update zkvm to v3.0.0

* chore: update deployment script

(cherry picked from commit 2d9133e)

* chore: update risc0 version v3.0.3 (#793)

* chore: update risc0 version

* chore: remove risc0 crates from CRISP

(cherry picked from commit c94f5f3)

* chore: update lock and Dockerfile (#794)

(cherry picked from commit c2d7827)

* fix: risc0 dev mode env var (#810)

* fix: risc0 dev mode env var

* chore: lint

* chore: add dev comment

(cherry picked from commit 7e09bad)

* chore: allow mock input validator in CRISP (#782)

(cherry picked from commit 2861d9b)

* chore: update cargo toml and contract

---------

Co-authored-by: ctrlc03 <93448202+ctrlc03@users.noreply.github.com>
Co-authored-by: гλ <contact@rudiyardley.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants