paralock_core/protocol/
privacy.rs1use rand_core::CryptoRngCore;
2use serde::{Deserialize, Serialize};
3
4use crate::evm::EvmAddress;
5use crate::keys::{PrivateKey, Secret};
6
7#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
10#[serde(rename_all = "camelCase")]
11pub struct PrivacyOptions {
12 #[serde(default, skip_serializing_if = "Option::is_none")]
14 pub fresh_recipient: Option<bool>,
15 #[serde(default, skip_serializing_if = "Option::is_none")]
17 pub relay_claim: Option<bool>,
18 #[serde(default, skip_serializing_if = "Option::is_none")]
20 pub standard_amounts_only: Option<bool>,
21 #[serde(default, skip_serializing_if = "Option::is_none")]
23 pub jitter_ms: Option<u64>,
24}
25
26pub const STANDARD_AMOUNTS_ZAT: [u64; 4] = [10_000_000, 50_000_000, 100_000_000, 500_000_000];
28
29pub fn is_standard_amount(zat: u64) -> bool {
31 STANDARD_AMOUNTS_ZAT.contains(&zat)
32}
33
34pub fn new_secret<R: CryptoRngCore + ?Sized>(rng: &mut R) -> (Secret, [u8; 32]) {
36 let secret = Secret::random(rng);
37 let hashlock = secret.hashlock();
38 (secret, hashlock)
39}
40
41pub fn fresh_evm_account<R: CryptoRngCore + ?Sized>(rng: &mut R) -> (EvmAddress, PrivateKey) {
44 let key = PrivateKey::random(rng);
45 (EvmAddress::from_public_key(&key.public_key()), key)
46}