Skip to main content

smplx_sdk/
utils.rs

1use sha2::{Digest, Sha256};
2
3use simplicityhl::elements::{AssetId, ContractHash, OutPoint, Script};
4use simplicityhl::simplicity::bitcoin;
5use simplicityhl::simplicity::bitcoin::secp256k1;
6use simplicityhl::simplicity::hashes::{Hash, sha256};
7
8pub fn tr_unspendable_key() -> secp256k1::XOnlyPublicKey {
9    secp256k1::XOnlyPublicKey::from_slice(&[
10        0x50, 0x92, 0x9b, 0x74, 0xc1, 0xa0, 0x49, 0x54, 0xb7, 0x8b, 0x4b, 0x60, 0x35, 0xe9, 0x7a, 0x5e, 0x07, 0x8a,
11        0x5a, 0x0f, 0x28, 0xec, 0x96, 0xd5, 0x47, 0xbf, 0xee, 0x9a, 0xce, 0x80, 0x3a, 0xc0,
12    ])
13    .expect("key should be valid")
14}
15
16pub fn asset_entropy(outpoint: &OutPoint, entropy: [u8; 32]) -> sha256::Midstate {
17    let contract_hash = ContractHash::from_byte_array(entropy);
18    AssetId::generate_asset_entropy(*outpoint, contract_hash)
19}
20
21pub fn hash_script(script: &Script) -> [u8; 32] {
22    let mut hasher = Sha256::new();
23
24    sha2::digest::Update::update(&mut hasher, script.as_bytes());
25    hasher.finalize().into()
26}
27
28pub fn sat2btc(sat: u64) -> String {
29    let amount = bitcoin::Amount::from_sat(sat);
30    amount.to_string_in(bitcoin::amount::Denomination::Bitcoin)
31}