radix_transactions/model/v1/
validated_notarized_transaction.rs

1use crate::internal_prelude::*;
2use radix_common::constants::AuthAddresses;
3
4#[derive(Debug, Clone, Eq, PartialEq)]
5pub struct ValidatedNotarizedTransactionV1 {
6    pub prepared: PreparedNotarizedTransactionV1,
7    pub encoded_instructions: Vec<u8>,
8    pub signer_keys: IndexSet<PublicKey>,
9    pub num_of_signature_validations: usize,
10}
11
12impl HasTransactionIntentHash for ValidatedNotarizedTransactionV1 {
13    fn transaction_intent_hash(&self) -> TransactionIntentHash {
14        self.prepared.transaction_intent_hash()
15    }
16}
17
18impl HasSignedTransactionIntentHash for ValidatedNotarizedTransactionV1 {
19    fn signed_transaction_intent_hash(&self) -> SignedTransactionIntentHash {
20        self.prepared.signed_transaction_intent_hash()
21    }
22}
23
24impl HasNotarizedTransactionHash for ValidatedNotarizedTransactionV1 {
25    fn notarized_transaction_hash(&self) -> NotarizedTransactionHash {
26        self.prepared.notarized_transaction_hash()
27    }
28}
29
30#[allow(deprecated)]
31impl ValidatedNotarizedTransactionV1 {
32    pub fn hashes(&self) -> UserTransactionHashes {
33        self.prepared.hashes()
34    }
35
36    pub fn create_executable(self) -> ExecutableTransaction {
37        let intent = self.prepared.signed_intent.intent;
38        let intent_hash = intent.transaction_intent_hash();
39        let header = intent.header.inner;
40        let summary = self.prepared.summary;
41
42        ExecutableTransaction::new_v1(
43            self.encoded_instructions,
44            AuthZoneInit::proofs(AuthAddresses::signer_set(&self.signer_keys)),
45            intent.instructions.references.clone(),
46            intent.blobs.blobs_by_hash,
47            ExecutionContext {
48                unique_hash: intent_hash.0,
49                intent_hash_nullifications: vec![IntentHashNullification::TransactionIntent {
50                    intent_hash,
51                    expiry_epoch: header.end_epoch_exclusive,
52                }],
53                epoch_range: Some(EpochRange {
54                    start_epoch_inclusive: header.start_epoch_inclusive,
55                    end_epoch_exclusive: header.end_epoch_exclusive,
56                }),
57                payload_size: summary.effective_length,
58                num_of_signature_validations: self.num_of_signature_validations,
59                costing_parameters: TransactionCostingParameters {
60                    tip: TipSpecifier::Percentage(header.tip_percentage),
61                    free_credit_in_xrd: Decimal::ZERO,
62                },
63                pre_allocated_addresses: vec![],
64                disable_limits_and_costing_modules: false,
65                proposer_timestamp_range: None,
66            },
67        )
68    }
69}