waves_rust/util/
base58.rs1use crate::error::Result;
2
3pub struct Base58;
4
5impl Base58 {
6 pub fn decode(source: &str) -> Result<Vec<u8>> {
7 Ok(bs58::decode(source).into_vec()?)
8 }
9
10 pub fn encode(bytes: &Vec<u8>, with_prefix: bool) -> String {
11 let base58string = bs58::encode(bytes).into_string();
12 if with_prefix {
13 return format!("base58:{}", base58string);
14 }
15 base58string
16 }
17
18 pub fn string_is_valid(encoded: &str) -> bool {
19 bs58::decode(encoded).into_vec().is_ok()
20 }
21}
22
23#[cfg(test)]
24mod tests {
25 use crate::util::Base58;
26
27 #[test]
28 fn test_valid_base58string() {
29 let base58string = "7LBopaBdBzQbgqrnwgmgCDhcSTb32MYhE96SnSHcqZC2";
30 assert_eq!(Base58::string_is_valid(base58string), true);
31 }
32
33 #[test]
34 fn test_invalid_base58string() {
35 let empty_string = "";
36 let invalid_string = "0LBopaBdBzQbgqrnwgmgCDhcSTb32MYhE96SnSHcqZC2";
37 assert_eq!(Base58::string_is_valid(empty_string), true);
38 assert_eq!(Base58::string_is_valid(invalid_string), false);
39 }
40
41 #[test]
42 fn test_decode_string() {
43 let test_string = "1LBopaBdBzQbgqrnwgmgCDhcSTb32MYhE96SnSHcqZC2";
44 let bytes = Base58::decode(test_string).expect("failed to decode base58 from string");
45 let base58string = Base58::encode(&bytes, false);
46 let base58string_with_prefix = Base58::encode(&bytes, true);
47 assert_eq!(test_string, base58string);
48 assert_eq!(
49 base58string_with_prefix,
50 "base58:1LBopaBdBzQbgqrnwgmgCDhcSTb32MYhE96SnSHcqZC2"
51 )
52 }
53}