Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] Apply Shield Wallet Interaction Part 2 #355

Open
wants to merge 19 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 11 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion crates/common/numeric/src/decimal/decimal192.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ impl Decimal {
self.0
}

fn from_native(decimal: ScryptoDecimal192) -> Self {
pub const fn from_native(decimal: ScryptoDecimal192) -> Self {
Self(decimal)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,13 @@
Into::<AddressOfAccountOrPersona>::into(self.entity.address())
}

pub fn current_authentication_signing_factor_instance(

Check warning on line 65 in crates/profile/models/supporting-types/src/abstract_securified_entity.rs

View check run for this annotation

Codecov / codecov/patch

crates/profile/models/supporting-types/src/abstract_securified_entity.rs#L65

Added line #L65 was not covered by tests
&self,
) -> HierarchicalDeterministicFactorInstance {
self.securified_entity_control()

Check warning on line 68 in crates/profile/models/supporting-types/src/abstract_securified_entity.rs

View check run for this annotation

Codecov / codecov/patch

crates/profile/models/supporting-types/src/abstract_securified_entity.rs#L68

Added line #L68 was not covered by tests
.authentication_signing_factor_instance()
}

pub fn veci(&self) -> Option<VirtualEntityCreatingInstance> {
self.securified_entity_control()
.veci()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,9 @@
.map(|e| {
let provisional = e.entity.get_provisional().expect("Entity should have a provisional config set since we applied shield above");
let derived = provisional.as_factor_instances_derived().expect("Should have derived factors");
let input = TransactionManifestApplySecurityShieldUnsecurifiedInput::new(derived.clone());
TransactionManifest::apply_security_shield_for_unsecurified_entity(
e,
input,
derived.clone()

Check warning on line 35 in crates/system/os/factors/src/apply_security_shield/sargon_os_apply_security_shield_interaction.rs

View check run for this annotation

Codecov / codecov/patch

crates/system/os/factors/src/apply_security_shield/sargon_os_apply_security_shield_interaction.rs#L35

Added line #L35 was not covered by tests
)
}).collect::<Result<Vec<TransactionManifest>>>()?;

Expand All @@ -42,8 +41,12 @@
.iter()
.map(|e| {
let provisional = e.entity.get_provisional().expect("Entity should have a provisional config set since we applied shield above");
let _derived = provisional.as_factor_instances_derived().expect("Should have derived factors");
todo!("Implement TransactionManifest::apply_security_shield_for_securified_entity")
let derived = provisional.as_factor_instances_derived().expect("Should have derived factors");
TransactionManifest::apply_security_shield_for_securified_entity(
e,
derived.clone(),
TransactionManifestApplySecurityShieldKind::PrimaryAndRecoveryWithExplicitConfirmation

Check warning on line 48 in crates/system/os/factors/src/apply_security_shield/sargon_os_apply_security_shield_interaction.rs

View check run for this annotation

Codecov / codecov/patch

crates/system/os/factors/src/apply_security_shield/sargon_os_apply_security_shield_interaction.rs#L44-L48

Added lines #L44 - L48 were not covered by tests
)
}).collect::<Result<Vec<TransactionManifest>>>()?;

Ok(DappToWalletInteractionBatchOfTransactions::new(
Expand Down
1 change: 1 addition & 0 deletions crates/transaction/manifests/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ sbor = { workspace = true }
# === EXTERNAL DEPENDENCIES ===
derive_more = { workspace = true }
enum-as-inner = { workspace = true }
enum-iterator = { workspace = true }
itertools = { workspace = true }
paste = { workspace = true }
pretty_assertions = { workspace = true }
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
use crate::prelude::*;
use radix_engine_interface::blueprints::access_controller::{
AccessControllerInitiateRecoveryAsPrimaryInput as ScryptoAccessControllerInitiateRecoveryAsPrimaryInput,
AccessControllerInitiateRecoveryAsRecoveryInput as ScryptoAccessControllerInitiateRecoveryAsRecoveryInput,
AccessControllerQuickConfirmPrimaryRoleRecoveryProposalInput as ScryptoAccessControllerQuickConfirmPrimaryRoleRecoveryProposalInput,
AccessControllerQuickConfirmRecoveryRoleRecoveryProposalInput as ScryptoAccessControllerQuickConfirmRecoveryRoleRecoveryProposalInput,
AccessControllerTimedConfirmRecoveryInput as ScryptoAccessControllerTimedConfirmRecoveryInput,
};

/// An ephemeral DTO that is used to create the input for the access controller
/// methods that require factors and time - which we create from a
/// `SecurityStructureOfFactorInstances`
#[derive(Debug, Clone)]
pub struct AccessControllerFactorsAndTimeInput {
Copy link
Contributor

@Sajjon Sajjon Jan 24, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

shared type to create:

  • AccessControllerInitiateRecoveryAsPrimaryInput
  • AccessControllerInitiateRecoveryAsRecoveryInput
  • AccessControllerQuickConfirmPrimaryRoleRecoveryProposalInput
  • AccessControllerQuickConfirmRecoveryRoleRecoveryProposalInput
  • AccessControllerTimedConfirmRecoveryInput

Input to call_method instruction, using SecurityStructureOfFactorInstances - which is Into<RuleSet> (and time u32).

/// RuleSet is Scrypto representation of the security structure's
/// MatrixOfFactors
rule_set: ScryptoRuleSet,
/// The timed recovery delay in minutes we get from `SecurityStructureOfFactorInstances`.
timed_recovery_delay_in_minutes: u32,
}

impl AccessControllerFactorsAndTimeInput {
pub fn new(

Check warning on line 23 in crates/transaction/manifests/src/manifests_security_shield/access_controller_factors_and_time_input.rs

View check run for this annotation

Codecov / codecov/patch

crates/transaction/manifests/src/manifests_security_shield/access_controller_factors_and_time_input.rs#L23

Added line #L23 was not covered by tests
security_structure_of_factor_instances: &SecurityStructureOfFactorInstances,
) -> Self {
let rule_set = ScryptoRuleSet::from(
security_structure_of_factor_instances
.matrix_of_factors
.clone(),

Check warning on line 29 in crates/transaction/manifests/src/manifests_security_shield/access_controller_factors_and_time_input.rs

View check run for this annotation

Codecov / codecov/patch

crates/transaction/manifests/src/manifests_security_shield/access_controller_factors_and_time_input.rs#L27-L29

Added lines #L27 - L29 were not covered by tests
);

let timed_recovery_delay_in_minutes =
security_structure_of_factor_instances

Check warning on line 33 in crates/transaction/manifests/src/manifests_security_shield/access_controller_factors_and_time_input.rs

View check run for this annotation

Codecov / codecov/patch

crates/transaction/manifests/src/manifests_security_shield/access_controller_factors_and_time_input.rs#L32-L33

Added lines #L32 - L33 were not covered by tests
.timed_recovery_delay_in_minutes();

Self {
rule_set,
timed_recovery_delay_in_minutes,
}
}
}

impl From<&AccessControllerFactorsAndTimeInput>
for ScryptoAccessControllerInitiateRecoveryAsRecoveryInput
{
fn from(value: &AccessControllerFactorsAndTimeInput) -> Self {

Check warning on line 46 in crates/transaction/manifests/src/manifests_security_shield/access_controller_factors_and_time_input.rs

View check run for this annotation

Codecov / codecov/patch

crates/transaction/manifests/src/manifests_security_shield/access_controller_factors_and_time_input.rs#L46

Added line #L46 was not covered by tests
Self {
rule_set: value.rule_set.clone(),
timed_recovery_delay_in_minutes: Some(

Check warning on line 49 in crates/transaction/manifests/src/manifests_security_shield/access_controller_factors_and_time_input.rs

View check run for this annotation

Codecov / codecov/patch

crates/transaction/manifests/src/manifests_security_shield/access_controller_factors_and_time_input.rs#L48-L49

Added lines #L48 - L49 were not covered by tests
value.timed_recovery_delay_in_minutes,
),
}
}
}

impl From<&AccessControllerFactorsAndTimeInput>
for ScryptoAccessControllerInitiateRecoveryAsPrimaryInput
{
fn from(value: &AccessControllerFactorsAndTimeInput) -> Self {

Check warning on line 59 in crates/transaction/manifests/src/manifests_security_shield/access_controller_factors_and_time_input.rs

View check run for this annotation

Codecov / codecov/patch

crates/transaction/manifests/src/manifests_security_shield/access_controller_factors_and_time_input.rs#L59

Added line #L59 was not covered by tests
Self {
rule_set: value.rule_set.clone(),
timed_recovery_delay_in_minutes: Some(

Check warning on line 62 in crates/transaction/manifests/src/manifests_security_shield/access_controller_factors_and_time_input.rs

View check run for this annotation

Codecov / codecov/patch

crates/transaction/manifests/src/manifests_security_shield/access_controller_factors_and_time_input.rs#L61-L62

Added lines #L61 - L62 were not covered by tests
value.timed_recovery_delay_in_minutes,
),
}
}
}

impl From<&AccessControllerFactorsAndTimeInput>
for ScryptoAccessControllerQuickConfirmRecoveryRoleRecoveryProposalInput
{
fn from(value: &AccessControllerFactorsAndTimeInput) -> Self {

Check warning on line 72 in crates/transaction/manifests/src/manifests_security_shield/access_controller_factors_and_time_input.rs

View check run for this annotation

Codecov / codecov/patch

crates/transaction/manifests/src/manifests_security_shield/access_controller_factors_and_time_input.rs#L72

Added line #L72 was not covered by tests
Self {
rule_set: value.rule_set.clone(),
timed_recovery_delay_in_minutes: Some(

Check warning on line 75 in crates/transaction/manifests/src/manifests_security_shield/access_controller_factors_and_time_input.rs

View check run for this annotation

Codecov / codecov/patch

crates/transaction/manifests/src/manifests_security_shield/access_controller_factors_and_time_input.rs#L74-L75

Added lines #L74 - L75 were not covered by tests
value.timed_recovery_delay_in_minutes,
),
}
}
}

impl From<&AccessControllerFactorsAndTimeInput>
for ScryptoAccessControllerQuickConfirmPrimaryRoleRecoveryProposalInput
{
fn from(value: &AccessControllerFactorsAndTimeInput) -> Self {

Check warning on line 85 in crates/transaction/manifests/src/manifests_security_shield/access_controller_factors_and_time_input.rs

View check run for this annotation

Codecov / codecov/patch

crates/transaction/manifests/src/manifests_security_shield/access_controller_factors_and_time_input.rs#L85

Added line #L85 was not covered by tests
Self {
rule_set: value.rule_set.clone(),
timed_recovery_delay_in_minutes: Some(

Check warning on line 88 in crates/transaction/manifests/src/manifests_security_shield/access_controller_factors_and_time_input.rs

View check run for this annotation

Codecov / codecov/patch

crates/transaction/manifests/src/manifests_security_shield/access_controller_factors_and_time_input.rs#L87-L88

Added lines #L87 - L88 were not covered by tests
value.timed_recovery_delay_in_minutes,
),
}
}
}

impl From<&AccessControllerFactorsAndTimeInput>
for ScryptoAccessControllerTimedConfirmRecoveryInput
{
fn from(value: &AccessControllerFactorsAndTimeInput) -> Self {

Check warning on line 98 in crates/transaction/manifests/src/manifests_security_shield/access_controller_factors_and_time_input.rs

View check run for this annotation

Codecov / codecov/patch

crates/transaction/manifests/src/manifests_security_shield/access_controller_factors_and_time_input.rs#L98

Added line #L98 was not covered by tests
Self {
rule_set: value.rule_set.clone(),
timed_recovery_delay_in_minutes: Some(

Check warning on line 101 in crates/transaction/manifests/src/manifests_security_shield/access_controller_factors_and_time_input.rs

View check run for this annotation

Codecov / codecov/patch

crates/transaction/manifests/src/manifests_security_shield/access_controller_factors_and_time_input.rs#L100-L101

Added lines #L100 - L101 were not covered by tests
value.timed_recovery_delay_in_minutes,
),
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
use crate::prelude::*;

// use radix_engine_interface::blueprints::access_controller::{
// AccessControllerTimedConfirmRecoveryInput as ScryptoAccessControllerTimedConfirmRecoveryInput,
// ACCESS_CONTROLLER_TIMED_CONFIRM_RECOVERY_IDENT as SCRYPTO_ACCESS_CONTROLLER_TIMED_CONFIRM_RECOVERY_IDENT,
// };

pub trait TransactionManifestConfirmTimedRecovery {
/// TBD
/// TODO: Figure out how to do this...
/// since `AccessControllerTimedConfirmRecoveryInput` need the input of
/// the factors and time which was used to start recovery - which could not
/// be quick confirmed. We need to figure out how we best represent this
/// in Profile. Perhaps a new variant on ProvisionalSecurityConfig? Something
/// like:
/// `WaitingForTimedRecovery(SecurityStructureOfFactorInstances)`
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@GhenadieVP good thing we kept ProvisionalSecurifiedConfig an enum! I think we need a second variant - WaitingForTimedRecovery(SecurityStructureOfFactorInstances)

fn confirm_timed_recovery() -> Result<TransactionManifest>;
// {
// builder.call_method(
// access_controller,
// SCRYPTO_ACCESS_CONTROLLER_TIMED_CONFIRM_RECOVERY_IDENT,
// ScryptoAccessControllerTimedConfirmRecoveryInput::from(
// factors_and_time,
// ),
// );
// }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
use profile_supporting_types::AnySecurifiedEntity;
use radix_engine_interface::blueprints::access_controller::{
AccessControllerLockRecoveryFeeInput as ScryptoAccessControllerLockRecoveryFeeInput,
ACCESS_CONTROLLER_LOCK_RECOVERY_FEE_IDENT as SCRYPTO_ACCESS_CONTROLLER_LOCK_RECOVERY_FEE_IDENT,
};
use radix_transactions::prelude::ManifestBuilder;

use crate::prelude::*;

pub trait TransactionManifestLockFeeAgainstXrdVaultOfAccessController {
/// Locks transaction fee against the XRD vault of the access controller of
/// `entity_applying_shield` - either AC of an Account or of a Persona.
///
/// We need to call this later when we have made a preview/dry-run of the
/// `manifest` to get the actual fee to lock.
///
/// `manifest` was produced by `apply_security_shield_for_securified_entity`.
///
/// In fact we will be locking fee for 6 flavours of transaction manifest
/// which updates the security shield of an entity, as returned by
/// `TransactionManifestApplySecurityShieldKind::all()`, and we could try to
/// be smart and run preview of each six to get a minimial fee per manifest,
/// but we will avoid that complexity.
///
/// Only relevant for securified entities - since it is only securified entities
/// which have an access controller to lock against.
fn modify_manifest_add_lock_fee_against_xrd_vault_of_access_controller(

Check warning on line 27 in crates/transaction/manifests/src/manifests_security_shield/lock_fee_against_xrd_vault_of_access_controller.rs

View check run for this annotation

Codecov / codecov/patch

crates/transaction/manifests/src/manifests_security_shield/lock_fee_against_xrd_vault_of_access_controller.rs#L27

Added line #L27 was not covered by tests
manifest: TransactionManifest,
fee: Decimal192,
// TODO: remove `entity_applying_shield`, this should be read out from the manifest in a throwing function, `manifest.get_address_of_entity_applying_shield()` or similar which Omar need to provide us with, oh well we need the account here, so elsewhere, in SargonOS where we have access to Profile we would call `manifest.get_address_of_entity_applying_shield` and then lookup the entity.
entity_applying_shield: AnySecurifiedEntity,
) -> TransactionManifest {
let mut builder = ManifestBuilder::with_manifest(manifest);
let access_controller_address = entity_applying_shield
.securified_entity_control
.access_controller_address;

Check warning on line 36 in crates/transaction/manifests/src/manifests_security_shield/lock_fee_against_xrd_vault_of_access_controller.rs

View check run for this annotation

Codecov / codecov/patch

crates/transaction/manifests/src/manifests_security_shield/lock_fee_against_xrd_vault_of_access_controller.rs#L33-L36

Added lines #L33 - L36 were not covered by tests
// Lock fee against XRD vault of the access controller
builder = builder.call_method(
Copy link
Contributor

@Sajjon Sajjon Jan 24, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@0xOmarA here I'm appending this instruction last. Is that OK? Or must this be prepended, index 0 of the manifest? if so I need to do a lot of trickery to do that. Since I cannot create the instruction in rust code "manually" and since calling buider.call_method will put it last...

@GhenadieVP alternatively we just lock a "large" amount. Which ""should work"" for most shields... and if we do that we can lock fee in apply_security_shield_for_securified_entity at index 0 https://github.com/radixdlt/sargon/blob/ac/wallet_interaction_applying_shield_abw-4056_part2/crates/transaction/manifests/src/manifests_security_shield/manifests_securify_shield_securified_entity.rs#L37

access_controller_address.scrypto(),
SCRYPTO_ACCESS_CONTROLLER_LOCK_RECOVERY_FEE_IDENT,
ScryptoAccessControllerLockRecoveryFeeInput {
amount: ScryptoDecimal192::from(fee),

Check warning on line 42 in crates/transaction/manifests/src/manifests_security_shield/lock_fee_against_xrd_vault_of_access_controller.rs

View check run for this annotation

Codecov / codecov/patch

crates/transaction/manifests/src/manifests_security_shield/lock_fee_against_xrd_vault_of_access_controller.rs#L38-L42

Added lines #L38 - L42 were not covered by tests
},
);

TransactionManifest::sargon_built(
builder,
entity_applying_shield.entity.network_id(),

Check warning on line 48 in crates/transaction/manifests/src/manifests_security_shield/lock_fee_against_xrd_vault_of_access_controller.rs

View check run for this annotation

Codecov / codecov/patch

crates/transaction/manifests/src/manifests_security_shield/lock_fee_against_xrd_vault_of_access_controller.rs#L47-L48

Added lines #L47 - L48 were not covered by tests
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
#![allow(dead_code)]
use crate::prelude::*;
use std::ops::Deref;

use profile_supporting_types::AnySecurifiedEntity;

pub trait TransactionManifestSecurifySecurifiedEntity:
TransactionManifestSetRolaKey
{
fn apply_security_shield_for_securified_entity(
securified_entity: AnySecurifiedEntity,
security_structure_of_factor_instances:
SecurityStructureOfFactorInstances,
apply_shield_manifest_kind: TransactionManifestApplySecurityShieldKind,
) -> Result<TransactionManifest>;
}

impl TransactionManifestSecurifySecurifiedEntity for TransactionManifest {
/// Updates the security shield of a securified entity to `security_structure_of_factor_instances`.
///
/// Also conditionally updates the Rola key of the entity - if it is new.
///
/// Later once we have got a preview from Gateway - we will need to call:
/// * `modify_manifest_add_lock_fee_against_xrd_vault_of_access_controller`
///
/// And when we know the fee we can calculate how much to top up the XRD vault of the AccessController
/// and call
/// * `modify_manifest_add_withdraw_of_xrd_for_access_controller_xrd_vault_top_up_paid_by_account`
///
/// For timed confirmation - much later (`timed_recovery_delay_in_minutes` later ) the
/// host app will need to call `confirm_timed_recovery`
fn apply_security_shield_for_securified_entity(

Check warning on line 32 in crates/transaction/manifests/src/manifests_security_shield/manifests_securify_shield_securified_entity.rs

View check run for this annotation

Codecov / codecov/patch

crates/transaction/manifests/src/manifests_security_shield/manifests_securify_shield_securified_entity.rs#L32

Added line #L32 was not covered by tests
securified_entity: AnySecurifiedEntity,
security_structure_of_factor_instances:
SecurityStructureOfFactorInstances,
apply_shield_manifest_kind: TransactionManifestApplySecurityShieldKind,
) -> Result<Self> {
let kind = apply_shield_manifest_kind;
let entity_address = securified_entity.entity.address();

Check warning on line 39 in crates/transaction/manifests/src/manifests_security_shield/manifests_securify_shield_securified_entity.rs

View check run for this annotation

Codecov / codecov/patch

crates/transaction/manifests/src/manifests_security_shield/manifests_securify_shield_securified_entity.rs#L38-L39

Added lines #L38 - L39 were not covered by tests

// ACCESS_CONTROLLER_CREATE_PROOF_IDENT
let mut builder = TransactionManifest::produce_owner_badge(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This does:

builder.call_method(
    access_controller_address.scrypto(),
    ACCESS_CONTROLLER_CREATE_PROOF_IDENT,
    (),
);

ScryptoTransactionManifestBuilder::new(),
&securified_entity.entity,

Check warning on line 44 in crates/transaction/manifests/src/manifests_security_shield/manifests_securify_shield_securified_entity.rs

View check run for this annotation

Codecov / codecov/patch

crates/transaction/manifests/src/manifests_security_shield/manifests_securify_shield_securified_entity.rs#L43-L44

Added lines #L43 - L44 were not covered by tests
);

let access_controller_address = securified_entity
.securified_entity_control
.access_controller_address;

Check warning on line 49 in crates/transaction/manifests/src/manifests_security_shield/manifests_securify_shield_securified_entity.rs

View check run for this annotation

Codecov / codecov/patch

crates/transaction/manifests/src/manifests_security_shield/manifests_securify_shield_securified_entity.rs#L47-L49

Added lines #L47 - L49 were not covered by tests

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have forgotten to add the withdrawal of XRD from AccessControllera XRD vault.

I’m adding it now

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Right we need to add the locking of fee against XRD vault of AccessController later (like the top up) - since we dont know how big a fee to lock. Ive added modify_manifest_add_lock_fee_against_xrd_vault_of_access_controller. Take a look at it 4d8fc6d

let factors_and_time_input = &AccessControllerFactorsAndTimeInput::new(
&security_structure_of_factor_instances,

Check warning on line 52 in crates/transaction/manifests/src/manifests_security_shield/manifests_securify_shield_securified_entity.rs

View check run for this annotation

Codecov / codecov/patch

crates/transaction/manifests/src/manifests_security_shield/manifests_securify_shield_securified_entity.rs#L51-L52

Added lines #L51 - L52 were not covered by tests
);

// INITIATE RECOVERY
let (init_method, init_input) =
kind.input_for_initialization(factors_and_time_input);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Depending on selector of which of the six TransactionManifest flavours as selected by kind: TransactionManifestApplySecurityShieldKind we use different roles for initialization of recovery (and the correct concrete scrypto "Input"-type (Box dyn-ed))

For details see transaction_manifest_apply_security_shield_kind.rs which was added by this PR

builder = builder.call_method(
access_controller_address.scrypto(),
init_method,
(init_input.deref(),),

Check warning on line 61 in crates/transaction/manifests/src/manifests_security_shield/manifests_securify_shield_securified_entity.rs

View check run for this annotation

Codecov / codecov/patch

crates/transaction/manifests/src/manifests_security_shield/manifests_securify_shield_securified_entity.rs#L56-L61

Added lines #L56 - L61 were not covered by tests
);

// QUICK CONFIRM RECOVERY - Only if we can exercise the confirmation role explicitly.
if let Some((confirm_method, confirm_input)) =
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Only call "quick confirm" if we can exercise confirmation role explicitly. Else we skip quick confirm and we will LATER (number_of_days_until_timed_confirmation_is_callable later) make another transaction.

kind.input_for_quick_confirm(factors_and_time_input)

Check warning on line 66 in crates/transaction/manifests/src/manifests_security_shield/manifests_securify_shield_securified_entity.rs

View check run for this annotation

Codecov / codecov/patch

crates/transaction/manifests/src/manifests_security_shield/manifests_securify_shield_securified_entity.rs#L65-L66

Added lines #L65 - L66 were not covered by tests
{
builder = builder.call_method(
access_controller_address.scrypto(),
confirm_method,
(confirm_input.deref(),),
);
}

// Set Rola Key
let should_set_rola_key = security_structure_of_factor_instances
.authentication_signing_factor_instance
!= securified_entity
Copy link
Contributor

@Sajjon Sajjon Jan 24, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

dont set ROLA key if it is unchanged

.current_authentication_signing_factor_instance();

Check warning on line 79 in crates/transaction/manifests/src/manifests_security_shield/manifests_securify_shield_securified_entity.rs

View check run for this annotation

Codecov / codecov/patch

crates/transaction/manifests/src/manifests_security_shield/manifests_securify_shield_securified_entity.rs#L76-L79

Added lines #L76 - L79 were not covered by tests

if should_set_rola_key {
if kind.can_set_rola_key() {
builder = TransactionManifest::set_rola_key(
builder,
&security_structure_of_factor_instances
.authentication_signing_factor_instance,
&entity_address,

Check warning on line 87 in crates/transaction/manifests/src/manifests_security_shield/manifests_securify_shield_securified_entity.rs

View check run for this annotation

Codecov / codecov/patch

crates/transaction/manifests/src/manifests_security_shield/manifests_securify_shield_securified_entity.rs#L81-L87

Added lines #L81 - L87 were not covered by tests
);
} else {
return Err(CommonError::Unknown); // TODO: new error variant

Check warning on line 90 in crates/transaction/manifests/src/manifests_security_shield/manifests_securify_shield_securified_entity.rs

View check run for this annotation

Codecov / codecov/patch

crates/transaction/manifests/src/manifests_security_shield/manifests_securify_shield_securified_entity.rs#L90

Added line #L90 was not covered by tests
}
}

let manifest = TransactionManifest::sargon_built(
builder,
securified_entity.network_id(),

Check warning on line 96 in crates/transaction/manifests/src/manifests_security_shield/manifests_securify_shield_securified_entity.rs

View check run for this annotation

Codecov / codecov/patch

crates/transaction/manifests/src/manifests_security_shield/manifests_securify_shield_securified_entity.rs#L95-L96

Added lines #L95 - L96 were not covered by tests
);

// N.B.
// We will not lock fee against the XRD vault yet - we will do that
// later when we have made a preview/dry-run of the `manifest` to get
// the estimated fee to lock, by calling `modify_manifest_add_lock_fee_against_xrd_vault_of_access_controller`
//
// Furthermore:
// We do NOT top of XRD vault of AccessController - yet!
// Host will need to call the function:
// `modify_manifest_add_withdraw_of_xrd_for_access_controller_xrd_vault_top_up_paid_by_account`
// after user has selected account to pay in wallet GUI.
// (and as usual also call `modify_manifest_lock_fee`)

Ok(manifest)

Check warning on line 111 in crates/transaction/manifests/src/manifests_security_shield/manifests_securify_shield_securified_entity.rs

View check run for this annotation

Codecov / codecov/patch

crates/transaction/manifests/src/manifests_security_shield/manifests_securify_shield_securified_entity.rs#L111

Added line #L111 was not covered by tests
}
}
Loading
Loading