mirror of https://github.com/vacp2p/zerokit.git
chore: accept tree_config in new_with_params
This commit is contained in:
parent
ef1da42d94
commit
7d63912ace
|
@ -250,11 +250,7 @@ pub fn wasm_set_metadata(ctx: *mut RLNWrapper, input: Uint8Array) -> Result<(),
|
||||||
#[allow(clippy::not_unsafe_ptr_arg_deref)]
|
#[allow(clippy::not_unsafe_ptr_arg_deref)]
|
||||||
#[wasm_bindgen(js_name = getMetadata)]
|
#[wasm_bindgen(js_name = getMetadata)]
|
||||||
pub fn wasm_get_metadata(ctx: *mut RLNWrapper) -> Result<Uint8Array, String> {
|
pub fn wasm_get_metadata(ctx: *mut RLNWrapper) -> Result<Uint8Array, String> {
|
||||||
call_with_output_and_error_msg!(
|
call_with_output_and_error_msg!(ctx, get_metadata, "could not get metadata".to_string())
|
||||||
ctx,
|
|
||||||
get_metadata,
|
|
||||||
"could not get metadata".to_string()
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(clippy::not_unsafe_ptr_arg_deref)]
|
#[allow(clippy::not_unsafe_ptr_arg_deref)]
|
||||||
|
|
|
@ -186,6 +186,7 @@ pub extern "C" fn new_with_params(
|
||||||
circom_buffer: *const Buffer,
|
circom_buffer: *const Buffer,
|
||||||
zkey_buffer: *const Buffer,
|
zkey_buffer: *const Buffer,
|
||||||
vk_buffer: *const Buffer,
|
vk_buffer: *const Buffer,
|
||||||
|
tree_config: *const Buffer,
|
||||||
ctx: *mut *mut RLN,
|
ctx: *mut *mut RLN,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
if let Ok(rln) = RLN::new_with_params(
|
if let Ok(rln) = RLN::new_with_params(
|
||||||
|
@ -193,6 +194,7 @@ pub extern "C" fn new_with_params(
|
||||||
circom_buffer.process().to_vec(),
|
circom_buffer.process().to_vec(),
|
||||||
zkey_buffer.process().to_vec(),
|
zkey_buffer.process().to_vec(),
|
||||||
vk_buffer.process().to_vec(),
|
vk_buffer.process().to_vec(),
|
||||||
|
tree_config.process(),
|
||||||
) {
|
) {
|
||||||
unsafe { *ctx = Box::into_raw(Box::new(rln)) };
|
unsafe { *ctx = Box::into_raw(Box::new(rln)) };
|
||||||
true
|
true
|
||||||
|
|
|
@ -117,6 +117,7 @@ impl RLN<'_> {
|
||||||
/// - `circom_vec`: a byte vector containing the ZK circuit (`rln.wasm`) as binary file
|
/// - `circom_vec`: a byte vector containing the ZK circuit (`rln.wasm`) as binary file
|
||||||
/// - `zkey_vec`: a byte vector containing to the proving key (`rln_final.zkey`) as binary file
|
/// - `zkey_vec`: a byte vector containing to the proving key (`rln_final.zkey`) as binary file
|
||||||
/// - `vk_vec`: a byte vector containing to the verification key (`verification_key.json`) as binary file
|
/// - `vk_vec`: a byte vector containing to the verification key (`verification_key.json`) as binary file
|
||||||
|
/// - `tree_config`: a reader for a string containing a json with the merkle tree configuration
|
||||||
///
|
///
|
||||||
/// Example:
|
/// Example:
|
||||||
/// ```
|
/// ```
|
||||||
|
@ -134,6 +135,8 @@ impl RLN<'_> {
|
||||||
/// let mut buffer = vec![0; metadata.len() as usize];
|
/// let mut buffer = vec![0; metadata.len() as usize];
|
||||||
/// file.read_exact(&mut buffer).expect("buffer overflow");
|
/// file.read_exact(&mut buffer).expect("buffer overflow");
|
||||||
/// resources.push(buffer);
|
/// resources.push(buffer);
|
||||||
|
/// let tree_config = "{}".to_string();
|
||||||
|
/// let tree_config_buffer = &Buffer::from(tree_config.as_bytes());
|
||||||
/// }
|
/// }
|
||||||
///
|
///
|
||||||
/// let mut rln = RLN::new_with_params(
|
/// let mut rln = RLN::new_with_params(
|
||||||
|
@ -141,11 +144,51 @@ impl RLN<'_> {
|
||||||
/// resources[0].clone(),
|
/// resources[0].clone(),
|
||||||
/// resources[1].clone(),
|
/// resources[1].clone(),
|
||||||
/// resources[2].clone(),
|
/// resources[2].clone(),
|
||||||
|
/// tree_config_buffer,
|
||||||
/// );
|
/// );
|
||||||
/// ```
|
/// ```
|
||||||
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
|
pub fn new_with_params<R: Read>(
|
||||||
|
tree_height: usize,
|
||||||
|
circom_vec: Vec<u8>,
|
||||||
|
zkey_vec: Vec<u8>,
|
||||||
|
vk_vec: Vec<u8>,
|
||||||
|
mut tree_config_input: R,
|
||||||
|
) -> Result<RLN<'static>> {
|
||||||
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
|
let witness_calculator = circom_from_raw(circom_vec)?;
|
||||||
|
|
||||||
|
let proving_key = zkey_from_raw(&zkey_vec)?;
|
||||||
|
let verification_key = vk_from_raw(&vk_vec, &zkey_vec)?;
|
||||||
|
|
||||||
|
let mut tree_config_vec: Vec<u8> = Vec::new();
|
||||||
|
tree_config_input.read_to_end(&mut tree_config_vec)?;
|
||||||
|
let tree_config_str = String::from_utf8(tree_config_vec)?;
|
||||||
|
let tree_config: <PoseidonTree as ZerokitMerkleTree>::Config = if tree_config_str.is_empty()
|
||||||
|
{
|
||||||
|
<PoseidonTree as ZerokitMerkleTree>::Config::default()
|
||||||
|
} else {
|
||||||
|
<PoseidonTree as ZerokitMerkleTree>::Config::from_str(&tree_config_str)?
|
||||||
|
};
|
||||||
|
|
||||||
|
// We compute a default empty tree
|
||||||
|
let tree = PoseidonTree::new(
|
||||||
|
tree_height,
|
||||||
|
<PoseidonTree as ZerokitMerkleTree>::Hasher::default_leaf(),
|
||||||
|
tree_config,
|
||||||
|
)?;
|
||||||
|
|
||||||
|
Ok(RLN {
|
||||||
|
witness_calculator,
|
||||||
|
proving_key,
|
||||||
|
verification_key,
|
||||||
|
tree,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(target_arch = "wasm32")]
|
||||||
pub fn new_with_params(
|
pub fn new_with_params(
|
||||||
tree_height: usize,
|
tree_height: usize,
|
||||||
#[cfg(not(target_arch = "wasm32"))] circom_vec: Vec<u8>,
|
|
||||||
zkey_vec: Vec<u8>,
|
zkey_vec: Vec<u8>,
|
||||||
vk_vec: Vec<u8>,
|
vk_vec: Vec<u8>,
|
||||||
) -> Result<RLN<'static>> {
|
) -> Result<RLN<'static>> {
|
||||||
|
@ -159,12 +202,9 @@ impl RLN<'_> {
|
||||||
let tree = PoseidonTree::default(tree_height)?;
|
let tree = PoseidonTree::default(tree_height)?;
|
||||||
|
|
||||||
Ok(RLN {
|
Ok(RLN {
|
||||||
#[cfg(not(target_arch = "wasm32"))]
|
|
||||||
witness_calculator,
|
|
||||||
proving_key,
|
proving_key,
|
||||||
verification_key,
|
verification_key,
|
||||||
tree,
|
tree,
|
||||||
#[cfg(target_arch = "wasm32")]
|
|
||||||
_marker: PhantomData,
|
_marker: PhantomData,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -617,11 +617,14 @@ mod test {
|
||||||
|
|
||||||
// Creating a RLN instance passing the raw data
|
// Creating a RLN instance passing the raw data
|
||||||
let mut rln_pointer_raw_bytes = MaybeUninit::<*mut RLN>::uninit();
|
let mut rln_pointer_raw_bytes = MaybeUninit::<*mut RLN>::uninit();
|
||||||
|
let tree_config = "".to_string();
|
||||||
|
let tree_config_buffer = &Buffer::from(tree_config.as_bytes());
|
||||||
let success = new_with_params(
|
let success = new_with_params(
|
||||||
tree_height,
|
tree_height,
|
||||||
circom_data,
|
circom_data,
|
||||||
zkey_data,
|
zkey_data,
|
||||||
vk_data,
|
vk_data,
|
||||||
|
tree_config_buffer,
|
||||||
rln_pointer_raw_bytes.as_mut_ptr(),
|
rln_pointer_raw_bytes.as_mut_ptr(),
|
||||||
);
|
);
|
||||||
assert!(success, "RLN object creation failed");
|
assert!(success, "RLN object creation failed");
|
||||||
|
|
Loading…
Reference in New Issue