pub mod execution;
pub mod tests;
use eyre::Error;
use merkle_tree::*;
use rust_decimal::Decimal;
use serde::{Deserialize, Serialize};
use simperby_core::*;
#[derive(PartialEq, Eq, Debug, Serialize, Deserialize, Clone)]
pub struct SettlementChainBlock {
pub height: u64,
pub timestamp: u64,
}
#[async_trait::async_trait]
pub trait SettlementChain: Send + Sync {
async fn get_chain_name(&self) -> String;
async fn check_connection(&self) -> Result<(), Error>;
async fn get_last_block(&self) -> Result<SettlementChainBlock, Error>;
async fn get_contract_sequence(&self) -> Result<u128, Error>;
async fn get_relayer_account_info(&self) -> Result<(HexSerializedVec, Decimal), Error>;
async fn get_light_client_header(&self) -> Result<BlockHeader, Error>;
async fn get_treasury_fungible_token_balance(
&self,
address: HexSerializedVec,
) -> Result<Decimal, Error>;
async fn get_treasury_non_fungible_token_balance(
&self,
address: HexSerializedVec,
) -> Result<Vec<HexSerializedVec>, Error>;
async fn update_treasury_light_client(
&self,
header: BlockHeader,
proof: FinalizationProof,
) -> Result<(), Error>;
async fn execute(
&self,
transaction: Transaction,
block_height: u64,
proof: MerkleProof,
) -> Result<(), Error>;
async fn eoa_get_sequence(&self, address: HexSerializedVec) -> Result<u128, Error>;
async fn eoa_get_fungible_token_balance(
&self,
address: HexSerializedVec,
token_address: HexSerializedVec,
) -> Result<Decimal, Error>;
async fn eoa_transfer_fungible_token(
&self,
address: HexSerializedVec,
sender_private_key: HexSerializedVec,
token_address: HexSerializedVec,
receiver_address: HexSerializedVec,
amount: Decimal,
) -> Result<(), Error>;
}