1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
use anyhow::Result;
use fuel_gql_client::client::{types::TransactionStatus, FuelClient};
use 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)),
_ => 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)
}
}