Functions to create and manage Orchard commitment trees #99

Merged
pitmutt merged 30 commits from rav001 into milestone2 2024-11-05 18:28:46 +00:00
3 changed files with 24 additions and 1 deletions
Showing only changes of commit f6b8a77277 - Show all commits

View file

@ -36,7 +36,8 @@ use incrementalmerkletree::{
frontier::{ frontier::{
CommitmentTree, CommitmentTree,
Frontier, Frontier,
NonEmptyFrontier NonEmptyFrontier,
PathFiller
}, },
witness::IncrementalWitness witness::IncrementalWitness
}; };
@ -1618,6 +1619,17 @@ pub extern "C" fn rust_wrapper_combine_orchard_nodes(
} }
} }
#[no_mangle]
pub extern "C" fn rust_wrapper_get_orchard_root(
level: u8,
out: *mut u8,
out_len: &mut usize
){
let tree: CommitmentTree<MerkleHashOrchard, 32> = CommitmentTree::empty();
let root = tree.root_at_depth(level, PathFiller::empty());
let h = Hhex { bytes: root.to_bytes().to_vec() };
marshall_to_haskell_var(&h, out, out_len, RW);
}
#[no_mangle] #[no_mangle]
pub extern "C" fn rust_wrapper_read_orchard_commitment_tree( pub extern "C" fn rust_wrapper_read_orchard_commitment_tree(

View file

@ -276,6 +276,13 @@ import ZcashHaskell.Types
-> `()' -> `()'
#} #}
{# fun unsafe rust_wrapper_get_orchard_root as rustWrapperGetOrchardRootTest
{ `Int8'
, getVarBuffer `Buffer HexString'&
}
-> `()'
#}
{# fun unsafe rust_wrapper_read_orchard_commitment_tree as rustWrapperReadOrchardCommitmentTree {# fun unsafe rust_wrapper_read_orchard_commitment_tree as rustWrapperReadOrchardCommitmentTree
{ toBorshVar* `OrchardFrontier'& { toBorshVar* `OrchardFrontier'&
, toBorshVar* `BS.ByteString'& , toBorshVar* `BS.ByteString'&

View file

@ -218,6 +218,10 @@ getOrchardWitnessAnchor wit =
withPureBorshVarBuffer $ withPureBorshVarBuffer $
rustWrapperReadOrchardWitnessAnchor $ toBytes $ orchWit wit rustWrapperReadOrchardWitnessAnchor $ toBytes $ orchWit wit
getOrchardRootTest :: Int -> HexString
getOrchardRootTest level =
withPureBorshVarBuffer $ rustWrapperGetOrchardRootTest $ fromIntegral level
-- | Update a Orchard commitment tree -- | Update a Orchard commitment tree
updateOrchardCommitmentTree :: updateOrchardCommitmentTree ::
OrchardFrontier -- ^ the base tree OrchardFrontier -- ^ the base tree