use anyhow::Result;
use fuel_gql_client::{
client::{types::TransactionStatus, FuelClient},
fuel_tx::{Receipt, Transaction},
};
use fuels_core::errors::Error;
pub struct Script {
pub tx: Transaction,
}
#[derive(Debug, Clone)]
pub struct CompiledScript {
pub raw: Vec<u8>,
pub target_network_url: String,
}
impl Script {
pub fn new(tx: Transaction) -> Self {
Self { tx }
}
pub async fn call(self, fuel_client: &FuelClient) -> Result<Vec<Receipt>, Error> {
let tx_id = fuel_client.submit(&self.tx).await?.0.to_string();
let receipts = fuel_client.receipts(&tx_id).await?;
let status = fuel_client.transaction_status(&tx_id).await?;
match status {
TransactionStatus::Failure { reason, .. } => {
Err(Error::ContractCallError(reason, receipts))
}
_ => Ok(receipts),
}
}
pub async fn simulate(self, fuel_client: &FuelClient) -> Result<Vec<Receipt>, Error> {
let receipts = fuel_client.dry_run(&self.tx).await?;
Ok(receipts)
}
}