faker_rust/blockchain/
tezos.rs1use crate::config::FakerConfig;
4
5pub fn account() -> String {
7 encode_tz("tz1", 20)
8}
9
10pub fn contract() -> String {
12 encode_tz("KT1", 20)
13}
14
15pub fn operation() -> String {
17 encode_tz("o", 32)
18}
19
20pub fn block() -> String {
22 encode_tz("B", 32)
23}
24
25pub fn signature() -> String {
27 encode_tz("edsig", 64)
28}
29
30pub fn public_key() -> String {
32 encode_tz("edpk", 32)
33}
34
35pub fn secret_key() -> String {
37 encode_tz("edsk", 32)
38}
39
40fn encode_tz(prefix: &str, payload_size: usize) -> String {
41 const BASE58_ALPHABET: &[u8] = b"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
42 let config = FakerConfig::current();
43
44 let mut payload = String::new();
46 for _ in 0..payload_size {
47 let idx = config.rand_range(0, 256) as usize % BASE58_ALPHABET.len();
48 payload.push(BASE58_ALPHABET[idx] as char);
49 }
50
51 format!("{}{}", prefix, payload)
52}
53
54#[cfg(test)]
55mod tests {
56 use super::*;
57
58 #[test]
59 fn test_account() {
60 let addr = account();
61 assert!(addr.starts_with("tz1"));
62 assert!(!addr.is_empty());
63 }
64
65 #[test]
66 fn test_contract() {
67 let addr = contract();
68 assert!(addr.starts_with("KT1"));
69 assert!(!addr.is_empty());
70 }
71
72 #[test]
73 fn test_operation() {
74 let op = operation();
75 assert!(op.starts_with("o"));
76 assert!(!op.is_empty());
77 }
78
79 #[test]
80 fn test_block() {
81 let blk = block();
82 assert!(blk.starts_with("B"));
83 assert!(!blk.is_empty());
84 }
85
86 #[test]
87 fn test_signature() {
88 let sig = signature();
89 assert!(sig.starts_with("edsig"));
90 assert!(!sig.is_empty());
91 }
92
93 #[test]
94 fn test_public_key() {
95 let key = public_key();
96 assert!(key.starts_with("edpk"));
97 assert!(!key.is_empty());
98 }
99
100 #[test]
101 fn test_secret_key() {
102 let key = secret_key();
103 assert!(key.starts_with("edsk"));
104 assert!(!key.is_empty());
105 }
106}