pub mod bintrie;
pub mod bintrie_error;
pub mod bintrie_proof;
pub mod bintrie_types;
pub mod block_parser;
pub mod crypto_utils;
pub mod rpc_types;
pub mod tn_account;
pub mod tn_block_packet;
pub mod tn_public_address;
pub mod tn_runtime_utils;
pub mod tn_signature;
pub mod tn_signature_encoding;
pub mod tn_state_proof;
pub mod tn_tools;
pub mod txn_lib;
pub mod txn_tools;
pub mod version;
#[cfg(test)]
mod txn_tools_test;
#[cfg(test)]
mod bintrie_tests;
pub const TN_VM_ERROR_REVERT: i32 = -765;
pub const TN_VM_ERROR_FEE_PAYER_ACCOUNT_DOES_NOT_EXIST: i32 = -508;
pub const TN_EXECUTION_RESULT: u64 = 0xfffffffffffffffc;
pub const TN_USER_ERROR_CODE_SYSCALL_INSUFFICIENT_BALANCE: u64 = 0xffffffffffffffdc;
pub use bintrie::{BinTrie, BinTriePair};
pub use tn_state_proof::{StateProof, StateProofBody, StateProofHeader, StateProofType};
pub use tn_tools::KeyPair;
pub use tn_tools::Pubkey;
pub use tn_tools::Signature;
pub use txn_lib::Transaction;
pub use txn_tools::TransactionBuilder;
pub use crypto_utils::{derive_manager_program_accounts, derive_uploader_program_accounts};
pub use tn_public_address::{
create_program_defined_account_address, create_program_defined_account_address_string,
pack_seed, tn_pubkey_to_address_string, tn_public_address_decode, tn_public_address_encode,
};
pub use bintrie_error::BinTrieError;
pub use bintrie_proof::{NonExistenceProof, Proof};
pub use bintrie_types::{Hash as BinTrieHash, Pubkey as BinTriePubkey};
pub use tn_runtime_utils::tn_vm_error_str;
pub fn is_c_printable_ascii_null_terminated(bytes: &[u8]) -> bool {
let Some(pos) = bytes.iter().position(|&b| b == 0) else {
return false;
};
for &b in &bytes[..pos] {
if !(b >= 0x20 && b <= 0x7E) {
return false;
}
}
true
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_is_c_printable_ascii_null_terminated() {
assert!(is_c_printable_ascii_null_terminated(b"hello\0"));
assert!(is_c_printable_ascii_null_terminated(b"!@#$%^&*()_+\0"));
assert!(is_c_printable_ascii_null_terminated(b" \0")); assert!(is_c_printable_ascii_null_terminated(b"~\0")); assert!(is_c_printable_ascii_null_terminated(b"\0")); assert!(is_c_printable_ascii_null_terminated(
b"hello\0not_printed\x01\x02"
));
assert!(!is_c_printable_ascii_null_terminated(b"hello"));
assert!(!is_c_printable_ascii_null_terminated(b"hel\tlo\0"));
assert!(!is_c_printable_ascii_null_terminated(b"hel\x7Flo\0"));
assert!(!is_c_printable_ascii_null_terminated(b""));
assert!(!is_c_printable_ascii_null_terminated(b"foo\x19\0"));
}
}