#![allow(dead_code)]
pub mod actions;
pub mod endpoints;
pub mod error;
pub mod nomt;
pub mod prover;
pub mod scanner;
pub mod sync;
pub mod trace;
pub mod verifier;
#[cfg(feature = "wasm")]
pub mod wasm_api;
#[cfg(feature = "client")]
pub mod client;
pub use error::{Result, ZyncError};
pub use scanner::{BatchScanner, DecryptedNote, ScanAction, Scanner};
pub use orchard::keys::{FullViewingKey as OrchardFvk, IncomingViewingKey, Scope, SpendingKey};
#[cfg(feature = "client")]
pub use client::{LightwalletdClient, ZidecarClient};
use ligerito::{ProverConfig, VerifierConfig};
use ligerito_binary_fields::{BinaryElem128, BinaryElem32};
use std::marker::PhantomData;
pub const EPOCH_SIZE: u32 = 1024;
pub const MAX_ACTIONS_PER_BLOCK: usize = 512;
pub const FIELDS_PER_ACTION: usize = 8;
pub const FIELDS_PER_HEADER: usize = 32;
pub const TIP_SENTINEL_SIZE: usize = 24;
pub const TIP_TRACE_LOG_SIZE: usize = 20;
pub const EPOCH_PROOF_TRACE_LOG_SIZE: usize = 26;
pub const SECURITY_BITS: usize = 100;
pub const ORCHARD_ACTIVATION_HEIGHT: u32 = 1_687_104;
pub const ORCHARD_ACTIVATION_HEIGHT_TESTNET: u32 = 1_842_420;
pub const ACTIVATION_HASH_MAINNET: [u8; 32] = [
0x00, 0x00, 0x00, 0x00, 0x00, 0xd7, 0x23, 0x15, 0x6d, 0x9b, 0x65, 0xff, 0xcf, 0x49, 0x84,
0xda, 0x7a, 0x19, 0x67, 0x5e, 0xd7, 0xe2, 0xf0, 0x6d, 0x9e, 0x5d, 0x51, 0x88, 0xaf, 0x08,
0x7b, 0xf8,
];
pub const DOMAIN_WALLET_STATE: &[u8] = b"ZYNC_wallet_state_v1";
pub const DOMAIN_EPOCH_PROOF: &[u8] = b"ZYNC_epoch_proof_v1";
pub const DOMAIN_IVK_COMMIT: &[u8] = b"ZYNC_ivk_commit_v1";
pub const GENESIS_EPOCH_HASH: [u8; 32] = [0u8; 32];
pub const EMPTY_SMT_ROOT: [u8; 32] = [0u8; 32];
pub fn tip_prover_config() -> ProverConfig<BinaryElem32, BinaryElem128> {
ligerito::hardcoded_config_20(PhantomData::<BinaryElem32>, PhantomData::<BinaryElem128>)
}
pub fn epoch_proof_prover_config() -> ProverConfig<BinaryElem32, BinaryElem128> {
ligerito::hardcoded_config_26(PhantomData::<BinaryElem32>, PhantomData::<BinaryElem128>)
}
pub fn prover_config_for_size(
trace_len: usize,
) -> (ProverConfig<BinaryElem32, BinaryElem128>, usize) {
let log_size = if trace_len == 0 {
12
} else {
(trace_len as f64).log2().ceil() as u32
};
let (config_log, config) = if log_size <= 12 {
(
12,
ligerito::hardcoded_config_12(
PhantomData::<BinaryElem32>,
PhantomData::<BinaryElem128>,
),
)
} else if log_size <= 16 {
(
16,
ligerito::hardcoded_config_16(
PhantomData::<BinaryElem32>,
PhantomData::<BinaryElem128>,
),
)
} else if log_size <= 20 {
(
20,
ligerito::hardcoded_config_20(
PhantomData::<BinaryElem32>,
PhantomData::<BinaryElem128>,
),
)
} else if log_size <= 24 {
(
24,
ligerito::hardcoded_config_24(
PhantomData::<BinaryElem32>,
PhantomData::<BinaryElem128>,
),
)
} else if log_size <= 26 {
(
26,
ligerito::hardcoded_config_26(
PhantomData::<BinaryElem32>,
PhantomData::<BinaryElem128>,
),
)
} else if log_size <= 28 {
(
28,
ligerito::hardcoded_config_28(
PhantomData::<BinaryElem32>,
PhantomData::<BinaryElem128>,
),
)
} else {
(
30,
ligerito::hardcoded_config_30(
PhantomData::<BinaryElem32>,
PhantomData::<BinaryElem128>,
),
)
};
(config, 1 << config_log)
}
pub fn verifier_config_for_log_size(log_size: u32) -> VerifierConfig {
if log_size <= 12 {
ligerito::hardcoded_config_12_verifier()
} else if log_size <= 16 {
ligerito::hardcoded_config_16_verifier()
} else if log_size <= 20 {
ligerito::hardcoded_config_20_verifier()
} else if log_size <= 24 {
ligerito::hardcoded_config_24_verifier()
} else if log_size <= 26 {
ligerito::hardcoded_config_26_verifier()
} else if log_size <= 28 {
ligerito::hardcoded_config_28_verifier()
} else {
ligerito::hardcoded_config_30_verifier()
}
}
pub fn epoch_for_height(height: u32) -> u32 {
height / EPOCH_SIZE
}
pub fn epoch_start(epoch: u32) -> u32 {
epoch * EPOCH_SIZE
}
pub fn epoch_end(epoch: u32) -> u32 {
epoch_start(epoch + 1) - 1
}