1use urma_core::format::Urma;
2pub struct Limits;
3impl Limits {
4 pub const INPUT_BYTES: usize = 16 * 1024 * 1024;
5 pub const RECORDS: usize = Self::INPUT_BYTES / Urma::CHUNK_BYTES;
6 pub const CONTAINER_BYTES: usize = 12 + Self::RECORDS * (4 + Urma::PRIVATE_RECORD_BYTES);
7 pub const OBJECTS: usize = 64;
8}
9
10use crate::error::{Context, Error};
11use serde_json::Value;
12
13pub fn confirmations(value: &Value) -> Result<i64, Error> {
14 match value.get("confirmations") {
15 Some(number) => number.as_i64().context("invalid confirmations"),
16 None => Ok(0),
17 }
18}
19
20#[derive(Clone, Copy)]
21pub enum RpcScope<'a> {
22 Node,
23 Wallet(&'a str),
24}
25impl<'a> From<Option<&'a str>> for RpcScope<'a> {
26 fn from(wallet: Option<&'a str>) -> Self {
27 match wallet {
28 Some(name) => Self::Wallet(name),
29 None => Self::Node,
30 }
31 }
32}
33#[derive(Clone, Copy)]
34pub enum ScanEnd {
35 Tip,
36 Height(u64),
37}
38#[derive(Clone, Copy)]
39pub enum RevealSelection {
40 All,
41 First(usize),
42}
43impl RevealSelection {
44 pub fn count(self, total: usize) -> usize {
45 match self {
46 Self::All => total,
47 Self::First(count) => count.min(total),
48 }
49 }
50}
51#[derive(Clone, Copy)]
52pub enum TxPresence {
53 Missing,
54 Observed(i64),
55}
56impl TxPresence {
57 pub fn confirmed(self) -> bool {
58 match self {
59 Self::Missing => false,
60 Self::Observed(count) => count > 0,
61 }
62 }
63}
64
65#[derive(Clone, Copy)]
66pub enum MempoolPresence {
67 Absent,
68 Present,
69}
70impl From<Option<usize>> for RevealSelection {
71 fn from(count: Option<usize>) -> Self {
72 match count {
73 Some(n) => Self::First(n),
74 None => Self::All,
75 }
76 }
77}
78pub const MAX_OBJECTS: usize = Limits::OBJECTS;
79pub const MAX_DIRECTORY_RECORDS: usize = MAX_OBJECTS * Limits::RECORDS;
80pub const LITECOIN_NETWORK: &str = "litecoin-testnet";
81pub const LITECOIN_GENESIS: &str = urma_chain::observation::Chain::LITECOIN_TESTNET_GENESIS;
82pub const LITECOIN_RPC_PORT: u16 = 19332;
83pub const LITECOIN_RETURN_LITOSHIS: u64 = 1_000;
84pub const LITECOIN_MAX_FEE_LITOSHIS: u64 = 500_000;
85pub const LITECOIN_MAX_SCAN_BLOCKS: u64 = 10_000;
86pub const LITECOIN_MAX_SCAN_BYTES: usize = 256 * 1024 * 1024;
87pub const LITECOIN_MAX_JOURNAL_BYTES: usize = 4_000_000;
88pub const RELAY_MAX_BUDGET_SATS: u64 = 500_000;
89pub const SOURCE_MAX_BLOCK_BYTES: usize = 4_000_000;
90pub const SOURCE_MAX_JSON_BYTES: usize = 1_000_000;
91pub const SOURCE_MAX_UTXOS: usize = 1_000;
92pub const SOURCE_MAX_SCAN_BLOCKS: u64 = 10_000;
93pub const SOURCE_MAX_SCAN_BYTES: usize = 256 * 1024 * 1024;
94pub const BITCOIN_RETURN_SATS: u64 = 1_000;
95pub const BITCOIN_MAX_FEE_SATS: u64 = 500_000;
96pub const BITCOIN_MAX_FEE_RATE: u64 = 100;
97
98pub const STANDARD_TX_WEIGHT: u64 = 400_000;
99pub const LITECOIN_DUST_RELAY_FEE: u64 = 30_000;
100
101pub fn publication_return(chain: urma_chain::observation::Chain) -> u64 {
102 use urma_chain::observation::Chain;
103 match chain {
104 Chain::LitecoinTestnet | Chain::LitecoinMainnet => 110 * LITECOIN_DUST_RELAY_FEE / 1000,
105 Chain::BitcoinRegtest | Chain::BitcoinTestnet4 => 1000,
106 }
107}