diff --git a/integration_tests/src/fixtures.rs b/integration_tests/src/fixtures.rs index b3bf6ba2..41818d99 100644 --- a/integration_tests/src/fixtures.rs +++ b/integration_tests/src/fixtures.rs @@ -46,13 +46,6 @@ pub fn default_get_deposit_address_args() -> GetDepositAddressArgs { } } -pub fn default_update_balance_args() -> cksol_types::UpdateBalanceArgs { - cksol_types::UpdateBalanceArgs { - owner: None, - subaccount: None, - } -} - pub fn default_process_deposit_args() -> ProcessDepositArgs { ProcessDepositArgs { owner: None, diff --git a/integration_tests/tests/tests.rs b/integration_tests/tests/tests.rs index 93c1f850..d1c51977 100644 --- a/integration_tests/tests/tests.rs +++ b/integration_tests/tests/tests.rs @@ -7,7 +7,7 @@ use cksol_int_tests::{ DEFAULT_CALLER_ACCOUNT, DEFAULT_CALLER_DEPOSIT_ADDRESS, DEPOSIT_AMOUNT, EXPECTED_MINT_AMOUNT, MockBuilder, SharedMockHttpOutcalls, default_get_deposit_address_args, default_process_deposit_args, - default_update_balance_args, deposit_transaction_signature, + deposit_transaction_signature, }, }; use cksol_types::{ @@ -1022,47 +1022,29 @@ mod update_balance_tests { let setup = SetupBuilder::new().build().await; let minter = setup.minter(); - // Register the same accounts as used in get_deposit_address_tests - let accounts = vec![ - Account { - owner: Setup::DEFAULT_CALLER, - subaccount: None, - }, - Account { - owner: Principal::from_slice(&[1]), - subaccount: None, - }, - Account { - owner: Setup::DEFAULT_CALLER, - subaccount: Some([1; 32]), - }, - Account { - owner: Setup::DEFAULT_CALLER, - subaccount: Some([2; 32]), - }, - ]; + let subaccounts: Vec> = vec![None, Some([1; 32]), Some([2; 32])]; - for account in &accounts { + for subaccount in &subaccounts { let result = minter .update_balance(UpdateBalanceArgs { - owner: Some(account.owner), - subaccount: account.subaccount, + subaccount: *subaccount, }) .await; assert_eq!(result, Ok(())); } // Calling again for an already-monitored account is idempotent — no new event - let result = minter - .update_balance(UpdateBalanceArgs { - owner: None, - subaccount: None, - }) - .await; + let result = minter.update_balance(UpdateBalanceArgs::default()).await; assert_eq!(result, Ok(())); - // Exactly one StartedMonitoringAccount event per account, no duplicates - let expected_accounts = accounts.clone(); + // Exactly one StartedMonitoringAccount event per subaccount, no duplicates + let expected_accounts: Vec = subaccounts + .iter() + .map(|subaccount| Account { + owner: Setup::DEFAULT_CALLER, + subaccount: *subaccount, + }) + .collect(); minter.assert_that_events().await.satisfy(|events| { let monitoring_events: Vec<&Account> = events .iter() @@ -1105,15 +1087,6 @@ mod anonymous_caller_tests { .await; assert_matches!(result, Err(s) => s.contains("the owner must be non-anonymous")); - // `update_balance` endpoint - let result = minter - .try_update_balance(UpdateBalanceArgs { - owner, - subaccount: None, - }) - .await; - assert_matches!(result, Err(s) => s.contains("the owner must be non-anonymous")); - // `process_deposit` endpoint let result = minter .try_process_deposit(ProcessDepositArgs { @@ -1125,6 +1098,13 @@ mod anonymous_caller_tests { assert_matches!(result, Err(s) => s.contains("the owner must be non-anonymous")); } + // `update_balance` endpoint (no `owner` field, only anonymous caller applies) + let minter = setup.minter_with_caller(Principal::anonymous()); + let result = minter + .try_update_balance(UpdateBalanceArgs::default()) + .await; + assert_matches!(result, Err(s) => s.contains("the owner must be non-anonymous")); + // `withdraw` endpoint (no `owner` field, only anonymous caller applies) let minter = setup.minter_with_caller(Principal::anonymous()); let result = minter @@ -1308,7 +1288,7 @@ mod automated_deposit_flow_tests { DEFAULT_CALLER_DEPOSIT_ADDRESS ); minter - .update_balance(default_update_balance_args()) + .update_balance(UpdateBalanceArgs::default()) .await .expect("update_balance should succeed"); diff --git a/libs/types/src/lib.rs b/libs/types/src/lib.rs index fe654424..507f495c 100644 --- a/libs/types/src/lib.rs +++ b/libs/types/src/lib.rs @@ -131,14 +131,11 @@ pub enum ProcessDepositError { } /// Arguments for a request to the `update_balance` ckSOL minter endpoint. -#[derive(Clone, Eq, PartialEq, Debug, CandidType, Deserialize, Serialize)] +#[derive(Clone, Eq, PartialEq, Debug, Default, CandidType, Deserialize, Serialize)] pub struct UpdateBalanceArgs { - /// The principal to register for automated deposit monitoring. - /// - /// If not set, defaults to the caller's principal. - /// The resolved owner must be a non-anonymous principal. - pub owner: Option, /// The subaccount to register for automated deposit monitoring. + /// + /// The owner is always the caller. pub subaccount: Option, } diff --git a/minter/cksol_minter.did b/minter/cksol_minter.did index f81e36f2..93b2918b 100644 --- a/minter/cksol_minter.did +++ b/minter/cksol_minter.did @@ -85,12 +85,8 @@ type ProcessDepositError = variant { // Arguments for a request to the `update_balance` endpoint. type UpdateBalanceArgs = record { - // If provided, register this principal's deposit address for monitoring. - // - // If not set, defaults to the caller's principal. - // The resolved owner must be a non-anonymous principal. - owner: opt principal; // The subaccount to register for automated deposit monitoring. + // The owner is always the caller. subaccount: opt blob; }; diff --git a/minter/src/main.rs b/minter/src/main.rs index 4d144410..185c5724 100644 --- a/minter/src/main.rs +++ b/minter/src/main.rs @@ -67,7 +67,7 @@ fn get_deposit_address(args: GetDepositAddressArgs) -> Address { #[ic_cdk::update] fn update_balance(args: UpdateBalanceArgs) -> Result<(), UpdateBalanceError> { - let account = assert_non_anonymous_account(args.owner, args.subaccount); + let account = assert_non_anonymous_account(None, args.subaccount); cksol_minter::deposit::automatic::update_balance(&IcCanisterRuntime::new(), account) }