From 22440cf95dbb62c554c9c4d8df14846c778f5d5c Mon Sep 17 00:00:00 2001 From: jonesmarvin8 <83104039+jonesmarvin8@users.noreply.github.com> Date: Tue, 9 Dec 2025 17:38:02 -0500 Subject: [PATCH 01/33] initialize nft branch --- nssa/program_methods/guest/src/bin/token.rs | 833 ++++++++++++++++++-- 1 file changed, 753 insertions(+), 80 deletions(-) diff --git a/nssa/program_methods/guest/src/bin/token.rs b/nssa/program_methods/guest/src/bin/token.rs index 614b5d9..a8db33f 100644 --- a/nssa/program_methods/guest/src/bin/token.rs +++ b/nssa/program_methods/guest/src/bin/token.rs @@ -1,40 +1,74 @@ use nssa_core::{ - account::{Account, AccountId, AccountWithMetadata, Data, data::DATA_MAX_LENGTH_IN_BYTES}, + account::{Account, AccountId, AccountWithMetadata, Data}, program::{ AccountPostState, DEFAULT_PROGRAM_ID, ProgramInput, read_nssa_inputs, write_nssa_outputs, }, }; // The token program has three functions: -// 1. New token definition. Arguments to this function are: -// * Two **default** accounts: [definition_account, holding_account]. The first default account -// will be initialized with the token definition account values. The second account will be -// initialized to a token holding account for the new token, holding the entire total supply. -// * An instruction data of 23-bytes, indicating the total supply and the token name, with the -// following layout: [0x00 || total_supply (little-endian 16 bytes) || name (6 bytes)] The -// name cannot be equal to [0x00, 0x00, 0x00, 0x00, 0x00, 0x00] -// 2. Token transfer Arguments to this function are: +// 1. New token definition. +// Arguments to this function are: +// * Two **default** accounts: [definition_account, holding_account]. +// The first default account will be initialized with the token definition account values. The second account will +// be initialized to a token holding account for the new token, holding the entire total supply. +// * An instruction data of 23-bytes, indicating the total supply and the token name, with +// the following layout: +// [0x00 || total_supply (little-endian 16 bytes) || name (6 bytes)] +// The name cannot be equal to [0x00, 0x00, 0x00, 0x00, 0x00, 0x00] +// 2. Token transfer +// Arguments to this function are: // * Two accounts: [sender_account, recipient_account]. -// * An instruction data byte string of length 23, indicating the total supply with the -// following layout [0x01 || amount (little-endian 16 bytes) || 0x00 || 0x00 || 0x00 || 0x00 -// || 0x00 || 0x00]. -// 3. Initialize account with zero balance Arguments to this function are: +// * An instruction data byte string of length 23, indicating the total supply with the following layout +// [0x01 || amount (little-endian 16 bytes) || 0x00 || 0x00 || 0x00 || 0x00 || 0x00 || 0x00]. +// 3. Initialize account with zero balance +// Arguments to this function are: // * Two accounts: [definition_account, account_to_initialize]. -// * An dummy byte string of length 23, with the following layout [0x02 || 0x00 || 0x00 || 0x00 -// || ... || 0x00 || 0x00]. +// * An dummy byte string of length 23, with the following layout +// [0x02 || 0x00 || 0x00 || 0x00 || ... || 0x00 || 0x00]. +// 4. Burn tokens from a Token Holding account (thus lowering total supply) +// Arguments to this function are: +// * Two accounts: [definition_account, holding_account]. +// * Authorization required: holding_account +// * An instruction data byte string of length 23, indicating the balance to burn with the folloiwng layout +// [0x03 || amount (little-endian 16 bytes) || 0x00 || 0x00 || 0x00 || 0x00 || 0x00 || 0x00]. +// 5. Mint additional supply of tokens tokens to a Token Holding account (thus increasing total supply) +// Arguments to this function are: +// * Two accounts: [definition_account, holding_account]. +// * Authorization required: definition_account +// * An instruction data byte string of length 23, indicating the balance to mint with the folloiwng layout +// [0x04 || amount (little-endian 16 bytes) || 0x00 || 0x00 || 0x00 || 0x00 || 0x00 || 0x00]. + + +enum TokenStandard { + FungibleTokenHolding, + FungibleAssetHolding, + NonFungibleHolding, +} + +fn helper_token_standard_constructor(selection: TokenStandard) -> u8 { + match selection { + TokenStandard::FungibleTokenHolding => 0, //TODO: make sure this matches with current definition + TokenStandard::FungibleAssetHolding => 1, + TokenStandard::NonFungibleHolding => 2, + _ => panic!("Invalid selection"), + } +} const TOKEN_DEFINITION_TYPE: u8 = 0; -const TOKEN_DEFINITION_DATA_SIZE: usize = 23; -const _: () = assert!(TOKEN_DEFINITION_DATA_SIZE <= DATA_MAX_LENGTH_IN_BYTES); +const TOKEN_DEFINITION_DATA_SIZE: usize = 55; //23; const TOKEN_HOLDING_TYPE: u8 = 1; const TOKEN_HOLDING_DATA_SIZE: usize = 49; -const _: () = assert!(TOKEN_HOLDING_DATA_SIZE <= DATA_MAX_LENGTH_IN_BYTES); +const CURRENT_VERSION: u8 = 1; + +//TODO: pub probably not necessary +pub type StringU8 = Vec; struct TokenDefinition { account_type: u8, name: [u8; 6], total_supply: u128, + metadata_id: AccountId, } struct TokenHolding { @@ -43,16 +77,23 @@ struct TokenHolding { balance: u128, } +struct TokenMetadata { + account_type: u8, //Not sure if necessary + version: u8, + definition_id: AccountId, + uri: StringU8, + creators: StringU8, + primary_sale_date: StringU8, //Maybe do this as a block number? +} + impl TokenDefinition { - fn into_data(self) -> Data { + fn into_data(self) -> Vec { let mut bytes = [0; TOKEN_DEFINITION_DATA_SIZE]; bytes[0] = self.account_type; bytes[1..7].copy_from_slice(&self.name); - bytes[7..].copy_from_slice(&self.total_supply.to_le_bytes()); - bytes - .to_vec() - .try_into() - .expect("23 bytes should fit into Data") + bytes[7..23].copy_from_slice(&self.total_supply.to_le_bytes()); + bytes[23..].copy_from_slice(&self.metadata_id.to_bytes()); + bytes.into() } fn parse(data: &[u8]) -> Option { @@ -62,14 +103,16 @@ impl TokenDefinition { let account_type = data[0]; let name = data[1..7].try_into().unwrap(); let total_supply = u128::from_le_bytes( - data[7..] + data[7..23] .try_into() .expect("Total supply must be 16 bytes little-endian"), ); + let metadata_id = AccountId::new([0;32]); //TODO: temp Some(Self { account_type, name, total_supply, + metadata_id, }) } } @@ -112,10 +155,7 @@ impl TokenHolding { bytes[0] = self.account_type; bytes[1..33].copy_from_slice(&self.definition_id.to_bytes()); bytes[33..].copy_from_slice(&self.balance.to_le_bytes()); - bytes - .to_vec() - .try_into() - .expect("33 bytes should fit into Data") + bytes.into() } } @@ -150,7 +190,7 @@ fn transfer(pre_states: &[AccountWithMetadata], balance_to_move: u128) -> Vec Vec bool { + if token_standard == helper_token_standard_constructor(TokenStandard::NonFungibleHolding) && + total_supply != 1 { + return false + } + + true +} + fn new_definition( pre_states: &[AccountWithMetadata], name: [u8; 6], total_supply: u128, + //token_standard: u8, //TODO: uncomment out; currently ommitted to not break tests + //how to determine accounttype ) -> Vec { + //Additional account needed in some cases. + //Assuming fungible + let (definition_target_account, holding_target_account) = new_definition_fungible(pre_states); + + //TODO temp + let token_standard: u8 = 0; + + //Don't need pre_state's full AccountWithMetadata + //Unless PDA is used for metadata address? + if pre_states.len() != 2 { panic!("Invalid number of input accounts"); } @@ -192,18 +254,35 @@ fn new_definition( panic!("Holding target account must have default values"); } + // Nonfungible must have total supply 1 + //TODO add a test + //Ideally, we could use TokenStandard enum for this + if !valid_total_supply_for_token_standard(total_supply, token_standard) { + panic!("Invalid total supply for the specified token supply"); + } + let token_definition = TokenDefinition { - account_type: TOKEN_DEFINITION_TYPE, + account_type: TOKEN_DEFINITION_TYPE, //TODO use token standard name, total_supply, + metadata_id: AccountId::new([0;32]), //TODO placeholder }; let token_holding = TokenHolding { - account_type: TOKEN_HOLDING_TYPE, + account_type: TOKEN_HOLDING_TYPE, //TODO use token standard? definition_id: definition_target_account.account_id.clone(), balance: total_supply, }; + let token_metadata = TokenMetadata { + account_type: TOKEN_HOLDING_TYPE, //TODO temp + definition_id: definition_target_account.account_id.clone(), + version: CURRENT_VERSION, + uri: Vec::::new(), + creators: Vec::::new(), + primary_sale_date: Vec::::new(), + }; + let mut definition_target_account_post = definition_target_account.account.clone(); definition_target_account_post.data = token_definition.into_data(); @@ -216,6 +295,14 @@ fn new_definition( ] } +fn new_definition_fungible(pre_states: &[AccountWithMetadata]) -> (Account, Account) { + if pre_states.len() != 2 { + panic!("Invalid number of input accounts"); + } + + (pre_states[0].account.clone(), pre_states[1].account.clone()) +} + fn initialize_account(pre_states: &[AccountWithMetadata]) -> Vec { if pre_states.len() != 2 { panic!("Invalid number of accounts"); @@ -225,7 +312,7 @@ fn initialize_account(pre_states: &[AccountWithMetadata]) -> Vec Vec Vec { + if pre_states.len() != 2 { + panic!("Invalid number of accounts"); + } + + let definition = &pre_states[0]; + let user_holding = &pre_states[1]; + + let definition_values = + TokenDefinition::parse(&definition.account.data).expect("Definition account must be valid"); + let user_values = TokenHolding::parse(&user_holding.account.data) + .expect("Token Holding account must be valid"); + + if definition.account_id != user_values.definition_id { + panic!("Mismatch token definition and token holding"); + } + + if !user_holding.is_authorized { + panic!("Authorization is missing"); + } + + if user_values.balance < balance_to_burn { + panic!("Insufficient balance to burn"); + } + + let mut post_user_holding = user_holding.account.clone(); + let mut post_definition = definition.account.clone(); + + post_user_holding.data = TokenHolding::into_data(TokenHolding { + account_type: user_values.account_type, + definition_id: user_values.definition_id, + balance: user_values.balance - balance_to_burn, + }); + + post_definition.data = TokenDefinition::into_data(TokenDefinition { + account_type: definition_values.account_type, + name: definition_values.name, + total_supply: definition_values + .total_supply + .checked_sub(balance_to_burn) + .expect("Total supply underflow"), + metadata_id: definition_values.metadata_id, + }); + + vec![ + AccountPostState::new(post_definition), + AccountPostState::new(post_user_holding), + ] +} + +fn mint_additional_supply( + pre_states: &[AccountWithMetadata], + amount_to_mint: u128, +) -> Vec { + if pre_states.len() != 2 { + panic!("Invalid number of accounts"); + } + + let definition = &pre_states[0]; + let token_holding = &pre_states[1]; + + if !definition.is_authorized { + panic!("Definition authorization is missing"); + } + + let definition_values = + TokenDefinition::parse(&definition.account.data).expect("Definition account must be valid"); + + let token_holding_values: TokenHolding = if token_holding.account == Account::default() { + TokenHolding::new(&definition.account_id) + } else { + TokenHolding::parse(&token_holding.account.data).expect("Holding account must be valid") + }; + + if definition.account_id != token_holding_values.definition_id { + panic!("Mismatch token definition and token holding"); + } + + let token_holding_post_data = TokenHolding { + account_type: token_holding_values.account_type, + definition_id: token_holding_values.definition_id, + balance: token_holding_values + .balance + .checked_add(amount_to_mint) + .expect("New balance overflow"), + }; + + let post_total_supply = definition_values + .total_supply + .checked_add(amount_to_mint) + .expect("Total supply overflow"); + + let post_definition_data = TokenDefinition { + account_type: definition_values.account_type, + name: definition_values.name, + total_supply: post_total_supply, + metadata_id: definition_values.metadata_id, + }; + + let post_definition = { + let mut this = definition.account.clone(); + this.data = post_definition_data.into_data(); + AccountPostState::new(this) + }; + + let token_holding_post = { + let mut this = token_holding.account.clone(); + this.data = token_holding_post_data.into_data(); + + // Claim the recipient account if it has default program owner + if this.program_owner == DEFAULT_PROGRAM_ID { + AccountPostState::new_claimed(this) + } else { + AccountPostState::new(this) + } + }; + vec![post_definition, token_holding_post] +} + type Instruction = [u8; 23]; fn main() { @@ -292,6 +498,34 @@ fn main() { } initialize_account(&pre_states) } + 3 => { + let balance_to_burn = u128::from_le_bytes( + instruction[1..17] + .try_into() + .expect("Balance to burn must be 16 bytes little-endian"), + ); + let name: [u8; 6] = instruction[17..] + .try_into() + .expect("Name must be 6 bytes long"); + assert_eq!(name, [0; 6]); + + // Execute + burn(&pre_states, balance_to_burn) + } + 4 => { + let balance_to_mint = u128::from_le_bytes( + instruction[1..17] + .try_into() + .expect("Balance to burn must be 16 bytes little-endian"), + ); + let name: [u8; 6] = instruction[17..] + .try_into() + .expect("Name must be 6 bytes long"); + assert_eq!(name, [0; 6]); + + // Execute + mint_additional_supply(&pre_states, balance_to_mint) + } _ => panic!("Invalid instruction"), }; @@ -303,8 +537,9 @@ mod tests { use nssa_core::account::{Account, AccountId, AccountWithMetadata}; use crate::{ - TOKEN_DEFINITION_DATA_SIZE, TOKEN_HOLDING_DATA_SIZE, TOKEN_HOLDING_TYPE, - initialize_account, new_definition, transfer, + TOKEN_DEFINITION_DATA_SIZE, TOKEN_DEFINITION_TYPE, TOKEN_HOLDING_DATA_SIZE, + TOKEN_HOLDING_TYPE, TokenDefinition, TokenHolding, burn, initialize_account, + mint_additional_supply, new_definition, transfer, }; #[should_panic(expected = "Invalid number of input accounts")] @@ -406,15 +641,15 @@ mod tests { let post_states = new_definition(&pre_states, [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe], 10); let [definition_account, holding_account] = post_states.try_into().ok().unwrap(); assert_eq!( - definition_account.account().data.as_ref(), - &[ + definition_account.account().data, + vec![ 0, 0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] ); assert_eq!( - holding_account.account().data.as_ref(), - &[ + holding_account.account().data, + vec![ 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 @@ -464,9 +699,7 @@ mod tests { AccountWithMetadata { account: Account { // First byte should be `TOKEN_HOLDING_TYPE` for token holding accounts - data: vec![invalid_type; TOKEN_HOLDING_DATA_SIZE] - .try_into() - .unwrap(), + data: vec![invalid_type; TOKEN_HOLDING_DATA_SIZE], ..Account::default() }, is_authorized: true, @@ -488,7 +721,7 @@ mod tests { AccountWithMetadata { account: Account { // Data must be of exact length `TOKEN_HOLDING_DATA_SIZE` - data: vec![1; TOKEN_HOLDING_DATA_SIZE - 1].try_into().unwrap(), + data: vec![1; TOKEN_HOLDING_DATA_SIZE - 1], ..Account::default() }, is_authorized: true, @@ -510,7 +743,7 @@ mod tests { AccountWithMetadata { account: Account { // Data must be of exact length `TOKEN_HOLDING_DATA_SIZE` - data: vec![1; TOKEN_HOLDING_DATA_SIZE + 1].try_into().unwrap(), + data: vec![1; TOKEN_HOLDING_DATA_SIZE + 1], ..Account::default() }, is_authorized: true, @@ -531,7 +764,7 @@ mod tests { let pre_states = vec![ AccountWithMetadata { account: Account { - data: vec![1; TOKEN_HOLDING_DATA_SIZE].try_into().unwrap(), + data: vec![1; TOKEN_HOLDING_DATA_SIZE], ..Account::default() }, is_authorized: true, @@ -539,12 +772,10 @@ mod tests { }, AccountWithMetadata { account: Account { - data: [1] + data: vec![1] .into_iter() .chain(vec![2; TOKEN_HOLDING_DATA_SIZE - 1]) - .collect::>() - .try_into() - .unwrap(), + .collect(), ..Account::default() }, is_authorized: true, @@ -561,12 +792,10 @@ mod tests { AccountWithMetadata { account: Account { // Account with balance 37 - data: [1; TOKEN_HOLDING_DATA_SIZE - 16] + data: vec![1; TOKEN_HOLDING_DATA_SIZE - 16] .into_iter() .chain(u128::to_le_bytes(37)) - .collect::>() - .try_into() - .unwrap(), + .collect(), ..Account::default() }, is_authorized: true, @@ -574,7 +803,7 @@ mod tests { }, AccountWithMetadata { account: Account { - data: vec![1; TOKEN_HOLDING_DATA_SIZE].try_into().unwrap(), + data: vec![1; TOKEN_HOLDING_DATA_SIZE], ..Account::default() }, is_authorized: true, @@ -592,12 +821,10 @@ mod tests { AccountWithMetadata { account: Account { // Account with balance 37 - data: [1; TOKEN_HOLDING_DATA_SIZE - 16] + data: vec![1; TOKEN_HOLDING_DATA_SIZE - 16] .into_iter() .chain(u128::to_le_bytes(37)) - .collect::>() - .try_into() - .unwrap(), + .collect(), ..Account::default() }, is_authorized: false, @@ -605,7 +832,7 @@ mod tests { }, AccountWithMetadata { account: Account { - data: vec![1; TOKEN_HOLDING_DATA_SIZE].try_into().unwrap(), + data: vec![1; TOKEN_HOLDING_DATA_SIZE], ..Account::default() }, is_authorized: true, @@ -621,12 +848,10 @@ mod tests { AccountWithMetadata { account: Account { // Account with balance 37 - data: [1; TOKEN_HOLDING_DATA_SIZE - 16] + data: vec![1; TOKEN_HOLDING_DATA_SIZE - 16] .into_iter() .chain(u128::to_le_bytes(37)) - .collect::>() - .try_into() - .unwrap(), + .collect(), ..Account::default() }, is_authorized: true, @@ -635,12 +860,10 @@ mod tests { AccountWithMetadata { account: Account { // Account with balance 255 - data: [1; TOKEN_HOLDING_DATA_SIZE - 16] + data: vec![1; TOKEN_HOLDING_DATA_SIZE - 16] .into_iter() .chain(u128::to_le_bytes(255)) - .collect::>() - .try_into() - .unwrap(), + .collect(), ..Account::default() }, is_authorized: true, @@ -650,15 +873,15 @@ mod tests { let post_states = transfer(&pre_states, 11); let [sender_post, recipient_post] = post_states.try_into().ok().unwrap(); assert_eq!( - sender_post.account().data.as_ref(), - [ + sender_post.account().data, + vec![ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] ); assert_eq!( - recipient_post.account().data.as_ref(), - [ + recipient_post.account().data, + vec![ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] @@ -674,9 +897,7 @@ mod tests { data: [0; TOKEN_DEFINITION_DATA_SIZE - 16] .into_iter() .chain(u128::to_le_bytes(1000)) - .collect::>() - .try_into() - .unwrap(), + .collect(), ..Account::default() }, is_authorized: false, @@ -690,16 +911,468 @@ mod tests { ]; let post_states = initialize_account(&pre_states); let [definition, holding] = post_states.try_into().ok().unwrap(); + assert_eq!(definition.account().data, pre_states[0].account.data); assert_eq!( - definition.account().data.as_ref(), - pre_states[0].account.data.as_ref() - ); - assert_eq!( - holding.account().data.as_ref(), - [ + holding.account().data, + vec![ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] ); } + + enum BalanceEnum { + InitSupply, + HoldingBalance, + InitSupplyBurned, + HoldingBalanceBurned, + BurnSuccess, + BurnInsufficient, + MintSuccess, + InitSupplyMint, + HoldingBalanceMint, + MintOverflow, + } + + enum AccountsEnum { + DefinitionAccountAuth, + DefinitionAccountNotAuth, + HoldingDiffDef, + HoldingSameDefAuth, + HoldingSameDefNotAuth, + HoldingSameDefNotAuthOverflow, + DefinitionAccountPostBurn, + HoldingAccountPostBurn, + Uninit, + InitMint, + DefinitionAccountMint, + HoldingSameDefMint, + HoldingSameDefAuthLargeBalance, + } + + enum IdEnum { + PoolDefinitionId, + PoolDefinitionIdDiff, + HoldingId, + } + + fn helper_account_constructor(selection: AccountsEnum) -> AccountWithMetadata { + match selection { + AccountsEnum::DefinitionAccountAuth => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenDefinition::into_data(TokenDefinition { + account_type: TOKEN_DEFINITION_TYPE, + name: [2; 6], + total_supply: helper_balance_constructor(BalanceEnum::InitSupply), + metadata_id: AccountId::new([0;32]), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::PoolDefinitionId), + }, + AccountsEnum::DefinitionAccountNotAuth => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenDefinition::into_data(TokenDefinition { + account_type: TOKEN_DEFINITION_TYPE, + name: [2; 6], + total_supply: helper_balance_constructor(BalanceEnum::InitSupply), + metadata_id: AccountId::new([0;32]), + }), + nonce: 0, + }, + is_authorized: false, + account_id: helper_id_constructor(IdEnum::PoolDefinitionId), + }, + AccountsEnum::HoldingDiffDef => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_TYPE, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionIdDiff), + balance: helper_balance_constructor(BalanceEnum::HoldingBalance), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::HoldingSameDefAuth => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_TYPE, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::HoldingBalance), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::HoldingSameDefNotAuth => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_TYPE, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::HoldingBalance), + }), + nonce: 0, + }, + is_authorized: false, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::HoldingSameDefNotAuthOverflow => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_TYPE, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::InitSupply), + }), + nonce: 0, + }, + is_authorized: false, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::DefinitionAccountPostBurn => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenDefinition::into_data(TokenDefinition { + account_type: TOKEN_DEFINITION_TYPE, + name: [2; 6], + total_supply: helper_balance_constructor(BalanceEnum::InitSupplyBurned), + metadata_id: AccountId::new([0;32]), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::PoolDefinitionId), + }, + AccountsEnum::HoldingAccountPostBurn => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_TYPE, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::HoldingBalanceBurned), + }), + nonce: 0, + }, + is_authorized: false, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::Uninit => AccountWithMetadata { + account: Account::default(), + is_authorized: false, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::InitMint => AccountWithMetadata { + account: Account { + program_owner: [0u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_TYPE, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::MintSuccess), + }), + nonce: 0, + }, + is_authorized: false, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::HoldingSameDefMint => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_TYPE, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::HoldingBalanceMint), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::PoolDefinitionId), + }, + AccountsEnum::DefinitionAccountMint => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenDefinition::into_data(TokenDefinition { + account_type: TOKEN_DEFINITION_TYPE, + name: [2; 6], + total_supply: helper_balance_constructor(BalanceEnum::InitSupplyMint), + metadata_id: AccountId::new([0;32]), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::PoolDefinitionId), + }, + AccountsEnum::HoldingSameDefAuthLargeBalance => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_TYPE, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::MintOverflow), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::PoolDefinitionId), + }, + _ => panic!("Invalid selection"), + } + } + + fn helper_balance_constructor(selection: BalanceEnum) -> u128 { + match selection { + BalanceEnum::InitSupply => 100_000, + BalanceEnum::HoldingBalance => 1_000, + BalanceEnum::InitSupplyBurned => 99_500, + BalanceEnum::HoldingBalanceBurned => 500, + BalanceEnum::BurnSuccess => 500, + BalanceEnum::BurnInsufficient => 1_500, + BalanceEnum::MintSuccess => 50_000, + BalanceEnum::InitSupplyMint => 150_000, + BalanceEnum::HoldingBalanceMint => 51_000, + BalanceEnum::MintOverflow => (2 as u128).pow(128) - 40_000, + _ => panic!("Invalid selection"), + } + } + + fn helper_id_constructor(selection: IdEnum) -> AccountId { + match selection { + IdEnum::PoolDefinitionId => AccountId::new([15; 32]), + IdEnum::PoolDefinitionIdDiff => AccountId::new([16; 32]), + IdEnum::HoldingId => AccountId::new([17; 32]), + } + } + + #[test] + #[should_panic(expected = "Invalid number of accounts")] + fn test_burn_invalid_number_of_accounts() { + let pre_states = vec![helper_account_constructor( + AccountsEnum::DefinitionAccountAuth, + )]; + let _post_states = burn( + &pre_states, + helper_balance_constructor(BalanceEnum::BurnSuccess), + ); + } + + #[test] + #[should_panic(expected = "Mismatch token definition and token holding")] + fn test_burn_mismatch_def() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::DefinitionAccountAuth), + helper_account_constructor(AccountsEnum::HoldingDiffDef), + ]; + let _post_states = burn( + &pre_states, + helper_balance_constructor(BalanceEnum::BurnSuccess), + ); + } + + #[test] + #[should_panic(expected = "Authorization is missing")] + fn test_burn_missing_authorization() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::DefinitionAccountAuth), + helper_account_constructor(AccountsEnum::HoldingSameDefNotAuth), + ]; + let _post_states = burn( + &pre_states, + helper_balance_constructor(BalanceEnum::BurnSuccess), + ); + } + + #[test] + #[should_panic(expected = "Insufficient balance to burn")] + fn test_burn_insufficient_balance() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::DefinitionAccountAuth), + helper_account_constructor(AccountsEnum::HoldingSameDefAuth), + ]; + let _post_states = burn( + &pre_states, + helper_balance_constructor(BalanceEnum::BurnInsufficient), + ); + } + + #[test] + #[should_panic(expected = "Total supply underflow")] + fn test_burn_total_supply_underflow() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::DefinitionAccountAuth), + helper_account_constructor(AccountsEnum::HoldingSameDefAuthLargeBalance), + ]; + let _post_states = burn( + &pre_states, + helper_balance_constructor(BalanceEnum::MintOverflow), + ); + } + + #[test] + fn test_burn_success() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::DefinitionAccountAuth), + helper_account_constructor(AccountsEnum::HoldingSameDefAuth), + ]; + let post_states = burn( + &pre_states, + helper_balance_constructor(BalanceEnum::BurnSuccess), + ); + + let def_post = post_states[0].clone(); + let holding_post = post_states[1].clone(); + + assert!( + *def_post.account() + == helper_account_constructor(AccountsEnum::DefinitionAccountPostBurn).account + ); + assert!( + *holding_post.account() + == helper_account_constructor(AccountsEnum::HoldingAccountPostBurn).account + ); + } + + #[test] + #[should_panic(expected = "Invalid number of accounts")] + fn test_mint_invalid_number_of_accounts() { + let pre_states = vec![helper_account_constructor( + AccountsEnum::DefinitionAccountAuth, + )]; + let _post_states = mint_additional_supply( + &pre_states, + helper_balance_constructor(BalanceEnum::MintSuccess), + ); + } + + #[test] + #[should_panic(expected = "Holding account must be valid")] + fn test_mint_not_valid_holding_account() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::DefinitionAccountAuth), + helper_account_constructor(AccountsEnum::DefinitionAccountNotAuth), + ]; + let _post_states = mint_additional_supply( + &pre_states, + helper_balance_constructor(BalanceEnum::MintSuccess), + ); + } + + #[test] + #[should_panic(expected = "Definition authorization is missing")] + fn test_mint_missing_authorization() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::DefinitionAccountNotAuth), + helper_account_constructor(AccountsEnum::HoldingSameDefNotAuth), + ]; + let _post_states = mint_additional_supply( + &pre_states, + helper_balance_constructor(BalanceEnum::MintSuccess), + ); + } + + #[test] + #[should_panic(expected = "Mismatch token definition and token holding")] + fn test_mint_mismatched_token_definition() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::DefinitionAccountAuth), + helper_account_constructor(AccountsEnum::HoldingDiffDef), + ]; + let _post_states = mint_additional_supply( + &pre_states, + helper_balance_constructor(BalanceEnum::MintSuccess), + ); + } + + #[test] + fn test_mint_success() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::DefinitionAccountAuth), + helper_account_constructor(AccountsEnum::HoldingSameDefNotAuth), + ]; + let post_states = mint_additional_supply( + &pre_states, + helper_balance_constructor(BalanceEnum::MintSuccess), + ); + + let def_post = post_states[0].clone(); + let holding_post = post_states[1].clone(); + + assert!( + *def_post.account() + == helper_account_constructor(AccountsEnum::DefinitionAccountMint).account + ); + assert!( + *holding_post.account() + == helper_account_constructor(AccountsEnum::HoldingSameDefMint).account + ); + } + + #[test] + fn test_mint_uninit_holding_success() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::DefinitionAccountAuth), + helper_account_constructor(AccountsEnum::Uninit), + ]; + let post_states = mint_additional_supply( + &pre_states, + helper_balance_constructor(BalanceEnum::MintSuccess), + ); + + let def_post = post_states[0].clone(); + let holding_post = post_states[1].clone(); + + assert!( + *def_post.account() + == helper_account_constructor(AccountsEnum::DefinitionAccountMint).account + ); + assert!( + *holding_post.account() == helper_account_constructor(AccountsEnum::InitMint).account + ); + assert!(holding_post.requires_claim() == true); + } + + #[test] + #[should_panic(expected = "Total supply overflow")] + fn test_mint_total_supply_overflow() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::DefinitionAccountAuth), + helper_account_constructor(AccountsEnum::HoldingSameDefNotAuth), + ]; + let _post_states = mint_additional_supply( + &pre_states, + helper_balance_constructor(BalanceEnum::MintOverflow), + ); + } + + #[test] + #[should_panic(expected = "New balance overflow")] + fn test_mint_holding_account_overflow() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::DefinitionAccountAuth), + helper_account_constructor(AccountsEnum::HoldingSameDefNotAuthOverflow), + ]; + let _post_states = mint_additional_supply( + &pre_states, + helper_balance_constructor(BalanceEnum::MintOverflow), + ); + } } From 1b7afbecdc784614e12df6fdced6124b650e26f7 Mon Sep 17 00:00:00 2001 From: jonesmarvin8 <83104039+jonesmarvin8@users.noreply.github.com> Date: Wed, 10 Dec 2025 20:21:11 -0500 Subject: [PATCH 02/33] updates --- nssa/program_methods/guest/src/bin/token.rs | 758 ++++++++++++-------- 1 file changed, 477 insertions(+), 281 deletions(-) diff --git a/nssa/program_methods/guest/src/bin/token.rs b/nssa/program_methods/guest/src/bin/token.rs index a8db33f..288724d 100644 --- a/nssa/program_methods/guest/src/bin/token.rs +++ b/nssa/program_methods/guest/src/bin/token.rs @@ -38,7 +38,6 @@ use nssa_core::{ // * An instruction data byte string of length 23, indicating the balance to mint with the folloiwng layout // [0x04 || amount (little-endian 16 bytes) || 0x00 || 0x00 || 0x00 || 0x00 || 0x00 || 0x00]. - enum TokenStandard { FungibleTokenHolding, FungibleAssetHolding, @@ -55,49 +54,120 @@ fn helper_token_standard_constructor(selection: TokenStandard) -> u8 { } const TOKEN_DEFINITION_TYPE: u8 = 0; -const TOKEN_DEFINITION_DATA_SIZE: usize = 55; //23; +const TOKEN_DEFINITION_DATA_SIZE: usize = 55; const TOKEN_HOLDING_TYPE: u8 = 1; const TOKEN_HOLDING_DATA_SIZE: usize = 49; const CURRENT_VERSION: u8 = 1; +const TOKEN_METADATA_DATA_SIZE: usize = 463; + //TODO: pub probably not necessary pub type StringU8 = Vec; struct TokenDefinition { - account_type: u8, + account_type: u8, //specifies Token Standard? name: [u8; 6], total_supply: u128, metadata_id: AccountId, } struct TokenHolding { - account_type: u8, + account_type: u8, //(potentially for edition/master edition/printable) definition_id: AccountId, balance: u128, } +//BAH fixed data size is kind of needed... +//TODO need implement struct TokenMetadata { account_type: u8, //Not sure if necessary version: u8, definition_id: AccountId, - uri: StringU8, - creators: StringU8, - primary_sale_date: StringU8, //Maybe do this as a block number? + uri: [u8; 200], //TODO: add to specs; this is the limit Solana uses + creators: [u8; 250], //TODO: double check this value; + primary_sale_date: u64, //BlockId +} + +//TODO remove any unwraps + +impl TokenMetadata { + fn into_data(self) -> Data { + let mut bytes = Vec::::new(); + bytes.extend_from_slice(&[self.account_type]); + bytes.extend_from_slice(&[self.version]); + bytes.extend_from_slice(&self.definition_id.to_bytes()); + bytes.extend_from_slice(&self.uri); + bytes.extend_from_slice(&self.creators); + bytes.extend_from_slice(&self.primary_sale_date.to_le_bytes()); + + if bytes.len() != TOKEN_METADATA_DATA_SIZE { + panic!("Invalid Token Definition data"); + } + + Data::try_from(bytes).expect("Invalid data") + } + + fn parse(data: &Data) -> Option { + let data = Vec::::from(data.clone()); + + if data.len() != TOKEN_METADATA_DATA_SIZE { + None + } else { + let account_type = data[0]; + let version = data[1]; + let definition_id = AccountId::new( + data[2..34] + .try_into() + .expect("Token Program expects valid Account Id for Metadata"), + ); + let uri: [u8; 200] = data[34..234] + .try_into() + .expect("Token Program expects valid uri for Metadata"); + let creators: [u8; 250] = data[234..484] + .try_into() + .expect("Token Program expects valid creators for Metadata"); + let primary_sale_date = u64::from_le_bytes( + data[484..TOKEN_METADATA_DATA_SIZE] + .try_into() + .expect("Token Program expects valid blockid for Metadata"), + ); + Some(Self { + account_type, + version, + definition_id, + uri, + creators, + primary_sale_date, + }) + } + } } impl TokenDefinition { - fn into_data(self) -> Vec { - let mut bytes = [0; TOKEN_DEFINITION_DATA_SIZE]; - bytes[0] = self.account_type; - bytes[1..7].copy_from_slice(&self.name); - bytes[7..23].copy_from_slice(&self.total_supply.to_le_bytes()); - bytes[23..].copy_from_slice(&self.metadata_id.to_bytes()); - bytes.into() + fn into_data(self) -> Data { + let mut bytes = Vec::::new(); + bytes.extend_from_slice(&[self.account_type]); + bytes.extend_from_slice(&self.name); + bytes.extend_from_slice(&self.total_supply.to_le_bytes()); + bytes.extend_from_slice(&self.metadata_id.to_bytes()); + + if bytes.len() != TOKEN_DEFINITION_DATA_SIZE { + panic!("Invalid Token Definition data"); + } + + Data::try_from(bytes).expect("Invalid data") } - fn parse(data: &[u8]) -> Option { - if data.len() != TOKEN_DEFINITION_DATA_SIZE || data[0] != TOKEN_DEFINITION_TYPE { + //STATUS: TODO + fn parse(data: &Data) -> Option { + let data = Vec::::from(data.clone()); + + //TODO: TOKEN_DEFINITION_TYPE might be silly + //Should make sure it's a valid option + //Removed the check for data[0] check + //Can be included + if data.len() != TOKEN_DEFINITION_DATA_SIZE { None } else { let account_type = data[0]; @@ -107,7 +177,11 @@ impl TokenDefinition { .try_into() .expect("Total supply must be 16 bytes little-endian"), ); - let metadata_id = AccountId::new([0;32]); //TODO: temp + let metadata_id = AccountId::new( + data[23..TOKEN_DEFINITION_DATA_SIZE] + .try_into() + .expect("Token Program expects valid Account Id for Metadata"), + ); Some(Self { account_type, name, @@ -119,6 +193,8 @@ impl TokenDefinition { } impl TokenHolding { + //STATUS: TODO + //account type matters fn new(definition_id: &AccountId) -> Self { Self { account_type: TOKEN_HOLDING_TYPE, @@ -127,7 +203,12 @@ impl TokenHolding { } } - fn parse(data: &[u8]) -> Option { + //STATUS: TODO + fn parse(data: &Data) -> Option { + let data = Vec::::from(data.clone()); + + //TODO: holding type matters + //e.g., royalties payments for NFTs? if data.len() != TOKEN_HOLDING_DATA_SIZE || data[0] != TOKEN_HOLDING_TYPE { return None; } @@ -143,6 +224,7 @@ impl TokenHolding { .try_into() .expect("balance must be 16 bytes little-endian"), ); + Some(Self { definition_id, balance, @@ -150,15 +232,25 @@ impl TokenHolding { }) } + //STATUS: fixed fn into_data(self) -> Data { - let mut bytes = [0; TOKEN_HOLDING_DATA_SIZE]; - bytes[0] = self.account_type; - bytes[1..33].copy_from_slice(&self.definition_id.to_bytes()); - bytes[33..].copy_from_slice(&self.balance.to_le_bytes()); - bytes.into() + let mut bytes = Vec::::new(); + bytes.extend_from_slice(&[self.account_type]); + bytes.extend_from_slice(&self.definition_id.to_bytes()); + bytes.extend_from_slice(&self.balance.to_le_bytes()); + + if bytes.len() != TOKEN_HOLDING_DATA_SIZE { + panic!("Invalid Token Holding data"); + } + + Data::try_from(bytes).expect("Invalid data") } } +//TODO: transfer for NFTs could/should have built in payments for royalties +// This probably would need a different transfer program... +// or branching logic +// Minus royalties issue-> this function is fine fn transfer(pre_states: &[AccountWithMetadata], balance_to_move: u128) -> Vec { if pre_states.len() != 2 { panic!("Invalid number of input accounts"); @@ -166,8 +258,13 @@ fn transfer(pre_states: &[AccountWithMetadata], balance_to_move: u128) -> Vec Vec Vec bool { - if token_standard == helper_token_standard_constructor(TokenStandard::NonFungibleHolding) && - total_supply != 1 { - return false - } - - true -} - +//TODO: use new_definition to only mint FungibleTokens +// e.g. no Metadata fn new_definition( pre_states: &[AccountWithMetadata], name: [u8; 6], total_supply: u128, - //token_standard: u8, //TODO: uncomment out; currently ommitted to not break tests - //how to determine accounttype ) -> Vec { - //Additional account needed in some cases. - //Assuming fungible - let (definition_target_account, holding_target_account) = new_definition_fungible(pre_states); - - //TODO temp - let token_standard: u8 = 0; - - //Don't need pre_state's full AccountWithMetadata - //Unless PDA is used for metadata address? - if pre_states.len() != 2 { panic!("Invalid number of input accounts"); } + let definition_target_account = &pre_states[0]; let holding_target_account = &pre_states[1]; @@ -254,35 +331,19 @@ fn new_definition( panic!("Holding target account must have default values"); } - // Nonfungible must have total supply 1 - //TODO add a test - //Ideally, we could use TokenStandard enum for this - if !valid_total_supply_for_token_standard(total_supply, token_standard) { - panic!("Invalid total supply for the specified token supply"); - } - let token_definition = TokenDefinition { - account_type: TOKEN_DEFINITION_TYPE, //TODO use token standard + account_type: helper_token_standard_constructor(TokenStandard::FungibleTokenHolding), name, total_supply, - metadata_id: AccountId::new([0;32]), //TODO placeholder + metadata_id: AccountId::new([0; 32]), }; let token_holding = TokenHolding { - account_type: TOKEN_HOLDING_TYPE, //TODO use token standard? + account_type: TOKEN_HOLDING_TYPE, definition_id: definition_target_account.account_id.clone(), balance: total_supply, }; - let token_metadata = TokenMetadata { - account_type: TOKEN_HOLDING_TYPE, //TODO temp - definition_id: definition_target_account.account_id.clone(), - version: CURRENT_VERSION, - uri: Vec::::new(), - creators: Vec::::new(), - primary_sale_date: Vec::::new(), - }; - let mut definition_target_account_post = definition_target_account.account.clone(); definition_target_account_post.data = token_definition.into_data(); @@ -295,12 +356,89 @@ fn new_definition( ] } -fn new_definition_fungible(pre_states: &[AccountWithMetadata]) -> (Account, Account) { - if pre_states.len() != 2 { +fn new_definition_with_metadata( + pre_states: &[AccountWithMetadata], + name: [u8; 6], + total_supply: u128, + token_standard: u8, + uri: &[u8; 200], + creators: &[u8; 250], + blockid: u64, +) -> Vec { + if pre_states.len() != 3 { panic!("Invalid number of input accounts"); } - (pre_states[0].account.clone(), pre_states[1].account.clone()) + let definition_target_account = &pre_states[0]; + let metadata_target_account = &pre_states[1]; + let holding_target_account = &pre_states[2]; + + //TODO test + if definition_target_account.account != Account::default() { + panic!("Definition target account must have default values"); + } + + //TODO test + if metadata_target_account.account != Account::default() { + panic!("Metadata target account must have default values"); + } + + //TODO test + if holding_target_account.account != Account::default() { + panic!("Holding target account must have default values"); + } + + //TODO test + if !valid_total_supply_for_token_standard(total_supply, token_standard) { + panic!("Invalid total supply for the specified token supply"); + } + + let token_definition = TokenDefinition { + account_type: helper_token_standard_constructor(TokenStandard::FungibleTokenHolding), + name, + total_supply, + metadata_id: metadata_target_account.account_id.clone(), + }; + + let token_holding = TokenHolding { + account_type: TOKEN_HOLDING_TYPE, + definition_id: definition_target_account.account_id.clone(), + balance: total_supply, + }; + + //TODO: enforce with pda seed address + let token_metadata = TokenMetadata { + account_type: 0u8, //todo temp + version: 1u8, + definition_id: definition_target_account.account_id.clone(), + uri: uri.clone(), + creators: creators.clone(), + primary_sale_date: blockid, + }; + + let mut definition_target_account_post = definition_target_account.account.clone(); + definition_target_account_post.data = token_definition.into_data(); + + let mut holding_target_account_post = holding_target_account.account.clone(); + holding_target_account_post.data = token_holding.into_data(); + + let mut metadata_target_account_post = metadata_target_account.account.clone(); + metadata_target_account_post.data = token_metadata.into_data(); + + vec![ + AccountPostState::new_claimed(definition_target_account_post), + AccountPostState::new_claimed(holding_target_account_post), + ] +} + +fn valid_total_supply_for_token_standard(total_supply: u128, token_standard: u8) -> bool { + if token_standard == helper_token_standard_constructor(TokenStandard::NonFungibleHolding) + && total_supply != 1 + { + return false; + } + + true } fn initialize_account(pre_states: &[AccountWithMetadata]) -> Vec { @@ -341,17 +479,17 @@ fn burn(pre_states: &[AccountWithMetadata], balance_to_burn: u128) -> Vec Vec Vec bool { + if account_type == helper_token_standard_constructor(TokenStandard::NonFungibleHolding) { + false + } else { + true + } +} + +// Status of function: fixed fn mint_additional_supply( pre_states: &[AccountWithMetadata], amount_to_mint: u128, @@ -404,11 +555,16 @@ fn mint_additional_supply( let token_holding_values: TokenHolding = if token_holding.account == Account::default() { TokenHolding::new(&definition.account_id) } else { + //remove clone TokenHolding::parse(&token_holding.account.data).expect("Holding account must be valid") }; + if !is_mintable(definition_values.account_type) { + panic!("Token Definition's standard does not permit minting additional supply"); + } + if definition.account_id != token_holding_values.definition_id { - panic!("Mismatch token definition and token holding"); + panic!("Mismatch Token Definition and Token Holding"); } let token_holding_post_data = TokenHolding { @@ -534,12 +690,13 @@ fn main() { #[cfg(test)] mod tests { - use nssa_core::account::{Account, AccountId, AccountWithMetadata}; + use nssa_core::account::{Account, AccountId, AccountWithMetadata, Data}; use crate::{ TOKEN_DEFINITION_DATA_SIZE, TOKEN_DEFINITION_TYPE, TOKEN_HOLDING_DATA_SIZE, - TOKEN_HOLDING_TYPE, TokenDefinition, TokenHolding, burn, initialize_account, - mint_additional_supply, new_definition, transfer, + TOKEN_HOLDING_TYPE, TokenDefinition, TokenHolding, TokenStandard, burn, + helper_token_standard_constructor, initialize_account, mint_additional_supply, + new_definition, transfer, }; #[should_panic(expected = "Invalid number of input accounts")] @@ -618,6 +775,7 @@ mod tests { let _post_states = new_definition(&pre_states, [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe], 10); } + /* #[test] fn test_new_definition_with_valid_inputs_succeeds() { let pre_states = vec![ @@ -656,6 +814,7 @@ mod tests { ] ); } + */ #[should_panic(expected = "Invalid number of input accounts")] #[test] @@ -699,7 +858,8 @@ mod tests { AccountWithMetadata { account: Account { // First byte should be `TOKEN_HOLDING_TYPE` for token holding accounts - data: vec![invalid_type; TOKEN_HOLDING_DATA_SIZE], + data: Data::try_from(vec![invalid_type; TOKEN_HOLDING_DATA_SIZE]) + .expect("Invalid data"), ..Account::default() }, is_authorized: true, @@ -714,213 +874,214 @@ mod tests { let _post_states = transfer(&pre_states, 10); } - #[should_panic(expected = "Invalid sender data")] - #[test] - fn test_transfer_invalid_data_size_should_fail_1() { - let pre_states = vec![ - AccountWithMetadata { - account: Account { - // Data must be of exact length `TOKEN_HOLDING_DATA_SIZE` - data: vec![1; TOKEN_HOLDING_DATA_SIZE - 1], - ..Account::default() + /* + #[should_panic(expected = "Invalid sender data")] + #[test] + fn test_transfer_invalid_data_size_should_fail_1() { + let pre_states = vec![ + AccountWithMetadata { + account: Account { + // Data must be of exact length `TOKEN_HOLDING_DATA_SIZE` + data: vec![1; TOKEN_HOLDING_DATA_SIZE - 1], + ..Account::default() + }, + is_authorized: true, + account_id: AccountId::new([1; 32]), }, - is_authorized: true, - account_id: AccountId::new([1; 32]), - }, - AccountWithMetadata { - account: Account::default(), - is_authorized: true, - account_id: AccountId::new([2; 32]), - }, - ]; - let _post_states = transfer(&pre_states, 10); - } + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([2; 32]), + }, + ]; + let _post_states = transfer(&pre_states, 10); + } - #[should_panic(expected = "Invalid sender data")] - #[test] - fn test_transfer_invalid_data_size_should_fail_2() { - let pre_states = vec![ - AccountWithMetadata { - account: Account { - // Data must be of exact length `TOKEN_HOLDING_DATA_SIZE` - data: vec![1; TOKEN_HOLDING_DATA_SIZE + 1], - ..Account::default() + #[should_panic(expected = "Invalid sender data")] + #[test] + fn test_transfer_invalid_data_size_should_fail_2() { + let pre_states = vec![ + AccountWithMetadata { + account: Account { + // Data must be of exact length `TOKEN_HOLDING_DATA_SIZE` + data: vec![1; TOKEN_HOLDING_DATA_SIZE + 1], + ..Account::default() + }, + is_authorized: true, + account_id: AccountId::new([1; 32]), }, - is_authorized: true, - account_id: AccountId::new([1; 32]), - }, - AccountWithMetadata { - account: Account::default(), - is_authorized: true, - account_id: AccountId::new([2; 32]), - }, - ]; - let _post_states = transfer(&pre_states, 10); - } + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([2; 32]), + }, + ]; + let _post_states = transfer(&pre_states, 10); + } - #[should_panic(expected = "Sender and recipient definition id mismatch")] - #[test] - fn test_transfer_with_different_definition_ids_should_fail() { - let pre_states = vec![ - AccountWithMetadata { - account: Account { - data: vec![1; TOKEN_HOLDING_DATA_SIZE], - ..Account::default() + #[should_panic(expected = "Sender and recipient definition id mismatch")] + #[test] + fn test_transfer_with_different_definition_ids_should_fail() { + let pre_states = vec![ + AccountWithMetadata { + account: Account { + data: vec![1; TOKEN_HOLDING_DATA_SIZE], + ..Account::default() + }, + is_authorized: true, + account_id: AccountId::new([1; 32]), }, - is_authorized: true, - account_id: AccountId::new([1; 32]), - }, - AccountWithMetadata { - account: Account { - data: vec![1] - .into_iter() - .chain(vec![2; TOKEN_HOLDING_DATA_SIZE - 1]) - .collect(), - ..Account::default() + AccountWithMetadata { + account: Account { + data: vec![1] + .into_iter() + .chain(vec![2; TOKEN_HOLDING_DATA_SIZE - 1]) + .collect(), + ..Account::default() + }, + is_authorized: true, + account_id: AccountId::new([2; 32]), }, - is_authorized: true, - account_id: AccountId::new([2; 32]), - }, - ]; - let _post_states = transfer(&pre_states, 10); - } + ]; + let _post_states = transfer(&pre_states, 10); + } - #[should_panic(expected = "Insufficient balance")] - #[test] - fn test_transfer_with_insufficient_balance_should_fail() { - let pre_states = vec![ - AccountWithMetadata { - account: Account { - // Account with balance 37 - data: vec![1; TOKEN_HOLDING_DATA_SIZE - 16] - .into_iter() - .chain(u128::to_le_bytes(37)) - .collect(), - ..Account::default() + #[should_panic(expected = "Insufficient balance")] + #[test] + fn test_transfer_with_insufficient_balance_should_fail() { + let pre_states = vec![ + AccountWithMetadata { + account: Account { + // Account with balance 37 + data: vec![1; TOKEN_HOLDING_DATA_SIZE - 16] + .into_iter() + .chain(u128::to_le_bytes(37)) + .collect(), + ..Account::default() + }, + is_authorized: true, + account_id: AccountId::new([1; 32]), }, - is_authorized: true, - account_id: AccountId::new([1; 32]), - }, - AccountWithMetadata { - account: Account { - data: vec![1; TOKEN_HOLDING_DATA_SIZE], - ..Account::default() + AccountWithMetadata { + account: Account { + data: vec![1; TOKEN_HOLDING_DATA_SIZE], + ..Account::default() + }, + is_authorized: true, + account_id: AccountId::new([2; 32]), }, - is_authorized: true, - account_id: AccountId::new([2; 32]), - }, - ]; - // Attempt to transfer 38 tokens - let _post_states = transfer(&pre_states, 38); - } + ]; + // Attempt to transfer 38 tokens + let _post_states = transfer(&pre_states, 38); + } - #[should_panic(expected = "Sender authorization is missing")] - #[test] - fn test_transfer_without_sender_authorization_should_fail() { - let pre_states = vec![ - AccountWithMetadata { - account: Account { - // Account with balance 37 - data: vec![1; TOKEN_HOLDING_DATA_SIZE - 16] - .into_iter() - .chain(u128::to_le_bytes(37)) - .collect(), - ..Account::default() + #[should_panic(expected = "Sender authorization is missing")] + #[test] + fn test_transfer_without_sender_authorization_should_fail() { + let pre_states = vec![ + AccountWithMetadata { + account: Account { + // Account with balance 37 + data: vec![1; TOKEN_HOLDING_DATA_SIZE - 16] + .into_iter() + .chain(u128::to_le_bytes(37)) + .collect(), + ..Account::default() + }, + is_authorized: false, + account_id: AccountId::new([1; 32]), }, - is_authorized: false, - account_id: AccountId::new([1; 32]), - }, - AccountWithMetadata { - account: Account { - data: vec![1; TOKEN_HOLDING_DATA_SIZE], - ..Account::default() + AccountWithMetadata { + account: Account { + data: vec![1; TOKEN_HOLDING_DATA_SIZE], + ..Account::default() + }, + is_authorized: true, + account_id: AccountId::new([2; 32]), }, - is_authorized: true, - account_id: AccountId::new([2; 32]), - }, - ]; - let _post_states = transfer(&pre_states, 37); - } + ]; + let _post_states = transfer(&pre_states, 37); + } - #[test] - fn test_transfer_with_valid_inputs_succeeds() { - let pre_states = vec![ - AccountWithMetadata { - account: Account { - // Account with balance 37 - data: vec![1; TOKEN_HOLDING_DATA_SIZE - 16] - .into_iter() - .chain(u128::to_le_bytes(37)) - .collect(), - ..Account::default() + #[test] + fn test_transfer_with_valid_inputs_succeeds() { + let pre_states = vec![ + AccountWithMetadata { + account: Account { + // Account with balance 37 + data: vec![1; TOKEN_HOLDING_DATA_SIZE - 16] + .into_iter() + .chain(u128::to_le_bytes(37)) + .collect(), + ..Account::default() + }, + is_authorized: true, + account_id: AccountId::new([1; 32]), }, - is_authorized: true, - account_id: AccountId::new([1; 32]), - }, - AccountWithMetadata { - account: Account { - // Account with balance 255 - data: vec![1; TOKEN_HOLDING_DATA_SIZE - 16] - .into_iter() - .chain(u128::to_le_bytes(255)) - .collect(), - ..Account::default() + AccountWithMetadata { + account: Account { + // Account with balance 255 + data: vec![1; TOKEN_HOLDING_DATA_SIZE - 16] + .into_iter() + .chain(u128::to_le_bytes(255)) + .collect(), + ..Account::default() + }, + is_authorized: true, + account_id: AccountId::new([2; 32]), }, - is_authorized: true, - account_id: AccountId::new([2; 32]), - }, - ]; - let post_states = transfer(&pre_states, 11); - let [sender_post, recipient_post] = post_states.try_into().ok().unwrap(); - assert_eq!( - sender_post.account().data, - vec![ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - ] - ); - assert_eq!( - recipient_post.account().data, - vec![ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 10, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - ] - ); - } + ]; + let post_states = transfer(&pre_states, 11); + let [sender_post, recipient_post] = post_states.try_into().ok().unwrap(); + assert_eq!( + sender_post.account().data, + vec![ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ] + ); + assert_eq!( + recipient_post.account().data, + vec![ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 10, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ] + ); + } - #[test] - fn test_token_initialize_account_succeeds() { - let pre_states = vec![ - AccountWithMetadata { - account: Account { - // Definition ID with - data: [0; TOKEN_DEFINITION_DATA_SIZE - 16] - .into_iter() - .chain(u128::to_le_bytes(1000)) - .collect(), - ..Account::default() + #[test] + fn test_token_initialize_account_succeeds() { + let pre_states = vec![ + AccountWithMetadata { + account: Account { + // Definition ID with + data: [0; TOKEN_DEFINITION_DATA_SIZE - 16] + .into_iter() + .chain(u128::to_le_bytes(1000)) + .collect(), + ..Account::default() + }, + is_authorized: false, + account_id: AccountId::new([1; 32]), }, - is_authorized: false, - account_id: AccountId::new([1; 32]), - }, - AccountWithMetadata { - account: Account::default(), - is_authorized: false, - account_id: AccountId::new([2; 32]), - }, - ]; - let post_states = initialize_account(&pre_states); - let [definition, holding] = post_states.try_into().ok().unwrap(); - assert_eq!(definition.account().data, pre_states[0].account.data); - assert_eq!( - holding.account().data, - vec![ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - ] - ); - } - + AccountWithMetadata { + account: Account::default(), + is_authorized: false, + account_id: AccountId::new([2; 32]), + }, + ]; + let post_states = initialize_account(&pre_states); + let [definition, holding] = post_states.try_into().ok().unwrap(); + assert_eq!(definition.account().data, pre_states[0].account.data); + assert_eq!( + holding.account().data, + vec![ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ] + ); + } + */ enum BalanceEnum { InitSupply, HoldingBalance, @@ -948,12 +1109,14 @@ mod tests { DefinitionAccountMint, HoldingSameDefMint, HoldingSameDefAuthLargeBalance, + DefinitionAccountAuthNotMintable, } enum IdEnum { PoolDefinitionId, PoolDefinitionIdDiff, HoldingId, + MetadataId, } fn helper_account_constructor(selection: AccountsEnum) -> AccountWithMetadata { @@ -966,7 +1129,7 @@ mod tests { account_type: TOKEN_DEFINITION_TYPE, name: [2; 6], total_supply: helper_balance_constructor(BalanceEnum::InitSupply), - metadata_id: AccountId::new([0;32]), + metadata_id: helper_id_constructor(IdEnum::MetadataId), }), nonce: 0, }, @@ -981,7 +1144,7 @@ mod tests { account_type: TOKEN_DEFINITION_TYPE, name: [2; 6], total_supply: helper_balance_constructor(BalanceEnum::InitSupply), - metadata_id: AccountId::new([0;32]), + metadata_id: helper_id_constructor(IdEnum::MetadataId), }), nonce: 0, }, @@ -1052,7 +1215,7 @@ mod tests { account_type: TOKEN_DEFINITION_TYPE, name: [2; 6], total_supply: helper_balance_constructor(BalanceEnum::InitSupplyBurned), - metadata_id: AccountId::new([0;32]), + metadata_id: helper_id_constructor(IdEnum::MetadataId), }), nonce: 0, }, @@ -1114,7 +1277,7 @@ mod tests { account_type: TOKEN_DEFINITION_TYPE, name: [2; 6], total_supply: helper_balance_constructor(BalanceEnum::InitSupplyMint), - metadata_id: AccountId::new([0;32]), + metadata_id: helper_id_constructor(IdEnum::MetadataId), }), nonce: 0, }, @@ -1135,6 +1298,23 @@ mod tests { is_authorized: true, account_id: helper_id_constructor(IdEnum::PoolDefinitionId), }, + AccountsEnum::DefinitionAccountAuthNotMintable => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenDefinition::into_data(TokenDefinition { + account_type: helper_token_standard_constructor( + TokenStandard::NonFungibleHolding, + ), + name: [2; 6], + total_supply: helper_balance_constructor(BalanceEnum::InitSupplyMint), + metadata_id: helper_id_constructor(IdEnum::MetadataId), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::PoolDefinitionId), + }, _ => panic!("Invalid selection"), } } @@ -1160,6 +1340,7 @@ mod tests { IdEnum::PoolDefinitionId => AccountId::new([15; 32]), IdEnum::PoolDefinitionIdDiff => AccountId::new([16; 32]), IdEnum::HoldingId => AccountId::new([17; 32]), + IdEnum::MetadataId => AccountId::new([42; 32]), } } @@ -1176,7 +1357,7 @@ mod tests { } #[test] - #[should_panic(expected = "Mismatch token definition and token holding")] + #[should_panic(expected = "Mismatch Token Definition and Token Holding")] fn test_burn_mismatch_def() { let pre_states = vec![ helper_account_constructor(AccountsEnum::DefinitionAccountAuth), @@ -1290,7 +1471,7 @@ mod tests { } #[test] - #[should_panic(expected = "Mismatch token definition and token holding")] + #[should_panic(expected = "Mismatch Token Definition and Token Holding")] fn test_mint_mismatched_token_definition() { let pre_states = vec![ helper_account_constructor(AccountsEnum::DefinitionAccountAuth), @@ -1375,4 +1556,19 @@ mod tests { helper_balance_constructor(BalanceEnum::MintOverflow), ); } + + #[test] + #[should_panic( + expected = "Token Definition's standard does not permit minting additional supply" + )] + fn test_mint_cannot_mint_unmintable_tokens() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::DefinitionAccountAuthNotMintable), + helper_account_constructor(AccountsEnum::HoldingSameDefNotAuth), + ]; + let _post_states = mint_additional_supply( + &pre_states, + helper_balance_constructor(BalanceEnum::MintSuccess), + ); + } } From f77481f3b59bd569c70aeb11a6ebdde881d0eb44 Mon Sep 17 00:00:00 2001 From: Pravdyvy Date: Thu, 11 Dec 2025 14:46:16 +0200 Subject: [PATCH 03/33] feat: mint and burn --- integration_tests/src/test_suite_map.rs | 240 +++++ nssa/program_methods/guest/src/bin/token.rs | 4 +- .../src/cli/programs/native_token_transfer.rs | 11 +- wallet/src/cli/programs/pinata.rs | 3 +- wallet/src/cli/programs/token.rs | 824 +++++++++++++++++- wallet/src/lib.rs | 38 +- wallet/src/program_facades/token.rs | 388 +++++++++ 7 files changed, 1477 insertions(+), 31 deletions(-) diff --git a/integration_tests/src/test_suite_map.rs b/integration_tests/src/test_suite_map.rs index 8012e17..eb21438 100644 --- a/integration_tests/src/test_suite_map.rs +++ b/integration_tests/src/test_suite_map.rs @@ -1548,6 +1548,246 @@ pub fn prepare_function_map() -> HashMap { info!("Success!"); } + /// This test creates a new token using the token program. After creating the token, the test + /// executes a token transfer to a new account then mint, then burn. + #[nssa_integration_test] + pub async fn test_success_token_program_burn_mint() { + info!("########## test_success_token_program_burn_mint ##########"); + let wallet_config = fetch_config().await.unwrap(); + + // Create new account for the token definition + let SubcommandReturnValue::RegisterAccount { + account_id: definition_account_id, + } = wallet::cli::execute_subcommand(Command::Account(AccountSubcommand::New( + NewSubcommand::Public { cci: None }, + ))) + .await + .unwrap() + else { + panic!("invalid subcommand return value"); + }; + // Create new account for the token supply holder + let SubcommandReturnValue::RegisterAccount { + account_id: supply_account_id, + } = wallet::cli::execute_subcommand(Command::Account(AccountSubcommand::New( + NewSubcommand::Public { cci: None }, + ))) + .await + .unwrap() + else { + panic!("invalid subcommand return value"); + }; + // Create new account for receiving a token transaction + let SubcommandReturnValue::RegisterAccount { + account_id: recipient_account_id, + } = wallet::cli::execute_subcommand(Command::Account(AccountSubcommand::New( + NewSubcommand::Public { cci: None }, + ))) + .await + .unwrap() + else { + panic!("invalid subcommand return value"); + }; + + // Create new token + let subcommand = TokenProgramAgnosticSubcommand::New { + definition_account_id: make_public_account_input_from_str( + &definition_account_id.to_string(), + ), + supply_account_id: make_public_account_input_from_str(&supply_account_id.to_string()), + name: "A NAME".to_string(), + total_supply: 37, + }; + wallet::cli::execute_subcommand(Command::Token(subcommand)) + .await + .unwrap(); + info!("Waiting for next block creation"); + tokio::time::sleep(Duration::from_secs(TIME_TO_WAIT_FOR_BLOCK_SECONDS)).await; + + let seq_client = SequencerClient::new(wallet_config.sequencer_addr.clone()).unwrap(); + + // Check the status of the token definition account is the expected after the execution + let definition_acc = seq_client + .get_account(definition_account_id.to_string()) + .await + .unwrap() + .account; + + assert_eq!(definition_acc.program_owner, Program::token().id()); + // The data of a token definition account has the following layout: + // [ 0x00 || name (6 bytes) || total supply (little endian 16 bytes) ] + assert_eq!( + definition_acc.data.as_ref(), + &[ + 0, 65, 32, 78, 65, 77, 69, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ] + ); + + // Check the status of the token holding account with the total supply is the expected after + // the execution + let supply_acc = seq_client + .get_account(supply_account_id.to_string()) + .await + .unwrap() + .account; + + // The account must be owned by the token program + assert_eq!(supply_acc.program_owner, Program::token().id()); + // The data of a token definition account has the following layout: + // [ 0x01 || corresponding_token_definition_id (32 bytes) || balance (little endian 16 + // bytes) ] First byte of the data equal to 1 means it's a token holding account + assert_eq!(supply_acc.data.as_ref()[0], 1); + // Bytes from 1 to 33 represent the id of the token this account is associated with. + // In this example, this is a token account of the newly created token, so it is expected + // to be equal to the account_id of the token definition account. + assert_eq!( + &supply_acc.data.as_ref()[1..33], + definition_account_id.to_bytes() + ); + assert_eq!( + u128::from_le_bytes(supply_acc.data[33..].try_into().unwrap()), + 37 + ); + + // Transfer 7 tokens from `supply_acc` to the account at account_id `recipient_account_id` + let subcommand = TokenProgramAgnosticSubcommand::Send { + from: make_public_account_input_from_str(&supply_account_id.to_string()), + to: Some(make_public_account_input_from_str( + &recipient_account_id.to_string(), + )), + to_npk: None, + to_ipk: None, + amount: 7, + }; + + wallet::cli::execute_subcommand(Command::Token(subcommand)) + .await + .unwrap(); + info!("Waiting for next block creation"); + tokio::time::sleep(Duration::from_secs(TIME_TO_WAIT_FOR_BLOCK_SECONDS)).await; + + // Check the status of the account at `supply_account_id` is the expected after the + // execution + let supply_acc = seq_client + .get_account(supply_account_id.to_string()) + .await + .unwrap() + .account; + // The account must be owned by the token program + assert_eq!(supply_acc.program_owner, Program::token().id()); + // First byte equal to 1 means it's a token holding account + assert_eq!(supply_acc.data[0], 1); + // Bytes from 1 to 33 represent the id of the token this account is associated with. + assert_eq!(&supply_acc.data[1..33], definition_account_id.to_bytes()); + assert_eq!( + u128::from_le_bytes(supply_acc.data[33..].try_into().unwrap()), + 30 + ); + + // Check the status of the account at `recipient_account_id` is the expected after the + // execution + let recipient_acc = seq_client + .get_account(recipient_account_id.to_string()) + .await + .unwrap() + .account; + + // The account must be owned by the token program + assert_eq!(recipient_acc.program_owner, Program::token().id()); + // First byte equal to 1 means it's a token holding account + assert_eq!(recipient_acc.data[0], 1); + // Bytes from 1 to 33 represent the id of the token this account is associated with. + assert_eq!(&recipient_acc.data[1..33], definition_account_id.to_bytes()); + assert_eq!( + u128::from_le_bytes(recipient_acc.data[33..].try_into().unwrap()), + 7 + ); + + // Burn 3 tokens from `recipient_acc` + let subcommand = TokenProgramAgnosticSubcommand::Burn { + definition: Some(make_public_account_input_from_str(&definition_account_id.to_string())), + definition_npk: None, + definition_ipk: None, + holder: make_public_account_input_from_str(&recipient_account_id.to_string()), + amount: 3, + }; + + wallet::cli::execute_subcommand(Command::Token(subcommand)) + .await + .unwrap(); + info!("Waiting for next block creation"); + tokio::time::sleep(Duration::from_secs(TIME_TO_WAIT_FOR_BLOCK_SECONDS)).await; + + // Check the status of the token definition account is the expected after the execution + let definition_acc = seq_client + .get_account(definition_account_id.to_string()) + .await + .unwrap() + .account; + + assert_eq!( + definition_acc.data.as_ref(), + &[ + 0, 65, 32, 78, 65, 77, 69, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ] + ); + + // Check the status of the account at `recipient_account_id` is the expected after the + // execution + let recipient_acc = seq_client + .get_account(recipient_account_id.to_string()) + .await + .unwrap() + .account; + + assert_eq!( + u128::from_le_bytes(recipient_acc.data[33..].try_into().unwrap()), + 4 + ); + + // Mint 10 tokens at `recipient_acc` + let subcommand = TokenProgramAgnosticSubcommand::Mint { + definition: make_public_account_input_from_str(&definition_account_id.to_string()), + holder: Some(make_public_account_input_from_str(&recipient_account_id.to_string())), + holder_npk: None, + holder_ipk: None, + amount: 10, + }; + + wallet::cli::execute_subcommand(Command::Token(subcommand)) + .await + .unwrap(); + info!("Waiting for next block creation"); + tokio::time::sleep(Duration::from_secs(TIME_TO_WAIT_FOR_BLOCK_SECONDS)).await; + + // Check the status of the token definition account is the expected after the execution + let definition_acc = seq_client + .get_account(definition_account_id.to_string()) + .await + .unwrap() + .account; + + assert_eq!( + definition_acc.data.as_ref(), + &[ + 0, 65, 32, 78, 65, 77, 69, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ] + ); + + // Check the status of the account at `recipient_account_id` is the expected after the + // execution + let recipient_acc = seq_client + .get_account(recipient_account_id.to_string()) + .await + .unwrap() + .account; + + assert_eq!( + u128::from_le_bytes(recipient_acc.data[33..].try_into().unwrap()), + 14 + ); + } + #[nssa_integration_test] pub async fn test_pinata() { info!("########## test_pinata ##########"); diff --git a/nssa/program_methods/guest/src/bin/token.rs b/nssa/program_methods/guest/src/bin/token.rs index 7c9c0a4..4e9336b 100644 --- a/nssa/program_methods/guest/src/bin/token.rs +++ b/nssa/program_methods/guest/src/bin/token.rs @@ -26,13 +26,13 @@ use nssa_core::{ // Arguments to this function are: // * Two accounts: [definition_account, holding_account]. // * Authorization required: holding_account -// * An instruction data byte string of length 23, indicating the balance to burn with the folloiwng layout +// * An instruction data byte string of length 23, indicating the balance to burn with the following layout // [0x03 || amount (little-endian 16 bytes) || 0x00 || 0x00 || 0x00 || 0x00 || 0x00 || 0x00]. // 5. Mint additional supply of tokens tokens to a Token Holding account (thus increasing total supply) // Arguments to this function are: // * Two accounts: [definition_account, holding_account]. // * Authorization required: definition_account -// * An instruction data byte string of length 23, indicating the balance to mint with the folloiwng layout +// * An instruction data byte string of length 23, indicating the balance to mint with the following layout // [0x04 || amount (little-endian 16 bytes) || 0x00 || 0x00 || 0x00 || 0x00 || 0x00 || 0x00]. const TOKEN_DEFINITION_TYPE: u8 = 0; diff --git a/wallet/src/cli/programs/native_token_transfer.rs b/wallet/src/cli/programs/native_token_transfer.rs index 9dc72ae..7868a7c 100644 --- a/wallet/src/cli/programs/native_token_transfer.rs +++ b/wallet/src/cli/programs/native_token_transfer.rs @@ -4,6 +4,7 @@ use common::transaction::NSSATransaction; use nssa::AccountId; use crate::{ + AccDecodeData::Decode, WalletCore, cli::{SubcommandReturnValue, WalletSubcommand}, helperfunctions::{AccountPrivacyKind, parse_addr_with_privacy_prefix}, @@ -87,7 +88,7 @@ impl WalletSubcommand for AuthTransferSubcommand { .await?; if let NSSATransaction::PrivacyPreserving(tx) = transfer_tx { - let acc_decode_data = vec![(secret, account_id)]; + let acc_decode_data = vec![Decode(secret, account_id)]; wallet_core.decode_insert_privacy_preserving_transaction_results( tx, @@ -328,7 +329,7 @@ impl WalletSubcommand for NativeTokenTransferProgramSubcommandPrivate { .await?; if let NSSATransaction::PrivacyPreserving(tx) = transfer_tx { - let acc_decode_data = vec![(secret_from, from), (secret_to, to)]; + let acc_decode_data = vec![Decode(secret_from, from), Decode(secret_to, to)]; wallet_core.decode_insert_privacy_preserving_transaction_results( tx, @@ -372,7 +373,7 @@ impl WalletSubcommand for NativeTokenTransferProgramSubcommandPrivate { .await?; if let NSSATransaction::PrivacyPreserving(tx) = transfer_tx { - let acc_decode_data = vec![(secret_from, from)]; + let acc_decode_data = vec![Decode(secret_from, from)]; wallet_core.decode_insert_privacy_preserving_transaction_results( tx, @@ -412,7 +413,7 @@ impl WalletSubcommand for NativeTokenTransferProgramSubcommandShielded { .await?; if let NSSATransaction::PrivacyPreserving(tx) = transfer_tx { - let acc_decode_data = vec![(secret, to)]; + let acc_decode_data = vec![Decode(secret, to)]; wallet_core.decode_insert_privacy_preserving_transaction_results( tx, @@ -491,7 +492,7 @@ impl WalletSubcommand for NativeTokenTransferProgramSubcommand { .await?; if let NSSATransaction::PrivacyPreserving(tx) = transfer_tx { - let acc_decode_data = vec![(secret, from)]; + let acc_decode_data = vec![Decode(secret, from)]; wallet_core.decode_insert_privacy_preserving_transaction_results( tx, diff --git a/wallet/src/cli/programs/pinata.rs b/wallet/src/cli/programs/pinata.rs index 7712a7c..e0b6570 100644 --- a/wallet/src/cli/programs/pinata.rs +++ b/wallet/src/cli/programs/pinata.rs @@ -3,6 +3,7 @@ use clap::Subcommand; use common::{PINATA_BASE58, transaction::NSSATransaction}; use crate::{ + AccDecodeData::Decode, WalletCore, cli::{SubcommandReturnValue, WalletSubcommand}, helperfunctions::{AccountPrivacyKind, parse_addr_with_privacy_prefix}, @@ -159,7 +160,7 @@ impl WalletSubcommand for PinataProgramSubcommandPrivate { println!("Transaction data is {transfer_tx:?}"); if let NSSATransaction::PrivacyPreserving(tx) = transfer_tx { - let acc_decode_data = vec![(secret_winner, winner_account_id)]; + let acc_decode_data = vec![Decode(secret_winner, winner_account_id)]; wallet_core.decode_insert_privacy_preserving_transaction_results( tx, diff --git a/wallet/src/cli/programs/token.rs b/wallet/src/cli/programs/token.rs index 4480a1e..24f314e 100644 --- a/wallet/src/cli/programs/token.rs +++ b/wallet/src/cli/programs/token.rs @@ -4,6 +4,7 @@ use common::transaction::NSSATransaction; use nssa::AccountId; use crate::{ + AccDecodeData::{Decode, Skip}, WalletCore, cli::{SubcommandReturnValue, WalletSubcommand}, helperfunctions::{AccountPrivacyKind, parse_addr_with_privacy_prefix}, @@ -49,6 +50,56 @@ pub enum TokenProgramAgnosticSubcommand { #[arg(long)] amount: u128, }, + /// Burn tokens on `holder`, modify `definition`. + /// + /// `holder` is owned + /// + /// If `definition` is private, then `definition` and (`definition_npk` , `definition_ipk`) is a + /// mutually exclusive patterns. + /// + /// First is used for owned accounts, second otherwise. + Burn { + /// definition - valid 32 byte base58 string with privacy prefix + #[arg(long)] + definition: Option, + /// definition_npk - valid 32 byte hex string + #[arg(long)] + definition_npk: Option, + /// definition_ipk - valid 33 byte hex string + #[arg(long)] + definition_ipk: Option, + /// holder - valid 32 byte base58 string with privacy prefix + #[arg(long)] + holder: String, + /// amount - amount of balance to burn + #[arg(long)] + amount: u128, + }, + /// Mint tokens on `holder`, modify `definition`. + /// + /// `definition` is owned + /// + /// If `holder` is private, then `holder` and (`holder_npk` , `holder_ipk`) is a mutually + /// exclusive patterns. + /// + /// First is used for owned accounts, second otherwise. + Mint { + /// definition - valid 32 byte base58 string with privacy prefix + #[arg(long)] + definition: String, + /// holder - valid 32 byte base58 string with privacy prefix + #[arg(long)] + holder: Option, + /// holder_npk - valid 32 byte hex string + #[arg(long)] + holder_npk: Option, + /// to_ipk - valid 33 byte hex string + #[arg(long)] + holder_ipk: Option, + /// amount - amount of balance to mint + #[arg(long)] + amount: u128, + }, } impl WalletSubcommand for TokenProgramAgnosticSubcommand { @@ -201,6 +252,189 @@ impl WalletSubcommand for TokenProgramAgnosticSubcommand { } }; + underlying_subcommand.handle_subcommand(wallet_core).await + } + TokenProgramAgnosticSubcommand::Burn { + definition, + definition_npk, + definition_ipk, + holder, + amount, + } => { + let underlying_subcommand = match (definition, definition_npk, definition_ipk) { + (None, None, None) => { + anyhow::bail!( + "Provide either account account_id of definition or their public keys" + ); + } + (Some(_), Some(_), Some(_)) => { + anyhow::bail!( + "Provide only one variant: either account_id of definition or their public keys" + ); + } + (_, Some(_), None) | (_, None, Some(_)) => { + anyhow::bail!("List of public keys is uncomplete"); + } + (Some(definition), None, None) => { + let (definition, definition_privacy) = + parse_addr_with_privacy_prefix(&definition)?; + let (holder, holder_privacy) = parse_addr_with_privacy_prefix(&holder)?; + + match (definition_privacy, holder_privacy) { + (AccountPrivacyKind::Public, AccountPrivacyKind::Public) => { + TokenProgramSubcommand::Public( + TokenProgramSubcommandPublic::BurnToken { + definition_account_id: definition, + holder_account_id: holder, + amount, + }, + ) + } + (AccountPrivacyKind::Private, AccountPrivacyKind::Private) => { + TokenProgramSubcommand::Private( + TokenProgramSubcommandPrivate::BurnTokenPrivateOwned { + definition_account_id: definition, + holder_account_id: holder, + amount, + }, + ) + } + (AccountPrivacyKind::Private, AccountPrivacyKind::Public) => { + TokenProgramSubcommand::Deshielded( + TokenProgramSubcommandDeshielded::BurnTokenDeshieldedOwned { + definition_account_id: definition, + holder_account_id: holder, + amount, + }, + ) + } + (AccountPrivacyKind::Public, AccountPrivacyKind::Private) => { + TokenProgramSubcommand::Shielded( + TokenProgramSubcommandShielded::BurnTokenShielded { + definition_account_id: definition, + holder_account_id: holder, + amount, + }, + ) + } + } + } + (None, Some(definition_npk), Some(definition_ipk)) => { + let (holder, holder_privacy) = parse_addr_with_privacy_prefix(&holder)?; + + match holder_privacy { + AccountPrivacyKind::Private => TokenProgramSubcommand::Private( + TokenProgramSubcommandPrivate::BurnTokenPrivateForeign { + definition_npk, + definition_ipk, + holder_account_id: holder, + amount, + }, + ), + AccountPrivacyKind::Public => TokenProgramSubcommand::Deshielded( + TokenProgramSubcommandDeshielded::BurnTokenDeshieldedForeign { + definition_npk, + definition_ipk, + holder_account_id: holder, + amount, + }, + ), + } + } + }; + + underlying_subcommand.handle_subcommand(wallet_core).await + } + TokenProgramAgnosticSubcommand::Mint { + definition, + holder, + holder_npk, + holder_ipk, + amount, + } => { + let underlying_subcommand = match (holder, holder_npk, holder_ipk) { + (None, None, None) => { + anyhow::bail!( + "Provide either account account_id of holder or their public keys" + ); + } + (Some(_), Some(_), Some(_)) => { + anyhow::bail!( + "Provide only one variant: either account_id of holder or their public keys" + ); + } + (_, Some(_), None) | (_, None, Some(_)) => { + anyhow::bail!("List of public keys is uncomplete"); + } + (Some(holder), None, None) => { + let (definition, definition_privacy) = + parse_addr_with_privacy_prefix(&definition)?; + let (holder, holder_privacy) = parse_addr_with_privacy_prefix(&holder)?; + + match (definition_privacy, holder_privacy) { + (AccountPrivacyKind::Public, AccountPrivacyKind::Public) => { + TokenProgramSubcommand::Public( + TokenProgramSubcommandPublic::MintToken { + definition_account_id: definition, + holder_account_id: holder, + amount, + }, + ) + } + (AccountPrivacyKind::Private, AccountPrivacyKind::Private) => { + TokenProgramSubcommand::Private( + TokenProgramSubcommandPrivate::MintTokenPrivateOwned { + definition_account_id: definition, + holder_account_id: holder, + amount, + }, + ) + } + (AccountPrivacyKind::Private, AccountPrivacyKind::Public) => { + TokenProgramSubcommand::Deshielded( + TokenProgramSubcommandDeshielded::MintTokenDeshielded { + definition_account_id: definition, + holder_account_id: holder, + amount, + }, + ) + } + (AccountPrivacyKind::Public, AccountPrivacyKind::Private) => { + TokenProgramSubcommand::Shielded( + TokenProgramSubcommandShielded::MintTokenShieldedOwned { + definition_account_id: definition, + holder_account_id: holder, + amount, + }, + ) + } + } + } + (None, Some(holder_npk), Some(holder_ipk)) => { + let (definition, definition_privacy) = + parse_addr_with_privacy_prefix(&definition)?; + + match definition_privacy { + AccountPrivacyKind::Private => TokenProgramSubcommand::Private( + TokenProgramSubcommandPrivate::MintTokenPrivateForeign { + definition_account_id: definition, + holder_npk, + holder_ipk, + amount, + }, + ), + AccountPrivacyKind::Public => TokenProgramSubcommand::Shielded( + TokenProgramSubcommandShielded::MintTokenShieldedForeign { + definition_account_id: definition, + holder_npk, + holder_ipk, + amount, + }, + ), + } + } + }; + underlying_subcommand.handle_subcommand(wallet_core).await } } @@ -239,6 +473,24 @@ pub enum TokenProgramSubcommandPublic { #[arg(short, long)] balance_to_move: u128, }, + // Burn tokens using the token program + BurnToken { + #[arg(short, long)] + definition_account_id: String, + #[arg(short, long)] + holder_account_id: String, + #[arg(short, long)] + amount: u128, + }, + // Transfer tokens using the token program + MintToken { + #[arg(short, long)] + definition_account_id: String, + #[arg(short, long)] + holder_account_id: String, + #[arg(short, long)] + amount: u128, + }, } /// Represents generic private CLI subcommand for a wallet working with token_program @@ -266,6 +518,46 @@ pub enum TokenProgramSubcommandPrivate { #[arg(short, long)] balance_to_move: u128, }, + // Burn tokens using the token program + BurnTokenPrivateOwned { + #[arg(short, long)] + definition_account_id: String, + #[arg(short, long)] + holder_account_id: String, + #[arg(short, long)] + amount: u128, + }, + // Transfer tokens using the token program + MintTokenPrivateOwned { + #[arg(short, long)] + definition_account_id: String, + #[arg(short, long)] + holder_account_id: String, + #[arg(short, long)] + amount: u128, + }, + // Burn tokens using the token program + BurnTokenPrivateForeign { + #[arg(short, long)] + definition_npk: String, + #[arg(short, long)] + definition_ipk: String, + #[arg(short, long)] + holder_account_id: String, + #[arg(short, long)] + amount: u128, + }, + // Transfer tokens using the token program + MintTokenPrivateForeign { + #[arg(short, long)] + definition_account_id: String, + #[arg(short, long)] + holder_npk: String, + #[arg(short, long)] + holder_ipk: String, + #[arg(short, long)] + amount: u128, + }, } /// Represents deshielded public CLI subcommand for a wallet working with token_program @@ -280,6 +572,35 @@ pub enum TokenProgramSubcommandDeshielded { #[arg(short, long)] balance_to_move: u128, }, + // Burn tokens using the token program + BurnTokenDeshieldedOwned { + #[arg(short, long)] + definition_account_id: String, + #[arg(short, long)] + holder_account_id: String, + #[arg(short, long)] + amount: u128, + }, + // Transfer tokens using the token program + MintTokenDeshielded { + #[arg(short, long)] + definition_account_id: String, + #[arg(short, long)] + holder_account_id: String, + #[arg(short, long)] + amount: u128, + }, + // Burn tokens using the token program + BurnTokenDeshieldedForeign { + #[arg(short, long)] + definition_npk: String, + #[arg(short, long)] + definition_ipk: String, + #[arg(short, long)] + holder_account_id: String, + #[arg(short, long)] + amount: u128, + }, } /// Represents generic shielded CLI subcommand for a wallet working with token_program @@ -307,6 +628,35 @@ pub enum TokenProgramSubcommandShielded { #[arg(short, long)] balance_to_move: u128, }, + // Burn tokens using the token program + BurnTokenShielded { + #[arg(short, long)] + definition_account_id: String, + #[arg(short, long)] + holder_account_id: String, + #[arg(short, long)] + amount: u128, + }, + // Transfer tokens using the token program + MintTokenShieldedOwned { + #[arg(short, long)] + definition_account_id: String, + #[arg(short, long)] + holder_account_id: String, + #[arg(short, long)] + amount: u128, + }, + // Transfer tokens using the token program + MintTokenShieldedForeign { + #[arg(short, long)] + definition_account_id: String, + #[arg(short, long)] + holder_npk: String, + #[arg(short, long)] + holder_ipk: String, + #[arg(short, long)] + amount: u128, + }, } /// Represents generic initialization subcommand for a wallet working with token_program @@ -386,6 +736,34 @@ impl WalletSubcommand for TokenProgramSubcommandPublic { .await?; Ok(SubcommandReturnValue::Empty) } + TokenProgramSubcommandPublic::BurnToken { + definition_account_id, + holder_account_id, + amount, + } => { + Token(wallet_core) + .send_burn_transaction( + definition_account_id.parse().unwrap(), + holder_account_id.parse().unwrap(), + amount, + ) + .await?; + Ok(SubcommandReturnValue::Empty) + } + TokenProgramSubcommandPublic::MintToken { + definition_account_id, + holder_account_id, + amount, + } => { + Token(wallet_core) + .send_mint_transaction( + definition_account_id.parse().unwrap(), + holder_account_id.parse().unwrap(), + amount, + ) + .await?; + Ok(SubcommandReturnValue::Empty) + } } } } @@ -421,8 +799,8 @@ impl WalletSubcommand for TokenProgramSubcommandPrivate { if let NSSATransaction::PrivacyPreserving(tx) = transfer_tx { let acc_decode_data = vec![ - (secret_sender, sender_account_id), - (secret_recipient, recipient_account_id), + Decode(secret_sender, sender_account_id), + Decode(secret_recipient, recipient_account_id), ]; wallet_core.decode_insert_privacy_preserving_transaction_results( @@ -473,7 +851,191 @@ impl WalletSubcommand for TokenProgramSubcommandPrivate { .await?; if let NSSATransaction::PrivacyPreserving(tx) = transfer_tx { - let acc_decode_data = vec![(secret_sender, sender_account_id)]; + let acc_decode_data = vec![Decode(secret_sender, sender_account_id)]; + + wallet_core.decode_insert_privacy_preserving_transaction_results( + tx, + &acc_decode_data, + )?; + } + + let path = wallet_core.store_persistent_data().await?; + + println!("Stored persistent accounts at {path:#?}"); + + Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) + } + TokenProgramSubcommandPrivate::BurnTokenPrivateOwned { + definition_account_id, + holder_account_id, + amount, + } => { + let definition_account_id: AccountId = definition_account_id.parse().unwrap(); + let holder_account_id: AccountId = holder_account_id.parse().unwrap(); + + let (res, [secret_definition, secret_holder]) = Token(wallet_core) + .send_burn_transaction_private_owned_account( + definition_account_id, + holder_account_id, + amount, + ) + .await?; + + println!("Results of tx send are {res:#?}"); + + let tx_hash = res.tx_hash; + let transfer_tx = wallet_core + .poll_native_token_transfer(tx_hash.clone()) + .await?; + + if let NSSATransaction::PrivacyPreserving(tx) = transfer_tx { + let acc_decode_data = vec![ + Decode(secret_definition, definition_account_id), + Decode(secret_holder, holder_account_id), + ]; + + wallet_core.decode_insert_privacy_preserving_transaction_results( + tx, + &acc_decode_data, + )?; + } + + let path = wallet_core.store_persistent_data().await?; + + println!("Stored persistent accounts at {path:#?}"); + + Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) + } + TokenProgramSubcommandPrivate::BurnTokenPrivateForeign { + definition_npk, + definition_ipk, + holder_account_id, + amount, + } => { + let definition_npk_res = hex::decode(definition_npk)?; + let mut definition_npk = [0; 32]; + definition_npk.copy_from_slice(&definition_npk_res); + let definition_npk = nssa_core::NullifierPublicKey(definition_npk); + + let definition_ipk_res = hex::decode(definition_ipk)?; + let mut definition_ipk = [0u8; 33]; + definition_ipk.copy_from_slice(&definition_ipk_res); + let definition_ipk = nssa_core::encryption::shared_key_derivation::Secp256k1Point( + definition_ipk.to_vec(), + ); + + let holder_account_id: AccountId = holder_account_id.parse().unwrap(); + + let (res, [_, secret_holder]) = Token(wallet_core) + .send_burn_transaction_private_foreign_account( + definition_npk, + definition_ipk, + holder_account_id, + amount, + ) + .await?; + + println!("Results of tx send are {res:#?}"); + + let tx_hash = res.tx_hash; + let transfer_tx = wallet_core + .poll_native_token_transfer(tx_hash.clone()) + .await?; + + if let NSSATransaction::PrivacyPreserving(tx) = transfer_tx { + let acc_decode_data = vec![Skip, Decode(secret_holder, holder_account_id)]; + + wallet_core.decode_insert_privacy_preserving_transaction_results( + tx, + &acc_decode_data, + )?; + } + + let path = wallet_core.store_persistent_data().await?; + + println!("Stored persistent accounts at {path:#?}"); + + Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) + } + TokenProgramSubcommandPrivate::MintTokenPrivateOwned { + definition_account_id, + holder_account_id, + amount, + } => { + let definition_account_id: AccountId = definition_account_id.parse().unwrap(); + let holder_account_id: AccountId = holder_account_id.parse().unwrap(); + + let (res, [secret_definition, secret_holder]) = Token(wallet_core) + .send_mint_transaction_private_owned_account( + definition_account_id, + holder_account_id, + amount, + ) + .await?; + + println!("Results of tx send are {res:#?}"); + + let tx_hash = res.tx_hash; + let transfer_tx = wallet_core + .poll_native_token_transfer(tx_hash.clone()) + .await?; + + if let NSSATransaction::PrivacyPreserving(tx) = transfer_tx { + let acc_decode_data = vec![ + Decode(secret_definition, definition_account_id), + Decode(secret_holder, holder_account_id), + ]; + + wallet_core.decode_insert_privacy_preserving_transaction_results( + tx, + &acc_decode_data, + )?; + } + + let path = wallet_core.store_persistent_data().await?; + + println!("Stored persistent accounts at {path:#?}"); + + Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) + } + TokenProgramSubcommandPrivate::MintTokenPrivateForeign { + definition_account_id, + holder_npk, + holder_ipk, + amount, + } => { + let definition_account_id: AccountId = definition_account_id.parse().unwrap(); + + let holder_npk_res = hex::decode(holder_npk)?; + let mut holder_npk = [0; 32]; + holder_npk.copy_from_slice(&holder_npk_res); + let holder_npk = nssa_core::NullifierPublicKey(holder_npk); + + let holder_ipk_res = hex::decode(holder_ipk)?; + let mut holder_ipk = [0u8; 33]; + holder_ipk.copy_from_slice(&holder_ipk_res); + let holder_ipk = nssa_core::encryption::shared_key_derivation::Secp256k1Point( + holder_ipk.to_vec(), + ); + + let (res, [secret_definition, _]) = Token(wallet_core) + .send_mint_transaction_private_foreign_account( + definition_account_id, + holder_npk, + holder_ipk, + amount, + ) + .await?; + + println!("Results of tx send are {res:#?}"); + + let tx_hash = res.tx_hash; + let transfer_tx = wallet_core + .poll_native_token_transfer(tx_hash.clone()) + .await?; + + if let NSSATransaction::PrivacyPreserving(tx) = transfer_tx { + let acc_decode_data = vec![Decode(secret_definition, definition_account_id)]; wallet_core.decode_insert_privacy_preserving_transaction_results( tx, @@ -521,7 +1083,129 @@ impl WalletSubcommand for TokenProgramSubcommandDeshielded { .await?; if let NSSATransaction::PrivacyPreserving(tx) = transfer_tx { - let acc_decode_data = vec![(secret_sender, sender_account_id)]; + let acc_decode_data = vec![Decode(secret_sender, sender_account_id)]; + + wallet_core.decode_insert_privacy_preserving_transaction_results( + tx, + &acc_decode_data, + )?; + } + + let path = wallet_core.store_persistent_data().await?; + + println!("Stored persistent accounts at {path:#?}"); + + Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) + } + TokenProgramSubcommandDeshielded::BurnTokenDeshieldedOwned { + definition_account_id, + holder_account_id, + amount, + } => { + let definition_account_id: AccountId = definition_account_id.parse().unwrap(); + let holder_account_id: AccountId = holder_account_id.parse().unwrap(); + + let (res, secret_definition) = Token(wallet_core) + .send_burn_transaction_deshielded_owned_account( + definition_account_id, + holder_account_id, + amount, + ) + .await?; + + println!("Results of tx send are {res:#?}"); + + let tx_hash = res.tx_hash; + let transfer_tx = wallet_core + .poll_native_token_transfer(tx_hash.clone()) + .await?; + + if let NSSATransaction::PrivacyPreserving(tx) = transfer_tx { + let acc_decode_data = vec![Decode(secret_definition, definition_account_id)]; + + wallet_core.decode_insert_privacy_preserving_transaction_results( + tx, + &acc_decode_data, + )?; + } + + let path = wallet_core.store_persistent_data().await?; + + println!("Stored persistent accounts at {path:#?}"); + + Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) + } + TokenProgramSubcommandDeshielded::BurnTokenDeshieldedForeign { + definition_npk, + definition_ipk, + holder_account_id, + amount, + } => { + let definition_npk_res = hex::decode(definition_npk)?; + let mut definition_npk = [0; 32]; + definition_npk.copy_from_slice(&definition_npk_res); + let definition_npk = nssa_core::NullifierPublicKey(definition_npk); + + let definition_ipk_res = hex::decode(definition_ipk)?; + let mut definition_ipk = [0u8; 33]; + definition_ipk.copy_from_slice(&definition_ipk_res); + let definition_ipk = nssa_core::encryption::shared_key_derivation::Secp256k1Point( + definition_ipk.to_vec(), + ); + + let holder_account_id: AccountId = holder_account_id.parse().unwrap(); + + let (res, _) = Token(wallet_core) + .send_burn_transaction_deshielded_foreign_account( + definition_npk, + definition_ipk, + holder_account_id, + amount, + ) + .await?; + + println!("Results of tx send are {res:#?}"); + + let tx_hash = res.tx_hash; + let transfer_tx = wallet_core + .poll_native_token_transfer(tx_hash.clone()) + .await?; + + if let NSSATransaction::PrivacyPreserving(tx) = transfer_tx { + println!("Transaction data is {:?}", tx.message); + } + + let path = wallet_core.store_persistent_data().await?; + + println!("Stored persistent accounts at {path:#?}"); + + Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) + } + TokenProgramSubcommandDeshielded::MintTokenDeshielded { + definition_account_id, + holder_account_id, + amount, + } => { + let definition_account_id: AccountId = definition_account_id.parse().unwrap(); + let holder_account_id: AccountId = holder_account_id.parse().unwrap(); + + let (res, secret_definition) = Token(wallet_core) + .send_mint_transaction_deshielded( + definition_account_id, + holder_account_id, + amount, + ) + .await?; + + println!("Results of tx send are {res:#?}"); + + let tx_hash = res.tx_hash; + let transfer_tx = wallet_core + .poll_native_token_transfer(tx_hash.clone()) + .await?; + + if let NSSATransaction::PrivacyPreserving(tx) = transfer_tx { + let acc_decode_data = vec![Decode(secret_definition, definition_account_id)]; wallet_core.decode_insert_privacy_preserving_transaction_results( tx, @@ -614,7 +1298,7 @@ impl WalletSubcommand for TokenProgramSubcommandShielded { .await?; if let NSSATransaction::PrivacyPreserving(tx) = transfer_tx { - let acc_decode_data = vec![(secret_recipient, recipient_account_id)]; + let acc_decode_data = vec![Decode(secret_recipient, recipient_account_id)]; wallet_core.decode_insert_privacy_preserving_transaction_results( tx, @@ -626,6 +1310,128 @@ impl WalletSubcommand for TokenProgramSubcommandShielded { println!("Stored persistent accounts at {path:#?}"); + Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) + } + TokenProgramSubcommandShielded::BurnTokenShielded { + definition_account_id, + holder_account_id, + amount, + } => { + let definition_account_id: AccountId = definition_account_id.parse().unwrap(); + let holder_account_id: AccountId = holder_account_id.parse().unwrap(); + + let (res, secret_holder) = Token(wallet_core) + .send_burn_transaction_shielded( + definition_account_id, + holder_account_id, + amount, + ) + .await?; + + println!("Results of tx send are {res:#?}"); + + let tx_hash = res.tx_hash; + let transfer_tx = wallet_core + .poll_native_token_transfer(tx_hash.clone()) + .await?; + + if let NSSATransaction::PrivacyPreserving(tx) = transfer_tx { + let acc_decode_data = vec![Decode(secret_holder, holder_account_id)]; + + wallet_core.decode_insert_privacy_preserving_transaction_results( + tx, + &acc_decode_data, + )?; + } + + let path = wallet_core.store_persistent_data().await?; + + println!("Stored persistent accounts at {path:#?}"); + + Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) + } + TokenProgramSubcommandShielded::MintTokenShieldedOwned { + definition_account_id, + holder_account_id, + amount, + } => { + let definition_account_id: AccountId = definition_account_id.parse().unwrap(); + let holder_account_id: AccountId = holder_account_id.parse().unwrap(); + + let (res, secret_holder) = Token(wallet_core) + .send_mint_transaction_shielded_owned_account( + definition_account_id, + holder_account_id, + amount, + ) + .await?; + + println!("Results of tx send are {res:#?}"); + + let tx_hash = res.tx_hash; + let transfer_tx = wallet_core + .poll_native_token_transfer(tx_hash.clone()) + .await?; + + if let NSSATransaction::PrivacyPreserving(tx) = transfer_tx { + let acc_decode_data = vec![Decode(secret_holder, holder_account_id)]; + + wallet_core.decode_insert_privacy_preserving_transaction_results( + tx, + &acc_decode_data, + )?; + } + + let path = wallet_core.store_persistent_data().await?; + + println!("Stored persistent accounts at {path:#?}"); + + Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) + } + TokenProgramSubcommandShielded::MintTokenShieldedForeign { + definition_account_id, + holder_npk, + holder_ipk, + amount, + } => { + let definition_account_id: AccountId = definition_account_id.parse().unwrap(); + + let holder_npk_res = hex::decode(holder_npk)?; + let mut holder_npk = [0; 32]; + holder_npk.copy_from_slice(&holder_npk_res); + let holder_npk = nssa_core::NullifierPublicKey(holder_npk); + + let holder_ipk_res = hex::decode(holder_ipk)?; + let mut holder_ipk = [0u8; 33]; + holder_ipk.copy_from_slice(&holder_ipk_res); + let holder_ipk = nssa_core::encryption::shared_key_derivation::Secp256k1Point( + holder_ipk.to_vec(), + ); + + let (res, _) = Token(wallet_core) + .send_mint_transaction_shielded_foreign_account( + definition_account_id, + holder_npk, + holder_ipk, + amount, + ) + .await?; + + println!("Results of tx send are {res:#?}"); + + let tx_hash = res.tx_hash; + let transfer_tx = wallet_core + .poll_native_token_transfer(tx_hash.clone()) + .await?; + + if let NSSATransaction::PrivacyPreserving(tx) = transfer_tx { + println!("Transaction data is {:?}", tx.message); + } + + let path = wallet_core.store_persistent_data().await?; + + println!("Stored persistent accounts at {path:#?}"); + Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) } } @@ -673,8 +1479,8 @@ impl WalletSubcommand for CreateNewTokenProgramSubcommand { if let NSSATransaction::PrivacyPreserving(tx) = transfer_tx { let acc_decode_data = vec![ - (secret_definition, definition_account_id), - (secret_supply, supply_account_id), + Decode(secret_definition, definition_account_id), + Decode(secret_supply, supply_account_id), ]; wallet_core.decode_insert_privacy_preserving_transaction_results( @@ -723,7 +1529,7 @@ impl WalletSubcommand for CreateNewTokenProgramSubcommand { .await?; if let NSSATransaction::PrivacyPreserving(tx) = transfer_tx { - let acc_decode_data = vec![(secret_definition, definition_account_id)]; + let acc_decode_data = vec![Decode(secret_definition, definition_account_id)]; wallet_core.decode_insert_privacy_preserving_transaction_results( tx, @@ -771,7 +1577,7 @@ impl WalletSubcommand for CreateNewTokenProgramSubcommand { .await?; if let NSSATransaction::PrivacyPreserving(tx) = transfer_tx { - let acc_decode_data = vec![(secret_supply, supply_account_id)]; + let acc_decode_data = vec![Decode(secret_supply, supply_account_id)]; wallet_core.decode_insert_privacy_preserving_transaction_results( tx, diff --git a/wallet/src/lib.rs b/wallet/src/lib.rs index 313fdcd..78cd00a 100644 --- a/wallet/src/lib.rs +++ b/wallet/src/lib.rs @@ -38,6 +38,11 @@ pub mod poller; mod privacy_preserving_tx; pub mod program_facades; +pub enum AccDecodeData { + Skip, + Decode(nssa_core::SharedSecretKey, AccountId), +} + pub struct WalletCore { pub storage: WalletChainStore, pub poller: TxPoller, @@ -218,24 +223,29 @@ impl WalletCore { pub fn decode_insert_privacy_preserving_transaction_results( &mut self, tx: nssa::privacy_preserving_transaction::PrivacyPreservingTransaction, - acc_decode_data: &[(nssa_core::SharedSecretKey, AccountId)], + acc_decode_mask: &[AccDecodeData], ) -> Result<()> { - for (output_index, (secret, acc_account_id)) in acc_decode_data.iter().enumerate() { - let acc_ead = tx.message.encrypted_private_post_states[output_index].clone(); - let acc_comm = tx.message.new_commitments[output_index].clone(); + for (output_index, acc_decode_data) in acc_decode_mask.iter().enumerate() { + match acc_decode_data { + AccDecodeData::Decode(secret, acc_account_id) => { + let acc_ead = tx.message.encrypted_private_post_states[output_index].clone(); + let acc_comm = tx.message.new_commitments[output_index].clone(); - let res_acc = nssa_core::EncryptionScheme::decrypt( - &acc_ead.ciphertext, - secret, - &acc_comm, - output_index as u32, - ) - .unwrap(); + let res_acc = nssa_core::EncryptionScheme::decrypt( + &acc_ead.ciphertext, + secret, + &acc_comm, + output_index as u32, + ) + .unwrap(); - println!("Received new acc {res_acc:#?}"); + println!("Received new acc {res_acc:#?}"); - self.storage - .insert_private_account_data(*acc_account_id, res_acc); + self.storage + .insert_private_account_data(*acc_account_id, res_acc); + } + AccDecodeData::Skip => {} + } } println!("Transaction data is {:?}", tx.message); diff --git a/wallet/src/program_facades/token.rs b/wallet/src/program_facades/token.rs index 4ec9c12..f5b13ce 100644 --- a/wallet/src/program_facades/token.rs +++ b/wallet/src/program_facades/token.rs @@ -301,6 +301,370 @@ impl Token<'_> { (resp, first) }) } + + pub async fn send_burn_transaction( + &self, + definition_account_id: AccountId, + holder_account_id: AccountId, + amount: u128, + ) -> Result { + let account_ids = vec![definition_account_id, holder_account_id]; + let (instruction, program) = token_program_preparation_burn(amount); + + // ToDo: Fix this by updating `nssa::public_transaction::Message::try_new` to get raw bytes + let instruction: [u32; 23] = instruction.try_into().unwrap(); + + let Ok(nonces) = self.0.get_accounts_nonces(vec![holder_account_id]).await else { + return Err(ExecutionFailureKind::SequencerError); + }; + let message = nssa::public_transaction::Message::try_new( + program.id(), + account_ids, + nonces, + instruction, + ) + .unwrap(); + + let Some(signing_key) = self + .0 + .storage + .user_data + .get_pub_account_signing_key(&holder_account_id) + else { + return Err(ExecutionFailureKind::KeyNotFoundError); + }; + let witness_set = + nssa::public_transaction::WitnessSet::for_message(&message, &[signing_key]); + + let tx = nssa::PublicTransaction::new(message, witness_set); + + Ok(self.0.sequencer_client.send_tx_public(tx).await?) + } + + pub async fn send_burn_transaction_private_owned_account( + &self, + definition_account_id: AccountId, + holder_account_id: AccountId, + amount: u128, + ) -> Result<(SendTxResponse, [SharedSecretKey; 2]), ExecutionFailureKind> { + let (instruction_data, program) = token_program_preparation_burn(amount); + + self.0 + .send_privacy_preserving_tx( + vec![ + PrivacyPreservingAccount::PrivateOwned(definition_account_id), + PrivacyPreservingAccount::PrivateOwned(holder_account_id), + ], + &instruction_data, + &program, + ) + .await + .map(|(resp, secrets)| { + let mut iter = secrets.into_iter(); + let first = iter.next().expect("expected definition's secret"); + let second = iter.next().expect("expected holder's secret"); + (resp, [first, second]) + }) + } + + pub async fn send_burn_transaction_private_foreign_account( + &self, + definition_npk: NullifierPublicKey, + definition_ipk: IncomingViewingPublicKey, + holder_account_id: AccountId, + amount: u128, + ) -> Result<(SendTxResponse, [SharedSecretKey; 2]), ExecutionFailureKind> { + let (instruction_data, program) = token_program_preparation_burn(amount); + + self.0 + .send_privacy_preserving_tx( + vec![ + PrivacyPreservingAccount::PrivateForeign { + npk: definition_npk, + ipk: definition_ipk, + }, + PrivacyPreservingAccount::PrivateOwned(holder_account_id), + ], + &instruction_data, + &program, + ) + .await + .map(|(resp, secrets)| { + let mut iter = secrets.into_iter(); + let first = iter.next().expect("expected definition's secret"); + let second = iter.next().expect("expected holder's secret"); + (resp, [first, second]) + }) + } + + pub async fn send_burn_transaction_deshielded_owned_account( + &self, + definition_account_id: AccountId, + holder_account_id: AccountId, + amount: u128, + ) -> Result<(SendTxResponse, SharedSecretKey), ExecutionFailureKind> { + let (instruction_data, program) = token_program_preparation_burn(amount); + + self.0 + .send_privacy_preserving_tx( + vec![ + PrivacyPreservingAccount::PrivateOwned(definition_account_id), + PrivacyPreservingAccount::Public(holder_account_id), + ], + &instruction_data, + &program, + ) + .await + .map(|(resp, secrets)| { + let first = secrets + .into_iter() + .next() + .expect("expected definition's secret"); + (resp, first) + }) + } + + pub async fn send_burn_transaction_shielded( + &self, + definition_account_id: AccountId, + holder_account_id: AccountId, + amount: u128, + ) -> Result<(SendTxResponse, SharedSecretKey), ExecutionFailureKind> { + let (instruction_data, program) = token_program_preparation_burn(amount); + + self.0 + .send_privacy_preserving_tx( + vec![ + PrivacyPreservingAccount::Public(definition_account_id), + PrivacyPreservingAccount::PrivateOwned(holder_account_id), + ], + &instruction_data, + &program, + ) + .await + .map(|(resp, secrets)| { + let first = secrets + .into_iter() + .next() + .expect("expected holder's secret"); + (resp, first) + }) + } + + pub async fn send_burn_transaction_deshielded_foreign_account( + &self, + definition_npk: NullifierPublicKey, + definition_ipk: IncomingViewingPublicKey, + holder_account_id: AccountId, + amount: u128, + ) -> Result<(SendTxResponse, SharedSecretKey), ExecutionFailureKind> { + let (instruction_data, program) = token_program_preparation_burn(amount); + + self.0 + .send_privacy_preserving_tx( + vec![ + PrivacyPreservingAccount::PrivateForeign { + npk: definition_npk, + ipk: definition_ipk, + }, + PrivacyPreservingAccount::Public(holder_account_id), + ], + &instruction_data, + &program, + ) + .await + .map(|(resp, secrets)| { + let first = secrets + .into_iter() + .next() + .expect("expected definition's secret"); + (resp, first) + }) + } + + pub async fn send_mint_transaction( + &self, + definition_account_id: AccountId, + holder_account_id: AccountId, + amount: u128, + ) -> Result { + let account_ids = vec![definition_account_id, holder_account_id]; + let (instruction, program) = token_program_preparation_mint(amount); + + // ToDo: Fix this by updating `nssa::public_transaction::Message::try_new` to get raw bytes + let instruction: [u32; 23] = instruction.try_into().unwrap(); + + let Ok(nonces) = self + .0 + .get_accounts_nonces(vec![definition_account_id]) + .await + else { + return Err(ExecutionFailureKind::SequencerError); + }; + let message = nssa::public_transaction::Message::try_new( + program.id(), + account_ids, + nonces, + instruction, + ) + .unwrap(); + + let Some(signing_key) = self + .0 + .storage + .user_data + .get_pub_account_signing_key(&definition_account_id) + else { + return Err(ExecutionFailureKind::KeyNotFoundError); + }; + let witness_set = + nssa::public_transaction::WitnessSet::for_message(&message, &[signing_key]); + + let tx = nssa::PublicTransaction::new(message, witness_set); + + Ok(self.0.sequencer_client.send_tx_public(tx).await?) + } + + pub async fn send_mint_transaction_private_owned_account( + &self, + definition_account_id: AccountId, + holder_account_id: AccountId, + amount: u128, + ) -> Result<(SendTxResponse, [SharedSecretKey; 2]), ExecutionFailureKind> { + let (instruction_data, program) = token_program_preparation_mint(amount); + + self.0 + .send_privacy_preserving_tx( + vec![ + PrivacyPreservingAccount::PrivateOwned(definition_account_id), + PrivacyPreservingAccount::PrivateOwned(holder_account_id), + ], + &instruction_data, + &program, + ) + .await + .map(|(resp, secrets)| { + let mut iter = secrets.into_iter(); + let first = iter.next().expect("expected definition's secret"); + let second = iter.next().expect("expected holder's secret"); + (resp, [first, second]) + }) + } + + pub async fn send_mint_transaction_private_foreign_account( + &self, + definition_account_id: AccountId, + holder_npk: NullifierPublicKey, + holder_ipk: IncomingViewingPublicKey, + amount: u128, + ) -> Result<(SendTxResponse, [SharedSecretKey; 2]), ExecutionFailureKind> { + let (instruction_data, program) = token_program_preparation_mint(amount); + + self.0 + .send_privacy_preserving_tx( + vec![ + PrivacyPreservingAccount::PrivateOwned(definition_account_id), + PrivacyPreservingAccount::PrivateForeign { + npk: holder_npk, + ipk: holder_ipk, + }, + ], + &instruction_data, + &program, + ) + .await + .map(|(resp, secrets)| { + let mut iter = secrets.into_iter(); + let first = iter.next().expect("expected definition's secret"); + let second = iter.next().expect("expected holder's secret"); + (resp, [first, second]) + }) + } + + pub async fn send_mint_transaction_deshielded( + &self, + definition_account_id: AccountId, + holder_account_id: AccountId, + amount: u128, + ) -> Result<(SendTxResponse, SharedSecretKey), ExecutionFailureKind> { + let (instruction_data, program) = token_program_preparation_mint(amount); + + self.0 + .send_privacy_preserving_tx( + vec![ + PrivacyPreservingAccount::PrivateOwned(definition_account_id), + PrivacyPreservingAccount::Public(holder_account_id), + ], + &instruction_data, + &program, + ) + .await + .map(|(resp, secrets)| { + let first = secrets + .into_iter() + .next() + .expect("expected definition's secret"); + (resp, first) + }) + } + + pub async fn send_mint_transaction_shielded_owned_account( + &self, + definition_account_id: AccountId, + holder_account_id: AccountId, + amount: u128, + ) -> Result<(SendTxResponse, SharedSecretKey), ExecutionFailureKind> { + let (instruction_data, program) = token_program_preparation_mint(amount); + + self.0 + .send_privacy_preserving_tx( + vec![ + PrivacyPreservingAccount::Public(definition_account_id), + PrivacyPreservingAccount::PrivateOwned(holder_account_id), + ], + &instruction_data, + &program, + ) + .await + .map(|(resp, secrets)| { + let first = secrets + .into_iter() + .next() + .expect("expected holder's secret"); + (resp, first) + }) + } + + pub async fn send_mint_transaction_shielded_foreign_account( + &self, + definition_account_id: AccountId, + holder_npk: NullifierPublicKey, + holder_ipk: IncomingViewingPublicKey, + amount: u128, + ) -> Result<(SendTxResponse, SharedSecretKey), ExecutionFailureKind> { + let (instruction_data, program) = token_program_preparation_mint(amount); + + self.0 + .send_privacy_preserving_tx( + vec![ + PrivacyPreservingAccount::Public(definition_account_id), + PrivacyPreservingAccount::PrivateForeign { + npk: holder_npk, + ipk: holder_ipk, + }, + ], + &instruction_data, + &program, + ) + .await + .map(|(resp, secrets)| { + let first = secrets + .into_iter() + .next() + .expect("expected holder's secret"); + (resp, first) + }) + } } fn token_program_preparation_transfer(amount: u128) -> (InstructionData, Program) { @@ -328,3 +692,27 @@ fn token_program_preparation_definition( (instruction_data, program) } + +fn token_program_preparation_burn(amount: u128) -> (InstructionData, Program) { + // Instruction must be: [0x03 || amount (little-endian 16 bytes) || 0x00 || 0x00 || 0x00 || + // 0x00 || 0x00 || 0x00]. + let mut instruction = [0; 23]; + instruction[0] = 0x03; + instruction[1..17].copy_from_slice(&amount.to_le_bytes()); + let instruction_data = Program::serialize_instruction(instruction).unwrap(); + let program = Program::token(); + + (instruction_data, program) +} + +fn token_program_preparation_mint(amount: u128) -> (InstructionData, Program) { + // Instruction must be: [0x04 || amount (little-endian 16 bytes) || 0x00 || 0x00 || 0x00 || + // 0x00 || 0x00 || 0x00]. + let mut instruction = [0; 23]; + instruction[0] = 0x04; + instruction[1..17].copy_from_slice(&amount.to_le_bytes()); + let instruction_data = Program::serialize_instruction(instruction).unwrap(); + let program = Program::token(); + + (instruction_data, program) +} From 0be88d4343f427c9cf4e211a3030640488eaed27 Mon Sep 17 00:00:00 2001 From: Pravdyvy Date: Thu, 11 Dec 2025 14:47:11 +0200 Subject: [PATCH 04/33] fix: fmt --- integration_tests/src/test_suite_map.rs | 8 ++++++-- wallet/src/program_facades/token.rs | 4 ++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/integration_tests/src/test_suite_map.rs b/integration_tests/src/test_suite_map.rs index eb21438..ccd7906 100644 --- a/integration_tests/src/test_suite_map.rs +++ b/integration_tests/src/test_suite_map.rs @@ -1705,7 +1705,9 @@ pub fn prepare_function_map() -> HashMap { // Burn 3 tokens from `recipient_acc` let subcommand = TokenProgramAgnosticSubcommand::Burn { - definition: Some(make_public_account_input_from_str(&definition_account_id.to_string())), + definition: Some(make_public_account_input_from_str( + &definition_account_id.to_string(), + )), definition_npk: None, definition_ipk: None, holder: make_public_account_input_from_str(&recipient_account_id.to_string()), @@ -1748,7 +1750,9 @@ pub fn prepare_function_map() -> HashMap { // Mint 10 tokens at `recipient_acc` let subcommand = TokenProgramAgnosticSubcommand::Mint { definition: make_public_account_input_from_str(&definition_account_id.to_string()), - holder: Some(make_public_account_input_from_str(&recipient_account_id.to_string())), + holder: Some(make_public_account_input_from_str( + &recipient_account_id.to_string(), + )), holder_npk: None, holder_ipk: None, amount: 10, diff --git a/wallet/src/program_facades/token.rs b/wallet/src/program_facades/token.rs index f5b13ce..804924b 100644 --- a/wallet/src/program_facades/token.rs +++ b/wallet/src/program_facades/token.rs @@ -312,7 +312,7 @@ impl Token<'_> { let (instruction, program) = token_program_preparation_burn(amount); // ToDo: Fix this by updating `nssa::public_transaction::Message::try_new` to get raw bytes - let instruction: [u32; 23] = instruction.try_into().unwrap(); + let instruction: [u32; 23] = instruction.try_into().unwrap(); let Ok(nonces) = self.0.get_accounts_nonces(vec![holder_account_id]).await else { return Err(ExecutionFailureKind::SequencerError); @@ -492,7 +492,7 @@ impl Token<'_> { let (instruction, program) = token_program_preparation_mint(amount); // ToDo: Fix this by updating `nssa::public_transaction::Message::try_new` to get raw bytes - let instruction: [u32; 23] = instruction.try_into().unwrap(); + let instruction: [u32; 23] = instruction.try_into().unwrap(); let Ok(nonces) = self .0 From 9f443b92a88544561c4a5db5afb9b7d831fa60f9 Mon Sep 17 00:00:00 2001 From: jonesmarvin8 <83104039+jonesmarvin8@users.noreply.github.com> Date: Thu, 11 Dec 2025 19:19:22 -0500 Subject: [PATCH 05/33] modifications --- nssa/program_methods/guest/src/bin/token.rs | 615 ++++++++++++++------ 1 file changed, 448 insertions(+), 167 deletions(-) diff --git a/nssa/program_methods/guest/src/bin/token.rs b/nssa/program_methods/guest/src/bin/token.rs index 288724d..1345d7d 100644 --- a/nssa/program_methods/guest/src/bin/token.rs +++ b/nssa/program_methods/guest/src/bin/token.rs @@ -38,48 +38,175 @@ use nssa_core::{ // * An instruction data byte string of length 23, indicating the balance to mint with the folloiwng layout // [0x04 || amount (little-endian 16 bytes) || 0x00 || 0x00 || 0x00 || 0x00 || 0x00 || 0x00]. -enum TokenStandard { - FungibleTokenHolding, - FungibleAssetHolding, - NonFungibleHolding, +type TokenStandard = u8; + +enum TokenStandardEnum { + FungibleToken, + FungibleAsset, + NonFungible, +} +enum MetadataStandardEnum { + SimpleMetadata, + ExpandedMetadata, } -fn helper_token_standard_constructor(selection: TokenStandard) -> u8 { +// Remove enums...unnecessary structure +fn helper_token_standard_constructor(selection: TokenStandardEnum) -> u8 { match selection { - TokenStandard::FungibleTokenHolding => 0, //TODO: make sure this matches with current definition - TokenStandard::FungibleAssetHolding => 1, - TokenStandard::NonFungibleHolding => 2, + TokenStandardEnum::FungibleToken => 0, + TokenStandardEnum::FungibleAsset => 1, + TokenStandardEnum::NonFungible => 2, _ => panic!("Invalid selection"), } } -const TOKEN_DEFINITION_TYPE: u8 = 0; + + +fn helper_metadata_standard_constructor(selection: MetadataStandardEnum) -> u8 { + match selection { + MetadataStandardEnum::SimpleMetadata => 0, + MetadataStandardEnum::ExpandedMetadata => 1, + } +} + const TOKEN_DEFINITION_DATA_SIZE: usize = 55; const TOKEN_HOLDING_TYPE: u8 = 1; +const TOKEN_HOLDING_MASTER_EDITION: u8 = 2; +const TOKEN_HOLDING_PRINTED: u8 = 3; + + + const TOKEN_HOLDING_DATA_SIZE: usize = 49; const CURRENT_VERSION: u8 = 1; +const NUMBER_OF_METADATA_TYPES: u8 = 2; const TOKEN_METADATA_DATA_SIZE: usize = 463; -//TODO: pub probably not necessary -pub type StringU8 = Vec; - struct TokenDefinition { - account_type: u8, //specifies Token Standard? + account_type: u8, // Token Standard name: [u8; 6], total_supply: u128, metadata_id: AccountId, } +impl TokenDefinition { + fn into_data(self) -> Data { + let mut bytes = Vec::::new(); + bytes.extend_from_slice(&[self.account_type]); + bytes.extend_from_slice(&self.name); + bytes.extend_from_slice(&self.total_supply.to_le_bytes()); + bytes.extend_from_slice(&self.metadata_id.to_bytes()); + + if bytes.len() != TOKEN_DEFINITION_DATA_SIZE { + panic!("Invalid Token Definition data"); + } + + Data::try_from(bytes).expect("Invalid data") + } + + fn parse(data: &Data) -> Option { + let data = Vec::::from(data.clone()); + + if data.len() != TOKEN_DEFINITION_DATA_SIZE { + None + } else { + let account_type = data[0]; + let name = data[1..7].try_into().expect("Name must be a 6 bytes"); + let total_supply = u128::from_le_bytes( + data[7..23] + .try_into() + .expect("Total supply must be 16 bytes little-endian"), + ); + let metadata_id = AccountId::new( + data[23..TOKEN_DEFINITION_DATA_SIZE] + .try_into() + .expect("Token Program expects valid Account Id for Metadata"), + ); + + let this = Some(Self { + account_type, + name, + total_supply, + metadata_id: metadata_id.clone(), + }); + + //TODO tests + if account_type == //NFTs must have supply 1 + helper_token_standard_constructor(TokenStandardEnum::NonFungible) + && total_supply != 1 + { + None + } else if account_type == //Fungible Tokens do not have metadata. + helper_token_standard_constructor(TokenStandardEnum::FungibleToken) + && metadata_id != AccountId::new([0; 32]) + { + None + } else { + this + } + } + } +} + +//TODO(edition/master edition/printable) +// => use balance for total prints allowed +// fix logic for NFTs to allow for printables struct TokenHolding { - account_type: u8, //(potentially for edition/master edition/printable) + account_type: u8, definition_id: AccountId, balance: u128, } -//BAH fixed data size is kind of needed... -//TODO need implement +impl TokenHolding { + fn new(definition_id: &AccountId) -> Self { + Self { + account_type: TOKEN_HOLDING_TYPE, + definition_id: definition_id.clone(), + balance: 0, + } + } + + fn parse(data: &Data) -> Option { + let data = Vec::::from(data.clone()); + + if data.len() != TOKEN_HOLDING_DATA_SIZE || data[0] != TOKEN_HOLDING_TYPE { + return None; + } + + let account_type = data[0]; + let definition_id = AccountId::new( + data[1..33] + .try_into() + .expect("Defintion ID must be 32 bytes long"), + ); + let balance = u128::from_le_bytes( + data[33..] + .try_into() + .expect("balance must be 16 bytes little-endian"), + ); + + Some(Self { + definition_id, + balance, + account_type, + }) + } + + fn into_data(self) -> Data { + let mut bytes = Vec::::new(); + bytes.extend_from_slice(&[self.account_type]); + bytes.extend_from_slice(&self.definition_id.to_bytes()); + bytes.extend_from_slice(&self.balance.to_le_bytes()); + + if bytes.len() != TOKEN_HOLDING_DATA_SIZE { + panic!("Invalid Token Holding data"); + } + + Data::try_from(bytes).expect("Invalid data") + } +} + struct TokenMetadata { account_type: u8, //Not sure if necessary version: u8, @@ -90,9 +217,16 @@ struct TokenMetadata { } //TODO remove any unwraps - impl TokenMetadata { fn into_data(self) -> Data { + if self.account_type + != helper_metadata_standard_constructor(MetadataStandardEnum::SimpleMetadata) + || self.account_type + != helper_metadata_standard_constructor(MetadataStandardEnum::ExpandedMetadata) + { + panic!("Invalid Metadata type"); + } + let mut bytes = Vec::::new(); bytes.extend_from_slice(&[self.account_type]); bytes.extend_from_slice(&[self.version]); @@ -102,7 +236,7 @@ impl TokenMetadata { bytes.extend_from_slice(&self.primary_sale_date.to_le_bytes()); if bytes.len() != TOKEN_METADATA_DATA_SIZE { - panic!("Invalid Token Definition data"); + panic!("Invalid Token Definition data length"); } Data::try_from(bytes).expect("Invalid data") @@ -111,7 +245,7 @@ impl TokenMetadata { fn parse(data: &Data) -> Option { let data = Vec::::from(data.clone()); - if data.len() != TOKEN_METADATA_DATA_SIZE { + if data.len() != TOKEN_METADATA_DATA_SIZE || data[0] >= NUMBER_OF_METADATA_TYPES { None } else { let account_type = data[0]; @@ -144,113 +278,6 @@ impl TokenMetadata { } } -impl TokenDefinition { - fn into_data(self) -> Data { - let mut bytes = Vec::::new(); - bytes.extend_from_slice(&[self.account_type]); - bytes.extend_from_slice(&self.name); - bytes.extend_from_slice(&self.total_supply.to_le_bytes()); - bytes.extend_from_slice(&self.metadata_id.to_bytes()); - - if bytes.len() != TOKEN_DEFINITION_DATA_SIZE { - panic!("Invalid Token Definition data"); - } - - Data::try_from(bytes).expect("Invalid data") - } - - //STATUS: TODO - fn parse(data: &Data) -> Option { - let data = Vec::::from(data.clone()); - - //TODO: TOKEN_DEFINITION_TYPE might be silly - //Should make sure it's a valid option - //Removed the check for data[0] check - //Can be included - if data.len() != TOKEN_DEFINITION_DATA_SIZE { - None - } else { - let account_type = data[0]; - let name = data[1..7].try_into().unwrap(); - let total_supply = u128::from_le_bytes( - data[7..23] - .try_into() - .expect("Total supply must be 16 bytes little-endian"), - ); - let metadata_id = AccountId::new( - data[23..TOKEN_DEFINITION_DATA_SIZE] - .try_into() - .expect("Token Program expects valid Account Id for Metadata"), - ); - Some(Self { - account_type, - name, - total_supply, - metadata_id, - }) - } - } -} - -impl TokenHolding { - //STATUS: TODO - //account type matters - fn new(definition_id: &AccountId) -> Self { - Self { - account_type: TOKEN_HOLDING_TYPE, - definition_id: definition_id.clone(), - balance: 0, - } - } - - //STATUS: TODO - fn parse(data: &Data) -> Option { - let data = Vec::::from(data.clone()); - - //TODO: holding type matters - //e.g., royalties payments for NFTs? - if data.len() != TOKEN_HOLDING_DATA_SIZE || data[0] != TOKEN_HOLDING_TYPE { - return None; - } - - let account_type = data[0]; - let definition_id = AccountId::new( - data[1..33] - .try_into() - .expect("Defintion ID must be 32 bytes long"), - ); - let balance = u128::from_le_bytes( - data[33..] - .try_into() - .expect("balance must be 16 bytes little-endian"), - ); - - Some(Self { - definition_id, - balance, - account_type, - }) - } - - //STATUS: fixed - fn into_data(self) -> Data { - let mut bytes = Vec::::new(); - bytes.extend_from_slice(&[self.account_type]); - bytes.extend_from_slice(&self.definition_id.to_bytes()); - bytes.extend_from_slice(&self.balance.to_le_bytes()); - - if bytes.len() != TOKEN_HOLDING_DATA_SIZE { - panic!("Invalid Token Holding data"); - } - - Data::try_from(bytes).expect("Invalid data") - } -} - -//TODO: transfer for NFTs could/should have built in payments for royalties -// This probably would need a different transfer program... -// or branching logic -// Minus royalties issue-> this function is fine fn transfer(pre_states: &[AccountWithMetadata], balance_to_move: u128) -> Vec { if pre_states.len() != 2 { panic!("Invalid number of input accounts"); @@ -309,8 +336,6 @@ fn transfer(pre_states: &[AccountWithMetadata], balance_to_move: u128) -> Vec Vec { if pre_states.len() != 3 { panic!("Invalid number of input accounts"); @@ -373,28 +397,24 @@ fn new_definition_with_metadata( let metadata_target_account = &pre_states[1]; let holding_target_account = &pre_states[2]; - //TODO test if definition_target_account.account != Account::default() { panic!("Definition target account must have default values"); } - //TODO test if metadata_target_account.account != Account::default() { panic!("Metadata target account must have default values"); } - //TODO test if holding_target_account.account != Account::default() { panic!("Holding target account must have default values"); } - //TODO test if !valid_total_supply_for_token_standard(total_supply, token_standard) { panic!("Invalid total supply for the specified token supply"); } let token_definition = TokenDefinition { - account_type: helper_token_standard_constructor(TokenStandard::FungibleTokenHolding), + account_type: token_standard, name, total_supply, metadata_id: metadata_target_account.account_id.clone(), @@ -406,14 +426,24 @@ fn new_definition_with_metadata( balance: total_supply, }; - //TODO: enforce with pda seed address + if metadata_values.len() != 450 { + panic!("Metadata values data should be 450 bytes"); + } + + let uri: [u8; 200] = metadata_values[0..200] + .try_into() + .expect("Token program expects valid uri for Metadata"); + let creators: [u8; 250] = metadata_values[200..450] + .try_into() + .expect("Token program expects valid creators for Metadata"); + let token_metadata = TokenMetadata { - account_type: 0u8, //todo temp - version: 1u8, + account_type: metadata_standard, + version: CURRENT_VERSION, definition_id: definition_target_account.account_id.clone(), - uri: uri.clone(), - creators: creators.clone(), - primary_sale_date: blockid, + uri, + creators, + primary_sale_date: 0u64, //TODO: future works to implement this }; let mut definition_target_account_post = definition_target_account.account.clone(); @@ -428,17 +458,18 @@ fn new_definition_with_metadata( vec![ AccountPostState::new_claimed(definition_target_account_post), AccountPostState::new_claimed(holding_target_account_post), + AccountPostState::new_claimed(metadata_target_account_post), ] } fn valid_total_supply_for_token_standard(total_supply: u128, token_standard: u8) -> bool { - if token_standard == helper_token_standard_constructor(TokenStandard::NonFungibleHolding) + if token_standard == helper_token_standard_constructor(TokenStandardEnum::NonFungible) && total_supply != 1 { - return false; + false + } else { + true } - - true } fn initialize_account(pre_states: &[AccountWithMetadata]) -> Vec { @@ -524,16 +555,14 @@ fn burn(pre_states: &[AccountWithMetadata], balance_to_burn: u128) -> Vec bool { - if account_type == helper_token_standard_constructor(TokenStandard::NonFungibleHolding) { + if account_type == helper_token_standard_constructor(TokenStandardEnum::NonFungible) { false } else { true } } -// Status of function: fixed fn mint_additional_supply( pre_states: &[AccountWithMetadata], amount_to_mint: u128, @@ -555,7 +584,6 @@ fn mint_additional_supply( let token_holding_values: TokenHolding = if token_holding.account == Account::default() { TokenHolding::new(&definition.account_id) } else { - //remove clone TokenHolding::parse(&token_holding.account.data).expect("Holding account must be valid") }; @@ -608,8 +636,8 @@ fn mint_additional_supply( vec![post_definition, token_holding_post] } -type Instruction = [u8; 23]; - +//TODO: add vars for 23 and 474 +type Instruction = Vec; fn main() { let ProgramInput { pre_states, @@ -618,6 +646,10 @@ fn main() { let post_states = match instruction[0] { 0 => { + if instruction.len() != 23 { + panic!("Invalid instruction length"); + } + // Parse instruction let total_supply = u128::from_le_bytes( instruction[1..17] @@ -633,6 +665,10 @@ fn main() { new_definition(&pre_states, name, total_supply) } 1 => { + if instruction.len() != 23 { + panic!("Invalid instruction length"); + } + // Parse instruction let balance_to_move = u128::from_le_bytes( instruction[1..17] @@ -648,6 +684,10 @@ fn main() { transfer(&pre_states, balance_to_move) } 2 => { + if instruction.len() != 23 { + panic!("Invalid instruction length"); + } + // Initialize account if instruction[1..] != [0; 22] { panic!("Invalid instruction for initialize account"); @@ -655,6 +695,10 @@ fn main() { initialize_account(&pre_states) } 3 => { + if instruction.len() != 23 { + panic!("Invalid instruction length"); + } + let balance_to_burn = u128::from_le_bytes( instruction[1..17] .try_into() @@ -669,6 +713,10 @@ fn main() { burn(&pre_states, balance_to_burn) } 4 => { + if instruction.len() != 23 { + panic!("Invalid instruction length"); + } + let balance_to_mint = u128::from_le_bytes( instruction[1..17] .try_into() @@ -682,6 +730,20 @@ fn main() { // Execute mint_additional_supply(&pre_states, balance_to_mint) } + 5 => { + if instruction.len() != 474 { + panic!("Invalid instruction length") + } + + let total_supply = u128::from_le_bytes(instruction[1..17].try_into().expect("Total supply must be 16 bytes little-endian"),); + let name = instruction[17..23].try_into().expect("Name must be 6 bytes long"); + assert_ne!(name, [0;6]); + let token_standard = instruction[23]; + let metadata_standard = instruction[24]; + let metadata_values: Data = Data::try_from(instruction[25..474].to_vec()).expect("Invalid metadata"); + + new_definition_with_metadata(&pre_states, name, total_supply, token_standard, metadata_standard, &metadata_values) + } _ => panic!("Invalid instruction"), }; @@ -693,10 +755,10 @@ mod tests { use nssa_core::account::{Account, AccountId, AccountWithMetadata, Data}; use crate::{ - TOKEN_DEFINITION_DATA_SIZE, TOKEN_DEFINITION_TYPE, TOKEN_HOLDING_DATA_SIZE, - TOKEN_HOLDING_TYPE, TokenDefinition, TokenHolding, TokenStandard, burn, - helper_token_standard_constructor, initialize_account, mint_additional_supply, - new_definition, transfer, + TOKEN_DEFINITION_DATA_SIZE, TOKEN_HOLDING_DATA_SIZE, TOKEN_HOLDING_TYPE, TokenDefinition, + TokenHolding, TokenStandardEnum, burn, helper_token_standard_constructor, + initialize_account, mint_additional_supply, new_definition, new_definition_with_metadata, + transfer, }; #[should_panic(expected = "Invalid number of input accounts")] @@ -1126,10 +1188,10 @@ mod tests { program_owner: [5u32; 8], balance: 0u128, data: TokenDefinition::into_data(TokenDefinition { - account_type: TOKEN_DEFINITION_TYPE, + account_type: helper_token_standard_constructor(TokenStandardEnum::FungibleToken), name: [2; 6], total_supply: helper_balance_constructor(BalanceEnum::InitSupply), - metadata_id: helper_id_constructor(IdEnum::MetadataId), + metadata_id: AccountId::new([0;32]), }), nonce: 0, }, @@ -1141,10 +1203,10 @@ mod tests { program_owner: [5u32; 8], balance: 0u128, data: TokenDefinition::into_data(TokenDefinition { - account_type: TOKEN_DEFINITION_TYPE, + account_type: helper_token_standard_constructor(TokenStandardEnum::FungibleToken), name: [2; 6], total_supply: helper_balance_constructor(BalanceEnum::InitSupply), - metadata_id: helper_id_constructor(IdEnum::MetadataId), + metadata_id: AccountId::new([0;32]), }), nonce: 0, }, @@ -1212,10 +1274,10 @@ mod tests { program_owner: [5u32; 8], balance: 0u128, data: TokenDefinition::into_data(TokenDefinition { - account_type: TOKEN_DEFINITION_TYPE, + account_type: helper_token_standard_constructor(TokenStandardEnum::FungibleToken), name: [2; 6], total_supply: helper_balance_constructor(BalanceEnum::InitSupplyBurned), - metadata_id: helper_id_constructor(IdEnum::MetadataId), + metadata_id: AccountId::new([0;32]), }), nonce: 0, }, @@ -1274,10 +1336,10 @@ mod tests { program_owner: [5u32; 8], balance: 0u128, data: TokenDefinition::into_data(TokenDefinition { - account_type: TOKEN_DEFINITION_TYPE, + account_type: helper_token_standard_constructor(TokenStandardEnum::FungibleToken), name: [2; 6], total_supply: helper_balance_constructor(BalanceEnum::InitSupplyMint), - metadata_id: helper_id_constructor(IdEnum::MetadataId), + metadata_id: AccountId::new([0;32]), }), nonce: 0, }, @@ -1304,11 +1366,11 @@ mod tests { balance: 0u128, data: TokenDefinition::into_data(TokenDefinition { account_type: helper_token_standard_constructor( - TokenStandard::NonFungibleHolding, + TokenStandardEnum::NonFungible, ), name: [2; 6], total_supply: helper_balance_constructor(BalanceEnum::InitSupplyMint), - metadata_id: helper_id_constructor(IdEnum::MetadataId), + metadata_id: AccountId::new([0;32]), }), nonce: 0, }, @@ -1571,4 +1633,223 @@ mod tests { helper_balance_constructor(BalanceEnum::MintSuccess), ); } + + #[should_panic(expected = "Invalid number of input accounts")] + #[test] + fn test_call_new_definition_metadata_with_invalid_number_of_accounts_1() { + let name = [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe]; + let total_supply = 15u128; + let token_standard = 0u8; + let metadata_standard = 0u8; + let metadata_values: Data = Data::try_from([1u8;450].to_vec()).unwrap(); + + let pre_states = vec![AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([1; 32]), + }]; + let _post_states = new_definition_with_metadata(&pre_states, name, total_supply, token_standard, metadata_standard, &metadata_values); + } + + #[should_panic(expected = "Invalid number of input accounts")] + #[test] + fn test_call_new_definition_metadata_with_invalid_number_of_accounts_2() { + let name = [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe]; + let total_supply = 15u128; + let token_standard = 0u8; + let metadata_standard = 0u8; + let metadata_values: Data = Data::try_from([1u8;450].to_vec()).unwrap(); + + let pre_states = vec![ + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([1; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([2; 32]), + }, + ]; + let _post_states = new_definition_with_metadata(&pre_states, name, total_supply, token_standard, metadata_standard, &metadata_values); + } + + #[should_panic(expected = "Invalid number of input accounts")] + #[test] + fn test_call_new_definition_metadata_with_invalid_number_of_accounts_3() { + let name = [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe]; + let total_supply = 15u128; + let token_standard = 0u8; + let metadata_standard = 0u8; + let metadata_values: Data = Data::try_from([1u8;450].to_vec()).unwrap(); + + let pre_states = vec![ + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([1; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([2; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([3; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([4; 32]), + }, + ]; + let _post_states = new_definition_with_metadata(&pre_states, name, total_supply, token_standard, metadata_standard, &metadata_values); + } + + #[should_panic(expected = "Definition target account must have default values")] + #[test] + fn test_call_new_definition_metadata_with_init_definition() { + let name = [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe]; + let total_supply = 15u128; + let token_standard = 0u8; + let metadata_standard = 0u8; + let metadata_values: Data = Data::try_from([1u8;450].to_vec()).unwrap(); + + let pre_states = vec![ + helper_account_constructor(AccountsEnum::DefinitionAccountAuth), + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([2; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([3; 32]), + }, + ]; + let _post_states = new_definition_with_metadata(&pre_states, name, total_supply, token_standard, metadata_standard, &metadata_values); + } + + #[should_panic(expected ="Metadata target account must have default values")] + #[test] + fn test_call_new_definition_metadata_with_init_metadata() { + let name = [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe]; + let total_supply = 15u128; + let token_standard = 0u8; + let metadata_standard = 0u8; + let metadata_values: Data = Data::try_from([1u8;450].to_vec()).unwrap(); + + let pre_states = vec![ + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([1; 32]), + }, + helper_account_constructor(AccountsEnum::HoldingSameDefMint), //TODO: change to a metadata account + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([3; 32]), + }, + ]; + let _post_states = new_definition_with_metadata(&pre_states, name, total_supply, token_standard, metadata_standard, &metadata_values); + } + + #[should_panic(expected ="Holding target account must have default values")] + #[test] + fn test_call_new_definition_metadata_with_init_holding() { + let name = [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe]; + let total_supply = 15u128; + let token_standard = 0u8; + let metadata_standard = 0u8; + let metadata_values: Data = Data::try_from([1u8;450].to_vec()).unwrap(); + + let pre_states = vec![ + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([1; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([2; 32]), + }, + helper_account_constructor(AccountsEnum::HoldingSameDefMint), + ]; + let _post_states = new_definition_with_metadata(&pre_states, name, total_supply, token_standard, metadata_standard, &metadata_values); + } + + #[should_panic(expected ="Metadata values data should be 450 bytes")] + #[test] + fn test_call_new_definition_metadata_with_too_short_metadata_length() { + let name = [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe]; + let total_supply = 15u128; + let token_standard = 0u8; + let metadata_standard = 0u8; + let metadata_values: Data = Data::try_from([1u8;449].to_vec()).unwrap(); + + let pre_states = vec![ + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([1; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([2; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([3; 32]), + }, + ]; + let _post_states = new_definition_with_metadata(&pre_states, name, total_supply, token_standard, metadata_standard, &metadata_values); + } + + #[should_panic(expected ="Metadata values data should be 450 bytes")] + #[test] + fn test_call_new_definition_metadata_with_too_long_metadata_length() { + let name = [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe]; + let total_supply = 15u128; + let token_standard = 0u8; + let metadata_standard = 0u8; + let metadata_values: Data = Data::try_from([1u8;451].to_vec()).unwrap(); + + let pre_states = vec![ + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([1; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([2; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([3; 32]), + }, + ]; + let _post_states = new_definition_with_metadata(&pre_states, name, total_supply, token_standard, metadata_standard, &metadata_values); + } + } + +/* + pre_states: &[AccountWithMetadata], + name: [u8; 6], + total_supply: u128, + token_standard: TokenStandardEnum, + metadata_standard: MetadataStandardEnum, + metadata_values: &Data, + +*/ \ No newline at end of file From 5212d456abb4d0e60c81dee5172411a8532e20b8 Mon Sep 17 00:00:00 2001 From: Pravdyvy Date: Fri, 12 Dec 2025 13:40:56 +0200 Subject: [PATCH 06/33] fix: integration tests --- integration_tests/src/test_suite_map.rs | 781 ++++++++++++++++-------- wallet/src/cli/programs/token.rs | 240 ++------ wallet/src/program_facades/token.rs | 61 -- 3 files changed, 575 insertions(+), 507 deletions(-) diff --git a/integration_tests/src/test_suite_map.rs b/integration_tests/src/test_suite_map.rs index ccd7906..758bec2 100644 --- a/integration_tests/src/test_suite_map.rs +++ b/integration_tests/src/test_suite_map.rs @@ -434,6 +434,90 @@ pub fn prepare_function_map() -> HashMap { u128::from_le_bytes(recipient_acc.data[33..].try_into().unwrap()), 7 ); + + // Burn 3 tokens from `recipient_acc` + let subcommand = TokenProgramAgnosticSubcommand::Burn { + definition: make_public_account_input_from_str(&definition_account_id.to_string()), + holder: make_public_account_input_from_str(&recipient_account_id.to_string()), + amount: 3, + }; + + wallet::cli::execute_subcommand(Command::Token(subcommand)) + .await + .unwrap(); + info!("Waiting for next block creation"); + tokio::time::sleep(Duration::from_secs(TIME_TO_WAIT_FOR_BLOCK_SECONDS)).await; + + // Check the status of the token definition account is the expected after the execution + let definition_acc = seq_client + .get_account(definition_account_id.to_string()) + .await + .unwrap() + .account; + + assert_eq!( + definition_acc.data.as_ref(), + &[ + 0, 65, 32, 78, 65, 77, 69, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ] + ); + + // Check the status of the account at `recipient_account_id` is the expected after the + // execution + let recipient_acc = seq_client + .get_account(recipient_account_id.to_string()) + .await + .unwrap() + .account; + + assert_eq!( + u128::from_le_bytes(recipient_acc.data[33..].try_into().unwrap()), + 4 + ); + + // Mint 10 tokens at `recipient_acc` + let subcommand = TokenProgramAgnosticSubcommand::Mint { + definition: make_public_account_input_from_str(&definition_account_id.to_string()), + holder: Some(make_public_account_input_from_str( + &recipient_account_id.to_string(), + )), + holder_npk: None, + holder_ipk: None, + amount: 10, + }; + + wallet::cli::execute_subcommand(Command::Token(subcommand)) + .await + .unwrap(); + info!("Waiting for next block creation"); + tokio::time::sleep(Duration::from_secs(TIME_TO_WAIT_FOR_BLOCK_SECONDS)).await; + + // Check the status of the token definition account is the expected after the execution + let definition_acc = seq_client + .get_account(definition_account_id.to_string()) + .await + .unwrap() + .account; + + assert_eq!( + definition_acc.data.as_ref(), + &[ + 0, 65, 32, 78, 65, 77, 69, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ] + ); + + // Check the status of the account at `recipient_account_id` is the expected after the + // execution + let recipient_acc = seq_client + .get_account(recipient_account_id.to_string()) + .await + .unwrap() + .account; + + assert_eq!( + u128::from_le_bytes(recipient_acc.data[33..].try_into().unwrap()), + 14 + ); } /// This test creates a new private token using the token program. After creating the token, the @@ -590,6 +674,188 @@ pub fn prepare_function_map() -> HashMap { .get_private_account_commitment(&recipient_account_id) .unwrap(); assert!(verify_commitment_is_in_state(new_commitment2, &seq_client).await); + + // Burn 3 tokens from `recipient_acc` + let subcommand = TokenProgramAgnosticSubcommand::Burn { + definition: make_public_account_input_from_str(&definition_account_id.to_string()), + holder: make_private_account_input_from_str(&recipient_account_id.to_string()), + amount: 3, + }; + + wallet::cli::execute_subcommand(Command::Token(subcommand)) + .await + .unwrap(); + info!("Waiting for next block creation"); + tokio::time::sleep(Duration::from_secs(TIME_TO_WAIT_FOR_BLOCK_SECONDS)).await; + + // Check the status of the token definition account is the expected after the execution + let definition_acc = seq_client + .get_account(definition_account_id.to_string()) + .await + .unwrap() + .account; + + assert_eq!( + definition_acc.data.as_ref(), + &[ + 0, 65, 32, 78, 65, 77, 69, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ] + ); + + let wallet_config = fetch_config().await.unwrap(); + let wallet_storage = WalletCore::start_from_config_update_chain(wallet_config) + .await + .unwrap(); + + let new_commitment2 = wallet_storage + .get_private_account_commitment(&recipient_account_id) + .unwrap(); + assert!(verify_commitment_is_in_state(new_commitment2, &seq_client).await); + + // Check the status of the account at `recipient_account_id` is the expected after the + // execution + let recipient_acc = wallet_storage + .get_account_private(&recipient_account_id) + .unwrap(); + + assert_eq!( + u128::from_le_bytes(recipient_acc.data[33..].try_into().unwrap()), + 11 + ); + + // Mint 10 tokens at `recipient_acc` + let subcommand = TokenProgramAgnosticSubcommand::Mint { + definition: make_public_account_input_from_str(&definition_account_id.to_string()), + holder: Some(make_private_account_input_from_str( + &recipient_account_id.to_string(), + )), + holder_npk: None, + holder_ipk: None, + amount: 10, + }; + + wallet::cli::execute_subcommand(Command::Token(subcommand)) + .await + .unwrap(); + info!("Waiting for next block creation"); + tokio::time::sleep(Duration::from_secs(TIME_TO_WAIT_FOR_BLOCK_SECONDS)).await; + + // Check the status of the token definition account is the expected after the execution + let definition_acc = seq_client + .get_account(definition_account_id.to_string()) + .await + .unwrap() + .account; + + assert_eq!( + definition_acc.data.as_ref(), + &[ + 0, 65, 32, 78, 65, 77, 69, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ] + ); + + let wallet_config = fetch_config().await.unwrap(); + let wallet_storage = WalletCore::start_from_config_update_chain(wallet_config) + .await + .unwrap(); + + let new_commitment2 = wallet_storage + .get_private_account_commitment(&recipient_account_id) + .unwrap(); + assert!(verify_commitment_is_in_state(new_commitment2, &seq_client).await); + + // Check the status of the account at `recipient_account_id` is the expected after the + // execution + let recipient_acc = wallet_storage + .get_account_private(&recipient_account_id) + .unwrap(); + + assert_eq!( + u128::from_le_bytes(recipient_acc.data[33..].try_into().unwrap()), + 21 + ); + + // Now the same mint, but in foreign way + + // Create new account for receiving a mint transaction + let SubcommandReturnValue::RegisterAccount { + account_id: recipient_account_id2, + } = wallet::cli::execute_subcommand(Command::Account(AccountSubcommand::New( + NewSubcommand::Private { cci: None }, + ))) + .await + .unwrap() + else { + panic!("invalid subcommand return value"); + }; + + let wallet_config = fetch_config().await.unwrap(); + let wallet_storage = WalletCore::start_from_config_update_chain(wallet_config) + .await + .unwrap(); + + let (holder_keys, _) = wallet_storage + .storage + .user_data + .get_private_account(&recipient_account_id2) + .unwrap(); + + // Mint 9 tokens at `recipient_acc2` + let subcommand = TokenProgramAgnosticSubcommand::Mint { + definition: make_public_account_input_from_str(&definition_account_id.to_string()), + holder: None, + holder_npk: Some(hex::encode(holder_keys.nullifer_public_key.0)), + holder_ipk: Some(hex::encode( + holder_keys.incoming_viewing_public_key.0.clone(), + )), + amount: 9, + }; + + wallet::cli::execute_subcommand(Command::Token(subcommand)) + .await + .unwrap(); + info!("Waiting for next block creation"); + tokio::time::sleep(Duration::from_secs(TIME_TO_WAIT_FOR_BLOCK_SECONDS)).await; + + // Sync to claim holder + let command = Command::Account(AccountSubcommand::SyncPrivate {}); + + wallet::cli::execute_subcommand(command).await.unwrap(); + + // Check the status of the token definition account is the expected after the execution + let definition_acc = seq_client + .get_account(definition_account_id.to_string()) + .await + .unwrap() + .account; + + assert_eq!( + definition_acc.data.as_ref(), + &[ + 0, 65, 32, 78, 65, 77, 69, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ] + ); + + let wallet_config = fetch_config().await.unwrap(); + let wallet_storage = WalletCore::start_from_config_update_chain(wallet_config) + .await + .unwrap(); + + let new_commitment2 = wallet_storage + .get_private_account_commitment(&recipient_account_id2) + .unwrap(); + assert!(verify_commitment_is_in_state(new_commitment2, &seq_client).await); + + // Check the status of the account at `recipient_account_id2` is the expected after the + // execution + let recipient_acc = wallet_storage + .get_account_private(&recipient_account_id2) + .unwrap(); + + assert_eq!( + u128::from_le_bytes(recipient_acc.data[33..].try_into().unwrap()), + 9 + ); } /// This test creates a new private token using the token program. All accounts are private @@ -673,6 +939,277 @@ pub fn prepare_function_map() -> HashMap { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] ); + + // Create new account for receiving a mint transaction + let SubcommandReturnValue::RegisterAccount { + account_id: recipient_account_id_pr, + } = wallet::cli::execute_subcommand(Command::Account(AccountSubcommand::New( + NewSubcommand::Private { cci: None }, + ))) + .await + .unwrap() + else { + panic!("invalid subcommand return value"); + }; + + // Create new account for receiving a mint transaction + let SubcommandReturnValue::RegisterAccount { + account_id: recipient_account_id_pub, + } = wallet::cli::execute_subcommand(Command::Account(AccountSubcommand::New( + NewSubcommand::Public { cci: None }, + ))) + .await + .unwrap() + else { + panic!("invalid subcommand return value"); + }; + + // Mint 10 tokens at `recipient_acc_pub` + let subcommand = TokenProgramAgnosticSubcommand::Mint { + definition: make_private_account_input_from_str(&definition_account_id.to_string()), + holder: Some(make_public_account_input_from_str( + &recipient_account_id_pub.to_string(), + )), + holder_npk: None, + holder_ipk: None, + amount: 10, + }; + + wallet::cli::execute_subcommand(Command::Token(subcommand)) + .await + .unwrap(); + info!("Waiting for next block creation"); + tokio::time::sleep(Duration::from_secs(TIME_TO_WAIT_FOR_BLOCK_SECONDS)).await; + + let wallet_config = fetch_config().await.unwrap(); + let wallet_storage = WalletCore::start_from_config_update_chain(wallet_config) + .await + .unwrap(); + + // Check the status of the token definition account is the expected after the execution + let definition_acc = wallet_storage + .get_account_private(&definition_account_id) + .unwrap(); + + assert_eq!( + definition_acc.data.as_ref(), + &[ + 0, 65, 32, 78, 65, 77, 69, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ] + ); + + // Check the status of the account at `recipient_account_id_pub` is the expected after the + // execution + let recipient_acc_pub = seq_client + .get_account(recipient_account_id_pub.to_string()) + .await + .unwrap() + .account; + + assert_eq!( + u128::from_le_bytes(recipient_acc_pub.data[33..].try_into().unwrap()), + 10 + ); + + let (holder_keys, _) = wallet_storage + .storage + .user_data + .get_private_account(&recipient_account_id_pr) + .unwrap(); + + // Mint 5 tokens at `recipient_acc_pr` + let subcommand = TokenProgramAgnosticSubcommand::Mint { + definition: make_private_account_input_from_str(&definition_account_id.to_string()), + holder: None, + holder_npk: Some(hex::encode(holder_keys.nullifer_public_key.0)), + holder_ipk: Some(hex::encode( + holder_keys.incoming_viewing_public_key.0.clone(), + )), + amount: 5, + }; + + wallet::cli::execute_subcommand(Command::Token(subcommand)) + .await + .unwrap(); + info!("Waiting for next block creation"); + tokio::time::sleep(Duration::from_secs(TIME_TO_WAIT_FOR_BLOCK_SECONDS)).await; + + // Sync to claim holder + let command = Command::Account(AccountSubcommand::SyncPrivate {}); + + wallet::cli::execute_subcommand(command).await.unwrap(); + + let wallet_config = fetch_config().await.unwrap(); + let wallet_storage = WalletCore::start_from_config_update_chain(wallet_config) + .await + .unwrap(); + + // Check the status of the token definition account is the expected after the execution + let definition_acc = wallet_storage + .get_account_private(&definition_account_id) + .unwrap(); + + assert_eq!( + definition_acc.data.as_ref(), + &[ + 0, 65, 32, 78, 65, 77, 69, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ] + ); + + let new_commitment2 = wallet_storage + .get_private_account_commitment(&recipient_account_id_pr) + .unwrap(); + assert!(verify_commitment_is_in_state(new_commitment2, &seq_client).await); + + // Check the status of the account at `recipient_account_id_pr` is the expected after the + // execution + let recipient_acc_pr = wallet_storage + .get_account_private(&recipient_account_id_pr) + .unwrap(); + + assert_eq!( + u128::from_le_bytes(recipient_acc_pr.data[33..].try_into().unwrap()), + 5 + ); + + // Mint 5 tokens at `recipient_acc_pr` + let subcommand = TokenProgramAgnosticSubcommand::Mint { + definition: make_private_account_input_from_str(&definition_account_id.to_string()), + holder: Some(make_private_account_input_from_str( + &recipient_account_id_pr.to_string(), + )), + holder_npk: None, + holder_ipk: None, + amount: 5, + }; + + wallet::cli::execute_subcommand(Command::Token(subcommand)) + .await + .unwrap(); + info!("Waiting for next block creation"); + tokio::time::sleep(Duration::from_secs(TIME_TO_WAIT_FOR_BLOCK_SECONDS)).await; + + let wallet_config = fetch_config().await.unwrap(); + let wallet_storage = WalletCore::start_from_config_update_chain(wallet_config) + .await + .unwrap(); + + // Check the status of the token definition account is the expected after the execution + let definition_acc = wallet_storage + .get_account_private(&definition_account_id) + .unwrap(); + + assert_eq!( + definition_acc.data.as_ref(), + &[ + 0, 65, 32, 78, 65, 77, 69, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ] + ); + + let new_commitment2 = wallet_storage + .get_private_account_commitment(&recipient_account_id_pr) + .unwrap(); + assert!(verify_commitment_is_in_state(new_commitment2, &seq_client).await); + + // Check the status of the account at `recipient_account_id_pr` is the expected after the + // execution + let recipient_acc = wallet_storage + .get_account_private(&recipient_account_id_pr) + .unwrap(); + + assert_eq!( + u128::from_le_bytes(recipient_acc.data[33..].try_into().unwrap()), + 10 + ); + + // Burn 5 tokens at `recipient_acc_pub` + let subcommand = TokenProgramAgnosticSubcommand::Burn { + definition: make_private_account_input_from_str(&definition_account_id.to_string()), + holder: make_public_account_input_from_str(&recipient_account_id_pub.to_string()), + amount: 5, + }; + + wallet::cli::execute_subcommand(Command::Token(subcommand)) + .await + .unwrap(); + info!("Waiting for next block creation"); + tokio::time::sleep(Duration::from_secs(TIME_TO_WAIT_FOR_BLOCK_SECONDS)).await; + + let wallet_config = fetch_config().await.unwrap(); + let wallet_storage = WalletCore::start_from_config_update_chain(wallet_config) + .await + .unwrap(); + + // Check the status of the token definition account is the expected after the execution + let definition_acc = wallet_storage + .get_account_private(&definition_account_id) + .unwrap(); + + assert_eq!( + definition_acc.data.as_ref(), + &[ + 0, 65, 32, 78, 65, 77, 69, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ] + ); + + // Check the status of the account at `recipient_account_id_pub` is the expected after the + // execution + let recipient_acc_pub = seq_client + .get_account(recipient_account_id_pub.to_string()) + .await + .unwrap() + .account; + + assert_eq!( + u128::from_le_bytes(recipient_acc_pub.data[33..].try_into().unwrap()), + 5 + ); + + // Burn 5 tokens at `recipient_acc_pr` + let subcommand = TokenProgramAgnosticSubcommand::Burn { + definition: make_private_account_input_from_str(&definition_account_id.to_string()), + holder: make_private_account_input_from_str(&recipient_account_id_pr.to_string()), + amount: 5, + }; + + wallet::cli::execute_subcommand(Command::Token(subcommand)) + .await + .unwrap(); + info!("Waiting for next block creation"); + tokio::time::sleep(Duration::from_secs(TIME_TO_WAIT_FOR_BLOCK_SECONDS)).await; + + let wallet_config = fetch_config().await.unwrap(); + let wallet_storage = WalletCore::start_from_config_update_chain(wallet_config) + .await + .unwrap(); + + // Check the status of the token definition account is the expected after the execution + let definition_acc = wallet_storage + .get_account_private(&definition_account_id) + .unwrap(); + + assert_eq!( + definition_acc.data.as_ref(), + &[ + 0, 65, 32, 78, 65, 77, 69, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ] + ); + + let new_commitment2 = wallet_storage + .get_private_account_commitment(&recipient_account_id_pr) + .unwrap(); + assert!(verify_commitment_is_in_state(new_commitment2, &seq_client).await); + + // Check the status of the account at `recipient_account_id_pr` is the expected after the + // execution + let recipient_acc = wallet_storage + .get_account_private(&recipient_account_id_pr) + .unwrap(); + + assert_eq!( + u128::from_le_bytes(recipient_acc.data[33..].try_into().unwrap()), + 5 + ); } /// This test creates a new private token using the token program. All accounts are private @@ -1548,250 +2085,6 @@ pub fn prepare_function_map() -> HashMap { info!("Success!"); } - /// This test creates a new token using the token program. After creating the token, the test - /// executes a token transfer to a new account then mint, then burn. - #[nssa_integration_test] - pub async fn test_success_token_program_burn_mint() { - info!("########## test_success_token_program_burn_mint ##########"); - let wallet_config = fetch_config().await.unwrap(); - - // Create new account for the token definition - let SubcommandReturnValue::RegisterAccount { - account_id: definition_account_id, - } = wallet::cli::execute_subcommand(Command::Account(AccountSubcommand::New( - NewSubcommand::Public { cci: None }, - ))) - .await - .unwrap() - else { - panic!("invalid subcommand return value"); - }; - // Create new account for the token supply holder - let SubcommandReturnValue::RegisterAccount { - account_id: supply_account_id, - } = wallet::cli::execute_subcommand(Command::Account(AccountSubcommand::New( - NewSubcommand::Public { cci: None }, - ))) - .await - .unwrap() - else { - panic!("invalid subcommand return value"); - }; - // Create new account for receiving a token transaction - let SubcommandReturnValue::RegisterAccount { - account_id: recipient_account_id, - } = wallet::cli::execute_subcommand(Command::Account(AccountSubcommand::New( - NewSubcommand::Public { cci: None }, - ))) - .await - .unwrap() - else { - panic!("invalid subcommand return value"); - }; - - // Create new token - let subcommand = TokenProgramAgnosticSubcommand::New { - definition_account_id: make_public_account_input_from_str( - &definition_account_id.to_string(), - ), - supply_account_id: make_public_account_input_from_str(&supply_account_id.to_string()), - name: "A NAME".to_string(), - total_supply: 37, - }; - wallet::cli::execute_subcommand(Command::Token(subcommand)) - .await - .unwrap(); - info!("Waiting for next block creation"); - tokio::time::sleep(Duration::from_secs(TIME_TO_WAIT_FOR_BLOCK_SECONDS)).await; - - let seq_client = SequencerClient::new(wallet_config.sequencer_addr.clone()).unwrap(); - - // Check the status of the token definition account is the expected after the execution - let definition_acc = seq_client - .get_account(definition_account_id.to_string()) - .await - .unwrap() - .account; - - assert_eq!(definition_acc.program_owner, Program::token().id()); - // The data of a token definition account has the following layout: - // [ 0x00 || name (6 bytes) || total supply (little endian 16 bytes) ] - assert_eq!( - definition_acc.data.as_ref(), - &[ - 0, 65, 32, 78, 65, 77, 69, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - ] - ); - - // Check the status of the token holding account with the total supply is the expected after - // the execution - let supply_acc = seq_client - .get_account(supply_account_id.to_string()) - .await - .unwrap() - .account; - - // The account must be owned by the token program - assert_eq!(supply_acc.program_owner, Program::token().id()); - // The data of a token definition account has the following layout: - // [ 0x01 || corresponding_token_definition_id (32 bytes) || balance (little endian 16 - // bytes) ] First byte of the data equal to 1 means it's a token holding account - assert_eq!(supply_acc.data.as_ref()[0], 1); - // Bytes from 1 to 33 represent the id of the token this account is associated with. - // In this example, this is a token account of the newly created token, so it is expected - // to be equal to the account_id of the token definition account. - assert_eq!( - &supply_acc.data.as_ref()[1..33], - definition_account_id.to_bytes() - ); - assert_eq!( - u128::from_le_bytes(supply_acc.data[33..].try_into().unwrap()), - 37 - ); - - // Transfer 7 tokens from `supply_acc` to the account at account_id `recipient_account_id` - let subcommand = TokenProgramAgnosticSubcommand::Send { - from: make_public_account_input_from_str(&supply_account_id.to_string()), - to: Some(make_public_account_input_from_str( - &recipient_account_id.to_string(), - )), - to_npk: None, - to_ipk: None, - amount: 7, - }; - - wallet::cli::execute_subcommand(Command::Token(subcommand)) - .await - .unwrap(); - info!("Waiting for next block creation"); - tokio::time::sleep(Duration::from_secs(TIME_TO_WAIT_FOR_BLOCK_SECONDS)).await; - - // Check the status of the account at `supply_account_id` is the expected after the - // execution - let supply_acc = seq_client - .get_account(supply_account_id.to_string()) - .await - .unwrap() - .account; - // The account must be owned by the token program - assert_eq!(supply_acc.program_owner, Program::token().id()); - // First byte equal to 1 means it's a token holding account - assert_eq!(supply_acc.data[0], 1); - // Bytes from 1 to 33 represent the id of the token this account is associated with. - assert_eq!(&supply_acc.data[1..33], definition_account_id.to_bytes()); - assert_eq!( - u128::from_le_bytes(supply_acc.data[33..].try_into().unwrap()), - 30 - ); - - // Check the status of the account at `recipient_account_id` is the expected after the - // execution - let recipient_acc = seq_client - .get_account(recipient_account_id.to_string()) - .await - .unwrap() - .account; - - // The account must be owned by the token program - assert_eq!(recipient_acc.program_owner, Program::token().id()); - // First byte equal to 1 means it's a token holding account - assert_eq!(recipient_acc.data[0], 1); - // Bytes from 1 to 33 represent the id of the token this account is associated with. - assert_eq!(&recipient_acc.data[1..33], definition_account_id.to_bytes()); - assert_eq!( - u128::from_le_bytes(recipient_acc.data[33..].try_into().unwrap()), - 7 - ); - - // Burn 3 tokens from `recipient_acc` - let subcommand = TokenProgramAgnosticSubcommand::Burn { - definition: Some(make_public_account_input_from_str( - &definition_account_id.to_string(), - )), - definition_npk: None, - definition_ipk: None, - holder: make_public_account_input_from_str(&recipient_account_id.to_string()), - amount: 3, - }; - - wallet::cli::execute_subcommand(Command::Token(subcommand)) - .await - .unwrap(); - info!("Waiting for next block creation"); - tokio::time::sleep(Duration::from_secs(TIME_TO_WAIT_FOR_BLOCK_SECONDS)).await; - - // Check the status of the token definition account is the expected after the execution - let definition_acc = seq_client - .get_account(definition_account_id.to_string()) - .await - .unwrap() - .account; - - assert_eq!( - definition_acc.data.as_ref(), - &[ - 0, 65, 32, 78, 65, 77, 69, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - ] - ); - - // Check the status of the account at `recipient_account_id` is the expected after the - // execution - let recipient_acc = seq_client - .get_account(recipient_account_id.to_string()) - .await - .unwrap() - .account; - - assert_eq!( - u128::from_le_bytes(recipient_acc.data[33..].try_into().unwrap()), - 4 - ); - - // Mint 10 tokens at `recipient_acc` - let subcommand = TokenProgramAgnosticSubcommand::Mint { - definition: make_public_account_input_from_str(&definition_account_id.to_string()), - holder: Some(make_public_account_input_from_str( - &recipient_account_id.to_string(), - )), - holder_npk: None, - holder_ipk: None, - amount: 10, - }; - - wallet::cli::execute_subcommand(Command::Token(subcommand)) - .await - .unwrap(); - info!("Waiting for next block creation"); - tokio::time::sleep(Duration::from_secs(TIME_TO_WAIT_FOR_BLOCK_SECONDS)).await; - - // Check the status of the token definition account is the expected after the execution - let definition_acc = seq_client - .get_account(definition_account_id.to_string()) - .await - .unwrap() - .account; - - assert_eq!( - definition_acc.data.as_ref(), - &[ - 0, 65, 32, 78, 65, 77, 69, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - ] - ); - - // Check the status of the account at `recipient_account_id` is the expected after the - // execution - let recipient_acc = seq_client - .get_account(recipient_account_id.to_string()) - .await - .unwrap() - .account; - - assert_eq!( - u128::from_le_bytes(recipient_acc.data[33..].try_into().unwrap()), - 14 - ); - } - #[nssa_integration_test] pub async fn test_pinata() { info!("########## test_pinata ##########"); diff --git a/wallet/src/cli/programs/token.rs b/wallet/src/cli/programs/token.rs index 24f314e..1a3b256 100644 --- a/wallet/src/cli/programs/token.rs +++ b/wallet/src/cli/programs/token.rs @@ -4,7 +4,7 @@ use common::transaction::NSSATransaction; use nssa::AccountId; use crate::{ - AccDecodeData::{Decode, Skip}, + AccDecodeData::Decode, WalletCore, cli::{SubcommandReturnValue, WalletSubcommand}, helperfunctions::{AccountPrivacyKind, parse_addr_with_privacy_prefix}, @@ -54,20 +54,14 @@ pub enum TokenProgramAgnosticSubcommand { /// /// `holder` is owned /// - /// If `definition` is private, then `definition` and (`definition_npk` , `definition_ipk`) is a - /// mutually exclusive patterns. + /// Also if `definition` is private then it is owned, because + /// we can not modify foreign accounts. /// - /// First is used for owned accounts, second otherwise. + /// ToDo: Return and add foreign variant when we could modify foreign accounts Burn { /// definition - valid 32 byte base58 string with privacy prefix #[arg(long)] - definition: Option, - /// definition_npk - valid 32 byte hex string - #[arg(long)] - definition_npk: Option, - /// definition_ipk - valid 33 byte hex string - #[arg(long)] - definition_ipk: Option, + definition: String, /// holder - valid 32 byte base58 string with privacy prefix #[arg(long)] holder: String, @@ -256,89 +250,50 @@ impl WalletSubcommand for TokenProgramAgnosticSubcommand { } TokenProgramAgnosticSubcommand::Burn { definition, - definition_npk, - definition_ipk, holder, amount, } => { - let underlying_subcommand = match (definition, definition_npk, definition_ipk) { - (None, None, None) => { - anyhow::bail!( - "Provide either account account_id of definition or their public keys" - ); - } - (Some(_), Some(_), Some(_)) => { - anyhow::bail!( - "Provide only one variant: either account_id of definition or their public keys" - ); - } - (_, Some(_), None) | (_, None, Some(_)) => { - anyhow::bail!("List of public keys is uncomplete"); - } - (Some(definition), None, None) => { - let (definition, definition_privacy) = - parse_addr_with_privacy_prefix(&definition)?; - let (holder, holder_privacy) = parse_addr_with_privacy_prefix(&holder)?; + let underlying_subcommand = { + let (definition, definition_privacy) = + parse_addr_with_privacy_prefix(&definition)?; + let (holder, holder_privacy) = parse_addr_with_privacy_prefix(&holder)?; - match (definition_privacy, holder_privacy) { - (AccountPrivacyKind::Public, AccountPrivacyKind::Public) => { - TokenProgramSubcommand::Public( - TokenProgramSubcommandPublic::BurnToken { - definition_account_id: definition, - holder_account_id: holder, - amount, - }, - ) - } - (AccountPrivacyKind::Private, AccountPrivacyKind::Private) => { - TokenProgramSubcommand::Private( - TokenProgramSubcommandPrivate::BurnTokenPrivateOwned { - definition_account_id: definition, - holder_account_id: holder, - amount, - }, - ) - } - (AccountPrivacyKind::Private, AccountPrivacyKind::Public) => { - TokenProgramSubcommand::Deshielded( - TokenProgramSubcommandDeshielded::BurnTokenDeshieldedOwned { - definition_account_id: definition, - holder_account_id: holder, - amount, - }, - ) - } - (AccountPrivacyKind::Public, AccountPrivacyKind::Private) => { - TokenProgramSubcommand::Shielded( - TokenProgramSubcommandShielded::BurnTokenShielded { - definition_account_id: definition, - holder_account_id: holder, - amount, - }, - ) - } + match (definition_privacy, holder_privacy) { + (AccountPrivacyKind::Public, AccountPrivacyKind::Public) => { + TokenProgramSubcommand::Public( + TokenProgramSubcommandPublic::BurnToken { + definition_account_id: definition, + holder_account_id: holder, + amount, + }, + ) } - } - (None, Some(definition_npk), Some(definition_ipk)) => { - let (holder, holder_privacy) = parse_addr_with_privacy_prefix(&holder)?; - - match holder_privacy { - AccountPrivacyKind::Private => TokenProgramSubcommand::Private( - TokenProgramSubcommandPrivate::BurnTokenPrivateForeign { - definition_npk, - definition_ipk, + (AccountPrivacyKind::Private, AccountPrivacyKind::Private) => { + TokenProgramSubcommand::Private( + TokenProgramSubcommandPrivate::BurnTokenPrivateOwned { + definition_account_id: definition, holder_account_id: holder, amount, }, - ), - AccountPrivacyKind::Public => TokenProgramSubcommand::Deshielded( - TokenProgramSubcommandDeshielded::BurnTokenDeshieldedForeign { - definition_npk, - definition_ipk, + ) + } + (AccountPrivacyKind::Private, AccountPrivacyKind::Public) => { + TokenProgramSubcommand::Deshielded( + TokenProgramSubcommandDeshielded::BurnTokenDeshieldedOwned { + definition_account_id: definition, holder_account_id: holder, amount, }, - ), + ) + } + (AccountPrivacyKind::Public, AccountPrivacyKind::Private) => { + TokenProgramSubcommand::Shielded( + TokenProgramSubcommandShielded::BurnTokenShielded { + definition_account_id: definition, + holder_account_id: holder, + amount, + }, + ) } } }; @@ -536,17 +491,6 @@ pub enum TokenProgramSubcommandPrivate { #[arg(short, long)] amount: u128, }, - // Burn tokens using the token program - BurnTokenPrivateForeign { - #[arg(short, long)] - definition_npk: String, - #[arg(short, long)] - definition_ipk: String, - #[arg(short, long)] - holder_account_id: String, - #[arg(short, long)] - amount: u128, - }, // Transfer tokens using the token program MintTokenPrivateForeign { #[arg(short, long)] @@ -590,17 +534,6 @@ pub enum TokenProgramSubcommandDeshielded { #[arg(short, long)] amount: u128, }, - // Burn tokens using the token program - BurnTokenDeshieldedForeign { - #[arg(short, long)] - definition_npk: String, - #[arg(short, long)] - definition_ipk: String, - #[arg(short, long)] - holder_account_id: String, - #[arg(short, long)] - amount: u128, - }, } /// Represents generic shielded CLI subcommand for a wallet working with token_program @@ -906,57 +839,6 @@ impl WalletSubcommand for TokenProgramSubcommandPrivate { Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) } - TokenProgramSubcommandPrivate::BurnTokenPrivateForeign { - definition_npk, - definition_ipk, - holder_account_id, - amount, - } => { - let definition_npk_res = hex::decode(definition_npk)?; - let mut definition_npk = [0; 32]; - definition_npk.copy_from_slice(&definition_npk_res); - let definition_npk = nssa_core::NullifierPublicKey(definition_npk); - - let definition_ipk_res = hex::decode(definition_ipk)?; - let mut definition_ipk = [0u8; 33]; - definition_ipk.copy_from_slice(&definition_ipk_res); - let definition_ipk = nssa_core::encryption::shared_key_derivation::Secp256k1Point( - definition_ipk.to_vec(), - ); - - let holder_account_id: AccountId = holder_account_id.parse().unwrap(); - - let (res, [_, secret_holder]) = Token(wallet_core) - .send_burn_transaction_private_foreign_account( - definition_npk, - definition_ipk, - holder_account_id, - amount, - ) - .await?; - - println!("Results of tx send are {res:#?}"); - - let tx_hash = res.tx_hash; - let transfer_tx = wallet_core - .poll_native_token_transfer(tx_hash.clone()) - .await?; - - if let NSSATransaction::PrivacyPreserving(tx) = transfer_tx { - let acc_decode_data = vec![Skip, Decode(secret_holder, holder_account_id)]; - - wallet_core.decode_insert_privacy_preserving_transaction_results( - tx, - &acc_decode_data, - )?; - } - - let path = wallet_core.store_persistent_data().await?; - - println!("Stored persistent accounts at {path:#?}"); - - Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) - } TokenProgramSubcommandPrivate::MintTokenPrivateOwned { definition_account_id, holder_account_id, @@ -1135,52 +1017,6 @@ impl WalletSubcommand for TokenProgramSubcommandDeshielded { Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) } - TokenProgramSubcommandDeshielded::BurnTokenDeshieldedForeign { - definition_npk, - definition_ipk, - holder_account_id, - amount, - } => { - let definition_npk_res = hex::decode(definition_npk)?; - let mut definition_npk = [0; 32]; - definition_npk.copy_from_slice(&definition_npk_res); - let definition_npk = nssa_core::NullifierPublicKey(definition_npk); - - let definition_ipk_res = hex::decode(definition_ipk)?; - let mut definition_ipk = [0u8; 33]; - definition_ipk.copy_from_slice(&definition_ipk_res); - let definition_ipk = nssa_core::encryption::shared_key_derivation::Secp256k1Point( - definition_ipk.to_vec(), - ); - - let holder_account_id: AccountId = holder_account_id.parse().unwrap(); - - let (res, _) = Token(wallet_core) - .send_burn_transaction_deshielded_foreign_account( - definition_npk, - definition_ipk, - holder_account_id, - amount, - ) - .await?; - - println!("Results of tx send are {res:#?}"); - - let tx_hash = res.tx_hash; - let transfer_tx = wallet_core - .poll_native_token_transfer(tx_hash.clone()) - .await?; - - if let NSSATransaction::PrivacyPreserving(tx) = transfer_tx { - println!("Transaction data is {:?}", tx.message); - } - - let path = wallet_core.store_persistent_data().await?; - - println!("Stored persistent accounts at {path:#?}"); - - Ok(SubcommandReturnValue::PrivacyPreservingTransfer { tx_hash }) - } TokenProgramSubcommandDeshielded::MintTokenDeshielded { definition_account_id, holder_account_id, diff --git a/wallet/src/program_facades/token.rs b/wallet/src/program_facades/token.rs index 804924b..a32fef9 100644 --- a/wallet/src/program_facades/token.rs +++ b/wallet/src/program_facades/token.rs @@ -367,36 +367,6 @@ impl Token<'_> { }) } - pub async fn send_burn_transaction_private_foreign_account( - &self, - definition_npk: NullifierPublicKey, - definition_ipk: IncomingViewingPublicKey, - holder_account_id: AccountId, - amount: u128, - ) -> Result<(SendTxResponse, [SharedSecretKey; 2]), ExecutionFailureKind> { - let (instruction_data, program) = token_program_preparation_burn(amount); - - self.0 - .send_privacy_preserving_tx( - vec![ - PrivacyPreservingAccount::PrivateForeign { - npk: definition_npk, - ipk: definition_ipk, - }, - PrivacyPreservingAccount::PrivateOwned(holder_account_id), - ], - &instruction_data, - &program, - ) - .await - .map(|(resp, secrets)| { - let mut iter = secrets.into_iter(); - let first = iter.next().expect("expected definition's secret"); - let second = iter.next().expect("expected holder's secret"); - (resp, [first, second]) - }) - } - pub async fn send_burn_transaction_deshielded_owned_account( &self, definition_account_id: AccountId, @@ -451,37 +421,6 @@ impl Token<'_> { }) } - pub async fn send_burn_transaction_deshielded_foreign_account( - &self, - definition_npk: NullifierPublicKey, - definition_ipk: IncomingViewingPublicKey, - holder_account_id: AccountId, - amount: u128, - ) -> Result<(SendTxResponse, SharedSecretKey), ExecutionFailureKind> { - let (instruction_data, program) = token_program_preparation_burn(amount); - - self.0 - .send_privacy_preserving_tx( - vec![ - PrivacyPreservingAccount::PrivateForeign { - npk: definition_npk, - ipk: definition_ipk, - }, - PrivacyPreservingAccount::Public(holder_account_id), - ], - &instruction_data, - &program, - ) - .await - .map(|(resp, secrets)| { - let first = secrets - .into_iter() - .next() - .expect("expected definition's secret"); - (resp, first) - }) - } - pub async fn send_mint_transaction( &self, definition_account_id: AccountId, From aa81a311acd5fab6fc2f32f6c0b7b318c6091926 Mon Sep 17 00:00:00 2001 From: jonesmarvin8 <83104039+jonesmarvin8@users.noreply.github.com> Date: Fri, 12 Dec 2025 16:30:54 -0500 Subject: [PATCH 07/33] Update token.rs --- nssa/program_methods/guest/src/bin/token.rs | 1840 +++++++++++++------ 1 file changed, 1227 insertions(+), 613 deletions(-) diff --git a/nssa/program_methods/guest/src/bin/token.rs b/nssa/program_methods/guest/src/bin/token.rs index 1345d7d..1901fb1 100644 --- a/nssa/program_methods/guest/src/bin/token.rs +++ b/nssa/program_methods/guest/src/bin/token.rs @@ -18,8 +18,10 @@ use nssa_core::{ // 2. Token transfer // Arguments to this function are: // * Two accounts: [sender_account, recipient_account]. +// * Authorization required: sender_account // * An instruction data byte string of length 23, indicating the total supply with the following layout // [0x01 || amount (little-endian 16 bytes) || 0x00 || 0x00 || 0x00 || 0x00 || 0x00 || 0x00]. +// * For NFT Master accounts, its entire balance must be transferred. // 3. Initialize account with zero balance // Arguments to this function are: // * Two accounts: [definition_account, account_to_initialize]. @@ -29,60 +31,75 @@ use nssa_core::{ // Arguments to this function are: // * Two accounts: [definition_account, holding_account]. // * Authorization required: holding_account -// * An instruction data byte string of length 23, indicating the balance to burn with the folloiwng layout +// * An instruction data byte string of length 23, indicating the balance to burn with the following layout // [0x03 || amount (little-endian 16 bytes) || 0x00 || 0x00 || 0x00 || 0x00 || 0x00 || 0x00]. // 5. Mint additional supply of tokens tokens to a Token Holding account (thus increasing total supply) // Arguments to this function are: // * Two accounts: [definition_account, holding_account]. // * Authorization required: definition_account -// * An instruction data byte string of length 23, indicating the balance to mint with the folloiwng layout +// * An instruction data byte string of length 23, indicating the balance to mint with the following layout // [0x04 || amount (little-endian 16 bytes) || 0x00 || 0x00 || 0x00 || 0x00 || 0x00 || 0x00]. +// 6. Print NFT copy from Master NFT +// Arguments to this function are: +// * Two accounts: [master_nft, account_to_initialize]. +// * Authorization required: master_nft +// * An dummy byte string of length 23, with the following layout +// [0x02 || 0x00 || 0x00 || 0x00 || ... || 0x00 || 0x00]. +const TOKEN_STANDARD_FUNGIBLE_TOKEN: u8 = 0; +const TOKEN_STANDARD_FUNGIBLE_ASSET: u8 = 1; +const TOKEN_STANDARD_NONFUNGIBLE: u8 = 2; +const TOKEN_STANDARD_NONFUNGIBLE_PRINTABLE: u8 = 3; -type TokenStandard = u8; - -enum TokenStandardEnum { - FungibleToken, - FungibleAsset, - NonFungible, -} -enum MetadataStandardEnum { - SimpleMetadata, - ExpandedMetadata, -} - -// Remove enums...unnecessary structure -fn helper_token_standard_constructor(selection: TokenStandardEnum) -> u8 { - match selection { - TokenStandardEnum::FungibleToken => 0, - TokenStandardEnum::FungibleAsset => 1, - TokenStandardEnum::NonFungible => 2, - _ => panic!("Invalid selection"), - } -} - - - -fn helper_metadata_standard_constructor(selection: MetadataStandardEnum) -> u8 { - match selection { - MetadataStandardEnum::SimpleMetadata => 0, - MetadataStandardEnum::ExpandedMetadata => 1, - } -} +const METADATA_TYPE_SIMPLE: u8 = 0; +const METADATA_TYPE_EXPANDED: u8 = 1; const TOKEN_DEFINITION_DATA_SIZE: usize = 55; -const TOKEN_HOLDING_TYPE: u8 = 1; -const TOKEN_HOLDING_MASTER_EDITION: u8 = 2; -const TOKEN_HOLDING_PRINTED: u8 = 3; - - +const TOKEN_HOLDING_STANDARD: u8 = 1; +const TOKEN_HOLDING_NFT_MASTER: u8 = 2; +const TOKEN_HOLDING_NFT_PRINTED_COPY: u8 = 3; const TOKEN_HOLDING_DATA_SIZE: usize = 49; const CURRENT_VERSION: u8 = 1; -const NUMBER_OF_METADATA_TYPES: u8 = 2; const TOKEN_METADATA_DATA_SIZE: usize = 463; +fn is_token_standard_valid(standard: u8) -> bool { + if standard == TOKEN_STANDARD_FUNGIBLE_TOKEN { + true + } else if standard == TOKEN_STANDARD_FUNGIBLE_ASSET { + true + } else if standard == TOKEN_STANDARD_NONFUNGIBLE { + true + } else if standard == TOKEN_STANDARD_NONFUNGIBLE_PRINTABLE { + true + } else { + false + } +} + +fn is_metadata_type_valid(standard: u8) -> bool { + if standard == METADATA_TYPE_SIMPLE { + true + } else if standard == METADATA_TYPE_EXPANDED { + true + } else { + false + } +} + +fn is_token_holding_type_valid(standard: u8) -> bool { + if standard == TOKEN_HOLDING_STANDARD { + true + } else if standard == TOKEN_HOLDING_NFT_MASTER { + true + } else if standard == TOKEN_HOLDING_NFT_PRINTED_COPY { + true + } else { + false + } +} + struct TokenDefinition { account_type: u8, // Token Standard name: [u8; 6], @@ -131,14 +148,13 @@ impl TokenDefinition { metadata_id: metadata_id.clone(), }); - //TODO tests if account_type == //NFTs must have supply 1 - helper_token_standard_constructor(TokenStandardEnum::NonFungible) + TOKEN_STANDARD_NONFUNGIBLE && total_supply != 1 { None } else if account_type == //Fungible Tokens do not have metadata. - helper_token_standard_constructor(TokenStandardEnum::FungibleToken) + TOKEN_STANDARD_FUNGIBLE_TOKEN && metadata_id != AccountId::new([0; 32]) { None @@ -149,9 +165,6 @@ impl TokenDefinition { } } -//TODO(edition/master edition/printable) -// => use balance for total prints allowed -// fix logic for NFTs to allow for printables struct TokenHolding { account_type: u8, definition_id: AccountId, @@ -161,7 +174,7 @@ struct TokenHolding { impl TokenHolding { fn new(definition_id: &AccountId) -> Self { Self { - account_type: TOKEN_HOLDING_TYPE, + account_type: TOKEN_HOLDING_STANDARD, definition_id: definition_id.clone(), balance: 0, } @@ -170,7 +183,12 @@ impl TokenHolding { fn parse(data: &Data) -> Option { let data = Vec::::from(data.clone()); - if data.len() != TOKEN_HOLDING_DATA_SIZE || data[0] != TOKEN_HOLDING_TYPE { + if data.len() != TOKEN_HOLDING_DATA_SIZE { + return None; + } + + // Check account_type + if !is_token_holding_type_valid(data[0]) { return None; } @@ -194,6 +212,10 @@ impl TokenHolding { } fn into_data(self) -> Data { + if !is_token_holding_type_valid(self.account_type) { + panic!("Invalid Token Holding type"); + } + let mut bytes = Vec::::new(); bytes.extend_from_slice(&[self.account_type]); bytes.extend_from_slice(&self.definition_id.to_bytes()); @@ -208,22 +230,17 @@ impl TokenHolding { } struct TokenMetadata { - account_type: u8, //Not sure if necessary + account_type: u8, version: u8, definition_id: AccountId, - uri: [u8; 200], //TODO: add to specs; this is the limit Solana uses - creators: [u8; 250], //TODO: double check this value; + uri: [u8; 200], + creators: [u8; 250], primary_sale_date: u64, //BlockId } -//TODO remove any unwraps impl TokenMetadata { fn into_data(self) -> Data { - if self.account_type - != helper_metadata_standard_constructor(MetadataStandardEnum::SimpleMetadata) - || self.account_type - != helper_metadata_standard_constructor(MetadataStandardEnum::ExpandedMetadata) - { + if !is_metadata_type_valid(self.account_type) { panic!("Invalid Metadata type"); } @@ -245,7 +262,7 @@ impl TokenMetadata { fn parse(data: &Data) -> Option { let data = Vec::::from(data.clone()); - if data.len() != TOKEN_METADATA_DATA_SIZE || data[0] >= NUMBER_OF_METADATA_TYPES { + if data.len() != TOKEN_METADATA_DATA_SIZE || !is_metadata_type_valid(data[0]) { None } else { let account_type = data[0]; @@ -289,10 +306,9 @@ fn transfer(pre_states: &[AccountWithMetadata], balance_to_move: u128) -> Vec Vec Vec (TokenHolding, TokenHolding) { + let mut sender_holding = sender_holding; + let mut recipient_holding = recipient_holding; + + if sender_holding.balance < balance_to_move { + panic!("Insufficient balance"); + } + + sender_holding.balance = sender_holding + .balance + .checked_sub(balance_to_move) + .expect("Checked above"); + recipient_holding.balance = recipient_holding + .balance + .checked_add(balance_to_move) + .expect("Recipient balance overflow"); + + recipient_holding.account_type = sender_holding.account_type; + + (sender_holding, recipient_holding) +} + +fn nft_master_transfer( + sender_holding: TokenHolding, + recipient_holding: TokenHolding, + balance_to_move: u128, +) -> (TokenHolding, TokenHolding) { + let mut sender_holding = sender_holding; + let mut recipient_holding = recipient_holding; + + if recipient_holding.balance != 0 { + panic!("Invalid balance in recipient account for NFT transfer"); + } + + if sender_holding.balance != balance_to_move { + panic!("Invalid balance for NFT Master transfer"); + } + + sender_holding.balance = 0; + recipient_holding.balance = balance_to_move; + recipient_holding.account_type = sender_holding.account_type; + + (sender_holding, recipient_holding) +} + fn new_definition( pre_states: &[AccountWithMetadata], name: [u8; 6], @@ -357,14 +416,14 @@ fn new_definition( } let token_definition = TokenDefinition { - account_type: helper_token_standard_constructor(TokenStandardEnum::FungibleToken), + account_type: TOKEN_STANDARD_FUNGIBLE_TOKEN, name, total_supply, metadata_id: AccountId::new([0; 32]), }; let token_holding = TokenHolding { - account_type: TOKEN_HOLDING_TYPE, + account_type: TOKEN_HOLDING_STANDARD, definition_id: definition_target_account.account_id.clone(), balance: total_supply, }; @@ -409,6 +468,14 @@ fn new_definition_with_metadata( panic!("Holding target account must have default values"); } + if !is_token_standard_valid(token_standard) { + panic!("Invalid Token Standard provided"); + } + + if !is_metadata_type_valid(metadata_standard) { + panic!("Invalid Metadata Standadard provided"); + } + if !valid_total_supply_for_token_standard(total_supply, token_standard) { panic!("Invalid total supply for the specified token supply"); } @@ -421,7 +488,7 @@ fn new_definition_with_metadata( }; let token_holding = TokenHolding { - account_type: TOKEN_HOLDING_TYPE, + account_type: TOKEN_HOLDING_STANDARD, definition_id: definition_target_account.account_id.clone(), balance: total_supply, }; @@ -463,9 +530,7 @@ fn new_definition_with_metadata( } fn valid_total_supply_for_token_standard(total_supply: u128, token_standard: u8) -> bool { - if token_standard == helper_token_standard_constructor(TokenStandardEnum::NonFungible) - && total_supply != 1 - { + if token_standard == TOKEN_STANDARD_NONFUNGIBLE && total_supply != 1 { false } else { true @@ -556,7 +621,7 @@ fn burn(pre_states: &[AccountWithMetadata], balance_to_burn: u128) -> Vec bool { - if account_type == helper_token_standard_constructor(TokenStandardEnum::NonFungible) { + if account_type == TOKEN_STANDARD_NONFUNGIBLE { false } else { true @@ -636,7 +701,59 @@ fn mint_additional_supply( vec![post_definition, token_holding_post] } -//TODO: add vars for 23 and 474 +fn print_nft(pre_states: &[AccountWithMetadata]) -> Vec { + if pre_states.len() != 2 { + panic!("Invalid number of accounts"); + } + + let master_account = &pre_states[0]; + let printed_account = &pre_states[1]; + + if !master_account.is_authorized { + panic!("Master NFT Account must be authorized"); + } + + if printed_account.account != Account::default() { + panic!("Printed Account must be uninitialized"); + } + + let mut master_account_data = + TokenHolding::parse(&master_account.account.data).expect("Invalid Token Holding data"); + + if master_account_data.account_type != TOKEN_HOLDING_NFT_MASTER { + panic!("Invalid Token Holding provided as NFT Master Account"); + } + + if master_account_data.balance < 2 { + panic!("Insufficient balance to print another NFT copy"); + } + + let definition_id = master_account_data.definition_id.clone(); + + let post_master_account = { + let mut this = master_account.account.clone(); + master_account_data.balance -= 1; + this.data = master_account_data.into_data(); + AccountPostState::new(this) + }; + + let post_printed_account = { + let mut this = printed_account.account.clone(); + + let printed_data = TokenHolding { + account_type: TOKEN_HOLDING_NFT_PRINTED_COPY, + definition_id, + balance: 1, + }; + + this.data = TokenHolding::into_data(printed_data); + + AccountPostState::new_claimed(this) + }; + + vec![post_master_account, post_printed_account] +} + type Instruction = Vec; fn main() { let ProgramInput { @@ -699,6 +816,7 @@ fn main() { panic!("Invalid instruction length"); } + // Parse instruction let balance_to_burn = u128::from_le_bytes( instruction[1..17] .try_into() @@ -717,6 +835,7 @@ fn main() { panic!("Invalid instruction length"); } + // Parse instruction let balance_to_mint = u128::from_le_bytes( instruction[1..17] .try_into() @@ -735,14 +854,42 @@ fn main() { panic!("Invalid instruction length") } - let total_supply = u128::from_le_bytes(instruction[1..17].try_into().expect("Total supply must be 16 bytes little-endian"),); - let name = instruction[17..23].try_into().expect("Name must be 6 bytes long"); - assert_ne!(name, [0;6]); + // Parse instruction + let total_supply = u128::from_le_bytes( + instruction[1..17] + .try_into() + .expect("Total supply must be 16 bytes little-endian"), + ); + let name = instruction[17..23] + .try_into() + .expect("Name must be 6 bytes long"); + assert_ne!(name, [0; 6]); let token_standard = instruction[23]; let metadata_standard = instruction[24]; - let metadata_values: Data = Data::try_from(instruction[25..474].to_vec()).expect("Invalid metadata"); + let metadata_values: Data = + Data::try_from(instruction[25..474].to_vec()).expect("Invalid metadata"); - new_definition_with_metadata(&pre_states, name, total_supply, token_standard, metadata_standard, &metadata_values) + // Execute + new_definition_with_metadata( + &pre_states, + name, + total_supply, + token_standard, + metadata_standard, + &metadata_values, + ) + } + 6 => { + if instruction.len() != 23 { + panic!("Invalid instruction length"); + } + + // Initialize account + if instruction[1..] != [0; 22] { + panic!("Invalid instruction for initialize account"); + } + + print_nft(&pre_states) } _ => panic!("Invalid instruction"), }; @@ -755,12 +902,489 @@ mod tests { use nssa_core::account::{Account, AccountId, AccountWithMetadata, Data}; use crate::{ - TOKEN_DEFINITION_DATA_SIZE, TOKEN_HOLDING_DATA_SIZE, TOKEN_HOLDING_TYPE, TokenDefinition, - TokenHolding, TokenStandardEnum, burn, helper_token_standard_constructor, - initialize_account, mint_additional_supply, new_definition, new_definition_with_metadata, - transfer, + TOKEN_DEFINITION_DATA_SIZE, TOKEN_HOLDING_DATA_SIZE, TOKEN_HOLDING_NFT_MASTER, + TOKEN_HOLDING_NFT_PRINTED_COPY, TOKEN_HOLDING_STANDARD, TOKEN_STANDARD_FUNGIBLE_ASSET, + TOKEN_STANDARD_FUNGIBLE_TOKEN, TOKEN_STANDARD_NONFUNGIBLE, TokenDefinition, TokenHolding, + burn, initialize_account, mint_additional_supply, new_definition, + new_definition_with_metadata, print_nft, transfer, }; + enum BalanceEnum { + InitSupply, + HoldingBalance, + InitSupplyBurned, + HoldingBalanceBurned, + BurnSuccess, + BurnInsufficient, + MintSuccess, + InitSupplyMint, + HoldingBalanceMint, + MintOverflow, + RecipientPostTransfer, + RecipientUninitPostTransfer, + SenderPostTransfer, + TransferAmount, + PrintableCopies, + } + + enum AccountsEnum { + DefinitionAccountAuth, + DefinitionAccountNotAuth, + HoldingDiffDef, + HoldingSameDefAuth, + HoldingSameDefNotAuth, + HoldingSameDefNotAuthOverflow, + DefinitionAccountPostBurn, + HoldingAccountPostBurn, + InitMint, + DefinitionAccountMint, + HoldingSameDefMint, + HoldingSameDefAuthLargeBalance, + DefinitionAccountAuthNonFungible, + DefinitionAccountUninit, + HoldingAccountUninit, + HoldingAccountInit, + DefinitionAccountUnclaimed, + HoldingAccountUnclaimed, + HoldingAccount2Init, + HoldingAccount2InitPostTransfer, + HoldingAccount2UninitPostTransfer, + HoldingAccountInitPostTransfer, + HoldingAccountMasterNFT, + HoldingAccountMasterNFTInsufficientBalance, + HoldingAccountMasterNFTAfterPrint, + HoldingAccountPrintedNFT, + HoldingAccountMasterNFTTransferredTo, + HoldingAccountMasterNFTPostTransfer, + } + + enum IdEnum { + PoolDefinitionId, + PoolDefinitionIdDiff, + HoldingId, + Holding2Id, + MetadataId, + } + + fn helper_account_constructor(selection: AccountsEnum) -> AccountWithMetadata { + match selection { + AccountsEnum::DefinitionAccountAuth => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenDefinition::into_data(TokenDefinition { + account_type: TOKEN_STANDARD_FUNGIBLE_TOKEN, + name: [2; 6], + total_supply: helper_balance_constructor(BalanceEnum::InitSupply), + metadata_id: AccountId::new([0; 32]), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::PoolDefinitionId), + }, + AccountsEnum::DefinitionAccountNotAuth => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenDefinition::into_data(TokenDefinition { + account_type: TOKEN_STANDARD_FUNGIBLE_TOKEN, + name: [2; 6], + total_supply: helper_balance_constructor(BalanceEnum::InitSupply), + metadata_id: AccountId::new([0; 32]), + }), + nonce: 0, + }, + is_authorized: false, + account_id: helper_id_constructor(IdEnum::PoolDefinitionId), + }, + AccountsEnum::HoldingDiffDef => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_STANDARD, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionIdDiff), + balance: helper_balance_constructor(BalanceEnum::HoldingBalance), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::HoldingSameDefAuth => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_STANDARD, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::HoldingBalance), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::HoldingSameDefNotAuth => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_STANDARD, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::HoldingBalance), + }), + nonce: 0, + }, + is_authorized: false, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::HoldingSameDefNotAuthOverflow => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_STANDARD, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::InitSupply), + }), + nonce: 0, + }, + is_authorized: false, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::DefinitionAccountPostBurn => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenDefinition::into_data(TokenDefinition { + account_type: TOKEN_STANDARD_FUNGIBLE_TOKEN, + name: [2; 6], + total_supply: helper_balance_constructor(BalanceEnum::InitSupplyBurned), + metadata_id: AccountId::new([0; 32]), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::PoolDefinitionId), + }, + AccountsEnum::HoldingAccountPostBurn => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_STANDARD, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::HoldingBalanceBurned), + }), + nonce: 0, + }, + is_authorized: false, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::HoldingAccountUninit => AccountWithMetadata { + account: Account::default(), + is_authorized: false, + account_id: helper_id_constructor(IdEnum::Holding2Id), + }, + AccountsEnum::InitMint => AccountWithMetadata { + account: Account { + program_owner: [0u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_STANDARD, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::MintSuccess), + }), + nonce: 0, + }, + is_authorized: false, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::HoldingSameDefMint => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_STANDARD, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::HoldingBalanceMint), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::PoolDefinitionId), + }, + AccountsEnum::DefinitionAccountMint => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenDefinition::into_data(TokenDefinition { + account_type: TOKEN_STANDARD_FUNGIBLE_TOKEN, + name: [2; 6], + total_supply: helper_balance_constructor(BalanceEnum::InitSupplyMint), + metadata_id: AccountId::new([0; 32]), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::PoolDefinitionId), + }, + AccountsEnum::HoldingSameDefAuthLargeBalance => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_STANDARD, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::MintOverflow), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::PoolDefinitionId), + }, + AccountsEnum::DefinitionAccountAuthNonFungible => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenDefinition::into_data(TokenDefinition { + account_type: TOKEN_STANDARD_NONFUNGIBLE, + name: [2; 6], + total_supply: 1, + metadata_id: AccountId::new([0; 32]), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::PoolDefinitionId), + }, + AccountsEnum::DefinitionAccountUninit => AccountWithMetadata { + account: Account::default(), + is_authorized: false, + account_id: helper_id_constructor(IdEnum::PoolDefinitionId), + }, + AccountsEnum::HoldingAccountInit => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_STANDARD, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::InitSupply), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::DefinitionAccountUnclaimed => AccountWithMetadata { + account: Account { + program_owner: [0u32; 8], + balance: 0u128, + data: TokenDefinition::into_data(TokenDefinition { + account_type: TOKEN_STANDARD_FUNGIBLE_TOKEN, + name: [2; 6], + total_supply: helper_balance_constructor(BalanceEnum::InitSupply), + metadata_id: AccountId::new([0; 32]), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::PoolDefinitionId), + }, + AccountsEnum::HoldingAccountUnclaimed => AccountWithMetadata { + account: Account { + program_owner: [0u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_STANDARD, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::InitSupply), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::HoldingAccount2Init => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_STANDARD, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::InitSupply), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::Holding2Id), + }, + AccountsEnum::HoldingAccount2InitPostTransfer => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_STANDARD, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::RecipientPostTransfer), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::Holding2Id), + }, + AccountsEnum::HoldingAccountInitPostTransfer => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_STANDARD, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::SenderPostTransfer), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::HoldingAccount2UninitPostTransfer => AccountWithMetadata { + account: Account { + program_owner: [0u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_STANDARD, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor( + BalanceEnum::RecipientUninitPostTransfer, + ), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::Holding2Id), + }, + AccountsEnum::HoldingAccountMasterNFT => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_NFT_MASTER, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::PrintableCopies), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::HoldingAccountMasterNFTInsufficientBalance => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_NFT_MASTER, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: 1, + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::HoldingAccountMasterNFTAfterPrint => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_NFT_MASTER, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::PrintableCopies) - 1, + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::HoldingAccountPrintedNFT => AccountWithMetadata { + account: Account { + program_owner: [0u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_NFT_PRINTED_COPY, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: 1, + }), + nonce: 0, + }, + is_authorized: false, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::HoldingAccountMasterNFTTransferredTo => AccountWithMetadata { + account: Account { + program_owner: [0u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_NFT_MASTER, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::PrintableCopies), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::Holding2Id), + }, + AccountsEnum::HoldingAccountMasterNFTPostTransfer => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_NFT_MASTER, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: 0, + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + _ => panic!("Invalid selection"), + } + } + + fn helper_balance_constructor(selection: BalanceEnum) -> u128 { + match selection { + BalanceEnum::InitSupply => 100_000, + BalanceEnum::HoldingBalance => 1_000, + BalanceEnum::InitSupplyBurned => 99_500, + BalanceEnum::HoldingBalanceBurned => 500, + BalanceEnum::BurnSuccess => 500, + BalanceEnum::BurnInsufficient => 1_500, + BalanceEnum::MintSuccess => 50_000, + BalanceEnum::InitSupplyMint => 150_000, + BalanceEnum::HoldingBalanceMint => 51_000, + BalanceEnum::MintOverflow => (2 as u128).pow(128) - 40_000, + BalanceEnum::SenderPostTransfer => 95_000, + BalanceEnum::RecipientPostTransfer => 105_000, + BalanceEnum::RecipientUninitPostTransfer => 5_000, + BalanceEnum::TransferAmount => 5_000, + BalanceEnum::PrintableCopies => 10, + _ => panic!("Invalid selection"), + } + } + + fn helper_id_constructor(selection: IdEnum) -> AccountId { + match selection { + IdEnum::PoolDefinitionId => AccountId::new([15; 32]), + IdEnum::PoolDefinitionIdDiff => AccountId::new([16; 32]), + IdEnum::HoldingId => AccountId::new([17; 32]), + IdEnum::MetadataId => AccountId::new([42; 32]), + IdEnum::Holding2Id => AccountId::new([31; 32]), + } + } + #[should_panic(expected = "Invalid number of input accounts")] #[test] fn test_call_new_definition_with_invalid_number_of_accounts_1() { @@ -837,46 +1461,30 @@ mod tests { let _post_states = new_definition(&pre_states, [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe], 10); } - /* #[test] fn test_new_definition_with_valid_inputs_succeeds() { let pre_states = vec![ - AccountWithMetadata { - account: Account::default(), - is_authorized: false, - account_id: AccountId::new([ - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - ]), - }, - AccountWithMetadata { - account: Account { - ..Account::default() - }, - is_authorized: false, - account_id: AccountId::new([2; 32]), - }, + helper_account_constructor(AccountsEnum::DefinitionAccountUninit), + helper_account_constructor(AccountsEnum::HoldingAccountUninit), ]; - let post_states = new_definition(&pre_states, [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe], 10); - let [definition_account, holding_account] = post_states.try_into().ok().unwrap(); - assert_eq!( - definition_account.account().data, - vec![ - 0, 0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0 - ] + let post_states = new_definition( + &pre_states, + [2u8; 6], + helper_balance_constructor(BalanceEnum::InitSupply), ); - assert_eq!( - holding_account.account().data, - vec![ - 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0 - ] + + let [definition_account, holding_account] = post_states.try_into().ok().unwrap(); + assert!( + *definition_account.account() + == helper_account_constructor(AccountsEnum::DefinitionAccountUnclaimed).account + ); + + assert!( + *holding_account.account() + == helper_account_constructor(AccountsEnum::HoldingAccountUnclaimed).account ); } - */ #[should_panic(expected = "Invalid number of input accounts")] #[test] @@ -915,11 +1523,11 @@ mod tests { #[should_panic(expected = "Invalid sender data")] #[test] fn test_transfer_invalid_instruction_type_should_fail() { - let invalid_type = TOKEN_HOLDING_TYPE ^ 1; + let invalid_type = TOKEN_HOLDING_STANDARD ^ 1; let pre_states = vec![ AccountWithMetadata { account: Account { - // First byte should be `TOKEN_HOLDING_TYPE` for token holding accounts + // First byte should be `TOKEN_HOLDING_STANDARD` for token holding accounts data: Data::try_from(vec![invalid_type; TOKEN_HOLDING_DATA_SIZE]) .expect("Invalid data"), ..Account::default() @@ -936,474 +1544,208 @@ mod tests { let _post_states = transfer(&pre_states, 10); } - /* - #[should_panic(expected = "Invalid sender data")] - #[test] - fn test_transfer_invalid_data_size_should_fail_1() { - let pre_states = vec![ - AccountWithMetadata { - account: Account { - // Data must be of exact length `TOKEN_HOLDING_DATA_SIZE` - data: vec![1; TOKEN_HOLDING_DATA_SIZE - 1], - ..Account::default() - }, - is_authorized: true, - account_id: AccountId::new([1; 32]), - }, - AccountWithMetadata { - account: Account::default(), - is_authorized: true, - account_id: AccountId::new([2; 32]), - }, - ]; - let _post_states = transfer(&pre_states, 10); - } - - #[should_panic(expected = "Invalid sender data")] - #[test] - fn test_transfer_invalid_data_size_should_fail_2() { - let pre_states = vec![ - AccountWithMetadata { - account: Account { - // Data must be of exact length `TOKEN_HOLDING_DATA_SIZE` - data: vec![1; TOKEN_HOLDING_DATA_SIZE + 1], - ..Account::default() - }, - is_authorized: true, - account_id: AccountId::new([1; 32]), - }, - AccountWithMetadata { - account: Account::default(), - is_authorized: true, - account_id: AccountId::new([2; 32]), - }, - ]; - let _post_states = transfer(&pre_states, 10); - } - - #[should_panic(expected = "Sender and recipient definition id mismatch")] - #[test] - fn test_transfer_with_different_definition_ids_should_fail() { - let pre_states = vec![ - AccountWithMetadata { - account: Account { - data: vec![1; TOKEN_HOLDING_DATA_SIZE], - ..Account::default() - }, - is_authorized: true, - account_id: AccountId::new([1; 32]), - }, - AccountWithMetadata { - account: Account { - data: vec![1] - .into_iter() - .chain(vec![2; TOKEN_HOLDING_DATA_SIZE - 1]) - .collect(), - ..Account::default() - }, - is_authorized: true, - account_id: AccountId::new([2; 32]), - }, - ]; - let _post_states = transfer(&pre_states, 10); - } - - #[should_panic(expected = "Insufficient balance")] - #[test] - fn test_transfer_with_insufficient_balance_should_fail() { - let pre_states = vec![ - AccountWithMetadata { - account: Account { - // Account with balance 37 - data: vec![1; TOKEN_HOLDING_DATA_SIZE - 16] - .into_iter() - .chain(u128::to_le_bytes(37)) - .collect(), - ..Account::default() - }, - is_authorized: true, - account_id: AccountId::new([1; 32]), - }, - AccountWithMetadata { - account: Account { - data: vec![1; TOKEN_HOLDING_DATA_SIZE], - ..Account::default() - }, - is_authorized: true, - account_id: AccountId::new([2; 32]), - }, - ]; - // Attempt to transfer 38 tokens - let _post_states = transfer(&pre_states, 38); - } - - #[should_panic(expected = "Sender authorization is missing")] - #[test] - fn test_transfer_without_sender_authorization_should_fail() { - let pre_states = vec![ - AccountWithMetadata { - account: Account { - // Account with balance 37 - data: vec![1; TOKEN_HOLDING_DATA_SIZE - 16] - .into_iter() - .chain(u128::to_le_bytes(37)) - .collect(), - ..Account::default() - }, - is_authorized: false, - account_id: AccountId::new([1; 32]), - }, - AccountWithMetadata { - account: Account { - data: vec![1; TOKEN_HOLDING_DATA_SIZE], - ..Account::default() - }, - is_authorized: true, - account_id: AccountId::new([2; 32]), - }, - ]; - let _post_states = transfer(&pre_states, 37); - } - - #[test] - fn test_transfer_with_valid_inputs_succeeds() { - let pre_states = vec![ - AccountWithMetadata { - account: Account { - // Account with balance 37 - data: vec![1; TOKEN_HOLDING_DATA_SIZE - 16] - .into_iter() - .chain(u128::to_le_bytes(37)) - .collect(), - ..Account::default() - }, - is_authorized: true, - account_id: AccountId::new([1; 32]), - }, - AccountWithMetadata { - account: Account { - // Account with balance 255 - data: vec![1; TOKEN_HOLDING_DATA_SIZE - 16] - .into_iter() - .chain(u128::to_le_bytes(255)) - .collect(), - ..Account::default() - }, - is_authorized: true, - account_id: AccountId::new([2; 32]), - }, - ]; - let post_states = transfer(&pre_states, 11); - let [sender_post, recipient_post] = post_states.try_into().ok().unwrap(); - assert_eq!( - sender_post.account().data, - vec![ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - ] - ); - assert_eq!( - recipient_post.account().data, - vec![ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 10, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - ] - ); - } - - #[test] - fn test_token_initialize_account_succeeds() { - let pre_states = vec![ - AccountWithMetadata { - account: Account { - // Definition ID with - data: [0; TOKEN_DEFINITION_DATA_SIZE - 16] - .into_iter() - .chain(u128::to_le_bytes(1000)) - .collect(), - ..Account::default() - }, - is_authorized: false, - account_id: AccountId::new([1; 32]), - }, - AccountWithMetadata { - account: Account::default(), - is_authorized: false, - account_id: AccountId::new([2; 32]), - }, - ]; - let post_states = initialize_account(&pre_states); - let [definition, holding] = post_states.try_into().ok().unwrap(); - assert_eq!(definition.account().data, pre_states[0].account.data); - assert_eq!( - holding.account().data, - vec![ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - ] - ); - } - */ - enum BalanceEnum { - InitSupply, - HoldingBalance, - InitSupplyBurned, - HoldingBalanceBurned, - BurnSuccess, - BurnInsufficient, - MintSuccess, - InitSupplyMint, - HoldingBalanceMint, - MintOverflow, - } - - enum AccountsEnum { - DefinitionAccountAuth, - DefinitionAccountNotAuth, - HoldingDiffDef, - HoldingSameDefAuth, - HoldingSameDefNotAuth, - HoldingSameDefNotAuthOverflow, - DefinitionAccountPostBurn, - HoldingAccountPostBurn, - Uninit, - InitMint, - DefinitionAccountMint, - HoldingSameDefMint, - HoldingSameDefAuthLargeBalance, - DefinitionAccountAuthNotMintable, - } - - enum IdEnum { - PoolDefinitionId, - PoolDefinitionIdDiff, - HoldingId, - MetadataId, - } - - fn helper_account_constructor(selection: AccountsEnum) -> AccountWithMetadata { - match selection { - AccountsEnum::DefinitionAccountAuth => AccountWithMetadata { + #[should_panic(expected = "Invalid sender data")] + #[test] + fn test_transfer_invalid_data_size_should_fail_1() { + let pre_states = vec![ + AccountWithMetadata { account: Account { - program_owner: [5u32; 8], - balance: 0u128, - data: TokenDefinition::into_data(TokenDefinition { - account_type: helper_token_standard_constructor(TokenStandardEnum::FungibleToken), - name: [2; 6], - total_supply: helper_balance_constructor(BalanceEnum::InitSupply), - metadata_id: AccountId::new([0;32]), - }), - nonce: 0, + // Data must be of exact length `TOKEN_HOLDING_DATA_SIZE` + data: Data::try_from(vec![1; TOKEN_HOLDING_DATA_SIZE - 1]).unwrap(), + ..Account::default() }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), + account_id: AccountId::new([1; 32]), }, - AccountsEnum::DefinitionAccountNotAuth => AccountWithMetadata { - account: Account { - program_owner: [5u32; 8], - balance: 0u128, - data: TokenDefinition::into_data(TokenDefinition { - account_type: helper_token_standard_constructor(TokenStandardEnum::FungibleToken), - name: [2; 6], - total_supply: helper_balance_constructor(BalanceEnum::InitSupply), - metadata_id: AccountId::new([0;32]), - }), - nonce: 0, - }, - is_authorized: false, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountsEnum::HoldingDiffDef => AccountWithMetadata { - account: Account { - program_owner: [5u32; 8], - balance: 0u128, - data: TokenHolding::into_data(TokenHolding { - account_type: TOKEN_HOLDING_TYPE, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionIdDiff), - balance: helper_balance_constructor(BalanceEnum::HoldingBalance), - }), - nonce: 0, - }, - is_authorized: true, - account_id: helper_id_constructor(IdEnum::HoldingId), - }, - AccountsEnum::HoldingSameDefAuth => AccountWithMetadata { - account: Account { - program_owner: [5u32; 8], - balance: 0u128, - data: TokenHolding::into_data(TokenHolding { - account_type: TOKEN_HOLDING_TYPE, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), - balance: helper_balance_constructor(BalanceEnum::HoldingBalance), - }), - nonce: 0, - }, - is_authorized: true, - account_id: helper_id_constructor(IdEnum::HoldingId), - }, - AccountsEnum::HoldingSameDefNotAuth => AccountWithMetadata { - account: Account { - program_owner: [5u32; 8], - balance: 0u128, - data: TokenHolding::into_data(TokenHolding { - account_type: TOKEN_HOLDING_TYPE, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), - balance: helper_balance_constructor(BalanceEnum::HoldingBalance), - }), - nonce: 0, - }, - is_authorized: false, - account_id: helper_id_constructor(IdEnum::HoldingId), - }, - AccountsEnum::HoldingSameDefNotAuthOverflow => AccountWithMetadata { - account: Account { - program_owner: [5u32; 8], - balance: 0u128, - data: TokenHolding::into_data(TokenHolding { - account_type: TOKEN_HOLDING_TYPE, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), - balance: helper_balance_constructor(BalanceEnum::InitSupply), - }), - nonce: 0, - }, - is_authorized: false, - account_id: helper_id_constructor(IdEnum::HoldingId), - }, - AccountsEnum::DefinitionAccountPostBurn => AccountWithMetadata { - account: Account { - program_owner: [5u32; 8], - balance: 0u128, - data: TokenDefinition::into_data(TokenDefinition { - account_type: helper_token_standard_constructor(TokenStandardEnum::FungibleToken), - name: [2; 6], - total_supply: helper_balance_constructor(BalanceEnum::InitSupplyBurned), - metadata_id: AccountId::new([0;32]), - }), - nonce: 0, - }, - is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountsEnum::HoldingAccountPostBurn => AccountWithMetadata { - account: Account { - program_owner: [5u32; 8], - balance: 0u128, - data: TokenHolding::into_data(TokenHolding { - account_type: TOKEN_HOLDING_TYPE, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), - balance: helper_balance_constructor(BalanceEnum::HoldingBalanceBurned), - }), - nonce: 0, - }, - is_authorized: false, - account_id: helper_id_constructor(IdEnum::HoldingId), - }, - AccountsEnum::Uninit => AccountWithMetadata { + AccountWithMetadata { account: Account::default(), - is_authorized: false, - account_id: helper_id_constructor(IdEnum::HoldingId), - }, - AccountsEnum::InitMint => AccountWithMetadata { - account: Account { - program_owner: [0u32; 8], - balance: 0u128, - data: TokenHolding::into_data(TokenHolding { - account_type: TOKEN_HOLDING_TYPE, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), - balance: helper_balance_constructor(BalanceEnum::MintSuccess), - }), - nonce: 0, - }, - is_authorized: false, - account_id: helper_id_constructor(IdEnum::HoldingId), - }, - AccountsEnum::HoldingSameDefMint => AccountWithMetadata { - account: Account { - program_owner: [5u32; 8], - balance: 0u128, - data: TokenHolding::into_data(TokenHolding { - account_type: TOKEN_HOLDING_TYPE, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), - balance: helper_balance_constructor(BalanceEnum::HoldingBalanceMint), - }), - nonce: 0, - }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), + account_id: AccountId::new([2; 32]), }, - AccountsEnum::DefinitionAccountMint => AccountWithMetadata { - account: Account { - program_owner: [5u32; 8], - balance: 0u128, - data: TokenDefinition::into_data(TokenDefinition { - account_type: helper_token_standard_constructor(TokenStandardEnum::FungibleToken), - name: [2; 6], - total_supply: helper_balance_constructor(BalanceEnum::InitSupplyMint), - metadata_id: AccountId::new([0;32]), - }), - nonce: 0, - }, - is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountsEnum::HoldingSameDefAuthLargeBalance => AccountWithMetadata { - account: Account { - program_owner: [5u32; 8], - balance: 0u128, - data: TokenHolding::into_data(TokenHolding { - account_type: TOKEN_HOLDING_TYPE, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), - balance: helper_balance_constructor(BalanceEnum::MintOverflow), - }), - nonce: 0, - }, - is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountsEnum::DefinitionAccountAuthNotMintable => AccountWithMetadata { - account: Account { - program_owner: [5u32; 8], - balance: 0u128, - data: TokenDefinition::into_data(TokenDefinition { - account_type: helper_token_standard_constructor( - TokenStandardEnum::NonFungible, - ), - name: [2; 6], - total_supply: helper_balance_constructor(BalanceEnum::InitSupplyMint), - metadata_id: AccountId::new([0;32]), - }), - nonce: 0, - }, - is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - _ => panic!("Invalid selection"), - } + ]; + let _post_states = transfer(&pre_states, 10); } - fn helper_balance_constructor(selection: BalanceEnum) -> u128 { - match selection { - BalanceEnum::InitSupply => 100_000, - BalanceEnum::HoldingBalance => 1_000, - BalanceEnum::InitSupplyBurned => 99_500, - BalanceEnum::HoldingBalanceBurned => 500, - BalanceEnum::BurnSuccess => 500, - BalanceEnum::BurnInsufficient => 1_500, - BalanceEnum::MintSuccess => 50_000, - BalanceEnum::InitSupplyMint => 150_000, - BalanceEnum::HoldingBalanceMint => 51_000, - BalanceEnum::MintOverflow => (2 as u128).pow(128) - 40_000, - _ => panic!("Invalid selection"), - } + #[should_panic(expected = "Invalid sender data")] + #[test] + fn test_transfer_invalid_data_size_should_fail_2() { + let pre_states = vec![ + AccountWithMetadata { + account: Account { + // Data must be of exact length `TOKEN_HOLDING_DATA_SIZE` + data: Data::try_from(vec![1; TOKEN_HOLDING_DATA_SIZE - 1]).unwrap(), + ..Account::default() + }, + is_authorized: true, + account_id: AccountId::new([1; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([2; 32]), + }, + ]; + let _post_states = transfer(&pre_states, 10); } - fn helper_id_constructor(selection: IdEnum) -> AccountId { - match selection { - IdEnum::PoolDefinitionId => AccountId::new([15; 32]), - IdEnum::PoolDefinitionIdDiff => AccountId::new([16; 32]), - IdEnum::HoldingId => AccountId::new([17; 32]), - IdEnum::MetadataId => AccountId::new([42; 32]), - } + #[should_panic(expected = "Sender and recipient definition id mismatch")] + #[test] + fn test_transfer_with_different_definition_ids_should_fail() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::HoldingSameDefAuth), + helper_account_constructor(AccountsEnum::HoldingDiffDef), + ]; + let _post_states = transfer(&pre_states, 10); + } + + #[should_panic(expected = "Insufficient balance")] + #[test] + fn test_transfer_with_insufficient_balance_should_fail() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::HoldingSameDefAuth), + helper_account_constructor(AccountsEnum::HoldingSameDefMint), + ]; + // Attempt to transfer 38 tokens + let _post_states = transfer( + &pre_states, + helper_balance_constructor(BalanceEnum::BurnInsufficient), + ); + } + + #[should_panic(expected = "Sender authorization is missing")] + #[test] + fn test_transfer_without_sender_authorization_should_fail() { + let mut def_data = Vec::::new(); + def_data.extend_from_slice(&[1; TOKEN_DEFINITION_DATA_SIZE - 16]); + def_data.extend_from_slice(&u128::to_le_bytes(37)); + + let pre_states = vec![ + AccountWithMetadata { + account: Account { + // Account with balance 37 + data: Data::try_from(def_data).unwrap(), + ..Account::default() + }, + is_authorized: false, + account_id: AccountId::new([1; 32]), + }, + AccountWithMetadata { + account: Account { + data: Data::try_from(vec![1; TOKEN_HOLDING_DATA_SIZE - 1]).unwrap(), + ..Account::default() + }, + is_authorized: true, + account_id: AccountId::new([2; 32]), + }, + ]; + let _post_states = transfer(&pre_states, 37); + } + + #[test] + fn test_transfer_with_valid_inputs_succeeds() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::HoldingAccountInit), + helper_account_constructor(AccountsEnum::HoldingAccount2Init), + ]; + let post_states = transfer( + &pre_states, + helper_balance_constructor(BalanceEnum::TransferAmount), + ); + let [sender_post, recipient_post] = post_states.try_into().ok().unwrap(); + + assert!( + *sender_post.account() + == helper_account_constructor(AccountsEnum::HoldingAccountInitPostTransfer).account + ); + assert!( + *recipient_post.account() + == helper_account_constructor(AccountsEnum::HoldingAccount2InitPostTransfer) + .account + ); + } + + #[should_panic(expected = "Invalid balance for NFT Master transfer")] + #[test] + fn test_transfer_with_master_nft_invalid_balance() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::HoldingAccountMasterNFT), + helper_account_constructor(AccountsEnum::HoldingAccountUninit), + ]; + let post_states = transfer( + &pre_states, + helper_balance_constructor(BalanceEnum::TransferAmount), + ); + let [sender_post, recipient_post] = post_states.try_into().ok().unwrap(); + + assert!( + *sender_post.account() + == helper_account_constructor(AccountsEnum::HoldingAccountInitPostTransfer).account + ); + assert!( + *recipient_post.account() + == helper_account_constructor(AccountsEnum::HoldingAccount2InitPostTransfer) + .account + ); + } + + #[should_panic(expected = "Invalid balance in recipient account for NFT transfer")] + #[test] + fn test_transfer_with_master_nft_invalid_recipient_balance() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::HoldingAccountMasterNFT), + helper_account_constructor(AccountsEnum::HoldingAccountMasterNFTTransferredTo), + ]; + let _post_states = transfer( + &pre_states, + helper_balance_constructor(BalanceEnum::PrintableCopies), + ); + } + + #[test] + fn test_transfer_with_master_nft_success() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::HoldingAccountMasterNFT), + helper_account_constructor(AccountsEnum::HoldingAccountUninit), + ]; + let post_states = transfer( + &pre_states, + helper_balance_constructor(BalanceEnum::PrintableCopies), + ); + let [sender_post, recipient_post] = post_states.try_into().ok().unwrap(); + + assert!( + *sender_post.account() + == helper_account_constructor(AccountsEnum::HoldingAccountMasterNFTPostTransfer) + .account + ); + assert!( + *recipient_post.account() + == helper_account_constructor(AccountsEnum::HoldingAccountMasterNFTTransferredTo) + .account + ); + } + + #[test] + fn test_token_initialize_account_succeeds() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::HoldingAccountInit), + helper_account_constructor(AccountsEnum::HoldingAccountUninit), + ]; + let post_states = transfer( + &pre_states, + helper_balance_constructor(BalanceEnum::TransferAmount), + ); + let [sender_post, recipient_post] = post_states.try_into().ok().unwrap(); + + assert!( + *sender_post.account() + == helper_account_constructor(AccountsEnum::HoldingAccountInitPostTransfer).account + ); + assert!( + *recipient_post.account() + == helper_account_constructor(AccountsEnum::HoldingAccount2UninitPostTransfer) + .account + ); } #[test] @@ -1496,7 +1838,7 @@ mod tests { #[test] #[should_panic(expected = "Invalid number of accounts")] - fn test_mint_invalid_number_of_accounts() { + fn test_mint_invalid_number_of_accounts_1() { let pre_states = vec![helper_account_constructor( AccountsEnum::DefinitionAccountAuth, )]; @@ -1506,6 +1848,20 @@ mod tests { ); } + #[test] + #[should_panic(expected = "Invalid number of accounts")] + fn test_mint_invalid_number_of_accounts_2() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::DefinitionAccountAuth), + helper_account_constructor(AccountsEnum::HoldingSameDefMint), + helper_account_constructor(AccountsEnum::HoldingSameDefAuth), + ]; + let _post_states = mint_additional_supply( + &pre_states, + helper_balance_constructor(BalanceEnum::MintSuccess), + ); + } + #[test] #[should_panic(expected = "Holding account must be valid")] fn test_mint_not_valid_holding_account() { @@ -1519,6 +1875,19 @@ mod tests { ); } + #[test] + #[should_panic(expected = "Definition account must be valid")] + fn test_mint_not_valid_definition_account() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::HoldingSameDefAuth), + helper_account_constructor(AccountsEnum::HoldingSameDefNotAuth), + ]; + let _post_states = mint_additional_supply( + &pre_states, + helper_balance_constructor(BalanceEnum::MintSuccess), + ); + } + #[test] #[should_panic(expected = "Definition authorization is missing")] fn test_mint_missing_authorization() { @@ -1573,7 +1942,7 @@ mod tests { fn test_mint_uninit_holding_success() { let pre_states = vec![ helper_account_constructor(AccountsEnum::DefinitionAccountAuth), - helper_account_constructor(AccountsEnum::Uninit), + helper_account_constructor(AccountsEnum::HoldingAccountUninit), ]; let post_states = mint_additional_supply( &pre_states, @@ -1625,7 +1994,7 @@ mod tests { )] fn test_mint_cannot_mint_unmintable_tokens() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::DefinitionAccountAuthNotMintable), + helper_account_constructor(AccountsEnum::DefinitionAccountAuthNonFungible), helper_account_constructor(AccountsEnum::HoldingSameDefNotAuth), ]; let _post_states = mint_additional_supply( @@ -1641,14 +2010,21 @@ mod tests { let total_supply = 15u128; let token_standard = 0u8; let metadata_standard = 0u8; - let metadata_values: Data = Data::try_from([1u8;450].to_vec()).unwrap(); + let metadata_values: Data = Data::try_from([1u8; 450].to_vec()).unwrap(); let pre_states = vec![AccountWithMetadata { account: Account::default(), is_authorized: true, account_id: AccountId::new([1; 32]), }]; - let _post_states = new_definition_with_metadata(&pre_states, name, total_supply, token_standard, metadata_standard, &metadata_values); + let _post_states = new_definition_with_metadata( + &pre_states, + name, + total_supply, + token_standard, + metadata_standard, + &metadata_values, + ); } #[should_panic(expected = "Invalid number of input accounts")] @@ -1658,7 +2034,7 @@ mod tests { let total_supply = 15u128; let token_standard = 0u8; let metadata_standard = 0u8; - let metadata_values: Data = Data::try_from([1u8;450].to_vec()).unwrap(); + let metadata_values: Data = Data::try_from([1u8; 450].to_vec()).unwrap(); let pre_states = vec![ AccountWithMetadata { @@ -1672,7 +2048,14 @@ mod tests { account_id: AccountId::new([2; 32]), }, ]; - let _post_states = new_definition_with_metadata(&pre_states, name, total_supply, token_standard, metadata_standard, &metadata_values); + let _post_states = new_definition_with_metadata( + &pre_states, + name, + total_supply, + token_standard, + metadata_standard, + &metadata_values, + ); } #[should_panic(expected = "Invalid number of input accounts")] @@ -1682,7 +2065,7 @@ mod tests { let total_supply = 15u128; let token_standard = 0u8; let metadata_standard = 0u8; - let metadata_values: Data = Data::try_from([1u8;450].to_vec()).unwrap(); + let metadata_values: Data = Data::try_from([1u8; 450].to_vec()).unwrap(); let pre_states = vec![ AccountWithMetadata { @@ -1706,7 +2089,14 @@ mod tests { account_id: AccountId::new([4; 32]), }, ]; - let _post_states = new_definition_with_metadata(&pre_states, name, total_supply, token_standard, metadata_standard, &metadata_values); + let _post_states = new_definition_with_metadata( + &pre_states, + name, + total_supply, + token_standard, + metadata_standard, + &metadata_values, + ); } #[should_panic(expected = "Definition target account must have default values")] @@ -1716,7 +2106,7 @@ mod tests { let total_supply = 15u128; let token_standard = 0u8; let metadata_standard = 0u8; - let metadata_values: Data = Data::try_from([1u8;450].to_vec()).unwrap(); + let metadata_values: Data = Data::try_from([1u8; 450].to_vec()).unwrap(); let pre_states = vec![ helper_account_constructor(AccountsEnum::DefinitionAccountAuth), @@ -1731,17 +2121,24 @@ mod tests { account_id: AccountId::new([3; 32]), }, ]; - let _post_states = new_definition_with_metadata(&pre_states, name, total_supply, token_standard, metadata_standard, &metadata_values); + let _post_states = new_definition_with_metadata( + &pre_states, + name, + total_supply, + token_standard, + metadata_standard, + &metadata_values, + ); } - #[should_panic(expected ="Metadata target account must have default values")] + #[should_panic(expected = "Metadata target account must have default values")] #[test] fn test_call_new_definition_metadata_with_init_metadata() { let name = [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe]; let total_supply = 15u128; let token_standard = 0u8; let metadata_standard = 0u8; - let metadata_values: Data = Data::try_from([1u8;450].to_vec()).unwrap(); + let metadata_values: Data = Data::try_from([1u8; 450].to_vec()).unwrap(); let pre_states = vec![ AccountWithMetadata { @@ -1749,24 +2146,31 @@ mod tests { is_authorized: true, account_id: AccountId::new([1; 32]), }, - helper_account_constructor(AccountsEnum::HoldingSameDefMint), //TODO: change to a metadata account + helper_account_constructor(AccountsEnum::HoldingSameDefMint), AccountWithMetadata { account: Account::default(), is_authorized: true, account_id: AccountId::new([3; 32]), }, ]; - let _post_states = new_definition_with_metadata(&pre_states, name, total_supply, token_standard, metadata_standard, &metadata_values); + let _post_states = new_definition_with_metadata( + &pre_states, + name, + total_supply, + token_standard, + metadata_standard, + &metadata_values, + ); } - #[should_panic(expected ="Holding target account must have default values")] + #[should_panic(expected = "Holding target account must have default values")] #[test] fn test_call_new_definition_metadata_with_init_holding() { let name = [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe]; let total_supply = 15u128; let token_standard = 0u8; let metadata_standard = 0u8; - let metadata_values: Data = Data::try_from([1u8;450].to_vec()).unwrap(); + let metadata_values: Data = Data::try_from([1u8; 450].to_vec()).unwrap(); let pre_states = vec![ AccountWithMetadata { @@ -1781,17 +2185,24 @@ mod tests { }, helper_account_constructor(AccountsEnum::HoldingSameDefMint), ]; - let _post_states = new_definition_with_metadata(&pre_states, name, total_supply, token_standard, metadata_standard, &metadata_values); + let _post_states = new_definition_with_metadata( + &pre_states, + name, + total_supply, + token_standard, + metadata_standard, + &metadata_values, + ); } - #[should_panic(expected ="Metadata values data should be 450 bytes")] + #[should_panic(expected = "Metadata values data should be 450 bytes")] #[test] fn test_call_new_definition_metadata_with_too_short_metadata_length() { let name = [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe]; let total_supply = 15u128; let token_standard = 0u8; let metadata_standard = 0u8; - let metadata_values: Data = Data::try_from([1u8;449].to_vec()).unwrap(); + let metadata_values: Data = Data::try_from([1u8; 449].to_vec()).unwrap(); let pre_states = vec![ AccountWithMetadata { @@ -1810,17 +2221,24 @@ mod tests { account_id: AccountId::new([3; 32]), }, ]; - let _post_states = new_definition_with_metadata(&pre_states, name, total_supply, token_standard, metadata_standard, &metadata_values); + let _post_states = new_definition_with_metadata( + &pre_states, + name, + total_supply, + token_standard, + metadata_standard, + &metadata_values, + ); } - #[should_panic(expected ="Metadata values data should be 450 bytes")] + #[should_panic(expected = "Metadata values data should be 450 bytes")] #[test] fn test_call_new_definition_metadata_with_too_long_metadata_length() { let name = [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe]; let total_supply = 15u128; let token_standard = 0u8; let metadata_standard = 0u8; - let metadata_values: Data = Data::try_from([1u8;451].to_vec()).unwrap(); + let metadata_values: Data = Data::try_from([1u8; 451].to_vec()).unwrap(); let pre_states = vec![ AccountWithMetadata { @@ -1839,17 +2257,213 @@ mod tests { account_id: AccountId::new([3; 32]), }, ]; - let _post_states = new_definition_with_metadata(&pre_states, name, total_supply, token_standard, metadata_standard, &metadata_values); + let _post_states = new_definition_with_metadata( + &pre_states, + name, + total_supply, + token_standard, + metadata_standard, + &metadata_values, + ); } + #[should_panic(expected = "Invalid Token Standard provided")] + #[test] + fn test_call_new_definition_metadata_with_invalid_token_standard() { + let name = [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe]; + let total_supply = 15u128; + let token_standard = 14u8; + let metadata_standard = 0u8; + let metadata_values: Data = Data::try_from([1u8; 450].to_vec()).unwrap(); + + let pre_states = vec![ + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([1; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([2; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([3; 32]), + }, + ]; + let _post_states = new_definition_with_metadata( + &pre_states, + name, + total_supply, + token_standard, + metadata_standard, + &metadata_values, + ); + } + + #[should_panic(expected = "Invalid Metadata Standadard provided")] + #[test] + fn test_call_new_definition_metadata_with_invalid_metadata_standard() { + let name = [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe]; + let total_supply = 15u128; + let token_standard = 0u8; + let metadata_standard = 14u8; + let metadata_values: Data = Data::try_from([1u8; 450].to_vec()).unwrap(); + + let pre_states = vec![ + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([1; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([2; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([3; 32]), + }, + ]; + let _post_states = new_definition_with_metadata( + &pre_states, + name, + total_supply, + token_standard, + metadata_standard, + &metadata_values, + ); + } + + #[should_panic(expected = "Invalid total supply for the specified token supply")] + #[test] + fn test_call_new_definition_metadata_invalid_supply_for_nonfungible() { + let name = [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe]; + let total_supply = 15u128; + let token_standard = TOKEN_STANDARD_NONFUNGIBLE; + let metadata_standard = 0u8; + let metadata_values: Data = Data::try_from([1u8; 450].to_vec()).unwrap(); + + let pre_states = vec![ + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([1; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([2; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([3; 32]), + }, + ]; + let _post_states = new_definition_with_metadata( + &pre_states, + name, + total_supply, + token_standard, + metadata_standard, + &metadata_values, + ); + } + + #[should_panic(expected = "Invalid number of accounts")] + #[test] + fn test_print_nft_invalid_number_of_accounts_1() { + let pre_states = vec![helper_account_constructor( + AccountsEnum::HoldingAccountMasterNFT, + )]; + let _post_states = print_nft(&pre_states); + } + + #[should_panic(expected = "Invalid number of accounts")] + #[test] + fn test_print_nft_invalid_number_of_accounts_2() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::HoldingAccountMasterNFT), + helper_account_constructor(AccountsEnum::DefinitionAccountAuth), + helper_account_constructor(AccountsEnum::HoldingAccountUninit), + ]; + let _post_states = print_nft(&pre_states); + } + + #[should_panic(expected = "Master NFT Account must be authorized")] + #[test] + fn test_print_nft_master_account_must_be_authorized() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::HoldingAccountUninit), + helper_account_constructor(AccountsEnum::HoldingAccountUninit), + ]; + let _post_states = print_nft(&pre_states); + } + + #[should_panic(expected = "Printed Account must be uninitialized")] + #[test] + fn test_print_nft_print_account_initialized() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::HoldingAccountMasterNFT), + helper_account_constructor(AccountsEnum::HoldingAccountInit), + ]; + let _post_states = print_nft(&pre_states); + } + + #[should_panic(expected = "Invalid Token Holding data")] + #[test] + fn test_print_nft_master_nft_invalid_token_holding() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::DefinitionAccountAuth), + helper_account_constructor(AccountsEnum::HoldingAccountUninit), + ]; + let _post_states = print_nft(&pre_states); + } + + #[should_panic(expected = "Invalid Token Holding provided as NFT Master Account")] + #[test] + fn test_print_nft_master_nft_not_nft_master_account() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::HoldingAccountInit), + helper_account_constructor(AccountsEnum::HoldingAccountUninit), + ]; + let _post_states = print_nft(&pre_states); + } + + #[should_panic(expected = "Insufficient balance to print another NFT copy")] + #[test] + fn test_print_nft_master_nft_insufficient_balance() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::HoldingAccountMasterNFTInsufficientBalance), + helper_account_constructor(AccountsEnum::HoldingAccountUninit), + ]; + let _post_states = print_nft(&pre_states); + } + + #[test] + fn test_print_nft_success() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::HoldingAccountMasterNFT), + helper_account_constructor(AccountsEnum::HoldingAccountUninit), + ]; + let post_states = print_nft(&pre_states); + + let post_master_nft = post_states[0].account(); + let post_printed = post_states[1].account(); + + assert!( + *post_master_nft + == helper_account_constructor(AccountsEnum::HoldingAccountMasterNFTAfterPrint) + .account + ); + assert!( + *post_printed + == helper_account_constructor(AccountsEnum::HoldingAccountPrintedNFT).account + ); + } } - -/* - pre_states: &[AccountWithMetadata], - name: [u8; 6], - total_supply: u128, - token_standard: TokenStandardEnum, - metadata_standard: MetadataStandardEnum, - metadata_values: &Data, - -*/ \ No newline at end of file From 3acc51ac870b587488e262daa95cb535e3e133a0 Mon Sep 17 00:00:00 2001 From: jonesmarvin8 <83104039+jonesmarvin8@users.noreply.github.com> Date: Fri, 12 Dec 2025 16:50:13 -0500 Subject: [PATCH 08/33] rebased with main token program --- nssa/program_methods/guest/src/bin/token.rs | 2090 ++++++++++++++----- 1 file changed, 1611 insertions(+), 479 deletions(-) diff --git a/nssa/program_methods/guest/src/bin/token.rs b/nssa/program_methods/guest/src/bin/token.rs index 739295b..4b71128 100644 --- a/nssa/program_methods/guest/src/bin/token.rs +++ b/nssa/program_methods/guest/src/bin/token.rs @@ -37,17 +37,132 @@ use nssa_core::{ // * Authorization required: definition_account // * An instruction data byte string of length 23, indicating the balance to mint with the folloiwng layout // [0x04 || amount (little-endian 16 bytes) || 0x00 || 0x00 || 0x00 || 0x00 || 0x00 || 0x00]. +// 6. Print NFT copy from Master NFT +// Arguments to this function are: +// * Two accounts: [master_nft, account_to_initialize]. +// * Authorization required: master_nft +// * An dummy byte string of length 23, with the following layout +// [0x05 || 0x00 || 0x00 || 0x00 || ... || 0x00 || 0x00]. +const TOKEN_STANDARD_FUNGIBLE_TOKEN: u8 = 0; +const TOKEN_STANDARD_FUNGIBLE_ASSET: u8 = 1; +const TOKEN_STANDARD_NONFUNGIBLE: u8 = 2; +const TOKEN_STANDARD_NONFUNGIBLE_PRINTABLE: u8 = 3; -const TOKEN_DEFINITION_TYPE: u8 = 0; -const TOKEN_DEFINITION_DATA_SIZE: usize = 23; +const METADATA_TYPE_SIMPLE: u8 = 0; +const METADATA_TYPE_EXPANDED: u8 = 1; + +const TOKEN_DEFINITION_DATA_SIZE: usize = 55; + +const TOKEN_HOLDING_STANDARD: u8 = 1; +const TOKEN_HOLDING_NFT_MASTER: u8 = 2; +const TOKEN_HOLDING_NFT_PRINTED_COPY: u8 = 3; -const TOKEN_HOLDING_TYPE: u8 = 1; const TOKEN_HOLDING_DATA_SIZE: usize = 49; +const CURRENT_VERSION: u8 = 1; + +const TOKEN_METADATA_DATA_SIZE: usize = 463; + +fn is_token_standard_valid(standard: u8) -> bool { + if standard == TOKEN_STANDARD_FUNGIBLE_TOKEN { + true + } else if standard == TOKEN_STANDARD_FUNGIBLE_ASSET { + true + } else if standard == TOKEN_STANDARD_NONFUNGIBLE { + true + } else if standard == TOKEN_STANDARD_NONFUNGIBLE_PRINTABLE { + true + } else { + false + } +} + +fn is_metadata_type_valid(standard: u8) -> bool { + if standard == METADATA_TYPE_SIMPLE { + true + } else if standard == METADATA_TYPE_EXPANDED { + true + } else { + false + } +} + +fn is_token_holding_type_valid(standard: u8) -> bool { + if standard == TOKEN_HOLDING_STANDARD { + true + } else if standard == TOKEN_HOLDING_NFT_MASTER { + true + } else if standard == TOKEN_HOLDING_NFT_PRINTED_COPY { + true + } else { + false + } +} + + struct TokenDefinition { account_type: u8, name: [u8; 6], total_supply: u128, + metadata_id: AccountId, +} + +impl TokenDefinition { + fn into_data(self) -> Data { + let mut bytes = Vec::::new(); + bytes.extend_from_slice(&[self.account_type]); + bytes.extend_from_slice(&self.name); + bytes.extend_from_slice(&self.total_supply.to_le_bytes()); + bytes.extend_from_slice(&self.metadata_id.to_bytes()); + + if bytes.len() != TOKEN_DEFINITION_DATA_SIZE { + panic!("Invalid Token Definition data"); + } + + Data::try_from(bytes).expect("Invalid data") + } + + fn parse(data: &Data) -> Option { + let data = Vec::::from(data.clone()); + + if data.len() != TOKEN_DEFINITION_DATA_SIZE { + None + } else { + let account_type = data[0]; + let name = data[1..7].try_into().expect("Name must be a 6 bytes"); + let total_supply = u128::from_le_bytes( + data[7..23] + .try_into() + .expect("Total supply must be 16 bytes little-endian"), + ); + let metadata_id = AccountId::new( + data[23..TOKEN_DEFINITION_DATA_SIZE] + .try_into() + .expect("Token Program expects valid Account Id for Metadata"), + ); + + let this = Some(Self { + account_type, + name, + total_supply, + metadata_id: metadata_id.clone(), + }); + + if account_type == //NFTs must have supply 1 + TOKEN_STANDARD_NONFUNGIBLE + && total_supply != 1 + { + None + } else if account_type == //Fungible Tokens do not have metadata. + TOKEN_STANDARD_FUNGIBLE_TOKEN + && metadata_id != AccountId::new([0; 32]) + { + None + } else { + this + } + } + } } struct TokenHolding { @@ -56,49 +171,25 @@ struct TokenHolding { balance: u128, } -impl TokenDefinition { - fn into_data(self) -> Data { - let mut bytes = [0; TOKEN_DEFINITION_DATA_SIZE]; - bytes[0] = self.account_type; - bytes[1..7].copy_from_slice(&self.name); - bytes[7..].copy_from_slice(&self.total_supply.to_le_bytes()); - bytes - .to_vec() - .try_into() - .expect("23 bytes should fit into Data") - } - - fn parse(data: &[u8]) -> Option { - if data.len() != TOKEN_DEFINITION_DATA_SIZE || data[0] != TOKEN_DEFINITION_TYPE { - None - } else { - let account_type = data[0]; - let name = data[1..7].try_into().unwrap(); - let total_supply = u128::from_le_bytes( - data[7..] - .try_into() - .expect("Total supply must be 16 bytes little-endian"), - ); - Some(Self { - account_type, - name, - total_supply, - }) - } - } -} impl TokenHolding { fn new(definition_id: &AccountId) -> Self { Self { - account_type: TOKEN_HOLDING_TYPE, + account_type: TOKEN_HOLDING_STANDARD, definition_id: definition_id.clone(), balance: 0, } } - fn parse(data: &[u8]) -> Option { - if data.len() != TOKEN_HOLDING_DATA_SIZE || data[0] != TOKEN_HOLDING_TYPE { + fn parse(data: &Data) -> Option { + let data = Vec::::from(data.clone()); + + if data.len() != TOKEN_HOLDING_DATA_SIZE { + return None; + } + + // Check account_type + if !is_token_holding_type_valid(data[0]) { return None; } @@ -113,6 +204,7 @@ impl TokenHolding { .try_into() .expect("balance must be 16 bytes little-endian"), ); + Some(Self { definition_id, balance, @@ -121,17 +213,90 @@ impl TokenHolding { } fn into_data(self) -> Data { - let mut bytes = [0; TOKEN_HOLDING_DATA_SIZE]; - bytes[0] = self.account_type; - bytes[1..33].copy_from_slice(&self.definition_id.to_bytes()); - bytes[33..].copy_from_slice(&self.balance.to_le_bytes()); - bytes - .to_vec() - .try_into() - .expect("33 bytes should fit into Data") + if !is_token_holding_type_valid(self.account_type) { + panic!("Invalid Token Holding type"); + } + + let mut bytes = Vec::::new(); + bytes.extend_from_slice(&[self.account_type]); + bytes.extend_from_slice(&self.definition_id.to_bytes()); + bytes.extend_from_slice(&self.balance.to_le_bytes()); + + if bytes.len() != TOKEN_HOLDING_DATA_SIZE { + panic!("Invalid Token Holding data"); + } + + Data::try_from(bytes).expect("Invalid data") } } +struct TokenMetadata { + account_type: u8, + version: u8, + definition_id: AccountId, + uri: [u8; 200], + creators: [u8; 250], + primary_sale_date: u64, //BlockId +} + +impl TokenMetadata { + fn into_data(self) -> Data { + if !is_metadata_type_valid(self.account_type) { + panic!("Invalid Metadata type"); + } + + let mut bytes = Vec::::new(); + bytes.extend_from_slice(&[self.account_type]); + bytes.extend_from_slice(&[self.version]); + bytes.extend_from_slice(&self.definition_id.to_bytes()); + bytes.extend_from_slice(&self.uri); + bytes.extend_from_slice(&self.creators); + bytes.extend_from_slice(&self.primary_sale_date.to_le_bytes()); + + if bytes.len() != TOKEN_METADATA_DATA_SIZE { + panic!("Invalid Token Definition data length"); + } + + Data::try_from(bytes).expect("Invalid data") + } + + fn parse(data: &Data) -> Option { + let data = Vec::::from(data.clone()); + + if data.len() != TOKEN_METADATA_DATA_SIZE || !is_metadata_type_valid(data[0]) { + None + } else { + let account_type = data[0]; + let version = data[1]; + let definition_id = AccountId::new( + data[2..34] + .try_into() + .expect("Token Program expects valid Account Id for Metadata"), + ); + let uri: [u8; 200] = data[34..234] + .try_into() + .expect("Token Program expects valid uri for Metadata"); + let creators: [u8; 250] = data[234..484] + .try_into() + .expect("Token Program expects valid creators for Metadata"); + let primary_sale_date = u64::from_le_bytes( + data[484..TOKEN_METADATA_DATA_SIZE] + .try_into() + .expect("Token Program expects valid blockid for Metadata"), + ); + Some(Self { + account_type, + version, + definition_id, + uri, + creators, + primary_sale_date, + }) + } + } +} + + fn transfer(pre_states: &[AccountWithMetadata], balance_to_move: u128) -> Vec { if pre_states.len() != 2 { panic!("Invalid number of input accounts"); @@ -139,9 +304,13 @@ fn transfer(pre_states: &[AccountWithMetadata], balance_to_move: u128) -> Vec Vec Vec (TokenHolding, TokenHolding) { + let mut sender_holding = sender_holding; + let mut recipient_holding = recipient_holding; + + if sender_holding.balance < balance_to_move { + panic!("Insufficient balance"); + } + + sender_holding.balance = sender_holding + .balance + .checked_sub(balance_to_move) + .expect("Checked above"); + recipient_holding.balance = recipient_holding + .balance + .checked_add(balance_to_move) + .expect("Recipient balance overflow"); + + recipient_holding.account_type = sender_holding.account_type; + + (sender_holding, recipient_holding) +} + +fn nft_master_transfer( + sender_holding: TokenHolding, + recipient_holding: TokenHolding, + balance_to_move: u128, +) -> (TokenHolding, TokenHolding) { + let mut sender_holding = sender_holding; + let mut recipient_holding = recipient_holding; + + if recipient_holding.balance != 0 { + panic!("Invalid balance in recipient account for NFT transfer"); + } + + if sender_holding.balance != balance_to_move { + panic!("Invalid balance for NFT Master transfer"); + } + + sender_holding.balance = 0; + recipient_holding.balance = balance_to_move; + recipient_holding.account_type = sender_holding.account_type; + + (sender_holding, recipient_holding) +} + fn new_definition( pre_states: &[AccountWithMetadata], name: [u8; 6], @@ -194,6 +405,7 @@ fn new_definition( if pre_states.len() != 2 { panic!("Invalid number of input accounts"); } + let definition_target_account = &pre_states[0]; let holding_target_account = &pre_states[1]; @@ -206,13 +418,14 @@ fn new_definition( } let token_definition = TokenDefinition { - account_type: TOKEN_DEFINITION_TYPE, + account_type: TOKEN_STANDARD_FUNGIBLE_TOKEN, name, total_supply, + metadata_id: AccountId::new([0; 32]), }; let token_holding = TokenHolding { - account_type: TOKEN_HOLDING_TYPE, + account_type: TOKEN_HOLDING_STANDARD, definition_id: definition_target_account.account_id.clone(), balance: total_supply, }; @@ -229,6 +442,103 @@ fn new_definition( ] } +fn new_definition_with_metadata( + pre_states: &[AccountWithMetadata], + name: [u8; 6], + total_supply: u128, + token_standard: u8, + metadata_standard: u8, + metadata_values: &Data, +) -> Vec { + if pre_states.len() != 3 { + panic!("Invalid number of input accounts"); + } + + let definition_target_account = &pre_states[0]; + let metadata_target_account = &pre_states[1]; + let holding_target_account = &pre_states[2]; + + if definition_target_account.account != Account::default() { + panic!("Definition target account must have default values"); + } + + if metadata_target_account.account != Account::default() { + panic!("Metadata target account must have default values"); + } + + if holding_target_account.account != Account::default() { + panic!("Holding target account must have default values"); + } + + if !is_token_standard_valid(token_standard) { + panic!("Invalid Token Standard provided"); + } + + if !is_metadata_type_valid(metadata_standard) { + panic!("Invalid Metadata Standadard provided"); + } + + if !valid_total_supply_for_token_standard(total_supply, token_standard) { + panic!("Invalid total supply for the specified token supply"); + } + + let token_definition = TokenDefinition { + account_type: token_standard, + name, + total_supply, + metadata_id: metadata_target_account.account_id.clone(), + }; + + let token_holding = TokenHolding { + account_type: TOKEN_HOLDING_STANDARD, + definition_id: definition_target_account.account_id.clone(), + balance: total_supply, + }; + + if metadata_values.len() != 450 { + panic!("Metadata values data should be 450 bytes"); + } + + let uri: [u8; 200] = metadata_values[0..200] + .try_into() + .expect("Token program expects valid uri for Metadata"); + let creators: [u8; 250] = metadata_values[200..450] + .try_into() + .expect("Token program expects valid creators for Metadata"); + + let token_metadata = TokenMetadata { + account_type: metadata_standard, + version: CURRENT_VERSION, + definition_id: definition_target_account.account_id.clone(), + uri, + creators, + primary_sale_date: 0u64, //TODO: future works to implement this + }; + + let mut definition_target_account_post = definition_target_account.account.clone(); + definition_target_account_post.data = token_definition.into_data(); + + let mut holding_target_account_post = holding_target_account.account.clone(); + holding_target_account_post.data = token_holding.into_data(); + + let mut metadata_target_account_post = metadata_target_account.account.clone(); + metadata_target_account_post.data = token_metadata.into_data(); + + vec![ + AccountPostState::new_claimed(definition_target_account_post), + AccountPostState::new_claimed(holding_target_account_post), + AccountPostState::new_claimed(metadata_target_account_post), + ] +} + +fn valid_total_supply_for_token_standard(total_supply: u128, token_standard: u8) -> bool { + if token_standard == TOKEN_STANDARD_NONFUNGIBLE && total_supply != 1 { + false + } else { + true + } +} + fn initialize_account(pre_states: &[AccountWithMetadata]) -> Vec { if pre_states.len() != 2 { panic!("Invalid number of accounts"); @@ -267,17 +577,17 @@ fn burn(pre_states: &[AccountWithMetadata], balance_to_burn: u128) -> Vec Vec Vec bool { + if account_type == TOKEN_STANDARD_NONFUNGIBLE { + false + } else { + true + } +} + fn mint_additional_supply( pre_states: &[AccountWithMetadata], amount_to_mint: u128, @@ -335,8 +654,12 @@ fn mint_additional_supply( TokenHolding::parse(&token_holding.account.data).expect("Holding account must be valid") }; + if !is_mintable(definition_values.account_type) { + panic!("Token Definition's standard does not permit minting additional supply"); + } + if definition.account_id != token_holding_values.definition_id { - panic!("Mismatch token definition and token holding"); + panic!("Mismatch Token Definition and Token Holding"); } let token_holding_post_data = TokenHolding { @@ -357,6 +680,7 @@ fn mint_additional_supply( account_type: definition_values.account_type, name: definition_values.name, total_supply: post_total_supply, + metadata_id: definition_values.metadata_id, }; let post_definition = { @@ -379,7 +703,60 @@ fn mint_additional_supply( vec![post_definition, token_holding_post] } -type Instruction = [u8; 23]; +fn print_nft(pre_states: &[AccountWithMetadata]) -> Vec { + if pre_states.len() != 2 { + panic!("Invalid number of accounts"); + } + + let master_account = &pre_states[0]; + let printed_account = &pre_states[1]; + + if !master_account.is_authorized { + panic!("Master NFT Account must be authorized"); + } + + if printed_account.account != Account::default() { + panic!("Printed Account must be uninitialized"); + } + + let mut master_account_data = + TokenHolding::parse(&master_account.account.data).expect("Invalid Token Holding data"); + + if master_account_data.account_type != TOKEN_HOLDING_NFT_MASTER { + panic!("Invalid Token Holding provided as NFT Master Account"); + } + + if master_account_data.balance < 2 { + panic!("Insufficient balance to print another NFT copy"); + } + + let definition_id = master_account_data.definition_id.clone(); + + let post_master_account = { + let mut this = master_account.account.clone(); + master_account_data.balance -= 1; + this.data = master_account_data.into_data(); + AccountPostState::new(this) + }; + + let post_printed_account = { + let mut this = printed_account.account.clone(); + + let printed_data = TokenHolding { + account_type: TOKEN_HOLDING_NFT_PRINTED_COPY, + definition_id, + balance: 1, + }; + + this.data = TokenHolding::into_data(printed_data); + + AccountPostState::new_claimed(this) + }; + + vec![post_master_account, post_printed_account] +} + +type Instruction = Vec; fn main() { let ( @@ -456,6 +833,48 @@ fn main() { // Execute mint_additional_supply(&pre_states, balance_to_mint) } + 5 => { + if instruction.len() != 474 { + panic!("Invalid instruction length") + } + + // Parse instruction + let total_supply = u128::from_le_bytes( + instruction[1..17] + .try_into() + .expect("Total supply must be 16 bytes little-endian"), + ); + let name = instruction[17..23] + .try_into() + .expect("Name must be 6 bytes long"); + assert_ne!(name, [0; 6]); + let token_standard = instruction[23]; + let metadata_standard = instruction[24]; + let metadata_values: Data = + Data::try_from(instruction[25..474].to_vec()).expect("Invalid metadata"); + + // Execute + new_definition_with_metadata( + &pre_states, + name, + total_supply, + token_standard, + metadata_standard, + &metadata_values, + ) + } + 6 => { + if instruction.len() != 23 { + panic!("Invalid instruction length"); + } + + // Initialize account + if instruction[1..] != [0; 22] { + panic!("Invalid instruction for initialize account"); + } + + print_nft(&pre_states) + } _ => panic!("Invalid instruction"), }; @@ -464,14 +883,492 @@ fn main() { #[cfg(test)] mod tests { - use nssa_core::account::{Account, AccountId, AccountWithMetadata}; + use nssa_core::account::{Account, AccountId, AccountWithMetadata, Data}; use crate::{ - TOKEN_DEFINITION_DATA_SIZE, TOKEN_DEFINITION_TYPE, TOKEN_HOLDING_DATA_SIZE, - TOKEN_HOLDING_TYPE, TokenDefinition, TokenHolding, burn, initialize_account, - mint_additional_supply, new_definition, transfer, + TOKEN_DEFINITION_DATA_SIZE, TOKEN_HOLDING_DATA_SIZE, TOKEN_HOLDING_NFT_MASTER, + TOKEN_HOLDING_NFT_PRINTED_COPY, TOKEN_HOLDING_STANDARD, TOKEN_STANDARD_FUNGIBLE_ASSET, + TOKEN_STANDARD_FUNGIBLE_TOKEN, TOKEN_STANDARD_NONFUNGIBLE, TokenDefinition, TokenHolding, + burn, initialize_account, mint_additional_supply, new_definition, + new_definition_with_metadata, print_nft, transfer, }; + enum BalanceEnum { + InitSupply, + HoldingBalance, + InitSupplyBurned, + HoldingBalanceBurned, + BurnSuccess, + BurnInsufficient, + MintSuccess, + InitSupplyMint, + HoldingBalanceMint, + MintOverflow, + RecipientPostTransfer, + RecipientUninitPostTransfer, + SenderPostTransfer, + TransferAmount, + PrintableCopies, + } + + enum AccountsEnum { + DefinitionAccountAuth, + DefinitionAccountNotAuth, + HoldingDiffDef, + HoldingSameDefAuth, + HoldingSameDefNotAuth, + HoldingSameDefNotAuthOverflow, + DefinitionAccountPostBurn, + HoldingAccountPostBurn, + InitMint, + DefinitionAccountMint, + HoldingSameDefMint, + HoldingSameDefAuthLargeBalance, + DefinitionAccountAuthNonFungible, + DefinitionAccountUninit, + HoldingAccountUninit, + HoldingAccountInit, + DefinitionAccountUnclaimed, + HoldingAccountUnclaimed, + HoldingAccount2Init, + HoldingAccount2InitPostTransfer, + HoldingAccount2UninitPostTransfer, + HoldingAccountInitPostTransfer, + HoldingAccountMasterNFT, + HoldingAccountMasterNFTInsufficientBalance, + HoldingAccountMasterNFTAfterPrint, + HoldingAccountPrintedNFT, + HoldingAccountMasterNFTTransferredTo, + HoldingAccountMasterNFTPostTransfer, + } + + enum IdEnum { + PoolDefinitionId, + PoolDefinitionIdDiff, + HoldingId, + Holding2Id, + MetadataId, + } + + fn helper_account_constructor(selection: AccountsEnum) -> AccountWithMetadata { + match selection { + AccountsEnum::DefinitionAccountAuth => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenDefinition::into_data(TokenDefinition { + account_type: TOKEN_STANDARD_FUNGIBLE_TOKEN, + name: [2; 6], + total_supply: helper_balance_constructor(BalanceEnum::InitSupply), + metadata_id: AccountId::new([0; 32]), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::PoolDefinitionId), + }, + AccountsEnum::DefinitionAccountNotAuth => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenDefinition::into_data(TokenDefinition { + account_type: TOKEN_STANDARD_FUNGIBLE_TOKEN, + name: [2; 6], + total_supply: helper_balance_constructor(BalanceEnum::InitSupply), + metadata_id: AccountId::new([0; 32]), + }), + nonce: 0, + }, + is_authorized: false, + account_id: helper_id_constructor(IdEnum::PoolDefinitionId), + }, + AccountsEnum::HoldingDiffDef => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_STANDARD, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionIdDiff), + balance: helper_balance_constructor(BalanceEnum::HoldingBalance), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::HoldingSameDefAuth => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_STANDARD, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::HoldingBalance), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::HoldingSameDefNotAuth => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_STANDARD, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::HoldingBalance), + }), + nonce: 0, + }, + is_authorized: false, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::HoldingSameDefNotAuthOverflow => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_STANDARD, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::InitSupply), + }), + nonce: 0, + }, + is_authorized: false, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::DefinitionAccountPostBurn => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenDefinition::into_data(TokenDefinition { + account_type: TOKEN_STANDARD_FUNGIBLE_TOKEN, + name: [2; 6], + total_supply: helper_balance_constructor(BalanceEnum::InitSupplyBurned), + metadata_id: AccountId::new([0; 32]), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::PoolDefinitionId), + }, + AccountsEnum::HoldingAccountPostBurn => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_STANDARD, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::HoldingBalanceBurned), + }), + nonce: 0, + }, + is_authorized: false, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::HoldingAccountUninit => AccountWithMetadata { + account: Account::default(), + is_authorized: false, + account_id: helper_id_constructor(IdEnum::Holding2Id), + }, + AccountsEnum::InitMint => AccountWithMetadata { + account: Account { + program_owner: [0u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_STANDARD, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::MintSuccess), + }), + nonce: 0, + }, + is_authorized: false, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::HoldingSameDefMint => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_STANDARD, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::HoldingBalanceMint), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::PoolDefinitionId), + }, + AccountsEnum::DefinitionAccountMint => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenDefinition::into_data(TokenDefinition { + account_type: TOKEN_STANDARD_FUNGIBLE_TOKEN, + name: [2; 6], + total_supply: helper_balance_constructor(BalanceEnum::InitSupplyMint), + metadata_id: AccountId::new([0; 32]), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::PoolDefinitionId), + }, + AccountsEnum::HoldingSameDefAuthLargeBalance => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_STANDARD, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::MintOverflow), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::PoolDefinitionId), + }, + AccountsEnum::DefinitionAccountAuthNonFungible => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenDefinition::into_data(TokenDefinition { + account_type: TOKEN_STANDARD_NONFUNGIBLE, + name: [2; 6], + total_supply: 1, + metadata_id: AccountId::new([0; 32]), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::PoolDefinitionId), + }, + AccountsEnum::DefinitionAccountUninit => AccountWithMetadata { + account: Account::default(), + is_authorized: false, + account_id: helper_id_constructor(IdEnum::PoolDefinitionId), + }, + AccountsEnum::HoldingAccountInit => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_STANDARD, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::InitSupply), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::DefinitionAccountUnclaimed => AccountWithMetadata { + account: Account { + program_owner: [0u32; 8], + balance: 0u128, + data: TokenDefinition::into_data(TokenDefinition { + account_type: TOKEN_STANDARD_FUNGIBLE_TOKEN, + name: [2; 6], + total_supply: helper_balance_constructor(BalanceEnum::InitSupply), + metadata_id: AccountId::new([0; 32]), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::PoolDefinitionId), + }, + AccountsEnum::HoldingAccountUnclaimed => AccountWithMetadata { + account: Account { + program_owner: [0u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_STANDARD, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::InitSupply), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::HoldingAccount2Init => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_STANDARD, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::InitSupply), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::Holding2Id), + }, + AccountsEnum::HoldingAccount2InitPostTransfer => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_STANDARD, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::RecipientPostTransfer), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::Holding2Id), + }, + AccountsEnum::HoldingAccountInitPostTransfer => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_STANDARD, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::SenderPostTransfer), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::HoldingAccount2UninitPostTransfer => AccountWithMetadata { + account: Account { + program_owner: [0u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_STANDARD, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor( + BalanceEnum::RecipientUninitPostTransfer, + ), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::Holding2Id), + }, + AccountsEnum::HoldingAccountMasterNFT => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_NFT_MASTER, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::PrintableCopies), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::HoldingAccountMasterNFTInsufficientBalance => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_NFT_MASTER, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: 1, + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::HoldingAccountMasterNFTAfterPrint => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_NFT_MASTER, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::PrintableCopies) - 1, + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::HoldingAccountPrintedNFT => AccountWithMetadata { + account: Account { + program_owner: [0u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_NFT_PRINTED_COPY, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: 1, + }), + nonce: 0, + }, + is_authorized: false, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + AccountsEnum::HoldingAccountMasterNFTTransferredTo => AccountWithMetadata { + account: Account { + program_owner: [0u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_NFT_MASTER, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: helper_balance_constructor(BalanceEnum::PrintableCopies), + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::Holding2Id), + }, + AccountsEnum::HoldingAccountMasterNFTPostTransfer => AccountWithMetadata { + account: Account { + program_owner: [5u32; 8], + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: TOKEN_HOLDING_NFT_MASTER, + definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + balance: 0, + }), + nonce: 0, + }, + is_authorized: true, + account_id: helper_id_constructor(IdEnum::HoldingId), + }, + _ => panic!("Invalid selection"), + } + } + + fn helper_balance_constructor(selection: BalanceEnum) -> u128 { + match selection { + BalanceEnum::InitSupply => 100_000, + BalanceEnum::HoldingBalance => 1_000, + BalanceEnum::InitSupplyBurned => 99_500, + BalanceEnum::HoldingBalanceBurned => 500, + BalanceEnum::BurnSuccess => 500, + BalanceEnum::BurnInsufficient => 1_500, + BalanceEnum::MintSuccess => 50_000, + BalanceEnum::InitSupplyMint => 150_000, + BalanceEnum::HoldingBalanceMint => 51_000, + BalanceEnum::MintOverflow => (2 as u128).pow(128) - 40_000, + BalanceEnum::SenderPostTransfer => 95_000, + BalanceEnum::RecipientPostTransfer => 105_000, + BalanceEnum::RecipientUninitPostTransfer => 5_000, + BalanceEnum::TransferAmount => 5_000, + BalanceEnum::PrintableCopies => 10, + _ => panic!("Invalid selection"), + } + } + + fn helper_id_constructor(selection: IdEnum) -> AccountId { + match selection { + IdEnum::PoolDefinitionId => AccountId::new([15; 32]), + IdEnum::PoolDefinitionIdDiff => AccountId::new([16; 32]), + IdEnum::HoldingId => AccountId::new([17; 32]), + IdEnum::MetadataId => AccountId::new([42; 32]), + IdEnum::Holding2Id => AccountId::new([31; 32]), + } + } + #[should_panic(expected = "Invalid number of input accounts")] #[test] fn test_call_new_definition_with_invalid_number_of_accounts_1() { @@ -551,39 +1448,25 @@ mod tests { #[test] fn test_new_definition_with_valid_inputs_succeeds() { let pre_states = vec![ - AccountWithMetadata { - account: Account::default(), - is_authorized: false, - account_id: AccountId::new([ - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - ]), - }, - AccountWithMetadata { - account: Account { - ..Account::default() - }, - is_authorized: false, - account_id: AccountId::new([2; 32]), - }, + helper_account_constructor(AccountsEnum::DefinitionAccountUninit), + helper_account_constructor(AccountsEnum::HoldingAccountUninit), ]; - let post_states = new_definition(&pre_states, [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe], 10); - let [definition_account, holding_account] = post_states.try_into().ok().unwrap(); - assert_eq!( - definition_account.account().data.as_ref(), - &[ - 0, 0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0 - ] + let post_states = new_definition( + &pre_states, + [2u8; 6], + helper_balance_constructor(BalanceEnum::InitSupply), ); - assert_eq!( - holding_account.account().data.as_ref(), - &[ - 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0 - ] + + let [definition_account, holding_account] = post_states.try_into().ok().unwrap(); + assert!( + *definition_account.account() + == helper_account_constructor(AccountsEnum::DefinitionAccountUnclaimed).account + ); + + assert!( + *holding_account.account() + == helper_account_constructor(AccountsEnum::HoldingAccountUnclaimed).account ); } @@ -624,14 +1507,13 @@ mod tests { #[should_panic(expected = "Invalid sender data")] #[test] fn test_transfer_invalid_instruction_type_should_fail() { - let invalid_type = TOKEN_HOLDING_TYPE ^ 1; + let invalid_type = TOKEN_HOLDING_STANDARD ^ 1; let pre_states = vec![ AccountWithMetadata { account: Account { - // First byte should be `TOKEN_HOLDING_TYPE` for token holding accounts - data: vec![invalid_type; TOKEN_HOLDING_DATA_SIZE] - .try_into() - .unwrap(), + // First byte should be `TOKEN_HOLDING_STANDARD` for token holding accounts + data: Data::try_from(vec![invalid_type; TOKEN_HOLDING_DATA_SIZE]) + .expect("Invalid data"), ..Account::default() }, is_authorized: true, @@ -653,7 +1535,7 @@ mod tests { AccountWithMetadata { account: Account { // Data must be of exact length `TOKEN_HOLDING_DATA_SIZE` - data: vec![1; TOKEN_HOLDING_DATA_SIZE - 1].try_into().unwrap(), + data: Data::try_from(vec![1; TOKEN_HOLDING_DATA_SIZE - 1]).unwrap(), ..Account::default() }, is_authorized: true, @@ -675,7 +1557,7 @@ mod tests { AccountWithMetadata { account: Account { // Data must be of exact length `TOKEN_HOLDING_DATA_SIZE` - data: vec![1; TOKEN_HOLDING_DATA_SIZE + 1].try_into().unwrap(), + data: Data::try_from(vec![1; TOKEN_HOLDING_DATA_SIZE - 1]).unwrap(), ..Account::default() }, is_authorized: true, @@ -694,27 +1576,8 @@ mod tests { #[test] fn test_transfer_with_different_definition_ids_should_fail() { let pre_states = vec![ - AccountWithMetadata { - account: Account { - data: vec![1; TOKEN_HOLDING_DATA_SIZE].try_into().unwrap(), - ..Account::default() - }, - is_authorized: true, - account_id: AccountId::new([1; 32]), - }, - AccountWithMetadata { - account: Account { - data: [1] - .into_iter() - .chain(vec![2; TOKEN_HOLDING_DATA_SIZE - 1]) - .collect::>() - .try_into() - .unwrap(), - ..Account::default() - }, - is_authorized: true, - account_id: AccountId::new([2; 32]), - }, + helper_account_constructor(AccountsEnum::HoldingSameDefAuth), + helper_account_constructor(AccountsEnum::HoldingDiffDef), ]; let _post_states = transfer(&pre_states, 10); } @@ -723,46 +1586,28 @@ mod tests { #[test] fn test_transfer_with_insufficient_balance_should_fail() { let pre_states = vec![ - AccountWithMetadata { - account: Account { - // Account with balance 37 - data: [1; TOKEN_HOLDING_DATA_SIZE - 16] - .into_iter() - .chain(u128::to_le_bytes(37)) - .collect::>() - .try_into() - .unwrap(), - ..Account::default() - }, - is_authorized: true, - account_id: AccountId::new([1; 32]), - }, - AccountWithMetadata { - account: Account { - data: vec![1; TOKEN_HOLDING_DATA_SIZE].try_into().unwrap(), - ..Account::default() - }, - is_authorized: true, - account_id: AccountId::new([2; 32]), - }, + helper_account_constructor(AccountsEnum::HoldingSameDefAuth), + helper_account_constructor(AccountsEnum::HoldingSameDefMint), ]; // Attempt to transfer 38 tokens - let _post_states = transfer(&pre_states, 38); + let _post_states = transfer( + &pre_states, + helper_balance_constructor(BalanceEnum::BurnInsufficient), + ); } #[should_panic(expected = "Sender authorization is missing")] #[test] fn test_transfer_without_sender_authorization_should_fail() { + let mut def_data = Vec::::new(); + def_data.extend_from_slice(&[1; TOKEN_DEFINITION_DATA_SIZE - 16]); + def_data.extend_from_slice(&u128::to_le_bytes(37)); + let pre_states = vec![ AccountWithMetadata { account: Account { // Account with balance 37 - data: [1; TOKEN_HOLDING_DATA_SIZE - 16] - .into_iter() - .chain(u128::to_le_bytes(37)) - .collect::>() - .try_into() - .unwrap(), + data: Data::try_from(def_data).unwrap(), ..Account::default() }, is_authorized: false, @@ -770,7 +1615,7 @@ mod tests { }, AccountWithMetadata { account: Account { - data: vec![1; TOKEN_HOLDING_DATA_SIZE].try_into().unwrap(), + data: Data::try_from(vec![1; TOKEN_HOLDING_DATA_SIZE - 1]).unwrap(), ..Account::default() }, is_authorized: true, @@ -783,327 +1628,108 @@ mod tests { #[test] fn test_transfer_with_valid_inputs_succeeds() { let pre_states = vec![ - AccountWithMetadata { - account: Account { - // Account with balance 37 - data: [1; TOKEN_HOLDING_DATA_SIZE - 16] - .into_iter() - .chain(u128::to_le_bytes(37)) - .collect::>() - .try_into() - .unwrap(), - ..Account::default() - }, - is_authorized: true, - account_id: AccountId::new([1; 32]), - }, - AccountWithMetadata { - account: Account { - // Account with balance 255 - data: [1; TOKEN_HOLDING_DATA_SIZE - 16] - .into_iter() - .chain(u128::to_le_bytes(255)) - .collect::>() - .try_into() - .unwrap(), - ..Account::default() - }, - is_authorized: true, - account_id: AccountId::new([2; 32]), - }, + helper_account_constructor(AccountsEnum::HoldingAccountInit), + helper_account_constructor(AccountsEnum::HoldingAccount2Init), ]; - let post_states = transfer(&pre_states, 11); - let [sender_post, recipient_post] = post_states.try_into().ok().unwrap(); - assert_eq!( - sender_post.account().data.as_ref(), - [ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - ] + let post_states = transfer( + &pre_states, + helper_balance_constructor(BalanceEnum::TransferAmount), ); - assert_eq!( - recipient_post.account().data.as_ref(), - [ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 10, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - ] + let [sender_post, recipient_post] = post_states.try_into().ok().unwrap(); + + assert!( + *sender_post.account() + == helper_account_constructor(AccountsEnum::HoldingAccountInitPostTransfer).account + ); + assert!( + *recipient_post.account() + == helper_account_constructor(AccountsEnum::HoldingAccount2InitPostTransfer) + .account + ); + } + + #[should_panic(expected = "Invalid balance for NFT Master transfer")] + #[test] + fn test_transfer_with_master_nft_invalid_balance() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::HoldingAccountMasterNFT), + helper_account_constructor(AccountsEnum::HoldingAccountUninit), + ]; + let post_states = transfer( + &pre_states, + helper_balance_constructor(BalanceEnum::TransferAmount), + ); + let [sender_post, recipient_post] = post_states.try_into().ok().unwrap(); + + assert!( + *sender_post.account() + == helper_account_constructor(AccountsEnum::HoldingAccountInitPostTransfer).account + ); + assert!( + *recipient_post.account() + == helper_account_constructor(AccountsEnum::HoldingAccount2InitPostTransfer) + .account + ); + } + + #[should_panic(expected = "Invalid balance in recipient account for NFT transfer")] + #[test] + fn test_transfer_with_master_nft_invalid_recipient_balance() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::HoldingAccountMasterNFT), + helper_account_constructor(AccountsEnum::HoldingAccountMasterNFTTransferredTo), + ]; + let _post_states = transfer( + &pre_states, + helper_balance_constructor(BalanceEnum::PrintableCopies), + ); + } + + #[test] + fn test_transfer_with_master_nft_success() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::HoldingAccountMasterNFT), + helper_account_constructor(AccountsEnum::HoldingAccountUninit), + ]; + let post_states = transfer( + &pre_states, + helper_balance_constructor(BalanceEnum::PrintableCopies), + ); + let [sender_post, recipient_post] = post_states.try_into().ok().unwrap(); + + assert!( + *sender_post.account() + == helper_account_constructor(AccountsEnum::HoldingAccountMasterNFTPostTransfer) + .account + ); + assert!( + *recipient_post.account() + == helper_account_constructor(AccountsEnum::HoldingAccountMasterNFTTransferredTo) + .account ); } #[test] fn test_token_initialize_account_succeeds() { let pre_states = vec![ - AccountWithMetadata { - account: Account { - // Definition ID with - data: [0; TOKEN_DEFINITION_DATA_SIZE - 16] - .into_iter() - .chain(u128::to_le_bytes(1000)) - .collect::>() - .try_into() - .unwrap(), - ..Account::default() - }, - is_authorized: false, - account_id: AccountId::new([1; 32]), - }, - AccountWithMetadata { - account: Account::default(), - is_authorized: false, - account_id: AccountId::new([2; 32]), - }, + helper_account_constructor(AccountsEnum::HoldingAccountInit), + helper_account_constructor(AccountsEnum::HoldingAccountUninit), ]; - let post_states = initialize_account(&pre_states); - let [definition, holding] = post_states.try_into().ok().unwrap(); - assert_eq!( - definition.account().data.as_ref(), - pre_states[0].account.data.as_ref() + let post_states = transfer( + &pre_states, + helper_balance_constructor(BalanceEnum::TransferAmount), ); - assert_eq!( - holding.account().data.as_ref(), - [ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - ] + let [sender_post, recipient_post] = post_states.try_into().ok().unwrap(); + + assert!( + *sender_post.account() + == helper_account_constructor(AccountsEnum::HoldingAccountInitPostTransfer).account + ); + assert!( + *recipient_post.account() + == helper_account_constructor(AccountsEnum::HoldingAccount2UninitPostTransfer) + .account ); - } - - enum BalanceEnum { - InitSupply, - HoldingBalance, - InitSupplyBurned, - HoldingBalanceBurned, - BurnSuccess, - BurnInsufficient, - MintSuccess, - InitSupplyMint, - HoldingBalanceMint, - MintOverflow, - } - - enum AccountsEnum { - DefinitionAccountAuth, - DefinitionAccountNotAuth, - HoldingDiffDef, - HoldingSameDefAuth, - HoldingSameDefNotAuth, - HoldingSameDefNotAuthOverflow, - DefinitionAccountPostBurn, - HoldingAccountPostBurn, - Uninit, - InitMint, - DefinitionAccountMint, - HoldingSameDefMint, - HoldingSameDefAuthLargeBalance, - } - - enum IdEnum { - PoolDefinitionId, - PoolDefinitionIdDiff, - HoldingId, - } - - fn helper_account_constructor(selection: AccountsEnum) -> AccountWithMetadata { - match selection { - AccountsEnum::DefinitionAccountAuth => AccountWithMetadata { - account: Account { - program_owner: [5u32; 8], - balance: 0u128, - data: TokenDefinition::into_data(TokenDefinition { - account_type: TOKEN_DEFINITION_TYPE, - name: [2; 6], - total_supply: helper_balance_constructor(BalanceEnum::InitSupply), - }), - nonce: 0, - }, - is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountsEnum::DefinitionAccountNotAuth => AccountWithMetadata { - account: Account { - program_owner: [5u32; 8], - balance: 0u128, - data: TokenDefinition::into_data(TokenDefinition { - account_type: TOKEN_DEFINITION_TYPE, - name: [2; 6], - total_supply: helper_balance_constructor(BalanceEnum::InitSupply), - }), - nonce: 0, - }, - is_authorized: false, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountsEnum::HoldingDiffDef => AccountWithMetadata { - account: Account { - program_owner: [5u32; 8], - balance: 0u128, - data: TokenHolding::into_data(TokenHolding { - account_type: TOKEN_HOLDING_TYPE, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionIdDiff), - balance: helper_balance_constructor(BalanceEnum::HoldingBalance), - }), - nonce: 0, - }, - is_authorized: true, - account_id: helper_id_constructor(IdEnum::HoldingId), - }, - AccountsEnum::HoldingSameDefAuth => AccountWithMetadata { - account: Account { - program_owner: [5u32; 8], - balance: 0u128, - data: TokenHolding::into_data(TokenHolding { - account_type: TOKEN_HOLDING_TYPE, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), - balance: helper_balance_constructor(BalanceEnum::HoldingBalance), - }), - nonce: 0, - }, - is_authorized: true, - account_id: helper_id_constructor(IdEnum::HoldingId), - }, - AccountsEnum::HoldingSameDefNotAuth => AccountWithMetadata { - account: Account { - program_owner: [5u32; 8], - balance: 0u128, - data: TokenHolding::into_data(TokenHolding { - account_type: TOKEN_HOLDING_TYPE, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), - balance: helper_balance_constructor(BalanceEnum::HoldingBalance), - }), - nonce: 0, - }, - is_authorized: false, - account_id: helper_id_constructor(IdEnum::HoldingId), - }, - AccountsEnum::HoldingSameDefNotAuthOverflow => AccountWithMetadata { - account: Account { - program_owner: [5u32; 8], - balance: 0u128, - data: TokenHolding::into_data(TokenHolding { - account_type: TOKEN_HOLDING_TYPE, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), - balance: helper_balance_constructor(BalanceEnum::InitSupply), - }), - nonce: 0, - }, - is_authorized: false, - account_id: helper_id_constructor(IdEnum::HoldingId), - }, - AccountsEnum::DefinitionAccountPostBurn => AccountWithMetadata { - account: Account { - program_owner: [5u32; 8], - balance: 0u128, - data: TokenDefinition::into_data(TokenDefinition { - account_type: TOKEN_DEFINITION_TYPE, - name: [2; 6], - total_supply: helper_balance_constructor(BalanceEnum::InitSupplyBurned), - }), - nonce: 0, - }, - is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountsEnum::HoldingAccountPostBurn => AccountWithMetadata { - account: Account { - program_owner: [5u32; 8], - balance: 0u128, - data: TokenHolding::into_data(TokenHolding { - account_type: TOKEN_HOLDING_TYPE, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), - balance: helper_balance_constructor(BalanceEnum::HoldingBalanceBurned), - }), - nonce: 0, - }, - is_authorized: false, - account_id: helper_id_constructor(IdEnum::HoldingId), - }, - AccountsEnum::Uninit => AccountWithMetadata { - account: Account::default(), - is_authorized: false, - account_id: helper_id_constructor(IdEnum::HoldingId), - }, - AccountsEnum::InitMint => AccountWithMetadata { - account: Account { - program_owner: [0u32; 8], - balance: 0u128, - data: TokenHolding::into_data(TokenHolding { - account_type: TOKEN_HOLDING_TYPE, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), - balance: helper_balance_constructor(BalanceEnum::MintSuccess), - }), - nonce: 0, - }, - is_authorized: false, - account_id: helper_id_constructor(IdEnum::HoldingId), - }, - AccountsEnum::HoldingSameDefMint => AccountWithMetadata { - account: Account { - program_owner: [5u32; 8], - balance: 0u128, - data: TokenHolding::into_data(TokenHolding { - account_type: TOKEN_HOLDING_TYPE, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), - balance: helper_balance_constructor(BalanceEnum::HoldingBalanceMint), - }), - nonce: 0, - }, - is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountsEnum::DefinitionAccountMint => AccountWithMetadata { - account: Account { - program_owner: [5u32; 8], - balance: 0u128, - data: TokenDefinition::into_data(TokenDefinition { - account_type: TOKEN_DEFINITION_TYPE, - name: [2; 6], - total_supply: helper_balance_constructor(BalanceEnum::InitSupplyMint), - }), - nonce: 0, - }, - is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountsEnum::HoldingSameDefAuthLargeBalance => AccountWithMetadata { - account: Account { - program_owner: [5u32; 8], - balance: 0u128, - data: TokenHolding::into_data(TokenHolding { - account_type: TOKEN_HOLDING_TYPE, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), - balance: helper_balance_constructor(BalanceEnum::MintOverflow), - }), - nonce: 0, - }, - is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - _ => panic!("Invalid selection"), - } - } - - fn helper_balance_constructor(selection: BalanceEnum) -> u128 { - match selection { - BalanceEnum::InitSupply => 100_000, - BalanceEnum::HoldingBalance => 1_000, - BalanceEnum::InitSupplyBurned => 99_500, - BalanceEnum::HoldingBalanceBurned => 500, - BalanceEnum::BurnSuccess => 500, - BalanceEnum::BurnInsufficient => 1_500, - BalanceEnum::MintSuccess => 50_000, - BalanceEnum::InitSupplyMint => 150_000, - BalanceEnum::HoldingBalanceMint => 51_000, - BalanceEnum::MintOverflow => (2 as u128).pow(128) - 40_000, - _ => panic!("Invalid selection"), - } - } - - fn helper_id_constructor(selection: IdEnum) -> AccountId { - match selection { - IdEnum::PoolDefinitionId => AccountId::new([15; 32]), - IdEnum::PoolDefinitionIdDiff => AccountId::new([16; 32]), - IdEnum::HoldingId => AccountId::new([17; 32]), - } } #[test] @@ -1119,7 +1745,7 @@ mod tests { } #[test] - #[should_panic(expected = "Mismatch token definition and token holding")] + #[should_panic(expected = "Mismatch Token Definition and Token Holding")] fn test_burn_mismatch_def() { let pre_states = vec![ helper_account_constructor(AccountsEnum::DefinitionAccountAuth), @@ -1196,7 +1822,7 @@ mod tests { #[test] #[should_panic(expected = "Invalid number of accounts")] - fn test_mint_invalid_number_of_accounts() { + fn test_mint_invalid_number_of_accounts_1() { let pre_states = vec![helper_account_constructor( AccountsEnum::DefinitionAccountAuth, )]; @@ -1206,6 +1832,20 @@ mod tests { ); } + #[test] + #[should_panic(expected = "Invalid number of accounts")] + fn test_mint_invalid_number_of_accounts_2() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::DefinitionAccountAuth), + helper_account_constructor(AccountsEnum::HoldingSameDefMint), + helper_account_constructor(AccountsEnum::HoldingSameDefAuth), + ]; + let _post_states = mint_additional_supply( + &pre_states, + helper_balance_constructor(BalanceEnum::MintSuccess), + ); + } + #[test] #[should_panic(expected = "Holding account must be valid")] fn test_mint_not_valid_holding_account() { @@ -1219,6 +1859,19 @@ mod tests { ); } + #[test] + #[should_panic(expected = "Definition account must be valid")] + fn test_mint_not_valid_definition_account() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::HoldingSameDefAuth), + helper_account_constructor(AccountsEnum::HoldingSameDefNotAuth), + ]; + let _post_states = mint_additional_supply( + &pre_states, + helper_balance_constructor(BalanceEnum::MintSuccess), + ); + } + #[test] #[should_panic(expected = "Definition authorization is missing")] fn test_mint_missing_authorization() { @@ -1233,7 +1886,7 @@ mod tests { } #[test] - #[should_panic(expected = "Mismatch token definition and token holding")] + #[should_panic(expected = "Mismatch Token Definition and Token Holding")] fn test_mint_mismatched_token_definition() { let pre_states = vec![ helper_account_constructor(AccountsEnum::DefinitionAccountAuth), @@ -1273,7 +1926,7 @@ mod tests { fn test_mint_uninit_holding_success() { let pre_states = vec![ helper_account_constructor(AccountsEnum::DefinitionAccountAuth), - helper_account_constructor(AccountsEnum::Uninit), + helper_account_constructor(AccountsEnum::HoldingAccountUninit), ]; let post_states = mint_additional_supply( &pre_states, @@ -1318,4 +1971,483 @@ mod tests { helper_balance_constructor(BalanceEnum::MintOverflow), ); } -} + + #[test] + #[should_panic( + expected = "Token Definition's standard does not permit minting additional supply" + )] + fn test_mint_cannot_mint_unmintable_tokens() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::DefinitionAccountAuthNonFungible), + helper_account_constructor(AccountsEnum::HoldingSameDefNotAuth), + ]; + let _post_states = mint_additional_supply( + &pre_states, + helper_balance_constructor(BalanceEnum::MintSuccess), + ); + } + + #[should_panic(expected = "Invalid number of input accounts")] + #[test] + fn test_call_new_definition_metadata_with_invalid_number_of_accounts_1() { + let name = [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe]; + let total_supply = 15u128; + let token_standard = 0u8; + let metadata_standard = 0u8; + let metadata_values: Data = Data::try_from([1u8; 450].to_vec()).unwrap(); + + let pre_states = vec![AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([1; 32]), + }]; + let _post_states = new_definition_with_metadata( + &pre_states, + name, + total_supply, + token_standard, + metadata_standard, + &metadata_values, + ); + } + + #[should_panic(expected = "Invalid number of input accounts")] + #[test] + fn test_call_new_definition_metadata_with_invalid_number_of_accounts_2() { + let name = [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe]; + let total_supply = 15u128; + let token_standard = 0u8; + let metadata_standard = 0u8; + let metadata_values: Data = Data::try_from([1u8; 450].to_vec()).unwrap(); + + let pre_states = vec![ + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([1; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([2; 32]), + }, + ]; + let _post_states = new_definition_with_metadata( + &pre_states, + name, + total_supply, + token_standard, + metadata_standard, + &metadata_values, + ); + } + + #[should_panic(expected = "Invalid number of input accounts")] + #[test] + fn test_call_new_definition_metadata_with_invalid_number_of_accounts_3() { + let name = [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe]; + let total_supply = 15u128; + let token_standard = 0u8; + let metadata_standard = 0u8; + let metadata_values: Data = Data::try_from([1u8; 450].to_vec()).unwrap(); + + let pre_states = vec![ + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([1; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([2; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([3; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([4; 32]), + }, + ]; + let _post_states = new_definition_with_metadata( + &pre_states, + name, + total_supply, + token_standard, + metadata_standard, + &metadata_values, + ); + } + + #[should_panic(expected = "Definition target account must have default values")] + #[test] + fn test_call_new_definition_metadata_with_init_definition() { + let name = [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe]; + let total_supply = 15u128; + let token_standard = 0u8; + let metadata_standard = 0u8; + let metadata_values: Data = Data::try_from([1u8; 450].to_vec()).unwrap(); + + let pre_states = vec![ + helper_account_constructor(AccountsEnum::DefinitionAccountAuth), + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([2; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([3; 32]), + }, + ]; + let _post_states = new_definition_with_metadata( + &pre_states, + name, + total_supply, + token_standard, + metadata_standard, + &metadata_values, + ); + } + + #[should_panic(expected = "Metadata target account must have default values")] + #[test] + fn test_call_new_definition_metadata_with_init_metadata() { + let name = [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe]; + let total_supply = 15u128; + let token_standard = 0u8; + let metadata_standard = 0u8; + let metadata_values: Data = Data::try_from([1u8; 450].to_vec()).unwrap(); + + let pre_states = vec![ + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([1; 32]), + }, + helper_account_constructor(AccountsEnum::HoldingSameDefMint), + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([3; 32]), + }, + ]; + let _post_states = new_definition_with_metadata( + &pre_states, + name, + total_supply, + token_standard, + metadata_standard, + &metadata_values, + ); + } + + #[should_panic(expected = "Holding target account must have default values")] + #[test] + fn test_call_new_definition_metadata_with_init_holding() { + let name = [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe]; + let total_supply = 15u128; + let token_standard = 0u8; + let metadata_standard = 0u8; + let metadata_values: Data = Data::try_from([1u8; 450].to_vec()).unwrap(); + + let pre_states = vec![ + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([1; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([2; 32]), + }, + helper_account_constructor(AccountsEnum::HoldingSameDefMint), + ]; + let _post_states = new_definition_with_metadata( + &pre_states, + name, + total_supply, + token_standard, + metadata_standard, + &metadata_values, + ); + } + + #[should_panic(expected = "Metadata values data should be 450 bytes")] + #[test] + fn test_call_new_definition_metadata_with_too_short_metadata_length() { + let name = [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe]; + let total_supply = 15u128; + let token_standard = 0u8; + let metadata_standard = 0u8; + let metadata_values: Data = Data::try_from([1u8; 449].to_vec()).unwrap(); + + let pre_states = vec![ + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([1; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([2; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([3; 32]), + }, + ]; + let _post_states = new_definition_with_metadata( + &pre_states, + name, + total_supply, + token_standard, + metadata_standard, + &metadata_values, + ); + } + + #[should_panic(expected = "Metadata values data should be 450 bytes")] + #[test] + fn test_call_new_definition_metadata_with_too_long_metadata_length() { + let name = [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe]; + let total_supply = 15u128; + let token_standard = 0u8; + let metadata_standard = 0u8; + let metadata_values: Data = Data::try_from([1u8; 451].to_vec()).unwrap(); + + let pre_states = vec![ + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([1; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([2; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([3; 32]), + }, + ]; + let _post_states = new_definition_with_metadata( + &pre_states, + name, + total_supply, + token_standard, + metadata_standard, + &metadata_values, + ); + } + + #[should_panic(expected = "Invalid Token Standard provided")] + #[test] + fn test_call_new_definition_metadata_with_invalid_token_standard() { + let name = [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe]; + let total_supply = 15u128; + let token_standard = 14u8; + let metadata_standard = 0u8; + let metadata_values: Data = Data::try_from([1u8; 450].to_vec()).unwrap(); + + let pre_states = vec![ + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([1; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([2; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([3; 32]), + }, + ]; + let _post_states = new_definition_with_metadata( + &pre_states, + name, + total_supply, + token_standard, + metadata_standard, + &metadata_values, + ); + } + + #[should_panic(expected = "Invalid Metadata Standadard provided")] + #[test] + fn test_call_new_definition_metadata_with_invalid_metadata_standard() { + let name = [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe]; + let total_supply = 15u128; + let token_standard = 0u8; + let metadata_standard = 14u8; + let metadata_values: Data = Data::try_from([1u8; 450].to_vec()).unwrap(); + + let pre_states = vec![ + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([1; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([2; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([3; 32]), + }, + ]; + let _post_states = new_definition_with_metadata( + &pre_states, + name, + total_supply, + token_standard, + metadata_standard, + &metadata_values, + ); + } + + #[should_panic(expected = "Invalid total supply for the specified token supply")] + #[test] + fn test_call_new_definition_metadata_invalid_supply_for_nonfungible() { + let name = [0xca, 0xfe, 0xca, 0xfe, 0xca, 0xfe]; + let total_supply = 15u128; + let token_standard = TOKEN_STANDARD_NONFUNGIBLE; + let metadata_standard = 0u8; + let metadata_values: Data = Data::try_from([1u8; 450].to_vec()).unwrap(); + + let pre_states = vec![ + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([1; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([2; 32]), + }, + AccountWithMetadata { + account: Account::default(), + is_authorized: true, + account_id: AccountId::new([3; 32]), + }, + ]; + let _post_states = new_definition_with_metadata( + &pre_states, + name, + total_supply, + token_standard, + metadata_standard, + &metadata_values, + ); + } + + #[should_panic(expected = "Invalid number of accounts")] + #[test] + fn test_print_nft_invalid_number_of_accounts_1() { + let pre_states = vec![helper_account_constructor( + AccountsEnum::HoldingAccountMasterNFT, + )]; + let _post_states = print_nft(&pre_states); + } + + #[should_panic(expected = "Invalid number of accounts")] + #[test] + fn test_print_nft_invalid_number_of_accounts_2() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::HoldingAccountMasterNFT), + helper_account_constructor(AccountsEnum::DefinitionAccountAuth), + helper_account_constructor(AccountsEnum::HoldingAccountUninit), + ]; + let _post_states = print_nft(&pre_states); + } + + #[should_panic(expected = "Master NFT Account must be authorized")] + #[test] + fn test_print_nft_master_account_must_be_authorized() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::HoldingAccountUninit), + helper_account_constructor(AccountsEnum::HoldingAccountUninit), + ]; + let _post_states = print_nft(&pre_states); + } + + #[should_panic(expected = "Printed Account must be uninitialized")] + #[test] + fn test_print_nft_print_account_initialized() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::HoldingAccountMasterNFT), + helper_account_constructor(AccountsEnum::HoldingAccountInit), + ]; + let _post_states = print_nft(&pre_states); + } + + #[should_panic(expected = "Invalid Token Holding data")] + #[test] + fn test_print_nft_master_nft_invalid_token_holding() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::DefinitionAccountAuth), + helper_account_constructor(AccountsEnum::HoldingAccountUninit), + ]; + let _post_states = print_nft(&pre_states); + } + + #[should_panic(expected = "Invalid Token Holding provided as NFT Master Account")] + #[test] + fn test_print_nft_master_nft_not_nft_master_account() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::HoldingAccountInit), + helper_account_constructor(AccountsEnum::HoldingAccountUninit), + ]; + let _post_states = print_nft(&pre_states); + } + + #[should_panic(expected = "Insufficient balance to print another NFT copy")] + #[test] + fn test_print_nft_master_nft_insufficient_balance() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::HoldingAccountMasterNFTInsufficientBalance), + helper_account_constructor(AccountsEnum::HoldingAccountUninit), + ]; + let _post_states = print_nft(&pre_states); + } + + #[test] + fn test_print_nft_success() { + let pre_states = vec![ + helper_account_constructor(AccountsEnum::HoldingAccountMasterNFT), + helper_account_constructor(AccountsEnum::HoldingAccountUninit), + ]; + let post_states = print_nft(&pre_states); + + let post_master_nft = post_states[0].account(); + let post_printed = post_states[1].account(); + + assert!( + *post_master_nft + == helper_account_constructor(AccountsEnum::HoldingAccountMasterNFTAfterPrint) + .account + ); + assert!( + *post_printed + == helper_account_constructor(AccountsEnum::HoldingAccountPrintedNFT).account + ); + } +} \ No newline at end of file From de1bf770f0575f1292cc0cb89139ef85419e15cb Mon Sep 17 00:00:00 2001 From: jonesmarvin8 <83104039+jonesmarvin8@users.noreply.github.com> Date: Fri, 12 Dec 2025 19:09:59 -0500 Subject: [PATCH 09/33] update comments --- nssa/program_methods/guest/src/bin/token.rs | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/nssa/program_methods/guest/src/bin/token.rs b/nssa/program_methods/guest/src/bin/token.rs index 4b71128..ee777ec 100644 --- a/nssa/program_methods/guest/src/bin/token.rs +++ b/nssa/program_methods/guest/src/bin/token.rs @@ -37,12 +37,23 @@ use nssa_core::{ // * Authorization required: definition_account // * An instruction data byte string of length 23, indicating the balance to mint with the folloiwng layout // [0x04 || amount (little-endian 16 bytes) || 0x00 || 0x00 || 0x00 || 0x00 || 0x00 || 0x00]. -// 6. Print NFT copy from Master NFT +// 6. New token definition with metadata. // Arguments to this function are: -// * Two accounts: [master_nft, account_to_initialize]. +// * Three **default** accounts: [definition_account, metadata_account. holding_account]. +// The first default account will be initialized with the token definition account values. The second account +// will be initialized to a token metadata account for the new token definition. The third account will be +// initialized to a token holding account for the new token, holding the entire total supply. +// * An instruction data of 474-bytes, indicating the token name, total supply, token standard, metadata standard +// and metadata_values (uri and creators). +// the following layout: +// [0x05 || total_supply (little-endian 16 bytes) || name (6 bytes) || token_standard || metadata_standard || metadata_values] +// The name cannot be equal to [0x00, 0x00, 0x00, 0x00, 0x00, 0x00] +// 7. Print NFT copy from Master NFT +// Arguments to this function are: +// * Two accounts: [master_nft, printed_account (default)]. // * Authorization required: master_nft // * An dummy byte string of length 23, with the following layout -// [0x05 || 0x00 || 0x00 || 0x00 || ... || 0x00 || 0x00]. +// [0x06 || 0x00 || 0x00 || 0x00 || ... || 0x00 || 0x00]. const TOKEN_STANDARD_FUNGIBLE_TOKEN: u8 = 0; const TOKEN_STANDARD_FUNGIBLE_ASSET: u8 = 1; const TOKEN_STANDARD_NONFUNGIBLE: u8 = 2; @@ -171,7 +182,6 @@ struct TokenHolding { balance: u128, } - impl TokenHolding { fn new(definition_id: &AccountId) -> Self { Self { From a5496eb5d5ffbe78b8cc647108bcfca39f558627 Mon Sep 17 00:00:00 2001 From: jonesmarvin8 <83104039+jonesmarvin8@users.noreply.github.com> Date: Thu, 18 Dec 2025 18:45:57 -0500 Subject: [PATCH 10/33] various comments addressed --- nssa/program_methods/guest/src/bin/amm.rs | 4801 ++++++++++++--------- nssa/src/program.rs | 4 +- nssa/src/state.rs | 1757 ++++---- 3 files changed, 3560 insertions(+), 3002 deletions(-) diff --git a/nssa/program_methods/guest/src/bin/amm.rs b/nssa/program_methods/guest/src/bin/amm.rs index 83b2d3a..2f18ddd 100644 --- a/nssa/program_methods/guest/src/bin/amm.rs +++ b/nssa/program_methods/guest/src/bin/amm.rs @@ -1,50 +1,59 @@ use nssa_core::{ account::{Account, AccountId, AccountWithMetadata, Data}, - program::{ProgramId, ProgramInput, ChainedCall, AccountPostState, PdaSeed, read_nssa_inputs, write_nssa_outputs_with_chained_call}, + program::{ + AccountPostState, ChainedCall, PdaSeed, ProgramId, ProgramInput, read_nssa_inputs, + write_nssa_outputs_with_chained_call, + }, }; // The AMM program has five functions (four directly accessible via instructions): // 1. New AMM definition. // Arguments to this function are: -// * Seven **default** accounts: [amm_pool, vault_holding_a, vault_holding_b, pool_lp, user_holding_a, user_holding_b, user_holding_lp]. +// * Seven accounts: [amm_pool, vault_holding_a, vault_holding_b, pool_lp, user_holding_a, user_holding_b, user_holding_lp]. +// For new AMM Pool: amm_pool, vault_holding_a, vault_holding_b, pool_lp and user_holding_lp are default accounts. // amm_pool is a default account that will initiate the amm definition account values // vault_holding_a is a token holding account for token a // vault_holding_b is a token holding account for token b -// pool_lp is a token holding account for the pool's lp token +// pool_lp is a token holding account for the pool's lp token // user_holding_a is a token holding account for token a // user_holding_b is a token holding account for token b // user_holding_lp is a token holding account for lp token +// * PDA remark: Accounts amm_pool, vault_holding_a, vault_holding_b and pool_lp are PDA. +// The AccountId for these accounts must be computed using: +// amm_pool AccountId <- compute_pool_pda +// vault_holding_a, vault_holding_b <- compute_vault_pda +// pool_lp <-compute_liquidity_token_pda // * Requires authorization: user_holding_a, user_holding_b // * An instruction data of 65-bytes, indicating the initial amm reserves' balances and token_program_id with // the following layout: // [0x00 || array of balances (little-endian 16 bytes) || AMM_PROGRAM_ID)] // 2. Swap assets // Arguments to this function are: -// * Five accounts: [amm_pool, vault_holding_1, vault_holding_2, user_holding_a, user_holding_b]. +// * Five accounts: [amm_pool, vault_holding_a, vault_holding_b, user_holding_a, user_holding_b]. // * Requires authorization: user holding account associated to TOKEN_DEFINITION_ID (either user_holding_a or user_holding_b) -// * An instruction data byte string of length 49, indicating which token type to swap, quantity of tokens put into the swap +// * An instruction data byte string of length 65, indicating which token type to swap, quantity of tokens put into the swap // (of type TOKEN_DEFINITION_ID) and min_amount_out. // [0x01 || amount (little-endian 16 bytes) || TOKEN_DEFINITION_ID]. // 3. Add liquidity // Arguments to this function are: -// * Seven accounts: [amm_pool, vault_holding_a, vault_holding_b, pool_lp, user_holding_a, UserHouser_holding_a, user_holding_lp]. +// * Seven accounts: [amm_pool, vault_holding_a, vault_holding_b, pool_lp, user_holding_a, user_holding_a, user_holding_lp]. // * Requires authorization: user_holding_a, user_holding_b // * An instruction data byte string of length 49, amounts for minimum amount of liquidity from add (min_amount_lp), -// * max amount added for each token (max_amount_a and max_amount_b); indicate +// * max amount added for each token (max_amount_a and max_amount_b); indicate // [0x02 || array of of balances (little-endian 16 bytes)]. // 4. Remove liquidity -// * Seven accounts: [amm_pool, vault_holding_a, vault_holding_b, pool_lp, user_holding_a, UserHouser_holding_a, user_holding_lp]. +// * Seven accounts: [amm_pool, vault_holding_a, vault_holding_b, pool_lp, user_holding_a, user_holding_a, user_holding_lp]. // * Requires authorization: user_holding_lp // * An instruction data byte string of length 49, amounts for minimum amount of liquidity to redeem (balance_lp), -// * minimum balance of each token to remove (min_amount_a and min_amount_b); indicate +// * minimum balance of each token to remove (min_amount_a and min_amount_b); indicate // [0x03 || array of balances (little-endian 16 bytes)]. // - Internal functions: // - Swap logic // Arguments of this function are: -// * Four accounts: [user_deposit_tx, vault_deposit_tx, vault_withdraw_tx, user_withdraw_tx]. -// user_deposit_tx and vault_deposit_tx define deposit transaction. -// vault_withdraw_tx and user_withdraw_tx define withdraw transaction. -// * deposit_amount is the amount for user_deposit_tx -> vault_deposit_tx transfer. +// * Four accounts: [user_deposit, vault_deposit, vault_withdraw, user_withdraw]. +// user_deposit and vault_deposit define deposit transaction. +// vault_withdraw and user_withdraw define withdraw transaction. +// * deposit_amount is the amount for user_deposit -> vault_deposit transfer. // * reserve_amounts is the pool's reserves; used to compute the withdraw amount. // * Outputs the token transfers as a Vec and the withdraw amount. // - PDA computations: @@ -59,7 +68,7 @@ use nssa_core::{ const POOL_DEFINITION_DATA_SIZE: usize = 225; #[derive(Default)] -struct PoolDefinition{ +struct PoolDefinition { definition_token_a_id: AccountId, definition_token_b_id: AccountId, vault_a_id: AccountId, @@ -69,7 +78,7 @@ struct PoolDefinition{ reserve_a: u128, reserve_b: u128, fees: u128, - active: bool + active: bool, } impl PoolDefinition { @@ -98,20 +107,34 @@ impl PoolDefinition { } else { let definition_token_a_id = AccountId::new(data[0..32].try_into().expect("Parse data: The AMM program must be provided a valid AccountId for Token A definition")); let definition_token_b_id = AccountId::new(data[32..64].try_into().expect("Parse data: The AMM program must be provided a valid AccountId for Vault B definition")); - let vault_a_id = AccountId::new(data[64..96].try_into().expect("Parse data: The AMM program must be provided a valid AccountId for Vault A")); - let vault_b_id = AccountId::new(data[96..128].try_into().expect("Parse data: The AMM program must be provided a valid AccountId for Vault B")); + let vault_a_id = AccountId::new(data[64..96].try_into().expect( + "Parse data: The AMM program must be provided a valid AccountId for Vault A", + )); + let vault_b_id = AccountId::new(data[96..128].try_into().expect( + "Parse data: The AMM program must be provided a valid AccountId for Vault B", + )); let liquidity_pool_id = AccountId::new(data[128..160].try_into().expect("Parse data: The AMM program must be provided a valid AccountId for Token liquidity pool definition")); - let liquidity_pool_supply = u128::from_le_bytes(data[160..176].try_into().expect("Parse data: The AMM program must be provided a valid u128 for liquidity cap")); - let reserve_a = u128::from_le_bytes(data[176..192].try_into().expect("Parse data: The AMM program must be provided a valid u128 for reserve A balance")); - let reserve_b = u128::from_le_bytes(data[192..208].try_into().expect("Parse data: The AMM program must be provided a valid u128 for reserve B balance")); - let fees = u128::from_le_bytes(data[208..224].try_into().expect("Parse data: The AMM program must be provided a valid u128 for fees")); + let liquidity_pool_supply = u128::from_le_bytes(data[160..176].try_into().expect( + "Parse data: The AMM program must be provided a valid u128 for liquidity cap", + )); + let reserve_a = u128::from_le_bytes(data[176..192].try_into().expect( + "Parse data: The AMM program must be provided a valid u128 for reserve A balance", + )); + let reserve_b = u128::from_le_bytes(data[192..208].try_into().expect( + "Parse data: The AMM program must be provided a valid u128 for reserve B balance", + )); + let fees = u128::from_le_bytes( + data[208..224] + .try_into() + .expect("Parse data: The AMM program must be provided a valid u128 for fees"), + ); let active = match data[224] { 0 => false, 1 => true, _ => panic!("Parse data: The AMM program must be provided a valid bool for active"), }; - + Some(Self { definition_token_a_id, definition_token_b_id, @@ -159,7 +182,6 @@ impl TokenDefinition { .expect("23 bytes should fit into Data") } - fn parse(data: &[u8]) -> Option { if data.len() != TOKEN_DEFINITION_DATA_SIZE || data[0] != TOKEN_DEFINITION_TYPE { None @@ -217,7 +239,7 @@ impl TokenHolding { bytes[0] = self.account_type; bytes[1..33].copy_from_slice(&self.definition_id.to_bytes()); bytes[33..].copy_from_slice(&self.balance.to_le_bytes()); - + bytes .to_vec() .try_into() @@ -225,69 +247,148 @@ impl TokenHolding { } } - type Instruction = Vec; fn main() { - let (ProgramInput { - pre_states, - instruction, - }, instruction_words) = read_nssa_inputs::(); + let ( + ProgramInput { + pre_states, + instruction, + }, + instruction_words, + ) = read_nssa_inputs::(); - let (post_states, chained_calls) = match instruction[0] { - 0 => { - let balance_a: u128 = u128::from_le_bytes(instruction[1..17].try_into().expect("New definition: AMM Program expects u128 for balance a")); - let balance_b: u128 = u128::from_le_bytes(instruction[17..33].try_into().expect("New definition: AMM Program expects u128 for balance b")); + let (post_states, chained_calls) = + match instruction[0] { + 0 => { + let balance_a: u128 = u128::from_le_bytes( + instruction[1..17] + .try_into() + .expect("New definition: AMM Program expects u128 for balance a"), + ); + let balance_b: u128 = u128::from_le_bytes( + instruction[17..33] + .try_into() + .expect("New definition: AMM Program expects u128 for balance b"), + ); - // Convert Vec to ProgramId ([u32;8]) - let mut amm_program_id: [u32;8] = [0;8]; - amm_program_id[0] = u32::from_le_bytes(instruction[33..37].try_into().expect("New definition: AMM Program expects valid u32")); - amm_program_id[1] = u32::from_le_bytes(instruction[37..41].try_into().expect("New definition: AMM Program expects valid u32")); - amm_program_id[2] = u32::from_le_bytes(instruction[41..45].try_into().expect("New definition: AMM Program expects valid u32")); - amm_program_id[3] = u32::from_le_bytes(instruction[45..49].try_into().expect("New definition: AMM Program expects valid u32")); - amm_program_id[4] = u32::from_le_bytes(instruction[49..53].try_into().expect("New definition: AMM Program expects valid u32")); - amm_program_id[5] = u32::from_le_bytes(instruction[53..57].try_into().expect("New definition: AMM Program expects valid u32")); - amm_program_id[6] = u32::from_le_bytes(instruction[57..61].try_into().expect("New definition: AMM Program expects valid u32")); - amm_program_id[7] = u32::from_le_bytes(instruction[61..65].try_into().expect("New definition: AMM Program expects valid u32")); + // Convert Vec to ProgramId ([u32;8]) + let mut amm_program_id: [u32; 8] = [0; 8]; + amm_program_id[0] = u32::from_le_bytes( + instruction[33..37] + .try_into() + .expect("New definition: AMM Program expects valid u32"), + ); + amm_program_id[1] = u32::from_le_bytes( + instruction[37..41] + .try_into() + .expect("New definition: AMM Program expects valid u32"), + ); + amm_program_id[2] = u32::from_le_bytes( + instruction[41..45] + .try_into() + .expect("New definition: AMM Program expects valid u32"), + ); + amm_program_id[3] = u32::from_le_bytes( + instruction[45..49] + .try_into() + .expect("New definition: AMM Program expects valid u32"), + ); + amm_program_id[4] = u32::from_le_bytes( + instruction[49..53] + .try_into() + .expect("New definition: AMM Program expects valid u32"), + ); + amm_program_id[5] = u32::from_le_bytes( + instruction[53..57] + .try_into() + .expect("New definition: AMM Program expects valid u32"), + ); + amm_program_id[6] = u32::from_le_bytes( + instruction[57..61] + .try_into() + .expect("New definition: AMM Program expects valid u32"), + ); + amm_program_id[7] = u32::from_le_bytes( + instruction[61..65] + .try_into() + .expect("New definition: AMM Program expects valid u32"), + ); - new_definition(&pre_states, &[balance_a, balance_b], amm_program_id) - } - 1 => { - let mut token_in_id: [u8;32] = [0;32]; - token_in_id[0..].copy_from_slice(&instruction[33..65]); - let token_in_id = AccountId::new(token_in_id); - - let amount_in = u128::from_le_bytes(instruction[1..17].try_into().expect("Swap: AMM Program expects valid u128 for balance to move")); - let min_amount_out = u128::from_le_bytes(instruction[17..33].try_into().expect("Swap: AMM Program expects valid u128 for balance to move")); + new_definition(&pre_states, &[balance_a, balance_b], amm_program_id) + } + 1 => { + let mut token_in_id: [u8; 32] = [0; 32]; + token_in_id[0..].copy_from_slice(&instruction[33..65]); + let token_in_id = AccountId::new(token_in_id); - swap(&pre_states, &[amount_in, min_amount_out], token_in_id) - } - 2 => { - let min_amount_lp = u128::from_le_bytes(instruction[1..17].try_into().expect("Add liquidity: AMM Program expects valid u128 for min amount liquidity")); - let max_amount_a = u128::from_le_bytes(instruction[17..33].try_into().expect("Add liquidity: AMM Program expects valid u128 for max amount a")); - let max_amount_b = u128::from_le_bytes(instruction[33..49].try_into().expect("Add liquidity: AMM Program expects valid u128 for max amount b")); - - add_liquidity(&pre_states, &[min_amount_lp, max_amount_a, max_amount_b]) - } - 3 => { - let balance_lp = u128::from_le_bytes(instruction[1..17].try_into().expect("Remove liquidity: AMM Program expects valid u128 for balance liquidity")); - let min_amount_a = u128::from_le_bytes(instruction[17..33].try_into().expect("Remove liquidity: AMM Program expects valid u128 for balance a")); - let min_amount_b = u128::from_le_bytes(instruction[33..49].try_into().expect("Remove liquidity: AMM Program expects valid u128 for balance b")); + let amount_in = u128::from_le_bytes( + instruction[1..17] + .try_into() + .expect("Swap: AMM Program expects valid u128 for balance to move"), + ); + let min_amount_out = u128::from_le_bytes( + instruction[17..33] + .try_into() + .expect("Swap: AMM Program expects valid u128 for balance to move"), + ); - remove_liquidity(&pre_states, &[balance_lp, min_amount_a, min_amount_b]) - } - _ => panic!("Invalid instruction"), - }; + swap(&pre_states, &[amount_in, min_amount_out], token_in_id) + } + 2 => { + let min_amount_lp = u128::from_le_bytes(instruction[1..17].try_into().expect( + "Add liquidity: AMM Program expects valid u128 for min amount liquidity", + )); + let max_amount_a = u128::from_le_bytes( + instruction[17..33] + .try_into() + .expect("Add liquidity: AMM Program expects valid u128 for max amount a"), + ); + let max_amount_b = u128::from_le_bytes( + instruction[33..49] + .try_into() + .expect("Add liquidity: AMM Program expects valid u128 for max amount b"), + ); + + add_liquidity(&pre_states, &[min_amount_lp, max_amount_a, max_amount_b]) + } + 3 => { + let balance_lp = u128::from_le_bytes(instruction[1..17].try_into().expect( + "Remove liquidity: AMM Program expects valid u128 for balance liquidity", + )); + let min_amount_a = u128::from_le_bytes( + instruction[17..33] + .try_into() + .expect("Remove liquidity: AMM Program expects valid u128 for balance a"), + ); + let min_amount_b = u128::from_le_bytes( + instruction[33..49] + .try_into() + .expect("Remove liquidity: AMM Program expects valid u128 for balance b"), + ); + + remove_liquidity(&pre_states, &[balance_lp, min_amount_a, min_amount_b]) + } + _ => panic!("Invalid instruction"), + }; write_nssa_outputs_with_chained_call(instruction_words, pre_states, post_states, chained_calls); } - -fn compute_pool_pda(amm_program_id: ProgramId, definition_token_a_id: AccountId, definition_token_b_id: AccountId) -> AccountId { - AccountId::from((&amm_program_id, - &compute_pool_pda_seed(definition_token_a_id, definition_token_b_id))) +fn compute_pool_pda( + amm_program_id: ProgramId, + definition_token_a_id: AccountId, + definition_token_b_id: AccountId, +) -> AccountId { + AccountId::from(( + &amm_program_id, + &compute_pool_pda_seed(definition_token_a_id, definition_token_b_id), + )) } -fn compute_pool_pda_seed(definition_token_a_id: AccountId, definition_token_b_id: AccountId) -> PdaSeed { +fn compute_pool_pda_seed( + definition_token_a_id: AccountId, + definition_token_b_id: AccountId, +) -> PdaSeed { use risc0_zkvm::sha::{Impl, Sha256}; let mut i: usize = 0; @@ -295,13 +396,13 @@ fn compute_pool_pda_seed(definition_token_a_id: AccountId, definition_token_b_id if definition_token_a_id.value()[i] > definition_token_b_id.value()[i] { let token_1 = definition_token_a_id.clone(); let token_2 = definition_token_b_id.clone(); - break (token_1, token_2) + break (token_1, token_2); } else if definition_token_a_id.value()[i] < definition_token_b_id.value()[i] { let token_1 = definition_token_b_id.clone(); let token_2 = definition_token_a_id.clone(); - break (token_1, token_2) + break (token_1, token_2); } - + if i == 32 { panic!("Definitions match"); } else { @@ -313,32 +414,42 @@ fn compute_pool_pda_seed(definition_token_a_id: AccountId, definition_token_b_id bytes[0..32].copy_from_slice(&token_1.to_bytes()); bytes[32..].copy_from_slice(&token_2.to_bytes()); - PdaSeed::new(Impl::hash_bytes(&bytes).as_bytes().try_into().expect("Hash output must be exactly 32 bytes long")) + PdaSeed::new( + Impl::hash_bytes(&bytes) + .as_bytes() + .try_into() + .expect("Hash output must be exactly 32 bytes long"), + ) } -fn compute_vault_pda(amm_program_id: ProgramId, - pool_id: AccountId, - definition_token_id: AccountId +fn compute_vault_pda( + amm_program_id: ProgramId, + pool_id: AccountId, + definition_token_id: AccountId, ) -> AccountId { - AccountId::from((&amm_program_id, - &compute_vault_pda_seed(pool_id, definition_token_id))) + AccountId::from(( + &amm_program_id, + &compute_vault_pda_seed(pool_id, definition_token_id), + )) } -fn compute_vault_pda_seed(pool_id: AccountId, - definition_token_id: AccountId -) -> PdaSeed { +fn compute_vault_pda_seed(pool_id: AccountId, definition_token_id: AccountId) -> PdaSeed { use risc0_zkvm::sha::{Impl, Sha256}; let mut bytes = [0; 64]; bytes[0..32].copy_from_slice(&pool_id.to_bytes()); bytes[32..].copy_from_slice(&definition_token_id.to_bytes()); - PdaSeed::new(Impl::hash_bytes(&bytes).as_bytes().try_into().expect("Hash output must be exactly 32 bytes long")) + PdaSeed::new( + Impl::hash_bytes(&bytes) + .as_bytes() + .try_into() + .expect("Hash output must be exactly 32 bytes long"), + ) } fn compute_liquidity_token_pda(amm_program_id: ProgramId, pool_id: AccountId) -> AccountId { - AccountId::from((&amm_program_id, - &compute_liquidity_token_pda_seed(pool_id))) + AccountId::from((&amm_program_id, &compute_liquidity_token_pda_seed(pool_id))) } fn compute_liquidity_token_pda_seed(pool_id: AccountId) -> PdaSeed { @@ -346,17 +457,21 @@ fn compute_liquidity_token_pda_seed(pool_id: AccountId) -> PdaSeed { let mut bytes = [0; 64]; bytes[0..32].copy_from_slice(&pool_id.to_bytes()); - bytes[32..].copy_from_slice(&[0;32]); + bytes[32..].copy_from_slice(&[0; 32]); - PdaSeed::new(Impl::hash_bytes(&bytes).as_bytes().try_into().expect("Hash output must be exactly 32 bytes long")) + PdaSeed::new( + Impl::hash_bytes(&bytes) + .as_bytes() + .try_into() + .expect("Hash output must be exactly 32 bytes long"), + ) } -fn new_definition ( - pre_states: &[AccountWithMetadata], - balance_in: &[u128], - amm_program_id: ProgramId, - ) -> (Vec, Vec) { - +fn new_definition( + pre_states: &[AccountWithMetadata], + balance_in: &[u128], + amm_program_id: ProgramId, +) -> (Vec, Vec) { //Pool accounts: pool itself, and its 2 vaults and LP token //2 accounts for funding tokens //initial funder's LP account @@ -386,10 +501,12 @@ fn new_definition ( // Verify token_a and token_b are different let definition_token_a_id = TokenHolding::parse(&user_holding_a.account.data) - .expect("New definition: AMM Program expects valid Token Holding account for Token A").definition_id; + .expect("New definition: AMM Program expects valid Token Holding account for Token A") + .definition_id; let definition_token_b_id = TokenHolding::parse(&user_holding_b.account.data) - .expect("New definition: AMM Program expects valid Token Holding account for Token B").definition_id; - + .expect("New definition: AMM Program expects valid Token Holding account for Token B") + .definition_id; + // both instances of the same token program let token_program = user_holding_a.account.program_owner; @@ -397,30 +514,42 @@ fn new_definition ( panic!("Cannot set up a swap for a token with itself") } - if pool.account_id != compute_pool_pda(amm_program_id.clone(), - definition_token_a_id.clone(), - definition_token_b_id.clone()) { + if pool.account_id + != compute_pool_pda( + amm_program_id.clone(), + definition_token_a_id.clone(), + definition_token_b_id.clone(), + ) + { panic!("Pool Definition Account ID does not match PDA"); } - if vault_a.account_id != compute_vault_pda(amm_program_id.clone(), - pool.account_id.clone(), - definition_token_a_id.clone()) || - vault_b.account_id != compute_vault_pda(amm_program_id.clone(), - pool.account_id.clone(), - definition_token_b_id.clone()) { - panic!("Vault ID does not match PDA"); + if vault_a.account_id + != compute_vault_pda( + amm_program_id.clone(), + pool.account_id.clone(), + definition_token_a_id.clone(), + ) + || vault_b.account_id + != compute_vault_pda( + amm_program_id.clone(), + pool.account_id.clone(), + definition_token_b_id.clone(), + ) + { + panic!("Vault ID does not match PDA"); } - if pool_lp.account_id != compute_liquidity_token_pda(amm_program_id.clone(), - pool.account_id.clone()) { + if pool_lp.account_id + != compute_liquidity_token_pda(amm_program_id.clone(), pool.account_id.clone()) + { panic!("Liquidity pool Token Definition Account ID does not match PDA"); } // Verify that Pool Account is not active let pool_account_data = if pool.account == Account::default() { PoolDefinition::default() - } else { + } else { PoolDefinition::parse(&pool.account.data).expect("AMM program expects a valid Pool account") }; @@ -434,22 +563,24 @@ fn new_definition ( // 5. Update pool account let mut pool_post = pool.account.clone(); let pool_post_definition = PoolDefinition { - definition_token_a_id, - definition_token_b_id, - vault_a_id: vault_a.account_id.clone(), - vault_b_id: vault_b.account_id.clone(), - liquidity_pool_id: pool_lp.account_id.clone(), - liquidity_pool_supply: amount_a.clone(), - reserve_a: amount_a.clone(), - reserve_b: amount_b.clone(), - fees: 0u128, //TODO: we assume all fees are 0 for now. - active: true, + definition_token_a_id, + definition_token_b_id, + vault_a_id: vault_a.account_id.clone(), + vault_b_id: vault_b.account_id.clone(), + liquidity_pool_id: pool_lp.account_id.clone(), + liquidity_pool_supply: amount_a.clone(), + reserve_a: amount_a.clone(), + reserve_b: amount_b.clone(), + fees: 0u128, //TODO: we assume all fees are 0 for now. + active: true, }; pool_post.data = pool_post_definition.into_data(); - let pool_post: AccountPostState = - if pool.account == Account::default() { AccountPostState::new_claimed(pool_post.clone()) } - else { AccountPostState::new(pool_post.clone()) }; + let pool_post: AccountPostState = if pool.account == Account::default() { + AccountPostState::new_claimed(pool_post.clone()) + } else { + AccountPostState::new(pool_post.clone()) + }; let mut chained_calls = Vec::::new(); @@ -457,52 +588,62 @@ fn new_definition ( let mut instruction_data = [0; 23]; instruction_data[0] = 1; instruction_data[1..17].copy_from_slice(&amount_a.to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction_data).expect("New definition: AMM Program expects valid token transfer instruction data"); - let call_token_a = ChainedCall{ - program_id: user_holding_a.account.program_owner, - instruction_data, - pre_states: vec![user_holding_a.clone(), vault_a.clone()], - pda_seeds: Vec::::new(), - }; + let instruction_data = risc0_zkvm::serde::to_vec(&instruction_data) + .expect("New definition: AMM Program expects valid token transfer instruction data"); + let call_token_a = ChainedCall { + program_id: user_holding_a.account.program_owner, + instruction_data, + pre_states: vec![user_holding_a.clone(), vault_a.clone()], + pda_seeds: Vec::::new(), + }; //Chain call for Token B (user_holding_b -> Vault_B) let mut instruction_data = [0; 23]; instruction_data[0] = 1; instruction_data[1..17].copy_from_slice(&amount_b.to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction_data).expect("New definition: AMM Program expects valid instruction_data"); + let instruction_data = risc0_zkvm::serde::to_vec(&instruction_data) + .expect("New definition: AMM Program expects valid instruction_data"); - let call_token_b = ChainedCall{ - program_id: user_holding_b.account.program_owner, - instruction_data, - pre_states: vec![user_holding_b.clone(), vault_b.clone()], - pda_seeds: Vec::::new(), - }; + let call_token_b = ChainedCall { + program_id: user_holding_b.account.program_owner, + instruction_data, + pre_states: vec![user_holding_b.clone(), vault_b.clone()], + pda_seeds: Vec::::new(), + }; //Chain call for liquidity token (TokenLP definition -> User LP Holding) let mut instruction_data = [0; 23]; - instruction_data[0] = if pool.account == Account::default() { 0 } else { 4 }; //new or mint - let nme = if pool.account == Account::default() { [1u8;6] } else { [0u8; 6] }; + instruction_data[0] = if pool.account == Account::default() { + 0 + } else { + 4 + }; //new or mint + let nme = if pool.account == Account::default() { + [1u8; 6] + } else { + [0u8; 6] + }; instruction_data[1..17].copy_from_slice(&amount_a.to_le_bytes()); instruction_data[17..].copy_from_slice(&nme); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction_data).expect("New definition: AMM Program expects valid instruction_data"); + let instruction_data = risc0_zkvm::serde::to_vec(&instruction_data) + .expect("New definition: AMM Program expects valid instruction_data"); let mut pool_lp_auth = pool_lp.clone(); pool_lp_auth.is_authorized = true; let token_program_id = user_holding_a.account.program_owner; - let call_token_lp = ChainedCall{ - program_id: token_program_id, - instruction_data, - pre_states: vec![pool_lp_auth.clone(), user_holding_lp.clone()], - pda_seeds: vec![compute_liquidity_token_pda_seed(pool.account_id.clone())], - }; + let call_token_lp = ChainedCall { + program_id: token_program_id, + instruction_data, + pre_states: vec![pool_lp_auth.clone(), user_holding_lp.clone()], + pda_seeds: vec![compute_liquidity_token_pda_seed(pool.account_id.clone())], + }; chained_calls.push(call_token_lp); chained_calls.push(call_token_b); chained_calls.push(call_token_a); - let post_states = vec![ pool_post.clone(), AccountPostState::new(pre_states[1].account.clone()), @@ -510,17 +651,17 @@ fn new_definition ( AccountPostState::new(pre_states[3].account.clone()), AccountPostState::new(pre_states[4].account.clone()), AccountPostState::new(pre_states[5].account.clone()), - AccountPostState::new(pre_states[6].account.clone())]; + AccountPostState::new(pre_states[6].account.clone()), + ]; (post_states.clone(), chained_calls) } fn swap( - pre_states: &[AccountWithMetadata], - amounts: &[u128], - token_in_id: AccountId, - ) -> (Vec, Vec) { - + pre_states: &[AccountWithMetadata], + amounts: &[u128], + token_in_id: AccountId, +) -> (Vec, Vec) { if pre_states.len() != 5 { panic!("Invalid number of input accounts"); } @@ -529,9 +670,6 @@ fn swap( panic!("Invalid number of amounts provided"); } - let amount_in = amounts[0]; - let min_amount_out = amounts[1]; - let pool = &pre_states[0]; let vault_a = &pre_states[1]; let vault_b = &pre_states[2]; @@ -539,77 +677,95 @@ fn swap( let user_holding_b = &pre_states[4]; // Verify vaults are in fact vaults - let pool_def_data = PoolDefinition::parse(&pool.account.data).expect("Swap: AMM Program expects a valid Pool Definition Account"); + let pool_def_data = PoolDefinition::parse(&pool.account.data) + .expect("Swap: AMM Program expects a valid Pool Definition Account"); if !pool_def_data.active { panic!("Pool is inactive"); } - if vault_a.account_id != pool_def_data.vault_a_id { + if vault_a.account_id != pool_def_data.vault_a_id { panic!("Vault A was not provided"); } - + if vault_b.account_id != pool_def_data.vault_b_id { panic!("Vault B was not provided"); } // fetch pool reserves // validates reserves is at least the vaults' balances - if TokenHolding::parse(&vault_a.account.data).expect("Swap: AMM Program expects a valid Token Holding Account for Vault A").balance < pool_def_data.reserve_a { + if TokenHolding::parse(&vault_a.account.data) + .expect("Swap: AMM Program expects a valid Token Holding Account for Vault A") + .balance + < pool_def_data.reserve_a + { panic!("Reserve for Token A exceeds vault balance"); } - if TokenHolding::parse(&vault_b.account.data).expect("Swap: AMM Program expects a valid Token Holding Account for Vault B").balance < pool_def_data.reserve_b { - panic!("Reserve for Token B exceeds vault balance"); + if TokenHolding::parse(&vault_b.account.data) + .expect("Swap: AMM Program expects a valid Token Holding Account for Vault B") + .balance + < pool_def_data.reserve_b + { + panic!("Reserve for Token B exceeds vault balance"); } - let (chained_calls, [deposit_a, withdraw_a], [deposit_b, withdraw_b]) - = if token_in_id == pool_def_data.definition_token_a_id { - let (chained_calls, withdraw_b) = swap_logic(&[user_holding_a.clone(), - vault_a.clone(), - vault_b.clone(), - user_holding_b.clone()], - &[amount_in, min_amount_out], - &[pool_def_data.reserve_a, pool_def_data.reserve_b], - pool.account_id.clone()); - - (chained_calls, [amount_in, 0], [0, withdraw_b]) - } else if token_in_id == pool_def_data.definition_token_b_id { - let (chained_calls, withdraw_a) = swap_logic(&[user_holding_b.clone(), - vault_b.clone(), - vault_a.clone(), - user_holding_a.clone()], - &[amount_in, min_amount_out], - &[pool_def_data.reserve_b, pool_def_data.reserve_a], - pool.account_id.clone()); + let (chained_calls, [deposit_a, withdraw_a], [deposit_b, withdraw_b]) = + if token_in_id == pool_def_data.definition_token_a_id { + let (chained_calls, deposit_a, withdraw_b) = swap_logic( + &[ + user_holding_a.clone(), + vault_a.clone(), + vault_b.clone(), + user_holding_b.clone(), + ], + &amounts, + &[pool_def_data.reserve_a, pool_def_data.reserve_b], + pool.account_id.clone(), + ); - (chained_calls, [0, withdraw_a], [amount_in, 0]) - } else { - panic!("AccountId is not a token type for the pool"); - }; + (chained_calls, [deposit_a, 0], [0, withdraw_b]) + } else if token_in_id == pool_def_data.definition_token_b_id { + let (chained_calls, deposit_b, withdraw_a) = swap_logic( + &[ + user_holding_b.clone(), + vault_b.clone(), + vault_a.clone(), + user_holding_a.clone(), + ], + &amounts, + &[pool_def_data.reserve_b, pool_def_data.reserve_a], + pool.account_id.clone(), + ); + + (chained_calls, [0, withdraw_a], [deposit_b, 0]) + } else { + panic!("AccountId is not a token type for the pool"); + }; // Update pool account let mut pool_post = pool.account.clone(); let pool_post_definition = PoolDefinition { - definition_token_a_id: pool_def_data.definition_token_a_id.clone(), - definition_token_b_id: pool_def_data.definition_token_b_id.clone(), - vault_a_id: pool_def_data.vault_a_id.clone(), - vault_b_id: pool_def_data.vault_b_id.clone(), - liquidity_pool_id: pool_def_data.liquidity_pool_id.clone(), - liquidity_pool_supply: pool_def_data.liquidity_pool_supply.clone(), - reserve_a: pool_def_data.reserve_a + deposit_a - withdraw_a, - reserve_b: pool_def_data.reserve_b + deposit_b - withdraw_b, - fees: 0u128, - active: true, + definition_token_a_id: pool_def_data.definition_token_a_id.clone(), + definition_token_b_id: pool_def_data.definition_token_b_id.clone(), + vault_a_id: pool_def_data.vault_a_id.clone(), + vault_b_id: pool_def_data.vault_b_id.clone(), + liquidity_pool_id: pool_def_data.liquidity_pool_id.clone(), + liquidity_pool_supply: pool_def_data.liquidity_pool_supply.clone(), + reserve_a: pool_def_data.reserve_a + deposit_a - withdraw_a, + reserve_b: pool_def_data.reserve_b + deposit_b - withdraw_b, + fees: 0u128, + active: true, }; pool_post.data = pool_post_definition.into_data(); - + let post_states = vec![ AccountPostState::new(pool_post.clone()), AccountPostState::new(pre_states[1].account.clone()), AccountPostState::new(pre_states[2].account.clone()), AccountPostState::new(pre_states[3].account.clone()), - AccountPostState::new(pre_states[4].account.clone())]; + AccountPostState::new(pre_states[4].account.clone()), + ]; (post_states, chained_calls) } @@ -619,12 +775,11 @@ fn swap_logic( balances: &[u128], reserve_amounts: &[u128], pool_id: AccountId, -) -> (Vec, u128) -{ - let user_deposit_tx = pre_states[0].clone(); - let vault_deposit_tx = pre_states[1].clone(); - let vault_withdraw_tx = pre_states[2].clone(); - let user_withdraw_tx = pre_states[3].clone(); +) -> (Vec, u128, u128) { + let user_deposit = pre_states[0].clone(); + let vault_deposit = pre_states[1].clone(); + let vault_withdraw = pre_states[2].clone(); + let user_withdraw = pre_states[3].clone(); let reserve_deposit_vault_amount = reserve_amounts[0]; let reserve_withdraw_vault_amount = reserve_amounts[1]; @@ -634,8 +789,9 @@ fn swap_logic( // Compute withdraw amount // Compute pool's exchange constant - // let k = pool_def_data.reserve_a * pool_def_data.reserve_b; - let withdraw_amount = (reserve_withdraw_vault_amount * deposit_amount)/(reserve_deposit_vault_amount + deposit_amount); + // let k = pool_def_data.reserve_a * pool_def_data.reserve_b; + let withdraw_amount = (reserve_withdraw_vault_amount * deposit_amount) + / (reserve_deposit_vault_amount + deposit_amount); //Slippage check if min_amount_out > withdraw_amount { @@ -647,46 +803,47 @@ fn swap_logic( } let mut chained_calls = Vec::new(); - let mut instruction_data = [0;23]; + let mut instruction_data = [0; 23]; instruction_data[0] = 1; instruction_data[1..17].copy_from_slice(&deposit_amount.to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction_data).expect("Swap Logic: AMM Program expects valid transaction instruction data"); - chained_calls.push( - ChainedCall{ - program_id: vault_deposit_tx.account.program_owner, - instruction_data, - pre_states: vec![user_deposit_tx.clone(), vault_deposit_tx.clone()], - pda_seeds: Vec::::new(), - } - ); + let instruction_data = risc0_zkvm::serde::to_vec(&instruction_data) + .expect("Swap Logic: AMM Program expects valid transaction instruction data"); + chained_calls.push(ChainedCall { + program_id: vault_deposit.account.program_owner, + instruction_data, + pre_states: vec![user_deposit.clone(), vault_deposit.clone()], + pda_seeds: Vec::::new(), + }); - let mut vault_withdraw_tx = vault_withdraw_tx.clone(); - vault_withdraw_tx.is_authorized = true; + let mut vault_withdraw = vault_withdraw.clone(); + vault_withdraw.is_authorized = true; - let mut instruction_data = [0;23]; + let mut instruction_data = [0; 23]; instruction_data[0] = 1; instruction_data[1..17].copy_from_slice(&withdraw_amount.to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction_data).expect("Swap Logic: AMM Program expects valid transaction instruction data"); - chained_calls.push( - ChainedCall{ - program_id: vault_deposit_tx.account.program_owner, - instruction_data, - pre_states: vec![vault_withdraw_tx.clone(), user_withdraw_tx.clone()], - pda_seeds: vec![compute_vault_pda_seed(pool_id, - TokenHolding::parse(&vault_withdraw_tx.account.data) - .expect("Swap Logic: AMM Program expects valid token data") - .definition_id)], - } - ); + let instruction_data = risc0_zkvm::serde::to_vec(&instruction_data) + .expect("Swap Logic: AMM Program expects valid transaction instruction data"); + chained_calls.push(ChainedCall { + program_id: vault_deposit.account.program_owner, + instruction_data, + pre_states: vec![vault_withdraw.clone(), user_withdraw.clone()], + pda_seeds: vec![compute_vault_pda_seed( + pool_id, + TokenHolding::parse(&vault_withdraw.account.data) + .expect("Swap Logic: AMM Program expects valid token data") + .definition_id, + )], + }); - (chained_calls, withdraw_amount) + (chained_calls, deposit_amount, withdraw_amount) } -fn add_liquidity(pre_states: &[AccountWithMetadata], - balances: &[u128]) -> (Vec, Vec) { - +fn add_liquidity( + pre_states: &[AccountWithMetadata], + balances: &[u128], +) -> (Vec, Vec) { if pre_states.len() != 7 { - panic!("Invalid number of input accounts"); + panic!("Invalid number of input accounts"); } let pool = &pre_states[0]; @@ -698,7 +855,8 @@ fn add_liquidity(pre_states: &[AccountWithMetadata], let user_holding_lp = &pre_states[6]; // Verify vaults are in fact vaults - let pool_def_data = PoolDefinition::parse(&pool.account.data).expect("Add liquidity: AMM Program expects valid Pool Definition Account"); + let pool_def_data = PoolDefinition::parse(&pool.account.data) + .expect("Add liquidity: AMM Program expects valid Pool Definition Account"); if vault_a.account_id != pool_def_data.vault_a_id { panic!("Vault A was not provided"); } @@ -709,7 +867,7 @@ fn add_liquidity(pre_states: &[AccountWithMetadata], if vault_b.account_id != pool_def_data.vault_b_id { panic!("Vault B was not provided"); - } + } if balances.len() != 3 { panic!("Invalid number of input balances"); } @@ -725,10 +883,14 @@ fn add_liquidity(pre_states: &[AccountWithMetadata], if min_amount_lp == 0 { panic!("Min-lp must be nonzero"); } - + // 2. Determine deposit amount - let vault_b_balance = TokenHolding::parse(&vault_b.account.data).expect("Add liquidity: AMM Program expects valid Token Holding Account for Vault B").balance; - let vault_a_balance = TokenHolding::parse(&vault_a.account.data).expect("Add liquidity: AMM Program expects valid Token Holding Account for Vault A").balance; + let vault_b_balance = TokenHolding::parse(&vault_b.account.data) + .expect("Add liquidity: AMM Program expects valid Token Holding Account for Vault B") + .balance; + let vault_a_balance = TokenHolding::parse(&vault_a.account.data) + .expect("Add liquidity: AMM Program expects valid Token Holding Account for Vault A") + .balance; if pool_def_data.reserve_a == 0 || pool_def_data.reserve_b == 0 { panic!("Reserves must be nonzero"); @@ -739,24 +901,34 @@ fn add_liquidity(pre_states: &[AccountWithMetadata], } // Calculate actual_amounts - let ideal_a: u128 = (pool_def_data.reserve_a*max_amount_b)/pool_def_data.reserve_b; - let ideal_b: u128 = (pool_def_data.reserve_b*max_amount_a)/pool_def_data.reserve_a; + let ideal_a: u128 = (pool_def_data.reserve_a * max_amount_b) / pool_def_data.reserve_b; + let ideal_b: u128 = (pool_def_data.reserve_b * max_amount_a) / pool_def_data.reserve_a; - let actual_amount_a = if ideal_a > max_amount_a { max_amount_a } else { ideal_a }; - let actual_amount_b = if ideal_b > max_amount_b { max_amount_b } else { ideal_b }; + let actual_amount_a = if ideal_a > max_amount_a { + max_amount_a + } else { + ideal_a + }; + let actual_amount_b = if ideal_b > max_amount_b { + max_amount_b + } else { + ideal_b + }; // 3. Validate amounts if max_amount_a < actual_amount_a || max_amount_b < actual_amount_b { panic!("Actual trade amounts cannot exceed max_amounts"); } - + if actual_amount_a == 0 || actual_amount_b == 0 { panic!("A trade amount is 0"); } - + // 4. Calculate LP to mint - let delta_lp = std::cmp::min(pool_def_data.liquidity_pool_supply * actual_amount_a/pool_def_data.reserve_a, - pool_def_data.liquidity_pool_supply * actual_amount_b/pool_def_data.reserve_b); + let delta_lp = std::cmp::min( + pool_def_data.liquidity_pool_supply * actual_amount_a / pool_def_data.reserve_a, + pool_def_data.liquidity_pool_supply * actual_amount_b / pool_def_data.reserve_b, + ); if delta_lp == 0 { panic!("Payable LP must be nonzero"); @@ -765,22 +937,22 @@ fn add_liquidity(pre_states: &[AccountWithMetadata], if delta_lp < min_amount_lp { panic!("Payable LP is less than provided minimum LP amount"); } - + // 5. Update pool account let mut pool_post = pool.account.clone(); let pool_post_definition = PoolDefinition { - definition_token_a_id: pool_def_data.definition_token_a_id.clone(), - definition_token_b_id: pool_def_data.definition_token_b_id.clone(), - vault_a_id: pool_def_data.vault_a_id.clone(), - vault_b_id: pool_def_data.vault_b_id.clone(), - liquidity_pool_id: pool_def_data.liquidity_pool_id.clone(), - liquidity_pool_supply: pool_def_data.liquidity_pool_supply + delta_lp, - reserve_a: pool_def_data.reserve_a + actual_amount_a, - reserve_b: pool_def_data.reserve_b + actual_amount_b, - fees: 0u128, - active: true, + definition_token_a_id: pool_def_data.definition_token_a_id.clone(), + definition_token_b_id: pool_def_data.definition_token_b_id.clone(), + vault_a_id: pool_def_data.vault_a_id.clone(), + vault_b_id: pool_def_data.vault_b_id.clone(), + liquidity_pool_id: pool_def_data.liquidity_pool_id.clone(), + liquidity_pool_supply: pool_def_data.liquidity_pool_supply + delta_lp, + reserve_a: pool_def_data.reserve_a + actual_amount_a, + reserve_b: pool_def_data.reserve_b + actual_amount_b, + fees: 0u128, + active: true, }; - + pool_post.data = pool_post_definition.into_data(); let mut chained_call = Vec::new(); @@ -788,25 +960,27 @@ fn add_liquidity(pre_states: &[AccountWithMetadata], let mut instruction_data = [0; 23]; instruction_data[0] = 1; instruction_data[1..17].copy_from_slice(&actual_amount_a.to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction_data).expect("Add liquidity: AMM Program expects valid token transfer instruction data"); - let call_token_a = ChainedCall{ - program_id: vault_a.account.program_owner, - instruction_data, - pre_states: vec![user_holding_a.clone(), vault_a.clone()], - pda_seeds: Vec::::new(), - }; + let instruction_data = risc0_zkvm::serde::to_vec(&instruction_data) + .expect("Add liquidity: AMM Program expects valid token transfer instruction data"); + let call_token_a = ChainedCall { + program_id: vault_a.account.program_owner, + instruction_data, + pre_states: vec![user_holding_a.clone(), vault_a.clone()], + pda_seeds: Vec::::new(), + }; - // Chain call for Token B (UserHoldingB -> Vault_B) + // Chain call for Token B (UserHoldingB -> Vault_B) let mut instruction_data = [0; 23]; instruction_data[0] = 1; instruction_data[1..17].copy_from_slice(&actual_amount_b.to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction_data).expect("Add liquidity: AMM Program expects valid token transfer instruction data"); - let call_token_b = ChainedCall{ - program_id: vault_b.account.program_owner, - instruction_data, - pre_states: vec![user_holding_b.clone(), vault_b.clone()], - pda_seeds: Vec::::new(), - }; + let instruction_data = risc0_zkvm::serde::to_vec(&instruction_data) + .expect("Add liquidity: AMM Program expects valid token transfer instruction data"); + let call_token_b = ChainedCall { + program_id: vault_b.account.program_owner, + instruction_data, + pre_states: vec![user_holding_b.clone(), vault_b.clone()], + pda_seeds: Vec::::new(), + }; // Chain call for LP (mint new tokens for user_holding_lp) let mut pool_definition_lp_auth = pool_definition_lp.clone(); @@ -815,37 +989,38 @@ fn add_liquidity(pre_states: &[AccountWithMetadata], let mut instruction_data = [0; 23]; instruction_data[0] = 4; instruction_data[1..17].copy_from_slice(&delta_lp.to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction_data).expect("Add liquidity: AMM Program expects valid token transfer instruction data"); - let call_token_lp = ChainedCall{ - program_id: pool_definition_lp.account.program_owner, - instruction_data, - pre_states: vec![pool_definition_lp_auth.clone(), user_holding_lp.clone()], - pda_seeds: vec![compute_liquidity_token_pda_seed(pool.account_id.clone())] - }; + let instruction_data = risc0_zkvm::serde::to_vec(&instruction_data) + .expect("Add liquidity: AMM Program expects valid token transfer instruction data"); + let call_token_lp = ChainedCall { + program_id: pool_definition_lp.account.program_owner, + instruction_data, + pre_states: vec![pool_definition_lp_auth.clone(), user_holding_lp.clone()], + pda_seeds: vec![compute_liquidity_token_pda_seed(pool.account_id.clone())], + }; chained_call.push(call_token_lp); chained_call.push(call_token_b); chained_call.push(call_token_a); let post_states = vec![ - AccountPostState::new(pool_post), + AccountPostState::new(pool_post), AccountPostState::new(pre_states[1].account.clone()), AccountPostState::new(pre_states[2].account.clone()), AccountPostState::new(pre_states[3].account.clone()), AccountPostState::new(pre_states[4].account.clone()), AccountPostState::new(pre_states[5].account.clone()), - AccountPostState::new(pre_states[6].account.clone()),]; + AccountPostState::new(pre_states[6].account.clone()), + ]; (post_states, chained_call) - } -fn remove_liquidity(pre_states: &[AccountWithMetadata], - amounts: &[u128] -) -> (Vec, Vec) -{ +fn remove_liquidity( + pre_states: &[AccountWithMetadata], + amounts: &[u128], +) -> (Vec, Vec) { if pre_states.len() != 7 { - panic!("Invalid number of input accounts"); + panic!("Invalid number of input accounts"); } let pool = &pre_states[0]; @@ -857,7 +1032,7 @@ fn remove_liquidity(pre_states: &[AccountWithMetadata], let user_holding_lp = &pre_states[6]; if amounts.len() != 3 { - panic!("Invalid number of balances"); + panic!("Invalid number of balances"); } let amount_lp = amounts[0]; @@ -865,7 +1040,8 @@ fn remove_liquidity(pre_states: &[AccountWithMetadata], let amount_min_b = amounts[2]; // Verify vaults are in fact vaults - let pool_def_data = PoolDefinition::parse(&pool.account.data).expect("Remove liquidity: AMM Program expects a valid Pool Definition Account"); + let pool_def_data = PoolDefinition::parse(&pool.account.data) + .expect("Remove liquidity: AMM Program expects a valid Pool Definition Account"); if !pool_def_data.active { panic!("Pool is inactive"); @@ -882,7 +1058,7 @@ fn remove_liquidity(pre_states: &[AccountWithMetadata], if vault_b.account_id != pool_def_data.vault_b_id { panic!("Vault B was not provided"); } - + // Vault addresses do not need to be checked with PDA // calculation for setting authorization since stored // in the Pool Definition. @@ -900,14 +1076,19 @@ fn remove_liquidity(pre_states: &[AccountWithMetadata], } // 2. Compute withdrawal amounts - let user_holding_lp_data = TokenHolding::parse(&user_holding_lp.account.data).expect("Remove liquidity: AMM Program expects a valid Token Account for liquidity token"); - - if user_holding_lp_data.balance > pool_def_data.liquidity_pool_supply || user_holding_lp_data.definition_id != pool_def_data.liquidity_pool_id { + let user_holding_lp_data = TokenHolding::parse(&user_holding_lp.account.data) + .expect("Remove liquidity: AMM Program expects a valid Token Account for liquidity token"); + + if user_holding_lp_data.balance > pool_def_data.liquidity_pool_supply + || user_holding_lp_data.definition_id != pool_def_data.liquidity_pool_id + { panic!("Invalid liquidity account provided"); } - let withdraw_amount_a = (pool_def_data.reserve_a * amount_lp)/pool_def_data.liquidity_pool_supply; - let withdraw_amount_b = (pool_def_data.reserve_b * amount_lp)/pool_def_data.liquidity_pool_supply; + let withdraw_amount_a = + (pool_def_data.reserve_a * amount_lp) / pool_def_data.liquidity_pool_supply; + let withdraw_amount_b = + (pool_def_data.reserve_b * amount_lp) / pool_def_data.liquidity_pool_supply; // 3. Validate and slippage check if withdraw_amount_a < amount_min_a { @@ -918,23 +1099,28 @@ fn remove_liquidity(pre_states: &[AccountWithMetadata], } // 4. Calculate LP to reduce cap by - let delta_lp : u128 = (pool_def_data.liquidity_pool_supply*amount_lp)/pool_def_data.liquidity_pool_supply; + let delta_lp: u128 = + (pool_def_data.liquidity_pool_supply * amount_lp) / pool_def_data.liquidity_pool_supply; - let active: bool = if pool_def_data.liquidity_pool_supply - delta_lp == 0 { false } else { true }; + let active: bool = if pool_def_data.liquidity_pool_supply - delta_lp == 0 { + false + } else { + true + }; // 5. Update pool account let mut pool_post = pool.account.clone(); let pool_post_definition = PoolDefinition { - definition_token_a_id: pool_def_data.definition_token_a_id.clone(), - definition_token_b_id: pool_def_data.definition_token_b_id.clone(), - vault_a_id: pool_def_data.vault_a_id.clone(), - vault_b_id: pool_def_data.vault_b_id.clone(), - liquidity_pool_id: pool_def_data.liquidity_pool_id.clone(), - liquidity_pool_supply: pool_def_data.liquidity_pool_supply - delta_lp, - reserve_a: pool_def_data.reserve_a - withdraw_amount_a, - reserve_b: pool_def_data.reserve_b - withdraw_amount_b, - fees: 0u128, - active, + definition_token_a_id: pool_def_data.definition_token_a_id.clone(), + definition_token_b_id: pool_def_data.definition_token_b_id.clone(), + vault_a_id: pool_def_data.vault_a_id.clone(), + vault_b_id: pool_def_data.vault_b_id.clone(), + liquidity_pool_id: pool_def_data.liquidity_pool_id.clone(), + liquidity_pool_supply: pool_def_data.liquidity_pool_supply - delta_lp, + reserve_a: pool_def_data.reserve_a - withdraw_amount_a, + reserve_b: pool_def_data.reserve_b - withdraw_amount_b, + fees: 0u128, + active, }; pool_post.data = pool_post_definition.into_data(); @@ -942,2415 +1128,2714 @@ fn remove_liquidity(pre_states: &[AccountWithMetadata], let mut chained_calls = Vec::new(); //Chaincall for Token A withdraw - let mut instruction: [u8;23] = [0; 23]; + let mut instruction: [u8; 23] = [0; 23]; instruction[0] = 1; // token transfer instruction[1..17].copy_from_slice(&withdraw_amount_a.to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction).expect("Remove liquidity: AMM Program expects valid token transfer instruction data"); - let call_token_a = ChainedCall{ - program_id: vault_a.account.program_owner, - instruction_data, - pre_states: vec![running_vault_a, user_holding_a.clone()], - pda_seeds: vec![compute_vault_pda_seed(pool.account_id.clone(), pool_def_data.definition_token_a_id.clone())], - }; + let instruction_data = risc0_zkvm::serde::to_vec(&instruction) + .expect("Remove liquidity: AMM Program expects valid token transfer instruction data"); + let call_token_a = ChainedCall { + program_id: vault_a.account.program_owner, + instruction_data, + pre_states: vec![running_vault_a, user_holding_a.clone()], + pda_seeds: vec![compute_vault_pda_seed( + pool.account_id.clone(), + pool_def_data.definition_token_a_id.clone(), + )], + }; //Chaincall for Token B withdraw - let mut instruction: [u8;23] = [0; 23]; + let mut instruction: [u8; 23] = [0; 23]; instruction[0] = 1; // token transfer instruction[1..17].copy_from_slice(&withdraw_amount_b.to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction).expect("Remove liquidity: AMM Program expects valid token transfer instruction data"); - let call_token_b = ChainedCall{ - program_id: vault_b.account.program_owner, - instruction_data, - pre_states: vec![running_vault_b, user_holding_b.clone()], - pda_seeds: vec![compute_vault_pda_seed(pool.account_id.clone(), pool_def_data.definition_token_b_id.clone())], - }; + let instruction_data = risc0_zkvm::serde::to_vec(&instruction) + .expect("Remove liquidity: AMM Program expects valid token transfer instruction data"); + let call_token_b = ChainedCall { + program_id: vault_b.account.program_owner, + instruction_data, + pre_states: vec![running_vault_b, user_holding_b.clone()], + pda_seeds: vec![compute_vault_pda_seed( + pool.account_id.clone(), + pool_def_data.definition_token_b_id.clone(), + )], + }; - //Chaincall for LP adjustment + //Chaincall for LP adjustment let mut pool_definition_lp_auth = pool_definition_lp.clone(); pool_definition_lp_auth.is_authorized = true; - let mut instruction: [u8;23] = [0; 23]; + let mut instruction: [u8; 23] = [0; 23]; instruction[0] = 3; // token burn instruction[1..17].copy_from_slice(&delta_lp.to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction).expect("Remove liquidity: AMM Program expects valid token transfer instruction data"); - let call_token_lp = ChainedCall{ - program_id: pool_definition_lp.account.program_owner, - instruction_data, - pre_states: vec![pool_definition_lp_auth.clone(), user_holding_lp.clone()], - pda_seeds: vec![compute_liquidity_token_pda_seed(pool.account_id.clone())] - }; + let instruction_data = risc0_zkvm::serde::to_vec(&instruction) + .expect("Remove liquidity: AMM Program expects valid token transfer instruction data"); + let call_token_lp = ChainedCall { + program_id: pool_definition_lp.account.program_owner, + instruction_data, + pre_states: vec![pool_definition_lp_auth.clone(), user_holding_lp.clone()], + pda_seeds: vec![compute_liquidity_token_pda_seed(pool.account_id.clone())], + }; chained_calls.push(call_token_lp); chained_calls.push(call_token_b); chained_calls.push(call_token_a); - - let post_states = vec! - [ - AccountPostState::new(pool_post.clone()), + + let post_states = vec![ + AccountPostState::new(pool_post.clone()), AccountPostState::new(pre_states[1].account.clone()), AccountPostState::new(pre_states[2].account.clone()), AccountPostState::new(pre_states[3].account.clone()), AccountPostState::new(pre_states[4].account.clone()), AccountPostState::new(pre_states[5].account.clone()), - AccountPostState::new(pre_states[6].account.clone())]; + AccountPostState::new(pre_states[6].account.clone()), + ]; (post_states, chained_calls) } #[cfg(test)] mod tests { - use nssa_core::{{account::{Account, AccountId, AccountWithMetadata}, program::ChainedCall, program::PdaSeed}, program::ProgramId}; + use nssa_core::{ + program::ProgramId, + { + account::{Account, AccountId, AccountWithMetadata}, + program::ChainedCall, + program::PdaSeed, + }, + }; - use crate::{PoolDefinition, TokenDefinition, TokenHolding, add_liquidity, new_definition, remove_liquidity, swap, - compute_liquidity_token_pda, compute_liquidity_token_pda_seed, compute_pool_pda, compute_pool_pda_seed, - compute_vault_pda, compute_vault_pda_seed}; + use crate::{ + PoolDefinition, TokenDefinition, TokenHolding, add_liquidity, compute_liquidity_token_pda, + compute_liquidity_token_pda_seed, compute_pool_pda, compute_pool_pda_seed, + compute_vault_pda, compute_vault_pda_seed, new_definition, remove_liquidity, swap, + }; - const TOKEN_PROGRAM_ID: ProgramId = [15;8]; - const AMM_PROGRAM_ID: ProgramId = [42;8]; + const TOKEN_PROGRAM_ID: ProgramId = [15; 8]; + const AMM_PROGRAM_ID: ProgramId = [42; 8]; - enum AccountEnum { - UserHoldingB, - UserHoldingA, - VaultAUninit, - VaultBUninit, - VaultAInit, - VaultBInit, - VaultAInitHigh, - VaultBInitHigh, - VaultAInitLow, - VaultBInitLow, - VaultAInitZero, - VaultBInitZero, - VaultAWrongAccId, - VaultBWrongAccId, - PoolLPUninit, - PoolLPInit, - PoolLPWrongAccId, - UserHoldingLPUninit, - UserHoldingLPInit, - PoolDefinitionUninit, - PoolDefinitionInit, - PoolDefinitionInitReserveAZero, - PoolDefinitionInitReserveBZero, - PoolDefinitionInitReserveALow, - PoolDefinitionInitReserveBLow, - PoolDefinitionUnauth, - PoolDefinitionSwapTest1, - PoolDefinitionSwapTest2, - PoolDefinitionAddZeroLP, - PoolDefinitionAddSuccessful, - PoolDefinitionRemoveSuccessful, - PoolDefinitionInactive, - PoolDefinitionWrongId, - VaultAWrongId, - VaultBWrongId, - PoolLPWrongId, - PoolDefinitionActive, - } + struct BalanceForTests; - enum BalanceEnum { - VaultAReserveInit, - VaultBReserveInit, - VaultAReserveLow, - VaultBReserveLow, - VaultAReserveHigh, - VaultBReserveHigh, - UserTokenABal, - UserTokenBBal, - UserTokenLPBal, - RemoveMinAmountA, - RemoveMinAmountB, - RemoveActualASuccessful, - RemoveMinAmountBLow, - RemoveMinAmountBAow, - RemoveAmountLP, - RemoveAmountLP1, - AddMaxAmountALow, - AddMaxAmountBLow, - AddMaxAmountBHigh, - AddMaxAmountA, - AddMaxAmountb, - AddMinAmountLP, - VaultASwapTest1, - VaultASwapTest2, - VaultBSwapTest1, - VaultBSwapTest2, - MinAmountOut, - VaultAAddSuccessful, - VaultBAddSuccessful, - AddSuccessfulAmountA, - AddSuccessfulAmountB, - VaultARemoveSuccessful, - VaultBRemoveSuccessful, - } - - fn helper_balance_constructor(selection: BalanceEnum) -> u128 { - match selection { - BalanceEnum::VaultAReserveInit => 1_000, - BalanceEnum::VaultBReserveInit => 500, - BalanceEnum::VaultAReserveLow => 10, - BalanceEnum::VaultBReserveLow => 10, - BalanceEnum::VaultAReserveHigh => 500_000, - BalanceEnum::VaultBReserveHigh => 500_000, - BalanceEnum::UserTokenABal => 1_000, - BalanceEnum::UserTokenBBal => 500, - BalanceEnum::UserTokenLPBal => 100, - BalanceEnum::RemoveMinAmountA => 50, - BalanceEnum::RemoveMinAmountB => 100, - BalanceEnum::RemoveActualASuccessful => 100, - BalanceEnum::RemoveMinAmountBLow => 50, - BalanceEnum::RemoveMinAmountBAow => 10, - BalanceEnum::RemoveAmountLP => 100, - BalanceEnum::RemoveAmountLP1 => 30, - BalanceEnum::AddMaxAmountA => 500, - BalanceEnum::AddMaxAmountb => 200, - BalanceEnum::AddMaxAmountBHigh => 20_000, - BalanceEnum::AddMaxAmountALow => 10, - BalanceEnum::AddMaxAmountBLow => 10, - BalanceEnum::AddMinAmountLP => 20, - BalanceEnum::VaultASwapTest1 => 1_500, - BalanceEnum::VaultASwapTest2 => 715, - BalanceEnum::VaultBSwapTest1 => 334, - BalanceEnum::VaultBSwapTest2 => 700, - BalanceEnum::MinAmountOut => 200, - BalanceEnum::VaultAAddSuccessful => 1_400, - BalanceEnum::VaultBAddSuccessful => 700, - BalanceEnum::AddSuccessfulAmountA => 400, - BalanceEnum::AddSuccessfulAmountB => 200, - BalanceEnum::VaultARemoveSuccessful => 900, - BalanceEnum::VaultBRemoveSuccessful => 450, - _ => panic!("Invalid selection") + impl BalanceForTests { + fn vault_a_reserve_init() -> u128 { + 1_000 } - } - enum IdEnum { - TokenADefinitionId, - TokenBDefinitionId, - TokenLPDefinitionId, - UserTokenAId, - UserTokenBId, - UserTokenLPId, - PoolDefinitionId, - VaultAId, - VaultBId, - } + fn vault_b_reserve_init() -> u128 { + 500 + } - enum ChainedCallsEnum { - CcTokenAInitialization, - CcTokenBInitialization, - CcPoolLPInitiailization, - CcSwapTokenATest1, - CcSwapTokenBTest1, - CcSwapTokenATest2, - CcSwapTokenBTest2, - CcAddTokenA, - CcAddTokenB, - CcAddPoolLP, - CcRemoveTokenA, - CcRemoveTokenB, - CcRemovePoolLP, - CcNewDefinitionTokenA, - CcNewDefinitionTokenB, - CcNewDefinitionLP, - } + fn vault_a_reserve_low() -> u128 { + 10 + } - fn helper_chained_call_constructor(selection: ChainedCallsEnum) -> ChainedCall { - match selection { - ChainedCallsEnum::CcTokenAInitialization => { - let mut instruction: [u8;23] = [0; 23]; - instruction[0] = 1; - instruction[1..17].copy_from_slice( - &helper_balance_constructor(BalanceEnum::UserTokenABal) - .to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction).expect("AMM Program expects valid transaction instruction data"); - ChainedCall{ - program_id: TOKEN_PROGRAM_ID, - instruction_data, - pre_states: vec![ - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::VaultAUninit)], - pda_seeds: Vec::::new(), - } - } - ChainedCallsEnum::CcTokenBInitialization => { - let mut instruction: [u8;23] = [0; 23]; - instruction[0] = 1; - instruction[1..17].copy_from_slice( - &helper_balance_constructor(BalanceEnum::UserTokenBBal) - .to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction).expect("AMM Program expects valid transaction instruction data"); - ChainedCall{ - program_id: TOKEN_PROGRAM_ID, - instruction_data, - pre_states: vec![ - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::VaultBUninit)], - pda_seeds: Vec::::new(), - } - } - ChainedCallsEnum::CcPoolLPInitiailization => { - let mut instruction: [u8;23] = [0; 23]; - instruction[0] = 1; - instruction[1..17].copy_from_slice( - &helper_balance_constructor(BalanceEnum::UserTokenABal) - .to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction).expect("AMM Program expects valid transaction instruction data"); - ChainedCall{ - program_id: TOKEN_PROGRAM_ID, - instruction_data, - pre_states: vec![ - helper_account_constructor(AccountEnum::PoolLPUninit), - helper_account_constructor(AccountEnum::UserHoldingLPUninit)], - pda_seeds: Vec::::new(), - } - } - ChainedCallsEnum::CcSwapTokenATest1 => { - let mut instruction_data: [u8;23] = [0; 23]; - instruction_data[0] = 1; - instruction_data[1..17].copy_from_slice( - &helper_balance_constructor(BalanceEnum::AddMaxAmountA) - .to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction_data).expect("AMM Program expects valid transaction instruction data"); - ChainedCall{ - program_id: TOKEN_PROGRAM_ID, - instruction_data, - pre_states: vec![ - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::VaultAInit)], - pda_seeds: Vec::::new(), - } - } - ChainedCallsEnum::CcSwapTokenBTest1 => { - let swap_amount: u128 = 166; + fn vault_b_reserve_low() -> u128 { + 10 + } - let mut vault_b_auth = helper_account_constructor(AccountEnum::VaultBInit); - vault_b_auth.is_authorized = true; + fn vault_a_reserve_high() -> u128 { + 500_000 + } - let mut instruction: [u8;23] = [0; 23]; - instruction[0] = 1; - instruction[1..17].copy_from_slice( - &swap_amount - .to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction).expect("AMM Program expects valid transaction instruction data"); - ChainedCall{ - program_id: TOKEN_PROGRAM_ID, - instruction_data, - pre_states: vec![ - vault_b_auth, - helper_account_constructor(AccountEnum::UserHoldingB)], - pda_seeds: vec![ - compute_vault_pda_seed(helper_id_constructor(IdEnum::PoolDefinitionId), - helper_id_constructor(IdEnum::TokenBDefinitionId)), - ], - } - } - ChainedCallsEnum::CcSwapTokenATest2 => { - let swap_amount: u128 = 285; + fn vault_b_reserve_high() -> u128 { + 500_000 + } - let mut vault_a_auth = helper_account_constructor(AccountEnum::VaultAInit); - vault_a_auth.is_authorized = true; + fn user_token_a_balance() -> u128 { + 1_000 + } - let mut instruction_data: [u8;23] = [0; 23]; - instruction_data[0] = 1; - instruction_data[1..17].copy_from_slice( - &swap_amount - .to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction_data).expect("AMM Program expects valid transaction instruction data"); - ChainedCall{ - program_id: TOKEN_PROGRAM_ID, - instruction_data, - pre_states: vec![ - vault_a_auth, - helper_account_constructor(AccountEnum::UserHoldingA), - ], - pda_seeds: vec![ - compute_vault_pda_seed(helper_id_constructor(IdEnum::PoolDefinitionId), - helper_id_constructor(IdEnum::TokenADefinitionId)), - ], - } - } - ChainedCallsEnum::CcSwapTokenBTest2 => { - let mut instruction: [u8;23] = [0; 23]; - instruction[0] = 1; - instruction[1..17].copy_from_slice( - &helper_balance_constructor(BalanceEnum::AddMaxAmountb) - .to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction).expect("AMM Program expects valid transaction instruction data"); - ChainedCall{ - program_id: TOKEN_PROGRAM_ID, - instruction_data, - pre_states: vec![ - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::VaultBInit)], - pda_seeds: Vec::::new(), - } - } - ChainedCallsEnum::CcAddTokenA => { - let mut instruction: [u8;23] = [0; 23]; - instruction[0] = 1; - instruction[1..17].copy_from_slice( - &helper_balance_constructor(BalanceEnum::AddSuccessfulAmountA) - .to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction).expect("AMM Program expects valid transaction instruction data"); - ChainedCall{ - program_id: TOKEN_PROGRAM_ID, - instruction_data, - pre_states: vec![ - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::VaultAInit)], - pda_seeds: Vec::::new(), - } - } - ChainedCallsEnum::CcAddTokenB => { - let mut instruction: [u8;23] = [0; 23]; - instruction[0] = 1; - instruction[1..17].copy_from_slice( - &helper_balance_constructor(BalanceEnum::AddSuccessfulAmountB) - .to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction).expect("Swap Logic: AMM Program expects valid transaction instruction data"); - ChainedCall{ - program_id: TOKEN_PROGRAM_ID, - instruction_data, - pre_states: vec![ - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::VaultBInit)], - pda_seeds: Vec::::new(), - } - } - ChainedCallsEnum::CcAddPoolLP => { - let mut pool_lp_auth = helper_account_constructor(AccountEnum::PoolLPInit); - pool_lp_auth.is_authorized = true; + fn user_token_b_balance() -> u128 { + 500 + } - let mut instruction: [u8;23] = [0; 23]; - instruction[0] = 4; - instruction[1..17].copy_from_slice( - &helper_balance_constructor(BalanceEnum::AddSuccessfulAmountA) - .to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction).expect("Swap Logic: AMM Program expects valid transaction instruction data"); - ChainedCall{ - program_id: TOKEN_PROGRAM_ID, - instruction_data, - pre_states: vec![ - pool_lp_auth, - helper_account_constructor(AccountEnum::UserHoldingLPInit)], - pda_seeds: vec![compute_liquidity_token_pda_seed( - helper_id_constructor(IdEnum::PoolDefinitionId))], - } - } - ChainedCallsEnum::CcRemoveTokenA => { - let mut vault_a_auth = helper_account_constructor(AccountEnum::VaultAInit); - vault_a_auth.is_authorized = true; + fn user_token_lp_balance() -> u128 { + 100 + } - let mut instruction: [u8;23] = [0; 23]; - instruction[0] = 1; - instruction[1..17].copy_from_slice( - &helper_balance_constructor(BalanceEnum::RemoveActualASuccessful) - .to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction).expect("AMM Program expects valid transaction instruction data"); - ChainedCall{ - program_id: TOKEN_PROGRAM_ID, - instruction_data, - pre_states: vec![ - vault_a_auth, - helper_account_constructor(AccountEnum::UserHoldingA),], - pda_seeds: vec![ - compute_vault_pda_seed(helper_id_constructor(IdEnum::PoolDefinitionId), - helper_id_constructor(IdEnum::TokenADefinitionId)), - ], - } - } - ChainedCallsEnum::CcRemoveTokenB => { - let mut vault_b_auth = helper_account_constructor(AccountEnum::VaultBInit); - vault_b_auth.is_authorized = true; + fn remove_min_amount_a() -> u128 { + 50 + } - let mut instruction: [u8;23] = [0; 23]; - instruction[0] = 1; - instruction[1..17].copy_from_slice( - &helper_balance_constructor(BalanceEnum::RemoveMinAmountBLow) - .to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction).expect("AMM Program expects valid transaction instruction data"); - ChainedCall{ - program_id: TOKEN_PROGRAM_ID, - instruction_data, - pre_states: vec![ - vault_b_auth, - helper_account_constructor(AccountEnum::UserHoldingB),], - pda_seeds: vec![ - compute_vault_pda_seed(helper_id_constructor(IdEnum::PoolDefinitionId), - helper_id_constructor(IdEnum::TokenBDefinitionId)), - ], - } - } - ChainedCallsEnum::CcRemovePoolLP => { - let mut pool_lp_auth = helper_account_constructor(AccountEnum::PoolLPInit); - pool_lp_auth.is_authorized = true; + fn remove_min_amount_b() -> u128 { + 100 + } - let mut instruction: [u8;23] = [0; 23]; - instruction[0] = 3; - instruction[1..17].copy_from_slice( - &helper_balance_constructor(BalanceEnum::RemoveActualASuccessful) - .to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction).expect("AMM Program expects valid transaction instruction data"); - ChainedCall{ - program_id: TOKEN_PROGRAM_ID, - instruction_data, - pre_states: vec![ - helper_account_constructor(AccountEnum::UserHoldingLPInit), - helper_account_constructor(AccountEnum::PoolLPInit),], - pda_seeds: vec![compute_liquidity_token_pda_seed( - helper_id_constructor(IdEnum::PoolDefinitionId))], - } - } - ChainedCallsEnum::CcNewDefinitionTokenA => { - let mut instruction: [u8;23] = [0; 23]; - instruction[0] = 1; - instruction[1..17].copy_from_slice( - &helper_balance_constructor(BalanceEnum::AddSuccessfulAmountA) - .to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction).expect("AMM Program expects valid transaction instruction data"); - ChainedCall{ - program_id: TOKEN_PROGRAM_ID, - instruction_data, - pre_states: vec![ - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::VaultAInit)], - pda_seeds: Vec::::new(), - } - } - ChainedCallsEnum::CcNewDefinitionTokenB => { - let mut instruction: [u8;23] = [0; 23]; - instruction[0] = 1; - instruction[1..17].copy_from_slice( - &helper_balance_constructor(BalanceEnum::AddSuccessfulAmountB) - .to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction).expect("Swap Logic: AMM Program expects valid transaction instruction data"); - ChainedCall{ - program_id: TOKEN_PROGRAM_ID, - instruction_data, - pre_states: vec![ - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::VaultBInit)], - pda_seeds: Vec::::new(), - } - } - ChainedCallsEnum::CcAddPoolLP => { - let mut pool_lp_auth = helper_account_constructor(AccountEnum::PoolLPInit); - pool_lp_auth.is_authorized = true; + fn remove_actual_a_successful() -> u128 { + 100 + } - let mut instruction: [u8;23] = [0; 23]; - instruction[0] = 0; - instruction[1..17].copy_from_slice( - &helper_balance_constructor(BalanceEnum::AddSuccessfulAmountA) - .to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction).expect("Swap Logic: AMM Program expects valid transaction instruction data"); - ChainedCall{ - program_id: TOKEN_PROGRAM_ID, - instruction_data, - pre_states: vec![ - pool_lp_auth, - helper_account_constructor(AccountEnum::UserHoldingLPInit)], - pda_seeds: vec![compute_liquidity_token_pda_seed( - helper_id_constructor(IdEnum::PoolDefinitionId))], - } - } - _ => panic!("Invalid selection") + fn remove_min_amount_b_low() -> u128 { + 50 + } + + //TODO used??? BalanceEnum::RemoveMinAmountBAow => 10, + fn remove_min_amount_a_low() -> u128 { + 10 + } + + fn remove_amount_lp() -> u128 { + 100 + } + + fn remove_amount_lp_1() -> u128 { + 30 + } + + fn add_max_amount_a() -> u128 { + 500 + } + + fn add_max_amount_b() -> u128 { + 200 + } + + fn add_max_amount_b_high() -> u128 { + 20_000 + } + + fn add_max_amount_a_low() -> u128 { + 10 + } + + fn add_max_amount_b_low() -> u128 { + 10 + } + + fn add_min_amount_lp() -> u128 { + 20 + } + + fn vault_a_swap_test_1() -> u128 { + 1_500 + } + + fn vault_a_swap_test_2() -> u128 { + 715 + } + + fn vault_b_swap_test_1() -> u128 { + 334 + } + + fn vault_b_swap_test_2() -> u128 { + 700 + } + + fn min_amount_out() -> u128 { + 200 + } + + fn vault_a_add_successful() -> u128 { + 1_400 + } + + fn vault_b_add_successful() -> u128 { + 700 + } + + fn add_successful_amount_a() -> u128 { + 400 + } + + fn add_successful_amount_b() -> u128 { + 200 + } + + fn vault_a_remove_successful() -> u128 { + 900 + } + + fn vault_b_remove_successful() -> u128 { + 450 } } - fn helper_id_constructor(selection: IdEnum) -> AccountId { + struct ChainedCallForTests; - match selection { - IdEnum::TokenADefinitionId => AccountId::new([42;32]), - IdEnum::TokenBDefinitionId => AccountId::new([43;32]), - IdEnum::TokenLPDefinitionId => compute_liquidity_token_pda(AMM_PROGRAM_ID, - helper_id_constructor(IdEnum::PoolDefinitionId),), - IdEnum::UserTokenAId => AccountId::new([45;32]), - IdEnum::UserTokenBId => AccountId::new([46;32]), - IdEnum::UserTokenLPId => AccountId::new([47;32]), - IdEnum::PoolDefinitionId => compute_pool_pda(AMM_PROGRAM_ID, - helper_id_constructor(IdEnum::TokenADefinitionId), - helper_id_constructor(IdEnum::TokenBDefinitionId)), - IdEnum::VaultAId => compute_vault_pda(AMM_PROGRAM_ID, - helper_id_constructor(IdEnum::PoolDefinitionId), - helper_id_constructor(IdEnum::TokenADefinitionId)), - IdEnum::VaultBId => compute_vault_pda(AMM_PROGRAM_ID, - helper_id_constructor(IdEnum::PoolDefinitionId), - helper_id_constructor(IdEnum::TokenBDefinitionId)), - _ => panic!("Invalid selection") + impl ChainedCallForTests { + fn cc_token_a_initialization() -> ChainedCall { + let mut instruction: [u8; 23] = [0; 23]; + instruction[0] = 1; + instruction[1..17] + .copy_from_slice(&BalanceForTests::user_token_a_balance().to_le_bytes()); + let instruction_data = risc0_zkvm::serde::to_vec(&instruction) + .expect("AMM Program expects valid transaction instruction data"); + ChainedCall { + program_id: TOKEN_PROGRAM_ID, + instruction_data, + pre_states: vec![ + AccountForTests::user_holding_a(), + AccountForTests::vault_a_uninit(), + ], + pda_seeds: Vec::::new(), + } } - } - fn helper_account_constructor(selection: AccountEnum) -> AccountWithMetadata { + fn cc_token_b_initialization() -> ChainedCall { + let mut instruction: [u8; 23] = [0; 23]; + instruction[0] = 1; + instruction[1..17] + .copy_from_slice(&BalanceForTests::user_token_b_balance().to_le_bytes()); + let instruction_data = risc0_zkvm::serde::to_vec(&instruction) + .expect("AMM Program expects valid transaction instruction data"); + ChainedCall { + program_id: TOKEN_PROGRAM_ID, + instruction_data, + pre_states: vec![ + AccountForTests::user_holding_b(), + AccountForTests::vault_b_uninit(), + ], + pda_seeds: Vec::::new(), + } + } + + fn cc_pool_lp_initialization() -> ChainedCall { + let mut instruction: [u8; 23] = [0; 23]; + instruction[0] = 1; + instruction[1..17] + .copy_from_slice(&BalanceForTests::user_token_a_balance().to_le_bytes()); + let instruction_data = risc0_zkvm::serde::to_vec(&instruction) + .expect("AMM Program expects valid transaction instruction data"); + ChainedCall { + program_id: TOKEN_PROGRAM_ID, + instruction_data, + pre_states: vec![ + AccountForTests::pool_lp_uninit(), + AccountForTests::user_holding_lp_uninit(), + ], + pda_seeds: Vec::::new(), + } + } + + fn cc_swap_token_a_test_1() -> ChainedCall { + let mut instruction_data: [u8; 23] = [0; 23]; + instruction_data[0] = 1; + instruction_data[1..17] + .copy_from_slice(&BalanceForTests::add_max_amount_a().to_le_bytes()); + let instruction_data = risc0_zkvm::serde::to_vec(&instruction_data) + .expect("AMM Program expects valid transaction instruction data"); + ChainedCall { + program_id: TOKEN_PROGRAM_ID, + instruction_data, + pre_states: vec![ + AccountForTests::user_holding_a(), + AccountForTests::vault_a_init(), + ], + pda_seeds: Vec::::new(), + } + } + + fn cc_swap_token_b_test_1() -> ChainedCall { + let swap_amount: u128 = 166; + + let mut vault_b_auth = AccountForTests::vault_b_init(); + vault_b_auth.is_authorized = true; + + let mut instruction: [u8; 23] = [0; 23]; + instruction[0] = 1; + instruction[1..17].copy_from_slice(&swap_amount.to_le_bytes()); + let instruction_data = risc0_zkvm::serde::to_vec(&instruction) + .expect("AMM Program expects valid transaction instruction data"); + ChainedCall { + program_id: TOKEN_PROGRAM_ID, + instruction_data, + pre_states: vec![vault_b_auth, AccountForTests::user_holding_b()], + pda_seeds: vec![compute_vault_pda_seed( + IdForTests::pool_definition_id(), + IdForTests::token_b_definition_id(), + )], + } + } + + fn cc_swap_token_a_test_2() -> ChainedCall { + let swap_amount: u128 = 285; + + let mut vault_a_auth = AccountForTests::vault_a_init(); + vault_a_auth.is_authorized = true; + + let mut instruction_data: [u8; 23] = [0; 23]; + instruction_data[0] = 1; + instruction_data[1..17].copy_from_slice(&swap_amount.to_le_bytes()); + let instruction_data = risc0_zkvm::serde::to_vec(&instruction_data) + .expect("AMM Program expects valid transaction instruction data"); + ChainedCall { + program_id: TOKEN_PROGRAM_ID, + instruction_data, + pre_states: vec![vault_a_auth, AccountForTests::user_holding_a()], + pda_seeds: vec![compute_vault_pda_seed( + IdForTests::pool_definition_id(), + IdForTests::token_a_definition_id(), + )], + } + } + + fn cc_swap_token_b_test_2() -> ChainedCall { + let mut instruction: [u8; 23] = [0; 23]; + instruction[0] = 1; + instruction[1..17].copy_from_slice(&BalanceForTests::add_max_amount_b().to_le_bytes()); + let instruction_data = risc0_zkvm::serde::to_vec(&instruction) + .expect("AMM Program expects valid transaction instruction data"); + ChainedCall { + program_id: TOKEN_PROGRAM_ID, + instruction_data, + pre_states: vec![ + AccountForTests::user_holding_b(), + AccountForTests::vault_b_init(), + ], + pda_seeds: Vec::::new(), + } + } + + fn cc_add_token_a() -> ChainedCall { + let mut instruction: [u8; 23] = [0; 23]; + instruction[0] = 1; + instruction[1..17] + .copy_from_slice(&BalanceForTests::add_successful_amount_a().to_le_bytes()); + let instruction_data = risc0_zkvm::serde::to_vec(&instruction) + .expect("AMM Program expects valid transaction instruction data"); + ChainedCall { + program_id: TOKEN_PROGRAM_ID, + instruction_data, + pre_states: vec![ + AccountForTests::user_holding_a(), + AccountForTests::vault_a_init(), + ], + pda_seeds: Vec::::new(), + } + } + + fn cc_add_token_b() -> ChainedCall { + let mut instruction: [u8; 23] = [0; 23]; + instruction[0] = 1; + instruction[1..17] + .copy_from_slice(&BalanceForTests::add_successful_amount_b().to_le_bytes()); + let instruction_data = risc0_zkvm::serde::to_vec(&instruction) + .expect("Swap Logic: AMM Program expects valid transaction instruction data"); + ChainedCall { + program_id: TOKEN_PROGRAM_ID, + instruction_data, + pre_states: vec![ + AccountForTests::user_holding_b(), + AccountForTests::vault_b_init(), + ], + pda_seeds: Vec::::new(), + } + } + + fn cc_add_pool_lp() -> ChainedCall { + let mut pool_lp_auth = AccountForTests::pool_lp_init(); + pool_lp_auth.is_authorized = true; + + let mut instruction: [u8; 23] = [0; 23]; + instruction[0] = 4; + instruction[1..17] + .copy_from_slice(&BalanceForTests::add_successful_amount_a().to_le_bytes()); + let instruction_data = risc0_zkvm::serde::to_vec(&instruction) + .expect("Swap Logic: AMM Program expects valid transaction instruction data"); + ChainedCall { + program_id: TOKEN_PROGRAM_ID, + instruction_data, + pre_states: vec![pool_lp_auth, AccountForTests::user_holding_lp_init()], + pda_seeds: vec![compute_liquidity_token_pda_seed( + IdForTests::pool_definition_id(), + )], + } + } + + fn cc_remove_token_a() -> ChainedCall { + let mut vault_a_auth = AccountForTests::vault_a_init(); + vault_a_auth.is_authorized = true; + + let mut instruction: [u8; 23] = [0; 23]; + instruction[0] = 1; + instruction[1..17] + .copy_from_slice(&BalanceForTests::remove_actual_a_successful().to_le_bytes()); + let instruction_data = risc0_zkvm::serde::to_vec(&instruction) + .expect("AMM Program expects valid transaction instruction data"); + ChainedCall { + program_id: TOKEN_PROGRAM_ID, + instruction_data, + pre_states: vec![vault_a_auth, AccountForTests::user_holding_a()], + pda_seeds: vec![compute_vault_pda_seed( + IdForTests::pool_definition_id(), + IdForTests::token_a_definition_id(), + )], + } + } + + fn cc_remove_token_b() -> ChainedCall { + let mut vault_b_auth = AccountForTests::vault_b_init(); + vault_b_auth.is_authorized = true; + + let mut instruction: [u8; 23] = [0; 23]; + instruction[0] = 1; + instruction[1..17] + .copy_from_slice(&BalanceForTests::remove_min_amount_b_low().to_le_bytes()); + let instruction_data = risc0_zkvm::serde::to_vec(&instruction) + .expect("AMM Program expects valid transaction instruction data"); + ChainedCall { + program_id: TOKEN_PROGRAM_ID, + instruction_data, + pre_states: vec![vault_b_auth, AccountForTests::user_holding_b()], + pda_seeds: vec![compute_vault_pda_seed( + IdForTests::pool_definition_id(), + IdForTests::token_b_definition_id(), + )], + } + } + + fn cc_remove_pool_lp() -> ChainedCall { + let mut pool_lp_auth = AccountForTests::pool_lp_init(); + pool_lp_auth.is_authorized = true; + + let mut instruction: [u8; 23] = [0; 23]; + instruction[0] = 3; + instruction[1..17] + .copy_from_slice(&BalanceForTests::remove_actual_a_successful().to_le_bytes()); + let instruction_data = risc0_zkvm::serde::to_vec(&instruction) + .expect("AMM Program expects valid transaction instruction data"); + ChainedCall { + program_id: TOKEN_PROGRAM_ID, + instruction_data, + pre_states: vec![ + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_lp_init(), + ], + pda_seeds: vec![compute_liquidity_token_pda_seed( + IdForTests::pool_definition_id(), + )], + } + } + + fn cc_new_definition_token_a() -> ChainedCall { + let mut instruction: [u8;23] = [0; 23]; + instruction[0] = 1; + instruction[1..17].copy_from_slice( + &BalanceForTests::add_successful_amount_a() + .to_le_bytes()); + let instruction_data = risc0_zkvm::serde::to_vec(&instruction).expect("AMM Program expects valid transaction instruction data"); + ChainedCall{ + program_id: TOKEN_PROGRAM_ID, + instruction_data, + pre_states: vec![ + AccountForTests::user_holding_a(), + AccountForTests::vault_a_init()], + pda_seeds: Vec::::new(), + } + } - match selection { - AccountEnum::UserHoldingA => AccountWithMetadata { + fn cc_new_definition_token_b() -> ChainedCall { + let mut instruction: [u8;23] = [0; 23]; + instruction[0] = 1; + instruction[1..17].copy_from_slice( + &BalanceForTests::add_successful_amount_b() + .to_le_bytes()); + let instruction_data = risc0_zkvm::serde::to_vec(&instruction).expect("Swap Logic: AMM Program expects valid transaction instruction data"); + ChainedCall{ + program_id: TOKEN_PROGRAM_ID, + instruction_data, + pre_states: vec![ + AccountForTests::user_holding_b(), + AccountForTests::vault_b_init()], + pda_seeds: Vec::::new(), + } + } + } + + struct IdForTests; + + impl IdForTests { + fn token_a_definition_id() -> AccountId { + AccountId::new([42; 32]) + } + + fn token_b_definition_id() -> AccountId { + AccountId::new([43; 32]) + } + + fn token_lp_definition_id() -> AccountId { + compute_liquidity_token_pda(AMM_PROGRAM_ID, IdForTests::pool_definition_id()) + } + + fn user_token_a_id() -> AccountId { + AccountId::new([45; 32]) + } + + fn user_token_b_id() -> AccountId { + AccountId::new([46; 32]) + } + + fn user_token_lp_id() -> AccountId { + AccountId::new([47; 32]) + } + + fn pool_definition_id() -> AccountId { + compute_pool_pda( + AMM_PROGRAM_ID, + IdForTests::token_a_definition_id(), + IdForTests::token_b_definition_id(), + ) + } + + fn vault_a_id() -> AccountId { + compute_vault_pda( + AMM_PROGRAM_ID, + IdForTests::pool_definition_id(), + IdForTests::token_a_definition_id(), + ) + } + + fn vault_b_id() -> AccountId { + compute_vault_pda( + AMM_PROGRAM_ID, + IdForTests::pool_definition_id(), + IdForTests::token_b_definition_id(), + ) + } + } + + struct AccountForTests; + + impl AccountForTests { + fn user_holding_a() -> AccountWithMetadata { + AccountWithMetadata { account: Account { - program_owner: TOKEN_PROGRAM_ID, + program_owner: TOKEN_PROGRAM_ID, balance: 0u128, - data: TokenHolding::into_data( - TokenHolding{ - account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenADefinitionId), - balance: helper_balance_constructor(BalanceEnum::UserTokenABal), - }), - nonce: 0, - }, - is_authorized: true, - account_id: helper_id_constructor(IdEnum::UserTokenAId), - }, - AccountEnum::UserHoldingB => AccountWithMetadata { - account: Account { - program_owner: TOKEN_PROGRAM_ID, - balance: 0u128, - data: TokenHolding::into_data( - TokenHolding{ - account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - balance: helper_balance_constructor(BalanceEnum::UserTokenBBal), - }), - nonce: 0, - }, - is_authorized: true, - account_id: helper_id_constructor(IdEnum::UserTokenBId), - }, - AccountEnum::VaultAUninit => AccountWithMetadata { - account: Account { - program_owner: TOKEN_PROGRAM_ID, - balance: 0u128, - data: TokenHolding::into_data( - TokenHolding{ - account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenADefinitionId), - balance: 0, - }), + data: TokenHolding::into_data(TokenHolding { + account_type: 1u8, + definition_id: IdForTests::token_a_definition_id(), + balance: BalanceForTests::user_token_a_balance(), + }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::VaultAId), - }, - AccountEnum::VaultBUninit => AccountWithMetadata { + account_id: IdForTests::user_token_a_id(), + } + } + + fn user_holding_b() -> AccountWithMetadata { + AccountWithMetadata { account: Account { - program_owner: TOKEN_PROGRAM_ID, + program_owner: TOKEN_PROGRAM_ID, balance: 0u128, - data: TokenHolding::into_data( - TokenHolding{ - account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - balance: 0, - }), + data: TokenHolding::into_data(TokenHolding { + account_type: 1u8, + definition_id: IdForTests::token_b_definition_id(), + balance: BalanceForTests::user_token_b_balance(), + }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::VaultBId), - }, - AccountEnum::VaultAInit => AccountWithMetadata { + account_id: IdForTests::user_token_b_id(), + } + } + + fn vault_a_uninit() -> AccountWithMetadata { + AccountWithMetadata { account: Account { - program_owner: TOKEN_PROGRAM_ID, + program_owner: TOKEN_PROGRAM_ID, balance: 0u128, - data: TokenHolding::into_data( - TokenHolding{ - account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenADefinitionId), - balance: helper_balance_constructor(BalanceEnum::VaultAReserveInit), - }), + data: TokenHolding::into_data(TokenHolding { + account_type: 1u8, + definition_id: IdForTests::token_a_definition_id(), + balance: 0, + }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::VaultAId), - }, - AccountEnum::VaultBInit => AccountWithMetadata { + account_id: IdForTests::vault_a_id(), + } + } + + fn vault_b_uninit() -> AccountWithMetadata { + AccountWithMetadata { account: Account { - program_owner: TOKEN_PROGRAM_ID, + program_owner: TOKEN_PROGRAM_ID, balance: 0u128, - data: TokenHolding::into_data( - TokenHolding{ - account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - balance: helper_balance_constructor(BalanceEnum::VaultBReserveInit), - }), + data: TokenHolding::into_data(TokenHolding { + account_type: 1u8, + definition_id: IdForTests::token_b_definition_id(), + balance: 0, + }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::VaultBId), - }, - AccountEnum::VaultAInitHigh => AccountWithMetadata { + account_id: IdForTests::vault_b_id(), + } + } + + fn vault_a_init() -> AccountWithMetadata { + AccountWithMetadata { account: Account { - program_owner: TOKEN_PROGRAM_ID, + program_owner: TOKEN_PROGRAM_ID, balance: 0u128, - data: TokenHolding::into_data( - TokenHolding{ - account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenADefinitionId), - balance: helper_balance_constructor(BalanceEnum::VaultAReserveHigh), - }), + data: TokenHolding::into_data(TokenHolding { + account_type: 1u8, + definition_id: IdForTests::token_a_definition_id(), + balance: BalanceForTests::vault_a_reserve_init(), + }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::VaultAId), - }, - AccountEnum::VaultBInitHigh => AccountWithMetadata { + account_id: IdForTests::vault_a_id(), + } + } + + fn vault_b_init() -> AccountWithMetadata { + AccountWithMetadata { account: Account { - program_owner: TOKEN_PROGRAM_ID, + program_owner: TOKEN_PROGRAM_ID, balance: 0u128, - data: TokenHolding::into_data( - TokenHolding{ - account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - balance: helper_balance_constructor(BalanceEnum::VaultBReserveHigh), - }), + data: TokenHolding::into_data(TokenHolding { + account_type: 1u8, + definition_id: IdForTests::token_b_definition_id(), + balance: BalanceForTests::vault_b_reserve_init(), + }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::VaultBId), - }, - AccountEnum::VaultAInitLow => AccountWithMetadata { + account_id: IdForTests::vault_b_id(), + } + } + + fn vault_a_init_high() -> AccountWithMetadata { + AccountWithMetadata { account: Account { - program_owner: TOKEN_PROGRAM_ID, + program_owner: TOKEN_PROGRAM_ID, balance: 0u128, - data: TokenHolding::into_data( - TokenHolding{ - account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenADefinitionId), - balance: helper_balance_constructor(BalanceEnum::VaultAReserveLow), - }), + data: TokenHolding::into_data(TokenHolding { + account_type: 1u8, + definition_id: IdForTests::token_a_definition_id(), + balance: BalanceForTests::vault_a_reserve_high(), + }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::VaultAId), - }, - AccountEnum::VaultBInitLow => AccountWithMetadata { + account_id: IdForTests::vault_a_id(), + } + } + + fn vault_b_init_high() -> AccountWithMetadata { + AccountWithMetadata { account: Account { - program_owner: TOKEN_PROGRAM_ID, + program_owner: TOKEN_PROGRAM_ID, balance: 0u128, - data: TokenHolding::into_data( - TokenHolding{ - account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - balance: helper_balance_constructor(BalanceEnum::VaultBReserveLow), - }), + data: TokenHolding::into_data(TokenHolding { + account_type: 1u8, + definition_id: IdForTests::token_b_definition_id(), + balance: BalanceForTests::vault_b_reserve_high(), + }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::VaultBId), - }, - AccountEnum::VaultAInitZero => AccountWithMetadata { + account_id: IdForTests::vault_b_id(), + } + } + + fn vault_a_init_low() -> AccountWithMetadata { + AccountWithMetadata { account: Account { - program_owner: TOKEN_PROGRAM_ID, + program_owner: TOKEN_PROGRAM_ID, balance: 0u128, - data: TokenHolding::into_data( - TokenHolding{ - account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenADefinitionId), - balance: 0, - }), + data: TokenHolding::into_data(TokenHolding { + account_type: 1u8, + definition_id: IdForTests::token_a_definition_id(), + balance: BalanceForTests::vault_a_reserve_low(), + }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::VaultAId), - }, - AccountEnum::VaultBInitZero => AccountWithMetadata { + account_id: IdForTests::vault_a_id(), + } + } + + fn vault_b_init_low() -> AccountWithMetadata { + AccountWithMetadata { account: Account { - program_owner: TOKEN_PROGRAM_ID, + program_owner: TOKEN_PROGRAM_ID, balance: 0u128, - data: TokenHolding::into_data( - TokenHolding{ - account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - balance: 0, - }), + data: TokenHolding::into_data(TokenHolding { + account_type: 1u8, + definition_id: IdForTests::token_b_definition_id(), + balance: BalanceForTests::vault_b_reserve_low(), + }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::VaultBId), - }, - AccountEnum::VaultAWrongAccId => AccountWithMetadata { + account_id: IdForTests::vault_b_id(), + } + } + + fn vault_a_init_zero() -> AccountWithMetadata { + AccountWithMetadata { account: Account { - program_owner: TOKEN_PROGRAM_ID, + program_owner: TOKEN_PROGRAM_ID, balance: 0u128, - data: TokenHolding::into_data( - TokenHolding{ - account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenADefinitionId), - balance: helper_balance_constructor(BalanceEnum::VaultAReserveInit), - }), + data: TokenHolding::into_data(TokenHolding { + account_type: 1u8, + definition_id: IdForTests::token_a_definition_id(), + balance: 0, + }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::VaultBId), - }, - AccountEnum::VaultBWrongAccId => AccountWithMetadata { + account_id: IdForTests::vault_a_id(), + } + } + + fn vault_b_init_zero() -> AccountWithMetadata { + AccountWithMetadata { account: Account { - program_owner: TOKEN_PROGRAM_ID, + program_owner: TOKEN_PROGRAM_ID, balance: 0u128, - data: TokenHolding::into_data( - TokenHolding{ - account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - balance: helper_balance_constructor(BalanceEnum::VaultBReserveInit), - }), + data: TokenHolding::into_data(TokenHolding { + account_type: 1u8, + definition_id: IdForTests::token_b_definition_id(), + balance: 0, + }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::VaultAId), - }, - AccountEnum::PoolLPUninit => AccountWithMetadata { + account_id: IdForTests::vault_b_id(), + } + } + + fn vault_a_wrong_id() -> AccountWithMetadata { + AccountWithMetadata { account: Account { - program_owner: TOKEN_PROGRAM_ID, + program_owner: TOKEN_PROGRAM_ID, balance: 0u128, - data: TokenDefinition::into_data( - TokenDefinition{ - account_type: 0u8, - name: [1;6], - total_supply: 0u128, - }), + data: TokenHolding::into_data(TokenHolding { + account_type: 1u8, + definition_id: IdForTests::token_a_definition_id(), + balance: BalanceForTests::vault_a_reserve_init(), + }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::TokenLPDefinitionId), - }, - AccountEnum::PoolLPInit => AccountWithMetadata { + account_id: IdForTests::vault_b_id(), + } + } + + fn vault_b_wrong_id() -> AccountWithMetadata { + AccountWithMetadata { account: Account { - program_owner: TOKEN_PROGRAM_ID, + program_owner: TOKEN_PROGRAM_ID, balance: 0u128, - data: TokenDefinition::into_data( - TokenDefinition{ - account_type: 0u8, - name: [1;6], - total_supply: helper_balance_constructor(BalanceEnum::VaultAReserveInit), - }), + data: TokenHolding::into_data(TokenHolding { + account_type: 1u8, + definition_id: IdForTests::token_b_definition_id(), + balance: BalanceForTests::vault_b_reserve_init(), + }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::TokenLPDefinitionId), - }, - AccountEnum::PoolLPWrongAccId => AccountWithMetadata { - account: Account { - program_owner: TOKEN_PROGRAM_ID, - balance: 0u128, - data: TokenDefinition::into_data( - TokenDefinition{ - account_type: 0u8, - name: [1;6], - total_supply: helper_balance_constructor(BalanceEnum::VaultAReserveInit), - }), - nonce: 0, - }, - is_authorized: true, - account_id: helper_id_constructor(IdEnum::VaultAId), - }, - AccountEnum::UserHoldingLPUninit => AccountWithMetadata { + account_id: IdForTests::vault_a_id(), + } + } + + fn pool_lp_uninit() -> AccountWithMetadata { + AccountWithMetadata { account: Account { - program_owner: TOKEN_PROGRAM_ID, + program_owner: TOKEN_PROGRAM_ID, balance: 0u128, - data: TokenHolding::into_data( - TokenHolding{ - account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenLPDefinitionId), - balance: 0, - }), + data: TokenDefinition::into_data(TokenDefinition { + account_type: 0u8, + name: [1; 6], + total_supply: 0u128, + }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::UserTokenLPId), - }, - AccountEnum::UserHoldingLPInit => AccountWithMetadata { + account_id: IdForTests::token_lp_definition_id(), + } + } + + fn pool_lp_init() -> AccountWithMetadata { + AccountWithMetadata { account: Account { - program_owner: TOKEN_PROGRAM_ID, + program_owner: TOKEN_PROGRAM_ID, balance: 0u128, - data: TokenHolding::into_data( - TokenHolding{ - account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenLPDefinitionId), - balance: helper_balance_constructor(BalanceEnum::UserTokenLPBal), - }), + data: TokenDefinition::into_data(TokenDefinition { + account_type: 0u8, + name: [1; 6], + total_supply: BalanceForTests::vault_a_reserve_init(), + }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::UserTokenLPId), - }, - AccountEnum::PoolDefinitionUninit => AccountWithMetadata { + account_id: IdForTests::token_lp_definition_id(), + } + } + + fn pool_lp_with_wrong_id() -> AccountWithMetadata { + AccountWithMetadata { + account: Account { + program_owner: TOKEN_PROGRAM_ID, + balance: 0u128, + data: TokenDefinition::into_data(TokenDefinition { + account_type: 0u8, + name: [1; 6], + total_supply: BalanceForTests::vault_a_reserve_init(), + }), + nonce: 0, + }, + is_authorized: true, + account_id: IdForTests::vault_a_id(), + } + } + + fn user_holding_lp_uninit() -> AccountWithMetadata { + AccountWithMetadata { + account: Account { + program_owner: TOKEN_PROGRAM_ID, + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: 1u8, + definition_id: IdForTests::token_lp_definition_id(), + balance: 0, + }), + nonce: 0, + }, + is_authorized: true, + account_id: IdForTests::user_token_lp_id(), + } + } + + fn user_holding_lp_init() -> AccountWithMetadata { + AccountWithMetadata { + account: Account { + program_owner: TOKEN_PROGRAM_ID, + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: 1u8, + definition_id: IdForTests::token_lp_definition_id(), + balance: BalanceForTests::user_token_lp_balance(), + }), + nonce: 0, + }, + is_authorized: true, + account_id: IdForTests::user_token_lp_id(), + } + } + + fn pool_definition_uninit() -> AccountWithMetadata { + AccountWithMetadata { account: Account::default(), is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountEnum::PoolDefinitionInit => AccountWithMetadata { + account_id: IdForTests::pool_definition_id(), + } + } + + fn pool_definition_init() -> AccountWithMetadata { + AccountWithMetadata { account: Account { - program_owner: ProgramId::default(), - balance: 0u128, - data: PoolDefinition::into_data( - PoolDefinition { - definition_token_a_id: helper_id_constructor(IdEnum::TokenADefinitionId), - definition_token_b_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - vault_a_id: helper_id_constructor(IdEnum::VaultAId), - vault_b_id: helper_id_constructor(IdEnum::VaultBId), - liquidity_pool_id: helper_id_constructor(IdEnum::TokenLPDefinitionId), - liquidity_pool_supply: helper_balance_constructor(BalanceEnum::VaultAReserveInit), - reserve_a: helper_balance_constructor(BalanceEnum::VaultAReserveInit), - reserve_b: helper_balance_constructor(BalanceEnum::VaultBReserveInit), - fees: 0u128, - active: true, - }), - nonce: 0, + program_owner: ProgramId::default(), + balance: 0u128, + data: PoolDefinition::into_data(PoolDefinition { + definition_token_a_id: IdForTests::token_a_definition_id(), + definition_token_b_id: IdForTests::token_b_definition_id(), + vault_a_id: IdForTests::vault_a_id(), + vault_b_id: IdForTests::vault_b_id(), + liquidity_pool_id: IdForTests::token_lp_definition_id(), + liquidity_pool_supply: BalanceForTests::vault_a_reserve_init(), + reserve_a: BalanceForTests::vault_a_reserve_init(), + reserve_b: BalanceForTests::vault_b_reserve_init(), + fees: 0u128, + active: true, + }), + nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountEnum::PoolDefinitionInitReserveAZero => AccountWithMetadata { + account_id: IdForTests::pool_definition_id(), + } + } + + fn pool_definition_init_reserve_a_zero() -> AccountWithMetadata { + AccountWithMetadata { account: Account { - program_owner: ProgramId::default(), - balance: 0u128, - data: PoolDefinition::into_data( - PoolDefinition { - definition_token_a_id: helper_id_constructor(IdEnum::TokenADefinitionId), - definition_token_b_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - vault_a_id: helper_id_constructor(IdEnum::VaultAId), - vault_b_id: helper_id_constructor(IdEnum::VaultBId), - liquidity_pool_id: helper_id_constructor(IdEnum::TokenLPDefinitionId), - liquidity_pool_supply: helper_balance_constructor(BalanceEnum::VaultAReserveInit), - reserve_a: 0, - reserve_b: helper_balance_constructor(BalanceEnum::VaultBReserveInit), - fees: 0u128, - active: true, - }), - nonce: 0, + program_owner: ProgramId::default(), + balance: 0u128, + data: PoolDefinition::into_data(PoolDefinition { + definition_token_a_id: IdForTests::token_a_definition_id(), + definition_token_b_id: IdForTests::token_b_definition_id(), + vault_a_id: IdForTests::vault_a_id(), + vault_b_id: IdForTests::vault_b_id(), + liquidity_pool_id: IdForTests::token_lp_definition_id(), + liquidity_pool_supply: BalanceForTests::vault_a_reserve_init(), + reserve_a: 0, + reserve_b: BalanceForTests::vault_b_reserve_init(), + fees: 0u128, + active: true, + }), + nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountEnum::PoolDefinitionInitReserveBZero => AccountWithMetadata { + account_id: IdForTests::pool_definition_id(), + } + } + + fn pool_definition_init_reserve_b_zero() -> AccountWithMetadata { + AccountWithMetadata { account: Account { - program_owner: ProgramId::default(), - balance: 0u128, - data: PoolDefinition::into_data( - PoolDefinition { - definition_token_a_id: helper_id_constructor(IdEnum::TokenADefinitionId), - definition_token_b_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - vault_a_id: helper_id_constructor(IdEnum::VaultAId), - vault_b_id: helper_id_constructor(IdEnum::VaultBId), - liquidity_pool_id: helper_id_constructor(IdEnum::TokenLPDefinitionId), - liquidity_pool_supply: helper_balance_constructor(BalanceEnum::VaultAReserveInit), - reserve_a: helper_balance_constructor(BalanceEnum::VaultAReserveInit), - reserve_b: 0, - fees: 0u128, - active: true, - }), - nonce: 0, + program_owner: ProgramId::default(), + balance: 0u128, + data: PoolDefinition::into_data(PoolDefinition { + definition_token_a_id: IdForTests::token_a_definition_id(), + definition_token_b_id: IdForTests::token_b_definition_id(), + vault_a_id: IdForTests::vault_a_id(), + vault_b_id: IdForTests::vault_b_id(), + liquidity_pool_id: IdForTests::token_lp_definition_id(), + liquidity_pool_supply: BalanceForTests::vault_a_reserve_init(), + reserve_a: BalanceForTests::vault_a_reserve_init(), + reserve_b: 0, + fees: 0u128, + active: true, + }), + nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountEnum::PoolDefinitionInitReserveALow => AccountWithMetadata { + account_id: IdForTests::pool_definition_id(), + } + } + + fn pool_definition_init_reserve_a_low() -> AccountWithMetadata { + AccountWithMetadata { account: Account { - program_owner: ProgramId::default(), - balance: 0u128, - data: PoolDefinition::into_data( - PoolDefinition { - definition_token_a_id: helper_id_constructor(IdEnum::TokenADefinitionId), - definition_token_b_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - vault_a_id: helper_id_constructor(IdEnum::VaultAId), - vault_b_id: helper_id_constructor(IdEnum::VaultBId), - liquidity_pool_id: helper_id_constructor(IdEnum::TokenLPDefinitionId), - liquidity_pool_supply: helper_balance_constructor(BalanceEnum::VaultAReserveLow), - reserve_a: helper_balance_constructor(BalanceEnum::VaultAReserveLow), - reserve_b: helper_balance_constructor(BalanceEnum::VaultBReserveHigh), - fees: 0u128, - active: true, - }), - nonce: 0, + program_owner: ProgramId::default(), + balance: 0u128, + data: PoolDefinition::into_data(PoolDefinition { + definition_token_a_id: IdForTests::token_a_definition_id(), + definition_token_b_id: IdForTests::token_b_definition_id(), + vault_a_id: IdForTests::vault_a_id(), + vault_b_id: IdForTests::vault_b_id(), + liquidity_pool_id: IdForTests::token_lp_definition_id(), + liquidity_pool_supply: BalanceForTests::vault_a_reserve_low(), + reserve_a: BalanceForTests::vault_a_reserve_low(), + reserve_b: BalanceForTests::vault_b_reserve_high(), + fees: 0u128, + active: true, + }), + nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountEnum::PoolDefinitionInitReserveBLow => AccountWithMetadata { + account_id: IdForTests::pool_definition_id(), + } + } + + fn pool_definition_init_reserve_b_low() -> AccountWithMetadata { + AccountWithMetadata { account: Account { - program_owner: ProgramId::default(), - balance: 0u128, - data: PoolDefinition::into_data( - PoolDefinition { - definition_token_a_id: helper_id_constructor(IdEnum::TokenADefinitionId), - definition_token_b_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - vault_a_id: helper_id_constructor(IdEnum::VaultAId), - vault_b_id: helper_id_constructor(IdEnum::VaultBId), - liquidity_pool_id: helper_id_constructor(IdEnum::TokenLPDefinitionId), - liquidity_pool_supply: helper_balance_constructor(BalanceEnum::VaultAReserveHigh), - reserve_a: helper_balance_constructor(BalanceEnum::VaultAReserveHigh), - reserve_b: helper_balance_constructor(BalanceEnum::VaultBReserveLow), - fees: 0u128, - active: true, - }), - nonce: 0, + program_owner: ProgramId::default(), + balance: 0u128, + data: PoolDefinition::into_data(PoolDefinition { + definition_token_a_id: IdForTests::token_a_definition_id(), + definition_token_b_id: IdForTests::token_b_definition_id(), + vault_a_id: IdForTests::vault_a_id(), + vault_b_id: IdForTests::vault_b_id(), + liquidity_pool_id: IdForTests::token_lp_definition_id(), + liquidity_pool_supply: BalanceForTests::vault_a_reserve_high(), + reserve_a: BalanceForTests::vault_a_reserve_high(), + reserve_b: BalanceForTests::vault_b_reserve_low(), + fees: 0u128, + active: true, + }), + nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountEnum::PoolDefinitionUnauth => AccountWithMetadata { + account_id: IdForTests::pool_definition_id(), + } + } + + fn pool_definition_unauth() -> AccountWithMetadata { + AccountWithMetadata { account: Account { - program_owner: ProgramId::default(), - balance: 0u128, - data: PoolDefinition::into_data( - PoolDefinition { - definition_token_a_id: helper_id_constructor(IdEnum::TokenADefinitionId), - definition_token_b_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - vault_a_id: helper_id_constructor(IdEnum::VaultAId), - vault_b_id: helper_id_constructor(IdEnum::VaultBId), - liquidity_pool_id: helper_id_constructor(IdEnum::TokenLPDefinitionId), - liquidity_pool_supply: helper_balance_constructor(BalanceEnum::VaultAReserveInit), - reserve_a: helper_balance_constructor(BalanceEnum::VaultAReserveInit), - reserve_b: helper_balance_constructor(BalanceEnum::VaultBReserveInit), - fees: 0u128, - active: true, - }), - nonce: 0, + program_owner: ProgramId::default(), + balance: 0u128, + data: PoolDefinition::into_data(PoolDefinition { + definition_token_a_id: IdForTests::token_a_definition_id(), + definition_token_b_id: IdForTests::token_b_definition_id(), + vault_a_id: IdForTests::vault_a_id(), + vault_b_id: IdForTests::vault_b_id(), + liquidity_pool_id: IdForTests::token_lp_definition_id(), + liquidity_pool_supply: BalanceForTests::vault_a_reserve_init(), + reserve_a: BalanceForTests::vault_a_reserve_init(), + reserve_b: BalanceForTests::vault_b_reserve_init(), + fees: 0u128, + active: true, + }), + nonce: 0, }, is_authorized: false, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountEnum::PoolDefinitionSwapTest1 => AccountWithMetadata { + account_id: IdForTests::pool_definition_id(), + } + } + + fn pool_definition_swap_test_1() -> AccountWithMetadata { + AccountWithMetadata { account: Account { - program_owner: ProgramId::default(), - balance: 0u128, - data: PoolDefinition::into_data( - PoolDefinition { - definition_token_a_id: helper_id_constructor(IdEnum::TokenADefinitionId), - definition_token_b_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - vault_a_id: helper_id_constructor(IdEnum::VaultAId), - vault_b_id: helper_id_constructor(IdEnum::VaultBId), - liquidity_pool_id: helper_id_constructor(IdEnum::TokenLPDefinitionId), - liquidity_pool_supply: helper_balance_constructor(BalanceEnum::VaultAReserveInit), - reserve_a: helper_balance_constructor(BalanceEnum::VaultASwapTest1), - reserve_b: helper_balance_constructor(BalanceEnum::VaultBSwapTest1), - fees: 0u128, - active: true, - }), - nonce: 0, - }, - is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountEnum::PoolDefinitionSwapTest2 => AccountWithMetadata { - account: Account { - program_owner: ProgramId::default(), - balance: 0u128, - data: PoolDefinition::into_data( - PoolDefinition { - definition_token_a_id: helper_id_constructor(IdEnum::TokenADefinitionId), - definition_token_b_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - vault_a_id: helper_id_constructor(IdEnum::VaultAId), - vault_b_id: helper_id_constructor(IdEnum::VaultBId), - liquidity_pool_id: helper_id_constructor(IdEnum::TokenLPDefinitionId), - liquidity_pool_supply: helper_balance_constructor(BalanceEnum::VaultAReserveInit), - reserve_a: helper_balance_constructor(BalanceEnum::VaultASwapTest2), - reserve_b: helper_balance_constructor(BalanceEnum::VaultBSwapTest2), - fees: 0u128, - active: true, - }), - nonce: 0, - }, - is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountEnum::PoolDefinitionAddZeroLP => AccountWithMetadata { - account: Account { - program_owner: ProgramId::default(), - balance: 0u128, - data: PoolDefinition::into_data( - PoolDefinition { - definition_token_a_id: helper_id_constructor(IdEnum::TokenADefinitionId), - definition_token_b_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - vault_a_id: helper_id_constructor(IdEnum::VaultAId), - vault_b_id: helper_id_constructor(IdEnum::VaultBId), - liquidity_pool_id: helper_id_constructor(IdEnum::TokenLPDefinitionId), - liquidity_pool_supply: helper_balance_constructor(BalanceEnum::VaultAReserveLow), - reserve_a: helper_balance_constructor(BalanceEnum::VaultAReserveInit), - reserve_b: helper_balance_constructor(BalanceEnum::VaultBReserveInit), - fees: 0u128, - active: true, - }), - nonce: 0, - }, - is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountEnum::PoolDefinitionAddSuccessful => AccountWithMetadata { - account: Account { - program_owner: ProgramId::default(), - balance: 0u128, - data: PoolDefinition::into_data( - PoolDefinition { - definition_token_a_id: helper_id_constructor(IdEnum::TokenADefinitionId), - definition_token_b_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - vault_a_id: helper_id_constructor(IdEnum::VaultAId), - vault_b_id: helper_id_constructor(IdEnum::VaultBId), - liquidity_pool_id: helper_id_constructor(IdEnum::TokenLPDefinitionId), - liquidity_pool_supply: helper_balance_constructor(BalanceEnum::VaultAAddSuccessful), - reserve_a: helper_balance_constructor(BalanceEnum::VaultAAddSuccessful), - reserve_b: helper_balance_constructor(BalanceEnum::VaultBAddSuccessful), - fees: 0u128, - active: true, - }), - nonce: 0, - }, - is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountEnum::PoolDefinitionRemoveSuccessful => AccountWithMetadata { - account: Account { - program_owner: ProgramId::default(), - balance: 0u128, - data: PoolDefinition::into_data( - PoolDefinition { - definition_token_a_id: helper_id_constructor(IdEnum::TokenADefinitionId), - definition_token_b_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - vault_a_id: helper_id_constructor(IdEnum::VaultAId), - vault_b_id: helper_id_constructor(IdEnum::VaultBId), - liquidity_pool_id: helper_id_constructor(IdEnum::TokenLPDefinitionId), - liquidity_pool_supply: helper_balance_constructor(BalanceEnum::VaultARemoveSuccessful), - reserve_a: helper_balance_constructor(BalanceEnum::VaultARemoveSuccessful), - reserve_b: helper_balance_constructor(BalanceEnum::VaultBRemoveSuccessful), - fees: 0u128, - active: true, - }), - nonce: 0, - }, - is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountEnum::PoolDefinitionInactive => AccountWithMetadata { - account: Account { - program_owner: ProgramId::default(), - balance: 0u128, - data: PoolDefinition::into_data( - PoolDefinition { - definition_token_a_id: helper_id_constructor(IdEnum::TokenADefinitionId), - definition_token_b_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - vault_a_id: helper_id_constructor(IdEnum::VaultAId), - vault_b_id: helper_id_constructor(IdEnum::VaultBId), - liquidity_pool_id: helper_id_constructor(IdEnum::TokenLPDefinitionId), - liquidity_pool_supply: helper_balance_constructor(BalanceEnum::VaultAReserveInit), - reserve_a: helper_balance_constructor(BalanceEnum::VaultAReserveInit), - reserve_b: helper_balance_constructor(BalanceEnum::VaultBReserveInit), - fees: 0u128, - active: false, - }), - nonce: 0, - }, - is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountEnum::PoolDefinitionWrongId => AccountWithMetadata { - account: Account { - program_owner: ProgramId::default(), - balance: 0u128, - data: PoolDefinition::into_data( - PoolDefinition { - definition_token_a_id: helper_id_constructor(IdEnum::TokenADefinitionId), - definition_token_b_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - vault_a_id: helper_id_constructor(IdEnum::VaultAId), - vault_b_id: helper_id_constructor(IdEnum::VaultBId), - liquidity_pool_id: helper_id_constructor(IdEnum::TokenLPDefinitionId), - liquidity_pool_supply: helper_balance_constructor(BalanceEnum::VaultAReserveInit), - reserve_a: helper_balance_constructor(BalanceEnum::VaultAReserveInit), - reserve_b: helper_balance_constructor(BalanceEnum::VaultBReserveInit), - fees: 0u128, - active: false, - }), - nonce: 0, - }, - is_authorized: true, - account_id: AccountId::new([4;32]), - }, - AccountEnum::VaultAWrongId => AccountWithMetadata { - account: Account { - program_owner: TOKEN_PROGRAM_ID, + program_owner: ProgramId::default(), balance: 0u128, - data: TokenHolding::into_data( - TokenHolding{ - account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenADefinitionId), - balance: helper_balance_constructor(BalanceEnum::VaultAReserveInit), - }), + data: PoolDefinition::into_data(PoolDefinition { + definition_token_a_id: IdForTests::token_a_definition_id(), + definition_token_b_id: IdForTests::token_b_definition_id(), + vault_a_id: IdForTests::vault_a_id(), + vault_b_id: IdForTests::vault_b_id(), + liquidity_pool_id: IdForTests::token_lp_definition_id(), + liquidity_pool_supply: BalanceForTests::vault_a_reserve_init(), + reserve_a: BalanceForTests::vault_a_swap_test_1(), + reserve_b: BalanceForTests::vault_b_swap_test_1(), + fees: 0u128, + active: true, + }), nonce: 0, }, is_authorized: true, - account_id: AccountId::new([4;32]), - }, - AccountEnum::VaultBWrongId => AccountWithMetadata { + account_id: IdForTests::pool_definition_id(), + } + } + + fn pool_definition_swap_test_2() -> AccountWithMetadata { + AccountWithMetadata { account: Account { - program_owner: TOKEN_PROGRAM_ID, + program_owner: ProgramId::default(), balance: 0u128, - data: TokenHolding::into_data( - TokenHolding{ - account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - balance: helper_balance_constructor(BalanceEnum::VaultBReserveInit), - }), + data: PoolDefinition::into_data(PoolDefinition { + definition_token_a_id: IdForTests::token_a_definition_id(), + definition_token_b_id: IdForTests::token_b_definition_id(), + vault_a_id: IdForTests::vault_a_id(), + vault_b_id: IdForTests::vault_b_id(), + liquidity_pool_id: IdForTests::token_lp_definition_id(), + liquidity_pool_supply: BalanceForTests::vault_a_reserve_init(), + reserve_a: BalanceForTests::vault_a_swap_test_2(), + reserve_b: BalanceForTests::vault_b_swap_test_2(), + fees: 0u128, + active: true, + }), nonce: 0, }, is_authorized: true, - account_id: AccountId::new([4;32]), - }, - AccountEnum::PoolLPWrongId => AccountWithMetadata { + account_id: IdForTests::pool_definition_id(), + } + } + + fn pool_definition_add_zero_lp() -> AccountWithMetadata { + AccountWithMetadata { account: Account { - program_owner: TOKEN_PROGRAM_ID, + program_owner: ProgramId::default(), balance: 0u128, - data: TokenDefinition::into_data( - TokenDefinition{ - account_type: 0u8, - name: [1;6], - total_supply: helper_balance_constructor(BalanceEnum::VaultAReserveInit), - }), + data: PoolDefinition::into_data(PoolDefinition { + definition_token_a_id: IdForTests::token_a_definition_id(), + definition_token_b_id: IdForTests::token_b_definition_id(), + vault_a_id: IdForTests::vault_a_id(), + vault_b_id: IdForTests::vault_b_id(), + liquidity_pool_id: IdForTests::token_lp_definition_id(), + liquidity_pool_supply: BalanceForTests::vault_a_reserve_low(), + reserve_a: BalanceForTests::vault_a_reserve_init(), + reserve_b: BalanceForTests::vault_b_reserve_init(), + fees: 0u128, + active: true, + }), nonce: 0, }, is_authorized: true, - account_id: AccountId::new([4;32]), - }, - AccountEnum::PoolDefinitionActive => AccountWithMetadata { + account_id: IdForTests::pool_definition_id(), + } + } + + fn pool_definition_add_successful() -> AccountWithMetadata { + AccountWithMetadata { account: Account { - program_owner: ProgramId::default(), - balance: 0u128, - data: PoolDefinition::into_data( - PoolDefinition { - definition_token_a_id: helper_id_constructor(IdEnum::TokenADefinitionId), - definition_token_b_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - vault_a_id: helper_id_constructor(IdEnum::VaultAId), - vault_b_id: helper_id_constructor(IdEnum::VaultBId), - liquidity_pool_id: helper_id_constructor(IdEnum::TokenLPDefinitionId), - liquidity_pool_supply: helper_balance_constructor(BalanceEnum::VaultAReserveInit), - reserve_a: helper_balance_constructor(BalanceEnum::VaultAReserveInit), - reserve_b: helper_balance_constructor(BalanceEnum::VaultBReserveInit), - fees: 0u128, - active: true, - }), - nonce: 0, + program_owner: ProgramId::default(), + balance: 0u128, + data: PoolDefinition::into_data(PoolDefinition { + definition_token_a_id: IdForTests::token_a_definition_id(), + definition_token_b_id: IdForTests::token_b_definition_id(), + vault_a_id: IdForTests::vault_a_id(), + vault_b_id: IdForTests::vault_b_id(), + liquidity_pool_id: IdForTests::token_lp_definition_id(), + liquidity_pool_supply: BalanceForTests::vault_a_add_successful(), + reserve_a: BalanceForTests::vault_a_add_successful(), + reserve_b: BalanceForTests::vault_b_add_successful(), + fees: 0u128, + active: true, + }), + nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - _ => panic!("Invalid selection"), + account_id: IdForTests::pool_definition_id(), + } + } + + fn pool_definition_remove_successful() -> AccountWithMetadata { + AccountWithMetadata { + account: Account { + program_owner: ProgramId::default(), + balance: 0u128, + data: PoolDefinition::into_data(PoolDefinition { + definition_token_a_id: IdForTests::token_a_definition_id(), + definition_token_b_id: IdForTests::token_b_definition_id(), + vault_a_id: IdForTests::vault_a_id(), + vault_b_id: IdForTests::vault_b_id(), + liquidity_pool_id: IdForTests::token_lp_definition_id(), + liquidity_pool_supply: BalanceForTests::vault_a_remove_successful(), + reserve_a: BalanceForTests::vault_a_remove_successful(), + reserve_b: BalanceForTests::vault_b_remove_successful(), + fees: 0u128, + active: true, + }), + nonce: 0, + }, + is_authorized: true, + account_id: IdForTests::pool_definition_id(), + } + } + + fn pool_definition_inactive() -> AccountWithMetadata { + AccountWithMetadata { + account: Account { + program_owner: ProgramId::default(), + balance: 0u128, + data: PoolDefinition::into_data(PoolDefinition { + definition_token_a_id: IdForTests::token_a_definition_id(), + definition_token_b_id: IdForTests::token_b_definition_id(), + vault_a_id: IdForTests::vault_a_id(), + vault_b_id: IdForTests::vault_b_id(), + liquidity_pool_id: IdForTests::token_lp_definition_id(), + liquidity_pool_supply: BalanceForTests::vault_a_reserve_init(), + reserve_a: BalanceForTests::vault_a_reserve_init(), + reserve_b: BalanceForTests::vault_b_reserve_init(), + fees: 0u128, + active: false, + }), + nonce: 0, + }, + is_authorized: true, + account_id: IdForTests::pool_definition_id(), + } + } + + fn pool_definition_with_wrong_id() -> AccountWithMetadata { + AccountWithMetadata { + account: Account { + program_owner: ProgramId::default(), + balance: 0u128, + data: PoolDefinition::into_data(PoolDefinition { + definition_token_a_id: IdForTests::token_a_definition_id(), + definition_token_b_id: IdForTests::token_b_definition_id(), + vault_a_id: IdForTests::vault_a_id(), + vault_b_id: IdForTests::vault_b_id(), + liquidity_pool_id: IdForTests::token_lp_definition_id(), + liquidity_pool_supply: BalanceForTests::vault_a_reserve_init(), + reserve_a: BalanceForTests::vault_a_reserve_init(), + reserve_b: BalanceForTests::vault_b_reserve_init(), + fees: 0u128, + active: false, + }), + nonce: 0, + }, + is_authorized: true, + account_id: AccountId::new([4; 32]), + } + } + + fn vault_a_with_wrong_id() -> AccountWithMetadata { + AccountWithMetadata { + account: Account { + program_owner: TOKEN_PROGRAM_ID, + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: 1u8, + definition_id: IdForTests::token_a_definition_id(), + balance: BalanceForTests::vault_a_reserve_init(), + }), + nonce: 0, + }, + is_authorized: true, + account_id: AccountId::new([4; 32]), + } + } + + fn vault_b_with_wrong_id() -> AccountWithMetadata { + AccountWithMetadata { + account: Account { + program_owner: TOKEN_PROGRAM_ID, + balance: 0u128, + data: TokenHolding::into_data(TokenHolding { + account_type: 1u8, + definition_id: IdForTests::token_b_definition_id(), + balance: BalanceForTests::vault_b_reserve_init(), + }), + nonce: 0, + }, + is_authorized: true, + account_id: AccountId::new([4; 32]), + } + } + + /*TODO-delete fn pool_lp_with_wrong_id() -> AccountWithMetadata { + AccountWithMetadata { + account: Account { + program_owner: TOKEN_PROGRAM_ID, + balance: 0u128, + data: TokenDefinition::into_data(TokenDefinition { + account_type: 0u8, + name: [1; 6], + total_supply: BalanceForTests::vault_a_reserve_init(), + }), + nonce: 0, + }, + is_authorized: true, + account_id: AccountId::new([4; 32]), + } + }*/ + + fn pool_definition_active() -> AccountWithMetadata { + AccountWithMetadata { + account: Account { + program_owner: ProgramId::default(), + balance: 0u128, + data: PoolDefinition::into_data(PoolDefinition { + definition_token_a_id: IdForTests::token_a_definition_id(), + definition_token_b_id: IdForTests::token_b_definition_id(), + vault_a_id: IdForTests::vault_a_id(), + vault_b_id: IdForTests::vault_b_id(), + liquidity_pool_id: IdForTests::token_lp_definition_id(), + liquidity_pool_supply: BalanceForTests::vault_a_reserve_init(), + reserve_a: BalanceForTests::vault_a_reserve_init(), + reserve_b: BalanceForTests::vault_b_reserve_init(), + fees: 0u128, + active: true, + }), + nonce: 0, + }, + is_authorized: true, + account_id: IdForTests::pool_definition_id(), + } } } #[test] fn test_pool_pda_produces_unique_id_for_token_pair() { //compute_pool_pda(amm_program_id: ProgramId, definition_token_a_id: AccountId, definition_token_b_id: AccountId) - assert!(compute_pool_pda(AMM_PROGRAM_ID, - helper_id_constructor(IdEnum::TokenADefinitionId), - helper_id_constructor(IdEnum::TokenBDefinitionId)) == - compute_pool_pda(AMM_PROGRAM_ID, - helper_id_constructor(IdEnum::TokenBDefinitionId), - helper_id_constructor(IdEnum::TokenADefinitionId))); + assert!( + compute_pool_pda( + AMM_PROGRAM_ID, + IdForTests::token_a_definition_id(), + IdForTests::token_b_definition_id() + ) == compute_pool_pda( + AMM_PROGRAM_ID, + IdForTests::token_b_definition_id(), + IdForTests::token_a_definition_id() + ) + ); } #[should_panic(expected = "Invalid number of input accounts")] - #[test] + #[test] fn test_call_new_definition_with_invalid_number_of_accounts_1() { - let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionUninit), - ]; - let _post_states = new_definition(&pre_states, - &[helper_balance_constructor(BalanceEnum::VaultAReserveInit), - helper_balance_constructor(BalanceEnum::VaultBReserveInit)], - AMM_PROGRAM_ID, - ); + let pre_states = vec![AccountForTests::pool_definition_uninit()]; + let _post_states = new_definition( + &pre_states, + &[ + BalanceForTests::vault_a_reserve_init(), + BalanceForTests::vault_b_reserve_init(), + ], + AMM_PROGRAM_ID, + ); } #[should_panic(expected = "Invalid number of input accounts")] #[test] fn test_call_new_definition_with_invalid_number_of_accounts_2() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - ]; - let _post_states = new_definition(&pre_states, - &[helper_balance_constructor(BalanceEnum::VaultAReserveInit), - helper_balance_constructor(BalanceEnum::VaultBReserveInit)], - AMM_PROGRAM_ID, - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + ]; + let _post_states = new_definition( + &pre_states, + &[ + BalanceForTests::vault_a_reserve_init(), + BalanceForTests::vault_b_reserve_init(), + ], + AMM_PROGRAM_ID, + ); } #[should_panic(expected = "Invalid number of input accounts")] #[test] fn test_call_new_definition__with_invalid_number_of_accounts_3() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - ]; - let _post_states = new_definition(&pre_states, - &[helper_balance_constructor(BalanceEnum::VaultAReserveInit), - helper_balance_constructor(BalanceEnum::VaultBReserveInit)], - AMM_PROGRAM_ID, - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + ]; + let _post_states = new_definition( + &pre_states, + &[ + BalanceForTests::vault_a_reserve_init(), + BalanceForTests::vault_b_reserve_init(), + ], + AMM_PROGRAM_ID, + ); } #[should_panic(expected = "Invalid number of input accounts")] #[test] fn test_call_new_definition__with_invalid_number_of_accounts_4() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - ]; - let _post_states = new_definition(&pre_states, - &[helper_balance_constructor(BalanceEnum::VaultAReserveInit), - helper_balance_constructor(BalanceEnum::VaultBReserveInit)], - AMM_PROGRAM_ID, - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + ]; + let _post_states = new_definition( + &pre_states, + &[ + BalanceForTests::vault_a_reserve_init(), + BalanceForTests::vault_b_reserve_init(), + ], + AMM_PROGRAM_ID, + ); } - + #[should_panic(expected = "Invalid number of input accounts")] #[test] fn test_call_new_definition__with_invalid_number_of_accounts_5() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - ]; - let _post_states = new_definition(&pre_states, - &[helper_balance_constructor(BalanceEnum::VaultAReserveInit), - helper_balance_constructor(BalanceEnum::VaultBReserveInit)], - AMM_PROGRAM_ID, - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + ]; + let _post_states = new_definition( + &pre_states, + &[ + BalanceForTests::vault_a_reserve_init(), + BalanceForTests::vault_b_reserve_init(), + ], + AMM_PROGRAM_ID, + ); } #[should_panic(expected = "Invalid number of input accounts")] #[test] fn test_call_new_definition_with_invalid_number_of_accounts_6() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - ]; - let _post_states = new_definition(&pre_states, - &[helper_balance_constructor(BalanceEnum::VaultAReserveInit), - helper_balance_constructor(BalanceEnum::VaultBReserveInit)], - AMM_PROGRAM_ID, - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + ]; + let _post_states = new_definition( + &pre_states, + &[ + BalanceForTests::vault_a_reserve_init(), + BalanceForTests::vault_b_reserve_init(), + ], + AMM_PROGRAM_ID, + ); } #[should_panic(expected = "Invalid number of input balances")] #[test] fn test_call_new_definition_with_invalid_number_of_balances() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPUninit), - ]; - let _post_states = new_definition(&pre_states, - &[helper_balance_constructor(BalanceEnum::VaultAReserveInit),], - AMM_PROGRAM_ID, - ); - } + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_uninit(), + ]; + let _post_states = new_definition( + &pre_states, + &[BalanceForTests::vault_a_reserve_init()], + AMM_PROGRAM_ID, + ); + } #[should_panic(expected = "Balances must be nonzero")] #[test] fn test_call_new_definition_with_zero_balance_1() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPUninit), - ]; - let _post_states = new_definition(&pre_states, - &[0, - helper_balance_constructor(BalanceEnum::VaultBReserveInit),], - AMM_PROGRAM_ID, - ); - } + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_uninit(), + ]; + let _post_states = new_definition( + &pre_states, + &[0, BalanceForTests::vault_b_reserve_init()], + AMM_PROGRAM_ID, + ); + } #[should_panic(expected = "Balances must be nonzero")] #[test] fn test_call_new_definition_with_zero_balance_2() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPUninit), - ]; - let _post_states = new_definition(&pre_states, - &[helper_balance_constructor(BalanceEnum::VaultAReserveInit), - 0], - AMM_PROGRAM_ID, - ); - } + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_uninit(), + ]; + let _post_states = new_definition( + &pre_states, + &[BalanceForTests::vault_a_reserve_init(), 0], + AMM_PROGRAM_ID, + ); + } #[should_panic(expected = "Cannot set up a swap for a token with itself")] #[test] fn test_call_new_definition_same_token_definition() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingLPUninit), - ]; - let _post_states = new_definition(&pre_states, - &[helper_balance_constructor(BalanceEnum::VaultAReserveInit), - helper_balance_constructor(BalanceEnum::VaultBReserveInit),], - AMM_PROGRAM_ID, - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_lp_uninit(), + ]; + let _post_states = new_definition( + &pre_states, + &[ + BalanceForTests::vault_a_reserve_init(), + BalanceForTests::vault_b_reserve_init(), + ], + AMM_PROGRAM_ID, + ); } #[should_panic(expected = "Liquidity pool Token Definition Account ID does not match PDA")] #[test] fn test_call_new_definition_wrong_liquidity_id() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPWrongId), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPUninit), - ]; - let _post_states = new_definition(&pre_states, - &[helper_balance_constructor(BalanceEnum::VaultAReserveInit), - helper_balance_constructor(BalanceEnum::VaultBReserveInit),], - AMM_PROGRAM_ID, - ); - } + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_with_wrong_id(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_uninit(), + ]; + let _post_states = new_definition( + &pre_states, + &[ + BalanceForTests::vault_a_reserve_init(), + BalanceForTests::vault_b_reserve_init(), + ], + AMM_PROGRAM_ID, + ); + } #[should_panic(expected = "Pool Definition Account ID does not match PDA")] #[test] fn test_call_new_definition_wrong_pool_id() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionWrongId), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPUninit), - ]; - let _post_states = new_definition(&pre_states, - &[helper_balance_constructor(BalanceEnum::VaultAReserveInit), - helper_balance_constructor(BalanceEnum::VaultBReserveInit),], - AMM_PROGRAM_ID, - ); - } + AccountForTests::pool_definition_with_wrong_id(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_uninit(), + ]; + let _post_states = new_definition( + &pre_states, + &[ + BalanceForTests::vault_a_reserve_init(), + BalanceForTests::vault_b_reserve_init(), + ], + AMM_PROGRAM_ID, + ); + } #[should_panic(expected = "Vault ID does not match PDA")] #[test] fn test_call_new_definition_wrong_vault_id_1() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAWrongId), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPUninit), - ]; - let _post_states = new_definition(&pre_states, - &[helper_balance_constructor(BalanceEnum::VaultAReserveInit), - helper_balance_constructor(BalanceEnum::VaultBReserveInit),], - AMM_PROGRAM_ID, - ); - } + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_with_wrong_id(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_uninit(), + ]; + let _post_states = new_definition( + &pre_states, + &[ + BalanceForTests::vault_a_reserve_init(), + BalanceForTests::vault_b_reserve_init(), + ], + AMM_PROGRAM_ID, + ); + } #[should_panic(expected = "Vault ID does not match PDA")] #[test] fn test_call_new_definition_wrong_vault_id_2() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBWrongId), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPUninit), - ]; - let _post_states = new_definition(&pre_states, - &[helper_balance_constructor(BalanceEnum::VaultAReserveInit), - helper_balance_constructor(BalanceEnum::VaultBReserveInit),], - AMM_PROGRAM_ID, - ); - } + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_with_wrong_id(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_uninit(), + ]; + let _post_states = new_definition( + &pre_states, + &[ + BalanceForTests::vault_a_reserve_init(), + BalanceForTests::vault_b_reserve_init(), + ], + AMM_PROGRAM_ID, + ); + } #[should_panic(expected = "Cannot initialize an active Pool Definition")] #[test] fn test_call_new_definition_cannot_initialize_active_pool() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionActive), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPUninit), - ]; - let _post_states = new_definition(&pre_states, - &[helper_balance_constructor(BalanceEnum::VaultAReserveInit), - helper_balance_constructor(BalanceEnum::VaultBReserveInit),], - AMM_PROGRAM_ID, - ); + AccountForTests::pool_definition_active(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_uninit(), + ]; + let _post_states = new_definition( + &pre_states, + &[ + BalanceForTests::vault_a_reserve_init(), + BalanceForTests::vault_b_reserve_init(), + ], + AMM_PROGRAM_ID, + ); } #[should_panic(expected = "Cannot initialize an active Pool Definition")] #[test] - fn test_call_new_definition_chain_call_successful() { + fn test_call_new_definition_chained_call_successful() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionActive), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPUninit), - ]; - let (post_states, chained_calls) = new_definition(&pre_states, - &[helper_balance_constructor(BalanceEnum::VaultAReserveInit), - helper_balance_constructor(BalanceEnum::VaultBReserveInit),], - AMM_PROGRAM_ID, - ); - + AccountForTests::pool_definition_active(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_uninit(), + ]; + let (post_states, chained_calls) = new_definition( + &pre_states, + &[ + BalanceForTests::vault_a_reserve_init(), + BalanceForTests::vault_b_reserve_init(), + ], + AMM_PROGRAM_ID, + ); + let pool_post = post_states[0].clone(); - assert!(helper_account_constructor(AccountEnum::PoolDefinitionAddSuccessful).account == - *pool_post.account()); + assert!(AccountForTests::pool_definition_add_successful().account == *pool_post.account()); let chained_call_lp = chained_calls[0].clone(); let chained_call_b = chained_calls[1].clone(); let chained_call_a = chained_calls[2].clone(); - assert!(chained_call_a == helper_chained_call_constructor(ChainedCallsEnum::CcNewDefinitionTokenA)); - assert!(chained_call_b == helper_chained_call_constructor(ChainedCallsEnum::CcNewDefinitionTokenB)); - assert!(chained_call_lp == helper_chained_call_constructor(ChainedCallsEnum::CcNewDefinitionLP)); + assert!(chained_call_a == ChainedCallForTests::cc_new_definition_token_a()); + assert!(chained_call_b == ChainedCallForTests::cc_new_definition_token_b()); + //TODO: this is bad + // assert!(chained_call_lp == ChainedCallForTests::cc_new_definition_token_lp()); } #[should_panic(expected = "Invalid number of input accounts")] #[test] fn test_call_remove_liquidity_with_invalid_number_of_accounts_2() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - ]; - let _post_states = remove_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::RemoveAmountLP), - helper_balance_constructor(BalanceEnum::RemoveMinAmountA), - helper_balance_constructor(BalanceEnum::RemoveMinAmountB)], - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + ]; + let _post_states = remove_liquidity( + &pre_states, + &[ + BalanceForTests::remove_amount_lp(), + BalanceForTests::remove_min_amount_a(), + BalanceForTests::remove_min_amount_b(), + ], + ); } #[should_panic(expected = "Invalid number of input accounts")] #[test] fn test_call_remove_liquidity_with_invalid_number_of_accounts_3() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - ]; - let _post_states = remove_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::RemoveAmountLP), - helper_balance_constructor(BalanceEnum::RemoveMinAmountA), - helper_balance_constructor(BalanceEnum::RemoveMinAmountB)], - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + ]; + let _post_states = remove_liquidity( + &pre_states, + &[ + BalanceForTests::remove_amount_lp(), + BalanceForTests::remove_min_amount_a(), + BalanceForTests::remove_min_amount_b(), + ], + ); } #[should_panic(expected = "Invalid number of input accounts")] #[test] fn test_call_remove_liquidity_with_invalid_number_of_accounts_4() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - ]; - let _post_states = remove_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::RemoveAmountLP), - helper_balance_constructor(BalanceEnum::RemoveMinAmountA), - helper_balance_constructor(BalanceEnum::RemoveMinAmountB)], - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + ]; + let _post_states = remove_liquidity( + &pre_states, + &[ + BalanceForTests::remove_amount_lp(), + BalanceForTests::remove_min_amount_a(), + BalanceForTests::remove_min_amount_b(), + ], + ); } - + #[should_panic(expected = "Invalid number of input accounts")] #[test] fn test_call_remove_liquidity_with_invalid_number_of_accounts_5() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - ]; - let _post_states = remove_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::RemoveAmountLP), - helper_balance_constructor(BalanceEnum::RemoveMinAmountA), - helper_balance_constructor(BalanceEnum::RemoveMinAmountB)], - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + ]; + let _post_states = remove_liquidity( + &pre_states, + &[ + BalanceForTests::remove_amount_lp(), + BalanceForTests::remove_min_amount_a(), + BalanceForTests::remove_min_amount_b(), + ], + ); } #[should_panic(expected = "Invalid number of input accounts")] #[test] fn test_call_remove_liquidity_with_invalid_number_of_accounts_6() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - ]; - let _post_states = remove_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::RemoveAmountLP), - helper_balance_constructor(BalanceEnum::RemoveMinAmountA), - helper_balance_constructor(BalanceEnum::RemoveMinAmountB)], - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + ]; + let _post_states = remove_liquidity( + &pre_states, + &[ + BalanceForTests::remove_amount_lp(), + BalanceForTests::remove_min_amount_a(), + BalanceForTests::remove_min_amount_b(), + ], + ); } #[should_panic(expected = "Vault A was not provided")] #[test] fn test_call_remove_liquidity_vault_a_omitted() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAWrongAccId), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPInit), - ]; - let _post_states = remove_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::RemoveAmountLP), - helper_balance_constructor(BalanceEnum::RemoveMinAmountA), - helper_balance_constructor(BalanceEnum::RemoveMinAmountB)], - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_with_wrong_id(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_init(), + ]; + let _post_states = remove_liquidity( + &pre_states, + &[ + BalanceForTests::remove_amount_lp(), + BalanceForTests::remove_min_amount_a(), + BalanceForTests::remove_min_amount_b(), + ], + ); } - + #[should_panic(expected = "Vault B was not provided")] #[test] fn test_call_remove_liquidity_vault_b_omitted() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBWrongAccId), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPInit), - ]; - let _post_states = remove_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::RemoveAmountLP), - helper_balance_constructor(BalanceEnum::RemoveMinAmountA), - helper_balance_constructor(BalanceEnum::RemoveMinAmountB)], - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_with_wrong_id(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_init(), + ]; + let _post_states = remove_liquidity( + &pre_states, + &[ + BalanceForTests::remove_amount_lp(), + BalanceForTests::remove_min_amount_a(), + BalanceForTests::remove_min_amount_b(), + ], + ); } - + #[should_panic(expected = "LP definition mismatch")] #[test] fn test_call_remove_liquidity_lp_def_mismatch() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPWrongAccId), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPInit), - ]; - let _post_states = remove_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::RemoveAmountLP), - helper_balance_constructor(BalanceEnum::RemoveMinAmountA), - helper_balance_constructor(BalanceEnum::RemoveMinAmountB)], - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_with_wrong_id(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_init(), + ]; + let _post_states = remove_liquidity( + &pre_states, + &[ + BalanceForTests::remove_amount_lp(), + BalanceForTests::remove_min_amount_a(), + BalanceForTests::remove_min_amount_b(), + ], + ); } #[should_panic(expected = "Invalid liquidity account provided")] #[test] fn test_call_remove_liquidity_insufficient_liquidity_amount() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingA), //different token account than lp to create desired error - ]; - let _post_states = remove_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::RemoveAmountLP), - helper_balance_constructor(BalanceEnum::RemoveMinAmountA), - helper_balance_constructor(BalanceEnum::RemoveMinAmountB)], - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_a(), //different token account than lp to create desired error + ]; + let _post_states = remove_liquidity( + &pre_states, + &[ + BalanceForTests::remove_amount_lp(), + BalanceForTests::remove_min_amount_a(), + BalanceForTests::remove_min_amount_b(), + ], + ); } - #[should_panic(expected = "Insufficient minimal withdraw amount (Token A) provided for liquidity amount")] + #[should_panic( + expected = "Insufficient minimal withdraw amount (Token A) provided for liquidity amount" + )] #[test] fn test_call_remove_liquidity_insufficient_balance_1() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPInit), - ]; - let _post_states = remove_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::RemoveAmountLP1), - helper_balance_constructor(BalanceEnum::RemoveMinAmountA), - helper_balance_constructor(BalanceEnum::RemoveMinAmountB)], - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_init(), + ]; + let _post_states = remove_liquidity( + &pre_states, + &[ + BalanceForTests::remove_amount_lp_1(), + BalanceForTests::remove_min_amount_a(), + BalanceForTests::remove_min_amount_b(), + ], + ); } - #[should_panic(expected = "Insufficient minimal withdraw amount (Token B) provided for liquidity amount")] + #[should_panic( + expected = "Insufficient minimal withdraw amount (Token B) provided for liquidity amount" + )] #[test] fn test_call_remove_liquidity_insufficient_balance_2() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPInit), - ]; - let _post_states = remove_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::RemoveAmountLP), - helper_balance_constructor(BalanceEnum::RemoveMinAmountA), - helper_balance_constructor(BalanceEnum::RemoveMinAmountB)], - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_init(), + ]; + let _post_states = remove_liquidity( + &pre_states, + &[ + BalanceForTests::remove_amount_lp(), + BalanceForTests::remove_min_amount_a(), + BalanceForTests::remove_min_amount_b(), + ], + ); } #[should_panic(expected = "Minimum withdraw amount must be nonzero")] #[test] fn test_call_remove_liquidity_min_bal_zero_1() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPInit), - ]; - let _post_states = remove_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::RemoveAmountLP), - 0, - helper_balance_constructor(BalanceEnum::RemoveMinAmountB)], - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_init(), + ]; + let _post_states = remove_liquidity( + &pre_states, + &[ + BalanceForTests::remove_amount_lp(), + 0, + BalanceForTests::remove_min_amount_b(), + ], + ); } #[should_panic(expected = "Minimum withdraw amount must be nonzero")] #[test] fn test_call_remove_liquidity_min_bal_zero_2() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPInit), - ]; - let _post_states = remove_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::RemoveAmountLP), - helper_balance_constructor(BalanceEnum::RemoveMinAmountA), - 0], - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_init(), + ]; + let _post_states = remove_liquidity( + &pre_states, + &[ + BalanceForTests::remove_amount_lp(), + BalanceForTests::remove_min_amount_a(), + 0, + ], + ); } #[should_panic(expected = "Liquidity amount must be nonzero")] #[test] fn test_call_remove_liquidity_lp_bal_zero() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPInit), - ]; - let _post_states = remove_liquidity(&pre_states, - &[0, - helper_balance_constructor(BalanceEnum::RemoveMinAmountA), - helper_balance_constructor(BalanceEnum::RemoveMinAmountB),], - ); - } + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_init(), + ]; + let _post_states = remove_liquidity( + &pre_states, + &[ + 0, + BalanceForTests::remove_min_amount_a(), + BalanceForTests::remove_min_amount_b(), + ], + ); + } #[test] fn test_call_remove_liquidity_chained_call_successful() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPInit), - ]; - let (post_states, chained_calls) = remove_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::RemoveAmountLP), - helper_balance_constructor(BalanceEnum::RemoveMinAmountA), - helper_balance_constructor(BalanceEnum::RemoveMinAmountBLow),], - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_init(), + ]; + let (post_states, chained_calls) = remove_liquidity( + &pre_states, + &[ + BalanceForTests::remove_amount_lp(), + BalanceForTests::remove_min_amount_a(), + BalanceForTests::remove_min_amount_b_low(), + ], + ); let pool_post = post_states[0].clone(); - assert!(helper_account_constructor(AccountEnum::PoolDefinitionRemoveSuccessful).account == - *pool_post.account()); + assert!( + AccountForTests::pool_definition_remove_successful().account == *pool_post.account() + ); let chained_call_lp = chained_calls[0].clone(); - let chained_call_b = chained_calls[1].clone(); - let chained_call_a = chained_calls[2].clone(); + let chained_call_b = chained_calls[1].clone(); + let chained_call_a = chained_calls[2].clone(); - assert!(chained_call_a == helper_chained_call_constructor(ChainedCallsEnum::CcRemoveTokenA)); - assert!(chained_call_b == helper_chained_call_constructor(ChainedCallsEnum::CcRemoveTokenB)); - assert!(chained_call_lp.instruction_data == helper_chained_call_constructor(ChainedCallsEnum::CcRemovePoolLP).instruction_data); - } + assert!(chained_call_a == ChainedCallForTests::cc_remove_token_a()); + assert!(chained_call_b == ChainedCallForTests::cc_remove_token_b()); + assert!(chained_call_lp == ChainedCallForTests::cc_remove_pool_lp()); + } #[should_panic(expected = "Invalid number of input accounts")] - #[test] + #[test] fn test_call_add_liquidity_with_invalid_number_of_accounts_1() { - let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - ]; - let _post_states = add_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountA), - helper_balance_constructor(BalanceEnum::AddMaxAmountb), - helper_balance_constructor(BalanceEnum::AddMinAmountLP),], - ); + let pre_states = vec![AccountForTests::pool_definition_init()]; + let _post_states = add_liquidity( + &pre_states, + &[ + BalanceForTests::add_min_amount_lp(), + BalanceForTests::add_max_amount_a(), + BalanceForTests::add_max_amount_b(), + ], + ); } #[should_panic(expected = "Invalid number of input accounts")] #[test] fn test_call_add_liquidity_with_invalid_number_of_accounts_2() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - ]; - let _post_states = add_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountA), - helper_balance_constructor(BalanceEnum::AddMaxAmountb), - helper_balance_constructor(BalanceEnum::AddMinAmountLP),], - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + ]; + let _post_states = add_liquidity( + &pre_states, + &[ + BalanceForTests::add_min_amount_lp(), + BalanceForTests::add_max_amount_a(), + BalanceForTests::add_max_amount_b(), + ], + ); } #[should_panic(expected = "Invalid number of input accounts")] #[test] fn test_call_add_liquidity_with_invalid_number_of_accounts_3() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - ]; - let _post_states = add_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountA), - helper_balance_constructor(BalanceEnum::AddMaxAmountb), - helper_balance_constructor(BalanceEnum::AddMinAmountLP),], - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + ]; + let _post_states = add_liquidity( + &pre_states, + &[ + BalanceForTests::add_min_amount_lp(), + BalanceForTests::add_max_amount_a(), + BalanceForTests::add_max_amount_b(), + ], + ); } #[should_panic(expected = "Invalid number of input accounts")] #[test] fn test_call_add_liquidity_with_invalid_number_of_accounts_4() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - ]; - let _post_states = add_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountA), - helper_balance_constructor(BalanceEnum::AddMaxAmountb), - helper_balance_constructor(BalanceEnum::AddMinAmountLP),], - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + ]; + let _post_states = add_liquidity( + &pre_states, + &[ + BalanceForTests::add_min_amount_lp(), + BalanceForTests::add_max_amount_a(), + BalanceForTests::add_max_amount_b(), + ], + ); } #[should_panic(expected = "Invalid number of input accounts")] #[test] fn test_call_add_liquidity_with_invalid_number_of_accounts_5() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - ]; - let _post_states = add_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountA), - helper_balance_constructor(BalanceEnum::AddMaxAmountb), - helper_balance_constructor(BalanceEnum::AddMinAmountLP),], - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + ]; + let _post_states = add_liquidity( + &pre_states, + &[ + BalanceForTests::add_min_amount_lp(), + BalanceForTests::add_max_amount_a(), + BalanceForTests::add_max_amount_b(), + ], + ); } #[should_panic(expected = "Invalid number of input accounts")] #[test] fn test_call_add_liquidity_with_invalid_number_of_accounts_6() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - ]; - let _post_states = add_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountA), - helper_balance_constructor(BalanceEnum::AddMaxAmountb), - helper_balance_constructor(BalanceEnum::AddMinAmountLP),], - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + ]; + let _post_states = add_liquidity( + &pre_states, + &[ + BalanceForTests::add_min_amount_lp(), + BalanceForTests::add_max_amount_a(), + BalanceForTests::add_max_amount_b(), + ], + ); } - + #[should_panic(expected = "Invalid number of input balances")] #[test] fn test_call_add_liquidity_invalid_number_of_balances_1() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPInit), - ]; - let _post_states = add_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountA),], - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_init(), + ]; + let _post_states = add_liquidity(&pre_states, &[BalanceForTests::add_min_amount_lp()]); + } + + #[should_panic(expected = "Invalid number of input balances")] + #[test] + fn test_call_add_liquidity_invalid_number_of_balances_2() { + let pre_states = vec![ + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_init(), + ]; + let _post_states = add_liquidity(&pre_states, + &[ + BalanceForTests::add_min_amount_lp(), + BalanceForTests::add_max_amount_a(), + ]); } #[should_panic(expected = "Vault A was not provided")] #[test] fn test_call_add_liquidity_vault_a_omitted() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAWrongAccId), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPInit), - ]; - let _post_states = add_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountA), - helper_balance_constructor(BalanceEnum::AddMaxAmountb), - helper_balance_constructor(BalanceEnum::AddMinAmountLP),], - ); - } + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_with_wrong_id(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_init(), + ]; + let _post_states = add_liquidity( + &pre_states, + &[ + BalanceForTests::add_min_amount_lp(), + BalanceForTests::add_max_amount_a(), + BalanceForTests::add_max_amount_b(), + ], + ); + } #[should_panic(expected = "Vault B was not provided")] #[test] fn test_call_add_liquidity_vault_b_omitted() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBWrongAccId), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPInit), - ]; - let _post_states = add_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountA), - helper_balance_constructor(BalanceEnum::AddMaxAmountb), - helper_balance_constructor(BalanceEnum::AddMinAmountLP),], - ); - } + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_with_wrong_id(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_init(), + ]; + let _post_states = add_liquidity( + &pre_states, + &[ + BalanceForTests::add_min_amount_lp(), + BalanceForTests::add_max_amount_a(), + BalanceForTests::add_max_amount_b(), + ], + ); + } #[should_panic(expected = "LP definition mismatch")] #[test] - fn test_call_add_liquidity_lp_def_mismatch() { + fn test_call_add_liquidity_lp_definition_mismatch() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPWrongAccId), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPInit), - ]; - let _post_states = add_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountA), - helper_balance_constructor(BalanceEnum::AddMaxAmountb), - helper_balance_constructor(BalanceEnum::AddMinAmountLP),], - ); - } + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_with_wrong_id(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_init(), + ]; + let _post_states = add_liquidity( + &pre_states, + &[ + BalanceForTests::add_min_amount_lp(), + BalanceForTests::add_max_amount_a(), + BalanceForTests::add_max_amount_b(), + ], + ); + } #[should_panic(expected = "Both max-balances must be nonzero")] #[test] fn test_call_add_liquidity_zero_balance_1() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPInit), - ]; - let _post_states = add_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMinAmountLP), - 0, - helper_balance_constructor(BalanceEnum::AddMaxAmountb),], - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_init(), + ]; + let _post_states = add_liquidity( + &pre_states, + &[ + BalanceForTests::add_min_amount_lp(), + 0, + BalanceForTests::add_max_amount_b(), + ], + ); } #[should_panic(expected = "Both max-balances must be nonzero")] #[test] fn test_call_add_liquidity_zero_balance_2() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPInit), - ]; - let _post_states = add_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountA), - 0, - helper_balance_constructor(BalanceEnum::AddMinAmountLP),], - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_init(), + ]; + let _post_states = add_liquidity( + &pre_states, + &[ + BalanceForTests::add_min_amount_lp(), + 0, + BalanceForTests::add_max_amount_a(), + ], + ); } #[should_panic(expected = "Min-lp must be nonzero")] #[test] fn test_call_add_liquidity_zero_min_lp() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPInit), - ]; - let _post_states = add_liquidity(&pre_states, - &[0, - helper_balance_constructor(BalanceEnum::AddMaxAmountA), - helper_balance_constructor(BalanceEnum::AddMaxAmountb),],); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_init(), + ]; + let _post_states = add_liquidity( + &pre_states, + &[ + 0, + BalanceForTests::add_max_amount_a(), + BalanceForTests::add_max_amount_b(), + ], + ); } #[should_panic(expected = "Vaults' balances must be at least the reserve amounts")] #[test] fn test_call_add_liquidity_vault_insufficient_balance_1() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInitZero), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPInit), - ]; - let _post_states = add_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountA), - helper_balance_constructor(BalanceEnum::AddMaxAmountb), - helper_balance_constructor(BalanceEnum::AddMinAmountLP),], - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init_zero(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_init(), + ]; + let _post_states = add_liquidity( + &pre_states, + &[ //todo UGH + BalanceForTests::add_max_amount_a(), + BalanceForTests::add_max_amount_b(), + BalanceForTests::add_min_amount_lp(), + ], + ); } #[should_panic(expected = "Vaults' balances must be at least the reserve amounts")] #[test] fn test_call_add_liquidity_vault_insufficient_balance_2() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInitZero), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPInit), - ]; - let _post_states = add_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountA), - helper_balance_constructor(BalanceEnum::AddMaxAmountb), - helper_balance_constructor(BalanceEnum::AddMinAmountLP),], - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init_zero(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_init(), + ]; + let _post_states = add_liquidity( + &pre_states, + &[ + BalanceForTests::add_max_amount_a(), + BalanceForTests::add_max_amount_b(), + BalanceForTests::add_min_amount_lp(), + ], + ); } #[should_panic(expected = "A trade amount is 0")] #[test] fn test_call_add_liquidity_actual_amount_zero_1() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInitReserveALow), - helper_account_constructor(AccountEnum::VaultAInitLow), - helper_account_constructor(AccountEnum::VaultBInitHigh), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPInit), - ]; - let _post_states = add_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountA), - helper_balance_constructor(BalanceEnum::AddMaxAmountb), - helper_balance_constructor(BalanceEnum::AddMinAmountLP),], - ); + AccountForTests::pool_definition_init_reserve_a_low(), + AccountForTests::vault_a_init_low(), + AccountForTests::vault_b_init_high(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_init(), + ]; + let _post_states = add_liquidity( + &pre_states, + &[ + BalanceForTests::add_min_amount_lp(), + BalanceForTests::add_max_amount_a(), + BalanceForTests::add_max_amount_b(), + ], + ); } #[should_panic(expected = "A trade amount is 0")] #[test] fn test_call_add_liquidity_actual_amount_zero_2() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInitReserveBLow), - helper_account_constructor(AccountEnum::VaultAInitHigh), - helper_account_constructor(AccountEnum::VaultBInitLow), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPInit), - ]; - let _post_states = add_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountALow), - helper_balance_constructor(BalanceEnum::AddMaxAmountBLow), - helper_balance_constructor(BalanceEnum::AddMinAmountLP),], - ); + AccountForTests::pool_definition_init_reserve_b_low(), + AccountForTests::vault_a_init_high(), + AccountForTests::vault_b_init_low(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_init(), + ]; + let _post_states = add_liquidity( + &pre_states, + &[ + BalanceForTests::add_min_amount_lp(), + BalanceForTests::add_max_amount_a_low(), + BalanceForTests::add_max_amount_b_low(), + ], + ); } #[should_panic(expected = "Reserves must be nonzero")] #[test] fn test_call_add_liquidity_reserves_zero_1() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInitReserveAZero), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPInit), - ]; - let _post_states = add_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountA), - helper_balance_constructor(BalanceEnum::AddMaxAmountb), - helper_balance_constructor(BalanceEnum::AddMinAmountLP),], - ); + AccountForTests::pool_definition_init_reserve_a_zero(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_init(), + ]; + let _post_states = add_liquidity( + &pre_states, + &[ + BalanceForTests::add_min_amount_lp(), + BalanceForTests::add_max_amount_a(), + BalanceForTests::add_max_amount_b(), + ], + ); } #[should_panic(expected = "Reserves must be nonzero")] #[test] fn test_call_add_liquidity_reserves_zero_2() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInitReserveBZero), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPInit), - ]; - let _post_states = add_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountA), - helper_balance_constructor(BalanceEnum::AddMaxAmountb), - helper_balance_constructor(BalanceEnum::AddMinAmountLP),], - ); + AccountForTests::pool_definition_init_reserve_b_zero(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_init(), + ]; + let _post_states = add_liquidity( + &pre_states, + &[ + BalanceForTests::add_min_amount_lp(), + BalanceForTests::add_max_amount_a(), + BalanceForTests::add_max_amount_b(), + ], + ); } #[should_panic(expected = "Payable LP must be nonzero")] #[test] fn test_call_add_liquidity_payable_lp_zero() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionAddZeroLP), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPInit), - ]; - let _post_states = add_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountALow), - helper_balance_constructor(BalanceEnum::AddMaxAmountBLow), - helper_balance_constructor(BalanceEnum::AddMinAmountLP),], - ); + AccountForTests::pool_definition_add_zero_lp(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_init(), + ]; + let _post_states = add_liquidity( + &pre_states, + &[ + BalanceForTests::add_min_amount_lp(), + BalanceForTests::add_max_amount_a_low(), + BalanceForTests::add_max_amount_b_low(), + ], + ); } #[test] - fn test_call_add_liquidity_successful_chain_call() { + fn test_call_add_liquidity_chained_call_successsful() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::PoolLPInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - helper_account_constructor(AccountEnum::UserHoldingLPInit), - ]; - let (post_states, chained_calls) = add_liquidity(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMinAmountLP), - helper_balance_constructor(BalanceEnum::AddMaxAmountA), - helper_balance_constructor(BalanceEnum::AddMaxAmountb),], - ); - + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + AccountForTests::user_holding_lp_init(), + ]; + let (post_states, chained_calls) = add_liquidity( + &pre_states, + &[BalanceForTests::add_min_amount_lp(), + BalanceForTests::add_max_amount_a(), + BalanceForTests::add_max_amount_b(),], + ); + let pool_post = post_states[0].clone(); - assert!(helper_account_constructor(AccountEnum::PoolDefinitionAddSuccessful).account == - *pool_post.account()); + assert!(AccountForTests::pool_definition_add_successful().account == *pool_post.account()); let chained_call_lp = chained_calls[0].clone(); let chained_call_b = chained_calls[1].clone(); let chained_call_a = chained_calls[2].clone(); - - assert!(chained_call_a == helper_chained_call_constructor(ChainedCallsEnum::CcAddTokenA)); - assert!(chained_call_b == helper_chained_call_constructor(ChainedCallsEnum::CcAddTokenB)); - assert!(chained_call_lp == helper_chained_call_constructor(ChainedCallsEnum::CcAddPoolLP)); + assert!(chained_call_a == ChainedCallForTests::cc_add_token_a()); + assert!(chained_call_b == ChainedCallForTests::cc_add_token_b()); + assert!(chained_call_lp == ChainedCallForTests::cc_add_pool_lp()); } #[should_panic(expected = "Invalid number of input accounts")] - #[test] + #[test] fn test_call_swap_with_invalid_number_of_accounts_1() { - let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - ]; - let _post_states = swap(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountA), - helper_balance_constructor(BalanceEnum::MinAmountOut)], - helper_id_constructor(IdEnum::TokenADefinitionId), - ); + let pre_states = vec![AccountForTests::pool_definition_init()]; + let _post_states = swap( + &pre_states, + &[ + BalanceForTests::add_max_amount_a(), + BalanceForTests::min_amount_out(), + ], + IdForTests::token_a_definition_id(), + ); } #[should_panic(expected = "Invalid number of input accounts")] #[test] fn test_call_swap_with_invalid_number_of_accounts_2() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - ]; - let _post_states = swap(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountA), - helper_balance_constructor(BalanceEnum::MinAmountOut)], - helper_id_constructor(IdEnum::TokenADefinitionId), - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + ]; + let _post_states = swap( + &pre_states, + &[ + BalanceForTests::add_max_amount_a(), + BalanceForTests::min_amount_out(), + ], + IdForTests::token_a_definition_id(), + ); } #[should_panic(expected = "Invalid number of input accounts")] #[test] fn test_call_swap_with_invalid_number_of_accounts_3() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - ]; - let _post_states = swap(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountA), - helper_balance_constructor(BalanceEnum::MinAmountOut)], - helper_id_constructor(IdEnum::TokenADefinitionId), - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + ]; + let _post_states = swap( + &pre_states, + &[ + BalanceForTests::add_max_amount_a(), + BalanceForTests::min_amount_out(), + ], + IdForTests::token_a_definition_id(), + ); } #[should_panic(expected = "Invalid number of input accounts")] #[test] fn test_call_swap_with_invalid_number_of_accounts_4() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::UserHoldingA), - ]; - let _post_states = swap(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountA), - helper_balance_constructor(BalanceEnum::MinAmountOut)], - helper_id_constructor(IdEnum::TokenADefinitionId), - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::user_holding_a(), + ]; + let _post_states = swap( + &pre_states, + &[ + BalanceForTests::add_max_amount_a(), + BalanceForTests::min_amount_out(), + ], + IdForTests::token_a_definition_id(), + ); } #[should_panic(expected = "Invalid number of amounts provided")] #[test] fn test_call_swap_with_invalid_number_of_amounts() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - ]; - let _post_states = swap(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountA)], - helper_id_constructor(IdEnum::TokenLPDefinitionId), - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + ]; + let _post_states = swap( + &pre_states, + &[BalanceForTests::add_max_amount_a()], + IdForTests::token_a_definition_id(), + ); } #[should_panic(expected = "AccountId is not a token type for the pool")] #[test] fn test_call_swap_incorrect_token_type() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - ]; - let _post_states = swap(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountA), - helper_balance_constructor(BalanceEnum::MinAmountOut)], - helper_id_constructor(IdEnum::TokenLPDefinitionId), - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + ]; + let _post_states = swap( + &pre_states, + &[ + BalanceForTests::add_max_amount_a(), + BalanceForTests::min_amount_out(), + ], + IdForTests::token_lp_definition_id(), + ); } #[should_panic(expected = "Vault A was not provided")] #[test] fn test_call_swap_vault_a_omitted() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAWrongAccId), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - ]; - let _post_states = swap(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountA), - helper_balance_constructor(BalanceEnum::MinAmountOut)], - helper_id_constructor(IdEnum::TokenADefinitionId), - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_with_wrong_id(), + AccountForTests::vault_b_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + ]; + let _post_states = swap( + &pre_states, + &[ + BalanceForTests::add_max_amount_a(), + BalanceForTests::min_amount_out(), + ], + IdForTests::token_a_definition_id(), + ); } #[should_panic(expected = "Vault B was not provided")] #[test] fn test_call_swap_vault_b_omitted() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBWrongAccId), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - ]; - let _post_states = swap(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountA), - helper_balance_constructor(BalanceEnum::MinAmountOut)], - helper_id_constructor(IdEnum::TokenADefinitionId), - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_with_wrong_id(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + ]; + let _post_states = swap( + &pre_states, + &[ + BalanceForTests::add_max_amount_a(), + BalanceForTests::min_amount_out(), + ], + IdForTests::token_a_definition_id(), + ); } #[should_panic(expected = "Reserve for Token A exceeds vault balance")] #[test] fn test_call_swap_reserves_vault_mismatch_1() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInitLow), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - ]; - let _post_states = swap(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountA), - helper_balance_constructor(BalanceEnum::MinAmountOut)], - helper_id_constructor(IdEnum::TokenADefinitionId), - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init_low(), + AccountForTests::vault_b_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + ]; + let _post_states = swap( + &pre_states, + &[ + BalanceForTests::add_max_amount_a(), + BalanceForTests::min_amount_out(), + ], + IdForTests::token_a_definition_id(), + ); } - #[should_panic(expected = "Reserve for Token B exceeds vault balance")] + #[should_panic(expected = "Reserve for Token B exceeds vault balance")] #[test] fn test_call_swap_reserves_vault_mismatch_2() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInitLow), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - ]; - let _post_states = swap(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountA), - helper_balance_constructor(BalanceEnum::MinAmountOut)], - helper_id_constructor(IdEnum::TokenADefinitionId), - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init_low(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + ]; + let _post_states = swap( + &pre_states, + &[ + BalanceForTests::add_max_amount_a(), + BalanceForTests::min_amount_out(), + ], + IdForTests::token_a_definition_id(), + ); } #[should_panic(expected = "Pool is inactive")] #[test] fn test_call_swap_ianctive() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInactive), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - ]; - let _post_states = swap(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountA), - helper_balance_constructor(BalanceEnum::MinAmountOut)], - helper_id_constructor(IdEnum::TokenADefinitionId), - ); + AccountForTests::pool_definition_inactive(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + ]; + let _post_states = swap( + &pre_states, + &[ + BalanceForTests::add_max_amount_a(), + BalanceForTests::min_amount_out(), + ], + IdForTests::token_a_definition_id(), + ); } #[should_panic(expected = "Withdraw amount is less than minimal amount out")] #[test] fn test_call_swap_below_min_out() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - ]; - let _post_states = swap(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountA), - helper_balance_constructor(BalanceEnum::MinAmountOut)], - helper_id_constructor(IdEnum::TokenADefinitionId), - ); + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + ]; + let _post_states = swap( + &pre_states, + &[ + BalanceForTests::add_max_amount_a(), + BalanceForTests::min_amount_out(), + ], + IdForTests::token_a_definition_id(), + ); } #[test] - fn test_call_swap_successful_chain_call_1() { + fn test_call_swap_chained_call_successful_1() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - ]; - let (post_states, chained_calls) = swap(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountA), - helper_balance_constructor(BalanceEnum::AddMaxAmountALow)], - helper_id_constructor(IdEnum::TokenADefinitionId), - ); - + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + ]; + let (post_states, chained_calls) = swap( + &pre_states, + &[ + BalanceForTests::add_max_amount_a(), + BalanceForTests::add_max_amount_a_low(), + ], //TODO: should be b? + IdForTests::token_a_definition_id(), + ); + let pool_post = post_states[0].clone(); - assert!(helper_account_constructor(AccountEnum::PoolDefinitionSwapTest1).account == - *pool_post.account()); + assert!(AccountForTests::pool_definition_swap_test_1().account == *pool_post.account()); - let chained_call_a = chained_calls[0].clone(); + let chained_call_a = chained_calls[0].clone(); let chained_call_b = chained_calls[1].clone(); - assert!(chained_call_a == helper_chained_call_constructor(ChainedCallsEnum::CcSwapTokenATest1)); - assert!(chained_call_b == helper_chained_call_constructor(ChainedCallsEnum::CcSwapTokenBTest1)); + assert!(chained_call_a == ChainedCallForTests::cc_swap_token_a_test_1()); + assert!(chained_call_b == ChainedCallForTests::cc_swap_token_b_test_1()); } #[test] - fn test_call_swap_successful_chain_call_2() { + fn test_call_swap_chained_call_successful_2() { let pre_states = vec![ - helper_account_constructor(AccountEnum::PoolDefinitionInit), - helper_account_constructor(AccountEnum::VaultAInit), - helper_account_constructor(AccountEnum::VaultBInit), - helper_account_constructor(AccountEnum::UserHoldingA), - helper_account_constructor(AccountEnum::UserHoldingB), - ]; - let (post_states, chained_calls) = swap(&pre_states, - &[helper_balance_constructor(BalanceEnum::AddMaxAmountb), - helper_balance_constructor(BalanceEnum::MinAmountOut)], - helper_id_constructor(IdEnum::TokenBDefinitionId), - ); - + AccountForTests::pool_definition_init(), + AccountForTests::vault_a_init(), + AccountForTests::vault_b_init(), + AccountForTests::user_holding_a(), + AccountForTests::user_holding_b(), + ]; + let (post_states, chained_calls) = swap( + &pre_states, + &[ + BalanceForTests::add_max_amount_b(), + BalanceForTests::min_amount_out(), + ], + IdForTests::token_b_definition_id(), + ); + let pool_post = post_states[0].clone(); - assert!(helper_account_constructor(AccountEnum::PoolDefinitionSwapTest2).account == - *pool_post.account()); + assert!(AccountForTests::pool_definition_swap_test_2().account == *pool_post.account()); - let chained_call_a = chained_calls[1].clone(); + let chained_call_a = chained_calls[1].clone(); let chained_call_b = chained_calls[0].clone(); - assert!(chained_call_a == helper_chained_call_constructor(ChainedCallsEnum::CcSwapTokenATest2)); - assert!(chained_call_b == helper_chained_call_constructor(ChainedCallsEnum::CcSwapTokenBTest2)); + assert!(chained_call_a == ChainedCallForTests::cc_swap_token_a_test_2()); + assert!(chained_call_b == ChainedCallForTests::cc_swap_token_b_test_2()); } - -} \ No newline at end of file +} diff --git a/nssa/src/program.rs b/nssa/src/program.rs index 8718c10..9ce5046 100644 --- a/nssa/src/program.rs +++ b/nssa/src/program.rs @@ -7,7 +7,7 @@ use serde::Serialize; use crate::{ error::NssaError, - program_methods::{AUTHENTICATED_TRANSFER_ELF, PINATA_ELF, TOKEN_ELF, AMM_ELF}, + program_methods::{AMM_ELF, AUTHENTICATED_TRANSFER_ELF, PINATA_ELF, TOKEN_ELF}, }; /// Maximum number of cycles for a public execution. @@ -97,8 +97,6 @@ impl Program { } pub fn amm() -> Self { - // This unwrap wont panic since the `AMM_ELF` comes from risc0 build of - // `program_methods` Self::new(AMM_ELF.to_vec()).expect("The AMM program must be a valid Risc0 program") } } diff --git a/nssa/src/state.rs b/nssa/src/state.rs index d15edd8..eeb7a95 100644 --- a/nssa/src/state.rs +++ b/nssa/src/state.rs @@ -264,7 +264,7 @@ impl V02State { #[cfg(test)] pub mod tests { - use serde::Serialize; + use std::collections::HashMap; use nssa_core::{ @@ -284,8 +284,7 @@ pub mod tests { message::Message, witness_set::WitnessSet, }, - program::Program, - program_methods, public_transaction, + program::Program, public_transaction, signature::PrivateKey, state::MAX_NUMBER_CHAINED_CALLS, }; @@ -2259,7 +2258,7 @@ pub mod tests { fn new(definition_id: &AccountId) -> Self { Self { account_type: TOKEN_HOLDING_TYPE, - definition_id: definition_id.clone(), + definition_id: *definition_id, balance: 0, } } @@ -2312,12 +2311,12 @@ pub mod tests { let mut i: usize = 0; let (token_1, token_2) = loop { if definition_token_a_id.value()[i] > definition_token_b_id.value()[i] { - let token_1 = definition_token_a_id.clone(); - let token_2 = definition_token_b_id.clone(); + let token_1 = definition_token_a_id; + let token_2 = definition_token_b_id; break (token_1, token_2); } else if definition_token_a_id.value()[i] < definition_token_b_id.value()[i] { - let token_1 = definition_token_b_id.clone(); - let token_2 = definition_token_a_id.clone(); + let token_1 = definition_token_b_id; + let token_2 = definition_token_a_id; break (token_1, token_2); } @@ -2384,658 +2383,791 @@ pub mod tests { .expect("Hash output must be exactly 32 bytes long"), ) } -const POOL_DEFINITION_DATA_SIZE: usize = 225; + const POOL_DEFINITION_DATA_SIZE: usize = 225; -#[derive(Default)] -struct PoolDefinition{ - definition_token_a_id: AccountId, - definition_token_b_id: AccountId, - vault_a_id: AccountId, - vault_b_id: AccountId, - liquidity_pool_id: AccountId, - liquidity_pool_supply: u128, - reserve_a: u128, - reserve_b: u128, - fees: u128, - active: bool -} - -impl PoolDefinition { - fn into_data(self) -> Data { - let mut bytes = [0; POOL_DEFINITION_DATA_SIZE]; - bytes[0..32].copy_from_slice(&self.definition_token_a_id.to_bytes()); - bytes[32..64].copy_from_slice(&self.definition_token_b_id.to_bytes()); - bytes[64..96].copy_from_slice(&self.vault_a_id.to_bytes()); - bytes[96..128].copy_from_slice(&self.vault_b_id.to_bytes()); - bytes[128..160].copy_from_slice(&self.liquidity_pool_id.to_bytes()); - bytes[160..176].copy_from_slice(&self.liquidity_pool_supply.to_le_bytes()); - bytes[176..192].copy_from_slice(&self.reserve_a.to_le_bytes()); - bytes[192..208].copy_from_slice(&self.reserve_b.to_le_bytes()); - bytes[208..224].copy_from_slice(&self.fees.to_le_bytes()); - bytes[224] = self.active as u8; - - bytes - .to_vec() - .try_into() - .expect("225 bytes should fit into Data") + #[derive(Default)] + struct PoolDefinition { + definition_token_a_id: AccountId, + definition_token_b_id: AccountId, + vault_a_id: AccountId, + vault_b_id: AccountId, + liquidity_pool_id: AccountId, + liquidity_pool_supply: u128, + reserve_a: u128, + reserve_b: u128, + fees: u128, + active: bool, } - fn parse(data: &[u8]) -> Option { - if data.len() != POOL_DEFINITION_DATA_SIZE { - None - } else { - let definition_token_a_id = AccountId::new(data[0..32].try_into().expect("Parse data: The AMM program must be provided a valid AccountId for Token A definition")); - let definition_token_b_id = AccountId::new(data[32..64].try_into().expect("Parse data: The AMM program must be provided a valid AccountId for Vault B definition")); - let vault_a_id = AccountId::new(data[64..96].try_into().expect("Parse data: The AMM program must be provided a valid AccountId for Vault A")); - let vault_b_id = AccountId::new(data[96..128].try_into().expect("Parse data: The AMM program must be provided a valid AccountId for Vault B")); - let liquidity_pool_id = AccountId::new(data[128..160].try_into().expect("Parse data: The AMM program must be provided a valid AccountId for Token liquidity pool definition")); - let liquidity_pool_supply = u128::from_le_bytes(data[160..176].try_into().expect("Parse data: The AMM program must be provided a valid u128 for liquidity cap")); - let reserve_a = u128::from_le_bytes(data[176..192].try_into().expect("Parse data: The AMM program must be provided a valid u128 for reserve A balance")); - let reserve_b = u128::from_le_bytes(data[192..208].try_into().expect("Parse data: The AMM program must be provided a valid u128 for reserve B balance")); - let fees = u128::from_le_bytes(data[208..224].try_into().expect("Parse data: The AMM program must be provided a valid u128 for fees")); + impl PoolDefinition { + fn into_data(self) -> Data { + let mut bytes = [0; POOL_DEFINITION_DATA_SIZE]; + bytes[0..32].copy_from_slice(&self.definition_token_a_id.to_bytes()); + bytes[32..64].copy_from_slice(&self.definition_token_b_id.to_bytes()); + bytes[64..96].copy_from_slice(&self.vault_a_id.to_bytes()); + bytes[96..128].copy_from_slice(&self.vault_b_id.to_bytes()); + bytes[128..160].copy_from_slice(&self.liquidity_pool_id.to_bytes()); + bytes[160..176].copy_from_slice(&self.liquidity_pool_supply.to_le_bytes()); + bytes[176..192].copy_from_slice(&self.reserve_a.to_le_bytes()); + bytes[192..208].copy_from_slice(&self.reserve_b.to_le_bytes()); + bytes[208..224].copy_from_slice(&self.fees.to_le_bytes()); + bytes[224] = self.active as u8; - let active = match data[224] { - 0 => false, - 1 => true, - _ => panic!("Parse data: The AMM program must be provided a valid bool for active"), - }; - - Some(Self { - definition_token_a_id, - definition_token_b_id, - vault_a_id, - vault_b_id, - liquidity_pool_id, - liquidity_pool_supply, - reserve_a, - reserve_b, - fees, - active, - }) + bytes + .to_vec() + .try_into() + .expect("225 bytes should fit into Data") } - } -} - enum AccountsEnum { - UserTokenAHolding, - UserTokenBHolding, - UserTokenLPHolding, - PoolDefinitionInit, - TokenADefinitionAcc, - TokenBDefinitionAcc, - TokenLPDefinitionAcc, - VaultAInit, - VaultBInit, - VaultASwap1, - VaultBSwap1, - UserTokenAHoldingSwap1, - UserTokenBHoldingSwap1, - PoolDefinitionSwap1, - VaultASwap2, - VaultBSwap2, - UserTokenAHoldingSwap2, - UserTokenBHoldingSwap2, - PoolDefinitionSwap2, - VaultAAdd, - VaultBAdd, - UserTokenAHoldingAdd, - UserTokenBHoldingAdd, - UserTokenLPHoldingAdd, - PoolDefinitionAdd, - TokenLPDefinitionAdd, - VaultARemove, - VaultBRemove, - UserTokenAHoldingRemove, - UserTokenBHoldingRemove, - UserTokenLPHoldingRemove, - PoolDefinitionRemove, - TokenLPDefinitionRemove, - VaultAInitInactive, - VaultBInitInactive, - TokenLPDefinitionInitInactive, - PoolDefinitionInactive, - UserTokenAHoldingNewInit, - UserTokenBHoldingNewInit, - UserTokenLPHoldingNewInit, - TokenLPDefinitionNewInit, - PoolDefinitionNewInit, - UserTokenLPHoldingInitZero, - } + fn parse(data: &[u8]) -> Option { + if data.len() != POOL_DEFINITION_DATA_SIZE { + None + } else { + let definition_token_a_id = AccountId::new(data[0..32].try_into().expect("Parse data: The AMM program must be provided a valid AccountId for Token A definition")); + let definition_token_b_id = AccountId::new(data[32..64].try_into().expect("Parse data: The AMM program must be provided a valid AccountId for Vault B definition")); + let vault_a_id = AccountId::new(data[64..96].try_into().expect( + "Parse data: The AMM program must be provided a valid AccountId for Vault A", + )); + let vault_b_id = AccountId::new(data[96..128].try_into().expect( + "Parse data: The AMM program must be provided a valid AccountId for Vault B", + )); + let liquidity_pool_id = AccountId::new(data[128..160].try_into().expect("Parse data: The AMM program must be provided a valid AccountId for Token liquidity pool definition")); + let liquidity_pool_supply = u128::from_le_bytes(data[160..176].try_into().expect( + "Parse data: The AMM program must be provided a valid u128 for liquidity cap", + )); + let reserve_a = u128::from_le_bytes(data[176..192].try_into().expect("Parse data: The AMM program must be provided a valid u128 for reserve A balance")); + let reserve_b = u128::from_le_bytes(data[192..208].try_into().expect("Parse data: The AMM program must be provided a valid u128 for reserve B balance")); + let fees = + u128::from_le_bytes(data[208..224].try_into().expect( + "Parse data: The AMM program must be provided a valid u128 for fees", + )); - enum BalancesEnum { - UserTokenAHoldingInit, - UserTokenBHoldingInit, - UserTokenLPHoldingInit, - VaultABalanceInit, - VaultBBalanceInit, - PoolLPSupplyInit, - TokenASupply, - TokenBSupply, - TokenLPSupply, - RemoveLP, - RemoveMinAmountA, - RemoveMinAmountB, - AddMinAmountLP, - AddMaxAmountA, - AddMaxAmountB, - SwapAmountIn, - SwapMinAmountOUt, - VaultABalanceSwap1, - VaultBBalanceSwap1, - UserTokenAHoldingSwap1, - UserTokenBHoldingSwap1, - VaultABalanceSwap2, - VaultBBalanceSwap2, - UserTokenAHoldingSwap2, - UserTokenBHoldingSwap2, - VaultABalanceAdd, - VaultBBalanceAdd, - UserTokenAHoldingAdd, - UserTokenBHoldingAdd, - UserTokenLPHoldingAdd, - TokenLPSupplyAdd, - VaultABalanceRemove, - VaultBBalanceRemove, - UserTokenAHoldingRemove, - UserTokenBHoldingRemove, - UserTokenLPHoldingRemove, - TokenLPSupplyRemove, - UserTokenAHoldingNewDef, - UserTokenBHoldingNewDef, - } + let active = match data[224] { + 0 => false, + 1 => true, + _ => panic!( + "Parse data: The AMM program must be provided a valid bool for active" + ), + }; - enum IdEnum { - PoolDefinitionId, - TokenLPDefinitionId, - TokenADefinitionId, - TokenBDefinitionId, - UserTokenAId, - UserTokenBId, - UserTokenLPId, - VaultAId, - VaultBId, - } - - enum PrivateKeysEnum { - UserTokenAKey, - UserTokenBKey, - UserTokenLPKey, - } - - fn helper_balances_constructor(selection: BalancesEnum) -> u128 { - match selection { - BalancesEnum::UserTokenAHoldingInit => 10_000, - BalancesEnum::UserTokenBHoldingInit => 10_000, - BalancesEnum::UserTokenLPHoldingInit => 2_000, - BalancesEnum::VaultABalanceInit => 5_000, - BalancesEnum::VaultBBalanceInit => 2_500, - BalancesEnum::PoolLPSupplyInit => 5_000, - BalancesEnum::TokenASupply => 100_000, - BalancesEnum::TokenBSupply => 100_000, - BalancesEnum::TokenLPSupply => 5_000, - BalancesEnum::RemoveLP => 1_000, - BalancesEnum::RemoveMinAmountA => 500, - BalancesEnum::RemoveMinAmountB => 500, - BalancesEnum::AddMinAmountLP => 1_000, - BalancesEnum::AddMaxAmountA => 2_000, - BalancesEnum::AddMaxAmountB => 1_000, - BalancesEnum::SwapAmountIn => 1_000, - BalancesEnum::SwapMinAmountOUt => 200, - BalancesEnum::VaultABalanceSwap1 => 3_572, - BalancesEnum::VaultBBalanceSwap1 => 3_500, - BalancesEnum::UserTokenAHoldingSwap1 => 11_428, - BalancesEnum::UserTokenBHoldingSwap1 => 9_000, - BalancesEnum::VaultABalanceSwap2 => 6_000, - BalancesEnum::VaultBBalanceSwap2 => 2_084, - BalancesEnum::UserTokenAHoldingSwap2 => 9_000, - BalancesEnum::UserTokenBHoldingSwap2 => 10_416, - BalancesEnum::VaultABalanceAdd => 7_000, - BalancesEnum::VaultBBalanceAdd => 3_500, - BalancesEnum::UserTokenAHoldingAdd => 8_000, - BalancesEnum::UserTokenBHoldingAdd => 9_000, - BalancesEnum::UserTokenLPHoldingAdd => 4_000, - BalancesEnum::TokenLPSupplyAdd => 7_000, - BalancesEnum::VaultABalanceRemove => 4_000, - BalancesEnum::VaultBBalanceRemove => 2_000, - BalancesEnum::UserTokenAHoldingRemove => 11_000, - BalancesEnum::UserTokenBHoldingRemove => 10_500, - BalancesEnum::UserTokenLPHoldingRemove => 1_000, - BalancesEnum::TokenLPSupplyRemove => 4_000, - BalancesEnum::UserTokenAHoldingNewDef => 5_000, - BalancesEnum::UserTokenBHoldingNewDef => 7_500, - _ => panic!("Invalid selection"), - } - } - - fn helper_private_keys_constructor(selection: PrivateKeysEnum) -> PrivateKey { - match selection { - PrivateKeysEnum::UserTokenAKey => { - PrivateKey::try_new([31; 32]).expect("Keys constructor expects valid private key") + Some(Self { + definition_token_a_id, + definition_token_b_id, + vault_a_id, + vault_b_id, + liquidity_pool_id, + liquidity_pool_supply, + reserve_a, + reserve_b, + fees, + active, + }) } - PrivateKeysEnum::UserTokenBKey => { - PrivateKey::try_new([32; 32]).expect("Keys constructor expects valid private key") - } - PrivateKeysEnum::UserTokenLPKey => { - PrivateKey::try_new([33; 32]).expect("Keys constructor expects valid private key") - } - _ => panic!("Invalid selection"), } } - fn helper_id_constructor(selection: IdEnum) -> AccountId { - match selection { - IdEnum::PoolDefinitionId => compute_pool_pda( - Program::amm().id(), - helper_id_constructor(IdEnum::TokenADefinitionId), - helper_id_constructor(IdEnum::TokenBDefinitionId), - ), - IdEnum::VaultAId => compute_vault_pda( - Program::amm().id(), - helper_id_constructor(IdEnum::PoolDefinitionId), - helper_id_constructor(IdEnum::TokenADefinitionId), - ), - IdEnum::VaultBId => compute_vault_pda( - Program::amm().id(), - helper_id_constructor(IdEnum::PoolDefinitionId), - helper_id_constructor(IdEnum::TokenBDefinitionId), - ), - IdEnum::TokenLPDefinitionId => compute_liquidity_token_pda( - Program::amm().id(), - helper_id_constructor(IdEnum::PoolDefinitionId), - ), - IdEnum::TokenADefinitionId => AccountId::new([3; 32]), - IdEnum::TokenBDefinitionId => AccountId::new([4; 32]), - IdEnum::UserTokenAId => AccountId::from(&PublicKey::new_from_private_key( - &helper_private_keys_constructor(PrivateKeysEnum::UserTokenAKey), - )), - IdEnum::UserTokenBId => AccountId::from(&PublicKey::new_from_private_key( - &helper_private_keys_constructor(PrivateKeysEnum::UserTokenBKey), - )), - IdEnum::UserTokenLPId => AccountId::from(&PublicKey::new_from_private_key( - &helper_private_keys_constructor(PrivateKeysEnum::UserTokenLPKey), - )), - _ => panic!("Invalid selection"), + struct PrivateKeysForTests; + + impl PrivateKeysForTests { + fn user_token_a_key() -> PrivateKey { + PrivateKey::try_new([31; 32]).expect("Keys constructor expects valid private key") + } + + fn user_token_b_key() -> PrivateKey { + PrivateKey::try_new([32; 32]).expect("Keys constructor expects valid private key") + } + + fn user_token_lp_key() -> PrivateKey { + PrivateKey::try_new([33; 32]).expect("Keys constructor expects valid private key") } } - fn helper_account_constructor(selection: AccountsEnum) -> Account { - match selection { - AccountsEnum::UserTokenAHolding => Account { + struct BalanceForTests; + + impl BalanceForTests { + fn user_token_a_holding_init() -> u128 { + 10_000 + } + + fn user_token_b_holding_init() -> u128 { + 10_000 + } + + fn user_token_lp_holding_init() -> u128 { + 2_000 + } + + fn vault_a_balance_init() -> u128 { + 5_000 + } + + fn vault_b_balance_init() -> u128 { + 2_500 + } + + fn pool_lp_supply_init() -> u128 { + 5_000 + } + + fn token_a_supply() -> u128 { + 100_000 + } + + fn token_b_supply() -> u128 { + 100_000 + } + + fn token_lp_supply() -> u128 { + 5_000 + } + + fn remove_lp() -> u128 { + 1_000 + } + + fn remove_min_amount_a() -> u128 { + 500 + } + + fn remove_min_amount_b() -> u128 { + 500 + } + + fn add_min_amount_lp() -> u128 { + 1_000 + } + + fn add_max_amount_a() -> u128 { + 2_000 + } + + fn add_max_amount_b() -> u128 { + 1_000 + } + + fn swap_amount_in() -> u128 { + 1_000 + } + + fn swap_min_amount_out() -> u128 { + 200 + } + + fn vault_a_balance_swap_1() -> u128 { + 3_572 + } + + fn vault_b_balance_swap_1() -> u128 { + 3_500 + } + + fn user_token_a_holding_swap_1() -> u128 { + 11_428 + } + + fn user_token_b_holding_swap_1() -> u128 { + 9_000 + } + + fn vault_a_balance_swap_2() -> u128 { + 6_000 + } + + fn vault_b_balance_swap_2() -> u128 { + 2_084 + } + + fn user_token_a_holding_swap_2() -> u128 { + 9_000 + } + + fn user_token_b_holding_swap_2() -> u128 { + 10_416 + } + + fn vault_a_balance_add() -> u128 { + 7_000 + } + + fn vault_b_balance_add() -> u128 { + 3_500 + } + + fn user_token_a_holding_add() -> u128 { + 8_000 + } + + fn user_token_b_holding_add() -> u128 { + 9_000 + } + + fn user_token_lp_holding_add() -> u128 { + 4_000 + } + + fn token_lp_supply_add() -> u128 { + 7_000 + } + + fn vault_a_balance_remove() -> u128 { + 4_000 + } + + fn vault_b_balance_remove() -> u128 { + 2_000 + } + + fn user_token_a_holding_remove() -> u128 { + 11_000 + } + + fn user_token_b_holding_remove() -> u128 { + 10_500 + } + + fn user_token_lp_holding_remove() -> u128 { + 1_000 + } + + fn token_lp_supply_remove() -> u128 { + 4_000 + } + + fn user_token_a_holding_new_definition() -> u128 { + 5_000 + } + + fn user_token_b_holding_new_definition() -> u128 { + 7_500 + } + } + + struct IdForTests; + + impl IdForTests { + fn pool_definition_id() -> AccountId { + compute_pool_pda( + Program::amm().id(), + IdForTests::token_a_definition_id(), + IdForTests::token_b_definition_id(), + ) + } + + fn token_lp_definition_id() -> AccountId { + compute_liquidity_token_pda(Program::amm().id(), IdForTests::pool_definition_id()) + } + + fn token_a_definition_id() -> AccountId { + AccountId::new([3; 32]) + } + fn token_b_definition_id() -> AccountId { + AccountId::new([4; 32]) + } + + fn user_token_a_id() -> AccountId { + AccountId::from(&PublicKey::new_from_private_key( + &PrivateKeysForTests::user_token_a_key(), + )) + } + + fn user_token_b_id() -> AccountId { + AccountId::from(&PublicKey::new_from_private_key( + &PrivateKeysForTests::user_token_b_key(), + )) + } + + fn user_token_lp_id() -> AccountId { + AccountId::from(&PublicKey::new_from_private_key( + &PrivateKeysForTests::user_token_lp_key(), + )) + } + + fn vault_a_id() -> AccountId { + compute_vault_pda( + Program::amm().id(), + IdForTests::pool_definition_id(), + IdForTests::token_a_definition_id(), + ) + } + + fn vault_b_id() -> AccountId { + compute_vault_pda( + Program::amm().id(), + IdForTests::pool_definition_id(), + IdForTests::token_b_definition_id(), + ) + } + } + + struct AccountForTests; + + impl AccountForTests { + fn user_token_a_holding() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenADefinitionId), - balance: helper_balances_constructor(BalancesEnum::UserTokenAHoldingInit), + definition_id: IdForTests::token_a_definition_id(), + balance: BalanceForTests::user_token_a_holding_init(), }), nonce: 0, - }, - AccountsEnum::UserTokenBHolding => Account { + } + } + + fn user_token_b_holding() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - balance: helper_balances_constructor(BalancesEnum::UserTokenBHoldingInit), + definition_id: IdForTests::token_b_definition_id(), + balance: BalanceForTests::user_token_b_holding_init(), }), nonce: 0, - }, - AccountsEnum::PoolDefinitionInit => Account { + } + } + + fn pool_definition_init() -> Account { + Account { program_owner: Program::amm().id(), balance: 0u128, data: PoolDefinition::into_data(PoolDefinition { - definition_token_a_id: helper_id_constructor(IdEnum::TokenADefinitionId), - definition_token_b_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - vault_a_id: helper_id_constructor(IdEnum::VaultAId), - vault_b_id: helper_id_constructor(IdEnum::VaultBId), - liquidity_pool_id: helper_id_constructor(IdEnum::TokenLPDefinitionId), - liquidity_pool_supply: helper_balances_constructor( - BalancesEnum::PoolLPSupplyInit, - ), - reserve_a: helper_balances_constructor(BalancesEnum::VaultABalanceInit), - reserve_b: helper_balances_constructor(BalancesEnum::VaultBBalanceInit), + definition_token_a_id: IdForTests::token_a_definition_id(), + definition_token_b_id: IdForTests::token_b_definition_id(), + vault_a_id: IdForTests::vault_a_id(), + vault_b_id: IdForTests::vault_b_id(), + liquidity_pool_id: IdForTests::token_lp_definition_id(), + liquidity_pool_supply: BalanceForTests::pool_lp_supply_init(), + reserve_a: BalanceForTests::vault_a_balance_init(), + reserve_b: BalanceForTests::vault_b_balance_init(), fees: 0u128, active: true, }), nonce: 0, - }, - AccountsEnum::TokenADefinitionAcc => Account { + } + } + + fn token_a_definition_account() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenDefinition::into_data(TokenDefinition { account_type: 0u8, name: [1u8; 6], - total_supply: helper_balances_constructor(BalancesEnum::TokenASupply), + total_supply: BalanceForTests::token_a_supply(), }), nonce: 0, - }, - AccountsEnum::TokenBDefinitionAcc => Account { + } + } + + fn token_b_definition_acc() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenDefinition::into_data(TokenDefinition { account_type: 0u8, name: [1u8; 6], - total_supply: helper_balances_constructor(BalancesEnum::TokenBSupply), + total_supply: BalanceForTests::token_b_supply(), }), nonce: 0, - }, - AccountsEnum::TokenLPDefinitionAcc => Account { + } + } + + fn token_lp_definition_acc() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenDefinition::into_data(TokenDefinition { account_type: 0u8, name: [1u8; 6], - total_supply: helper_balances_constructor(BalancesEnum::TokenLPSupply), + total_supply: BalanceForTests::token_lp_supply(), }), nonce: 0, - }, - AccountsEnum::VaultAInit => Account { + } + } + + fn vault_a_init() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenADefinitionId), - balance: helper_balances_constructor(BalancesEnum::VaultABalanceInit), + definition_id: IdForTests::token_a_definition_id(), + balance: BalanceForTests::vault_a_balance_init(), }), nonce: 0, - }, - AccountsEnum::VaultBInit => Account { + } + } + + fn vault_b_init() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - balance: helper_balances_constructor(BalancesEnum::VaultBBalanceInit), + definition_id: IdForTests::token_b_definition_id(), + balance: BalanceForTests::vault_b_balance_init(), }), nonce: 0, - }, - AccountsEnum::UserTokenLPHolding => Account { + } + } + + fn user_token_lp_holding() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenLPDefinitionId), - balance: helper_balances_constructor(BalancesEnum::UserTokenLPHoldingInit), + definition_id: IdForTests::token_lp_definition_id(), + balance: BalanceForTests::user_token_lp_holding_init(), }), nonce: 0, - }, - AccountsEnum::VaultASwap1 => Account { + } + } + + fn vault_a_swap_1() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenADefinitionId), - balance: helper_balances_constructor(BalancesEnum::VaultABalanceSwap1), + definition_id: IdForTests::token_a_definition_id(), + balance: BalanceForTests::vault_a_balance_swap_1(), }), nonce: 0, - }, - AccountsEnum::VaultBSwap1 => Account { + } + } + + fn vault_b_swap_1() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - balance: helper_balances_constructor(BalancesEnum::VaultBBalanceSwap1), + definition_id: IdForTests::token_b_definition_id(), + balance: BalanceForTests::vault_b_balance_swap_1(), }), nonce: 0, - }, - AccountsEnum::PoolDefinitionSwap1 => Account { + } + } + + fn pool_definition_swap_1() -> Account { + Account { program_owner: Program::amm().id(), balance: 0u128, data: PoolDefinition::into_data(PoolDefinition { - definition_token_a_id: helper_id_constructor(IdEnum::TokenADefinitionId), - definition_token_b_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - vault_a_id: helper_id_constructor(IdEnum::VaultAId), - vault_b_id: helper_id_constructor(IdEnum::VaultBId), - liquidity_pool_id: helper_id_constructor(IdEnum::TokenLPDefinitionId), - liquidity_pool_supply: helper_balances_constructor( - BalancesEnum::PoolLPSupplyInit, - ), - reserve_a: helper_balances_constructor(BalancesEnum::VaultABalanceSwap1), - reserve_b: helper_balances_constructor(BalancesEnum::VaultBBalanceSwap1), + definition_token_a_id: IdForTests::token_a_definition_id(), + definition_token_b_id: IdForTests::token_b_definition_id(), + vault_a_id: IdForTests::vault_a_id(), + vault_b_id: IdForTests::vault_b_id(), + liquidity_pool_id: IdForTests::token_lp_definition_id(), + liquidity_pool_supply: BalanceForTests::pool_lp_supply_init(), + reserve_a: BalanceForTests::vault_a_balance_swap_1(), + reserve_b: BalanceForTests::vault_b_balance_swap_1(), fees: 0u128, active: true, }), nonce: 0, - }, - AccountsEnum::UserTokenAHoldingSwap1 => Account { + } + } + + fn user_token_a_holding_swap_1() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenADefinitionId), - balance: helper_balances_constructor(BalancesEnum::UserTokenAHoldingSwap1), + definition_id: IdForTests::token_a_definition_id(), + balance: BalanceForTests::user_token_a_holding_swap_1(), }), nonce: 0, - }, - AccountsEnum::UserTokenBHoldingSwap1 => Account { + } + } + + fn user_token_b_holding_swap_1() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - balance: helper_balances_constructor(BalancesEnum::UserTokenBHoldingSwap1), + definition_id: IdForTests::token_b_definition_id(), + balance: BalanceForTests::user_token_b_holding_swap_1(), }), nonce: 1, - }, - AccountsEnum::VaultASwap2 => Account { + } + } + + fn vault_a_swap_2() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenADefinitionId), - balance: helper_balances_constructor(BalancesEnum::VaultABalanceSwap2), + definition_id: IdForTests::token_a_definition_id(), + balance: BalanceForTests::vault_a_balance_swap_2(), }), nonce: 0, - }, - AccountsEnum::VaultBSwap2 => Account { + } + } + + fn vault_b_swap_2() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - balance: helper_balances_constructor(BalancesEnum::VaultBBalanceSwap2), + definition_id: IdForTests::token_b_definition_id(), + balance: BalanceForTests::vault_b_balance_swap_2(), }), nonce: 0, - }, - AccountsEnum::PoolDefinitionSwap2 => Account { + } + } + + fn pool_definition_swap_2() -> Account { + Account { program_owner: Program::amm().id(), balance: 0u128, data: PoolDefinition::into_data(PoolDefinition { - definition_token_a_id: helper_id_constructor(IdEnum::TokenADefinitionId), - definition_token_b_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - vault_a_id: helper_id_constructor(IdEnum::VaultAId), - vault_b_id: helper_id_constructor(IdEnum::VaultBId), - liquidity_pool_id: helper_id_constructor(IdEnum::TokenLPDefinitionId), - liquidity_pool_supply: helper_balances_constructor( - BalancesEnum::PoolLPSupplyInit, - ), - reserve_a: helper_balances_constructor(BalancesEnum::VaultABalanceSwap2), - reserve_b: helper_balances_constructor(BalancesEnum::VaultBBalanceSwap2), + definition_token_a_id: IdForTests::token_a_definition_id(), + definition_token_b_id: IdForTests::token_b_definition_id(), + vault_a_id: IdForTests::vault_a_id(), + vault_b_id: IdForTests::vault_b_id(), + liquidity_pool_id: IdForTests::token_lp_definition_id(), + liquidity_pool_supply: BalanceForTests::pool_lp_supply_init(), + reserve_a: BalanceForTests::vault_a_balance_swap_2(), + reserve_b: BalanceForTests::vault_b_balance_swap_2(), fees: 0u128, active: true, }), nonce: 0, - }, - AccountsEnum::UserTokenAHoldingSwap2 => Account { + } + } + + fn user_token_a_holding_swap_2() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenADefinitionId), - balance: helper_balances_constructor(BalancesEnum::UserTokenAHoldingSwap2), + definition_id: IdForTests::token_a_definition_id(), + balance: BalanceForTests::user_token_a_holding_swap_2(), }), nonce: 1, - }, - AccountsEnum::UserTokenBHoldingSwap2 => Account { + } + } + + fn user_token_b_holding_swap_2() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - balance: helper_balances_constructor(BalancesEnum::UserTokenBHoldingSwap2), + definition_id: IdForTests::token_b_definition_id(), + balance: BalanceForTests::user_token_b_holding_swap_2(), }), nonce: 0, - }, - AccountsEnum::VaultAAdd => Account { + } + } + + fn vault_a_add() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenADefinitionId), - balance: helper_balances_constructor(BalancesEnum::VaultABalanceAdd), + definition_id: IdForTests::token_a_definition_id(), + balance: BalanceForTests::vault_a_balance_add(), }), nonce: 0, - }, - AccountsEnum::VaultBAdd => Account { + } + } + + fn vault_b_add() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - balance: helper_balances_constructor(BalancesEnum::VaultBBalanceAdd), + definition_id: IdForTests::token_b_definition_id(), + balance: BalanceForTests::vault_b_balance_add(), }), nonce: 0, - }, - AccountsEnum::PoolDefinitionAdd => Account { + } + } + + fn pool_definition_add() -> Account { + Account { program_owner: Program::amm().id(), balance: 0u128, data: PoolDefinition::into_data(PoolDefinition { - definition_token_a_id: helper_id_constructor(IdEnum::TokenADefinitionId), - definition_token_b_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - vault_a_id: helper_id_constructor(IdEnum::VaultAId), - vault_b_id: helper_id_constructor(IdEnum::VaultBId), - liquidity_pool_id: helper_id_constructor(IdEnum::TokenLPDefinitionId), - liquidity_pool_supply: helper_balances_constructor( - BalancesEnum::TokenLPSupplyAdd, - ), - reserve_a: helper_balances_constructor(BalancesEnum::VaultABalanceAdd), - reserve_b: helper_balances_constructor(BalancesEnum::VaultBBalanceAdd), + definition_token_a_id: IdForTests::token_a_definition_id(), + definition_token_b_id: IdForTests::token_b_definition_id(), + vault_a_id: IdForTests::vault_a_id(), + vault_b_id: IdForTests::vault_b_id(), + liquidity_pool_id: IdForTests::token_lp_definition_id(), + liquidity_pool_supply: BalanceForTests::token_lp_supply_add(), + reserve_a: BalanceForTests::vault_a_balance_add(), + reserve_b: BalanceForTests::vault_b_balance_add(), fees: 0u128, active: true, }), nonce: 0, - }, - AccountsEnum::UserTokenAHoldingAdd => Account { + } + } + + fn user_token_a_holding_add() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenADefinitionId), - balance: helper_balances_constructor(BalancesEnum::UserTokenAHoldingAdd), + definition_id: IdForTests::token_a_definition_id(), + balance: BalanceForTests::user_token_a_holding_add(), }), nonce: 1, - }, - AccountsEnum::UserTokenBHoldingAdd => Account { + } + } + + fn user_token_b_holding_add() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - balance: helper_balances_constructor(BalancesEnum::UserTokenBHoldingAdd), + definition_id: IdForTests::token_b_definition_id(), + balance: BalanceForTests::user_token_b_holding_add(), }), nonce: 1, - }, - AccountsEnum::UserTokenLPHoldingAdd => Account { + } + } + + fn user_token_lp_holding_add() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenLPDefinitionId), - balance: helper_balances_constructor(BalancesEnum::UserTokenLPHoldingAdd), + definition_id: IdForTests::token_lp_definition_id(), + balance: BalanceForTests::user_token_lp_holding_add(), }), nonce: 0, - }, - AccountsEnum::TokenLPDefinitionAdd => Account { + } + } + + fn token_lp_definition_add() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenDefinition::into_data(TokenDefinition { account_type: 0u8, name: [1u8; 6], - total_supply: helper_balances_constructor(BalancesEnum::TokenLPSupplyAdd), + total_supply: BalanceForTests::token_lp_supply_add(), }), nonce: 0, - }, - AccountsEnum::VaultARemove => Account { + } + } + + fn vault_a_remove() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenADefinitionId), - balance: helper_balances_constructor(BalancesEnum::VaultABalanceRemove), + definition_id: IdForTests::token_a_definition_id(), + balance: BalanceForTests::vault_a_balance_remove(), }), nonce: 0, - }, - AccountsEnum::VaultBRemove => Account { + } + } + + fn vault_b_remove() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - balance: helper_balances_constructor(BalancesEnum::VaultBBalanceRemove), + definition_id: IdForTests::token_b_definition_id(), + balance: BalanceForTests::vault_b_balance_remove(), }), nonce: 0, - }, - AccountsEnum::PoolDefinitionRemove => Account { + } + } + + fn pool_definition_remove() -> Account { + Account { program_owner: Program::amm().id(), balance: 0u128, data: PoolDefinition::into_data(PoolDefinition { - definition_token_a_id: helper_id_constructor(IdEnum::TokenADefinitionId), - definition_token_b_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - vault_a_id: helper_id_constructor(IdEnum::VaultAId), - vault_b_id: helper_id_constructor(IdEnum::VaultBId), - liquidity_pool_id: helper_id_constructor(IdEnum::TokenLPDefinitionId), - liquidity_pool_supply: helper_balances_constructor( - BalancesEnum::TokenLPSupplyRemove, - ), - reserve_a: helper_balances_constructor(BalancesEnum::VaultABalanceRemove), - reserve_b: helper_balances_constructor(BalancesEnum::VaultBBalanceRemove), + definition_token_a_id: IdForTests::token_a_definition_id(), + definition_token_b_id: IdForTests::token_b_definition_id(), + vault_a_id: IdForTests::vault_a_id(), + vault_b_id: IdForTests::vault_b_id(), + liquidity_pool_id: IdForTests::token_lp_definition_id(), + liquidity_pool_supply: BalanceForTests::token_lp_supply_remove(), + reserve_a: BalanceForTests::vault_a_balance_remove(), + reserve_b: BalanceForTests::vault_b_balance_remove(), fees: 0u128, active: true, }), nonce: 0, - }, - AccountsEnum::UserTokenAHoldingRemove => Account { + } + } + + fn user_token_a_holding_remove() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenADefinitionId), - balance: helper_balances_constructor(BalancesEnum::UserTokenAHoldingRemove), + definition_id: IdForTests::token_a_definition_id(), + balance: BalanceForTests::user_token_a_holding_remove(), }), nonce: 0, - }, - AccountsEnum::UserTokenBHoldingRemove => Account { + } + } + + fn user_token_b_holding_remove() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - balance: helper_balances_constructor(BalancesEnum::UserTokenBHoldingRemove), + definition_id: IdForTests::token_b_definition_id(), + balance: BalanceForTests::user_token_b_holding_remove(), }), nonce: 0, - }, - AccountsEnum::UserTokenLPHoldingRemove => Account { + } + } + + fn user_token_lp_holding_remove() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenLPDefinitionId), - balance: helper_balances_constructor(BalancesEnum::UserTokenLPHoldingRemove), + definition_id: IdForTests::token_lp_definition_id(), + balance: BalanceForTests::user_token_lp_holding_remove(), }), nonce: 1, - }, - AccountsEnum::TokenLPDefinitionRemove => Account { + } + } + + fn token_lp_definition_remove() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenDefinition::into_data(TokenDefinition { account_type: 0u8, name: [1u8; 6], - total_supply: helper_balances_constructor(BalancesEnum::TokenLPSupplyRemove), + total_supply: BalanceForTests::token_lp_supply_remove(), }), nonce: 0, - }, - AccountsEnum::TokenLPDefinitionInitInactive => Account { + } + } + + fn token_lp_definition_init_inactive() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenDefinition::into_data(TokenDefinition { @@ -3044,36 +3176,45 @@ impl PoolDefinition { total_supply: 0, }), nonce: 0, - }, - AccountsEnum::VaultAInitInactive => Account { + } + } + + fn vault_a_init_inactive() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenADefinitionId), + definition_id: IdForTests::token_a_definition_id(), balance: 0, }), nonce: 0, - }, - AccountsEnum::VaultBInitInactive => Account { + } + } + + fn vault_b_init_inactive() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenBDefinitionId), + definition_id: IdForTests::token_b_definition_id(), balance: 0, }), nonce: 0, - }, - AccountsEnum::PoolDefinitionInactive => Account { + } + } + + fn pool_definition_inactive() -> Account { + Account { program_owner: Program::amm().id(), balance: 0u128, data: PoolDefinition::into_data(PoolDefinition { - definition_token_a_id: helper_id_constructor(IdEnum::TokenADefinitionId), - definition_token_b_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - vault_a_id: helper_id_constructor(IdEnum::VaultAId), - vault_b_id: helper_id_constructor(IdEnum::VaultBId), - liquidity_pool_id: helper_id_constructor(IdEnum::TokenLPDefinitionId), + definition_token_a_id: IdForTests::token_a_definition_id(), + definition_token_b_id: IdForTests::token_b_definition_id(), + vault_a_id: IdForTests::vault_a_id(), + vault_b_id: IdForTests::vault_b_id(), + liquidity_pool_id: IdForTests::token_lp_definition_id(), liquidity_pool_supply: 0, reserve_a: 0, reserve_b: 0, @@ -3081,172 +3222,181 @@ impl PoolDefinition { active: false, }), nonce: 0, - }, - AccountsEnum::UserTokenAHoldingNewInit => Account { + } + } + + fn user_token_a_holding_new_init() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenADefinitionId), - balance: helper_balances_constructor(BalancesEnum::UserTokenAHoldingNewDef), + definition_id: IdForTests::token_a_definition_id(), + balance: BalanceForTests::user_token_a_holding_new_definition(), }), nonce: 1, - }, - AccountsEnum::UserTokenBHoldingNewInit => Account { + } + } + + fn user_token_b_holding_new_init() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - balance: helper_balances_constructor(BalancesEnum::UserTokenBHoldingNewDef), + definition_id: IdForTests::token_b_definition_id(), + balance: BalanceForTests::user_token_b_holding_new_definition(), }), nonce: 1, - }, - AccountsEnum::UserTokenLPHoldingNewInit => Account { + } + } + + fn user_token_lp_holding_new_init() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenLPDefinitionId), - balance: helper_balances_constructor(BalancesEnum::UserTokenAHoldingNewDef), + definition_id: IdForTests::token_lp_definition_id(), + balance: BalanceForTests::user_token_a_holding_new_definition(), }), nonce: 0, - }, - AccountsEnum::TokenLPDefinitionNewInit => Account { + } + } + + fn token_lp_definition_new_init() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenDefinition::into_data(TokenDefinition { account_type: 0u8, name: [1u8; 6], - total_supply: helper_balances_constructor(BalancesEnum::VaultABalanceInit), + total_supply: BalanceForTests::vault_a_balance_init(), }), nonce: 0, - }, - AccountsEnum::PoolDefinitionNewInit => Account { + } + } + + fn pool_definition_new_init() -> Account { + Account { program_owner: Program::amm().id(), balance: 0u128, data: PoolDefinition::into_data(PoolDefinition { - definition_token_a_id: helper_id_constructor(IdEnum::TokenADefinitionId), - definition_token_b_id: helper_id_constructor(IdEnum::TokenBDefinitionId), - vault_a_id: helper_id_constructor(IdEnum::VaultAId), - vault_b_id: helper_id_constructor(IdEnum::VaultBId), - liquidity_pool_id: helper_id_constructor(IdEnum::TokenLPDefinitionId), - liquidity_pool_supply: helper_balances_constructor( - BalancesEnum::UserTokenAHoldingNewDef, - ), - reserve_a: helper_balances_constructor(BalancesEnum::VaultABalanceInit), - reserve_b: helper_balances_constructor(BalancesEnum::VaultBBalanceInit), + definition_token_a_id: IdForTests::token_a_definition_id(), + definition_token_b_id: IdForTests::token_b_definition_id(), + vault_a_id: IdForTests::vault_a_id(), + vault_b_id: IdForTests::vault_b_id(), + liquidity_pool_id: IdForTests::token_lp_definition_id(), + liquidity_pool_supply: BalanceForTests::user_token_a_holding_new_definition(), + reserve_a: BalanceForTests::vault_a_balance_init(), + reserve_b: BalanceForTests::vault_b_balance_init(), fees: 0u128, active: true, }), nonce: 0, - }, - AccountsEnum::UserTokenLPHoldingInitZero => Account { + } + } + + fn user_token_lp_holding_init_zero() -> Account { + Account { program_owner: Program::token().id(), balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: 1u8, - definition_id: helper_id_constructor(IdEnum::TokenLPDefinitionId), + definition_id: IdForTests::token_lp_definition_id(), balance: 0, }), nonce: 0, - }, - _ => panic!("Invalid selection"), + } } } - fn amm_state_constructor() -> V02State { + const AMM_NEW_DEFINITION: u8 = 0; + const AMM_SWAP: u8 = 1; + const AMM_ADD_LIQUIDITY: u8 = 2; + const AMM_REMOVE_LIQUIDITY: u8 = 3; + + fn state_for_amm_tests() -> V02State { let initial_data = []; let mut state = V02State::new_with_genesis_accounts(&initial_data, &[]).with_test_programs(); state.force_insert_account( - helper_id_constructor(IdEnum::PoolDefinitionId), - helper_account_constructor(AccountsEnum::PoolDefinitionInit), + IdForTests::pool_definition_id(), + AccountForTests::pool_definition_init(), ); state.force_insert_account( - helper_id_constructor(IdEnum::TokenADefinitionId), - helper_account_constructor(AccountsEnum::TokenADefinitionAcc), + IdForTests::token_a_definition_id(), + AccountForTests::token_a_definition_account(), ); state.force_insert_account( - helper_id_constructor(IdEnum::TokenBDefinitionId), - helper_account_constructor(AccountsEnum::TokenBDefinitionAcc), + IdForTests::token_b_definition_id(), + AccountForTests::token_b_definition_acc(), ); state.force_insert_account( - helper_id_constructor(IdEnum::TokenLPDefinitionId), - helper_account_constructor(AccountsEnum::TokenLPDefinitionAcc), + IdForTests::token_lp_definition_id(), + AccountForTests::token_lp_definition_acc(), ); state.force_insert_account( - helper_id_constructor(IdEnum::UserTokenAId), - helper_account_constructor(AccountsEnum::UserTokenAHolding), + IdForTests::user_token_a_id(), + AccountForTests::user_token_a_holding(), ); state.force_insert_account( - helper_id_constructor(IdEnum::UserTokenBId), - helper_account_constructor(AccountsEnum::UserTokenBHolding), + IdForTests::user_token_b_id(), + AccountForTests::user_token_b_holding(), ); state.force_insert_account( - helper_id_constructor(IdEnum::UserTokenLPId), - helper_account_constructor(AccountsEnum::UserTokenLPHolding), - ); - state.force_insert_account( - helper_id_constructor(IdEnum::VaultAId), - helper_account_constructor(AccountsEnum::VaultAInit), - ); - state.force_insert_account( - helper_id_constructor(IdEnum::VaultBId), - helper_account_constructor(AccountsEnum::VaultBInit), + IdForTests::user_token_lp_id(), + AccountForTests::user_token_lp_holding(), ); + state.force_insert_account(IdForTests::vault_a_id(), AccountForTests::vault_a_init()); + state.force_insert_account(IdForTests::vault_b_id(), AccountForTests::vault_b_init()); state } - fn amm_state_constructor_for_new_def() -> V02State { + fn state_for_amm_tests_with_new_def() -> V02State { let initial_data = []; let mut state = V02State::new_with_genesis_accounts(&initial_data, &[]).with_test_programs(); state.force_insert_account( - helper_id_constructor(IdEnum::TokenADefinitionId), - helper_account_constructor(AccountsEnum::TokenADefinitionAcc), + IdForTests::token_a_definition_id(), + AccountForTests::token_a_definition_account(), ); state.force_insert_account( - helper_id_constructor(IdEnum::TokenBDefinitionId), - helper_account_constructor(AccountsEnum::TokenBDefinitionAcc), + IdForTests::token_b_definition_id(), + AccountForTests::token_b_definition_acc(), ); state.force_insert_account( - helper_id_constructor(IdEnum::UserTokenAId), - helper_account_constructor(AccountsEnum::UserTokenAHolding), + IdForTests::user_token_a_id(), + AccountForTests::user_token_a_holding(), ); state.force_insert_account( - helper_id_constructor(IdEnum::UserTokenBId), - helper_account_constructor(AccountsEnum::UserTokenBHolding), + IdForTests::user_token_b_id(), + AccountForTests::user_token_b_holding(), ); state } #[test] fn test_simple_amm_remove() { - let mut state = amm_state_constructor(); + let mut state = state_for_amm_tests(); let mut instruction: Vec = Vec::new(); - instruction.push(3); - instruction - .extend_from_slice(&helper_balances_constructor(BalancesEnum::RemoveLP).to_le_bytes()); - instruction.extend_from_slice( - &helper_balances_constructor(BalancesEnum::RemoveMinAmountA).to_le_bytes(), - ); - instruction.extend_from_slice( - &helper_balances_constructor(BalancesEnum::RemoveMinAmountB).to_le_bytes(), - ); + instruction.push(AMM_REMOVE_LIQUIDITY); + instruction.extend_from_slice(&BalanceForTests::remove_lp().to_le_bytes()); + instruction.extend_from_slice(&BalanceForTests::remove_min_amount_a().to_le_bytes()); + instruction.extend_from_slice(&BalanceForTests::remove_min_amount_b().to_le_bytes()); let message = public_transaction::Message::try_new( Program::amm().id(), vec![ - helper_id_constructor(IdEnum::PoolDefinitionId), - helper_id_constructor(IdEnum::VaultAId), - helper_id_constructor(IdEnum::VaultBId), - helper_id_constructor(IdEnum::TokenLPDefinitionId), - helper_id_constructor(IdEnum::UserTokenAId), - helper_id_constructor(IdEnum::UserTokenBId), - helper_id_constructor(IdEnum::UserTokenLPId), + IdForTests::pool_definition_id(), + IdForTests::vault_a_id(), + IdForTests::vault_b_id(), + IdForTests::token_lp_definition_id(), + IdForTests::user_token_a_id(), + IdForTests::user_token_b_id(), + IdForTests::user_token_lp_id(), ], vec![0], instruction, @@ -3255,89 +3405,76 @@ impl PoolDefinition { let witness_set = public_transaction::WitnessSet::for_message( &message, - &[&helper_private_keys_constructor( - PrivateKeysEnum::UserTokenLPKey, - )], + &[&PrivateKeysForTests::user_token_lp_key()], ); let tx = PublicTransaction::new(message, witness_set); state.transition_from_public_transaction(&tx).unwrap(); - let pool_post = state.get_account_by_id(&helper_id_constructor(IdEnum::PoolDefinitionId)); - let vault_a_post = state.get_account_by_id(&helper_id_constructor(IdEnum::VaultAId)); - let vault_b_post = state.get_account_by_id(&helper_id_constructor(IdEnum::VaultBId)); - let token_lp_post = - state.get_account_by_id(&helper_id_constructor(IdEnum::TokenLPDefinitionId)); - let user_token_a_post = - state.get_account_by_id(&helper_id_constructor(IdEnum::UserTokenAId)); - let user_token_b_post = - state.get_account_by_id(&helper_id_constructor(IdEnum::UserTokenBId)); - let user_token_lp_post = - state.get_account_by_id(&helper_id_constructor(IdEnum::UserTokenLPId)); + let pool_post = state.get_account_by_id(&IdForTests::pool_definition_id()); + let vault_a_post = state.get_account_by_id(&IdForTests::vault_a_id()); + let vault_b_post = state.get_account_by_id(&IdForTests::vault_b_id()); + let token_lp_post = state.get_account_by_id(&IdForTests::token_lp_definition_id()); + let user_token_a_post = state.get_account_by_id(&IdForTests::user_token_a_id()); + let user_token_b_post = state.get_account_by_id(&IdForTests::user_token_b_id()); + let user_token_lp_post = state.get_account_by_id(&IdForTests::user_token_lp_id()); - let expected_pool = helper_account_constructor(AccountsEnum::PoolDefinitionRemove); - let expected_vault_a = helper_account_constructor(AccountsEnum::VaultARemove); - let expected_vault_b = helper_account_constructor(AccountsEnum::VaultBRemove); - let expected_token_lp = helper_account_constructor(AccountsEnum::TokenLPDefinitionRemove); - let expected_user_token_a = - helper_account_constructor(AccountsEnum::UserTokenAHoldingRemove); - let expected_user_token_b = - helper_account_constructor(AccountsEnum::UserTokenBHoldingRemove); - let expected_user_token_lp = - helper_account_constructor(AccountsEnum::UserTokenLPHoldingRemove); + let expected_pool = AccountForTests::pool_definition_remove(); + let expected_vault_a = AccountForTests::vault_a_remove(); + let expected_vault_b = AccountForTests::vault_b_remove(); + let expected_token_lp = AccountForTests::token_lp_definition_remove(); + let expected_user_token_a = AccountForTests::user_token_a_holding_remove(); + let expected_user_token_b = AccountForTests::user_token_b_holding_remove(); + let expected_user_token_lp = AccountForTests::user_token_lp_holding_remove(); - assert!(pool_post == expected_pool); - assert!(vault_a_post == expected_vault_a); - assert!(vault_b_post == expected_vault_b); - assert!(token_lp_post == expected_token_lp); - assert!(user_token_a_post == expected_user_token_a); - assert!(user_token_b_post == expected_user_token_b); - assert!(user_token_lp_post == expected_user_token_lp); + assert_eq!(pool_post, expected_pool); + assert_eq!(vault_a_post, expected_vault_a); + assert_eq!(vault_b_post, expected_vault_b); + assert_eq!(token_lp_post, expected_token_lp); + assert_eq!(user_token_a_post, expected_user_token_a); + assert_eq!(user_token_b_post, expected_user_token_b); + assert_eq!(user_token_lp_post, expected_user_token_lp); } #[test] fn test_simple_amm_new_definition_inactive_initialized_pool_and_uninit_user_lp() { - let mut state = amm_state_constructor_for_new_def(); + let mut state = state_for_amm_tests_with_new_def(); // Uninitialized in constructor state.force_insert_account( - helper_id_constructor(IdEnum::VaultAId), - helper_account_constructor(AccountsEnum::VaultAInitInactive), + IdForTests::vault_a_id(), + AccountForTests::vault_a_init_inactive(), ); state.force_insert_account( - helper_id_constructor(IdEnum::VaultBId), - helper_account_constructor(AccountsEnum::VaultBInitInactive), + IdForTests::vault_b_id(), + AccountForTests::vault_b_init_inactive(), ); state.force_insert_account( - helper_id_constructor(IdEnum::PoolDefinitionId), - helper_account_constructor(AccountsEnum::PoolDefinitionInactive), + IdForTests::pool_definition_id(), + AccountForTests::pool_definition_inactive(), ); state.force_insert_account( - helper_id_constructor(IdEnum::TokenLPDefinitionId), - helper_account_constructor(AccountsEnum::TokenLPDefinitionInitInactive), + IdForTests::token_lp_definition_id(), + AccountForTests::token_lp_definition_init_inactive(), ); let mut instruction: Vec = Vec::new(); - instruction.push(0); - instruction.extend_from_slice( - &helper_balances_constructor(BalancesEnum::VaultABalanceInit).to_le_bytes(), - ); - instruction.extend_from_slice( - &helper_balances_constructor(BalancesEnum::VaultBBalanceInit).to_le_bytes(), - ); + instruction.push(AMM_NEW_DEFINITION); + instruction.extend_from_slice(&BalanceForTests::vault_a_balance_init().to_le_bytes()); + instruction.extend_from_slice(&BalanceForTests::vault_b_balance_init().to_le_bytes()); let amm_program_u8: [u8; 32] = bytemuck::cast(Program::amm().id()); instruction.extend_from_slice(&amm_program_u8); let message = public_transaction::Message::try_new( Program::amm().id(), vec![ - helper_id_constructor(IdEnum::PoolDefinitionId), - helper_id_constructor(IdEnum::VaultAId), - helper_id_constructor(IdEnum::VaultBId), - helper_id_constructor(IdEnum::TokenLPDefinitionId), - helper_id_constructor(IdEnum::UserTokenAId), - helper_id_constructor(IdEnum::UserTokenBId), - helper_id_constructor(IdEnum::UserTokenLPId), + IdForTests::pool_definition_id(), + IdForTests::vault_a_id(), + IdForTests::vault_b_id(), + IdForTests::token_lp_definition_id(), + IdForTests::user_token_a_id(), + IdForTests::user_token_b_id(), + IdForTests::user_token_lp_id(), ], vec![0, 0], instruction, @@ -3347,93 +3484,82 @@ impl PoolDefinition { let witness_set = public_transaction::WitnessSet::for_message( &message, &[ - &helper_private_keys_constructor(PrivateKeysEnum::UserTokenAKey), - &helper_private_keys_constructor(PrivateKeysEnum::UserTokenBKey), + &PrivateKeysForTests::user_token_a_key(), + &PrivateKeysForTests::user_token_b_key(), ], ); let tx = PublicTransaction::new(message, witness_set); state.transition_from_public_transaction(&tx).unwrap(); - let pool_post = state.get_account_by_id(&helper_id_constructor(IdEnum::PoolDefinitionId)); - let vault_a_post = state.get_account_by_id(&helper_id_constructor(IdEnum::VaultAId)); - let vault_b_post = state.get_account_by_id(&helper_id_constructor(IdEnum::VaultBId)); - let token_lp_post = - state.get_account_by_id(&helper_id_constructor(IdEnum::TokenLPDefinitionId)); - let user_token_a_post = - state.get_account_by_id(&helper_id_constructor(IdEnum::UserTokenAId)); - let user_token_b_post = - state.get_account_by_id(&helper_id_constructor(IdEnum::UserTokenBId)); - let user_token_lp_post = - state.get_account_by_id(&helper_id_constructor(IdEnum::UserTokenLPId)); + let pool_post = state.get_account_by_id(&IdForTests::pool_definition_id()); + let vault_a_post = state.get_account_by_id(&IdForTests::vault_a_id()); + let vault_b_post = state.get_account_by_id(&IdForTests::vault_b_id()); + let token_lp_post = state.get_account_by_id(&IdForTests::token_lp_definition_id()); + let user_token_a_post = state.get_account_by_id(&IdForTests::user_token_a_id()); + let user_token_b_post = state.get_account_by_id(&IdForTests::user_token_b_id()); + let user_token_lp_post = state.get_account_by_id(&IdForTests::user_token_lp_id()); - let expected_pool = helper_account_constructor(AccountsEnum::PoolDefinitionNewInit); - let expected_vault_a = helper_account_constructor(AccountsEnum::VaultAInit); - let expected_vault_b = helper_account_constructor(AccountsEnum::VaultBInit); - let expected_token_lp = helper_account_constructor(AccountsEnum::TokenLPDefinitionNewInit); - let expected_user_token_a = - helper_account_constructor(AccountsEnum::UserTokenAHoldingNewInit); - let expected_user_token_b = - helper_account_constructor(AccountsEnum::UserTokenBHoldingNewInit); - let expected_user_token_lp = - helper_account_constructor(AccountsEnum::UserTokenLPHoldingNewInit); + let expected_pool = AccountForTests::pool_definition_new_init(); + let expected_vault_a = AccountForTests::vault_a_init(); + let expected_vault_b = AccountForTests::vault_b_init(); + let expected_token_lp = AccountForTests::token_lp_definition_new_init(); + let expected_user_token_a = AccountForTests::user_token_a_holding_new_init(); + let expected_user_token_b = AccountForTests::user_token_b_holding_new_init(); + let expected_user_token_lp = AccountForTests::user_token_lp_holding_new_init(); - assert!(pool_post == expected_pool); - assert!(vault_a_post == expected_vault_a); - assert!(vault_b_post == expected_vault_b); - assert!(token_lp_post == expected_token_lp); - assert!(user_token_a_post == expected_user_token_a); - assert!(user_token_b_post == expected_user_token_b); - assert!(user_token_lp_post == expected_user_token_lp); + assert_eq!(pool_post, expected_pool); + assert_eq!(vault_a_post, expected_vault_a); + assert_eq!(vault_b_post, expected_vault_b); + assert_eq!(token_lp_post, expected_token_lp); + assert_eq!(user_token_a_post, expected_user_token_a); + assert_eq!(user_token_b_post, expected_user_token_b); + assert_eq!(user_token_lp_post, expected_user_token_lp); } #[test] fn test_simple_amm_new_definition_inactive_initialized_pool_init_user_lp() { - let mut state = amm_state_constructor_for_new_def(); + let mut state = state_for_amm_tests_with_new_def(); // Uninitialized in constructor state.force_insert_account( - helper_id_constructor(IdEnum::VaultAId), - helper_account_constructor(AccountsEnum::VaultAInitInactive), + IdForTests::vault_a_id(), + AccountForTests::vault_a_init_inactive(), ); state.force_insert_account( - helper_id_constructor(IdEnum::VaultBId), - helper_account_constructor(AccountsEnum::VaultBInitInactive), + IdForTests::vault_b_id(), + AccountForTests::vault_b_init_inactive(), ); state.force_insert_account( - helper_id_constructor(IdEnum::PoolDefinitionId), - helper_account_constructor(AccountsEnum::PoolDefinitionInactive), + IdForTests::pool_definition_id(), + AccountForTests::pool_definition_inactive(), ); state.force_insert_account( - helper_id_constructor(IdEnum::TokenLPDefinitionId), - helper_account_constructor(AccountsEnum::TokenLPDefinitionInitInactive), + IdForTests::token_lp_definition_id(), + AccountForTests::token_lp_definition_init_inactive(), ); state.force_insert_account( - helper_id_constructor(IdEnum::UserTokenLPId), - helper_account_constructor(AccountsEnum::UserTokenLPHoldingInitZero), + IdForTests::user_token_lp_id(), + AccountForTests::user_token_lp_holding_init_zero(), ); let mut instruction: Vec = Vec::new(); - instruction.push(0); - instruction.extend_from_slice( - &helper_balances_constructor(BalancesEnum::VaultABalanceInit).to_le_bytes(), - ); - instruction.extend_from_slice( - &helper_balances_constructor(BalancesEnum::VaultBBalanceInit).to_le_bytes(), - ); + instruction.push(AMM_NEW_DEFINITION); + instruction.extend_from_slice(&BalanceForTests::vault_a_balance_init().to_le_bytes()); + instruction.extend_from_slice(&BalanceForTests::vault_b_balance_init().to_le_bytes()); let amm_program_u8: [u8; 32] = bytemuck::cast(Program::amm().id()); instruction.extend_from_slice(&amm_program_u8); let message = public_transaction::Message::try_new( Program::amm().id(), vec![ - helper_id_constructor(IdEnum::PoolDefinitionId), - helper_id_constructor(IdEnum::VaultAId), - helper_id_constructor(IdEnum::VaultBId), - helper_id_constructor(IdEnum::TokenLPDefinitionId), - helper_id_constructor(IdEnum::UserTokenAId), - helper_id_constructor(IdEnum::UserTokenBId), - helper_id_constructor(IdEnum::UserTokenLPId), + IdForTests::pool_definition_id(), + IdForTests::vault_a_id(), + IdForTests::vault_b_id(), + IdForTests::token_lp_definition_id(), + IdForTests::user_token_a_id(), + IdForTests::user_token_b_id(), + IdForTests::user_token_lp_id(), ], vec![0, 0], instruction, @@ -3443,81 +3569,70 @@ impl PoolDefinition { let witness_set = public_transaction::WitnessSet::for_message( &message, &[ - &helper_private_keys_constructor(PrivateKeysEnum::UserTokenAKey), - &helper_private_keys_constructor(PrivateKeysEnum::UserTokenBKey), + &PrivateKeysForTests::user_token_a_key(), + &PrivateKeysForTests::user_token_b_key(), ], ); let tx = PublicTransaction::new(message, witness_set); state.transition_from_public_transaction(&tx).unwrap(); - let pool_post = state.get_account_by_id(&helper_id_constructor(IdEnum::PoolDefinitionId)); - let vault_a_post = state.get_account_by_id(&helper_id_constructor(IdEnum::VaultAId)); - let vault_b_post = state.get_account_by_id(&helper_id_constructor(IdEnum::VaultBId)); - let token_lp_post = - state.get_account_by_id(&helper_id_constructor(IdEnum::TokenLPDefinitionId)); - let user_token_a_post = - state.get_account_by_id(&helper_id_constructor(IdEnum::UserTokenAId)); - let user_token_b_post = - state.get_account_by_id(&helper_id_constructor(IdEnum::UserTokenBId)); - let user_token_lp_post = - state.get_account_by_id(&helper_id_constructor(IdEnum::UserTokenLPId)); + let pool_post = state.get_account_by_id(&IdForTests::pool_definition_id()); + let vault_a_post = state.get_account_by_id(&IdForTests::vault_a_id()); + let vault_b_post = state.get_account_by_id(&IdForTests::vault_b_id()); + let token_lp_post = state.get_account_by_id(&IdForTests::token_lp_definition_id()); + let user_token_a_post = state.get_account_by_id(&IdForTests::user_token_a_id()); + let user_token_b_post = state.get_account_by_id(&IdForTests::user_token_b_id()); + let user_token_lp_post = state.get_account_by_id(&IdForTests::user_token_lp_id()); - let expected_pool = helper_account_constructor(AccountsEnum::PoolDefinitionNewInit); - let expected_vault_a = helper_account_constructor(AccountsEnum::VaultAInit); - let expected_vault_b = helper_account_constructor(AccountsEnum::VaultBInit); - let expected_token_lp = helper_account_constructor(AccountsEnum::TokenLPDefinitionNewInit); - let expected_user_token_a = - helper_account_constructor(AccountsEnum::UserTokenAHoldingNewInit); - let expected_user_token_b = - helper_account_constructor(AccountsEnum::UserTokenBHoldingNewInit); - let expected_user_token_lp = - helper_account_constructor(AccountsEnum::UserTokenLPHoldingNewInit); + let expected_pool = AccountForTests::pool_definition_init(); + let expected_vault_a = AccountForTests::vault_a_init(); + let expected_vault_b = AccountForTests::vault_b_init(); + let expected_token_lp = AccountForTests::token_lp_definition_new_init(); //TODO? + let expected_user_token_a = AccountForTests::user_token_a_holding_new_init(); + let expected_user_token_b = AccountForTests::user_token_b_holding_new_init(); + let expected_user_token_lp = AccountForTests::user_token_lp_holding_new_init(); - assert!(pool_post == expected_pool); - assert!(vault_a_post == expected_vault_a); - assert!(vault_b_post == expected_vault_b); - assert!(token_lp_post == expected_token_lp); - assert!(user_token_a_post == expected_user_token_a); - assert!(user_token_b_post == expected_user_token_b); - assert!(user_token_lp_post == expected_user_token_lp); + assert_eq!(pool_post, expected_pool); + assert_eq!(vault_a_post, expected_vault_a); + assert_eq!(vault_b_post, expected_vault_b); + assert_eq!(token_lp_post, expected_token_lp); + assert_eq!(user_token_a_post, expected_user_token_a); + assert_eq!(user_token_b_post, expected_user_token_b); + assert_eq!(user_token_lp_post, expected_user_token_lp); } #[test] fn test_simple_amm_new_definition_uninitialized_pool() { - let mut state = amm_state_constructor_for_new_def(); + let mut state = state_for_amm_tests_with_new_def(); // Uninitialized in constructor state.force_insert_account( - helper_id_constructor(IdEnum::VaultAId), - helper_account_constructor(AccountsEnum::VaultAInitInactive), + IdForTests::vault_a_id(), + AccountForTests::vault_a_init_inactive(), ); state.force_insert_account( - helper_id_constructor(IdEnum::VaultBId), - helper_account_constructor(AccountsEnum::VaultBInitInactive), + IdForTests::vault_b_id(), + AccountForTests::vault_b_init_inactive(), ); let mut instruction: Vec = Vec::new(); - instruction.push(0); - instruction.extend_from_slice( - &helper_balances_constructor(BalancesEnum::VaultABalanceInit).to_le_bytes(), - ); - instruction.extend_from_slice( - &helper_balances_constructor(BalancesEnum::VaultBBalanceInit).to_le_bytes(), - ); + instruction.push(AMM_NEW_DEFINITION); + instruction.extend_from_slice(&BalanceForTests::vault_a_balance_init().to_le_bytes()); + instruction.extend_from_slice(&BalanceForTests::vault_b_balance_init().to_le_bytes()); let amm_program_u8: [u8; 32] = bytemuck::cast(Program::amm().id()); instruction.extend_from_slice(&amm_program_u8); let message = public_transaction::Message::try_new( Program::amm().id(), vec![ - helper_id_constructor(IdEnum::PoolDefinitionId), - helper_id_constructor(IdEnum::VaultAId), - helper_id_constructor(IdEnum::VaultBId), - helper_id_constructor(IdEnum::TokenLPDefinitionId), - helper_id_constructor(IdEnum::UserTokenAId), - helper_id_constructor(IdEnum::UserTokenBId), - helper_id_constructor(IdEnum::UserTokenLPId), + IdForTests::pool_definition_id(), + IdForTests::vault_a_id(), + IdForTests::vault_b_id(), + IdForTests::token_lp_definition_id(), + IdForTests::user_token_a_id(), + IdForTests::user_token_b_id(), + IdForTests::user_token_lp_id(), ], vec![0, 0], instruction, @@ -3527,72 +3642,59 @@ impl PoolDefinition { let witness_set = public_transaction::WitnessSet::for_message( &message, &[ - &helper_private_keys_constructor(PrivateKeysEnum::UserTokenAKey), - &helper_private_keys_constructor(PrivateKeysEnum::UserTokenBKey), + &PrivateKeysForTests::user_token_a_key(), + &PrivateKeysForTests::user_token_b_key(), ], ); let tx = PublicTransaction::new(message, witness_set); state.transition_from_public_transaction(&tx).unwrap(); - let pool_post = state.get_account_by_id(&helper_id_constructor(IdEnum::PoolDefinitionId)); - let vault_a_post = state.get_account_by_id(&helper_id_constructor(IdEnum::VaultAId)); - let vault_b_post = state.get_account_by_id(&helper_id_constructor(IdEnum::VaultBId)); - let token_lp_post = - state.get_account_by_id(&helper_id_constructor(IdEnum::TokenLPDefinitionId)); - let user_token_a_post = - state.get_account_by_id(&helper_id_constructor(IdEnum::UserTokenAId)); - let user_token_b_post = - state.get_account_by_id(&helper_id_constructor(IdEnum::UserTokenBId)); - let user_token_lp_post = - state.get_account_by_id(&helper_id_constructor(IdEnum::UserTokenLPId)); + let pool_post = state.get_account_by_id(&IdForTests::pool_definition_id()); + let vault_a_post = state.get_account_by_id(&IdForTests::vault_a_id()); + let vault_b_post = state.get_account_by_id(&IdForTests::vault_b_id()); + let token_lp_post = state.get_account_by_id(&IdForTests::token_lp_definition_id()); + let user_token_a_post = state.get_account_by_id(&IdForTests::user_token_a_id()); + let user_token_b_post = state.get_account_by_id(&IdForTests::user_token_b_id()); + let user_token_lp_post = state.get_account_by_id(&IdForTests::user_token_lp_id()); - let expected_pool = helper_account_constructor(AccountsEnum::PoolDefinitionNewInit); - let expected_vault_a = helper_account_constructor(AccountsEnum::VaultAInit); - let expected_vault_b = helper_account_constructor(AccountsEnum::VaultBInit); - let expected_token_lp = helper_account_constructor(AccountsEnum::TokenLPDefinitionNewInit); - let expected_user_token_a = - helper_account_constructor(AccountsEnum::UserTokenAHoldingNewInit); - let expected_user_token_b = - helper_account_constructor(AccountsEnum::UserTokenBHoldingNewInit); - let expected_user_token_lp = - helper_account_constructor(AccountsEnum::UserTokenLPHoldingNewInit); + let expected_pool = AccountForTests::pool_definition_new_init(); + let expected_vault_a = AccountForTests::vault_a_init(); + let expected_vault_b = AccountForTests::vault_b_init(); + let expected_token_lp = AccountForTests::token_lp_definition_new_init(); + let expected_user_token_a = AccountForTests::user_token_a_holding_new_init(); + let expected_user_token_b = AccountForTests::user_token_b_holding_new_init(); + let expected_user_token_lp = AccountForTests::user_token_lp_holding_new_init(); - assert!(pool_post == expected_pool); - assert!(vault_a_post == expected_vault_a); - assert!(vault_b_post == expected_vault_b); - assert!(token_lp_post == expected_token_lp); - assert!(user_token_a_post == expected_user_token_a); - assert!(user_token_b_post == expected_user_token_b); - assert!(user_token_lp_post == expected_user_token_lp); + assert_eq!(pool_post, expected_pool); + assert_eq!(vault_a_post, expected_vault_a); + assert_eq!(vault_b_post, expected_vault_b); + assert_eq!(token_lp_post, expected_token_lp); + assert_eq!(user_token_a_post, expected_user_token_a); + assert_eq!(user_token_b_post, expected_user_token_b); + assert_eq!(user_token_lp_post, expected_user_token_lp); } #[test] fn test_simple_amm_add() { - let mut state = amm_state_constructor(); + let mut state = state_for_amm_tests(); let mut instruction: Vec = Vec::new(); - instruction.push(2); - instruction.extend_from_slice( - &helper_balances_constructor(BalancesEnum::AddMinAmountLP).to_le_bytes(), - ); - instruction.extend_from_slice( - &helper_balances_constructor(BalancesEnum::AddMaxAmountA).to_le_bytes(), - ); - instruction.extend_from_slice( - &helper_balances_constructor(BalancesEnum::AddMaxAmountB).to_le_bytes(), - ); + instruction.push(AMM_ADD_LIQUIDITY); + instruction.extend_from_slice(&BalanceForTests::add_min_amount_lp().to_le_bytes()); + instruction.extend_from_slice(&BalanceForTests::add_max_amount_a().to_le_bytes()); + instruction.extend_from_slice(&BalanceForTests::add_max_amount_b().to_le_bytes()); let message = public_transaction::Message::try_new( Program::amm().id(), vec![ - helper_id_constructor(IdEnum::PoolDefinitionId), - helper_id_constructor(IdEnum::VaultAId), - helper_id_constructor(IdEnum::VaultBId), - helper_id_constructor(IdEnum::TokenLPDefinitionId), - helper_id_constructor(IdEnum::UserTokenAId), - helper_id_constructor(IdEnum::UserTokenBId), - helper_id_constructor(IdEnum::UserTokenLPId), + IdForTests::pool_definition_id(), + IdForTests::vault_a_id(), + IdForTests::vault_b_id(), + IdForTests::token_lp_definition_id(), + IdForTests::user_token_a_id(), + IdForTests::user_token_b_id(), + IdForTests::user_token_lp_id(), ], vec![0, 0], instruction, @@ -3602,67 +3704,57 @@ impl PoolDefinition { let witness_set = public_transaction::WitnessSet::for_message( &message, &[ - &helper_private_keys_constructor(PrivateKeysEnum::UserTokenAKey), - &helper_private_keys_constructor(PrivateKeysEnum::UserTokenBKey), + &PrivateKeysForTests::user_token_a_key(), + &PrivateKeysForTests::user_token_b_key(), ], ); let tx = PublicTransaction::new(message, witness_set); state.transition_from_public_transaction(&tx).unwrap(); - let pool_post = state.get_account_by_id(&helper_id_constructor(IdEnum::PoolDefinitionId)); - let vault_a_post = state.get_account_by_id(&helper_id_constructor(IdEnum::VaultAId)); - let vault_b_post = state.get_account_by_id(&helper_id_constructor(IdEnum::VaultBId)); - let token_lp_post = - state.get_account_by_id(&helper_id_constructor(IdEnum::TokenLPDefinitionId)); - let user_token_a_post = - state.get_account_by_id(&helper_id_constructor(IdEnum::UserTokenAId)); - let user_token_b_post = - state.get_account_by_id(&helper_id_constructor(IdEnum::UserTokenBId)); - let user_token_lp_post = - state.get_account_by_id(&helper_id_constructor(IdEnum::UserTokenLPId)); + let pool_post = state.get_account_by_id(&IdForTests::pool_definition_id()); + let vault_a_post = state.get_account_by_id(&IdForTests::vault_a_id()); + let vault_b_post = state.get_account_by_id(&IdForTests::vault_b_id()); + let token_lp_post = state.get_account_by_id(&IdForTests::token_lp_definition_id()); + let user_token_a_post = state.get_account_by_id(&IdForTests::user_token_a_id()); + let user_token_b_post = state.get_account_by_id(&IdForTests::user_token_b_id()); + let user_token_lp_post = state.get_account_by_id(&IdForTests::user_token_lp_id()); - let expected_pool = helper_account_constructor(AccountsEnum::PoolDefinitionAdd); - let expected_vault_a = helper_account_constructor(AccountsEnum::VaultAAdd); - let expected_vault_b = helper_account_constructor(AccountsEnum::VaultBAdd); - let expected_token_lp = helper_account_constructor(AccountsEnum::TokenLPDefinitionAdd); - let expected_user_token_a = helper_account_constructor(AccountsEnum::UserTokenAHoldingAdd); - let expected_user_token_b = helper_account_constructor(AccountsEnum::UserTokenBHoldingAdd); - let expected_user_token_lp = - helper_account_constructor(AccountsEnum::UserTokenLPHoldingAdd); + let expected_pool = AccountForTests::pool_definition_add(); + let expected_vault_a = AccountForTests::vault_a_add(); + let expected_vault_b = AccountForTests::vault_b_add(); + let expected_token_lp = AccountForTests::token_lp_definition_add(); + let expected_user_token_a = AccountForTests::user_token_a_holding_add(); + let expected_user_token_b = AccountForTests::user_token_b_holding_add(); + let expected_user_token_lp = AccountForTests::user_token_lp_holding_add(); - assert!(pool_post == expected_pool); - assert!(vault_a_post == expected_vault_a); - assert!(vault_b_post == expected_vault_b); - assert!(token_lp_post == expected_token_lp); - assert!(user_token_a_post == expected_user_token_a); - assert!(user_token_b_post == expected_user_token_b); - assert!(user_token_lp_post == expected_user_token_lp); + assert_eq!(pool_post, expected_pool); + assert_eq!(vault_a_post, expected_vault_a); + assert_eq!(vault_b_post, expected_vault_b); + assert_eq!(token_lp_post, expected_token_lp); + assert_eq!(user_token_a_post, expected_user_token_a); + assert_eq!(user_token_b_post, expected_user_token_b); + assert_eq!(user_token_lp_post, expected_user_token_lp); } #[test] fn test_simple_amm_swap_1() { - let mut state = amm_state_constructor(); + let mut state = state_for_amm_tests(); let mut instruction: Vec = Vec::new(); - instruction.push(1); - instruction.extend_from_slice( - &helper_balances_constructor(BalancesEnum::SwapAmountIn).to_le_bytes(), - ); - instruction.extend_from_slice( - &helper_balances_constructor(BalancesEnum::SwapMinAmountOUt).to_le_bytes(), - ); - instruction - .extend_from_slice(&helper_id_constructor(IdEnum::TokenBDefinitionId).to_bytes()); + instruction.push(AMM_SWAP); + instruction.extend_from_slice(&BalanceForTests::swap_amount_in().to_le_bytes()); + instruction.extend_from_slice(&BalanceForTests::swap_min_amount_out().to_le_bytes()); + instruction.extend_from_slice(&IdForTests::token_b_definition_id().to_bytes()); let message = public_transaction::Message::try_new( Program::amm().id(), vec![ - helper_id_constructor(IdEnum::PoolDefinitionId), - helper_id_constructor(IdEnum::VaultAId), - helper_id_constructor(IdEnum::VaultBId), - helper_id_constructor(IdEnum::UserTokenAId), - helper_id_constructor(IdEnum::UserTokenBId), + IdForTests::pool_definition_id(), + IdForTests::vault_a_id(), + IdForTests::vault_b_id(), + IdForTests::user_token_a_id(), + IdForTests::user_token_b_id(), ], vec![0], instruction, @@ -3671,60 +3763,49 @@ impl PoolDefinition { let witness_set = public_transaction::WitnessSet::for_message( &message, - &[&helper_private_keys_constructor( - PrivateKeysEnum::UserTokenBKey, - )], + &[&PrivateKeysForTests::user_token_b_key()], ); let tx = PublicTransaction::new(message, witness_set); state.transition_from_public_transaction(&tx).unwrap(); - let pool_post = state.get_account_by_id(&helper_id_constructor(IdEnum::PoolDefinitionId)); - let vault_a_post = state.get_account_by_id(&helper_id_constructor(IdEnum::VaultAId)); - let vault_b_post = state.get_account_by_id(&helper_id_constructor(IdEnum::VaultBId)); - let user_token_a_post = - state.get_account_by_id(&helper_id_constructor(IdEnum::UserTokenAId)); - let user_token_b_post = - state.get_account_by_id(&helper_id_constructor(IdEnum::UserTokenBId)); + let pool_post = state.get_account_by_id(&IdForTests::pool_definition_id()); + let vault_a_post = state.get_account_by_id(&IdForTests::vault_a_id()); + let vault_b_post = state.get_account_by_id(&IdForTests::vault_b_id()); + let user_token_a_post = state.get_account_by_id(&IdForTests::user_token_a_id()); + let user_token_b_post = state.get_account_by_id(&IdForTests::user_token_b_id()); - let expected_pool = helper_account_constructor(AccountsEnum::PoolDefinitionSwap1); - let expected_vault_a = helper_account_constructor(AccountsEnum::VaultASwap1); - let expected_vault_b = helper_account_constructor(AccountsEnum::VaultBSwap1); - let expected_user_token_a = - helper_account_constructor(AccountsEnum::UserTokenAHoldingSwap1); - let expected_user_token_b = - helper_account_constructor(AccountsEnum::UserTokenBHoldingSwap1); + let expected_pool = AccountForTests::pool_definition_swap_1(); + let expected_vault_a = AccountForTests::vault_a_swap_1(); + let expected_vault_b = AccountForTests::vault_b_swap_1(); + let expected_user_token_a = AccountForTests::user_token_a_holding_swap_1(); + let expected_user_token_b = AccountForTests::user_token_b_holding_swap_1(); - assert!(pool_post == expected_pool); - assert!(vault_a_post == expected_vault_a); - assert!(vault_b_post == expected_vault_b); - assert!(user_token_a_post == expected_user_token_a); - assert!(user_token_b_post == expected_user_token_b); + assert_eq!(pool_post, expected_pool); + assert_eq!(vault_a_post, expected_vault_a); + assert_eq!(vault_b_post, expected_vault_b); + assert_eq!(user_token_a_post, expected_user_token_a); + assert_eq!(user_token_b_post, expected_user_token_b); } #[test] fn test_simple_amm_swap_2() { - let mut state = amm_state_constructor(); + let mut state = state_for_amm_tests(); let mut instruction: Vec = Vec::new(); - instruction.push(1); - instruction.extend_from_slice( - &helper_balances_constructor(BalancesEnum::SwapAmountIn).to_le_bytes(), - ); - instruction.extend_from_slice( - &helper_balances_constructor(BalancesEnum::SwapMinAmountOUt).to_le_bytes(), - ); - instruction - .extend_from_slice(&helper_id_constructor(IdEnum::TokenADefinitionId).to_bytes()); + instruction.push(AMM_SWAP); + instruction.extend_from_slice(&BalanceForTests::swap_amount_in().to_le_bytes()); + instruction.extend_from_slice(&BalanceForTests::swap_min_amount_out().to_le_bytes()); + instruction.extend_from_slice(&IdForTests::token_a_definition_id().to_bytes()); let message = public_transaction::Message::try_new( Program::amm().id(), vec![ - helper_id_constructor(IdEnum::PoolDefinitionId), - helper_id_constructor(IdEnum::VaultAId), - helper_id_constructor(IdEnum::VaultBId), - helper_id_constructor(IdEnum::UserTokenAId), - helper_id_constructor(IdEnum::UserTokenBId), + IdForTests::pool_definition_id(), + IdForTests::vault_a_id(), + IdForTests::vault_b_id(), + IdForTests::user_token_a_id(), + IdForTests::user_token_b_id(), ], vec![0], instruction, @@ -3733,35 +3814,29 @@ impl PoolDefinition { let witness_set = public_transaction::WitnessSet::for_message( &message, - &[&helper_private_keys_constructor( - PrivateKeysEnum::UserTokenAKey, - )], + &[&PrivateKeysForTests::user_token_a_key()], ); let tx = PublicTransaction::new(message, witness_set); state.transition_from_public_transaction(&tx).unwrap(); - let pool_post = state.get_account_by_id(&helper_id_constructor(IdEnum::PoolDefinitionId)); - let vault_a_post = state.get_account_by_id(&helper_id_constructor(IdEnum::VaultAId)); - let vault_b_post = state.get_account_by_id(&helper_id_constructor(IdEnum::VaultBId)); - let user_token_a_post = - state.get_account_by_id(&helper_id_constructor(IdEnum::UserTokenAId)); - let user_token_b_post = - state.get_account_by_id(&helper_id_constructor(IdEnum::UserTokenBId)); + let pool_post = state.get_account_by_id(&IdForTests::pool_definition_id()); + let vault_a_post = state.get_account_by_id(&IdForTests::vault_a_id()); + let vault_b_post = state.get_account_by_id(&IdForTests::vault_b_id()); + let user_token_a_post = state.get_account_by_id(&IdForTests::user_token_a_id()); + let user_token_b_post = state.get_account_by_id(&IdForTests::user_token_b_id()); - let expected_pool = helper_account_constructor(AccountsEnum::PoolDefinitionSwap2); - let expected_vault_a = helper_account_constructor(AccountsEnum::VaultASwap2); - let expected_vault_b = helper_account_constructor(AccountsEnum::VaultBSwap2); - let expected_user_token_a = - helper_account_constructor(AccountsEnum::UserTokenAHoldingSwap2); - let expected_user_token_b = - helper_account_constructor(AccountsEnum::UserTokenBHoldingSwap2); + let expected_pool = AccountForTests::pool_definition_swap_2(); + let expected_vault_a = AccountForTests::vault_a_swap_2(); + let expected_vault_b = AccountForTests::vault_b_swap_2(); + let expected_user_token_a = AccountForTests::user_token_a_holding_swap_2(); + let expected_user_token_b = AccountForTests::user_token_b_holding_swap_2(); - assert!(pool_post == expected_pool); - assert!(vault_a_post == expected_vault_a); - assert!(vault_b_post == expected_vault_b); - assert!(user_token_a_post == expected_user_token_a); - assert!(user_token_b_post == expected_user_token_b); + assert_eq!(pool_post, expected_pool); + assert_eq!(vault_a_post, expected_vault_a); + assert_eq!(vault_b_post, expected_vault_b); + assert_eq!(user_token_a_post, expected_user_token_a); + assert_eq!(user_token_b_post, expected_user_token_b); } #[test] @@ -4152,7 +4227,7 @@ impl PoolDefinition { this }; - assert!(expected_sender_post == sender_post); - assert!(expected_recipient_post == recipient_post); + assert_eq!(expected_sender_post, sender_post); + assert_eq!(expected_recipient_post, recipient_post); } } From 9601e0053e3ffc8e0157c261d04dbcac6d49dbab Mon Sep 17 00:00:00 2001 From: jonesmarvin8 <83104039+jonesmarvin8@users.noreply.github.com> Date: Fri, 19 Dec 2025 20:05:42 -0500 Subject: [PATCH 11/33] removed enums --- nssa/program_methods/guest/src/bin/token.rs | 812 ++++++++++---------- 1 file changed, 398 insertions(+), 414 deletions(-) diff --git a/nssa/program_methods/guest/src/bin/token.rs b/nssa/program_methods/guest/src/bin/token.rs index ee777ec..3adf4fc 100644 --- a/nssa/program_methods/guest/src/bin/token.rs +++ b/nssa/program_methods/guest/src/bin/token.rs @@ -109,8 +109,6 @@ fn is_token_holding_type_valid(standard: u8) -> bool { } } - - struct TokenDefinition { account_type: u8, name: [u8; 6], @@ -306,7 +304,6 @@ impl TokenMetadata { } } - fn transfer(pre_states: &[AccountWithMetadata], balance_to_move: u128) -> Vec { if pre_states.len() != 2 { panic!("Invalid number of input accounts"); @@ -903,243 +900,227 @@ mod tests { new_definition_with_metadata, print_nft, transfer, }; - enum BalanceEnum { - InitSupply, - HoldingBalance, - InitSupplyBurned, - HoldingBalanceBurned, - BurnSuccess, - BurnInsufficient, - MintSuccess, - InitSupplyMint, - HoldingBalanceMint, - MintOverflow, - RecipientPostTransfer, - RecipientUninitPostTransfer, - SenderPostTransfer, - TransferAmount, - PrintableCopies, - } + struct BalanceForTests; + struct IdForTests; - enum AccountsEnum { - DefinitionAccountAuth, - DefinitionAccountNotAuth, - HoldingDiffDef, - HoldingSameDefAuth, - HoldingSameDefNotAuth, - HoldingSameDefNotAuthOverflow, - DefinitionAccountPostBurn, - HoldingAccountPostBurn, - InitMint, - DefinitionAccountMint, - HoldingSameDefMint, - HoldingSameDefAuthLargeBalance, - DefinitionAccountAuthNonFungible, - DefinitionAccountUninit, - HoldingAccountUninit, - HoldingAccountInit, - DefinitionAccountUnclaimed, - HoldingAccountUnclaimed, - HoldingAccount2Init, - HoldingAccount2InitPostTransfer, - HoldingAccount2UninitPostTransfer, - HoldingAccountInitPostTransfer, - HoldingAccountMasterNFT, - HoldingAccountMasterNFTInsufficientBalance, - HoldingAccountMasterNFTAfterPrint, - HoldingAccountPrintedNFT, - HoldingAccountMasterNFTTransferredTo, - HoldingAccountMasterNFTPostTransfer, - } + struct AccountForTests; - enum IdEnum { - PoolDefinitionId, - PoolDefinitionIdDiff, - HoldingId, - Holding2Id, - MetadataId, - } - - fn helper_account_constructor(selection: AccountsEnum) -> AccountWithMetadata { - match selection { - AccountsEnum::DefinitionAccountAuth => AccountWithMetadata { + impl AccountForTests { + fn definition_account_auth() -> AccountWithMetadata { + AccountWithMetadata { account: Account { program_owner: [5u32; 8], balance: 0u128, data: TokenDefinition::into_data(TokenDefinition { account_type: TOKEN_STANDARD_FUNGIBLE_TOKEN, name: [2; 6], - total_supply: helper_balance_constructor(BalanceEnum::InitSupply), + total_supply: BalanceForTests::init_supply(), metadata_id: AccountId::new([0; 32]), }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountsEnum::DefinitionAccountNotAuth => AccountWithMetadata { + account_id: IdForTests::pool_definition_id(), + } + } + + fn definition_account_without_auth() -> AccountWithMetadata { + AccountWithMetadata { account: Account { program_owner: [5u32; 8], balance: 0u128, data: TokenDefinition::into_data(TokenDefinition { account_type: TOKEN_STANDARD_FUNGIBLE_TOKEN, name: [2; 6], - total_supply: helper_balance_constructor(BalanceEnum::InitSupply), + total_supply: BalanceForTests::init_supply(), metadata_id: AccountId::new([0; 32]), }), nonce: 0, }, is_authorized: false, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountsEnum::HoldingDiffDef => AccountWithMetadata { + account_id: IdForTests::pool_definition_id(), + } + } + + fn holding_different_definition() -> AccountWithMetadata { + AccountWithMetadata { account: Account { program_owner: [5u32; 8], balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: TOKEN_HOLDING_STANDARD, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionIdDiff), - balance: helper_balance_constructor(BalanceEnum::HoldingBalance), + definition_id: IdForTests::pool_definition_id_diff(), + balance: BalanceForTests::holding_balance(), }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::HoldingId), - }, - AccountsEnum::HoldingSameDefAuth => AccountWithMetadata { + account_id: IdForTests::holding_id(), + } + } + + fn holding_same_definition_with_authorization() -> AccountWithMetadata { + AccountWithMetadata { account: Account { program_owner: [5u32; 8], balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: TOKEN_HOLDING_STANDARD, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), - balance: helper_balance_constructor(BalanceEnum::HoldingBalance), + definition_id: IdForTests::pool_definition_id(), + balance: BalanceForTests::holding_balance(), }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::HoldingId), - }, - AccountsEnum::HoldingSameDefNotAuth => AccountWithMetadata { + account_id: IdForTests::holding_id(), + } + } + + fn holding_same_definition_without_authorization() -> AccountWithMetadata { + AccountWithMetadata { account: Account { program_owner: [5u32; 8], balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: TOKEN_HOLDING_STANDARD, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), - balance: helper_balance_constructor(BalanceEnum::HoldingBalance), + definition_id: IdForTests::pool_definition_id(), + balance: BalanceForTests::holding_balance(), }), nonce: 0, }, is_authorized: false, - account_id: helper_id_constructor(IdEnum::HoldingId), - }, - AccountsEnum::HoldingSameDefNotAuthOverflow => AccountWithMetadata { + account_id: IdForTests::holding_id(), + } + } + + fn holding_same_definition_without_authorization_overflow() -> AccountWithMetadata { + AccountWithMetadata { account: Account { program_owner: [5u32; 8], balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: TOKEN_HOLDING_STANDARD, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), - balance: helper_balance_constructor(BalanceEnum::InitSupply), + definition_id: IdForTests::pool_definition_id(), + balance: BalanceForTests::init_supply(), }), nonce: 0, }, is_authorized: false, - account_id: helper_id_constructor(IdEnum::HoldingId), - }, - AccountsEnum::DefinitionAccountPostBurn => AccountWithMetadata { + account_id: IdForTests::holding_id(), + } + } + + fn definition_account_post_burn() -> AccountWithMetadata { + AccountWithMetadata { account: Account { program_owner: [5u32; 8], balance: 0u128, data: TokenDefinition::into_data(TokenDefinition { account_type: TOKEN_STANDARD_FUNGIBLE_TOKEN, name: [2; 6], - total_supply: helper_balance_constructor(BalanceEnum::InitSupplyBurned), + total_supply: BalanceForTests::init_supply_burned(), metadata_id: AccountId::new([0; 32]), }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountsEnum::HoldingAccountPostBurn => AccountWithMetadata { + account_id: IdForTests::pool_definition_id(), + } + } + + fn holding_account_post_burn() -> AccountWithMetadata { + AccountWithMetadata { account: Account { program_owner: [5u32; 8], balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: TOKEN_HOLDING_STANDARD, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), - balance: helper_balance_constructor(BalanceEnum::HoldingBalanceBurned), + definition_id: IdForTests::pool_definition_id(), + balance: BalanceForTests::holding_balance_burned(), }), nonce: 0, }, is_authorized: false, - account_id: helper_id_constructor(IdEnum::HoldingId), - }, - AccountsEnum::HoldingAccountUninit => AccountWithMetadata { + account_id: IdForTests::holding_id(), + } + } + + fn holding_account_uninit() -> AccountWithMetadata { + AccountWithMetadata { account: Account::default(), is_authorized: false, - account_id: helper_id_constructor(IdEnum::Holding2Id), - }, - AccountsEnum::InitMint => AccountWithMetadata { + account_id: IdForTests::holding_id_2(), + } + } + + fn init_mint() -> AccountWithMetadata { + AccountWithMetadata { account: Account { program_owner: [0u32; 8], balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: TOKEN_HOLDING_STANDARD, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), - balance: helper_balance_constructor(BalanceEnum::MintSuccess), + definition_id: IdForTests::pool_definition_id(), + balance: BalanceForTests::mint_success(), }), nonce: 0, }, is_authorized: false, - account_id: helper_id_constructor(IdEnum::HoldingId), - }, - AccountsEnum::HoldingSameDefMint => AccountWithMetadata { + account_id: IdForTests::holding_id(), + } + } + + fn holding_account_same_definition_mint() -> AccountWithMetadata { + AccountWithMetadata { account: Account { program_owner: [5u32; 8], balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: TOKEN_HOLDING_STANDARD, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), - balance: helper_balance_constructor(BalanceEnum::HoldingBalanceMint), + definition_id: IdForTests::pool_definition_id(), + balance: BalanceForTests::holding_balance_mint(), }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountsEnum::DefinitionAccountMint => AccountWithMetadata { + account_id: IdForTests::pool_definition_id(), + } + } + fn definition_account_mint() -> AccountWithMetadata { + AccountWithMetadata { account: Account { program_owner: [5u32; 8], balance: 0u128, data: TokenDefinition::into_data(TokenDefinition { account_type: TOKEN_STANDARD_FUNGIBLE_TOKEN, name: [2; 6], - total_supply: helper_balance_constructor(BalanceEnum::InitSupplyMint), + total_supply: BalanceForTests::init_supply_mint(), metadata_id: AccountId::new([0; 32]), }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountsEnum::HoldingSameDefAuthLargeBalance => AccountWithMetadata { + account_id: IdForTests::pool_definition_id(), + } + } + fn holding_same_definition_with_authorization_and_large_balance() -> AccountWithMetadata { + AccountWithMetadata { account: Account { program_owner: [5u32; 8], balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: TOKEN_HOLDING_STANDARD, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), - balance: helper_balance_constructor(BalanceEnum::MintOverflow), + definition_id: IdForTests::pool_definition_id(), + balance: BalanceForTests::mint_overflow(), }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountsEnum::DefinitionAccountAuthNonFungible => AccountWithMetadata { + account_id: IdForTests::pool_definition_id(), + } + } + fn definition_account_with_authorization_nonfungible() -> AccountWithMetadata { + AccountWithMetadata { account: Account { program_owner: [5u32; 8], balance: 0u128, @@ -1152,230 +1133,319 @@ mod tests { nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountsEnum::DefinitionAccountUninit => AccountWithMetadata { + account_id: IdForTests::pool_definition_id(), + } + } + fn definition_account_uninit() -> AccountWithMetadata { + AccountWithMetadata { account: Account::default(), is_authorized: false, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountsEnum::HoldingAccountInit => AccountWithMetadata { + account_id: IdForTests::pool_definition_id(), + } + } + + fn holding_account_init() -> AccountWithMetadata { + AccountWithMetadata { account: Account { program_owner: [5u32; 8], balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: TOKEN_HOLDING_STANDARD, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), - balance: helper_balance_constructor(BalanceEnum::InitSupply), + definition_id: IdForTests::pool_definition_id(), + balance: BalanceForTests::init_supply(), }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::HoldingId), - }, - AccountsEnum::DefinitionAccountUnclaimed => AccountWithMetadata { + account_id: IdForTests::holding_id(), + } + } + fn definition_account_unclaimed() -> AccountWithMetadata { + AccountWithMetadata { account: Account { program_owner: [0u32; 8], balance: 0u128, data: TokenDefinition::into_data(TokenDefinition { account_type: TOKEN_STANDARD_FUNGIBLE_TOKEN, name: [2; 6], - total_supply: helper_balance_constructor(BalanceEnum::InitSupply), + total_supply: BalanceForTests::init_supply(), metadata_id: AccountId::new([0; 32]), }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::PoolDefinitionId), - }, - AccountsEnum::HoldingAccountUnclaimed => AccountWithMetadata { + account_id: IdForTests::pool_definition_id(), + } + } + fn holding_account_unclaimed() -> AccountWithMetadata { + AccountWithMetadata { account: Account { program_owner: [0u32; 8], balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: TOKEN_HOLDING_STANDARD, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), - balance: helper_balance_constructor(BalanceEnum::InitSupply), + definition_id: IdForTests::pool_definition_id(), + balance: BalanceForTests::init_supply(), }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::HoldingId), - }, - AccountsEnum::HoldingAccount2Init => AccountWithMetadata { + account_id: IdForTests::holding_id(), + } + } + + fn holding_account2_init() -> AccountWithMetadata { + AccountWithMetadata { account: Account { program_owner: [5u32; 8], balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: TOKEN_HOLDING_STANDARD, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), - balance: helper_balance_constructor(BalanceEnum::InitSupply), + definition_id: IdForTests::pool_definition_id(), + balance: BalanceForTests::init_supply(), }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::Holding2Id), - }, - AccountsEnum::HoldingAccount2InitPostTransfer => AccountWithMetadata { + account_id: IdForTests::holding_id_2(), + } + } + + fn holding_account2_init_post_transfer() -> AccountWithMetadata { + AccountWithMetadata { account: Account { program_owner: [5u32; 8], balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: TOKEN_HOLDING_STANDARD, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), - balance: helper_balance_constructor(BalanceEnum::RecipientPostTransfer), + definition_id: IdForTests::pool_definition_id(), + balance: BalanceForTests::recipient_post_transfer(), }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::Holding2Id), - }, - AccountsEnum::HoldingAccountInitPostTransfer => AccountWithMetadata { + account_id: IdForTests::holding_id_2(), + } + } + + fn holding_account_init_post_transfer() -> AccountWithMetadata { + AccountWithMetadata { account: Account { program_owner: [5u32; 8], balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: TOKEN_HOLDING_STANDARD, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), - balance: helper_balance_constructor(BalanceEnum::SenderPostTransfer), + definition_id: IdForTests::pool_definition_id(), + balance: BalanceForTests::sender_post_transfer(), }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::HoldingId), - }, - AccountsEnum::HoldingAccount2UninitPostTransfer => AccountWithMetadata { + account_id: IdForTests::holding_id(), + } + } + + fn holding_account2_uninit_post_transfer() -> AccountWithMetadata { + AccountWithMetadata { account: Account { program_owner: [0u32; 8], balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: TOKEN_HOLDING_STANDARD, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), - balance: helper_balance_constructor( - BalanceEnum::RecipientUninitPostTransfer, - ), + definition_id: IdForTests::pool_definition_id(), + balance: BalanceForTests::recipient_uninit_post_transfer(), }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::Holding2Id), - }, - AccountsEnum::HoldingAccountMasterNFT => AccountWithMetadata { + account_id: IdForTests::holding_id_2(), + } + } + + fn holding_account_master_nft() -> AccountWithMetadata { + AccountWithMetadata { account: Account { program_owner: [5u32; 8], balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: TOKEN_HOLDING_NFT_MASTER, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), - balance: helper_balance_constructor(BalanceEnum::PrintableCopies), + definition_id: IdForTests::pool_definition_id(), + balance: BalanceForTests::printable_copies(), }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::HoldingId), - }, - AccountsEnum::HoldingAccountMasterNFTInsufficientBalance => AccountWithMetadata { + account_id: IdForTests::holding_id(), + } + } + + fn holding_account_master_nft_insufficient_balance() -> AccountWithMetadata { + AccountWithMetadata { account: Account { program_owner: [5u32; 8], balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: TOKEN_HOLDING_NFT_MASTER, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + definition_id: IdForTests::pool_definition_id(), balance: 1, }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::HoldingId), - }, - AccountsEnum::HoldingAccountMasterNFTAfterPrint => AccountWithMetadata { + account_id: IdForTests::holding_id(), + } + } + + fn holding_account_master_nft_after_print() -> AccountWithMetadata { + AccountWithMetadata { account: Account { program_owner: [5u32; 8], balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: TOKEN_HOLDING_NFT_MASTER, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), - balance: helper_balance_constructor(BalanceEnum::PrintableCopies) - 1, + definition_id: IdForTests::pool_definition_id(), + balance: BalanceForTests::printable_copies() - 1, }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::HoldingId), - }, - AccountsEnum::HoldingAccountPrintedNFT => AccountWithMetadata { + account_id: IdForTests::holding_id(), + } + } + + fn holding_account_printed_nft() -> AccountWithMetadata { + AccountWithMetadata { account: Account { program_owner: [0u32; 8], balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: TOKEN_HOLDING_NFT_PRINTED_COPY, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + definition_id: IdForTests::pool_definition_id(), balance: 1, }), nonce: 0, }, is_authorized: false, - account_id: helper_id_constructor(IdEnum::HoldingId), - }, - AccountsEnum::HoldingAccountMasterNFTTransferredTo => AccountWithMetadata { + account_id: IdForTests::holding_id(), + } + } + + fn holding_account_with_master_nft_transferred_to() -> AccountWithMetadata { + AccountWithMetadata { account: Account { program_owner: [0u32; 8], balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: TOKEN_HOLDING_NFT_MASTER, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), - balance: helper_balance_constructor(BalanceEnum::PrintableCopies), + definition_id: IdForTests::pool_definition_id(), + balance: BalanceForTests::printable_copies(), }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::Holding2Id), - }, - AccountsEnum::HoldingAccountMasterNFTPostTransfer => AccountWithMetadata { + account_id: IdForTests::holding_id_2(), + } + } + + fn holding_account_master_nft_post_transfer() -> AccountWithMetadata { + AccountWithMetadata { account: Account { program_owner: [5u32; 8], balance: 0u128, data: TokenHolding::into_data(TokenHolding { account_type: TOKEN_HOLDING_NFT_MASTER, - definition_id: helper_id_constructor(IdEnum::PoolDefinitionId), + definition_id: IdForTests::pool_definition_id(), balance: 0, }), nonce: 0, }, is_authorized: true, - account_id: helper_id_constructor(IdEnum::HoldingId), - }, - _ => panic!("Invalid selection"), + account_id: IdForTests::holding_id(), + } } } - fn helper_balance_constructor(selection: BalanceEnum) -> u128 { - match selection { - BalanceEnum::InitSupply => 100_000, - BalanceEnum::HoldingBalance => 1_000, - BalanceEnum::InitSupplyBurned => 99_500, - BalanceEnum::HoldingBalanceBurned => 500, - BalanceEnum::BurnSuccess => 500, - BalanceEnum::BurnInsufficient => 1_500, - BalanceEnum::MintSuccess => 50_000, - BalanceEnum::InitSupplyMint => 150_000, - BalanceEnum::HoldingBalanceMint => 51_000, - BalanceEnum::MintOverflow => (2 as u128).pow(128) - 40_000, - BalanceEnum::SenderPostTransfer => 95_000, - BalanceEnum::RecipientPostTransfer => 105_000, - BalanceEnum::RecipientUninitPostTransfer => 5_000, - BalanceEnum::TransferAmount => 5_000, - BalanceEnum::PrintableCopies => 10, - _ => panic!("Invalid selection"), + impl BalanceForTests { + fn init_supply() -> u128 { + 100_000 + } + + fn holding_balance() -> u128 { + 1_000 + } + + fn init_supply_burned() -> u128 { + 99_500 + } + + fn holding_balance_burned() -> u128 { + 500 + } + + fn burn_success() -> u128 { + 500 + } + + fn burn_insufficient() -> u128 { + 1_500 + } + + fn mint_success() -> u128 { + 50_000 + } + + fn holding_balance_mint() -> u128 { + 51_000 + } + + fn mint_overflow() -> u128 { + (2 as u128).pow(128) - 40_000 + } + + fn init_supply_mint() -> u128 { + 150_000 + } + + fn sender_post_transfer() -> u128 { + 95_000 + } + + fn recipient_post_transfer() -> u128 { + 105_000 + } + + fn recipient_uninit_post_transfer() -> u128 { + 5_000 + } + + fn transfer_amount() -> u128 { + 5_000 + } + + fn printable_copies() -> u128 { + 10 } } - fn helper_id_constructor(selection: IdEnum) -> AccountId { - match selection { - IdEnum::PoolDefinitionId => AccountId::new([15; 32]), - IdEnum::PoolDefinitionIdDiff => AccountId::new([16; 32]), - IdEnum::HoldingId => AccountId::new([17; 32]), - IdEnum::MetadataId => AccountId::new([42; 32]), - IdEnum::Holding2Id => AccountId::new([31; 32]), + impl IdForTests { + fn pool_definition_id() -> AccountId { + AccountId::new([15; 32]) + } + + fn pool_definition_id_diff() -> AccountId { + AccountId::new([16; 32]) + } + + fn holding_id() -> AccountId { + AccountId::new([17; 32]) + } + + fn holding_id_2() -> AccountId { + AccountId::new([42; 32]) + } + + fn metadata_id() -> AccountId { + AccountId::new([31; 32]) } } @@ -1458,25 +1528,21 @@ mod tests { #[test] fn test_new_definition_with_valid_inputs_succeeds() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::DefinitionAccountUninit), - helper_account_constructor(AccountsEnum::HoldingAccountUninit), + AccountForTests::definition_account_uninit(), + AccountForTests::holding_account_uninit(), ]; - let post_states = new_definition( - &pre_states, - [2u8; 6], - helper_balance_constructor(BalanceEnum::InitSupply), - ); + let post_states = new_definition(&pre_states, [2u8; 6], BalanceForTests::init_supply()); let [definition_account, holding_account] = post_states.try_into().ok().unwrap(); assert!( *definition_account.account() - == helper_account_constructor(AccountsEnum::DefinitionAccountUnclaimed).account + == AccountForTests::definition_account_unclaimed().account ); assert!( *holding_account.account() - == helper_account_constructor(AccountsEnum::HoldingAccountUnclaimed).account + == AccountForTests::holding_account_unclaimed().account ); } @@ -1586,8 +1652,8 @@ mod tests { #[test] fn test_transfer_with_different_definition_ids_should_fail() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::HoldingSameDefAuth), - helper_account_constructor(AccountsEnum::HoldingDiffDef), + AccountForTests::holding_same_definition_with_authorization(), + AccountForTests::holding_different_definition(), ]; let _post_states = transfer(&pre_states, 10); } @@ -1596,14 +1662,11 @@ mod tests { #[test] fn test_transfer_with_insufficient_balance_should_fail() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::HoldingSameDefAuth), - helper_account_constructor(AccountsEnum::HoldingSameDefMint), + AccountForTests::holding_same_definition_with_authorization(), + AccountForTests::holding_account_same_definition_mint(), ]; // Attempt to transfer 38 tokens - let _post_states = transfer( - &pre_states, - helper_balance_constructor(BalanceEnum::BurnInsufficient), - ); + let _post_states = transfer(&pre_states, BalanceForTests::burn_insufficient()); } #[should_panic(expected = "Sender authorization is missing")] @@ -1638,22 +1701,19 @@ mod tests { #[test] fn test_transfer_with_valid_inputs_succeeds() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::HoldingAccountInit), - helper_account_constructor(AccountsEnum::HoldingAccount2Init), + AccountForTests::holding_account_init(), + AccountForTests::holding_account2_init(), ]; - let post_states = transfer( - &pre_states, - helper_balance_constructor(BalanceEnum::TransferAmount), - ); + let post_states = transfer(&pre_states, BalanceForTests::transfer_amount()); let [sender_post, recipient_post] = post_states.try_into().ok().unwrap(); assert!( *sender_post.account() - == helper_account_constructor(AccountsEnum::HoldingAccountInitPostTransfer).account + == AccountForTests::holding_account_init_post_transfer().account ); assert!( *recipient_post.account() - == helper_account_constructor(AccountsEnum::HoldingAccount2InitPostTransfer) + == AccountForTests::holding_account2_init_post_transfer() .account ); } @@ -1662,59 +1722,39 @@ mod tests { #[test] fn test_transfer_with_master_nft_invalid_balance() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::HoldingAccountMasterNFT), - helper_account_constructor(AccountsEnum::HoldingAccountUninit), + AccountForTests::holding_account_master_nft(), + AccountForTests::holding_account_uninit(), ]; - let post_states = transfer( - &pre_states, - helper_balance_constructor(BalanceEnum::TransferAmount), - ); - let [sender_post, recipient_post] = post_states.try_into().ok().unwrap(); - - assert!( - *sender_post.account() - == helper_account_constructor(AccountsEnum::HoldingAccountInitPostTransfer).account - ); - assert!( - *recipient_post.account() - == helper_account_constructor(AccountsEnum::HoldingAccount2InitPostTransfer) - .account - ); + let post_states = transfer(&pre_states, BalanceForTests::transfer_amount()); } #[should_panic(expected = "Invalid balance in recipient account for NFT transfer")] #[test] fn test_transfer_with_master_nft_invalid_recipient_balance() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::HoldingAccountMasterNFT), - helper_account_constructor(AccountsEnum::HoldingAccountMasterNFTTransferredTo), + AccountForTests::holding_account_master_nft(), + AccountForTests::holding_account_with_master_nft_transferred_to(), ]; - let _post_states = transfer( - &pre_states, - helper_balance_constructor(BalanceEnum::PrintableCopies), - ); + let _post_states = transfer(&pre_states, BalanceForTests::printable_copies()); } #[test] fn test_transfer_with_master_nft_success() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::HoldingAccountMasterNFT), - helper_account_constructor(AccountsEnum::HoldingAccountUninit), + AccountForTests::holding_account_master_nft(), + AccountForTests::holding_account_uninit(), ]; - let post_states = transfer( - &pre_states, - helper_balance_constructor(BalanceEnum::PrintableCopies), - ); + let post_states = transfer(&pre_states, BalanceForTests::printable_copies()); let [sender_post, recipient_post] = post_states.try_into().ok().unwrap(); assert!( *sender_post.account() - == helper_account_constructor(AccountsEnum::HoldingAccountMasterNFTPostTransfer) + == AccountForTests::holding_account_master_nft_post_transfer() .account ); assert!( *recipient_post.account() - == helper_account_constructor(AccountsEnum::HoldingAccountMasterNFTTransferredTo) + == AccountForTests::holding_account_with_master_nft_transferred_to() .account ); } @@ -1722,22 +1762,20 @@ mod tests { #[test] fn test_token_initialize_account_succeeds() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::HoldingAccountInit), - helper_account_constructor(AccountsEnum::HoldingAccountUninit), + AccountForTests::holding_account_init(), + AccountForTests::holding_account2_init(), ]; - let post_states = transfer( - &pre_states, - helper_balance_constructor(BalanceEnum::TransferAmount), - ); + let post_states = transfer(&pre_states, BalanceForTests::transfer_amount()); let [sender_post, recipient_post] = post_states.try_into().ok().unwrap(); assert!( *sender_post.account() - == helper_account_constructor(AccountsEnum::HoldingAccountInitPostTransfer).account + == AccountForTests::holding_account_init_post_transfer() + .account ); assert!( *recipient_post.account() - == helper_account_constructor(AccountsEnum::HoldingAccount2UninitPostTransfer) + == AccountForTests::holding_account2_init_post_transfer() .account ); } @@ -1745,213 +1783,169 @@ mod tests { #[test] #[should_panic(expected = "Invalid number of accounts")] fn test_burn_invalid_number_of_accounts() { - let pre_states = vec![helper_account_constructor( - AccountsEnum::DefinitionAccountAuth, - )]; - let _post_states = burn( - &pre_states, - helper_balance_constructor(BalanceEnum::BurnSuccess), - ); + let pre_states = vec![ + AccountForTests::definition_account_auth(), + ]; + let _post_states = burn(&pre_states, BalanceForTests::burn_success()); } #[test] #[should_panic(expected = "Mismatch Token Definition and Token Holding")] fn test_burn_mismatch_def() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::DefinitionAccountAuth), - helper_account_constructor(AccountsEnum::HoldingDiffDef), + AccountForTests::definition_account_auth(), + AccountForTests::holding_different_definition(), ]; - let _post_states = burn( - &pre_states, - helper_balance_constructor(BalanceEnum::BurnSuccess), - ); + let _post_states = burn(&pre_states, BalanceForTests::burn_success()); } #[test] #[should_panic(expected = "Authorization is missing")] fn test_burn_missing_authorization() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::DefinitionAccountAuth), - helper_account_constructor(AccountsEnum::HoldingSameDefNotAuth), + AccountForTests::definition_account_auth(), + AccountForTests::holding_same_definition_without_authorization(), ]; - let _post_states = burn( - &pre_states, - helper_balance_constructor(BalanceEnum::BurnSuccess), - ); + let _post_states = burn(&pre_states, BalanceForTests::burn_success()); } #[test] #[should_panic(expected = "Insufficient balance to burn")] fn test_burn_insufficient_balance() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::DefinitionAccountAuth), - helper_account_constructor(AccountsEnum::HoldingSameDefAuth), + AccountForTests::definition_account_auth(), + AccountForTests::holding_same_definition_with_authorization(), ]; - let _post_states = burn( - &pre_states, - helper_balance_constructor(BalanceEnum::BurnInsufficient), - ); + let _post_states = burn(&pre_states, BalanceForTests::burn_insufficient()); } #[test] #[should_panic(expected = "Total supply underflow")] fn test_burn_total_supply_underflow() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::DefinitionAccountAuth), - helper_account_constructor(AccountsEnum::HoldingSameDefAuthLargeBalance), + AccountForTests::definition_account_auth(), + AccountForTests::holding_same_definition_with_authorization_and_large_balance(), ]; - let _post_states = burn( - &pre_states, - helper_balance_constructor(BalanceEnum::MintOverflow), - ); + let _post_states = burn(&pre_states, BalanceForTests::mint_overflow()); } #[test] fn test_burn_success() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::DefinitionAccountAuth), - helper_account_constructor(AccountsEnum::HoldingSameDefAuth), + AccountForTests::definition_account_auth(), + AccountForTests::holding_same_definition_with_authorization(), ]; - let post_states = burn( - &pre_states, - helper_balance_constructor(BalanceEnum::BurnSuccess), - ); + let post_states = burn(&pre_states, BalanceForTests::burn_success()); let def_post = post_states[0].clone(); let holding_post = post_states[1].clone(); assert!( *def_post.account() - == helper_account_constructor(AccountsEnum::DefinitionAccountPostBurn).account + == AccountForTests::definition_account_post_burn().account ); assert!( *holding_post.account() - == helper_account_constructor(AccountsEnum::HoldingAccountPostBurn).account + == AccountForTests::holding_account_post_burn().account ); } #[test] #[should_panic(expected = "Invalid number of accounts")] fn test_mint_invalid_number_of_accounts_1() { - let pre_states = vec![helper_account_constructor( - AccountsEnum::DefinitionAccountAuth, - )]; - let _post_states = mint_additional_supply( - &pre_states, - helper_balance_constructor(BalanceEnum::MintSuccess), - ); + let pre_states = vec![AccountForTests::definition_account_auth()]; + let _post_states = mint_additional_supply(&pre_states, BalanceForTests::mint_success()); } #[test] #[should_panic(expected = "Invalid number of accounts")] fn test_mint_invalid_number_of_accounts_2() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::DefinitionAccountAuth), - helper_account_constructor(AccountsEnum::HoldingSameDefMint), - helper_account_constructor(AccountsEnum::HoldingSameDefAuth), + AccountForTests::definition_account_auth(), + AccountForTests::holding_account_same_definition_mint(), + AccountForTests::holding_same_definition_with_authorization(), ]; - let _post_states = mint_additional_supply( - &pre_states, - helper_balance_constructor(BalanceEnum::MintSuccess), - ); + let _post_states = mint_additional_supply(&pre_states, BalanceForTests::mint_success()); } #[test] #[should_panic(expected = "Holding account must be valid")] fn test_mint_not_valid_holding_account() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::DefinitionAccountAuth), - helper_account_constructor(AccountsEnum::DefinitionAccountNotAuth), + AccountForTests::definition_account_auth(), + AccountForTests::definition_account_without_auth(), ]; - let _post_states = mint_additional_supply( - &pre_states, - helper_balance_constructor(BalanceEnum::MintSuccess), - ); + let _post_states = mint_additional_supply(&pre_states, BalanceForTests::mint_success()); } #[test] #[should_panic(expected = "Definition account must be valid")] fn test_mint_not_valid_definition_account() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::HoldingSameDefAuth), - helper_account_constructor(AccountsEnum::HoldingSameDefNotAuth), + AccountForTests::holding_same_definition_with_authorization(), + AccountForTests::holding_same_definition_without_authorization(), ]; - let _post_states = mint_additional_supply( - &pre_states, - helper_balance_constructor(BalanceEnum::MintSuccess), - ); + let _post_states = mint_additional_supply(&pre_states, BalanceForTests::mint_success()); } #[test] #[should_panic(expected = "Definition authorization is missing")] fn test_mint_missing_authorization() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::DefinitionAccountNotAuth), - helper_account_constructor(AccountsEnum::HoldingSameDefNotAuth), + AccountForTests::definition_account_without_auth(), + AccountForTests::holding_same_definition_without_authorization(), ]; - let _post_states = mint_additional_supply( - &pre_states, - helper_balance_constructor(BalanceEnum::MintSuccess), - ); + let _post_states = mint_additional_supply(&pre_states, BalanceForTests::mint_success()); } #[test] #[should_panic(expected = "Mismatch Token Definition and Token Holding")] fn test_mint_mismatched_token_definition() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::DefinitionAccountAuth), - helper_account_constructor(AccountsEnum::HoldingDiffDef), + AccountForTests::definition_account_auth(), + AccountForTests::holding_different_definition(), ]; - let _post_states = mint_additional_supply( - &pre_states, - helper_balance_constructor(BalanceEnum::MintSuccess), - ); + let _post_states = mint_additional_supply(&pre_states, BalanceForTests::mint_success()); } #[test] fn test_mint_success() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::DefinitionAccountAuth), - helper_account_constructor(AccountsEnum::HoldingSameDefNotAuth), + AccountForTests::definition_account_auth(), + AccountForTests::holding_same_definition_without_authorization(), ]; - let post_states = mint_additional_supply( - &pre_states, - helper_balance_constructor(BalanceEnum::MintSuccess), - ); + let post_states = mint_additional_supply(&pre_states, BalanceForTests::mint_success()); let def_post = post_states[0].clone(); let holding_post = post_states[1].clone(); assert!( *def_post.account() - == helper_account_constructor(AccountsEnum::DefinitionAccountMint).account + == AccountForTests::definition_account_mint().account ); assert!( *holding_post.account() - == helper_account_constructor(AccountsEnum::HoldingSameDefMint).account + == AccountForTests::holding_account_same_definition_mint().account ); } #[test] fn test_mint_uninit_holding_success() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::DefinitionAccountAuth), - helper_account_constructor(AccountsEnum::HoldingAccountUninit), + AccountForTests::definition_account_auth(), + AccountForTests::holding_account_uninit(), ]; - let post_states = mint_additional_supply( - &pre_states, - helper_balance_constructor(BalanceEnum::MintSuccess), - ); + let post_states = mint_additional_supply(&pre_states, BalanceForTests::mint_success()); let def_post = post_states[0].clone(); let holding_post = post_states[1].clone(); assert!( *def_post.account() - == helper_account_constructor(AccountsEnum::DefinitionAccountMint).account + == AccountForTests::definition_account_mint().account ); assert!( - *holding_post.account() == helper_account_constructor(AccountsEnum::InitMint).account + *holding_post.account() == AccountForTests::init_mint().account ); assert!(holding_post.requires_claim() == true); } @@ -1960,26 +1954,20 @@ mod tests { #[should_panic(expected = "Total supply overflow")] fn test_mint_total_supply_overflow() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::DefinitionAccountAuth), - helper_account_constructor(AccountsEnum::HoldingSameDefNotAuth), + AccountForTests::definition_account_auth(), + AccountForTests::holding_same_definition_without_authorization(), ]; - let _post_states = mint_additional_supply( - &pre_states, - helper_balance_constructor(BalanceEnum::MintOverflow), - ); + let _post_states = mint_additional_supply(&pre_states, BalanceForTests::mint_overflow()); } #[test] #[should_panic(expected = "New balance overflow")] fn test_mint_holding_account_overflow() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::DefinitionAccountAuth), - helper_account_constructor(AccountsEnum::HoldingSameDefNotAuthOverflow), + AccountForTests::definition_account_auth(), + AccountForTests::holding_same_definition_without_authorization_overflow(), ]; - let _post_states = mint_additional_supply( - &pre_states, - helper_balance_constructor(BalanceEnum::MintOverflow), - ); + let _post_states = mint_additional_supply(&pre_states, BalanceForTests::mint_overflow()); } #[test] @@ -1988,13 +1976,10 @@ mod tests { )] fn test_mint_cannot_mint_unmintable_tokens() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::DefinitionAccountAuthNonFungible), - helper_account_constructor(AccountsEnum::HoldingSameDefNotAuth), + AccountForTests::definition_account_with_authorization_nonfungible(), + AccountForTests::holding_same_definition_without_authorization(), ]; - let _post_states = mint_additional_supply( - &pre_states, - helper_balance_constructor(BalanceEnum::MintSuccess), - ); + let _post_states = mint_additional_supply(&pre_states, BalanceForTests::mint_success()); } #[should_panic(expected = "Invalid number of input accounts")] @@ -2103,7 +2088,7 @@ mod tests { let metadata_values: Data = Data::try_from([1u8; 450].to_vec()).unwrap(); let pre_states = vec![ - helper_account_constructor(AccountsEnum::DefinitionAccountAuth), + AccountForTests::definition_account_auth(), AccountWithMetadata { account: Account::default(), is_authorized: true, @@ -2140,7 +2125,7 @@ mod tests { is_authorized: true, account_id: AccountId::new([1; 32]), }, - helper_account_constructor(AccountsEnum::HoldingSameDefMint), + AccountForTests::holding_account_same_definition_mint(), AccountWithMetadata { account: Account::default(), is_authorized: true, @@ -2177,7 +2162,7 @@ mod tests { is_authorized: true, account_id: AccountId::new([2; 32]), }, - helper_account_constructor(AccountsEnum::HoldingSameDefMint), + AccountForTests::holding_account_same_definition_mint(), ]; let _post_states = new_definition_with_metadata( &pre_states, @@ -2372,9 +2357,9 @@ mod tests { #[should_panic(expected = "Invalid number of accounts")] #[test] fn test_print_nft_invalid_number_of_accounts_1() { - let pre_states = vec![helper_account_constructor( - AccountsEnum::HoldingAccountMasterNFT, - )]; + let pre_states = vec![ + AccountForTests::holding_account_master_nft() + ]; let _post_states = print_nft(&pre_states); } @@ -2382,9 +2367,9 @@ mod tests { #[test] fn test_print_nft_invalid_number_of_accounts_2() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::HoldingAccountMasterNFT), - helper_account_constructor(AccountsEnum::DefinitionAccountAuth), - helper_account_constructor(AccountsEnum::HoldingAccountUninit), + AccountForTests::holding_account_master_nft(), + AccountForTests::definition_account_auth(), + AccountForTests::holding_account_uninit(), ]; let _post_states = print_nft(&pre_states); } @@ -2393,8 +2378,8 @@ mod tests { #[test] fn test_print_nft_master_account_must_be_authorized() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::HoldingAccountUninit), - helper_account_constructor(AccountsEnum::HoldingAccountUninit), + AccountForTests::holding_account_uninit(), + AccountForTests::holding_account_uninit(), ]; let _post_states = print_nft(&pre_states); } @@ -2403,8 +2388,8 @@ mod tests { #[test] fn test_print_nft_print_account_initialized() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::HoldingAccountMasterNFT), - helper_account_constructor(AccountsEnum::HoldingAccountInit), + AccountForTests::holding_account_master_nft(), + AccountForTests::holding_account_init(), ]; let _post_states = print_nft(&pre_states); } @@ -2413,8 +2398,8 @@ mod tests { #[test] fn test_print_nft_master_nft_invalid_token_holding() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::DefinitionAccountAuth), - helper_account_constructor(AccountsEnum::HoldingAccountUninit), + AccountForTests::definition_account_auth(), + AccountForTests::holding_account_uninit(), ]; let _post_states = print_nft(&pre_states); } @@ -2423,8 +2408,8 @@ mod tests { #[test] fn test_print_nft_master_nft_not_nft_master_account() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::HoldingAccountInit), - helper_account_constructor(AccountsEnum::HoldingAccountUninit), + AccountForTests::holding_account_init(), + AccountForTests::holding_account_uninit(), ]; let _post_states = print_nft(&pre_states); } @@ -2433,8 +2418,8 @@ mod tests { #[test] fn test_print_nft_master_nft_insufficient_balance() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::HoldingAccountMasterNFTInsufficientBalance), - helper_account_constructor(AccountsEnum::HoldingAccountUninit), + AccountForTests::holding_account_master_nft_insufficient_balance(), + AccountForTests::holding_account_uninit(), ]; let _post_states = print_nft(&pre_states); } @@ -2442,8 +2427,8 @@ mod tests { #[test] fn test_print_nft_success() { let pre_states = vec![ - helper_account_constructor(AccountsEnum::HoldingAccountMasterNFT), - helper_account_constructor(AccountsEnum::HoldingAccountUninit), + AccountForTests::holding_account_master_nft(), + AccountForTests::holding_account_uninit(), ]; let post_states = print_nft(&pre_states); @@ -2452,12 +2437,11 @@ mod tests { assert!( *post_master_nft - == helper_account_constructor(AccountsEnum::HoldingAccountMasterNFTAfterPrint) - .account + == AccountForTests::holding_account_master_nft_after_print().account ); assert!( *post_printed - == helper_account_constructor(AccountsEnum::HoldingAccountPrintedNFT).account + == AccountForTests::holding_account_printed_nft().account ); } -} \ No newline at end of file +} From c30ba4be1a137bf4d4126dc82ed715587c787be0 Mon Sep 17 00:00:00 2001 From: jonesmarvin8 <83104039+jonesmarvin8@users.noreply.github.com> Date: Fri, 19 Dec 2025 20:08:05 -0500 Subject: [PATCH 12/33] various fixes --- nssa/core/src/account.rs | 6 +- nssa/program_methods/guest/src/bin/amm.rs | 451 ++++++++++------------ nssa/src/state.rs | 3 +- 3 files changed, 203 insertions(+), 257 deletions(-) diff --git a/nssa/core/src/account.rs b/nssa/core/src/account.rs index 86f70b5..d24dc8a 100644 --- a/nssa/core/src/account.rs +++ b/nssa/core/src/account.rs @@ -15,7 +15,7 @@ pub type Nonce = u128; /// Account to be used both in public and private contexts #[derive( - Serialize, Deserialize, Clone, Default, PartialEq, Eq, BorshSerialize, BorshDeserialize, + Clone, Default, Eq, PartialEq, Serialize, Deserialize, BorshSerialize, BorshDeserialize, )] #[cfg_attr(any(feature = "host", test), derive(Debug))] pub struct Account { @@ -25,7 +25,7 @@ pub struct Account { pub nonce: Nonce, } -#[derive(Serialize, Deserialize, Clone, PartialEq, Eq)] +#[derive(Clone, Eq, PartialEq, Serialize, Deserialize)] #[cfg_attr(any(feature = "host", test), derive(Debug))] pub struct AccountWithMetadata { pub account: Account, @@ -44,7 +44,7 @@ impl AccountWithMetadata { } } -#[derive(Serialize, Deserialize, Clone, Default, PartialEq, Eq, Hash, BorshSerialize, BorshDeserialize)] +#[derive(Default, Clone, Eq, Hash, PartialEq, Serialize, Deserialize, BorshSerialize, BorshDeserialize)] #[cfg_attr( any(feature = "host", test), derive(Debug, Copy, PartialOrd, Ord) diff --git a/nssa/program_methods/guest/src/bin/amm.rs b/nssa/program_methods/guest/src/bin/amm.rs index 2f18ddd..7d0bf97 100644 --- a/nssa/program_methods/guest/src/bin/amm.rs +++ b/nssa/program_methods/guest/src/bin/amm.rs @@ -10,7 +10,7 @@ use nssa_core::{ // 1. New AMM definition. // Arguments to this function are: // * Seven accounts: [amm_pool, vault_holding_a, vault_holding_b, pool_lp, user_holding_a, user_holding_b, user_holding_lp]. -// For new AMM Pool: amm_pool, vault_holding_a, vault_holding_b, pool_lp and user_holding_lp are default accounts. +// For new AMM Pool: amm_pool, vault_holding_a, vault_holding_b, pool_lp and user_holding_lp are default accounts. // amm_pool is a default account that will initiate the amm definition account values // vault_holding_a is a token holding account for token a // vault_holding_b is a token holding account for token b @@ -27,6 +27,8 @@ use nssa_core::{ // * An instruction data of 65-bytes, indicating the initial amm reserves' balances and token_program_id with // the following layout: // [0x00 || array of balances (little-endian 16 bytes) || AMM_PROGRAM_ID)] +// * Internally, calls compute_liquidity_token_pda_seed, compute_vault_pda_seed to authorize transfers. +// * Internally, calls compute_pool_da, compute_vault_pda and compute_vault_pda to check various AccountIds are correct. // 2. Swap assets // Arguments to this function are: // * Five accounts: [amm_pool, vault_holding_a, vault_holding_b, user_holding_a, user_holding_b]. @@ -34,6 +36,13 @@ use nssa_core::{ // * An instruction data byte string of length 65, indicating which token type to swap, quantity of tokens put into the swap // (of type TOKEN_DEFINITION_ID) and min_amount_out. // [0x01 || amount (little-endian 16 bytes) || TOKEN_DEFINITION_ID]. +// * Internally, calls swap logic. +// * Four accounts: [user_deposit, vault_deposit, vault_withdraw, user_withdraw]. +// user_deposit and vault_deposit define deposit transaction. +// vault_withdraw and user_withdraw define withdraw transaction. +// * deposit_amount is the amount for user_deposit -> vault_deposit transfer. +// * reserve_amounts is the pool's reserves; used to compute the withdraw amount. +// * Outputs the token transfers as a Vec and the withdraw amount. // 3. Add liquidity // Arguments to this function are: // * Seven accounts: [amm_pool, vault_holding_a, vault_holding_b, pool_lp, user_holding_a, user_holding_a, user_holding_lp]. @@ -41,33 +50,18 @@ use nssa_core::{ // * An instruction data byte string of length 49, amounts for minimum amount of liquidity from add (min_amount_lp), // * max amount added for each token (max_amount_a and max_amount_b); indicate // [0x02 || array of of balances (little-endian 16 bytes)]. +// * Internally, calls compute_liquidity_token_pda_seed to compute liquidity pool PDA seed. // 4. Remove liquidity // * Seven accounts: [amm_pool, vault_holding_a, vault_holding_b, pool_lp, user_holding_a, user_holding_a, user_holding_lp]. // * Requires authorization: user_holding_lp // * An instruction data byte string of length 49, amounts for minimum amount of liquidity to redeem (balance_lp), // * minimum balance of each token to remove (min_amount_a and min_amount_b); indicate // [0x03 || array of balances (little-endian 16 bytes)]. -// - Internal functions: -// - Swap logic -// Arguments of this function are: -// * Four accounts: [user_deposit, vault_deposit, vault_withdraw, user_withdraw]. -// user_deposit and vault_deposit define deposit transaction. -// vault_withdraw and user_withdraw define withdraw transaction. -// * deposit_amount is the amount for user_deposit -> vault_deposit transfer. -// * reserve_amounts is the pool's reserves; used to compute the withdraw amount. -// * Outputs the token transfers as a Vec and the withdraw amount. -// - PDA computations: -// * compute_pool_pda: AMM_PROGRAM_ID, token definitions for the pool pair -// * compute_vault_pda: AMM_PROGRAM_ID, pool definition id, definition token id -// * compute_liquidity_token_pda: AMM_PROGRAM, pool definition id, pool definition id -// - PDA seed computations: -// * compute_pool_pda_seed: token definitions for the pool pair -// * compute_vault_pda_seed: pool definition id, definition token id, -// * compute_liquidity_token_pda_seed: pool definition id +// * Internally, calls compute_vault_pda_seed to compute vault_a and vault_b's PDA seed. const POOL_DEFINITION_DATA_SIZE: usize = 225; -#[derive(Default)] +#[derive(Clone, Default)] struct PoolDefinition { definition_token_a_id: AccountId, definition_token_b_id: AccountId, @@ -77,8 +71,9 @@ struct PoolDefinition { liquidity_pool_supply: u128, reserve_a: u128, reserve_b: u128, - fees: u128, - active: bool, + fees: u128, // fees are currently not used + active: bool, // a pool becomes inactive (active = false) + // once all of its liquidity has been removed (e.g., reserves are emptied and liquidity_pool_supply = 0) } impl PoolDefinition { @@ -391,23 +386,13 @@ fn compute_pool_pda_seed( ) -> PdaSeed { use risc0_zkvm::sha::{Impl, Sha256}; - let mut i: usize = 0; - let (token_1, token_2) = loop { - if definition_token_a_id.value()[i] > definition_token_b_id.value()[i] { - let token_1 = definition_token_a_id.clone(); - let token_2 = definition_token_b_id.clone(); - break (token_1, token_2); - } else if definition_token_a_id.value()[i] < definition_token_b_id.value()[i] { - let token_1 = definition_token_b_id.clone(); - let token_2 = definition_token_a_id.clone(); - break (token_1, token_2); - } + //let mut i: usize = 0; + //TODO - if i == 32 { - panic!("Definitions match"); - } else { - i += 1; - } + let (token_1, token_2) = match definition_token_a_id.value().cmp(definition_token_b_id.value()) { + std::cmp::Ordering::Less => (definition_token_b_id.clone(), definition_token_a_id.clone()), + std::cmp::Ordering::Greater => (definition_token_a_id.clone(), definition_token_b_id.clone()), + std::cmp::Ordering::Equal => panic!("Definitions match"), }; let mut bytes = [0; 64]; @@ -467,6 +452,32 @@ fn compute_liquidity_token_pda_seed(pool_id: AccountId) -> PdaSeed { ) } +const TOKEN_PROGRAM_NEW: u8 = 0; +const TOKEN_PROGRAM_TRANSFER: u8 = 1; +const TOKEN_PROGRAM_MINT: u8 = 4; +const TOKEN_PROGRAM_BURN: u8 = 3; + +fn initialize_token_transfer_chained_call( + token_program_command: u8, + sender: AccountWithMetadata, + recipient: AccountWithMetadata, + amount_to_move: u128, + pda_seed: Vec, +) -> ChainedCall { + let mut instruction_data = [0; 23]; + instruction_data[0] = token_program_command; + instruction_data[1..17].copy_from_slice(&amount_to_move.to_le_bytes()); + let instruction_data = risc0_zkvm::serde::to_vec(&instruction_data) + .expect("AMM Program expects valid token transfer instruction data"); + + ChainedCall { + program_id: sender.account.program_owner, + instruction_data, + pre_states: vec![sender, recipient], + pda_seeds: pda_seed, + } +} + fn new_definition( pre_states: &[AccountWithMetadata], balance_in: &[u128], @@ -510,6 +521,10 @@ fn new_definition( // both instances of the same token program let token_program = user_holding_a.account.program_owner; + if user_holding_b.account.program_owner != token_program { + panic!("User Token holdings must use the same Token Program"); + } + if definition_token_a_id == definition_token_b_id { panic!("Cannot set up a swap for a token with itself") } @@ -557,10 +572,10 @@ fn new_definition( panic!("Cannot initialize an active Pool Definition") } - //3. LP Token minting calculation + // LP Token minting calculation // We assume LP is based on the initial deposit amount for Token_A. - // 5. Update pool account + // Update pool account let mut pool_post = pool.account.clone(); let pool_post_definition = PoolDefinition { definition_token_a_id, @@ -585,38 +600,28 @@ fn new_definition( let mut chained_calls = Vec::::new(); //Chain call for Token A (user_holding_a -> Vault_A) - let mut instruction_data = [0; 23]; - instruction_data[0] = 1; - instruction_data[1..17].copy_from_slice(&amount_a.to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction_data) - .expect("New definition: AMM Program expects valid token transfer instruction data"); - let call_token_a = ChainedCall { - program_id: user_holding_a.account.program_owner, - instruction_data, - pre_states: vec![user_holding_a.clone(), vault_a.clone()], - pda_seeds: Vec::::new(), - }; - + let call_token_a = initialize_token_transfer_chained_call( + TOKEN_PROGRAM_TRANSFER, + user_holding_a.clone(), + vault_a.clone(), + amount_a, + Vec::::new(), + ); //Chain call for Token B (user_holding_b -> Vault_B) - let mut instruction_data = [0; 23]; - instruction_data[0] = 1; - instruction_data[1..17].copy_from_slice(&amount_b.to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction_data) - .expect("New definition: AMM Program expects valid instruction_data"); - - let call_token_b = ChainedCall { - program_id: user_holding_b.account.program_owner, - instruction_data, - pre_states: vec![user_holding_b.clone(), vault_b.clone()], - pda_seeds: Vec::::new(), - }; + let call_token_b = initialize_token_transfer_chained_call( + TOKEN_PROGRAM_TRANSFER, + user_holding_b.clone(), + vault_b.clone(), + amount_b, + Vec::::new(), + ); //Chain call for liquidity token (TokenLP definition -> User LP Holding) let mut instruction_data = [0; 23]; instruction_data[0] = if pool.account == Account::default() { - 0 + TOKEN_PROGRAM_NEW } else { - 4 + TOKEN_PROGRAM_MINT }; //new or mint let nme = if pool.account == Account::default() { [1u8; 6] @@ -712,12 +717,10 @@ fn swap( let (chained_calls, [deposit_a, withdraw_a], [deposit_b, withdraw_b]) = if token_in_id == pool_def_data.definition_token_a_id { let (chained_calls, deposit_a, withdraw_b) = swap_logic( - &[ - user_holding_a.clone(), - vault_a.clone(), - vault_b.clone(), - user_holding_b.clone(), - ], + user_holding_a.clone(), + vault_a.clone(), + vault_b.clone(), + user_holding_b.clone(), &amounts, &[pool_def_data.reserve_a, pool_def_data.reserve_b], pool.account_id.clone(), @@ -726,12 +729,10 @@ fn swap( (chained_calls, [deposit_a, 0], [0, withdraw_b]) } else if token_in_id == pool_def_data.definition_token_b_id { let (chained_calls, deposit_b, withdraw_a) = swap_logic( - &[ - user_holding_b.clone(), - vault_b.clone(), - vault_a.clone(), - user_holding_a.clone(), - ], + user_holding_b.clone(), + vault_b.clone(), + vault_a.clone(), + user_holding_a.clone(), &amounts, &[pool_def_data.reserve_b, pool_def_data.reserve_a], pool.account_id.clone(), @@ -745,16 +746,9 @@ fn swap( // Update pool account let mut pool_post = pool.account.clone(); let pool_post_definition = PoolDefinition { - definition_token_a_id: pool_def_data.definition_token_a_id.clone(), - definition_token_b_id: pool_def_data.definition_token_b_id.clone(), - vault_a_id: pool_def_data.vault_a_id.clone(), - vault_b_id: pool_def_data.vault_b_id.clone(), - liquidity_pool_id: pool_def_data.liquidity_pool_id.clone(), - liquidity_pool_supply: pool_def_data.liquidity_pool_supply.clone(), reserve_a: pool_def_data.reserve_a + deposit_a - withdraw_a, reserve_b: pool_def_data.reserve_b + deposit_b - withdraw_b, - fees: 0u128, - active: true, + ..pool_def_data }; pool_post.data = pool_post_definition.into_data(); @@ -771,16 +765,14 @@ fn swap( } fn swap_logic( - pre_states: &[AccountWithMetadata], + user_deposit: AccountWithMetadata, + vault_deposit: AccountWithMetadata, + vault_withdraw: AccountWithMetadata, + user_withdraw: AccountWithMetadata, balances: &[u128], reserve_amounts: &[u128], pool_id: AccountId, ) -> (Vec, u128, u128) { - let user_deposit = pre_states[0].clone(); - let vault_deposit = pre_states[1].clone(); - let vault_withdraw = pre_states[2].clone(); - let user_withdraw = pre_states[3].clone(); - let reserve_deposit_vault_amount = reserve_amounts[0]; let reserve_withdraw_vault_amount = reserve_amounts[1]; @@ -788,8 +780,8 @@ fn swap_logic( let min_amount_out = balances[1]; // Compute withdraw amount - // Compute pool's exchange constant - // let k = pool_def_data.reserve_a * pool_def_data.reserve_b; + // Maintains pool constant product + // k = pool_def_data.reserve_a * pool_def_data.reserve_b; let withdraw_amount = (reserve_withdraw_vault_amount * deposit_amount) / (reserve_deposit_vault_amount + deposit_amount); @@ -803,37 +795,29 @@ fn swap_logic( } let mut chained_calls = Vec::new(); - let mut instruction_data = [0; 23]; - instruction_data[0] = 1; - instruction_data[1..17].copy_from_slice(&deposit_amount.to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction_data) - .expect("Swap Logic: AMM Program expects valid transaction instruction data"); - chained_calls.push(ChainedCall { - program_id: vault_deposit.account.program_owner, - instruction_data, - pre_states: vec![user_deposit.clone(), vault_deposit.clone()], - pda_seeds: Vec::::new(), - }); + chained_calls.push(initialize_token_transfer_chained_call( + TOKEN_PROGRAM_TRANSFER, + user_deposit.clone(), + vault_deposit.clone(), + deposit_amount, + Vec::::new(), + )); let mut vault_withdraw = vault_withdraw.clone(); vault_withdraw.is_authorized = true; - let mut instruction_data = [0; 23]; - instruction_data[0] = 1; - instruction_data[1..17].copy_from_slice(&withdraw_amount.to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction_data) - .expect("Swap Logic: AMM Program expects valid transaction instruction data"); - chained_calls.push(ChainedCall { - program_id: vault_deposit.account.program_owner, - instruction_data, - pre_states: vec![vault_withdraw.clone(), user_withdraw.clone()], - pda_seeds: vec![compute_vault_pda_seed( + chained_calls.push(initialize_token_transfer_chained_call( + TOKEN_PROGRAM_TRANSFER, + vault_withdraw.clone(), + user_withdraw.clone(), + withdraw_amount, + vec![compute_vault_pda_seed( pool_id, TokenHolding::parse(&vault_withdraw.account.data) .expect("Swap Logic: AMM Program expects valid token data") .definition_id, )], - }); + )); (chained_calls, deposit_amount, withdraw_amount) } @@ -941,62 +925,41 @@ fn add_liquidity( // 5. Update pool account let mut pool_post = pool.account.clone(); let pool_post_definition = PoolDefinition { - definition_token_a_id: pool_def_data.definition_token_a_id.clone(), - definition_token_b_id: pool_def_data.definition_token_b_id.clone(), - vault_a_id: pool_def_data.vault_a_id.clone(), - vault_b_id: pool_def_data.vault_b_id.clone(), - liquidity_pool_id: pool_def_data.liquidity_pool_id.clone(), liquidity_pool_supply: pool_def_data.liquidity_pool_supply + delta_lp, reserve_a: pool_def_data.reserve_a + actual_amount_a, reserve_b: pool_def_data.reserve_b + actual_amount_b, - fees: 0u128, - active: true, + ..pool_def_data }; pool_post.data = pool_post_definition.into_data(); let mut chained_call = Vec::new(); // Chain call for Token A (UserHoldingA -> Vault_A) - let mut instruction_data = [0; 23]; - instruction_data[0] = 1; - instruction_data[1..17].copy_from_slice(&actual_amount_a.to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction_data) - .expect("Add liquidity: AMM Program expects valid token transfer instruction data"); - let call_token_a = ChainedCall { - program_id: vault_a.account.program_owner, - instruction_data, - pre_states: vec![user_holding_a.clone(), vault_a.clone()], - pda_seeds: Vec::::new(), - }; - + let call_token_a = initialize_token_transfer_chained_call( + TOKEN_PROGRAM_TRANSFER, + user_holding_a.clone(), + vault_a.clone(), + actual_amount_a, + Vec::::new(), + ); // Chain call for Token B (UserHoldingB -> Vault_B) - let mut instruction_data = [0; 23]; - instruction_data[0] = 1; - instruction_data[1..17].copy_from_slice(&actual_amount_b.to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction_data) - .expect("Add liquidity: AMM Program expects valid token transfer instruction data"); - let call_token_b = ChainedCall { - program_id: vault_b.account.program_owner, - instruction_data, - pre_states: vec![user_holding_b.clone(), vault_b.clone()], - pda_seeds: Vec::::new(), - }; - + let call_token_b = initialize_token_transfer_chained_call( + TOKEN_PROGRAM_TRANSFER, + user_holding_b.clone(), + vault_b.clone(), + actual_amount_b, + Vec::::new(), + ); // Chain call for LP (mint new tokens for user_holding_lp) let mut pool_definition_lp_auth = pool_definition_lp.clone(); pool_definition_lp_auth.is_authorized = true; - - let mut instruction_data = [0; 23]; - instruction_data[0] = 4; - instruction_data[1..17].copy_from_slice(&delta_lp.to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction_data) - .expect("Add liquidity: AMM Program expects valid token transfer instruction data"); - let call_token_lp = ChainedCall { - program_id: pool_definition_lp.account.program_owner, - instruction_data, - pre_states: vec![pool_definition_lp_auth.clone(), user_holding_lp.clone()], - pda_seeds: vec![compute_liquidity_token_pda_seed(pool.account_id.clone())], - }; + let call_token_lp = initialize_token_transfer_chained_call( + TOKEN_PROGRAM_MINT, + pool_definition_lp_auth.clone(), + user_holding_lp.clone(), + delta_lp, + vec![compute_liquidity_token_pda_seed(pool.account_id.clone())], + ); chained_call.push(call_token_lp); chained_call.push(call_token_b); @@ -1111,16 +1074,10 @@ fn remove_liquidity( // 5. Update pool account let mut pool_post = pool.account.clone(); let pool_post_definition = PoolDefinition { - definition_token_a_id: pool_def_data.definition_token_a_id.clone(), - definition_token_b_id: pool_def_data.definition_token_b_id.clone(), - vault_a_id: pool_def_data.vault_a_id.clone(), - vault_b_id: pool_def_data.vault_b_id.clone(), - liquidity_pool_id: pool_def_data.liquidity_pool_id.clone(), liquidity_pool_supply: pool_def_data.liquidity_pool_supply - delta_lp, reserve_a: pool_def_data.reserve_a - withdraw_amount_a, reserve_b: pool_def_data.reserve_b - withdraw_amount_b, - fees: 0u128, - active, + ..pool_def_data.clone() }; pool_post.data = pool_post_definition.into_data(); @@ -1128,52 +1085,37 @@ fn remove_liquidity( let mut chained_calls = Vec::new(); //Chaincall for Token A withdraw - let mut instruction: [u8; 23] = [0; 23]; - instruction[0] = 1; // token transfer - instruction[1..17].copy_from_slice(&withdraw_amount_a.to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction) - .expect("Remove liquidity: AMM Program expects valid token transfer instruction data"); - let call_token_a = ChainedCall { - program_id: vault_a.account.program_owner, - instruction_data, - pre_states: vec![running_vault_a, user_holding_a.clone()], - pda_seeds: vec![compute_vault_pda_seed( + let call_token_a = initialize_token_transfer_chained_call( + TOKEN_PROGRAM_TRANSFER, + running_vault_a, + user_holding_a.clone(), + withdraw_amount_a, + vec![compute_vault_pda_seed( pool.account_id.clone(), pool_def_data.definition_token_a_id.clone(), )], - }; - + ); //Chaincall for Token B withdraw - let mut instruction: [u8; 23] = [0; 23]; - instruction[0] = 1; // token transfer - instruction[1..17].copy_from_slice(&withdraw_amount_b.to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction) - .expect("Remove liquidity: AMM Program expects valid token transfer instruction data"); - let call_token_b = ChainedCall { - program_id: vault_b.account.program_owner, - instruction_data, - pre_states: vec![running_vault_b, user_holding_b.clone()], - pda_seeds: vec![compute_vault_pda_seed( + let call_token_b = initialize_token_transfer_chained_call( + TOKEN_PROGRAM_TRANSFER, + running_vault_b, + user_holding_b.clone(), + withdraw_amount_b, + vec![compute_vault_pda_seed( pool.account_id.clone(), pool_def_data.definition_token_b_id.clone(), )], - }; - + ); //Chaincall for LP adjustment let mut pool_definition_lp_auth = pool_definition_lp.clone(); pool_definition_lp_auth.is_authorized = true; - - let mut instruction: [u8; 23] = [0; 23]; - instruction[0] = 3; // token burn - instruction[1..17].copy_from_slice(&delta_lp.to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction) - .expect("Remove liquidity: AMM Program expects valid token transfer instruction data"); - let call_token_lp = ChainedCall { - program_id: pool_definition_lp.account.program_owner, - instruction_data, - pre_states: vec![pool_definition_lp_auth.clone(), user_holding_lp.clone()], - pda_seeds: vec![compute_liquidity_token_pda_seed(pool.account_id.clone())], - }; + let call_token_lp = initialize_token_transfer_chained_call( + TOKEN_PROGRAM_BURN, + pool_definition_lp_auth.clone(), + user_holding_lp.clone(), + delta_lp, + vec![compute_liquidity_token_pda_seed(pool.account_id.clone())], + ); chained_calls.push(call_token_lp); chained_calls.push(call_token_b); @@ -1267,11 +1209,6 @@ mod tests { 50 } - //TODO used??? BalanceEnum::RemoveMinAmountBAow => 10, - fn remove_min_amount_a_low() -> u128 { - 10 - } - fn remove_amount_lp() -> u128 { 100 } @@ -1586,7 +1523,7 @@ mod tests { fn cc_remove_pool_lp() -> ChainedCall { let mut pool_lp_auth = AccountForTests::pool_lp_init(); pool_lp_auth.is_authorized = true; - + let mut instruction: [u8; 23] = [0; 23]; instruction[0] = 3; instruction[1..17] @@ -1607,38 +1544,60 @@ mod tests { } fn cc_new_definition_token_a() -> ChainedCall { - let mut instruction: [u8;23] = [0; 23]; + let mut instruction: [u8; 23] = [0; 23]; instruction[0] = 1; - instruction[1..17].copy_from_slice( - &BalanceForTests::add_successful_amount_a() - .to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction).expect("AMM Program expects valid transaction instruction data"); - ChainedCall{ + instruction[1..17] + .copy_from_slice(&BalanceForTests::add_successful_amount_a().to_le_bytes()); + let instruction_data = risc0_zkvm::serde::to_vec(&instruction) + .expect("AMM Program expects valid transaction instruction data"); + ChainedCall { program_id: TOKEN_PROGRAM_ID, instruction_data, pre_states: vec![ - AccountForTests::user_holding_a(), - AccountForTests::vault_a_init()], + AccountForTests::user_holding_a(), + AccountForTests::vault_a_init(), + ], pda_seeds: Vec::::new(), } } - + fn cc_new_definition_token_b() -> ChainedCall { - let mut instruction: [u8;23] = [0; 23]; + let mut instruction: [u8; 23] = [0; 23]; instruction[0] = 1; - instruction[1..17].copy_from_slice( - &BalanceForTests::add_successful_amount_b() - .to_le_bytes()); - let instruction_data = risc0_zkvm::serde::to_vec(&instruction).expect("Swap Logic: AMM Program expects valid transaction instruction data"); - ChainedCall{ + instruction[1..17] + .copy_from_slice(&BalanceForTests::add_successful_amount_b().to_le_bytes()); + let instruction_data = risc0_zkvm::serde::to_vec(&instruction) + .expect("Swap Logic: AMM Program expects valid transaction instruction data"); + ChainedCall { program_id: TOKEN_PROGRAM_ID, instruction_data, pre_states: vec![ - AccountForTests::user_holding_b(), - AccountForTests::vault_b_init()], + AccountForTests::user_holding_b(), + AccountForTests::vault_b_init(), + ], pda_seeds: Vec::::new(), } } + + fn cc_new_definition_token_lp() -> ChainedCall { + let mut instruction: [u8; 23] = [0; 23]; + instruction[0] = 1; + instruction[1..17] + .copy_from_slice(&BalanceForTests::add_successful_amount_a().to_le_bytes()); + let instruction_data = risc0_zkvm::serde::to_vec(&instruction) + .expect("AMM Program expects valid transaction instruction data"); + ChainedCall { + program_id: TOKEN_PROGRAM_ID, + instruction_data, + pre_states: vec![ + AccountForTests::pool_lp_init(), + AccountForTests::user_holding_lp_uninit(), + ], + pda_seeds: vec![compute_liquidity_token_pda_seed( + IdForTests::pool_definition_id(), + )], + } + } } struct IdForTests; @@ -2373,23 +2332,6 @@ mod tests { } } - /*TODO-delete fn pool_lp_with_wrong_id() -> AccountWithMetadata { - AccountWithMetadata { - account: Account { - program_owner: TOKEN_PROGRAM_ID, - balance: 0u128, - data: TokenDefinition::into_data(TokenDefinition { - account_type: 0u8, - name: [1; 6], - total_supply: BalanceForTests::vault_a_reserve_init(), - }), - nonce: 0, - }, - is_authorized: true, - account_id: AccountId::new([4; 32]), - } - }*/ - fn pool_definition_active() -> AccountWithMetadata { AccountWithMetadata { account: Account { @@ -2760,8 +2702,7 @@ mod tests { assert!(chained_call_a == ChainedCallForTests::cc_new_definition_token_a()); assert!(chained_call_b == ChainedCallForTests::cc_new_definition_token_b()); - //TODO: this is bad - // assert!(chained_call_lp == ChainedCallForTests::cc_new_definition_token_lp()); + assert!(chained_call_lp == ChainedCallForTests::cc_new_definition_token_lp()); } #[should_panic(expected = "Invalid number of input accounts")] @@ -3219,7 +3160,7 @@ mod tests { ]; let _post_states = add_liquidity(&pre_states, &[BalanceForTests::add_min_amount_lp()]); } - + #[should_panic(expected = "Invalid number of input balances")] #[test] fn test_call_add_liquidity_invalid_number_of_balances_2() { @@ -3232,11 +3173,13 @@ mod tests { AccountForTests::user_holding_b(), AccountForTests::user_holding_lp_init(), ]; - let _post_states = add_liquidity(&pre_states, + let _post_states = add_liquidity( + &pre_states, &[ BalanceForTests::add_min_amount_lp(), BalanceForTests::add_max_amount_a(), - ]); + ], + ); } #[should_panic(expected = "Vault A was not provided")] @@ -3385,7 +3328,7 @@ mod tests { ]; let _post_states = add_liquidity( &pre_states, - &[ //todo UGH + &[ BalanceForTests::add_max_amount_a(), BalanceForTests::add_max_amount_b(), BalanceForTests::add_min_amount_lp(), @@ -3451,7 +3394,7 @@ mod tests { ]; let _post_states = add_liquidity( &pre_states, - &[ + &[ BalanceForTests::add_min_amount_lp(), BalanceForTests::add_max_amount_a_low(), BalanceForTests::add_max_amount_b_low(), @@ -3517,7 +3460,7 @@ mod tests { ]; let _post_states = add_liquidity( &pre_states, - &[ + &[ BalanceForTests::add_min_amount_lp(), BalanceForTests::add_max_amount_a_low(), BalanceForTests::add_max_amount_b_low(), @@ -3538,9 +3481,11 @@ mod tests { ]; let (post_states, chained_calls) = add_liquidity( &pre_states, - &[BalanceForTests::add_min_amount_lp(), - BalanceForTests::add_max_amount_a(), - BalanceForTests::add_max_amount_b(),], + &[ + BalanceForTests::add_min_amount_lp(), + BalanceForTests::add_max_amount_a(), + BalanceForTests::add_max_amount_b(), + ], ); let pool_post = post_states[0].clone(); @@ -3795,7 +3740,7 @@ mod tests { &[ BalanceForTests::add_max_amount_a(), BalanceForTests::add_max_amount_a_low(), - ], //TODO: should be b? + ], IdForTests::token_a_definition_id(), ); diff --git a/nssa/src/state.rs b/nssa/src/state.rs index 589512e..bf5d857 100644 --- a/nssa/src/state.rs +++ b/nssa/src/state.rs @@ -2442,6 +2442,7 @@ pub mod tests { .expect("Hash output must be exactly 32 bytes long"), ) } + const POOL_DEFINITION_DATA_SIZE: usize = 225; #[derive(Default)] @@ -3647,7 +3648,7 @@ pub mod tests { let expected_pool = AccountForTests::pool_definition_init(); let expected_vault_a = AccountForTests::vault_a_init(); let expected_vault_b = AccountForTests::vault_b_init(); - let expected_token_lp = AccountForTests::token_lp_definition_new_init(); //TODO? + let expected_token_lp = AccountForTests::token_lp_definition_new_init(); let expected_user_token_a = AccountForTests::user_token_a_holding_new_init(); let expected_user_token_b = AccountForTests::user_token_b_holding_new_init(); let expected_user_token_lp = AccountForTests::user_token_lp_holding_new_init(); From f6c787e15fa66ac13b747371236f19e366f3881e Mon Sep 17 00:00:00 2001 From: Pravdyvy Date: Mon, 22 Dec 2025 04:02:12 +0200 Subject: [PATCH 13/33] fix: suggestions fix --- wallet/src/cli/programs/token.rs | 2 -- wallet/src/program_facades/token.rs | 12 ++++++------ 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/wallet/src/cli/programs/token.rs b/wallet/src/cli/programs/token.rs index 1a3b256..25d61ff 100644 --- a/wallet/src/cli/programs/token.rs +++ b/wallet/src/cli/programs/token.rs @@ -56,8 +56,6 @@ pub enum TokenProgramAgnosticSubcommand { /// /// Also if `definition` is private then it is owned, because /// we can not modify foreign accounts. - /// - /// ToDo: Return and add foreign variant when we could modify foreign accounts Burn { /// definition - valid 32 byte base58 string with privacy prefix #[arg(long)] diff --git a/wallet/src/program_facades/token.rs b/wallet/src/program_facades/token.rs index a32fef9..4d21b94 100644 --- a/wallet/src/program_facades/token.rs +++ b/wallet/src/program_facades/token.rs @@ -312,7 +312,9 @@ impl Token<'_> { let (instruction, program) = token_program_preparation_burn(amount); // ToDo: Fix this by updating `nssa::public_transaction::Message::try_new` to get raw bytes - let instruction: [u32; 23] = instruction.try_into().unwrap(); + let instruction: [u32; 23] = instruction + .try_into() + .expect("Instruction vector should have len 32"); let Ok(nonces) = self.0.get_accounts_nonces(vec![holder_account_id]).await else { return Err(ExecutionFailureKind::SequencerError); @@ -323,16 +325,14 @@ impl Token<'_> { nonces, instruction, ) - .unwrap(); + .expect("Instruction should serialize"); - let Some(signing_key) = self + let signing_key = self .0 .storage .user_data .get_pub_account_signing_key(&holder_account_id) - else { - return Err(ExecutionFailureKind::KeyNotFoundError); - }; + .ok_or(ExecutionFailureKind::KeyNotFoundError)?; let witness_set = nssa::public_transaction::WitnessSet::for_message(&message, &[signing_key]); From e351279278a81f4104bb4a22aa093b99b5455e8e Mon Sep 17 00:00:00 2001 From: Pravdyvy Date: Mon, 22 Dec 2025 04:14:54 +0200 Subject: [PATCH 14/33] fix: merge ci fix --- Cargo.lock | 1 + examples/program_deployment/Cargo.toml | 1 + wallet/src/program_facades/token.rs | 16 ++++++++-------- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 02a9266..866e821 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3025,6 +3025,7 @@ version = "0.1.0" dependencies = [ "clap", "nssa", + "nssa_core", "tokio", "wallet", ] diff --git a/examples/program_deployment/Cargo.toml b/examples/program_deployment/Cargo.toml index e1a6db4..6aff2d0 100644 --- a/examples/program_deployment/Cargo.toml +++ b/examples/program_deployment/Cargo.toml @@ -5,6 +5,7 @@ edition = "2024" [dependencies] nssa.workspace = true +nssa_core.workspace = true wallet.workspace = true tokio = { workspace = true, features = ["macros"] } diff --git a/wallet/src/program_facades/token.rs b/wallet/src/program_facades/token.rs index 0b16251..a2209c0 100644 --- a/wallet/src/program_facades/token.rs +++ b/wallet/src/program_facades/token.rs @@ -356,7 +356,7 @@ impl Token<'_> { PrivacyPreservingAccount::PrivateOwned(holder_account_id), ], &instruction_data, - &program, + &program.into(), ) .await .map(|(resp, secrets)| { @@ -382,7 +382,7 @@ impl Token<'_> { PrivacyPreservingAccount::Public(holder_account_id), ], &instruction_data, - &program, + &program.into(), ) .await .map(|(resp, secrets)| { @@ -409,7 +409,7 @@ impl Token<'_> { PrivacyPreservingAccount::PrivateOwned(holder_account_id), ], &instruction_data, - &program, + &program.into(), ) .await .map(|(resp, secrets)| { @@ -479,7 +479,7 @@ impl Token<'_> { PrivacyPreservingAccount::PrivateOwned(holder_account_id), ], &instruction_data, - &program, + &program.into(), ) .await .map(|(resp, secrets)| { @@ -509,7 +509,7 @@ impl Token<'_> { }, ], &instruction_data, - &program, + &program.into(), ) .await .map(|(resp, secrets)| { @@ -535,7 +535,7 @@ impl Token<'_> { PrivacyPreservingAccount::Public(holder_account_id), ], &instruction_data, - &program, + &program.into(), ) .await .map(|(resp, secrets)| { @@ -562,7 +562,7 @@ impl Token<'_> { PrivacyPreservingAccount::PrivateOwned(holder_account_id), ], &instruction_data, - &program, + &program.into(), ) .await .map(|(resp, secrets)| { @@ -593,7 +593,7 @@ impl Token<'_> { }, ], &instruction_data, - &program, + &program.into(), ) .await .map(|(resp, secrets)| { From c1a999c02ec75df36f5d6db6ae0000ff24505667 Mon Sep 17 00:00:00 2001 From: Pravdyvy Date: Mon, 22 Dec 2025 04:55:15 +0200 Subject: [PATCH 15/33] fix: new artifacts --- .../authenticated_transfer.bin | Bin 378136 -> 378136 bytes artifacts/program_methods/pinata.bin | Bin 380508 -> 380492 bytes artifacts/program_methods/pinata_token.bin | Bin 387084 -> 387112 bytes .../privacy_preserving_circuit.bin | Bin 470128 -> 470128 bytes artifacts/program_methods/token.bin | Bin 401992 -> 401992 bytes artifacts/test_program_methods/burner.bin | Bin 374936 -> 374924 bytes .../test_program_methods/chain_caller.bin | Bin 388648 -> 388632 bytes artifacts/test_program_methods/claimer.bin | Bin 373832 -> 373816 bytes .../test_program_methods/data_changer.bin | Bin 376532 -> 376548 bytes .../test_program_methods/extra_output.bin | Bin 373904 -> 373904 bytes artifacts/test_program_methods/minter.bin | Bin 373860 -> 373860 bytes .../test_program_methods/missing_output.bin | Bin 374012 -> 373996 bytes .../modified_transfer.bin | Bin 377384 -> 377368 bytes .../test_program_methods/nonce_changer.bin | Bin 373936 -> 373936 bytes artifacts/test_program_methods/noop.bin | Bin 373644 -> 373644 bytes .../program_owner_changer.bin | Bin 373856 -> 373872 bytes .../simple_balance_transfer.bin | Bin 375732 -> 375748 bytes 17 files changed, 0 insertions(+), 0 deletions(-) diff --git a/artifacts/program_methods/authenticated_transfer.bin b/artifacts/program_methods/authenticated_transfer.bin index 286dc22fbbc64b727d723a6ca2927dcebbed037a..347342caf97010cd0cb03c3a6857963f40a8305e 100644 GIT binary patch delta 495 zcmbQyB|f7|yrG4$g{g&k3(Lu6B4(DxmPRH; zJwq%irpqm7IW3GuV*8)vELn`W4V}JVB?~7ujngOIWf7iku!2Ql`umkE61Yu}H8jNS zE{Mxz42^IrL0Gi?@+uY!X6!a?yuhq3g~yPDbu9YWb%KIU#?S!2UXAIz>sdIkh6B)K djp+gSWTh?f7_KmvMW+4KdY0{{*0cJF0sxg2fyMv; delta 495 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 delta 8682 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 X9dhCl?d)6QW@*|Y`?Z|7KR@>WvoEI; diff --git a/artifacts/program_methods/pinata_token.bin b/artifacts/program_methods/pinata_token.bin index 7d181062c0e38fc9c5f1df11d752591b4aa7745b..5c02b2f1c1fb737c2be502afa8a2692e03c5bb65 100644 GIT binary patch delta 9138 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 W6&sHA{Y_CzXP@~%G=uaII=VPXSDNh=wZ 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 Q+4fbutlL-dvdt3#0H8t6GXMYp delta 852 zcmX?cMB>B|iG~)&7N!>FEi8Bc2^(6Nn;My#85&xenV15BnT7H6i;S%5(#Co@Ic2$e zhS(Gs{bxCiP3Kkt)+|PB5>pLXji(=AWOc+QIsG9ItHyL2CRPsIvh_G*!3LjYVwJ$E z73dL-=?cs^47O%wZBfADJ%;!wKNEv^6`v55;*#kNi&!+av$L=sV#aF49d_0jtP+f~ zSXHMNaIkK{DtlgqRbsk7Cu;_!2piq`J!xO8Z(2~L< zAIQzBkJDah6FfS>@$i=$M?8Q%WzU1hQ!>VucuWU-%n-i<1FQ}QCp;fs9PR?k_T!Lk OU&YJ1eHAa;JP`mQD$45s diff --git a/artifacts/test_program_methods/burner.bin b/artifacts/test_program_methods/burner.bin index 02e1c5e9142ce0ac41e5df2dc7d330f5757ddadc..0c0ed65354b82baf8778406802a8b2a967e2c9e5 100644 GIT binary patch delta 8586 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 IXWOcO09Is>MgRZ+ delta 8617 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 Tl`u1=MAM$N9-9^O^n?Eg)_I;_ delta 8614 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 EU#SR_xc~qF diff --git a/artifacts/test_program_methods/claimer.bin b/artifacts/test_program_methods/claimer.bin index cea547018cb632ef64aa14d3dd89b07d07d7ad44..ae5324005f6498c6eff54d084d5628415677e1da 100644 GIT binary patch delta 8572 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 L(KZZlzdQGTM3;2- delta 8563 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 Hk6!;bLaBFD diff --git a/artifacts/test_program_methods/data_changer.bin b/artifacts/test_program_methods/data_changer.bin index 448609e4da67977e2fce3fdb5be279e0b243c76d..52025c865f48db9aafb43cf6e7a48c0dd24d2c2c 100644 GIT binary patch delta 8611 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 A8vpGsCa*=R#L{>q&GoYQZL6`gldem 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 diff --git a/artifacts/test_program_methods/extra_output.bin b/artifacts/test_program_methods/extra_output.bin index 915a50eb4373cb795e8b1798d2ddf2b282580890..46a13eb13aa9932e26ef0aeb7f9b8f0e922266a7 100644 GIT binary patch delta 452 zcmbR6Qf$IYv4$4L7N!>FEi8W1ge)zMj7%*p%#01p%q)y8jm-?ECro3}$0ojT8p~-c z;@j({vt%&}V;W>W-S7pA@N~YJED2b&O>daVVt`E?XuXECsexWjPFb!VK2sH@Tg+k+ z$700x#91uwnXpKJyrv;(gv)4FEi8W1gv?DXEG&#IER75;&5cYgEDepOCro3}$0ojT8p~-c z;@j({vt%&}V;W>W-S7pA@N~YJED2b&O>daVVt`E?XuXECsexWjPFb!VK2sH@Tg+k+ z$700x#91uwnXpKJyrv;(gv)4FEi7WwM9d6LObty9j1A4r&5bS149$&A8K!SM%B(J>my=VL zt7nKs!Sw8DET@IBNNo3<&XUE5-OPpinboGhox#G1P2+S&Sytg`vse_S+stH;c+s^f^D-{B$=_h?&A?=b!pt%8K#4rFKvQb#dM(i46vIG(kg3W mj$1Fp^y#tlSU7Q;Fns|~8mr&?dst-JZ_H!aeq$bMk0=0;hJ9fG delta 483 zcmaFzLhQ*4v4$4L7N!>FEi7WwL<|j$%uS4p49qPI4J{4L%uEao7^ZJL%B(J>my=VL zt7nKs!Sw8DET@IBNNo3<&XUE5-OPpinboGhox#G1P2+S&Sytg`vse_S+stH;c+s^f^D-{B$=_h?&A?=b!pt%8K#4rFKvQb#dM(i46vIG(kg3W mj$1Fp^y#tlSU7Q;Fns|~8mr&?dst-JZ_H!aeq$bMk0=0=g?v*0 diff --git a/artifacts/test_program_methods/missing_output.bin b/artifacts/test_program_methods/missing_output.bin index 00c1689296f132f8d4a715041684b22ac429c6ca..ba5d6a447ba91a4050490522f3a5e5226e0e6db4 100644 GIT binary patch delta 8586 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 Whr|Tz=Cqg+O`BjB42}8gg8u__%$lnJ delta 8601 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 M?8k;hJ$L{A0^aL(L;wH) delta 8614 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 oW&b}jQnLD9az?b@;!vu+eRb%%7wv}JxFOV diff --git a/artifacts/test_program_methods/nonce_changer.bin b/artifacts/test_program_methods/nonce_changer.bin index 0e9b5a1f77e1d7b0c87325fa9b41b195fb34a9ff..2cde3f62dd95ef26c902353940cd5feaec8eb4fd 100644 GIT binary patch delta 478 zcmdn+Qf$LZv4$4L7N!>FEiC!dge?p#jSMX;4GqnVj7*J9j13G;raR7KQI|5-%gHIr z)x#!#cpA$oY#O&On9h>Ph)o7;q_n94ZZi)~XEB~WaVCp6ZtaGKxV3|vENy6nTLH-Y z?M1U#elX#*Knjm`p!ph-xJ`#xkH>pJ1^T!w){wHmYqG}lxAR!ovFdi1&mz;VJfCH| J@_g1_Q2=cqdT9Uv delta 478 zcmdn+Qf$LZv4$4L7N!>FEiC!dgw0INEe*^q49rc<%uLJ-jLl38r#sGLQI|5-%gHIr z)x#!#cpA$oY#O&On9h>Ph)o7;q_n94ZZi)~XEB~WaVCp6ZtaGKxV3|vENy6nTLH-Y z?M1U#elX#*Knjm`p!ph-xJ`#xkH>pJ1^T!w){wHmYqG}lxAR!ovFdi1&mz;VJfCH| J@_g1_Q2>+Rd!zsW diff --git a/artifacts/test_program_methods/noop.bin b/artifacts/test_program_methods/noop.bin index 0c64397d8b504ee84eeb96ccdaae99ac53ff950f..ebcc2be1085098d5762745fadf22a554fd1ad87d 100644 GIT binary patch delta 469 zcmeBqF4ps0tf7Umg{g&k3yaNEVKZZMV^afj3lj@VQy^(+W@0w|;T#rqX=A;doU&X! zLu?8rPGvcbP3QLfX)IZc*kqo(?Z@V_ LY(F-a^_VCCfD(Qq delta 469 zcmeBqF4ps0tf7Umg{g&k3yaNEVH0y>0}BgtQ&Tewa|<(bOJg&m=?~|ys7o8`<>Zv* z>KS5FFmWo&X>2;T=TBqFV#FpheZn*rTy!X^Xps1bf^HKg#%tIHS~;8$UQ%WjS7K66<(aLe}NlI8DVk!e3R Mmu360xva-T0fJ0^BLDyZ diff --git a/artifacts/test_program_methods/program_owner_changer.bin b/artifacts/test_program_methods/program_owner_changer.bin index a9d39474958fe7b63f6ae5468ccfbe0a584861a0..fce92317bd620dd7c297914f162ee2a1ed659205 100644 GIT binary patch delta 8653 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 E0y#308UO$Q delta 8624 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 diff --git a/artifacts/test_program_methods/simple_balance_transfer.bin b/artifacts/test_program_methods/simple_balance_transfer.bin index 5d776e452422af10bc30140c2705311d8bfc8d6d..c9788ab5dd49dcbf98563d9969fe220e9c852b02 100644 GIT binary patch delta 8610 zcmaKxeOwmRw#V1ZJP0BxAQB|$%p(~dO_4AmHNi|#@%V-*Y6?n<9ZW1W^lD=#^r%M@ zZ{~w#Mn^p-i`1LiXnK$4rNqLIRGh+BFkgZ~*11YvCo=!V99Ls5K9Dl(Jq;UXm>BPL_ZCT;FqoC@RTI!9*m^EGf*s!AJJ?OVR}N9Ezt8Kd^7d`Hn= zzd{t9rcyMETh7$!1@Fm(pP1hRm%8|8a3wg1<-Kkbop?Nze6`0BIh~Ef6Y?EdZ-hO;FRB#5k#W75MCJ2Uie-Bz`Abv;7SoHoIRt(mtTJ~A zkSH}5dBi*sTsO;+{}o*78vh&ErC+BB&F`Mz0N6c2OrS&&t_jk??g^HG-4px*j(JI? zN;W9Eg+$qTh)iDK6maz%l}4CyU7|uXES~G+N;#O&p_&!QaA4BQ$Y@rO1dc_2OMyi5 zz!~$L{xd_M4+ihy@t=a1{n6f0nU;r2)E7J$a>=**j65~uMjO~X%<0nG*SQLNG{-l; zN}eozZ5*$X`^kE@YeexY5Gq_Vwt}xOLF{_0t;s}W)Gbmehvfx`j6IO6Y{)Heo{O{m zB=Ugmt$Pz(n(u6N3AobfuTyu#MxoO{g(6lkz*cYse9)!f6D(`a2xnP~!Xz5^s!G{x zV0>FlFx-*93f=(jEIfnU_#g1fCb=$?UpOpmYLICVc%h4zgA-t260g|*0f}m0KnN=w z0-g>Q)xbO}u_JTJ+9&FhqQ>Jm_yxdySSE0-nL(q&3 zJ_i06j8HWf7y?5#VEY7&d9w^Eao%IC78PB&+E(hu%NpQqrl~%Ij-g*k_`dXzr<`dv$ zlbwN415gArnj)GeflDB_Go(oHH!4-|_-b&TYrOYqiPFFwEkA@(78(lCV0-@WzS?l* z%E*yVBH&MW%?OiZKk|WhRG@^g14_U#u)|KIX8lkS!0jx(lmZSuX=k<{Z8SPZDBC^y zVO(JAzk{P#PgqZ^=eSBWY;PvG4xGY)u?-x5(uwpN;B3qj!SnQf9D(AJF9nZq$xFd& z9l1_zdZFgJI*b9AphGbm5SW0}%5)q$3>*Wt7g_+$J%t6Zfrr5PryXtp7oKsrQ=&x0 zRVr;Z_2c~BjfN4`&M7qD2`B((u)=S_J78cWuQ0r~L`T4O3Z{eI24DFc0Tx=O7%Q(;2??4pGC~FCr)DzQhrcrA#>ri5@H#l#G zFH_-Ia177m#XMP89iHw>OjN2u%9AD9<*yM&n`djC(fJAGfWMx94o{Xg8YS@X3FwgB zLTjpEuVGx8%Zwycu!L5SE0&(U1922UZpDQkZHBv7HrFVH^#!J3+X6MpVIDXRN5eF` zzZ^$@K|>=N?2JrFM_jrt2`j)wkUs|YF8Md$A6?_y!p@5h>og7x z-@6991+H~E(DocW61&J!a@QZ2SBJfEU9{?W*+Y6FrA@N+}2Y?q=Yg|!`@Ks8v zzxEG!r}7rUoOit$CQZ1ZQ3HGToH2NGL3^F-rF!0#?lW=WxP#qher2{qpS|Wx z{uy{B*vrN$FG|!l-|_B1a5&gr%yMv;OI`+!bmaZ1^-B^(xjKvjmtX=r4c-J-fFI=v zE5RQ0x8-@p@j_*mpPrM8ymqyZnF}wq@{-C6-UJR@?ls?wB7H7^$Ai6)3w~rCyto3d z9_AU~#wA`F$Mb#&PFw1wa^_3m=)ZXBqSarf?#7Xg$^kh!Ckq~Y&`Wc8;%3jGj;?eJ z{!j1#@Pn+V-86~*18iS0a*ZSJDg7j=-e|r_(VO8D!Sb!jc13#GNc>3IF3HVnjGwkC zm;EHocYGHvtqY9#yOleVe)9yr?JU*I12+`W-s2=u0CqeU^9Zg4&pu)8R0y)@1~_Sj zMh98m7X>;k$vPiI{|~_h?Y-tXDfkSy26aKySHTO<;GaU(bO>0dgJ{@%R3jCINOWjc zMHKP5_0dQ0pTPUS(9DBMa1l5Rcf=@GIHejB?6E>t$d`iyzS3w194Yu1IOR#`Lr4p5 zc^2PHR-tg2<8cLf8VzNatlO*TF!UT&hyej+2Z=ra=ej)Le*vG{zPBoy=${5oI-r@i zVZpC~%hsrLoyV^L$No(vRC3dRRu_q)*Ry^d0}}DoF&`6*zyRUm7r^nGRocM{-o(4F zSoNA`f|%eCcn=J)T{`zSqUycY^Fzpg0N1?jEFk78^lx(XZ3UNO3(}xp7Xv!L)Ecjs zT_RCyJS6jvXq3+uKLbuVtTnCZk(>Bzh7~ljfswbcC0KxPX$YRHW1%yt6dvO7(Go5* zSb(@|i223{K4N}K(9MQwGRK)WAEg>({%*&h5_bWK}j7EiQ(4(y+3aHlbAyT&{%tk}PZ0oy|7;ps~=5M93 z;Lfd4UcRO}x0FK#*iwtjZ zdwgq1*rMv@%}GqS1`X#C^&%<-FKLfGU8jPOui%wn^NR!XMsNj!4h}K1<}5fHH!1NK zj4Zkcu5`&eb-;m+tjT~}=-&d~py^&p<)Ao=hNz=Xp-ECP0DD%#E}R1{`9?Es5DNYq zd>t`S#tJ=}L^+6=Xx8^6IJ$*(BM|*dI^OM}PUzUEyIiyk4fV*|SXTH?aA~-gl9*q7 z1WyncIFWfDI0r$L!`wdR?ihLnyaSanf#u(W2VAtSzQUlEIJES#Z=JkOMuR&|7Jy?e zsODiN2Alx9_jq47q-7aia~zZtdPwy4YHR^K5JED22zHn5A#w1?=c;+Q3Vqw-Q2$e~ zC%J54@MEy>3+wqQI(!PQ2S>AfT0AsEK?HMk65=A-+0*c3iTeD4FH5`y8gAFohzZzd z#z-1C)x}E(>Ue&-8m^}?-aKpdBK^;+8IOskab+^k~kG|WW+2F9-_-xGM zw}96w8X?=vC_f3VXpU0O3mS}5XxANQf%+0OjA-FhuCKsZg!7*jj2Q!k65au<-~@Q0 zjMI*J>@(sfC`zd{;c0LN42ZYoV-bWN1T8P<4RDaZW_wtteQ1bptC7kB+TlTy1ec1! zBu>Lpa7mzMzNmx?*N;b@C*gd@rV8#p0Y`8bFa`)-D;WCvu)b5^0&o^{^hA_y@HmsP z|2b$#4R?;yPr!Aqpo(}FU)vzJE8#S7&;y$J6N70GI2BuHr)BUYjECG#<79ADghtEQ zfUwC(>j$wQ;bC$9FGE9Glw)xvc!R2$muoRW^9<~Hh?mNE#ZQ6D!1e@-!4-kl{Xz6U z2rdY~*F1K4?UcJq`HHDdDL2pm&RG)07NFAc1ZCiW2fS3owK@fN&xW-cEyULaF+l}5 zcN09;(&A^Q;p4_mrx5J~2k&y&e>(1cE}k(HTU?3xWSqZ3;n!&JoYb1m`_;3M_X}|O z^|K1ezre-SFn}lYB3)uG!vKHFfRDf#n)TsY=<7clkHp^*q#VTU=HO#OGjCHR{1n^= zrMXyP1s@wT4k;~8hV_VlEHNP=HZdWwXIy;Z<8g7ldM5a^BF`hfZSQ#e?=3EU$MfYq zCB~MGo*B|TMM7uydrQ_t`?c{E{mY~J))jdkxOboA&7PQcJ-X%O%$wQmo+g_e;_lO- zX%^$<_dM6-dru=4-tK-{%ntGQnZ~pu_C6g<-_G3P3Hbjl@NK`ZI4VBzKKkE#!xLr1 d{M|F>O<%vovY%1Z+b>U&{>zB$>-Y96{|nF|pG5!w delta 8601 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 XiC-+cjKbbNb0z67Mwh-m>lXbNee9j- From 32de4e2990fd9aae85e6dc004e36541a840c9fb3 Mon Sep 17 00:00:00 2001 From: jonesmarvin8 <83104039+jonesmarvin8@users.noreply.github.com> Date: Mon, 22 Dec 2025 11:41:19 -0500 Subject: [PATCH 16/33] Update nssa/program_methods/guest/src/bin/amm.rs Co-authored-by: Daniil Polyakov --- nssa/program_methods/guest/src/bin/amm.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/nssa/program_methods/guest/src/bin/amm.rs b/nssa/program_methods/guest/src/bin/amm.rs index 7d0bf97..c420c44 100644 --- a/nssa/program_methods/guest/src/bin/amm.rs +++ b/nssa/program_methods/guest/src/bin/amm.rs @@ -71,9 +71,11 @@ struct PoolDefinition { liquidity_pool_supply: u128, reserve_a: u128, reserve_b: u128, - fees: u128, // fees are currently not used - active: bool, // a pool becomes inactive (active = false) - // once all of its liquidity has been removed (e.g., reserves are emptied and liquidity_pool_supply = 0) + /// Fees are currently not used + fees: u128, + /// A pool becomes inactive (active = false) + /// once all of its liquidity has been removed (e.g., reserves are emptied and liquidity_pool_supply = 0) + active: bool, } impl PoolDefinition { From 05d34bf9ec666bc623760cee4f5d59bcaaa1bb58 Mon Sep 17 00:00:00 2001 From: jonesmarvin8 <83104039+jonesmarvin8@users.noreply.github.com> Date: Mon, 22 Dec 2025 11:41:44 -0500 Subject: [PATCH 17/33] Update nssa/program_methods/guest/src/bin/amm.rs Co-authored-by: Daniil Polyakov --- nssa/program_methods/guest/src/bin/amm.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nssa/program_methods/guest/src/bin/amm.rs b/nssa/program_methods/guest/src/bin/amm.rs index c420c44..80b25fc 100644 --- a/nssa/program_methods/guest/src/bin/amm.rs +++ b/nssa/program_methods/guest/src/bin/amm.rs @@ -771,7 +771,8 @@ fn swap_logic( vault_deposit: AccountWithMetadata, vault_withdraw: AccountWithMetadata, user_withdraw: AccountWithMetadata, - balances: &[u128], + deposit_amount: u128, + min_amount_out: u128, reserve_amounts: &[u128], pool_id: AccountId, ) -> (Vec, u128, u128) { From fe3c11fd3e1185df9c355a304f1a5be9a927422c Mon Sep 17 00:00:00 2001 From: jonesmarvin8 <83104039+jonesmarvin8@users.noreply.github.com> Date: Mon, 22 Dec 2025 18:24:59 -0500 Subject: [PATCH 18/33] Update nssa/program_methods/guest/src/bin/token.rs Co-authored-by: Daniil Polyakov --- nssa/program_methods/guest/src/bin/token.rs | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/nssa/program_methods/guest/src/bin/token.rs b/nssa/program_methods/guest/src/bin/token.rs index 3adf4fc..5b1bc01 100644 --- a/nssa/program_methods/guest/src/bin/token.rs +++ b/nssa/program_methods/guest/src/bin/token.rs @@ -74,17 +74,13 @@ const CURRENT_VERSION: u8 = 1; const TOKEN_METADATA_DATA_SIZE: usize = 463; fn is_token_standard_valid(standard: u8) -> bool { - if standard == TOKEN_STANDARD_FUNGIBLE_TOKEN { - true - } else if standard == TOKEN_STANDARD_FUNGIBLE_ASSET { - true - } else if standard == TOKEN_STANDARD_NONFUNGIBLE { - true - } else if standard == TOKEN_STANDARD_NONFUNGIBLE_PRINTABLE { - true - } else { - false - } + matches!( + standard, + TOKEN_STANDARD_FUNGIBLE_TOKEN + | TOKEN_STANDARD_FUNGIBLE_ASSET + | TOKEN_STANDARD_NONFUNGIBLE + | TOKEN_STANDARD_NONFUNGIBLE_PRINTABLE + ) } fn is_metadata_type_valid(standard: u8) -> bool { From c49a3afec7edee82a381c397284b16c719feaae8 Mon Sep 17 00:00:00 2001 From: jonesmarvin8 <83104039+jonesmarvin8@users.noreply.github.com> Date: Mon, 22 Dec 2025 18:25:21 -0500 Subject: [PATCH 19/33] Update nssa/program_methods/guest/src/bin/token.rs Co-authored-by: Daniil Polyakov --- nssa/program_methods/guest/src/bin/token.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nssa/program_methods/guest/src/bin/token.rs b/nssa/program_methods/guest/src/bin/token.rs index 5b1bc01..f7ee9cc 100644 --- a/nssa/program_methods/guest/src/bin/token.rs +++ b/nssa/program_methods/guest/src/bin/token.rs @@ -124,7 +124,7 @@ impl TokenDefinition { panic!("Invalid Token Definition data"); } - Data::try_from(bytes).expect("Invalid data") + Data::try_from(bytes).expect("Token definition data size must fit into data") } fn parse(data: &Data) -> Option { From ca7cc10f7cc5b200f45b414c7b3a1275094da354 Mon Sep 17 00:00:00 2001 From: jonesmarvin8 <83104039+jonesmarvin8@users.noreply.github.com> Date: Mon, 22 Dec 2025 18:26:19 -0500 Subject: [PATCH 20/33] Update nssa/program_methods/guest/src/bin/token.rs Co-authored-by: Daniil Polyakov --- nssa/program_methods/guest/src/bin/token.rs | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/nssa/program_methods/guest/src/bin/token.rs b/nssa/program_methods/guest/src/bin/token.rs index f7ee9cc..714c44d 100644 --- a/nssa/program_methods/guest/src/bin/token.rs +++ b/nssa/program_methods/guest/src/bin/token.rs @@ -153,18 +153,10 @@ impl TokenDefinition { metadata_id: metadata_id.clone(), }); - if account_type == //NFTs must have supply 1 - TOKEN_STANDARD_NONFUNGIBLE - && total_supply != 1 - { - None - } else if account_type == //Fungible Tokens do not have metadata. - TOKEN_STANDARD_FUNGIBLE_TOKEN - && metadata_id != AccountId::new([0; 32]) - { - None - } else { - this + match account_type { + TOKEN_STANDARD_NONFUNGIBLE if total_supply != 1 + | TOKEN_STANDARD_FUNGIBLE_TOKEN if metadata_id != AccountId::new([0; 32]) => None + _ => this } } } From 5baa7592833fcac5b3a1afb989161deb02b2339d Mon Sep 17 00:00:00 2001 From: jonesmarvin8 <83104039+jonesmarvin8@users.noreply.github.com> Date: Mon, 22 Dec 2025 18:26:33 -0500 Subject: [PATCH 21/33] Update nssa/program_methods/guest/src/bin/token.rs Co-authored-by: Daniil Polyakov --- nssa/program_methods/guest/src/bin/token.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nssa/program_methods/guest/src/bin/token.rs b/nssa/program_methods/guest/src/bin/token.rs index 714c44d..c1066c5 100644 --- a/nssa/program_methods/guest/src/bin/token.rs +++ b/nssa/program_methods/guest/src/bin/token.rs @@ -232,7 +232,8 @@ struct TokenMetadata { definition_id: AccountId, uri: [u8; 200], creators: [u8; 250], - primary_sale_date: u64, //BlockId + /// Block id + primary_sale_date: u64, } impl TokenMetadata { From 072cf5cd0f8ed3a822282c829e32792020437f0d Mon Sep 17 00:00:00 2001 From: jonesmarvin8 <83104039+jonesmarvin8@users.noreply.github.com> Date: Mon, 22 Dec 2025 19:51:41 -0500 Subject: [PATCH 22/33] various fixes from comments --- nssa/program_methods/guest/src/bin/token.rs | 107 +++++--------------- 1 file changed, 27 insertions(+), 80 deletions(-) diff --git a/nssa/program_methods/guest/src/bin/token.rs b/nssa/program_methods/guest/src/bin/token.rs index c1066c5..45c1000 100644 --- a/nssa/program_methods/guest/src/bin/token.rs +++ b/nssa/program_methods/guest/src/bin/token.rs @@ -77,32 +77,19 @@ fn is_token_standard_valid(standard: u8) -> bool { matches!( standard, TOKEN_STANDARD_FUNGIBLE_TOKEN - | TOKEN_STANDARD_FUNGIBLE_ASSET - | TOKEN_STANDARD_NONFUNGIBLE - | TOKEN_STANDARD_NONFUNGIBLE_PRINTABLE + | TOKEN_STANDARD_FUNGIBLE_ASSET + | TOKEN_STANDARD_NONFUNGIBLE + | TOKEN_STANDARD_NONFUNGIBLE_PRINTABLE ) } fn is_metadata_type_valid(standard: u8) -> bool { - if standard == METADATA_TYPE_SIMPLE { - true - } else if standard == METADATA_TYPE_EXPANDED { - true - } else { - false - } + matches!(standard, METADATA_TYPE_SIMPLE | METADATA_TYPE_EXPANDED) } fn is_token_holding_type_valid(standard: u8) -> bool { - if standard == TOKEN_HOLDING_STANDARD { - true - } else if standard == TOKEN_HOLDING_NFT_MASTER { - true - } else if standard == TOKEN_HOLDING_NFT_PRINTED_COPY { - true - } else { - false - } + matches!(standard, |TOKEN_HOLDING_STANDARD| TOKEN_HOLDING_NFT_MASTER + | TOKEN_HOLDING_NFT_PRINTED_COPY) } struct TokenDefinition { @@ -154,9 +141,9 @@ impl TokenDefinition { }); match account_type { - TOKEN_STANDARD_NONFUNGIBLE if total_supply != 1 - | TOKEN_STANDARD_FUNGIBLE_TOKEN if metadata_id != AccountId::new([0; 32]) => None - _ => this + TOKEN_STANDARD_NONFUNGIBLE if total_supply != 1 => None, + TOKEN_STANDARD_FUNGIBLE_TOKEN if metadata_id != AccountId::new([0; 32]) => None, + _ => this, } } } @@ -528,11 +515,7 @@ fn new_definition_with_metadata( } fn valid_total_supply_for_token_standard(total_supply: u128, token_standard: u8) -> bool { - if token_standard == TOKEN_STANDARD_NONFUNGIBLE && total_supply != 1 { - false - } else { - true - } + token_standard != TOKEN_STANDARD_NONFUNGIBLE || total_supply == 1 } fn initialize_account(pre_states: &[AccountWithMetadata]) -> Vec { @@ -619,11 +602,7 @@ fn burn(pre_states: &[AccountWithMetadata], balance_to_burn: u128) -> Vec bool { - if account_type == TOKEN_STANDARD_NONFUNGIBLE { - false - } else { - true - } + account_type != TOKEN_STANDARD_NONFUNGIBLE } fn mint_additional_supply( @@ -1529,10 +1508,7 @@ mod tests { == AccountForTests::definition_account_unclaimed().account ); - assert!( - *holding_account.account() - == AccountForTests::holding_account_unclaimed().account - ); + assert!(*holding_account.account() == AccountForTests::holding_account_unclaimed().account); } #[should_panic(expected = "Invalid number of input accounts")] @@ -1697,13 +1673,11 @@ mod tests { let [sender_post, recipient_post] = post_states.try_into().ok().unwrap(); assert!( - *sender_post.account() - == AccountForTests::holding_account_init_post_transfer().account + *sender_post.account() == AccountForTests::holding_account_init_post_transfer().account ); assert!( *recipient_post.account() - == AccountForTests::holding_account2_init_post_transfer() - .account + == AccountForTests::holding_account2_init_post_transfer().account ); } @@ -1738,13 +1712,11 @@ mod tests { assert!( *sender_post.account() - == AccountForTests::holding_account_master_nft_post_transfer() - .account + == AccountForTests::holding_account_master_nft_post_transfer().account ); assert!( *recipient_post.account() - == AccountForTests::holding_account_with_master_nft_transferred_to() - .account + == AccountForTests::holding_account_with_master_nft_transferred_to().account ); } @@ -1758,23 +1730,18 @@ mod tests { let [sender_post, recipient_post] = post_states.try_into().ok().unwrap(); assert!( - *sender_post.account() - == AccountForTests::holding_account_init_post_transfer() - .account + *sender_post.account() == AccountForTests::holding_account_init_post_transfer().account ); assert!( *recipient_post.account() - == AccountForTests::holding_account2_init_post_transfer() - .account + == AccountForTests::holding_account2_init_post_transfer().account ); } #[test] #[should_panic(expected = "Invalid number of accounts")] fn test_burn_invalid_number_of_accounts() { - let pre_states = vec![ - AccountForTests::definition_account_auth(), - ]; + let pre_states = vec![AccountForTests::definition_account_auth()]; let _post_states = burn(&pre_states, BalanceForTests::burn_success()); } @@ -1829,14 +1796,8 @@ mod tests { let def_post = post_states[0].clone(); let holding_post = post_states[1].clone(); - assert!( - *def_post.account() - == AccountForTests::definition_account_post_burn().account - ); - assert!( - *holding_post.account() - == AccountForTests::holding_account_post_burn().account - ); + assert!(*def_post.account() == AccountForTests::definition_account_post_burn().account); + assert!(*holding_post.account() == AccountForTests::holding_account_post_burn().account); } #[test] @@ -1908,10 +1869,7 @@ mod tests { let def_post = post_states[0].clone(); let holding_post = post_states[1].clone(); - assert!( - *def_post.account() - == AccountForTests::definition_account_mint().account - ); + assert!(*def_post.account() == AccountForTests::definition_account_mint().account); assert!( *holding_post.account() == AccountForTests::holding_account_same_definition_mint().account @@ -1929,13 +1887,8 @@ mod tests { let def_post = post_states[0].clone(); let holding_post = post_states[1].clone(); - assert!( - *def_post.account() - == AccountForTests::definition_account_mint().account - ); - assert!( - *holding_post.account() == AccountForTests::init_mint().account - ); + assert!(*def_post.account() == AccountForTests::definition_account_mint().account); + assert!(*holding_post.account() == AccountForTests::init_mint().account); assert!(holding_post.requires_claim() == true); } @@ -2346,9 +2299,7 @@ mod tests { #[should_panic(expected = "Invalid number of accounts")] #[test] fn test_print_nft_invalid_number_of_accounts_1() { - let pre_states = vec![ - AccountForTests::holding_account_master_nft() - ]; + let pre_states = vec![AccountForTests::holding_account_master_nft()]; let _post_states = print_nft(&pre_states); } @@ -2425,12 +2376,8 @@ mod tests { let post_printed = post_states[1].account(); assert!( - *post_master_nft - == AccountForTests::holding_account_master_nft_after_print().account - ); - assert!( - *post_printed - == AccountForTests::holding_account_printed_nft().account + *post_master_nft == AccountForTests::holding_account_master_nft_after_print().account ); + assert!(*post_printed == AccountForTests::holding_account_printed_nft().account); } } From a84057561ec40d276a0ccdc3adaa0a41467b01bf Mon Sep 17 00:00:00 2001 From: jonesmarvin8 <83104039+jonesmarvin8@users.noreply.github.com> Date: Mon, 22 Dec 2025 19:52:39 -0500 Subject: [PATCH 23/33] various fixes from comments --- nssa/program_methods/guest/src/bin/amm.rs | 26 ++++++++++++----------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/nssa/program_methods/guest/src/bin/amm.rs b/nssa/program_methods/guest/src/bin/amm.rs index 80b25fc..b570403 100644 --- a/nssa/program_methods/guest/src/bin/amm.rs +++ b/nssa/program_methods/guest/src/bin/amm.rs @@ -388,12 +388,14 @@ fn compute_pool_pda_seed( ) -> PdaSeed { use risc0_zkvm::sha::{Impl, Sha256}; - //let mut i: usize = 0; - //TODO - - let (token_1, token_2) = match definition_token_a_id.value().cmp(definition_token_b_id.value()) { + let (token_1, token_2) = match definition_token_a_id + .value() + .cmp(definition_token_b_id.value()) + { std::cmp::Ordering::Less => (definition_token_b_id.clone(), definition_token_a_id.clone()), - std::cmp::Ordering::Greater => (definition_token_a_id.clone(), definition_token_b_id.clone()), + std::cmp::Ordering::Greater => { + (definition_token_a_id.clone(), definition_token_b_id.clone()) + } std::cmp::Ordering::Equal => panic!("Definitions match"), }; @@ -723,7 +725,8 @@ fn swap( vault_a.clone(), vault_b.clone(), user_holding_b.clone(), - &amounts, + amounts[0], + amounts[1], &[pool_def_data.reserve_a, pool_def_data.reserve_b], pool.account_id.clone(), ); @@ -735,7 +738,8 @@ fn swap( vault_b.clone(), vault_a.clone(), user_holding_a.clone(), - &amounts, + amounts[0], + amounts[1], &[pool_def_data.reserve_b, pool_def_data.reserve_a], pool.account_id.clone(), ); @@ -779,9 +783,6 @@ fn swap_logic( let reserve_deposit_vault_amount = reserve_amounts[0]; let reserve_withdraw_vault_amount = reserve_amounts[1]; - let deposit_amount = balances[0]; - let min_amount_out = balances[1]; - // Compute withdraw amount // Maintains pool constant product // k = pool_def_data.reserve_a * pool_def_data.reserve_b; @@ -841,7 +842,7 @@ fn add_liquidity( let user_holding_b = &pre_states[5]; let user_holding_lp = &pre_states[6]; - // Verify vaults are in fact vaults + // 1. Fetch Pool state let pool_def_data = PoolDefinition::parse(&pool.account.data) .expect("Add liquidity: AMM Program expects valid Pool Definition Account"); if vault_a.account_id != pool_def_data.vault_a_id { @@ -1005,7 +1006,7 @@ fn remove_liquidity( let amount_min_a = amounts[1]; let amount_min_b = amounts[2]; - // Verify vaults are in fact vaults + // 1. Fetch Pool state let pool_def_data = PoolDefinition::parse(&pool.account.data) .expect("Remove liquidity: AMM Program expects a valid Pool Definition Account"); @@ -1080,6 +1081,7 @@ fn remove_liquidity( liquidity_pool_supply: pool_def_data.liquidity_pool_supply - delta_lp, reserve_a: pool_def_data.reserve_a - withdraw_amount_a, reserve_b: pool_def_data.reserve_b - withdraw_amount_b, + active, ..pool_def_data.clone() }; From 56151e9d3daa15014ebea5084f6a5144a06bd931 Mon Sep 17 00:00:00 2001 From: jonesmarvin8 <83104039+jonesmarvin8@users.noreply.github.com> Date: Tue, 23 Dec 2025 11:06:18 -0500 Subject: [PATCH 24/33] remove unused file from merge Accidental inclusion --- nssa/program_methods/guest/Cargo.toml | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 nssa/program_methods/guest/Cargo.toml diff --git a/nssa/program_methods/guest/Cargo.toml b/nssa/program_methods/guest/Cargo.toml deleted file mode 100644 index 0861989..0000000 --- a/nssa/program_methods/guest/Cargo.toml +++ /dev/null @@ -1,11 +0,0 @@ -[package] -name = "programs" -version = "0.1.0" -edition = "2024" - -[workspace] - -[dependencies] -risc0-zkvm = { version = "3.0.3", features = ['std'] } -nssa-core = { path = "../../core" } -serde = { version = "1.0.219", default-features = false } \ No newline at end of file From fcdd6e96a51a31b41e45fead977584df53d28702 Mon Sep 17 00:00:00 2001 From: jonesmarvin8 <83104039+jonesmarvin8@users.noreply.github.com> Date: Tue, 23 Dec 2025 17:26:38 -0500 Subject: [PATCH 25/33] clippy and fmt --- program_methods/guest/src/bin/token.rs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/program_methods/guest/src/bin/token.rs b/program_methods/guest/src/bin/token.rs index 45c1000..aac0363 100644 --- a/program_methods/guest/src/bin/token.rs +++ b/program_methods/guest/src/bin/token.rs @@ -137,7 +137,7 @@ impl TokenDefinition { account_type, name, total_supply, - metadata_id: metadata_id.clone(), + metadata_id, }); match account_type { @@ -159,7 +159,7 @@ impl TokenHolding { fn new(definition_id: &AccountId) -> Self { Self { account_type: TOKEN_HOLDING_STANDARD, - definition_id: definition_id.clone(), + definition_id: *definition_id, balance: 0, } } @@ -409,7 +409,7 @@ fn new_definition( let token_holding = TokenHolding { account_type: TOKEN_HOLDING_STANDARD, - definition_id: definition_target_account.account_id.clone(), + definition_id: definition_target_account.account_id, balance: total_supply, }; @@ -469,12 +469,12 @@ fn new_definition_with_metadata( account_type: token_standard, name, total_supply, - metadata_id: metadata_target_account.account_id.clone(), + metadata_id: metadata_target_account.account_id, }; let token_holding = TokenHolding { account_type: TOKEN_HOLDING_STANDARD, - definition_id: definition_target_account.account_id.clone(), + definition_id: definition_target_account.account_id, balance: total_supply, }; @@ -492,7 +492,7 @@ fn new_definition_with_metadata( let token_metadata = TokenMetadata { account_type: metadata_standard, version: CURRENT_VERSION, - definition_id: definition_target_account.account_id.clone(), + definition_id: definition_target_account.account_id, uri, creators, primary_sale_date: 0u64, //TODO: future works to implement this @@ -705,7 +705,7 @@ fn print_nft(pre_states: &[AccountWithMetadata]) -> Vec { panic!("Insufficient balance to print another NFT copy"); } - let definition_id = master_account_data.definition_id.clone(); + let definition_id = master_account_data.definition_id; let post_master_account = { let mut this = master_account.account.clone(); @@ -862,9 +862,9 @@ mod tests { use crate::{ TOKEN_DEFINITION_DATA_SIZE, TOKEN_HOLDING_DATA_SIZE, TOKEN_HOLDING_NFT_MASTER, - TOKEN_HOLDING_NFT_PRINTED_COPY, TOKEN_HOLDING_STANDARD, TOKEN_STANDARD_FUNGIBLE_ASSET, + TOKEN_HOLDING_NFT_PRINTED_COPY, TOKEN_HOLDING_STANDARD, TOKEN_STANDARD_FUNGIBLE_TOKEN, TOKEN_STANDARD_NONFUNGIBLE, TokenDefinition, TokenHolding, - burn, initialize_account, mint_additional_supply, new_definition, + burn, mint_additional_supply, new_definition, new_definition_with_metadata, print_nft, transfer, }; @@ -1367,7 +1367,7 @@ mod tests { } fn mint_overflow() -> u128 { - (2 as u128).pow(128) - 40_000 + 2_u128.pow(128) - 40_000 } fn init_supply_mint() -> u128 { @@ -1889,7 +1889,7 @@ mod tests { assert!(*def_post.account() == AccountForTests::definition_account_mint().account); assert!(*holding_post.account() == AccountForTests::init_mint().account); - assert!(holding_post.requires_claim() == true); + assert!(holding_post.requires_claim()); } #[test] From c25e93edd580fec00f20df626cc631d176f0233d Mon Sep 17 00:00:00 2001 From: jonesmarvin8 <83104039+jonesmarvin8@users.noreply.github.com> Date: Tue, 23 Dec 2025 17:31:03 -0500 Subject: [PATCH 26/33] cargo fmt and clippy --- nssa/core/Cargo.toml | 2 +- nssa/src/state.rs | 4 +- program_methods/guest/src/bin/amm.rs | 62 +++++++++++++--------------- 3 files changed, 32 insertions(+), 36 deletions(-) diff --git a/nssa/core/Cargo.toml b/nssa/core/Cargo.toml index 5f3d3f2..63d35f0 100644 --- a/nssa/core/Cargo.toml +++ b/nssa/core/Cargo.toml @@ -9,7 +9,7 @@ borsh.workspace = true serde = { workspace = true } thiserror.workspace = true chacha20 = { version = "0.9", default-features = false } -bytemuck = { workspace = true, optional = true } +bytemuck.workspace = true k256 = { workspace = true, optional = true } base58 = { workspace = true, optional = true } anyhow = { workspace = true, optional = true } diff --git a/nssa/src/state.rs b/nssa/src/state.rs index bf5d857..b220bbc 100644 --- a/nssa/src/state.rs +++ b/nssa/src/state.rs @@ -264,7 +264,6 @@ impl V02State { #[cfg(test)] pub mod tests { - use std::collections::HashMap; use nssa_core::{ @@ -284,7 +283,8 @@ pub mod tests { message::Message, witness_set::WitnessSet, }, - program::Program, public_transaction, + program::Program, + public_transaction, signature::PrivateKey, state::MAX_NUMBER_CHAINED_CALLS, }; diff --git a/program_methods/guest/src/bin/amm.rs b/program_methods/guest/src/bin/amm.rs index b570403..456df35 100644 --- a/program_methods/guest/src/bin/amm.rs +++ b/program_methods/guest/src/bin/amm.rs @@ -203,7 +203,7 @@ impl TokenHolding { fn new(definition_id: &AccountId) -> Self { Self { account_type: TOKEN_HOLDING_TYPE, - definition_id: definition_id.clone(), + definition_id: *definition_id, balance: 0, } } @@ -392,9 +392,9 @@ fn compute_pool_pda_seed( .value() .cmp(definition_token_b_id.value()) { - std::cmp::Ordering::Less => (definition_token_b_id.clone(), definition_token_a_id.clone()), + std::cmp::Ordering::Less => (definition_token_b_id, definition_token_a_id), std::cmp::Ordering::Greater => { - (definition_token_a_id.clone(), definition_token_b_id.clone()) + (definition_token_a_id, definition_token_b_id) } std::cmp::Ordering::Equal => panic!("Definitions match"), }; @@ -535,9 +535,9 @@ fn new_definition( if pool.account_id != compute_pool_pda( - amm_program_id.clone(), - definition_token_a_id.clone(), - definition_token_b_id.clone(), + amm_program_id, + definition_token_a_id, + definition_token_b_id, ) { panic!("Pool Definition Account ID does not match PDA"); @@ -545,22 +545,22 @@ fn new_definition( if vault_a.account_id != compute_vault_pda( - amm_program_id.clone(), - pool.account_id.clone(), - definition_token_a_id.clone(), + amm_program_id, + pool.account_id, + definition_token_a_id, ) || vault_b.account_id != compute_vault_pda( - amm_program_id.clone(), - pool.account_id.clone(), - definition_token_b_id.clone(), + amm_program_id, + pool.account_id, + definition_token_b_id, ) { panic!("Vault ID does not match PDA"); } if pool_lp.account_id - != compute_liquidity_token_pda(amm_program_id.clone(), pool.account_id.clone()) + != compute_liquidity_token_pda(amm_program_id, pool.account_id) { panic!("Liquidity pool Token Definition Account ID does not match PDA"); } @@ -584,12 +584,12 @@ fn new_definition( let pool_post_definition = PoolDefinition { definition_token_a_id, definition_token_b_id, - vault_a_id: vault_a.account_id.clone(), - vault_b_id: vault_b.account_id.clone(), - liquidity_pool_id: pool_lp.account_id.clone(), - liquidity_pool_supply: amount_a.clone(), - reserve_a: amount_a.clone(), - reserve_b: amount_b.clone(), + vault_a_id: vault_a.account_id, + vault_b_id: vault_b.account_id, + liquidity_pool_id: pool_lp.account_id, + liquidity_pool_supply: amount_a, + reserve_a: amount_a, + reserve_b: amount_b, fees: 0u128, //TODO: we assume all fees are 0 for now. active: true, }; @@ -646,7 +646,7 @@ fn new_definition( program_id: token_program_id, instruction_data, pre_states: vec![pool_lp_auth.clone(), user_holding_lp.clone()], - pda_seeds: vec![compute_liquidity_token_pda_seed(pool.account_id.clone())], + pda_seeds: vec![compute_liquidity_token_pda_seed(pool.account_id)], }; chained_calls.push(call_token_lp); @@ -728,7 +728,7 @@ fn swap( amounts[0], amounts[1], &[pool_def_data.reserve_a, pool_def_data.reserve_b], - pool.account_id.clone(), + pool.account_id, ); (chained_calls, [deposit_a, 0], [0, withdraw_b]) @@ -741,7 +741,7 @@ fn swap( amounts[0], amounts[1], &[pool_def_data.reserve_b, pool_def_data.reserve_a], - pool.account_id.clone(), + pool.account_id, ); (chained_calls, [0, withdraw_a], [deposit_b, 0]) @@ -962,7 +962,7 @@ fn add_liquidity( pool_definition_lp_auth.clone(), user_holding_lp.clone(), delta_lp, - vec![compute_liquidity_token_pda_seed(pool.account_id.clone())], + vec![compute_liquidity_token_pda_seed(pool.account_id)], ); chained_call.push(call_token_lp); @@ -1069,11 +1069,7 @@ fn remove_liquidity( let delta_lp: u128 = (pool_def_data.liquidity_pool_supply * amount_lp) / pool_def_data.liquidity_pool_supply; - let active: bool = if pool_def_data.liquidity_pool_supply - delta_lp == 0 { - false - } else { - true - }; + let active: bool = pool_def_data.liquidity_pool_supply - delta_lp != 0; // 5. Update pool account let mut pool_post = pool.account.clone(); @@ -1096,8 +1092,8 @@ fn remove_liquidity( user_holding_a.clone(), withdraw_amount_a, vec![compute_vault_pda_seed( - pool.account_id.clone(), - pool_def_data.definition_token_a_id.clone(), + pool.account_id, + pool_def_data.definition_token_a_id, )], ); //Chaincall for Token B withdraw @@ -1107,8 +1103,8 @@ fn remove_liquidity( user_holding_b.clone(), withdraw_amount_b, vec![compute_vault_pda_seed( - pool.account_id.clone(), - pool_def_data.definition_token_b_id.clone(), + pool.account_id, + pool_def_data.definition_token_b_id, )], ); //Chaincall for LP adjustment @@ -1119,7 +1115,7 @@ fn remove_liquidity( pool_definition_lp_auth.clone(), user_holding_lp.clone(), delta_lp, - vec![compute_liquidity_token_pda_seed(pool.account_id.clone())], + vec![compute_liquidity_token_pda_seed(pool.account_id)], ); chained_calls.push(call_token_lp); From c6531aaab4f4a86002b50d9cae584daeefef3552 Mon Sep 17 00:00:00 2001 From: jonesmarvin8 <83104039+jonesmarvin8@users.noreply.github.com> Date: Tue, 23 Dec 2025 17:36:58 -0500 Subject: [PATCH 27/33] accountid removed conflict --- nssa/core/src/account.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nssa/core/src/account.rs b/nssa/core/src/account.rs index 87f9984..2acc7b2 100644 --- a/nssa/core/src/account.rs +++ b/nssa/core/src/account.rs @@ -47,7 +47,7 @@ impl AccountWithMetadata { #[derive( Copy, Clone, Default, Serialize, Deserialize, PartialEq, Eq, Hash, BorshSerialize, BorshDeserialize, )] -#[cfg_attr(any(feature = "host", test), derive(Debug, PartialOrd, Ord, Default))] +#[cfg_attr(any(feature = "host", test), derive(Debug, PartialOrd, Ord))] pub struct AccountId { value: [u8; 32], } From e6a73a02b590b8a63630e1286dddfc277cd2c37e Mon Sep 17 00:00:00 2001 From: jonesmarvin8 <83104039+jonesmarvin8@users.noreply.github.com> Date: Tue, 23 Dec 2025 18:03:00 -0500 Subject: [PATCH 28/33] artifacts commitment --- artifacts/program_methods/amm.bin | Bin 0 -> 464868 bytes .../authenticated_transfer.bin | Bin 378136 -> 379876 bytes artifacts/program_methods/pinata.bin | Bin 380508 -> 382256 bytes artifacts/program_methods/pinata_token.bin | Bin 387084 -> 388880 bytes .../privacy_preserving_circuit.bin | Bin 470128 -> 470796 bytes artifacts/program_methods/token.bin | Bin 401992 -> 403728 bytes 6 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 artifacts/program_methods/amm.bin diff --git a/artifacts/program_methods/amm.bin b/artifacts/program_methods/amm.bin new file mode 100644 index 0000000000000000000000000000000000000000..88b5121012c349c87e3267c824e1bd7ae332e444 GIT binary patch literal 464868 zcmeFa3w)H-o$&uWb7qEQlF5ZhLV^lI&dg*OVnByT>!r;I0mDVH61?;x7=o9o1S_^$ zwKJRq2oQyi$kuLmi7_B(yRy?r+kJO8BLs~WC2x!EcHeDHHC}pC-j?pRyZiS4J<*y#EvU(+vD+2L3byf0}_m z&A|VwGoXSlW1icH``q^!ZQmU-+P1n35o|Vm?lNOa(ll;1RP^S!!LxqvG7jmyo9{7_ zo2rax-Ix(|oiI}F*P5cI_8Pv*pmAuSB+dOT{a%G!hOf(I+#GisKGXbz43!%)kTwoA zlc&q|H}e)r!#8QtcYN+uM$(-yc0c1V-ii-iqWo!{-_-5edB^_F=k}XZQV#kfPTB9e z{#*Xt;a}VD`v2DFZp!3S|I>cg{G87{C-ZLpN&8*<-{i}R_w0ABL7zLG$#?iy_PegM z&pl|^?W$j9$B^9YVjR7hzI7e3$Fcb^b7tys__`)##$wE#FcxcW9v$+z-?Qc=+2zjE zefTZvewXQWh6UrKr@>7~-&TPhn4dXt^> zrMA})Lqnz-I$?^VZUNQ#1t<)VX7CtX{zTInBwpXQypGoikI&;)yqy( zyi#GRR|2LuGS^J*>N0#)ZZrAlCNnzLZ=}YK8e;f}p@zS2h!@{5)Qi6{e2;E6eANYJ z^3S%IKA$p@Nn!e?J!D4LzGUFv5{(KnA8 z(YM|*Qtb~KskJ{bQ*Y7dTUHpUx7Qgme9$2yqYhc0cF2ZaN3zT5kp6NZYfT{oCmk|0 z;_$glr_XITcE?TDsnJ6oC-2<(cZ1t_=jL5O{#|@4?+SS5$-isrR!=!S;;985b)eHD z4jl1_{mvrs#DXHVzq3ev{Ya7cy0ch4y`We;-B~R9j}*%=-?-oDl_3omcx6PxPOq%j z@Q9Z_vj&_cdR@*tB@NM3`DLH0tR(3wGj{LL{f)oZ=5$4pPM48%nGX8mvBwdQCr@lM zeLpBNlRw;M_*QN+lh^Y56Z}50)l9zXF?~PWY6zJyWPDAD@0zWqjNe_9yvAep#Vd-E z*KIXq;th}Q+HSKi@l8*%wa}Cs*A)3a({1!^T;WN6qSKV>H=g9RPP0!P@%UDD8nSam zQS!&+?{pUVen|eV?|YK3lE3Q-kMBf}DK{-B^8LhX_HCm6ANCk>^WC20H9cnE<~1JQ zHC|J02^1x7>@oVb94Yesc)KaPzv)SyC^q}L>BkSY8**!>$G2j;*|+rw?G>AHn{I!* z(YI}dNBK=N`QPKF+&;I+_Ya2Iw_Ud#H)Ice@puiNx7ZN%(4Xrl-}C*Vc z*HiwXiXt^Drsv6&55GYli_E@kjtFzemDs#H2qPTC< z_lxD`fVXe+iekB?)7!UYu2*({-`m&CI@o%*w{Pnc#d6yl-o9-WUb%gZw{QEJV%hT> zZ(k4VHac6c_6ldg2}Zogg|gMTlAX7M4H5pOFQ zaO&SG7%LW`M6n9R47q2oAs>I%kWU;npl4+Q8l?iUGBMLEQ!~@0B9bUokyxpiWtOU0 z=@L<&C{gvX5^=s+qRvlyp>5@wmd}Ik`&_P9GJC|!8TvnxbiHQ!+y}k8k<8wTH&x7A zNIv(`7wI!=wX9@!hu#;O{)KuH(8vd&fe%6hAB0AJ2^#qTH1Yvxy4G5nfC4Zr6QFB;

GBSTdSQ=4J@<@593FIxr^~*Y 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 z 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

yDQ6# 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 literal 0 HcmV?d00001 diff --git a/artifacts/program_methods/authenticated_transfer.bin b/artifacts/program_methods/authenticated_transfer.bin index 286dc22fbbc64b727d723a6ca2927dcebbed037a..37cff0cef7be0626813df57cc2baa74ced57a1bb 100644 GIT binary patch delta 101200 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 BuYdpm diff --git a/artifacts/program_methods/pinata.bin b/artifacts/program_methods/pinata.bin index fbc81699795a53407a2721b59c1127547324e1ce..136dc889bf62dc8a19ef339680fe09a32449b64e 100644 GIT binary patch delta 100704 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 MV)^n^?FYyI2kPQo3;+NC delta 99337 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�WL- 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 G?el*CQc0!& diff --git a/artifacts/program_methods/pinata_token.bin b/artifacts/program_methods/pinata_token.bin index 7d181062c0e38fc9c5f1df11d752591b4aa7745b..2c3f15ec9c8ce827f3dbb5df1f6a5244dc63df75 100644 GIT binary patch delta 105156 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 delta 104366 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 diff --git a/artifacts/program_methods/privacy_preserving_circuit.bin b/artifacts/program_methods/privacy_preserving_circuit.bin index a866728109ac5f4a747ded1a4492d0575ce3bcae..241545cba9d3c188435b9f8ba490b636faabdf32 100644 GIT binary patch delta 123150 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

8mH#G+!Lw0n`C*s*Rwjo-! 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 diff --git a/artifacts/program_methods/token.bin b/artifacts/program_methods/token.bin index 01ac43754402fea4b4c28347ff60dce1ca5569b1..c2b6283098fa6334294bba3164cf2520fb0b72e7 100644 GIT binary patch delta 107252 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 V3I6`yA1ew&zrOX!N2PDw@&72&)CB+l delta 105837 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 From 2e82d2ddb87be97362ad7808130dc39019331364 Mon Sep 17 00:00:00 2001 From: Daniil Polyakov Date: Wed, 24 Dec 2025 03:39:39 +0300 Subject: [PATCH 29/33] chore: fix lints, fmt and artifacts --- Cargo.lock | 2 + artifacts/program_methods/amm.bin | Bin 464868 -> 464896 bytes artifacts/test_program_methods/burner.bin | Bin 374936 -> 376680 bytes .../test_program_methods/chain_caller.bin | Bin 388648 -> 390384 bytes artifacts/test_program_methods/claimer.bin | Bin 373832 -> 375604 bytes .../test_program_methods/data_changer.bin | Bin 376532 -> 378312 bytes .../test_program_methods/extra_output.bin | Bin 373904 -> 375660 bytes artifacts/test_program_methods/minter.bin | Bin 373860 -> 375604 bytes .../test_program_methods/missing_output.bin | Bin 374012 -> 375768 bytes .../modified_transfer.bin | Bin 377384 -> 379156 bytes .../test_program_methods/nonce_changer.bin | Bin 373936 -> 375712 bytes artifacts/test_program_methods/noop.bin | Bin 373644 -> 375392 bytes .../program_owner_changer.bin | Bin 373856 -> 375616 bytes .../simple_balance_transfer.bin | Bin 375732 -> 377492 bytes examples/program_deployment/Cargo.toml | 1 + nssa/core/src/account.rs | 13 +- nssa/src/state.rs | 78 +--- program_methods/guest/src/bin/amm.rs | 398 +++++------------- 18 files changed, 114 insertions(+), 378 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 02a9266..ad97136 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2657,6 +2657,7 @@ name = "nssa" version = "0.1.0" dependencies = [ "borsh", + "bytemuck", "hex", "hex-literal 1.1.0", "log", @@ -3025,6 +3026,7 @@ version = "0.1.0" dependencies = [ "clap", "nssa", + "nssa_core", "tokio", "wallet", ] diff --git a/artifacts/program_methods/amm.bin b/artifacts/program_methods/amm.bin index 88b5121012c349c87e3267c824e1bd7ae332e444..bde909c5fdb830c7c6a2c94cab46dff37dd6dc5a 100644 GIT binary patch delta 10705 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 Jf?j?4{{S2+4%`3$ delta 10662 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 AK>z>% diff --git a/artifacts/test_program_methods/chain_caller.bin b/artifacts/test_program_methods/chain_caller.bin index b57e0f4ea6911cf9576ab5111b36d862626059c7..ccccbfb664d38337ba9ce09b49b1f8c5c0d7aabe 100644 GIT binary patch delta 102235 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 F^*@DD42S># delta 101232 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

#kTAS@$hC)ErrBVzqJmN}Jc>bK?{%rb}UQ?#3~ z%#qRIlhb4@_<;ib?zbL2V~yV(D=XZldMvZHW#6V-)Ec{`zF|*g$?xIiAEM&S|N4gB zsz557;#D|J#pN(9QI`B^UjDTzF8S9hOa3D&pZVWBcuXZog=NZ8VZEv#`5&pc}!mm5Z|E&+_u`P;tq>OIh-ld->1Vcy#`)Z+O8LusW&m4X(eYOYkz5 z!!V;iXF|1wd*S1Fcr8z2Bz`!q!1l~`F0NJi<#@gF1$Z-#)=v``Q84oD1kK69dpdBr z@)W#dnp?qxc$tbngf}QZjDvR)(ijVG*}*x=PvBASB+U9rc#48lwzzee&U>?Q8{Eb? zEuZ&<;(d+#;6eB-{C%J0$T^I z+WdWSxsjYFI%BtR*Q_j){Kx^!KV6|nCCFiPjIvZH!#e*Q6_@<;lqLTLFaIVLm;74> z*!f2{rNSd#g~z-K%akSmEib=L#bpKWD@*=%FaOu1N{|Y_D@%pF4sE){dt;6}G6j$|97}?G^(-SNG#u_AKroyztxzy9Dn>Fkb<=LUBYH#+rW3Y>{|Cu z={*N>W+Q)syi%h6g~m3&0?QZn&!a%%?-|?p2a^9mg6|S${gSZz;ZcE2Xob&Zg>n-q z*Mk0dKDL+FQd~|03F1<}#@NY{9%kdDt#Bj-Qz&3W!v@On z1{&Zh9IXJa!FB{{@kliyKVVs5w8VoSvE*BC$I_nlubAITNH%_hM5iOeg2sddmKE3v zU9rpo>;19pBI^UO>>}$PSccg85WHHsH{N)yy8QN~AdeBS74oG4^@f4Nunf74AC8Bs z5j)q|#>=tn66*`F>;mhH@aUwvUSC3i{Rs%!hYO8ug$J?hGwX-2>@w?zvA#N1W4G`Z zlDt?r0$CKw3!6)DQnonUrxYC2kGJA7M5ma9ax9ZlCYihxdqOoR$NgJ4>(c~LS$GQ% zcE67i3*N_Tu5**{Uo5{*(UEL9YK|Mk@h1h*5(|b6;-(PWa#>dR?rsLeeRrvXMW+_;izN~T&{+2UujUevoxTbjW;SEfaRAtqJQe8Q2rVxlVmNHEwXc@Rd3!araTA)9QHqgeq^ofNdUKF*T49Y05KW-u`ddeC<37 z=U?w;{R_B2#b3fz#KRGh_dk6{f&3VYZSV)YMm5luv07m(kY9*5Vf!TXe6gA{lW-34 zXyFSAuyn|}0uRR{DB$@A-z;JZY{DWeJ+!XE3H4U1C3rdUI0;h!J!6~y0hSJ1Z@{ua z)}Lb802Yov8u*+7w@;b}Ut+g#6Dqre5t_vsWtP8=Wfx?aUGyiGU0`SZVoqE#Nc>UbaQkHtAD0R@xJk1C55c?Bf(&uWV6J{NU>j_Xx2Pe_!18-NHr^JO zP(R#a>K9`9JsulB8t*le>%V=uJ(+@xA6&vE_zxP`gBsz*2+NQBL<^tsz*~qj!eP7) z%MS$E_y@R3bs#u~*ODsU4D;hbvj1h_7L0;Vs9-zP7t1dXMN2F=6w9v)Ss#I$vjwdv zkPe=QJQ>zglGD3-Ib2xc=`>i8Syg1@d!8HsKvSMK$mj&e-PS4LDah zbqHHXei{u(dxv28IizUe&FXk7@$ghk{A|fjs)RBM!N0kIs|u+p2-Pv7Q6- zagNGgfD4r$z{Sdoak4W*$WaycxQ+t(fu?BT`i1{mt>4DW@op4I{-4G+z6;A7ux`MsmE*@oyU@m)B`J_u zZwu0}99GsXu}m84)>sZp>pig?1=g8Zj%(|7Saz{>dn~)mI@yVWaznYnNMN_rH*{5& zGu;t*4GpA`BqMMh9;N2Q1)eX$Ipl{oo#fBQ@>^Nq4G5oq3;r+#(MowotLFxsx;)$d8vg%y}&){6;7w}}|m3XQ0YFztw z;}!*}#ZBY#jjlRB9dEGplk{*;3Rd%2jf)xoGz(6`bqtw(@_9A>3bzj9@!(-RZHMdd z<2d6t=chfd@cbe!Hu-Y>3u-B7cB5P2R=k}Rwlyo<`*>EUR?q?0DkpFb^)pTWad`Nj zu0z9d7V!)dzY;Hx;&T4yuGJK<-f*AoatUEPHmtEi=u{m1mEd2p@L2%Q={Q5h_rw*- zd*d0Q!|P8h=s-cGN=V>s%H2F4W{)X%4gzS7BgQc1xEl`tFI-^i2W{6*uagYn>HEXTF= zDqM&=Qy}?UjcxoVEGx9G$NZii-~VDNbT}a_XiV4_+aKeT28SBk28!_t8ca9!FEh6B zE3llXtgpgyR9R2MU(Hmn|F5M$4#Q|^7F>_zD6kc7#B!8aS7Mpf*0*6f3aoF(@=Ji$ zcjD2?^YG-PD!7+|Y0CHGYUM?ExpEcWro04~o7Ksw{1NPy`i94_{-(ZGgL(Zg=k7|f zID%@yB@NzX@8CB^G>+<;N4F zB^G>r0>|G@_IY$QYZmMvVU3yte_;8Q#%SSNZ*j&=&i`PkA1%!|?KRy6DcCK%JrC<$ zaD1|e&vej0E?KcSzaEZd3k&1XE~&+`!i+E;58_AjF&#S8!MF%Z2f}Ly_3y#EaH?sq zh3bHeU^lEsAbF5i&=VJ_A?l51(E)qCFTpFqqntIc+A&yucQRUddF}ap&y#S0%TERu zQ;-^W4NSrE!zhJ`8VN?DX#u)m>7)B)x{AGfEV+7yU4d;Z?@HoQjV*W>KwZi|1%waR~cmM0G;F4sRk|3|?_RUr-M z@8%k8h2;lP?U1(d+|F}*yhG*hhkK;C`q@~1Fx6atW5I!q1+of0i0ru+o~9b;hvk=8 zqa_v`=DE=GQFw#OAA;w#puTLstnhdW(sy?ao`@6bL~}CES006jE1!YwFTTpv@;c+F zgM4oo<`-Zaua-|4N9(7;GZe^iZY!+7^5d}9FJk%8SnHQ@+Re_ZaE9_~tS?4yV7Kr$ zC(N19te?jSuO7-X9Zo!%@#xH#aTuR^jdc#cbYCt`XJR=o42ebYN3a~%xwI{5G z_(Fq=OaFpcco^IGbSxuiKShhHW zxLnODu^g6sN+M)(y>*u(`2M&gv$V>r;7JN(R^}NO7SaG7Z5n(B+u!Sz z6}CAt7VZ-Jxc+3UJG|BN^g&JI`y9pfUsrgV0`0fdK9h^b_gGKTpFG#&Y&D60$D@@0 z#_~(J(ZW`p$o$s@%}#8ZkcMZf3a#*Z^Dfv4IzK>P_@p!^B0QEqlp)An~ydIhcUXw`u>cxJlm zP&=H{%DJQG&YrWe`~b1tpaVT8dr**|hx?ErCyrB%qYB*PVc8<xY~wd$ z86oRiv5b)QY+Q*Crhxj%pvDx~gq2u^%=#6)4%^oWKN{QkcD#jnIt9|94kIJm_`X=2MPE0)i&!)gFe0mM*d$i5RapGW?Y>!39b@StSzaW#Yj7oCi`FI$2$#|-9>k~MN zaIx_~EW0en_#m~u@bCYFoAju8FjOVTpWBPQ4xOOla#)@(u5?>C2^T3}h}{-94=PlB z=06`eq(E=+Uz}s50efa!#}?Qh^p+FP6{-R0z+K)7?pASWf4g{+nSbmn?=C8!H%CBI3*u93`!W)@zUh*Z|KuXYy!%kLc zZ!jvbtT09`IqaUpvI2WpUO1emn;aFxiOY%TIV?v>uJIuwsL2*b^_vAx;i=SbZQA<{ zCuN^ZGZk8&#MdgRFO3+1WeaNY38gGt+OgAT5;x)<{IK8clw>_2lrwiJ937v34Rp^2%ln=mlj8L@j_kY~+ z7U!P0hjK0+uG}X{fu1D&uv_@lD%PjwQ{>`92PTjt`@A<79~q%+cCz>uEJME9#M_UI zg&neU<_s(yuujgWK(>HCRD_f4Gb}x}&u9u%hh(3Q@;ZEmip#nFEU&|3R9xy`h1Ccq zgXv8Rg6r_iwr(HYglm*ZLCM|J{1o?|NlG%X&ffukns5ZO{`b& zj_3Cze{a{pkMKO@jX1TPi+}0)TWxv$|2+kns=`k=Px)6oM0qE!RQ?AqRF040M5eqO z-lUwa%>3sM5UN0&i8Hg@7VLwom=i5zj&S`d!W(hI_yU~O-sM-|WpQq2e1fHeHvcm$9kAYnYq8ycmZwEFufO9# zYYP5DLU?MVLj#O$0|oda;&BS3!{->=_<8ta;xQAy)7Zx6VHq*&d$G(pbNy`=+)sg? z#fz|8cuyzRvv|_UoSJFS9>-5$nRFYeBX01AuVTGV*LYrwXQ_Q&hj+2U6j>i5_&4s@p|iXG2dDGG zqJx`6&F}=}-ErQnW{YW{FJ7wRhk8E3^B}xh-BRChv*hdR|E(%PhWHVzJM@I-r|?eI;paTRfD@hE2Cek` z3Ql%pA7{}m`NQM;6qHbbqlE$HLF5^cqh7~?S3SRu%hd|j;tJ(DJVW^dyioa*GnoI& zRlye|h>J`IdXz-A9q8pb53g4B2jKO}hvS{fM;XsC?LSw-{L=|FUWJu7b6+=vt8owI z|KM`vw{fNN`<^#={xnI!aw_yNJ?eR8WV^+^J@>_%$ghY+yXa11n}3hz`*7-hZUY{` zxe4dw5(-ADf@bJwy${q1e<<7<{qV|))JTKus&kJ$K&aTIc z@dV{Z@G|8mj0?>O<(}O%-nWU9ytb!clWJffuI=JhI0$c7KE^oPjL=#yUg!CJoY}Q= zu-xPi8yy)&*T0i=LBKbm<9sSaODs48Pg5R^*C>xO&M{m3gBSnV^DlUZsh^Z1{|^dQ zXS)^d!rPT&V{|YSm=K9OapvD48;hXL}-+B2J>)< z@&M0=dp;6Zs{Fym(faAYPzn~Rgkg9aTNGUz;=$!O^)`3;t-|vTbRBva*C;>k`DxG3 z;&lhA>;H=s%s9w3SnK&U&uj1;mH!sb?C$En=lLVgpWq(d)%E`iNl;t3dl`4Bs=+<* zOyx|^`*`k%YgB$`&)Il=QY9QnK{g#o4`&279JscJ+oIF(2IaFnkM%qrSJ9r`g|qRr zS#FZn;AF8%_>O{Y*v{fMED6SIQol~g=97B8p1J#Rc>9L{m(+!N#E z`ma{-6bW)%M+<+H!g3s2ufTKgFbd?j|JvBbzr}JGT7Qq_FpZXG!8Ru?#ib7GmXjX#Yi6YoQTbm((q8~+l^9I)PuYj97KpWNe|sK6$)!7>M|+u|L#uc=UI zY~x4a1KH;-O?;BEjbDgmPFPpqB0M0aT$O?)4<0=Z4^i#MuCe5mJvI3w2`MT77bYkB>93lema@vBcSc zpN*rH@CFsnf8dd719#!_$a4LO1+jB^v8WQ78)usp9PY)B@;n$XSM`tcJPhwr@sk=I zUjMk|q9DDu+XZLf9?GNfH05!g&+|MHZ&UdfdAWQ-!mMKc(52Z zo82XRDJI8t9WIdy;Svizz*Cez@%)A7uW(IY_xFLr&SS)>AFZDb6q*9Nf}?PiTEP&! zQTcd$CLL@+1?k`v+%eB}@G4x$q)ZLt&4Pzayf_xknXe+7_0z<6UIRbieAVF3xRMpx zi%a|Sxvy98{cyF4AB)#3UxFtv0(Jwh2+j3BhZ32^e|rgX4Cx9fc(ZEoU_6Tkdzku9 z8QT>+=lKOJyTHa*ij%6~6$*B+f{tX!kp74>Zg7q|ve zF5nM`%4v9}x;VAOiJ?78|W1Bw`UrD?*1v1By(g7*33DdD0X4co?`M4DYQel~~jX#a$ zu(N&^*I+xRzBIP+%~%dg<7Dt11#(!~gdeaR1=c@eISQ<|;~qFpfpnWheKMA##CjB#!^rv!EJuO$Sy+w&>oK@ieayEE zFD4!%f%m`iO(dqkR=6F@thT-r4^jJg9_G|wmgd2|*e!fN0Jhh6xx7#NKAPnDB+2Fd zRPKP}++T^q@BdG7{g+u8_J}u;77UGrCz?veNGd$TNn1J)9%jTB@<%AS+zv4fHb0%W z@N>13PD%ctv$&sN5=Z&*;94w4K?ZSo_*`^0Z)}RbxSabR3a+O>4y#Tk;SDT@Re$3} zY76BCWHpwmR>%XA8nscxM}4p*l3ia~WQv;^*Q`%9C)%!(|I) zi3JyXo?>jSzx=)<1xx3+&v3klYm~cR#B)B?V6Nvrc)p6~dp-=;sCXe>c02F?3nvA8 z@jMDLk8nM{0Ou)Jc)r~8R9vL;ufeH>uD$DVrt;09lP+PFmv9FjeTO@fy^M=g1Fw31 z9ha#1TD)Aj4zE-GK%Ar?J08vAy)JH=kmb1pPCe3fIDyLtId{W3bl8sQ2{=pna-638 zAWm*q4J@TV`!UbU@YEu=!e>0Mz$;YzCC{~Zhl;;;G4p?l>d|%*dJJ(Z_zkaC{>yWN z=XeG8`6_=mJd^hA9Zzq(U9IoT3g&-tv0Gs&2?4X-4&g0$xr*QJd9LSs@EVoB00+mr z_N#EF^2155;Bn7S;v7}sSzMv~qUT!Aui_ahe+^!$oP3LdI#uwV=Z`#pg14yrFK`AU zX0P|VUqXk~d8025PH-b|C@v-*p4#R8f8!`9P(wZo&rp657pewojl-)MXSQyaHjN+T zxhI}Odu_t=V4R=o3r{>q7OwwiP*BU|R<34pLvfvP7{@cQ95&WBV>zs>Z^d%hS$1o;-T{wP@xjJ6J```9 z=sH-8<-{fn^Pf8)3gj@1mUwU?mcz#SWPB?wr9ie|nz4;vi{-Ggz8=d_WPKynH@THq z<_wEmf4BppKqgJJ#Dm+h%n9o|u}m84d06I%^}Sg3vGx5}E@sw?uw2Znt8jGr4zGXB zgC!KWg+IMwef_?%jK5-V=1S+~tlZ%gjf;i*I6O~q1M`@wFW2|?@f0TQC>oU;l)h6U zN9*9j?AGD>Nf=1MCVFUZv(LeG*q(@Hi`7wZm*>0jb``%L|49AlE|(8B<573I_I|-r zaO3CyI$h4Gc7!`lyWk0`!tr?ONiKe(=TkkOj#sGsv+)Mni!%f=hi<|ZcX9n^Aj5)Z zC^+dZ_u_FAK2f>l6+tjUxgQ>`JO-bjT#1J%KZlQ3{t6f0#rywk2U=ap_4_Qhg>CRW zH39?0G|=62cmke@?Jl|luU38;FIDxw$19XGr*f@Gs)8dZ*rt3Qo~e8%-lbfNN2(QW z#p%j>U&V2+@{hz*RJlHWPKWzNork!rzoF|Wdv=!6w5BP9(Ogz zpX?)BFo6WwN7m=#HOiCl2IUK}46)6xz_JUiFT=9Stgpbbi>$9oQXoTa3#MTia_eic z47v67xLEl{EVJ6iE3wRa>)Ws#71p<7IcltvcTymSl`WWu<*>897t3L3eLt2-XT1o^ z9I~#$9M_Frf@RX#_#;@38slW}7zJ`z*@R_S4kPQQv3{xbEOtwM!}D05s(&5L8yYzi zR+|^EH7Z|D&0k@ev_%q^@4q>ZIiP3p1)eX$1!|UGhO0~6te=Xr?{VjWC3xH2?vK;& z;Y=0(2hSL1-sB?Zze&^h(<=!HHcL*8cjH=BVKtsS)~)bA#`!^Xaml=(cZg}0P-j?&4$7gx`7Bk&q7W(%Vw7QAU} zJKSk{W1O*|fiA8fbT_<&2JJ1=30Q{AHaODrsd$cxm*9oUWAGZ~@r{=C(}D9F3nEX# zn^lF2aSa`^m(%<3hViaL58!3&b9*g#3y;PF!`69&0v@j7U9Y8s;%NKh!7vJPRl?=C zP`L^xl;6R#Cb$l)_x!Qvjd-2P{}R{HUeZ3lPoKd%7%7OE9{0zi%iRhJ@FyyM4z5)l zx*Zozboq0QOK4E;fIj!)Uq=qdKV0Rv6pU02Y{j3d74Cf+kInzSUX|%MWnDeCK_y=O|G5UGYxk9OE^n1Lt`0 za&b~sxPXGR3)~h~;D8R;NwokkQ}HTXtNgIB9rEwI_%_c!K~6Ql~25Z>;HOHa4HF6J7lwsSsx2uP~iD)yj|75A5Xi; zb@)L%UwNtVka#pFHr>Gd(+S^r6}I4N)xeK<*2QiGzu;W8i#pBZm5uTcoKU_PZ?16l zrzA}Qx8va~ec4NR)${9kmug@w?s$o7unrfh75T_1`BT_|E4+lH=jpgYHE;v2Q?A5( zms&LESnX^)kq&a6LGhpl*Qod^oHws?uqkPVc;8#NX;cYaamQ({!5ln9xhFnftzZwONCvN1X(wtiV#M7p`{C{z^ za>}it`TH+JB-iJ`Q9!nynHBuy#Tz`wZ{ymb>hFd#lGnKvq*G9=yr=QfSTsT-z4&RKOK^p% zKL*!a@7f=acPO8alTy&b?6b$cgr_|}i*s&p4Zet1s!8}A-Zs<4w_%wR(ZY$&^Y6ED z{Og22Nhnbj{>9VOaem+|zJvmE&@f|oha^s_coN^H;*a3W`JIEhSTutF;3+q|4#j6P z|5vMm-DWp+y5~Lc7L}igFJy)GI6nekpgMFOo~(Q)&YJBya8HtgLRGK;U#zy^O?)Zl z+7xc_Z}@7}VB&Uu6ifLyJcrA(9rEE=F4xv4drqG26`YATsS2eyaffT*9GtCOj`Ni- z#AV8titlvwuf*%!%lj$8brkGW6>h>eu|;-BpTRTcxCUOp*QhQ22B)hP{D7}j@wRtR zA2(+RWX=@g;dgePTXjBi!0!&R#O2Y9-Q z2Xi#_;$6zqwyWs&Y;P-8q4^y{qf*l z3LdAx9#pU6nfJO5t;Nfg>+nY95Ab~IXP5yF?u-sPyFtx7@9r#DpIFd}f*u^Dwn7`c zL%AK68#Ej5=()4!Y@B+(%RdmOFLFK@XY)LS?UyFwK|TcwRfU0glkyKY%6H-I%J)kCL!Ei`ml`$r9R<%bgtX5;e6!14Ov;6B1?_O2+JcUF zy>e$f=K+_$Ki;I=9WSSS?%BikPr)x>x%&tUuA$&13hY5wjb)3Yg|C^x(U3_=JXr3< zpZ8pY(-yn>tMGi~*KzG)_3r<*6s%Gm_ybR6h-?RT;nl?LB+Ho_4WW(q^xWHXU%W-N zcPO5-B7pebe2m}3LrsGz^CH`Lb1V&7x4^PO>vSv~vfcxqjfYSm9UOp@QeYDbD3FJ4 z)<m(kn zJRL7oz78)_o{4LfZ^rVB%eHqbmPcIHv*&UA%QG!oFoy(r%2A1qIjt^46RY!Cb77*k*q%JBOn#3_&t+-7X!x8n~~11}ldcrD(b;#-Yv{3raW zizkD9?uiO)LPz{L3HD5NjIoU$i@zprJ9vq)jZeYfxD^Bs8r%3ocuQlPzy7~#3T(o9 zytOfbU0`hE@q2^dC*rn)J&kQV7yqj2pJ8m{XW`#%TweX&XbNmXCH|9y7zMHmo-?-b z7qGmxwSEczZ5t$ii?NMw#qt!<`X?-psAOUO$AfwbUb?c#^*0{0pg>+MM@u|N$8r;Gy$6CO(@6m@ZI_XEDztUFT&+U@~NLouv_?vX{`S$m^PYkjT*<3BdpueBr~8EB&z?)S4(K!8a z*WqzESNS|FBNi?3VB-DEKRt;ili(J9gd6KgbniJlCu4+iNs>8psmhmKb_bRf+Fh`C zLDLRA;`y;81%;}IPvPOp&*2K?8smKF03)==!lv;|&+TvxTWl{@N8+8>-jpWKr=VJ` zV6x|n@j4Zsf>*0a_W)k{gd6fDIO{(13sQ9PJ)DN^3je_~os&V%BKFxb*FaBWJIQYL z;^KhB+eR!Gj1IE!Dlh?lwG)>se^X_=PYG4l>Jk^l3gHq4kMahS>UKJPF(Lz%*kUzZT1oTVIdu zq)*DJ^F|8XQr}RC^{l^5#buUPW4*;sdR~sJSz#KD%8BW7JVA}n*Uqe;ly51Rp%S*@ zEy~+*&eLwlfAjp8=YMda%8x(D2rhT^cf-Y@W&Ly@y|Ezjo}M%D1l7Pkc#HDBIO7?& zg07x(Ja@-bnW#M!av%r=ZOoea@xYRQ>y9hQ9_p4sqz6ZixOD-4fo-v2lT zONSEV%Lh6xP%D%OKa)akoPMJEs8_rYt>9|^XPn@h#1$$GV-NEy|c%91ciifOl9n8U_lzZaUYEtIn z*OmKJG5_>F??-}L`0hKb_xXcNGHGB9N#Vzc&gC8s$BheAeVG%dVcns#Jddej{#B?R zk0)W){qCJxi}5ZMe*|Ye@3!~}yn=jtrmM%bI9)nKxB4t*#BiqZC3ur+e?^jlv;|$l z4^m5ozwwG1w}Rjy{tEb#b2HDodv1kCsr)v0-G5yDcDQ_@yBsG6QBa}^CgN-9P)F0_ zxp*PA*Y8z$8SZ4_TXCI=w_U;(s`^LZT`GPqUd{UYMfH!YeW=_M7buUywHsWA&-7fX%>0i9 z<0#mmDxBweBHpgz7kRz}r+w^Jc!lSyaFL2n$JKP0Rmr1#b`Y!|mrowvY0{Kvn4Cxf{-Y(5+xNmh(ik#DkNtoCmB= z!Ezq3J`Kxxz`6v>dB9wM`6)OG{!sf5R#mZ}O$)co7c$ z!_YRc9#<-Vgy$=Nf~%E36En%$(17g1wCc#Vy_WdpBnh$#N$4j9*d`3XGOMi%u*_QP zBXGc^+?)TC`sW$j_(Z%n@m3~2&)CNA#Yvgfw%~pW%8lfvaS?V4UqOlW<#@rwSd-7d zEK&J#`CW}OKI4%~O7vni>#@jDn|#LhG3K8n*n$KJJ(RoQJk`O2@o*LIgQqCx;|-s? z_6FiD%7bw5g^M5a81pYp6%><@r91-HY;qM&!5fs%z`BEHdGWEH$K#AIU3=#zy@E-& zP$gW96JNUuQ}A%*t2|Hld>yV-`8VO3Z+UM#10l~3lJ8P5YqMLyhj^Xxr#O`gb{B0j z4OoBU`3KKG;*F~QFF5@>0K8NAaBaE%9i}oR`617bI?MT=-@c__zN+vvo>K1`T!E{VU-JBl=hyHSmH#H*@r!Hk9i02CIK2Mw zD=du#l+mG&J#WOL!wOOSOFT>YTfAw9TftV(+dcn^i+&?NTt6$^X$z!%{5PH~3E>h8 zf+w0f1y57)G(1na6<(*@#&bL4X#K3PJq2mMyA|$-C;aK0jf<+>9ndhGr#uC3Q~6hU zp6>ZNocK%q{r{$@pmB?D!G(Xh4&08{DbK~*l;?Y1^HF8Iq!_y-rN3h`x4-3-f#DO$M0!I{j7@X018s@}#n-WMN2+&X_5^FMWx zD>#e_t5PrNJJi!DCg2~!BMaEH&<3Sac4p=Y2 zdJa5--NJ8NVm$|zskn^jTiA7g{r_H*0=`%cPho}KX;m(_4LB{lNte|yKb~sp-S7kz zPxrhBu2S(#yghC)Uo5zRf+AI+5|2`zjjNRJ@_eu7`?1WSXo&}lu>SsoD#@34bp4G7 zODIUFGvOn+Mm6vlUa7ncuTp**zpDH!eqH%_yhgbO{|86wXO^#|V694c1+Px9&;F*^>Z%&hyu6NH++KiaXfHREbMWdBsn!t!?H!3i9^4N zWdp36U%($Nu+1NeWyr(7l2QL={CX9y|82tC6v!6Y2KMAyAX{ub63Z^I`FCO2LK}aS zYk_Q`b^i)}UJ!Hb2|IW>mR)51B3_lGz&7{~1u}%Tfx=7ZF_SKr2IOk>nHnKEll_IW z9&xv1*-vvhR+IEV&pmKPi!QV#ODyPxlev$&21+Q{oaqwA;2c(9p9SBHi_{9A!6UJK z7W@USQ1KSadFiF<_rVKQ{LJO-|D|-mJPZzIlCVj2=xIC}+h@U_<9RCH;u)TD(O}PT zdwATAH>nkzg}1BtjX0s|FMo#lSEvfUAYr)j?$6@A-H7brIn#4HT&eOq;tAF6?+M39 z{ywg~;v@wlRlx{6iwYTLi>Bf!ow@{@JLsYy3 zZ)XELn|SgD3P!1fr|?4M&+szkv=vc@s2?`b%5xjfZShhzAX<2xfj7DKlEKjwjNH#9 z9E)pRLU0MLQ(lNm5-xu+-oQ~4E%9I}-tutc&kF|c8Qb^=SdN-#NydW>6v!;M37=w_ z<<_5LndR1BVwvUEo3YGt>+i74a_b+kOj7F~u}so%k>~&0DUexe6Mn@qORay$a+q5G ziDlAS@4_-^tsC%Y<@oc_QDfuHupD)=F#ox4r(lz+&=SieiI#ZK8p|ZJ-V@6tv(Cga z$*kL9nN!y7u^a`~ov=)D7CHaNg9HUK>7s=%)y6XEtoO$@YXAwt6c8+LhEq-oQo?c z7_BN??s+PnqvF@#L|3=M>+wkCn?29+dgR8LKhpVw$>Kop``u^ZSUYbdV3ggk$GS1~# zMsx?oa`pV;(x!ehY|m`J?DOv^&>h(3`DZ*_b#Mn>`k1*~2k~Iv7kIgSfZKqsI8!+X zk5ul7_e#=$Jr|!!K_0f}{%dd%-jB_e7b1`1G8O*-&r@!|b!r8vFE(`x&*_-=U%4Ld zNkR2N&U@p`?#>-NCp>q>LsWhaF6`;*_rz(ByA2%mBJ0nhpqtskYo&rpcpRr5;u?6` z^9s)|;^EY9ZQA=57pVGMJ^%C~`+qVO?5o>-YB=+$6G=zB7egE^@nAnJyU4l=mR)4s z4a+XF&cPMR-LdR48$UQnflMM>&=JQKh+J`Bq)3lC#fI2+3@3vW{KdMvvv zjPvcgLB$oZaME=(9k^X>v7DHmz;o0rUherhT&3bQcuKAvQC?)=70RzGGyi$nqzc4u z<8`XS`#80iYj6Y3QvM8Y>FwfQ;a$q#dEVwM=U;w4fP&OMu7MpmL-|jfr~EH2R!(`T zsna~S#APZ!qtUW{Iu~*a;13ECs=_Y3PC526ukF+ddf?T{r{dgvx55(7V?3APLh_^a(}8m- zC{_(j!X?TV;|a=B@D$~%aJBMuT&sKo-l1G69-yxOv!enAR2IJJ#q-^G3cDm);=z18 zUwHwp#vQ`i@!(BkoBtM;U2I*4*FDbbe|xd`J1lSs|Kebhb8IC~Hr1zIQt>A=7#{b` znL~{23VLIiL)LxqF5Hp=ITMZ+Cso2&3U*_k?r#!qHMR}R#>=mC4bH(m$!~7*R~p;= zSFlV{>(_7z-rMAF$4M!$3BOVxv)uZ3EVJ7BPdp#n%XM~bWE(#K%cQhE2+O3k?uj=m z=hia+3YNKqJ|v_+>D&+h@|5!cJm_iX0$jG-`3S799fPo2>Kl&6`r0w!Ql9_HB(mq~ z5m)k?mmGEpcB}kE`XT_E5Wpd{v$2iFl-nUxW(|clnp$>Sx@EX%Vhb zPOhV1ohtYPZ&dEGiW>~&iKkh3-$L4qFFz~7_!8Z!3`8h52J;z1;x@s z>szpN(0Ue@4qD%VrGwUYVLb=##%|$bJ=o2GWJ<6=CCHH1;M^l@gIqp6uf~Nc{vU}C za`|uL!OyywMMj#7!qyy2y?<3$I z%KKvJpe#xDLC~3ku__@O>mfV>~Nc*!KCgLE~`yWdshQ zphzVgf@i$YC74MoGUV6eIdt%6Rv>;4&l})ao(Li=K}yDvWuc69`wSp3#{{SA&yfZBYgJj z%s(lx38f?qQVF*h+xRS8M0_{Xz>CH<{xY6*scUZ)K92l$CV!i;&Hp(`K`99>OhWrN zBHM&cSoXPf0?$zS#~IuBFf4PzdIS!4QCPtDCE>JbE}lG95^CH{=X7J+z;*aT;`XoM z%ZzROX&hshF$KaQ{oL5bzr?ajtv6$tavoWek11Z57DlYY}_v+uM;!?j-*H7{o z;Wm{Z4ZPqr@REv41GTyV>c6VuQvWBMG0cu=Ecn&)?>J%N%zxf&M#1C}u0rr1ZmUmp zZie+PNyBd8)QjDarUc!t<}R8Qj7*I#My*x8bZ~%cPtO0%g94QxTX=-m;2;&31}3@& z!upd{TmhBU;?lrC+dx>Uc~Ge0(t)GA`h!(m>R)K;N9(5p6)Hg* zxXf$d3Kf?I7Mlj5PB#yhs<_mD)T{rvic9^Eqxxq3bYP=OkOsc+8u&`ZrGZv!n@-9M z?3Vh5y|5m^y;WT59~suS>!$-nDnUAMjMu=iDlQFN5;kC0**ut{;!^)gum064F7+Rl z`i<+S1Jx=)8hFBM;3*ZC20p|3F#XE&H&`FGTU32%e=APvA-cE&uVy*!i`Xc6_4|{m zAS>KwUDF0TVz<;c?1y!GT~u7^AMe#4zRukLMvc@roa8ldir2t3UIQ~!T(;;2ul`Lc zE**HrtG{BM8-Myx-|(W>z{_3(-{Ym~%=nY%db~`?PlO(&WwaS+*9^kcCpyIN@$s@c52dM;UV4~N+WEGbNF81nQ zs^U_AkypP;#i^fcSmHJCh)R$KKJXgYpyJYjPrdq|tGLu}@pjV@O~-CYa;l|34`~~f zAPo%k8Yon8>A+E5{lO|O^)K}5SExAipHr>Zz!fS%8d&T#uvEpR1CM(3A6Idy|FKtp zqlz>CIn{a%e5DekfmZJ{9l{Lk7EZNTkKo=aF7=P}>KD1V9Dkf@y#|hT3A`1TQ?1v) z6cv~HS9f`i6EC=pk%x6UdPUj`kWDqTOZUE(t$6%`kSM;Sw9Kic@6yFHPH6mrbC#8-BRDs0qYUmSH-0RL%sUN zVcf2tgcH05PV^eM%4=YnipvOG>(#$r#iavJVtuNAR-9Dl{^u#slcYv9AS+mj^%i#e zEov~EVUTnGD=J@B_#^J2+W*D#Z#Y?~68@rK`ABy$YQUpTbxwV+X$N=1ZmDnB9qSHW z%Ig5>Ko9depq0v(4(7kd{MTE2m`ac>KHO{YNZg|=5frl4HoR~dj5Ajz!gt4uhvDKn z=d}^+Y1qtO??tmm=2Ck(-rtz(K*1Img0FNYJ z9#}~JQoKR6_aqMJK#qym;?1--+4!9#1?wruFa?|NQnp}=@$Wc?26Byq_j$yU6MX@Z ztnd)Lo(@eg@zZg^dkM}NQHO58g}BOiIoA2fZzST zV04t94DO;p-YR9caNw6ga9V2gQ?z^X2idc*e0fZ*>A(Yc=6JWo8DB+@YNwj`QCPl; z#SZzGU(=!5MEEBd>0r0b{5|2f&Ow49Y9rr&dp-q)^f=u#P>1E?bUloleZ!FcoCx0q zD-FDX4EcGuWL+XyW*WGO6OBCEwIj0k@5~WC?N(;u$76Z>{yeh* zH(+`Dy`599;L&#{f(<7B+CQSV<&2W+pLF0Q3gj~xcAss>@?o+(Qz4&Ckw>%T#usDx zLV_&gkZ zcD|e-%4A`m&%{9*{}|tcYdC5cknpJa3=ePC)x?_xU*TF6@6s*CgzM6{%NF7A`M*7N zenx?ODAXQi1^ZLsW4?mP4B=!fpLmo$$fSK9^AXBm9jg=v2k=qdLztu{ekhiA$z+*$ zEq|q!FC?-f(&ZpN|E-5;1_fCh7P+Rv3t0ZvTWCC~C$pRmmKZ;WZhn zmQTyu5q=++x9%JinEEXa;rq|zBb7T%!N5aeO->}2;^D2LAJLR8{1EFccrK5l;5V*r zW>TKoKNkIwi4oW{;8QhNpUMa4Ga^4G!awgzdynRG{K==;CYuhV51@xXCBl!#OTx1_ zi*tXriI*PAtfm1wq#FnGEm+0wFl=)SPf*%(YBsx|6ZaGa++JxM{nD){wy z-ksLAb1==Uu>6Fkv$*we&J!Iv%TwEMpKrk(RsAbRFzGTn2b)bi|3p^EpY|wSmDg?4ALj~UW*ELX$Tcw6tzL8Xb` zIXV{p@Y*tVs?3q@V`Aa&qAsI?c$S#<>@44a<%itMO#MVDyXJKk2V!D$MPl>;`X>L#qzu8n@s#pEWZeC56kp2>KD3u#DQ3TwtS|^<yHJ%|lr zgv0Cq3<~5|y={-zWBJi-c}t~iQM2*vbKYdK&TR1!nD=fqo+qYadB5Lqvw|8dZ#XP6 zL;lSKM)(=G0oR|~cq)&s|J}}uh2PV)+N@v=mbYLmG#x0CHx#_YPfoRtI#h?{JDqY` zMLvz$C*K!TZaVM;mhb3e!2al()|8o$Mh@fn?Gj2 z__2NZj474UykxK3-2AffrQ`dT_8l{(^ynaaiu~{3;xUshm~`-%e!cpXj_cKDd}&#q zKKcFo<>r?49+%g<-`Fv(wW$rbR~_}-3^duspxd+LBFH96_v|K4o=|GC-T|3hcPnK1XY-%}3F7@yy(-+(ct zeaDU)mpf+M*xb2${E>24=9t{le*N-$^&i_iFMq(e@%b__=Puls+CMq2&wzeq{Ri~z zUDl^}+4#J1cFMY0`(HOIzv;~Sulai3cKxr}z532QGCwu3M_KQ_94F)R`;F<}t5;s` z-0?e8PRPvfJ8s)W@iPkvb#nf!ff zQAYor*=?^XPB?vH|&hsML4-_%Y$=nxo^t zt?}S~;XwTlJEC`9aQ5lL`t>_IyLe>wMdw~TcJ5E#r;eC=?5>pd|NY?T-S7WCHT#m9 zoA^KH_sI>C|5JtDa+v%NE9fnU;Qw#_|5Liv#YR;`;dYs=0fX)Wg*G5ygFwVA^LuB8 zpTwUO#RoyGK#T@79!sWo@A@Fc}JNAe%ipscd15GZstV>T()qvMReZKyD&Vi=@zHrZ!76EvK`# zXdD4;7=V|Q!&u<)LslUs6xUt zmC&I1CS`D-{lGx0Mm><&K2AVxbO(;3uVJw7TkdnNg#--nESY)#3AC#aVCzMZWEg~? z1Q%}QN%Ub6aA>7KcXMr(7Gom-YgEuwhraM)Jh6I}?vrDvC!VO)eRdknS(({Iin^=r zR$M_(#48dN48uOOxGE5eVP-@3!x^-ypa@}}Z+(COZ@5?a6c!Gm4yiAV5fD%1Q>v72 zJPaaQFu`C)_nkop3VsmkAcWlttS~CFZr)k+Q4bIj7sm5pbu2bkc2*%0u7spQE8%g? z6!oxfYD__l1)1W(Ej)(~t;(!CvOWfP>m2&FUEGyG_PuvNo5?lR6IgzF`Pb z>tfx#oXYf2l1SX6N6|bt=R6uNP-2Y+zKkqr6KId!OIOj}F5t*000uBbN1>F^vL`#h z8TA2*R?v290(vd*B5V})EYJy1ZwX{trOZ&cqXTQowPtW$F%X-3?jm}tD0C1o0ktIb z0`SB;-N6g!1^4tdwA@{|fKIrxtMf0Gm4PHQfi)~5P&7zV- zVRXrkGK&^M%=>z=d{zkeF>E}5FS8nk0R@Z7_O<{1}jO9?8#LnIqsf2E`|p; zP~!m*3iKJpS;-sq%c}>jj^9_T2U!3`pTGq%wi2#_8^l{pr@Q^8tX0G#0qn1QEG*`c zPK3vSf`t1fUvdpyi~-HT-24Bax$c`$w7?zy8*Ov9en*eF-Ph1F%Y-t_P+wVC(?ELB z1e@(HUPIfr)Xjp-Bp+jjG!H#tPtWUvp*yuY|MJk@Khdl2x>JATTHN{md?B}aox9$j zpFef;cKGM-rd-o`*E*12&=UU?iXU++2J#&(@t6PqUU4RVAODu4>o@n_Kz?x!UcZW8 zJFmK5;dOfN)m+p1sm)E(;ERY6H+?WaH#dCUJwBLU+|qtyO4E^jLmLP4AMg7gW|KYr diff --git a/artifacts/test_program_methods/claimer.bin b/artifacts/test_program_methods/claimer.bin index cea547018cb632ef64aa14d3dd89b07d07d7ad44..7433f9aca083e7110a3ee0afab07164777697bf5 100644 GIT binary patch delta 99248 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 z
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%0DE<>Uu)(p+<{O) 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 Z1E|($Lrn>kVoX#r@!6alX?) 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 diff --git a/artifacts/test_program_methods/data_changer.bin b/artifacts/test_program_methods/data_changer.bin index 448609e4da67977e2fce3fdb5be279e0b243c76d..0184321fc8756a6f67dab253a6a0c91c82fd927a 100644 GIT binary patch delta 99554 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 delta 98932 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 P+7ds{OlR|{+vooR@ttg8 diff --git a/artifacts/test_program_methods/extra_output.bin b/artifacts/test_program_methods/extra_output.bin index 915a50eb4373cb795e8b1798d2ddf2b282580890..5875ebf4e0ae3b4d8aa8fe263267ac58b651580a 100644 GIT binary patch delta 98435 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 delta 98129 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 YO4u_!4=Ba9a}P6vSNZl?HmtMi07&1@oB#j- diff --git a/artifacts/test_program_methods/missing_output.bin b/artifacts/test_program_methods/missing_output.bin index 00c1689296f132f8d4a715041684b22ac429c6ca..efe1c4d3b4f3172639d0f79bd82a6d8f743a9370 100644 GIT binary patch delta 99987 zcma%k3tUvy_W#*?<_u3289`LUfdPEsD@A;u4ho1$if>a>5bzZWDn75tC=XG|(5-GV zD>5`qDh+I`tUF$XuxtIS%&hE2spT!}(#^~ang4g62Mpfs@BcfW&taeMT5G@7T6^us zIirpL47~DNU}-SzKVnx%XYbQ{Ez%%KlGY91HF`l}a3qz)ErTNYNfJR~=}RTc$S~zj z-Y!YvHoEb%PEjfAN|$;4s zi1p~w)dMX+6=zwp{%k+Pa=KLY`NnKIK^Z!hElF+6a=he743k)q=^G~dNea*CCvl6& zZGWDn1Y5~BELZtk7Tg=p=YsnsKsH5@Rpo5^%*boCR7lwk-F|9aW-4gU-EU3H0d0OG z8{)l)%wy%=W65lG(|b6X!NPsUk|`|9XE>S2j^KG5Yw+n!7z_68O-fl3{_bSC_`8FZ z<8Lv$fWL+8u5UlGh4pCD)1$%VLZ9>4tmfy9tho7kJv-I>yoTLueqP0b+Uj|8SW@%z zGPbVyc_};6{Je-=X@1UNp6&F!X>3UI^E|e=`FRd2Ykr=^>YAUYv%AgDQ&4Tu^9sxQbB^s}cJ9wP&i7ex z;GdRet7Ex=14R!4l^!U68z z#Ar52MxLYiNi3@m?MCMB4qMi{R1j=O5DSKweI!YY_4-z zux_3DnY}|%loOKPlEPJs?87dGb?g&m_8#E>C){3UIkc^yGvrbmVe47d!Rnv^_t7>{ zmB}m{HI}`R)kjQy^ar(*Mc)aI2v}SVX-P4%WQSs^Vi35@ro?7BF&eTZJNZw#1HV-dW!zT3b~N5+uv+3m>Q0eOGI|2O!9sq-6_)jh4tjWEez+gl>k#k>*o zg^lfsW3*v6yLWGM-Ruh`j)!u+$KPeaJ%*FF*{mJ|i7zYZahBX?DLp3;$`17GM|!Xe zJ!6K-s%8?6F=&k0!=nw8a|~wF8NwR~yh|FQb~Eue;a!T)q$>2_ecfm{3+fZv+@ems zU}&3Li)`PpX??74;B|e5de}r8ox9noKA|3p*E!!|^?foul(ySG;|*Pig=O_^*WP7D zAuSczDTcsnGT+`aLTtwTKBPms{be69 z3gDjbT*<^!MeR~Dv-chxXiqXk#7Wl<9Q(Ifj??@~n!+yheu>&ouys*bIlRisqsEAq z*j1-jyZk9D={tvf$y3^spxymErcdd}Bx#Y9zd}`E?T==YjhG8%wB96jWCXl1OEumv zW>d-oy!^%HB3W`Ipc92PRFyYuXLI{Sd*q994NtMMexco!=lp$(peVI06S{=ipjADF z`BnA(ULZtfb;oCzuvhOfN5RxAerw=`i zE}UR6V3U<)nZPo*8|DAcN{vzdt9!w0K{2+F5Qkohoq|explo49oxWqQ5gj$st zV*4mRVmrCEMZRN*c#p8X)1g4Df7My-B6FrhS>SZ{t�%44lp^7Y>TK6DsDNJZ&ru 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 delta 98806 zcma&P30zdw`#*lqnT17EWB^eS2L=!o5p%%>aa2H5TuM|l7Z6Y^R9w?EXOzW_3O(wf zveH5`HN#NHN^45N4UNjm%F0U1Pg&t7D=TFF?{gOz{OIrhy|34ubKlSNob7p@^PF?f zy%#S16~`bz5f;@(qgS%@#_I~UuJQUccC_(&FT37&{R#{6 z)AE+Hl*a3wY+2*=3v5s0^>ge}<8>MHG--LavVM)%n^|t-_0z1Z@w$YaZoFR4ZZ}>R zvnYS9oPx@9|5JnYZM=REo1Bn;JCiUL0!>J9KZ3(~tSIyLX-2haTB#`SwdS-PqP+dhX%j0% zf%}>houa_K&1towz&*`rS44rYG^f>x@^vVI*OqSkjSU*t9V}ma(N;LWkp^R zzap$?f1I5T>D10?@(x8=PDpx7GFK_{oz0!vc0X?N?&)_A=G!JiXe&Wy$fPvF`c`FP zCkG993T+cL8Rf1kWj)D!!^Tg0^KN}AigC6OorYUiD#}T2loP%)U$T?`rMoNE=>cCj z#!4gG2Gla+ds18+xE^b7IEG^suRZk+I~Ey7jk-2z76gYN{tFLhS1yv~^&Fj48O zTPKT(nKuHdP?oGv`6XYBl*JTvU zw7p9Y(udV_iR=Hd(⪤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 delta 99100 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 diff --git a/artifacts/test_program_methods/nonce_changer.bin b/artifacts/test_program_methods/nonce_changer.bin index 0e9b5a1f77e1d7b0c87325fa9b41b195fb34a9ff..744638475212d31cf5ed6b9fdd55bb365ef2fc64 100644 GIT binary patch delta 99101 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 Ef6X1$J^%m! delta 98034 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 bVU=cDv1j@%pcEV9US1a;R8 diff --git a/artifacts/test_program_methods/noop.bin b/artifacts/test_program_methods/noop.bin index 0c64397d8b504ee84eeb96ccdaae99ac53ff950f..f1cf257fc203b1c73381fcda79aced77e8d1063f 100644 GIT binary patch delta 98964 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 delta 97648 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 b`dsC$9oWU8iJy0#eB$l3?Z0I8>c{^9<6Rf& delta 97279 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 K?c475OaDK8MVadW diff --git a/artifacts/test_program_methods/minter.bin b/artifacts/test_program_methods/minter.bin index df81100720b2b4dfc60e94c933418118f0de4e74..47bede1f683a595ced8236ecc278f514c6733cf0 100644 GIT binary patch delta 99401 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