use crate::storage::ChainDetails;
use soroban_sdk::{contractclient, contracttype, Address, Bytes, BytesN, Env, Vec};
#[contracttype]
#[derive(Clone, Debug, PartialEq)]
pub struct Signature {
pub signature: BytesN<64>,
pub public_key: BytesN<32>,
}
#[contracttype]
#[derive(Clone, Debug, PartialEq)]
pub struct ProcessRequest {
pub tx_id: u128,
pub source_chain_id: u64,
pub destination_chain_id: u64,
pub sender: Bytes,
pub recipient: Address,
pub relayer: Address,
pub on_chain_data: Bytes,
pub off_chain_data: Bytes,
pub signatures: Vec<Signature>,
pub gas: u64,
}
#[contracttype]
#[derive(Clone, Debug, PartialEq)]
pub struct SendRequest {
pub recipient: Bytes,
pub destination_chain: u64,
pub chain_data: Bytes,
pub confirmations: u32,
}
#[contracttype]
#[derive(Clone, Debug, PartialEq)]
pub struct InitializeUniversalSettingsRequest {
pub chain_signers: Vec<Address>,
pub chain_signers_required: u32,
pub via_signers: Vec<Address>,
pub via_signers_required: u32,
pub relayers: Vec<Address>,
pub relayers_required: bool,
pub system_enabled: bool,
pub pos_handler: Address,
pub fee_handler: Address,
pub gas_handler: Address,
}
use crate::errors::Error;
#[contractclient(name = "MessageGatewayV4Client")]
pub trait MessageGatewayV4Interface {
fn __constructor(
env: &Env,
chain_id: u64,
deployer: Address,
message_prefix: u128,
) -> Result<(), Error>;
fn set_chain_signers(env: &Env, chain_signers: Vec<Address>, required: u32) -> Result<(), Error>;
fn set_via_signers(env: &Env, via_signers: Vec<Address>, required: u32) -> Result<(), Error>;
fn set_relayers(env: &Env, relayers: Vec<Address>, required: bool) -> Result<(), Error>;
fn set_system_enabled(env: &Env, system_enabled: bool) -> Result<(), Error>;
fn is_system_enabled(env: &Env) -> bool;
fn initialize_universal_settings(
env: &Env,
request: InitializeUniversalSettingsRequest,
) -> Result<(), Error>;
fn send(env: &Env, request: SendRequest) -> Result<u128, Error>;
fn process(env: &Env, request: ProcessRequest) -> Result<(), Error>;
fn set_contract_relayers(
env: &Env,
contract: Address,
contract_relayers: Vec<Address>,
) -> Result<(), Error>;
fn set_project_signers(
env: &Env,
contract: Address,
project_signers: Vec<Address>,
required: u32,
) -> Result<(), Error>;
fn set_pos_handler(env: &Env, pos_handler: Address) -> Result<(), Error>;
fn set_fee_handler(env: &Env, fee_handler: Address) -> Result<(), Error>;
fn set_gas_handler(env: &Env, gas_handler: Address) -> Result<(), Error>;
fn get_required_signer_counts(env: &Env, recipient: Address) -> (u32, u32, u32);
fn get_gas_handler(env: &Env) -> Option<Address>;
fn get_fee_handler(env: &Env) -> Option<Address>;
fn get_all_via_signers(env: &Env) -> (Vec<Address>, u32);
fn get_all_chain_signers(env: &Env) -> (Vec<Address>, u32);
fn get_all_relayers(env: &Env) -> (Vec<Address>, bool);
fn get_all_project_signers(env: &Env, project_contract: Address) -> (Vec<Address>, u32);
fn get_all_contract_relayers(env: &Env, contract: Address) -> (Vec<Address>, bool);
fn get_next_tx_id(env: &Env) -> Result<u128, Error>;
fn get_tip(env: &Env) -> u32;
fn get_chain_details(env: &Env) -> Result<ChainDetails, Error>;
fn is_relayer_authorized(env: &Env, recipient: Address, relayer: Address) -> bool;
fn process_fee(env: &Env, caller_address: Address) -> Result<(), Error>;
}