diff --git a/Makefile b/Makefile index cce8ef5ff8..f18c8d4902 100644 --- a/Makefile +++ b/Makefile @@ -518,15 +518,15 @@ batcher_send_mina_task: @echo "Sending Mina state task to Batcher..." @cd batcher/aligned/ && cargo run --release -- submit \ --proving_system Mina \ - --proof ../../scripts/test_files/mina/mina_state.proof \ - --public_input ../../scripts/test_files/mina/mina_state.pub \ + --proof ../../scripts/test_files/mina/devnet_mina_state.proof \ + --public_input ../../scripts/test_files/mina/devnet_mina_state.pub \ --proof_generator_addr 0x66f9664f97F2b50F62D13eA064982f936dE76657 batcher_send_mina_task_bad_hash: @echo "Sending Mina state task to Batcher..." @cd batcher/aligned/ && cargo run --release -- submit \ --proving_system Mina \ - --proof ../../scripts/test_files/mina/mina_state.proof \ + --proof ../../scripts/test_files/mina/devnet_mina_state.proof \ --public_input ../../scripts/test_files/mina/mina_state_bad_hash.pub \ --proof_generator_addr 0x66f9664f97F2b50F62D13eA064982f936dE76657 @@ -534,8 +534,8 @@ batcher_send_mina_burst: @echo "Sending Mina state task to Batcher..." @cd batcher/aligned/ && cargo run --release -- submit \ --proving_system Mina \ - --proof ../../scripts/test_files/mina/mina_state.proof \ - --public_input ../../scripts/test_files/mina/mina_state.pub \ + --proof ../../scripts/test_files/mina/devnet_mina_state.proof \ + --public_input ../../scripts/test_files/mina/devnet_mina_state.pub \ --repetitions 15 \ --proof_generator_addr 0x66f9664f97F2b50F62D13eA064982f936dE76657 @@ -1133,8 +1133,8 @@ docker_batcher_send_mina_burst: docker exec $(shell docker ps | grep batcher | awk '{print $$1}') aligned submit \ --private_key $(DOCKER_PROOFS_PRIVATE_KEY) \ --proving_system Mina \ - --proof ./scripts/test_files/mina/mina_state.proof \ - --public_input ./scripts/test_files/mina/mina_state.pub \ + --proof ./scripts/test_files/mina/devnet_mina_state.proof \ + --public_input ./scripts/test_files/mina/devnet_mina_state.pub \ --repetitions $(DOCKER_BURST_SIZE) \ --proof_generator_addr $(PROOF_GENERATOR_ADDRESS) \ --rpc_url $(DOCKER_RPC_URL) \ diff --git a/operator/mina/lib/src/consensus_state.rs b/operator/mina/lib/src/consensus_state.rs index 78f69a9ade..dd8258682d 100644 --- a/operator/mina/lib/src/consensus_state.rs +++ b/operator/mina/lib/src/consensus_state.rs @@ -165,7 +165,7 @@ mod test { use super::*; const PROOF_BYTES: &[u8] = - include_bytes!("../../../../scripts/test_files/mina/mina_state.proof"); + include_bytes!("../../../../scripts/test_files/mina/devnet_mina_state.proof"); #[test] fn new_mina_state_passes_consensus_checks() { diff --git a/operator/mina/lib/src/lib.rs b/operator/mina/lib/src/lib.rs index 71f32e51bd..721195d655 100644 --- a/operator/mina/lib/src/lib.rs +++ b/operator/mina/lib/src/lib.rs @@ -238,22 +238,39 @@ fn check_pub_inputs( #[cfg(test)] mod test { + use std::ptr; + use super::*; - const PROOF_BYTES: &[u8] = - include_bytes!("../../../../scripts/test_files/mina/mina_state.proof"); - const PUB_INPUT_BYTES: &[u8] = - include_bytes!("../../../../scripts/test_files/mina/mina_state.pub"); + const DEVNET_PROOF_BYTES: &[u8] = + include_bytes!("../../../../scripts/test_files/mina/devnet_mina_state.proof"); + const DEVNET_PUB_INPUT_BYTES: &[u8] = + include_bytes!("../../../../scripts/test_files/mina/devnet_mina_state.pub"); + const MAINNET_PROOF_BYTES: &[u8] = + include_bytes!("../../../../scripts/test_files/mina/mainnet_mina_state.proof"); + const MAINNET_PUB_INPUT_BYTES: &[u8] = + include_bytes!("../../../../scripts/test_files/mina/mainnet_mina_state.pub"); const BAD_HASH_PUB_INPUT_BYTES: &[u8] = include_bytes!("../../../../scripts/test_files/mina/mina_state_bad_hash.pub"); #[test] - fn valid_mina_state_proof_verifies() { + fn valid_devnet_mina_state_proof_verifies() { let result = verify_mina_state_ffi( - PROOF_BYTES.as_ptr(), - PROOF_BYTES.len() as u32, - PUB_INPUT_BYTES.as_ptr(), - PUB_INPUT_BYTES.len() as u32, + DEVNET_PROOF_BYTES.as_ptr(), + DEVNET_PROOF_BYTES.len() as u32, + DEVNET_PUB_INPUT_BYTES.as_ptr(), + DEVNET_PUB_INPUT_BYTES.len() as u32, + ); + assert_eq!(result, 1); + } + + #[test] + fn valid_mainnet_mina_state_proof_verifies() { + let result = verify_mina_state_ffi( + MAINNET_PROOF_BYTES.as_ptr(), + MAINNET_PROOF_BYTES.len() as u32, + MAINNET_PUB_INPUT_BYTES.as_ptr(), + MAINNET_PUB_INPUT_BYTES.len() as u32, ); assert_eq!(result, 1); } @@ -261,8 +278,8 @@ mod test { #[test] fn mina_state_proof_with_bad_bridge_tip_hash_does_not_verify() { let result = verify_mina_state_ffi( - PROOF_BYTES.as_ptr(), - PROOF_BYTES.len() as u32, + DEVNET_PROOF_BYTES.as_ptr(), + DEVNET_PROOF_BYTES.len() as u32, BAD_HASH_PUB_INPUT_BYTES.as_ptr(), BAD_HASH_PUB_INPUT_BYTES.len() as u32, ); @@ -270,30 +287,74 @@ mod test { } #[test] - fn empty_mina_state_proof_does_not_verify() { - const PROOF_SIZE: usize = PROOF_BYTES.len(); + fn zeroized_mina_state_proof_does_not_verify() { + const PROOF_SIZE: usize = DEVNET_PROOF_BYTES.len(); let empty_proof_buffer = [0u8; PROOF_SIZE]; let result = verify_mina_state_ffi( empty_proof_buffer.as_ptr(), PROOF_SIZE as u32, - PUB_INPUT_BYTES.as_ptr(), - PUB_INPUT_BYTES.len() as u32, + DEVNET_PUB_INPUT_BYTES.as_ptr(), + DEVNET_PUB_INPUT_BYTES.len() as u32, ); assert_eq!(result, 0); } #[test] - fn valid_mina_state_proof_with_empty_pub_input_does_not_verify() { - const PUB_INPUT_SIZE: usize = PUB_INPUT_BYTES.len(); + fn valid_mina_state_proof_with_zeroized_pub_input_does_not_verify() { + const PUB_INPUT_SIZE: usize = DEVNET_PUB_INPUT_BYTES.len(); let empty_pub_input_buffer = [0u8; PUB_INPUT_SIZE]; let result = verify_mina_state_ffi( - PROOF_BYTES.as_ptr(), - PROOF_BYTES.len() as u32, + DEVNET_PROOF_BYTES.as_ptr(), + DEVNET_PROOF_BYTES.len() as u32, empty_pub_input_buffer.as_ptr(), PUB_INPUT_SIZE as u32, ); assert_eq!(result, 0); } + + #[test] + fn null_mina_state_proof_does_not_verify() { + let result = verify_mina_state_ffi( + ptr::null(), + DEVNET_PROOF_BYTES.len() as u32, + DEVNET_PUB_INPUT_BYTES.as_ptr(), + DEVNET_PUB_INPUT_BYTES.len() as u32, + ); + assert_eq!(result, 0); + } + + #[test] + fn valid_mina_state_proof_with_null_pub_input_does_not_verify() { + let result = verify_mina_state_ffi( + DEVNET_PROOF_BYTES.as_ptr(), + DEVNET_PROOF_BYTES.len() as u32, + ptr::null(), + DEVNET_PUB_INPUT_BYTES.len() as u32, + ); + assert_eq!(result, 0); + } + + #[test] + fn empty_mina_state_proof_does_not_verify() { + let result = verify_mina_state_ffi( + DEVNET_PROOF_BYTES.as_ptr(), + 0, + DEVNET_PUB_INPUT_BYTES.as_ptr(), + DEVNET_PUB_INPUT_BYTES.len() as u32, + ); + assert_eq!(result, 0); + } + + #[test] + fn valid_mina_state_proof_with_empty_pub_input_does_not_verify() { + let result = verify_mina_state_ffi( + DEVNET_PROOF_BYTES.as_ptr(), + DEVNET_PROOF_BYTES.len() as u32, + DEVNET_PUB_INPUT_BYTES.as_ptr(), + 0, + ); + assert_eq!(result, 0); + } } diff --git a/operator/mina/mina_test.go b/operator/mina/mina_test.go index b3a7008f34..1a250e9f5a 100644 --- a/operator/mina/mina_test.go +++ b/operator/mina/mina_test.go @@ -7,9 +7,9 @@ import ( "github.com/yetanotherco/aligned_layer/operator/mina" ) -const ProofFilePath = "../../scripts/test_files/mina/mina_state.proof" +const ProofFilePath = "../../scripts/test_files/mina/devnet_mina_state.proof" -const PubInputFilePath = "../../scripts/test_files/mina/mina_state.pub" +const PubInputFilePath = "../../scripts/test_files/mina/devnet_mina_state.pub" func TestMinaStateProofVerifies(t *testing.T) { proofBytes, err := os.ReadFile(ProofFilePath) diff --git a/operator/mina_account/lib/src/lib.rs b/operator/mina_account/lib/src/lib.rs index c3b49aed60..4af7bc4d42 100644 --- a/operator/mina_account/lib/src/lib.rs +++ b/operator/mina_account/lib/src/lib.rs @@ -102,6 +102,7 @@ pub fn verify_account_inclusion(proof_bytes: &[u8], pub_input_bytes: &[u8]) -> b mod test { use super::*; + use core::ptr; const PROOF_BYTES: &[u8] = include_bytes!("../../../../scripts/test_files/mina_account/mina_account.proof"); @@ -130,7 +131,7 @@ mod test { } #[test] - fn empty_account_state_proof_does_not_verify() { + fn zeroized_account_state_proof_does_not_verify() { const PROOF_SIZE: usize = PROOF_BYTES.len(); let proof_buffer = [0u8; PROOF_SIZE]; @@ -144,7 +145,7 @@ mod test { } #[test] - fn valid_account_state_proof_with_empty_pub_input_does_not_verify() { + fn valid_account_state_proof_with_zeroized_pub_input_does_not_verify() { const PUB_INPUT_SIZE: usize = PUB_INPUT_BYTES.len(); let pub_input_buffer = [0u8; PUB_INPUT_SIZE]; @@ -156,4 +157,48 @@ mod test { ); assert_eq!(result, 0); } + + #[test] + fn null_account_state_proof_does_not_verify() { + let result = verify_account_inclusion_ffi( + ptr::null(), + PROOF_BYTES.len() as u32, + PUB_INPUT_BYTES.as_ptr(), + PUB_INPUT_BYTES.len() as u32, + ); + assert_eq!(result, 0); + } + + #[test] + fn valid_account_state_proof_with_null_pub_input_does_not_verify() { + let result = verify_account_inclusion_ffi( + PROOF_BYTES.as_ptr(), + PROOF_BYTES.len() as u32, + ptr::null(), + PUB_INPUT_BYTES.len() as u32, + ); + assert_eq!(result, 0); + } + + #[test] + fn empty_account_state_proof_does_not_verify() { + let result = verify_account_inclusion_ffi( + PROOF_BYTES.as_ptr(), + 0, + PUB_INPUT_BYTES.as_ptr(), + PUB_INPUT_BYTES.len() as u32, + ); + assert_eq!(result, 0); + } + + #[test] + fn valid_account_state_proof_with_empty_pub_input_does_not_verify() { + let result = verify_account_inclusion_ffi( + PROOF_BYTES.as_ptr(), + PROOF_BYTES.len() as u32, + PUB_INPUT_BYTES.as_ptr(), + 0, + ); + assert_eq!(result, 0); + } } diff --git a/scripts/test_files/mina/mina_state.proof b/scripts/test_files/mina/devnet_mina_state.proof similarity index 100% rename from scripts/test_files/mina/mina_state.proof rename to scripts/test_files/mina/devnet_mina_state.proof diff --git a/scripts/test_files/mina/mina_state.pub b/scripts/test_files/mina/devnet_mina_state.pub similarity index 100% rename from scripts/test_files/mina/mina_state.pub rename to scripts/test_files/mina/devnet_mina_state.pub diff --git a/scripts/test_files/mina/mainnet_mina_state.proof b/scripts/test_files/mina/mainnet_mina_state.proof new file mode 100644 index 0000000000..c6d5c606b6 Binary files /dev/null and b/scripts/test_files/mina/mainnet_mina_state.proof differ diff --git a/scripts/test_files/mina/mainnet_mina_state.pub b/scripts/test_files/mina/mainnet_mina_state.pub new file mode 100644 index 0000000000..987ca9e36f Binary files /dev/null and b/scripts/test_files/mina/mainnet_mina_state.pub differ