vialabs-stellar-common 0.1.6

Common interfaces, types, and utilities for Stellar contracts in the VIA cross-chain messaging system
Documentation
use crate::storage::{ChainDetails, DataKey};
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 sender: Bytes,
  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,
}

#[contractclient(name = "MessageGatewayV4Client")]
pub trait MessageGatewayV4Interface {
  fn __constructor(env: &Env, chain_id: u64, deployer: Address, message_prefix: u128);

  fn only_owner(env: &Env);

  fn set_chain_signers(env: &Env, chain_signers: Vec<Address>, required: u32);
  fn set_via_signers(env: &Env, via_signers: Vec<Address>, required: u32);
  fn set_relayers(env: &Env, relayers: Vec<Address>, required: bool);

  fn set_system_enabled(env: &Env, system_enabled: bool);
  fn is_system_enabled(env: &Env) -> bool;

  fn initialize_universal_settings(env: &Env, request: InitializeUniversalSettingsRequest);

  fn send(env: &Env, request: SendRequest) -> u128;
  fn process(env: &Env, request: ProcessRequest);

  fn set_contract_relayers(env: &Env, contract_relayers: Vec<Address>, contract: Address);
  fn set_project_signers(
    env: &Env,
    project_signers: Vec<Address>,
    required: u32,
    project_contract: Address,
  );

  fn set_tip(env: &Env, block_number: u32);
  fn get_tip(env: &Env) -> u32;

  fn get_next_tx_id(env: &Env) -> u128;
  fn is_relayer_authorized(env: &Env, recipient: Address, relayer: Address) -> bool;
  fn update_simple_address_array(env: &Env, key: DataKey, new_array: Vec<Address>) -> u32;
  fn update_nested_address_array(env: &Env, key: DataKey, new_array: Vec<Address>) -> u32;

  fn get_all_chain_signers(env: &Env) -> (Vec<Address>, u32);
  fn get_all_via_signers(env: &Env) -> (Vec<Address>, u32);
  fn get_all_project_signers(env: &Env, contract: Address) -> (Vec<Address>, u32);
  fn get_all_relayers(env: &Env) -> (Vec<Address>, bool);
  fn get_all_contract_relayers(env: &Env, contract: Address) -> (Vec<Address>, bool);

  fn set_pos_handler(env: &Env, pos_handler: Address);
  fn set_fee_handler(env: &Env, fee_handler: Address);
  fn set_gas_handler(env: &Env, gas_handler: Address);

  fn get_chain_details(env: &Env) -> ChainDetails;
  fn set_chain_details(env: &Env, chain_details: ChainDetails);
  fn validate_security_layers(env: &Env, request: ProcessRequest);
  fn process_call(env: &Env, request: ProcessRequest);
  fn get_required_signer_counts(env: &Env, recipient: Address) -> (u32, u32, u32);
  fn get_gas_handler(env: &Env) -> Option<Address>;
  fn process_gas_refund(env: &Env, recipient: Address, relayer: Address, gas: u64);
}