pub use self::create::CheckedMetadata as CreateCheckedMetadata;
pub use self::script::CheckedMetadata as ScriptCheckedMetadata;
use fuel_types::{AssetId, Word};
use std::collections::BTreeMap;
#[derive(Default, Debug, Clone, Eq, PartialEq, Hash)]
pub struct NonRetryableFreeBalances(pub(crate) BTreeMap<AssetId, Word>);
impl From<NonRetryableFreeBalances> for BTreeMap<AssetId, Word> {
fn from(value: NonRetryableFreeBalances) -> Self {
value.0
}
}
impl core::ops::Deref for NonRetryableFreeBalances {
type Target = BTreeMap<AssetId, Word>;
fn deref(&self) -> &Self::Target {
&self.0
}
}
#[derive(Default, Debug, Copy, Clone, Eq, PartialEq, Hash)]
pub struct RetryableAmount(pub(crate) Word);
impl From<RetryableAmount> for Word {
fn from(value: RetryableAmount) -> Self {
value.0
}
}
impl core::ops::Deref for RetryableAmount {
type Target = Word;
fn deref(&self) -> &Self::Target {
&self.0
}
}
pub mod create {
use super::super::{
balances::{initial_free_balances, AvailableBalances},
Checked, IntoChecked,
};
use crate::checked_transaction::NonRetryableFreeBalances;
use fuel_tx::{Cacheable, CheckError, ConsensusParameters, Create, FormatValidityChecks, TransactionFee};
use fuel_types::{BlockHeight, Word};
#[derive(Debug, Clone, Eq, PartialEq, Hash)]
pub struct CheckedMetadata {
pub free_balances: NonRetryableFreeBalances,
pub block_height: BlockHeight,
pub fee: TransactionFee,
pub gas_used_by_predicates: Word,
}
impl IntoChecked for Create {
type Metadata = CheckedMetadata;
fn into_checked_basic(
mut self,
block_height: BlockHeight,
params: &ConsensusParameters,
) -> Result<Checked<Self>, CheckError> {
self.precompute(params);
self.check_without_signatures(block_height, params)?;
let AvailableBalances {
non_retryable_balances,
retryable_balance,
fee,
} = initial_free_balances(&self, params)?;
assert_eq!(
retryable_balance, 0,
"The `check_without_signatures` should return `TransactionCreateMessageData` above"
);
let metadata = CheckedMetadata {
free_balances: NonRetryableFreeBalances(non_retryable_balances),
block_height,
fee,
gas_used_by_predicates: 0,
};
Ok(Checked::basic(self, metadata))
}
}
}
pub mod mint {
use super::super::{Checked, IntoChecked};
use fuel_tx::{Cacheable, CheckError, ConsensusParameters, FormatValidityChecks, Mint};
use fuel_types::BlockHeight;
impl IntoChecked for Mint {
type Metadata = ();
fn into_checked_basic(
mut self,
block_height: BlockHeight,
params: &ConsensusParameters,
) -> Result<Checked<Self>, CheckError> {
self.precompute(params);
self.check_without_signatures(block_height, params)?;
Ok(Checked::basic(self, ()))
}
}
}
pub mod script {
use super::super::{
balances::{initial_free_balances, AvailableBalances},
Checked, IntoChecked,
};
use crate::checked_transaction::{NonRetryableFreeBalances, RetryableAmount};
use fuel_tx::{Cacheable, CheckError, ConsensusParameters, FormatValidityChecks, Script, TransactionFee};
use fuel_types::{BlockHeight, Word};
#[derive(Debug, Clone, Eq, PartialEq, Hash)]
pub struct CheckedMetadata {
pub non_retryable_balances: NonRetryableFreeBalances,
pub retryable_balance: RetryableAmount,
pub block_height: BlockHeight,
pub fee: TransactionFee,
pub gas_used_by_predicates: Word,
}
impl IntoChecked for Script {
type Metadata = CheckedMetadata;
fn into_checked_basic(
mut self,
block_height: BlockHeight,
params: &ConsensusParameters,
) -> Result<Checked<Self>, CheckError> {
self.precompute(params);
self.check_without_signatures(block_height, params)?;
let AvailableBalances {
non_retryable_balances,
retryable_balance,
fee,
} = initial_free_balances(&self, params)?;
let metadata = CheckedMetadata {
non_retryable_balances: NonRetryableFreeBalances(non_retryable_balances),
retryable_balance: RetryableAmount(retryable_balance),
block_height,
fee,
gas_used_by_predicates: 0,
};
Ok(Checked::basic(self, metadata))
}
}
}