1#![cfg_attr(docsrs, feature(doc_cfg))]
2#![cfg_attr(
3 test,
4 allow(
5 unknown_lints,
6 clippy::unused_async_trait_impl,
7 reason = "in-crate mock impls of AFIT traits have no .await"
8 )
9)]
10
11#[cfg(feature = "telemetry")]
32use tracing_core as _;
33
34pub const DEFAULT_TOKEN_DECIMALS: u8 = 7;
36
37pub const BASE_FEE_STROOPS: u32 = 100;
39
40pub const DEFAULT_MAX_TRANSACTION_FEE_STROOPS: u32 = 50_000;
42
43pub const DEFAULT_ESTIMATED_LEDGER_SECONDS: u64 = 5;
45
46pub const SIGNATURE_EXPIRATION_LEDGER_TOLERANCE: u32 = 2;
48
49pub const DEFAULT_TIMEOUT_SECONDS: u64 = 60;
51
52pub const HORIZON_LEDGERS_SAMPLE_SIZE: u32 = 20;
54
55pub const NULL_ACCOUNT: &str = "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF";
59
60pub const TRANSFER_FUNCTION: &str = "transfer";
62
63pub mod chain;
64pub mod exact;
65
66mod networks;
67#[cfg(any(feature = "client", feature = "facilitator"))]
68pub use chain::StellarJsonRpc;
69#[cfg(feature = "facilitator")]
70pub use chain::{StellarChainProvider, StellarFacilitatorError};
71#[cfg(any(feature = "client", feature = "facilitator"))]
72pub use chain::{StellarRpc, StellarRpcError, StellarSigner};
73pub use exact::StellarExact;
74#[cfg(feature = "client")]
75pub use exact::client::StellarExactClient;
76pub use networks::*;
77
78#[must_use]
80pub fn timeout_ledgers(max_timeout_seconds: u64, estimated_ledger_seconds: u64) -> u32 {
81 let estimated = estimated_ledger_seconds.max(1);
82 let ledgers = max_timeout_seconds.div_ceil(estimated);
83 u32::try_from(ledgers).unwrap_or(u32::MAX)
84}
85
86#[cfg(any(feature = "client", feature = "facilitator"))]
88#[must_use]
89pub fn network_id(passphrase: &str) -> [u8; 32] {
90 use sha2::{Digest, Sha256};
91 Sha256::digest(passphrase.as_bytes()).into()
92}