pub use stellar_axelar_std::InterchainTokenExecutable;
use stellar_axelar_std::{
contractclient, derive_only, soroban_sdk, Address, Bytes, BytesN, Env, String,
};
pub trait CustomInterchainTokenExecutable {
type Error: Into<stellar_axelar_std::Error>;
fn __interchain_token_service(env: &Env) -> Address;
fn __authorized_execute_with_token(
env: &Env,
source_chain: String,
message_id: String,
source_address: Bytes,
payload: Bytes,
token_id: BytesN<32>,
token_address: Address,
amount: i128,
) -> Result<(), Self::Error>;
}
derive_only!();
#[contractclient(name = "InterchainTokenExecutableClient")]
pub trait InterchainTokenExecutableInterface: CustomInterchainTokenExecutable + DeriveOnly {
fn interchain_token_service(env: &Env) -> Address;
fn execute_with_interchain_token(
env: &Env,
source_chain: String,
message_id: String,
source_address: Bytes,
payload: Bytes,
token_id: BytesN<32>,
token_address: Address,
amount: i128,
) -> Result<(), stellar_axelar_std::Error>;
}