Skip to content

Commit 4537d70

Browse files
committed
Refactor mina operator
1 parent 8d7f269 commit 4537d70

4 files changed

Lines changed: 73 additions & 69 deletions

File tree

operator/mina/lib/src/lib.rs

Lines changed: 73 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1+
use std::str::FromStr;
2+
3+
use base64::prelude::*;
14
use kimchi::mina_curves::pasta::Fp;
5+
use mina_p2p_messages::binprot::BinProtRead;
6+
use mina_p2p_messages::v2::{MinaBaseProofStableV2, StateHash};
27
use mina_tree::proofs::verification::verify_block;
38
use mina_tree::proofs::verifier_index::{get_verifier_index, VerifierKind};
49
use mina_tree::verifier::get_srs;
5-
use openmina_block_verifier::protocol_state;
6-
use openmina_block_verifier::protocol_state_proof;
7-
8-
pub mod openmina_block_verifier;
910

1011
// TODO: check these
1112
const MAX_PROOF_SIZE: usize = 15 * 1024;
@@ -25,22 +26,21 @@ pub extern "C" fn verify_protocol_state_proof_ffi(
2526
return false;
2627
};
2728
let protocol_state_hash_base58 = if let Ok(protocol_state_hash_base58) =
28-
std::str::from_utf8(&public_input_bytes[..public_input_len - 1])
29+
std::str::from_utf8(&public_input_bytes[..public_input_len])
2930
{
3031
protocol_state_hash_base58
3132
} else {
3233
return false;
3334
};
3435

35-
let protocol_state_proof = if let Ok(protocol_state_proof) =
36-
protocol_state_proof::parse_base64(protocol_state_proof_base64)
37-
{
38-
protocol_state_proof
39-
} else {
40-
return false;
41-
};
36+
let protocol_state_proof =
37+
if let Ok(protocol_state_proof) = parse_protocol_state_proof(protocol_state_proof_base64) {
38+
protocol_state_proof
39+
} else {
40+
return false;
41+
};
4242
let protocol_state_hash =
43-
if let Ok(protocol_state_hash) = protocol_state::parse_base58(protocol_state_hash_base58) {
43+
if let Ok(protocol_state_hash) = parse_protocol_state_hash(protocol_state_hash_base58) {
4444
protocol_state_hash
4545
} else {
4646
return false;
@@ -58,24 +58,59 @@ pub extern "C" fn verify_protocol_state_proof_ffi(
5858
)
5959
}
6060

61+
pub fn parse_protocol_state_proof(
62+
protocol_state_proof_base64: &str,
63+
) -> Result<MinaBaseProofStableV2, String> {
64+
let protocol_state_proof_binprot = BASE64_URL_SAFE
65+
.decode(protocol_state_proof_base64.trim_end())
66+
.map_err(|err| err.to_string())?;
67+
68+
MinaBaseProofStableV2::binprot_read(&mut protocol_state_proof_binprot.as_slice())
69+
.map_err(|err| err.to_string())
70+
}
71+
72+
pub fn parse_protocol_state_hash(protocol_state_hash_base58: &str) -> Result<Fp, String> {
73+
StateHash::from_str(protocol_state_hash_base58.trim_end())
74+
.map_err(|err| err.to_string())?
75+
.to_fp()
76+
.map_err(|err| err.to_string())
77+
}
78+
6179
#[cfg(test)]
6280
mod test {
6381
use super::*;
6482

65-
const PROTOCOL_STATE_PROOF: &[u8] =
83+
const PROTOCOL_STATE_PROOF_BYTES: &[u8] =
6684
include_bytes!("../../../../batcher/aligned/test_files/mina/protocol_state_proof.proof");
67-
const PROTOCOL_STATE_HASH: &[u8] =
85+
const PROTOCOL_STATE_HASH_BYTES: &[u8] =
6886
include_bytes!("../../../../batcher/aligned/test_files/mina/protocol_state_hash.pub");
87+
const BAD_PROTOCOL_STATE_HASH_BYTES: &[u8] =
88+
include_bytes!("../../../../batcher/aligned/test_files/mina/bad_protocol_state_hash.pub");
89+
90+
const PROTOCOL_STATE_PROOF_STR: &str =
91+
include_str!("../../../../batcher/aligned/test_files/mina/protocol_state_proof.proof");
92+
const PROTOCOL_STATE_HASH_STR: &str =
93+
include_str!("../../../../batcher/aligned/test_files/mina/protocol_state_hash.pub");
94+
95+
#[test]
96+
fn parse_protocol_state_proof_does_not_fail() {
97+
parse_protocol_state_proof(PROTOCOL_STATE_PROOF_STR).unwrap();
98+
}
99+
100+
#[test]
101+
fn parse_protocol_state_hash_does_not_fail() {
102+
parse_protocol_state_hash(PROTOCOL_STATE_HASH_STR).unwrap();
103+
}
69104

70105
#[test]
71106
fn protocol_state_proof_verifies() {
72107
let mut proof_buffer = [0u8; super::MAX_PROOF_SIZE];
73-
let proof_size = PROTOCOL_STATE_PROOF.len();
74-
proof_buffer[..proof_size].clone_from_slice(PROTOCOL_STATE_PROOF);
108+
let proof_size = PROTOCOL_STATE_PROOF_BYTES.len();
109+
proof_buffer[..proof_size].clone_from_slice(PROTOCOL_STATE_PROOF_BYTES);
75110

76111
let mut pub_input_buffer = [0u8; super::MAX_PUB_INPUT_SIZE];
77-
let pub_input_size = PROTOCOL_STATE_HASH.len();
78-
pub_input_buffer[..pub_input_size].clone_from_slice(PROTOCOL_STATE_HASH);
112+
let pub_input_size = PROTOCOL_STATE_HASH_BYTES.len();
113+
pub_input_buffer[..pub_input_size].clone_from_slice(PROTOCOL_STATE_HASH_BYTES);
79114

80115
let result = verify_protocol_state_proof_ffi(
81116
&proof_buffer,
@@ -85,4 +120,23 @@ mod test {
85120
);
86121
assert!(result);
87122
}
123+
124+
#[test]
125+
fn bad_protocol_state_proof_fails() {
126+
let mut proof_buffer = [0u8; super::MAX_PROOF_SIZE];
127+
let proof_size = PROTOCOL_STATE_PROOF_BYTES.len();
128+
proof_buffer[..proof_size].clone_from_slice(PROTOCOL_STATE_PROOF_BYTES);
129+
130+
let mut pub_input_buffer = [0u8; super::MAX_PUB_INPUT_SIZE];
131+
let pub_input_size = BAD_PROTOCOL_STATE_HASH_BYTES.len();
132+
pub_input_buffer[..pub_input_size].clone_from_slice(BAD_PROTOCOL_STATE_HASH_BYTES);
133+
134+
let result = verify_protocol_state_proof_ffi(
135+
&proof_buffer,
136+
proof_size,
137+
&pub_input_buffer,
138+
pub_input_size,
139+
);
140+
assert!(!result);
141+
}
88142
}

operator/mina/lib/src/openmina_block_verifier/mod.rs

Lines changed: 0 additions & 2 deletions
This file was deleted.

operator/mina/lib/src/openmina_block_verifier/protocol_state.rs

Lines changed: 0 additions & 24 deletions
This file was deleted.

operator/mina/lib/src/openmina_block_verifier/protocol_state_proof.rs

Lines changed: 0 additions & 24 deletions
This file was deleted.

0 commit comments

Comments
 (0)