thruput-native-exec 0.58.0

Native execution environment for testing Thruput smart contracts
Documentation
use sha2::{Digest, Sha256};
use thruput_xdr::types::ContractAddress;

/// Create deterministic test addresses from human-readable names.
///
/// ```
/// use thruput_native_exec::test_helpers::Named;
/// use thruput_xdr::types::ContractAddress;
///
/// let alice = ContractAddress::named("alice");
/// assert_eq!(alice, ContractAddress::named("alice")); // deterministic
/// assert_ne!(alice, ContractAddress::named("bob"));   // distinct
/// ```
pub trait Named {
    /// The deterministic address derived from `name`.
    fn named(name: &str) -> Self;
}

impl Named for ContractAddress {
    fn named(name: &str) -> Self {
        let mut hasher = Sha256::new();
        hasher.update(b"thruput-test-address:");
        hasher.update(name.as_bytes());
        let result: [u8; 32] = hasher.finalize().into();
        result.into()
    }
}