Skip to content

Commit 710d5c3

Browse files
committed
Convert toolkit to use the toolkit receipt
1 parent 6728fdb commit 710d5c3

File tree

9 files changed

+281
-317
lines changed

9 files changed

+281
-317
lines changed

Cargo.lock

Lines changed: 20 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/radix-engine-toolkit-uniffi/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ radix-engine = { workspace = true }
1313
radix-engine-interface = { workspace = true }
1414
radix-substate-store-queries = { workspace = true }
1515
radix-transactions = { workspace = true }
16+
native-radix-engine-toolkit = { workspace = true }
1617

1718
# Core Radix Engine Toolkit
1819
radix-engine-toolkit = { path = "../radix-engine-toolkit" }
@@ -22,6 +23,7 @@ uniffi = { git = "https://github.com/0xOmarA/uniffi-rs", tag = "v0.25.4", featur
2223
hex = "0.4.3"
2324
thiserror = "1.0.50"
2425
paste = "1.0.12"
26+
serde_json = "1.0.127"
2527

2628
[build-dependencies]
2729
# The UniFFI crate for generating bindings to other languages

crates/radix-engine-toolkit-uniffi/src/transaction/manifest.rs

Lines changed: 40 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
// specific language governing permissions and limitations
1616
// under the License.
1717

18+
use native_radix_engine_toolkit::receipt::{
19+
RuntimeToolkitTransactionReceipt, SerializableToolkitTransactionReceipt,
20+
};
1821
use sbor::Versioned;
1922

2023
use crate::prelude::*;
@@ -98,16 +101,23 @@ impl TransactionManifest {
98101
pub fn execution_summary(
99102
&self,
100103
network_id: u8,
101-
encoded_receipt: Vec<u8>,
104+
toolkit_receipt: String,
102105
) -> Result<ExecutionSummary> {
103106
let native = self.clone().to_native();
104-
let versioned_transaction_receipt = native_scrypto_decode::<
105-
NativeVersionedTransactionReceipt,
106-
>(&encoded_receipt)?;
107-
let receipt = versioned_transaction_receipt
108-
.as_latest_version()
109-
.ok_or(RadixEngineToolkitError::InvalidReceipt)?;
110-
107+
let network_definition =
108+
core_network_definition_from_network_id(network_id);
109+
let receipt = serde_json::from_str::<
110+
SerializableToolkitTransactionReceipt,
111+
>(&toolkit_receipt)
112+
.ok()
113+
.and_then(|receipt| {
114+
receipt
115+
.into_runtime_receipt(&NativeAddressBech32Decoder::new(
116+
&network_definition,
117+
))
118+
.ok()
119+
})
120+
.ok_or(RadixEngineToolkitError::InvalidReceipt)?;
111121
core_manifest_execution_summary(&native, &receipt)
112122
.map_err(|_| RadixEngineToolkitError::InvalidReceipt)
113123
.map(|summary| ExecutionSummary::from_native(summary, network_id))?
@@ -233,9 +243,10 @@ impl ResourceSpecifier {
233243
resource_address: &NativeResourceAddress,
234244
network_id: u8,
235245
) -> ResourceSpecifier {
236-
let address = Arc::new(
237-
Address::from_typed_node_id(*resource_address, network_id)
238-
);
246+
let address = Arc::new(Address::from_typed_node_id(
247+
*resource_address,
248+
network_id,
249+
));
239250
match native {
240251
NativeLockerResourceSpecifier::Fungible(amount) => {
241252
ResourceSpecifier::Amount {
@@ -820,14 +831,13 @@ impl ExecutionSummary {
820831
.collect(),
821832
fee_locks: FeeLocks::from_native(&native.fee_locks),
822833
fee_summary: FeeSummary::from_native(&native.fee_summary),
823-
detailed_classification:
824-
native
825-
.detailed_classification
826-
.into_iter()
827-
.map(|item| {
828-
DetailedManifestClass::from_native(item, network_id)
829-
})
830-
.collect(),
834+
detailed_classification: native
835+
.detailed_classification
836+
.into_iter()
837+
.map(|item| {
838+
DetailedManifestClass::from_native(item, network_id)
839+
})
840+
.collect(),
831841
newly_created_non_fungibles: native
832842
.newly_created_non_fungibles
833843
.into_iter()
@@ -1333,20 +1343,17 @@ impl From<CoreNonFungibleResourceIndicator> for NonFungibleResourceIndicator {
13331343
CoreNonFungibleResourceIndicator::ByAmount {
13341344
amount,
13351345
predicted_ids,
1336-
} => {
1337-
NonFungibleResourceIndicator::ByAmount {
1338-
amount: Arc::new(Decimal(amount)),
1339-
predicted_ids: PredictedNonFungibleIds {
1340-
value: predicted_ids
1341-
.value
1342-
.into_iter()
1343-
.map(Into::into)
1344-
.collect(),
1345-
instruction_index: predicted_ids.instruction_index
1346-
as u64,
1347-
},
1348-
}
1349-
}
1346+
} => NonFungibleResourceIndicator::ByAmount {
1347+
amount: Arc::new(Decimal(amount)),
1348+
predicted_ids: PredictedNonFungibleIds {
1349+
value: predicted_ids
1350+
.value
1351+
.into_iter()
1352+
.map(Into::into)
1353+
.collect(),
1354+
instruction_index: predicted_ids.instruction_index as u64,
1355+
},
1356+
},
13501357
CoreNonFungibleResourceIndicator::ByIds(ids) => {
13511358
NonFungibleResourceIndicator::ByIds {
13521359
ids: ids.into_iter().map(Into::into).collect(),

crates/radix-engine-toolkit/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ radix-substate-store-impls = { workspace = true }
1515
radix-substate-store-queries = { workspace = true }
1616
radix-substate-store-interface = { workspace = true }
1717
radix-transactions = { workspace = true }
18+
native-radix-engine-toolkit = { workspace = true }
1819

1920
# Bech32 encoding and decoding of addresses. Used for the Olympia <-> Babylon address derivations.
2021
bech32 = { version = "0.9.1" }

crates/radix-engine-toolkit/src/functions/manifest.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
// specific language governing permissions and limitations
1616
// under the License.
1717

18+
use native_radix_engine_toolkit::receipt::RuntimeToolkitTransactionReceipt;
1819
use radix_common::prelude::*;
1920
use radix_engine_interface::blueprints::access_controller::*;
2021
use radix_engine_interface::blueprints::account::*;
@@ -227,7 +228,7 @@ pub fn summary(manifest: &TransactionManifestV1) -> ManifestSummary {
227228

228229
pub fn execution_summary(
229230
manifest: &TransactionManifestV1,
230-
receipt: &TransactionReceipt,
231+
receipt: &RuntimeToolkitTransactionReceipt,
231232
) -> Result<ExecutionSummary, TransactionTypesError> {
232233
crate::transaction_types::execution_summary(manifest, receipt)
233234
}

crates/radix-engine-toolkit/src/transaction_types/interface.rs

Lines changed: 46 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
//! any of the implementation details of how the module finds and determines
2020
//! the transaction types.
2121
22+
use native_radix_engine_toolkit::receipt::RuntimeToolkitTransactionReceipt;
2223
use radix_common::prelude::*;
23-
use radix_engine::transaction::*;
2424
use radix_substate_store_queries::typed_substate_layout::*;
2525
use radix_transactions::prelude::*;
2626

@@ -84,47 +84,44 @@ pub fn summary(manifest: &TransactionManifestV1) -> ManifestSummary {
8484
let reserved_instructions = reserved_instructions_detector.output();
8585
let (account_withdraws, account_deposits) =
8686
account_resource_movements_detector.output();
87-
let classification =
88-
[
89-
(
90-
ManifestClass::General,
91-
general_transaction_detector.is_valid(),
92-
),
93-
(
94-
ManifestClass::Transfer,
95-
transfer_transaction_detector.is_valid(),
96-
),
97-
(
98-
ManifestClass::PoolContribution,
99-
pool_contribution_detector.is_valid(),
100-
),
101-
(
102-
ManifestClass::PoolRedemption,
103-
pool_redemption_detector.is_valid(),
104-
),
105-
(
106-
ManifestClass::ValidatorStake,
107-
validator_stake_detector.is_valid(),
108-
),
109-
(
110-
ManifestClass::ValidatorUnstake,
111-
validator_unstake_detector.is_valid(),
112-
),
113-
(
114-
ManifestClass::ValidatorClaim,
115-
validator_claim_detector.is_valid(),
116-
),
117-
(
118-
ManifestClass::AccountDepositSettingsUpdate,
119-
accounts_settings_detector.is_valid(),
120-
),
121-
]
122-
.into_iter()
123-
.filter_map(
124-
|(class, is_valid)| if is_valid { Some(class) } else { None },
125-
)
126-
.rev()
127-
.collect::<IndexSet<ManifestClass>>();
87+
let classification = [
88+
(
89+
ManifestClass::General,
90+
general_transaction_detector.is_valid(),
91+
),
92+
(
93+
ManifestClass::Transfer,
94+
transfer_transaction_detector.is_valid(),
95+
),
96+
(
97+
ManifestClass::PoolContribution,
98+
pool_contribution_detector.is_valid(),
99+
),
100+
(
101+
ManifestClass::PoolRedemption,
102+
pool_redemption_detector.is_valid(),
103+
),
104+
(
105+
ManifestClass::ValidatorStake,
106+
validator_stake_detector.is_valid(),
107+
),
108+
(
109+
ManifestClass::ValidatorUnstake,
110+
validator_unstake_detector.is_valid(),
111+
),
112+
(
113+
ManifestClass::ValidatorClaim,
114+
validator_claim_detector.is_valid(),
115+
),
116+
(
117+
ManifestClass::AccountDepositSettingsUpdate,
118+
accounts_settings_detector.is_valid(),
119+
),
120+
]
121+
.into_iter()
122+
.filter_map(|(class, is_valid)| if is_valid { Some(class) } else { None })
123+
.rev()
124+
.collect::<IndexSet<ManifestClass>>();
128125

129126
ManifestSummary {
130127
presented_proofs,
@@ -140,10 +137,10 @@ pub fn summary(manifest: &TransactionManifestV1) -> ManifestSummary {
140137

141138
pub fn execution_summary(
142139
manifest: &TransactionManifestV1,
143-
receipt: &TransactionReceipt,
140+
receipt: &RuntimeToolkitTransactionReceipt,
144141
) -> Result<ExecutionSummary, TransactionTypesError> {
145142
// Attempt to create a tx types receipt from the passed receipt
146-
let receipt = TransactionTypesReceipt::new(receipt)
143+
let receipt = TransactionTypesReceipt::new(&receipt)
147144
.ok_or(TransactionTypesError::InvalidReceipt)?;
148145

149146
// Settings up the various detectors
@@ -207,9 +204,9 @@ pub fn execution_summary(
207204
general_transaction_detector
208205
.output()
209206
.map(|_| DetailedManifestClass::General),
210-
transfer_transaction_detector.output().map(
211-
|is_one_to_one| DetailedManifestClass::Transfer { is_one_to_one }
212-
),
207+
transfer_transaction_detector.output().map(|is_one_to_one| {
208+
DetailedManifestClass::Transfer { is_one_to_one }
209+
}),
213210
pool_contribution_detector.output().map(
214211
|(pool_addresses, pool_contributions)| {
215212
DetailedManifestClass::PoolContribution {
@@ -317,16 +314,8 @@ pub fn execution_summary(
317314
.rev()
318315
.collect::<Vec<DetailedManifestClass>>();
319316

320-
let fee_locks = FeeLocks {
321-
lock: receipt.execution_trace().fee_locks.lock,
322-
contingent_lock: receipt.execution_trace().fee_locks.contingent_lock,
323-
};
324-
let fee_summary = FeeSummary {
325-
execution_cost: receipt.fee_summary.total_execution_cost_in_xrd,
326-
finalization_cost: receipt.fee_summary.total_finalization_cost_in_xrd,
327-
storage_expansion_cost: receipt.fee_summary.total_storage_cost_in_xrd,
328-
royalty_cost: receipt.fee_summary.total_royalty_cost_in_xrd,
329-
};
317+
let fee_locks = receipt.fee_locks();
318+
let fee_summary = receipt.fee_summary();
330319

331320
Ok(ExecutionSummary {
332321
account_withdraws,

0 commit comments

Comments
 (0)