crate::ix!();
pub fn encode_base_58check(input: &[u8]) -> String {
trace!(payload_len = input.len(), "encode_base_58check: starting");
let mut vch: Vec<u8> = Vec::with_capacity(input.len() + 4);
vch.extend_from_slice(input);
let chk = checksum4_sha256d(input);
vch.extend_from_slice(&chk);
let out = encode_base58(&vch);
info!(encoded_len = out.len(), "encode_base_58check: success");
out
}
#[cfg(test)]
mod encode_check_spec {
use super::*;
#[traced_test]
fn leading_zeros_retained_with_checksum() {
let payload = b"\0\0hello";
let encoded = encode_base_58check(payload);
info!(?encoded, "encoded payload with leading zeros");
assert!(
encoded.starts_with("11"),
"each leading zero byte must map to a ‘1’ in Base‑58"
);
let mut decoded = Vec::new();
assert!(
decode_base_58check(&encoded, &mut decoded, 64),
"decoding failed"
);
assert_eq!(decoded, payload);
}
#[traced_test]
fn output_length_is_payload_plus_checksum() {
let payload = b"cat";
let encoded = encode_base_58check(payload);
let mut decoded = Vec::<u8>::new();
assert!(decode_base_58check(&encoded, &mut decoded, 16));
assert_eq!(decoded, payload);
}
}