Skip to main content

faker_rust/blockchain/
tezos.rs

1//! Tezos blockchain generator
2
3use crate::config::FakerConfig;
4
5/// Generate a random Tezos account address (tz1...)
6pub fn account() -> String {
7    encode_tz("tz1", 20)
8}
9
10/// Generate a random Tezos contract address (KT1...)
11pub fn contract() -> String {
12    encode_tz("KT1", 20)
13}
14
15/// Generate a random Tezos operation hash
16pub fn operation() -> String {
17    encode_tz("o", 32)
18}
19
20/// Generate a random Tezos block hash
21pub fn block() -> String {
22    encode_tz("B", 32)
23}
24
25/// Generate a random Tezos signature
26pub fn signature() -> String {
27    encode_tz("edsig", 64)
28}
29
30/// Generate a random Tezos public key
31pub fn public_key() -> String {
32    encode_tz("edpk", 32)
33}
34
35/// Generate a random Tezos secret key
36pub 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    // Generate random payload
45    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}