use crate::{errors::Error, storage::ZERO_BYTES};
use soroban_sdk::{panic_with_error, xdr::ToXdr, Address, Bytes, Env};
pub fn is_zero_address(env: &Env, address: Bytes) -> bool {
let zero_bytes = Bytes::from_array(env, &ZERO_BYTES);
zero_bytes == address
}
pub fn address_to_raw_bytes(env: &Env, address: Address) -> Bytes {
let xdr_bytes = address.to_xdr(env);
let xdr_buffer = xdr_bytes.to_buffer::<1024>();
let xdr_slice = xdr_buffer.as_slice();
if xdr_slice.len() < 32 {
panic_with_error!(env, Error::AddressXDRRepresentationTooShort);
}
let start = xdr_slice.len() - 32;
let raw_bytes = &xdr_slice[start..xdr_slice.len()];
Bytes::from_slice(env, raw_bytes)
}
pub fn validate_address_bytes(env: &Env, signer: Address, public_key: Bytes) -> bool {
let raw_bytes_from_address = address_to_raw_bytes(env, signer);
raw_bytes_from_address == public_key
}