Skip to main content

reg_probe/
reg_probe.rs

1//! Print what the registry and the KCC-20 cell readers make of program files:
2//! the decoder and template that matched, every labelled field, and whether
3//! the program reads as a KCC-20 token cell.
4//!
5//!   cargo run -p kascov-decode --example reg_probe -- <program file>...
6use kascov_decode::{kcc20, Registry};
7fn main() {
8    let reg = Registry::default();
9    for path in std::env::args().skip(1) {
10        let bytes = std::fs::read(&path).expect("read");
11        let d = reg.decode(0, &bytes);
12        let digest = blake2b_simd::Params::new().hash_length(32).hash(&bytes);
13        println!(
14            "== {} len={} blake2b={}",
15            path,
16            bytes.len(),
17            hex::encode(digest.as_bytes())
18        );
19        println!(
20            "   decoder={} template={:?} fields={}",
21            d.decoder,
22            d.template,
23            d.fields.len()
24        );
25        for f in &d.fields {
26            let v = if f.value.len() > 40 {
27                format!("{}…({}B)", hex::encode(&f.value[..40]), f.value.len())
28            } else {
29                hex::encode(&f.value)
30            };
31            println!("     - {} = {}", f.name, v);
32        }
33        println!(
34            "   kcc20.revealed_template = {:?}",
35            kcc20::revealed_template(&reg, 0, &bytes)
36        );
37        match kcc20::locate_state_block(&bytes) {
38            Some(x) => println!("   kcc20.locate_state_block = {:?}", x),
39            None => println!("   kcc20.locate_state_block = None"),
40        }
41        match kcc20::decode_token_state(&reg, 0, &bytes) {
42            Some(s) => println!(
43                "   token_state owner={} type={} amount={:?} minter={:?}",
44                hex::encode(s.owner),
45                s.identifier_type,
46                s.amount_i64(),
47                s.is_minter()
48            ),
49            None => println!("   token_state = None"),
50        }
51    }
52}