| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- use log::{debug, error};
- use super::{memory::MemoryManipulation, vm_runtime::Env};
- use crate::{
- crypto::{merkle_node::MerkleNode, nullifier::Nullifier},
- node::state::ProgramState,
- };
- /// Try to read a `Nullifier` from the given pointer and check if it's
- /// an existing nullifier in the blockchain state machine.
- pub fn nullifier_exists(env: &Env, ptr: u32, len: u32) -> i32 {
- if let Some(bytes) = env.memory.get_ref().unwrap().read(ptr, len as usize) {
- debug!(target: "wasm-runtime", "[wasm::nullifier_exists] Read bytes: {:?}", bytes);
- let nullifier = match Nullifier::from_bytes(bytes.try_into().unwrap()) {
- Some(nf) => {
- debug!(target: "wasm_runtime::nullifier_exists", "Nullifier: {:?}", nf);
- nf
- }
- None => {
- error!(target: "wasm_runtime::nullifier_exists", "Could not convert bytes to Nullifier");
- return -1
- }
- };
- match env.state_machine.nullifier_exists(&nullifier) {
- true => return 1,
- false => return 0,
- }
- }
- error!(target: "wasm_runtime::nullifier_exists", "Failed to read bytes from VM memory");
- -2
- }
- /// Try to read a `MerkleNode` from the given pointer and check if it's
- /// a valid Merkle root in the chain's Merkle tree.
- pub fn is_valid_merkle(env: &Env, ptr: u32, len: u32) -> i32 {
- if let Some(bytes) = env.memory.get_ref().unwrap().read(ptr, len as usize) {
- debug!(target: "wasm_runtime::nullifier_exists", "Read bytes: {:?}", bytes);
- let merkle_node = match MerkleNode::from_bytes(bytes.try_into().unwrap()) {
- Some(mn) => {
- debug!(target: "wasm_runtime::is_valid_merkle", "MerkleNode: {:?}", mn);
- mn
- }
- None => {
- error!(target: "wasm_runtime::is_valid_merkle", "Could not convert bytes to MerkleNode");
- return -1
- }
- };
- match env.state_machine.is_valid_merkle(&merkle_node) {
- true => return 1,
- false => return 0,
- }
- }
- error!(target: "wasm_runtime::is_valid_merkle", "Failed to read bytes from VM memory");
- -2
- }
|