Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 32 additions & 7 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ members = [
"frame/account-mapping",
"frame/account-mapping/runtime-api",
"frame/account-mapping/rpc",
"frame/zk-verifier/runtime-api",
"frame/zk-verifier/rpc",
"frame/evm/precompile/account-mapping",
"client/api",
"client/consensus",
Expand Down Expand Up @@ -250,6 +252,8 @@ pallet-shielded-pool = { path = "frame/shielded-pool", default-features = false
pallet-shielded-pool-rpc = { path = "frame/shielded-pool/rpc" }
pallet-shielded-pool-runtime-api = { path = "frame/shielded-pool/runtime-api", default-features = false }
pallet-zk-verifier = { path = "frame/zk-verifier", default-features = false }
pallet-zk-verifier-rpc = { path = "frame/zk-verifier/rpc" }
pallet-zk-verifier-runtime-api = { path = "frame/zk-verifier/runtime-api", default-features = false }

# Frontier Utility
precompile-utils = { path = "precompiles", default-features = false }
Expand Down
102 changes: 1 addition & 101 deletions frame/shielded-pool/src/mock.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,23 +37,19 @@ parameter_types! {
pub const MinShieldAmount: u128 = 100;
pub const MaxProofSize: u32 = 256;
pub const MaxPublicInputs: u32 = 10;
pub const MaxVerificationKeySize: u32 = 2048;
pub const RequestExpiration: u64 = 1000;
}

impl pallet_zk_verifier::Config for Test {
type AdminOrigin = frame_system::EnsureRoot<Self::AccountId>;
type MaxProofSize = MaxProofSize;
type MaxPublicInputs = MaxPublicInputs;
type MaxVerificationKeySize = MaxVerificationKeySize;
type WeightInfo = pallet_zk_verifier::weights::SubstrateWeight<Test>;
}

/// Mock ZK verifier for testing - always returns true
///
/// ⚠️ WARNING: This mock bypasses all ZK proof validation!
/// Use only for testing business logic, not cryptographic correctness.
///
/// For testing proof validation errors, use `FailingZkVerifier` instead.
pub struct MockZkVerifier;

impl ZkVerifierPort for MockZkVerifier {
Expand Down Expand Up @@ -135,94 +131,6 @@ impl ZkVerifierPort for MockZkVerifier {
}
}

/// Mock ZK verifier that always fails - for testing error paths
///
/// **IMPORTANT**: This mock is currently NOT used by any tests (dead code).
/// It exists to demonstrate how to test invalid proof scenarios.
///
/// To use this mock, create a separate test configuration:
/// ```ignore
/// construct_runtime!(
/// pub enum TestWithFailingVerifier {
/// System: frame_system,
/// Balances: pallet_balances,
/// ShieldedPool: pallet_shielded_pool,
/// }
/// );
///
/// impl pallet_shielded_pool::Config for TestWithFailingVerifier {
/// type ZkVerifier = FailingZkVerifier; // ← Use this instead of MockZkVerifier
/// // ... other config
/// }
///
/// #[test]
/// fn unshield_fails_with_invalid_proof() {
/// new_test_ext_failing().execute_with(|| {
/// // Any proof will fail with FailingZkVerifier
/// assert_noop!(ShieldedPool::unshield(...), Error::InvalidProof);
/// });
/// }
/// ```
///
/// See: `frame/shielded-pool/docs/MOCK_SYSTEM_ANALYSIS.md` for detailed analysis
/// See: `frame/shielded-pool/src/tests/integration/invalid_proof_tests.rs` for demo tests
#[allow(dead_code)] // Intentionally unused - template for negative tests
pub struct FailingZkVerifier;

impl ZkVerifierPort for FailingZkVerifier {
fn verify_transfer_proof(
_proof: &[u8],
_merkle_root: &[u8; 32],
_nullifiers: &[[u8; 32]],
_commitments: &[[u8; 32]],
_version: Option<u32>,
) -> Result<bool, sp_runtime::DispatchError> {
// Always return false for testing invalid proofs
Ok(false)
}

fn verify_unshield_proof(
_proof: &[u8],
_merkle_root: &[u8; 32],
_nullifier: &[u8; 32],
_amount: u128,
_recipient: &[u8; 32],
_asset_id: u32,
_version: Option<u32>,
) -> Result<bool, sp_runtime::DispatchError> {
// Always return false for testing invalid proofs
Ok(false)
}

fn verify_disclosure_proof(
_proof: &[u8],
_public_signals: &[u8],
_version: Option<u32>,
) -> Result<bool, sp_runtime::DispatchError> {
// Always return false for testing invalid proofs
Ok(false)
}

fn batch_verify_disclosure_proofs(
_proofs: &[sp_std::vec::Vec<u8>],
_public_signals: &[sp_std::vec::Vec<u8>],
_version: Option<u32>,
) -> Result<bool, sp_runtime::DispatchError> {
// Always return false for testing invalid proofs
Ok(false)
}

fn verify_private_link_proof(
_proof: &[u8],
_commitment: &[u8; 32],
_call_hash_fe: &[u8; 32],
_version: Option<u32>,
) -> Result<bool, sp_runtime::DispatchError> {
// Always return false for testing invalid proofs
Ok(false)
}
}

impl pallet_shielded_pool::Config for Test {
type Currency = Balances;
type ZkVerifier = MockZkVerifier;
Expand Down Expand Up @@ -258,11 +166,3 @@ pub fn new_test_ext() -> sp_io::TestExternalities {
ext.execute_with(|| System::set_block_number(1));
ext
}

/// Advance to specified block number
#[allow(dead_code)]
pub fn run_to_block(n: u64) {
while System::block_number() < n {
System::set_block_number(System::block_number() + 1);
}
}
7 changes: 1 addition & 6 deletions frame/zk-verifier/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "pallet-zk-verifier"
version = "0.3.0"
version = "0.4.0"
description = "Zero-Knowledge proof verification pallet for Orbinum"
authors = ["Orbinum Team"]
license = "GPL-3.0-or-later"
Expand Down Expand Up @@ -38,14 +38,9 @@ orbinum-zk-core = { path = "../../primitives/zk-core", default-features = false
orbinum-zk-verifier = { path = "../../primitives/zk-verifier", default-features = false }

[dev-dependencies]
criterion = { version = "0.5", default-features = false, features = ["html_reports"] }
orbinum-zk-core = { path = "../../primitives/zk-core", default-features = false }
orbinum-zk-verifier = { path = "../../primitives/zk-verifier", default-features = false }

[[bench]]
name = "groth16_verify"
harness = false

[features]
default = ["std"]
std = [
Expand Down
Loading
Loading