dpp/identity/
credits_converter.rs

1use 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}