use sha2::{Digest, Sha256};
use thruput_xdr::contract::{Contract, ContractEntrypointID};
use thruput_xdr::types::{ContractAddress, SHA256Hash};
use crate::SigningError;
pub const NATIVE_TOKEN_DECIMALS: u32 = 7;
pub const NATIVE_TOKEN_SCALE: u128 = 10_000_000;
pub const NATIVE_TOKEN_TRANSFER_ENTRYPOINT: ContractEntrypointID =
ContractEntrypointID::new([0x63, 0x28, 0x5b, 0x35, 0x23, 0xf9, 0xdc, 0x3f]);
pub fn native_token_transfer_calldata(
recipient: &ContractAddress,
raw_amount: u128,
) -> Result<Vec<u8>, SigningError> {
xdrs::cxs::encode(&(recipient, raw_amount))
.map_err(|error| SigningError::XdrEncode(error.to_string()))
}
pub fn wallet_contract_hash(contract: &Contract) -> Result<SHA256Hash, SigningError> {
let contract_xdr =
xdrs::txs::encode(contract).map_err(|error| SigningError::XdrEncode(error.to_string()))?;
let bytes: [u8; 32] = Sha256::digest(contract_xdr).into();
Ok(SHA256Hash::from(bytes))
}