fuel_tx/
lib.rs

1#![cfg_attr(not(feature = "std"), no_std)]
2#![allow(clippy::too_many_arguments)]
3#![allow(clippy::try_err)]
4// Wrong clippy convention; check
5// https://rust-lang.github.io/api-guidelines/naming.html
6#![allow(clippy::wrong_self_convention)]
7#![deny(
8    clippy::arithmetic_side_effects,
9    clippy::cast_sign_loss,
10    clippy::cast_possible_truncation,
11    clippy::cast_possible_wrap,
12    clippy::string_slice
13)]
14#![deny(unused_crate_dependencies)]
15#![deny(unsafe_code)]
16
17// TODO: Add docs
18
19#[cfg(feature = "alloc")]
20extern crate alloc;
21extern crate core;
22
23pub mod consts;
24mod tx_pointer;
25
26pub use fuel_asm::{
27    PanicInstruction,
28    PanicReason,
29};
30pub use fuel_types::{
31    Address,
32    AssetId,
33    BlobId,
34    Bytes4,
35    Bytes8,
36    Bytes32,
37    Bytes64,
38    ContractId,
39    MessageId,
40    Salt,
41    SubAssetId,
42    Word,
43};
44pub use tx_pointer::TxPointer;
45
46#[cfg(feature = "test-helpers")]
47mod builder;
48
49#[cfg(feature = "alloc")]
50mod contract;
51
52#[cfg(feature = "alloc")]
53mod receipt;
54
55#[cfg(feature = "alloc")]
56mod transaction;
57
58#[cfg(test)]
59mod tests;
60
61#[cfg(feature = "test-helpers")]
62pub mod test_helper;
63
64#[cfg(feature = "test-helpers")]
65pub use builder::{
66    Buildable,
67    Finalizable,
68    TransactionBuilder,
69};
70
71#[cfg(feature = "alloc")]
72pub use receipt::{
73    Receipt,
74    ScriptExecutionResult,
75};
76
77#[cfg(feature = "alloc")]
78pub use transaction::{
79    Blob,
80    BlobBody,
81    BlobIdExt,
82    BlobMetadata,
83    Cacheable,
84    Chargeable,
85    ChargeableMetadata,
86    ChargeableTransaction,
87    ConsensusParameters,
88    ContractParameters,
89    Create,
90    CreateMetadata,
91    DependentCost,
92    Executable,
93    FeeParameters,
94    FormatValidityChecks,
95    GasCosts,
96    GasCostsValues,
97    Mint,
98    PredicateParameters,
99    Script,
100    ScriptCode,
101    ScriptParameters,
102    StorageSlot,
103    Transaction,
104    TransactionFee,
105    TransactionRepr,
106    TxId,
107    TxParameters,
108    Upgrade,
109    UpgradeBody,
110    UpgradeMetadata,
111    UpgradePurpose,
112    Upload,
113    UploadBody,
114    UploadMetadata,
115    UploadSubsection,
116    UtxoId,
117    ValidityError,
118    Witness,
119    consensus_parameters,
120    field,
121    input,
122    input::Input,
123    input::InputRepr,
124    output,
125    output::Output,
126    output::OutputRepr,
127    policies,
128};
129
130#[cfg(feature = "da-compression")]
131pub use transaction::{
132    CompressedMint,
133    CompressedTransaction,
134    CompressedUtxoId,
135};
136
137pub use transaction::{
138    PrepareSign,
139    Signable,
140    UniqueIdentifier,
141};
142
143#[cfg(feature = "alloc")]
144pub use contract::Contract;
145
146/// Trait extends the functionality of the `ContractId` type.
147pub trait ContractIdExt {
148    /// Creates an `AssetId` from the `ContractId` and `sub_id`.
149    fn asset_id(&self, sub_id: &SubAssetId) -> AssetId;
150
151    /// Creates an `AssetId` from the `ContractId` and the default 0x00..000 `sub_id`.
152    fn default_asset(&self) -> AssetId;
153}
154
155impl ContractIdExt for ContractId {
156    fn asset_id(&self, sub_id: &SubAssetId) -> AssetId {
157        let hasher = fuel_crypto::Hasher::default();
158        AssetId::new(
159            *hasher
160                .chain(self.as_slice())
161                .chain(sub_id.as_slice())
162                .finalize(),
163        )
164    }
165
166    fn default_asset(&self) -> AssetId {
167        self.asset_id(&SubAssetId::zeroed())
168    }
169}