1pub mod bintrie;
2pub mod bintrie_error;
3pub mod bintrie_proof;
4pub mod bintrie_types;
5pub mod block_parser;
6pub mod crypto_utils;
7pub mod rpc_types;
8pub mod tn_account;
9pub mod tn_block_packet;
10pub mod tn_public_address;
11pub mod tn_runtime_utils;
12pub mod signer;
13pub mod tn_signature;
14pub mod tn_signature_encoding;
15pub mod tn_signature_legacy;
16pub mod tn_state_proof;
17pub mod tn_tools;
18pub mod txn_lib;
19pub mod txn_tools;
20pub mod version;
21
22#[cfg(test)]
23mod txn_tools_test;
24
25#[cfg(test)]
26mod bintrie_tests;
27
28pub 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};
36pub use tn_state_proof::{StateProof, StateProofBody, StateProofHeader, StateProofType};
37pub use tn_tools::KeyPair;
38pub use tn_tools::Pubkey;
39pub use tn_tools::Signature;
40pub use txn_lib::Transaction;
41pub use txn_tools::TransactionBuilder;
42
43pub use crypto_utils::{derive_manager_program_accounts, derive_uploader_program_accounts};
45
46pub use tn_public_address::{
48 create_program_defined_account_address, create_program_defined_account_address_string,
49 pack_seed, tn_pubkey_to_address_string, tn_public_address_decode, tn_public_address_encode,
50};
51
52pub use bintrie_error::BinTrieError;
54pub use bintrie_proof::{NonExistenceProof, Proof};
55pub use bintrie_types::{Hash as BinTrieHash, Pubkey as BinTriePubkey};
56pub use tn_runtime_utils::tn_vm_error_str;
57
58pub fn is_c_printable_ascii_null_terminated(bytes: &[u8]) -> bool {
60 let Some(pos) = bytes.iter().position(|&b| b == 0) else {
62 return false;
63 };
64 for &b in &bytes[..pos] {
66 if !(b >= 0x20 && b <= 0x7E) {
67 return false;
68 }
69 }
70 true
71}
72
73#[cfg(test)]
74mod tests {
75 use super::*;
76
77 #[test]
78 fn test_is_c_printable_ascii_null_terminated() {
79 assert!(is_c_printable_ascii_null_terminated(b"hello\0"));
81 assert!(is_c_printable_ascii_null_terminated(b"!@#$%^&*()_+\0"));
82 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(
87 b"hello\0not_printed\x01\x02"
88 ));
89
90 assert!(!is_c_printable_ascii_null_terminated(b"hello"));
92 assert!(!is_c_printable_ascii_null_terminated(b"hel\tlo\0"));
94 assert!(!is_c_printable_ascii_null_terminated(b"hel\x7Flo\0"));
96 assert!(!is_c_printable_ascii_null_terminated(b""));
98 assert!(!is_c_printable_ascii_null_terminated(b"foo\x19\0"));
100 }
101}