pub const BECH32M_CHARSET: &str = "qpzry9x8gf2tvdw0s3jn54khce6mua7l1";
pub fn is_in_bech32m_charset(s: &str) -> bool {
s.as_bytes().iter().all(|b| BECH32M_CHARSET.as_bytes().contains(b))
}
pub fn has_vanity_string(s: &str, vanity: &str) -> bool {
let (hrp, data) = match s.split_once('1') {
Some((hrp, data)) => (hrp, data),
None => return false,
};
if hrp.is_empty() || data.is_empty() {
return false;
}
data.starts_with(vanity) || data.ends_with(vanity)
}
#[test]
fn test_is_in_bech32m_charset() {
assert!(is_in_bech32m_charset("qpzry9x8gf2tvdw0s3jn54khce6mua7l1qpzry9x8gf2tvdw0s3jn54khce6mua7l1"));
assert!(!is_in_bech32m_charset("qpzry9x8gf2tvdw0s3jn54khce6mua7l1qpzry9x8gf2tvdw0s3jn54khce6mua7lo"));
}
#[test]
fn test_has_vanity_string() {
assert!(has_vanity_string("myhrp1myvanitystring", "myvanitystring"));
assert!(!has_vanity_string("myhrp1myvanitystring", "anotherstring"));
assert!(has_vanity_string("myhrp1myvanitystring1234", "myvanitystring"));
assert!(has_vanity_string("myhrp11234myvanitystring", "myvanitystring"));
assert!(!has_vanity_string("myhrp1anotherstring1234", "myvanitystring"));
}