Skip to content

Commit

Permalink
proof/verify abstract
Browse files Browse the repository at this point in the history
  • Loading branch information
rkdud007 committed Sep 6, 2024
1 parent 0fbea2c commit 982ee5a
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 6 deletions.
2 changes: 2 additions & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ pub mod tx_trie;
pub enum SnTrieError {
#[error("Starknet error: {0}")]
GatewayError(u16),
#[error("Trie not found")]
TrieNotFound,
}

#[derive(Error, Debug)]
Expand Down
53 changes: 47 additions & 6 deletions src/starknet/tx_trie.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
use pathfinder_common::hash::PedersenHash;
use pathfinder_common::{hash::PedersenHash, trie::TrieNode};
use pathfinder_crypto::Felt as PathfinderFelt;
use pathfinder_merkle_tree::{tree::MerkleTree, StatelessStorage, TransactionOrEventTree};
use pathfinder_merkle_tree::{Membership, TransactionOrEventTree};
use starknet_types_core::felt::Felt;
use starknet_types_rpc::TxnWithHash;
use url::Url;

use crate::SnTrieError;

Expand All @@ -16,7 +14,7 @@ pub struct TxsMptHandler<'a> {

pub struct TxsMpt {
pub trie: TransactionOrEventTree<PedersenHash>,
elements: Vec<Felt>,
pub elements: Vec<Felt>,
root: Felt,
root_idx: u64,
}
Expand Down Expand Up @@ -70,8 +68,51 @@ impl<'a> TxsMptHandler<'a> {
root: converted_commit,
root_idx,
};

self.trie = Some(result_mpt);
Ok(())
}

pub fn get_proof(&mut self, tx_index: u64) -> Result<Vec<Vec<u8>>, SnTrieError> {}
pub fn get_proof(&self, tx_index: u64) -> Result<Vec<TrieNode>, SnTrieError> {
let idx: PathfinderFelt = PathfinderFelt::from_u64(tx_index);
let root_idx = self.get_root_idx()?;
let proof = self
.trie
.as_ref()
.ok_or(SnTrieError::TrieNotFound)?
.trie
.get_proof(root_idx, idx.view_bits().to_owned())
.unwrap()
.unwrap();

Ok(proof)
}

fn get_root_idx(&self) -> Result<u64, SnTrieError> {
Ok(self
.trie
.as_ref()
.ok_or(SnTrieError::TrieNotFound)?
.root_idx)
}

pub fn verify_proof(
&self,
tx_index: u64,
proof: Vec<TrieNode>,
) -> Result<Membership, SnTrieError> {
let idx: PathfinderFelt = PathfinderFelt::from_u64(tx_index);
// let root_idx = self.get_root_idx()?;
let root = self.trie.as_ref().ok_or(SnTrieError::TrieNotFound)?.root;
let converted_root: PathfinderFelt =
PathfinderFelt::from_be_bytes(root.to_bytes_be()).unwrap();
let result = TransactionOrEventTree::<PedersenHash>::verify_proof(
converted_root,
idx.view_bits(),
idx,
&proof,
)
.unwrap();
Ok(result)
}
}

0 comments on commit 982ee5a

Please sign in to comment.