dpp/identity/
credits_converter.rs1use crate::balances::credits::CREDITS_PER_DUFF;
2use crate::fee::Credits;
3use crate::ProtocolError;
4
5pub fn convert_duffs_to_credits(amount: u64) -> Result<Credits, ProtocolError> {
6 amount
7 .checked_mul(CREDITS_PER_DUFF)
8 .ok_or(ProtocolError::Overflow(
9 "converting duffs to credits failed",
10 ))
11}
12
13pub fn convert_credits_to_duffs(amount: Credits) -> Result<u64, ProtocolError> {
14 amount
15 .checked_div(CREDITS_PER_DUFF)
16 .ok_or(ProtocolError::Overflow(
17 "converting credits to duffs failed",
18 ))
19}
20
21#[cfg(test)]
22mod test {
23 use super::*;
24
25 #[test]
26 fn test_should_convert_satoshi_to_credits() {
27 let amount = 42;
28 let converted = convert_duffs_to_credits(amount).unwrap();
29 assert_eq!(converted, amount * CREDITS_PER_DUFF);
30 }
31
32 #[test]
33 fn test_should_convert_credits_to_satoshi() {
34 let amount = 10000;
35 let converted = convert_credits_to_duffs(amount).unwrap();
36 assert_eq!(converted, amount / CREDITS_PER_DUFF);
37 }
38
39 #[test]
40 fn test_convert_to_0_satoshi_if_amount_lower_than_ratio() {
41 let amount = CREDITS_PER_DUFF - 1;
42 let converted = convert_credits_to_duffs(amount).unwrap();
43 assert_eq!(converted, 0);
44 }
45}