refactor(stablecoin)!: migrate Position to spec §4.4 shape

closes #161
This commit is contained in:
Andrea Franz
2026-08-19 12:30:22 +02:00
committed by r4bbit
parent ed6e20e11c
commit 2d3392393a
8 changed files with 201 additions and 167 deletions
+16 -11
View File
@@ -56,11 +56,15 @@ impl Ids {
))
}
fn position_nonce() -> u64 {
0
}
fn position() -> AccountId {
compute_position_pda(
Self::stablecoin_program(),
Self::owner(),
Self::collateral_definition(),
Self::position_nonce(),
)
}
@@ -157,10 +161,12 @@ impl Accounts {
program_owner: stablecoin_methods::STABLECOIN_ID,
balance: 0_u128,
data: Data::from(&Position {
collateral_vault_id: Ids::vault(),
collateral_definition_id: Ids::collateral_definition(),
owner_account_id: Ids::owner(),
position_nonce: Ids::position_nonce(),
vault_account_id: Ids::vault(),
collateral_amount: Balances::collateral_deposit(),
debt_amount: Balances::initial_debt(),
normalized_debt_amount: Balances::initial_debt(),
opened_at: 0,
}),
nonce: Nonce(0),
}
@@ -223,12 +229,10 @@ fn assert_position(state: &V03State, expected_collateral: u128) {
let position =
Position::try_from(&state.get_account_by_id(Ids::position()).data).expect("valid Position");
assert_eq!(position.collateral_amount, expected_collateral);
assert_eq!(position.debt_amount, 0);
assert_eq!(position.collateral_vault_id, Ids::vault());
assert_eq!(
position.collateral_definition_id,
Ids::collateral_definition()
);
assert_eq!(position.normalized_debt_amount, 0);
assert_eq!(position.vault_account_id, Ids::vault());
assert_eq!(position.owner_account_id, Ids::owner());
assert_eq!(position.position_nonce, Ids::position_nonce());
}
fn assert_fungible_balance(state: &V03State, account_id: AccountId, expected_balance: u128) {
@@ -254,6 +258,7 @@ fn stablecoin_open_position_then_withdraw_collateral() {
// Open the position: deposit collateral from the user's holding into a fresh vault.
let open = stablecoin_core::Instruction::OpenPosition {
position_nonce: Ids::position_nonce(),
collateral_amount: Balances::collateral_deposit(),
};
let message = public_transaction::Message::try_new(
@@ -363,7 +368,7 @@ fn stablecoin_repay_debt_burns_stablecoins_and_decreases_debt() {
let position =
Position::try_from(&state.get_account_by_id(Ids::position()).data).expect("valid Position");
assert_eq!(
position.debt_amount,
position.normalized_debt_amount,
Balances::initial_debt() - Balances::debt_repay_amount()
);
assert_eq!(position.collateral_amount, Balances::collateral_deposit());