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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
// © 2024 Max Karou. All Rights Reserved.
// Licensed under Apache Version 2.0, or MIT License, at your discretion.
//
// Apache License: http://www.apache.org/licenses/LICENSE-2.0
// MIT License: http://opensource.org/licenses/MIT
//
// Usage of this file is permitted solely under a sanctioned license.

use crate::clarity;
use crate::crypto;
pub use crate::transaction::auth::Auth;
pub use crate::transaction::auth::Modification;
pub use crate::transaction::auth::SpendingCondition;
pub use crate::transaction::auth::SpendingConditionMultiSig;
pub use crate::transaction::auth::SpendingConditionStandard;
pub use crate::transaction::base::AnchorMode;
pub use crate::transaction::base::Transaction;
pub use crate::transaction::builder::STXContractCall;
pub use crate::transaction::builder::STXTokenTransfer;
pub use crate::transaction::condition::AssetInfo;
pub use crate::transaction::condition::Condition;
pub use crate::transaction::condition::ConditionCode;
pub use crate::transaction::condition::FungiblePostCondition;
pub use crate::transaction::condition::NonFungiblePostCondition;
pub use crate::transaction::condition::PostConditionMode;
pub use crate::transaction::condition::PostConditions;
pub use crate::transaction::condition::STXPostCondition;
pub use crate::transaction::network::ChainID;
pub use crate::transaction::network::Network;
pub use crate::transaction::network::StacksMainnet;
pub use crate::transaction::network::StacksMocknet;
pub use crate::transaction::network::StacksTestnet;
pub use crate::transaction::network::TransactionVersion;
pub use crate::transaction::payload::ContractCallPayload;
pub use crate::transaction::payload::Payload;
pub use crate::transaction::payload::TokenTransferPayload;
pub use crate::transaction::signer::TransactionSigner;

pub(crate) mod auth;
pub(crate) mod base;
pub(crate) mod builder;
pub(crate) mod condition;
pub(crate) mod network;
pub(crate) mod payload;
pub(crate) mod signer;

#[derive(Debug, Clone, thiserror::Error)]
pub enum Error {
    #[error("Attempted to sign origin with too many signatures")]
    OriginOversign,
    #[error("Attempted to sign origin after sponsor key")]
    OriginPostSponsorSign,
    #[error("Attempted to append public key to origin after sponsor key")]
    OriginPostSponsorAppend,
    #[error("Attempted to sign sponsor with too many signatures")]
    SponsorOversign,
    #[error("Invalid signer hash, expected {0} - got: {1}")]
    BadSigner(String, String),
    #[error("Invalid signature count, expected {0} - got: {1}")]
    BadSignatureCount(u8, u8),
    #[error("Attempted to modify a spending condition with an incompatible action")]
    BadSpendingConditionModification,
    /// `crypto::hex` crate errors.
    #[error(transparent)]
    Hex(#[from] crypto::hex::Error),
    /// `crypto::hash` crate errors.
    #[error(transparent)]
    Hash(#[from] crypto::hash::Error),
    /// `clarity` crate errors.
    #[error(transparent)]
    Clarity(#[from] clarity::Error),
    /// `secp256k1` crate errors.
    #[error(transparent)]
    Secp256k1(#[from] secp256k1::Error),
    /// Conversion from a integer failed.
    #[error(transparent)]
    TryFromInt(#[from] std::num::TryFromIntError),
}