diff --git a/Cargo.lock b/Cargo.lock index 8d2d70a8..1cdebfb7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -170,7 +170,7 @@ dependencies = [ "arrayref", "borsh", "solana-program", - "spl-token 3.1.1", + "spl-token 3.2.0", "thiserror", "uint 0.8.5", ] diff --git a/governance/program/src/instruction.rs b/governance/program/src/instruction.rs index baf514bb..7e78dc81 100644 --- a/governance/program/src/instruction.rs +++ b/governance/program/src/instruction.rs @@ -50,7 +50,7 @@ pub enum GovernanceInstruction { /// 5. `[]` System /// 6. `[]` SPL Token /// 7. `[]` Sysvar Rent - /// 8. `[]` Realm custodian - optional + /// 9. `[]` Council Token Mint - optional /// 10. `[writable]` Council Token Holding account - optional unless council is used. PDA seeds: ['governance',realm,council_mint] /// The account will be created with the Realm PDA as its owner @@ -109,10 +109,11 @@ pub enum GovernanceInstruction { /// /// 0. `[]` Realm account the created Governance belongs to /// 1. `[writable]` Account Governance account. PDA seeds: ['account-governance', realm, governed_account] - /// 2. `[]` Account governed by this Governance account - /// 3. `[signer]` Payer - /// 4. `[]` System program - /// 5. `[]` Sysvar Rent + /// 2. `[]` Account governed by this Governance + /// 3. `[]` Governing TokenOwnerRecord account + /// 4. `[signer]` Payer + /// 5. `[]` System program + /// 6. `[]` Sysvar Rent CreateAccountGovernance { /// Governance config #[allow(dead_code)] @@ -126,10 +127,11 @@ pub enum GovernanceInstruction { /// 2. `[]` Program governed by this Governance account /// 3. `[writable]` Program Data account of the Program governed by this Governance account /// 4. `[signer]` Current Upgrade Authority account of the Program governed by this Governance account - /// 5. `[signer]` Payer - /// 6. `[]` bpf_upgradeable_loader program - /// 7. `[]` System program - /// 8. `[]` Sysvar Rent + /// 5. `[]` Governing TokenOwnerRecord account + /// 6. `[signer]` Payer + /// 7. `[]` bpf_upgradeable_loader program + /// 8. `[]` System program + /// 9. `[]` Sysvar Rent CreateProgramGovernance { /// Governance config #[allow(dead_code)] @@ -310,10 +312,11 @@ pub enum GovernanceInstruction { /// 1. `[writable]` Mint Governance account. PDA seeds: ['mint-governance', realm, governed_mint] /// 2. `[writable]` Mint governed by this Governance account /// 3. `[signer]` Current Mint Authority - /// 4. `[signer]` Payer - /// 5. `[]` SPL Token program - /// 6. `[]` System program - /// 7. `[]` Sysvar Rent + /// 4. `[]` Governing TokenOwnerRecord account + /// 5. `[signer]` Payer + /// 6. `[]` SPL Token program + /// 7. `[]` System program + /// 8. `[]` Sysvar Rent CreateMintGovernance { #[allow(dead_code)] /// Governance config @@ -331,11 +334,12 @@ pub enum GovernanceInstruction { /// 0. `[]` Realm account the created Governance belongs to /// 1. `[writable]` Token Governance account. PDA seeds: ['token-governance', realm, governed_token] /// 2. `[writable]` Token account governed by this Governance account - /// 3. `[signer]` Current Token account owner - /// 4. `[signer]` Payer - /// 5. `[]` SPL Token program - /// 6. `[]` System program - /// 7. `[]` Sysvar Rent + /// 3. `[signer]` Current Token account + /// 4. `[]` Governing TokenOwnerRecord account + /// 5. `[signer]` Payer + /// 6. `[]` SPL Token program + /// 7. `[]` System program + /// 8. `[]` Sysvar Rent CreateTokenGovernance { #[allow(dead_code)] /// Governance config @@ -383,7 +387,7 @@ pub enum GovernanceInstruction { /// Sets realm config /// 0. `[writable]` Realm account /// 1. `[signer]` Realm authority - /// 2. `[]` Realm custodian - optional + /// 3. `[]` Council Token Mint - optional /// Note: In the current version it's only possible to remove council mint (set it to None) /// After setting council to None it won't be possible to withdraw the tokens from the Realm any longer @@ -405,10 +409,10 @@ pub fn create_realm( realm_authority: &Pubkey, community_token_mint: &Pubkey, payer: &Pubkey, - realm_custodian: Option, council_token_mint: Option, // Args name: String, + min_community_tokens_to_create_governance: u64, community_mint_max_vote_weight_source: MintMaxVoteWeightSource, ) -> Instruction { let realm_address = get_realm_address(program_id, &name); @@ -426,13 +430,6 @@ pub fn create_realm( AccountMeta::new_readonly(sysvar::rent::id(), false), ]; - let use_custodian = if let Some(realm_custodian) = realm_custodian { - accounts.push(AccountMeta::new_readonly(realm_custodian, false)); - true - } else { - false - }; - let use_council_mint = if let Some(council_token_mint) = council_token_mint { let council_token_holding_address = get_governing_token_holding_address(program_id, &realm_address, &council_token_mint); @@ -447,7 +444,7 @@ pub fn create_realm( let instruction = GovernanceInstruction::CreateRealm { config_args: RealmConfigArgs { use_council_mint, - use_custodian, + min_community_tokens_to_create_governance, community_mint_max_vote_weight_source, }, name, @@ -582,6 +579,7 @@ pub fn create_account_governance( // Accounts realm: &Pubkey, governed_account: &Pubkey, + token_owner_record: &Pubkey, payer: &Pubkey, // Args config: GovernanceConfig, @@ -593,6 +591,7 @@ pub fn create_account_governance( AccountMeta::new_readonly(*realm, false), AccountMeta::new(account_governance_address, false), AccountMeta::new_readonly(*governed_account, false), + AccountMeta::new_readonly(*token_owner_record, false), AccountMeta::new_readonly(*payer, true), AccountMeta::new_readonly(system_program::id(), false), AccountMeta::new_readonly(sysvar::rent::id(), false), @@ -608,12 +607,14 @@ pub fn create_account_governance( } /// Creates CreateProgramGovernance instruction +#[allow(clippy::too_many_arguments)] pub fn create_program_governance( program_id: &Pubkey, // Accounts realm: &Pubkey, governed_program: &Pubkey, governed_program_upgrade_authority: &Pubkey, + token_owner_record: &Pubkey, payer: &Pubkey, // Args config: GovernanceConfig, @@ -629,6 +630,7 @@ pub fn create_program_governance( AccountMeta::new_readonly(*governed_program, false), AccountMeta::new(governed_program_data_address, false), AccountMeta::new_readonly(*governed_program_upgrade_authority, true), + AccountMeta::new_readonly(*token_owner_record, false), AccountMeta::new_readonly(*payer, true), AccountMeta::new_readonly(bpf_loader_upgradeable::id(), false), AccountMeta::new_readonly(system_program::id(), false), @@ -647,13 +649,15 @@ pub fn create_program_governance( } } -/// Creates CreateMintGovernance instruction +/// Creates CreateMintGovernance +#[allow(clippy::too_many_arguments)] pub fn create_mint_governance( program_id: &Pubkey, // Accounts realm: &Pubkey, governed_mint: &Pubkey, governed_mint_authority: &Pubkey, + token_owner_record: &Pubkey, payer: &Pubkey, // Args config: GovernanceConfig, @@ -666,6 +670,7 @@ pub fn create_mint_governance( AccountMeta::new(mint_governance_address, false), AccountMeta::new(*governed_mint, false), AccountMeta::new_readonly(*governed_mint_authority, true), + AccountMeta::new_readonly(*token_owner_record, false), AccountMeta::new_readonly(*payer, true), AccountMeta::new_readonly(spl_token::id(), false), AccountMeta::new_readonly(system_program::id(), false), @@ -685,12 +690,14 @@ pub fn create_mint_governance( } /// Creates CreateTokenGovernance instruction +#[allow(clippy::too_many_arguments)] pub fn create_token_governance( program_id: &Pubkey, // Accounts realm: &Pubkey, governed_token: &Pubkey, governed_token_owner: &Pubkey, + token_owner_record: &Pubkey, payer: &Pubkey, // Args config: GovernanceConfig, @@ -703,6 +710,7 @@ pub fn create_token_governance( AccountMeta::new(token_governance_address, false), AccountMeta::new(*governed_token, false), AccountMeta::new_readonly(*governed_token_owner, true), + AccountMeta::new_readonly(*token_owner_record, false), AccountMeta::new_readonly(*payer, true), AccountMeta::new_readonly(spl_token::id(), false), AccountMeta::new_readonly(system_program::id(), false), @@ -1159,8 +1167,9 @@ pub fn set_realm_config( realm: &Pubkey, realm_authority: &Pubkey, council_token_mint: Option, - realm_custodian: Option, + // Args + min_community_tokens_to_create_governance: u64, community_mint_max_vote_weight_source: MintMaxVoteWeightSource, ) -> Instruction { let mut accounts = vec![ @@ -1168,13 +1177,6 @@ pub fn set_realm_config( AccountMeta::new_readonly(*realm_authority, true), ]; - let use_custodian = if let Some(realm_custodian) = realm_custodian { - accounts.push(AccountMeta::new_readonly(realm_custodian, false)); - true - } else { - false - }; - let use_council_mint = if let Some(council_token_mint) = council_token_mint { let council_token_holding_address = get_governing_token_holding_address(program_id, realm, &council_token_mint); @@ -1189,7 +1191,7 @@ pub fn set_realm_config( let instruction = GovernanceInstruction::SetRealmConfig { config_args: RealmConfigArgs { use_council_mint, - use_custodian, + min_community_tokens_to_create_governance, community_mint_max_vote_weight_source, }, }; diff --git a/governance/program/src/processor/process_create_account_governance.rs b/governance/program/src/processor/process_create_account_governance.rs index 5194b9dd..36647791 100644 --- a/governance/program/src/processor/process_create_account_governance.rs +++ b/governance/program/src/processor/process_create_account_governance.rs @@ -29,10 +29,13 @@ pub fn process_create_account_governance( let realm_info = next_account_info(account_info_iter)?; // 0 let account_governance_info = next_account_info(account_info_iter)?; // 1 let governed_account_info = next_account_info(account_info_iter)?; // 2 - let payer_info = next_account_info(account_info_iter)?; // 3 - let system_info = next_account_info(account_info_iter)?; // 4 - let rent_sysvar_info = next_account_info(account_info_iter)?; // 5 + let _token_owner_record_info = next_account_info(account_info_iter)?; // 3 + + let payer_info = next_account_info(account_info_iter)?; // 4 + let system_info = next_account_info(account_info_iter)?; // 5 + + let rent_sysvar_info = next_account_info(account_info_iter)?; // 6 let rent = &Rent::from_account_info(rent_sysvar_info)?; assert_valid_create_governance_args(program_id, &config, realm_info)?; diff --git a/governance/program/src/processor/process_create_mint_governance.rs b/governance/program/src/processor/process_create_mint_governance.rs index 4f757638..3976e1c1 100644 --- a/governance/program/src/processor/process_create_mint_governance.rs +++ b/governance/program/src/processor/process_create_mint_governance.rs @@ -36,12 +36,14 @@ pub fn process_create_mint_governance( let governed_mint_info = next_account_info(account_info_iter)?; // 2 let governed_mint_authority_info = next_account_info(account_info_iter)?; // 3 - let payer_info = next_account_info(account_info_iter)?; // 4 - let spl_token_info = next_account_info(account_info_iter)?; // 5 + let _token_owner_record_info = next_account_info(account_info_iter)?; // 4 - let system_info = next_account_info(account_info_iter)?; // 6 + let payer_info = next_account_info(account_info_iter)?; // 5 + let spl_token_info = next_account_info(account_info_iter)?; // 6 - let rent_sysvar_info = next_account_info(account_info_iter)?; // 7 + let system_info = next_account_info(account_info_iter)?; // 7 + + let rent_sysvar_info = next_account_info(account_info_iter)?; // 8 let rent = &Rent::from_account_info(rent_sysvar_info)?; assert_valid_create_governance_args(program_id, &config, realm_info)?; diff --git a/governance/program/src/processor/process_create_program_governance.rs b/governance/program/src/processor/process_create_program_governance.rs index 5483d183..dd99f389 100644 --- a/governance/program/src/processor/process_create_program_governance.rs +++ b/governance/program/src/processor/process_create_program_governance.rs @@ -40,12 +40,14 @@ pub fn process_create_program_governance( let governed_program_data_info = next_account_info(account_info_iter)?; // 2 let governed_program_upgrade_authority_info = next_account_info(account_info_iter)?; // 3 - let payer_info = next_account_info(account_info_iter)?; // 4 - let bpf_upgrade_loader_info = next_account_info(account_info_iter)?; // 5 + let _token_owner_record_info = next_account_info(account_info_iter)?; // 4 - let system_info = next_account_info(account_info_iter)?; // 6 + let payer_info = next_account_info(account_info_iter)?; // 5 + let bpf_upgrade_loader_info = next_account_info(account_info_iter)?; // 6 - let rent_sysvar_info = next_account_info(account_info_iter)?; // 7 + let system_info = next_account_info(account_info_iter)?; // 7 + + let rent_sysvar_info = next_account_info(account_info_iter)?; // 8 let rent = &Rent::from_account_info(rent_sysvar_info)?; assert_valid_create_governance_args(program_id, &config, realm_info)?; diff --git a/governance/program/src/processor/process_create_realm.rs b/governance/program/src/processor/process_create_realm.rs index bde0e2d9..cfdca86b 100644 --- a/governance/program/src/processor/process_create_realm.rs +++ b/governance/program/src/processor/process_create_realm.rs @@ -61,13 +61,6 @@ pub fn process_create_realm( rent, )?; - let realm_custodian = if config_args.use_custodian { - let realm_custodian_info = next_account_info(account_info_iter)?; - Some(*realm_custodian_info.key) - } else { - None - }; - let council_token_mint_address = if config_args.use_council_mint { let council_token_mint_info = next_account_info(account_info_iter)?; let council_token_holding_info = next_account_info(account_info_iter)?; @@ -100,9 +93,10 @@ pub fn process_create_realm( config: RealmConfig { council_mint: council_token_mint_address, reserved: [0; 8], - custodian: realm_custodian, community_mint_max_vote_weight_source: config_args .community_mint_max_vote_weight_source, + min_community_tokens_to_create_governance: config_args + .min_community_tokens_to_create_governance, }, }; diff --git a/governance/program/src/processor/process_create_token_governance.rs b/governance/program/src/processor/process_create_token_governance.rs index 250056b1..7ecdf1b0 100644 --- a/governance/program/src/processor/process_create_token_governance.rs +++ b/governance/program/src/processor/process_create_token_governance.rs @@ -36,12 +36,14 @@ pub fn process_create_token_governance( let governed_token_info = next_account_info(account_info_iter)?; // 2 let governed_token_owner_info = next_account_info(account_info_iter)?; // 3 - let payer_info = next_account_info(account_info_iter)?; // 4 - let spl_token_info = next_account_info(account_info_iter)?; // 5 + let _token_owner_record_info = next_account_info(account_info_iter)?; // 4 - let system_info = next_account_info(account_info_iter)?; // 6 + let payer_info = next_account_info(account_info_iter)?; // 5 + let spl_token_info = next_account_info(account_info_iter)?; // 6 - let rent_sysvar_info = next_account_info(account_info_iter)?; // 7 + let system_info = next_account_info(account_info_iter)?; // 7 + + let rent_sysvar_info = next_account_info(account_info_iter)?; // 8 let rent = &Rent::from_account_info(rent_sysvar_info)?; assert_valid_create_governance_args(program_id, &config, realm_info)?; diff --git a/governance/program/src/processor/process_set_realm_config.rs b/governance/program/src/processor/process_set_realm_config.rs index 52516198..233971f6 100644 --- a/governance/program/src/processor/process_set_realm_config.rs +++ b/governance/program/src/processor/process_set_realm_config.rs @@ -32,13 +32,6 @@ pub fn process_set_realm_config( assert_valid_realm_config_args(&config_args)?; - let realm_custodian = if config_args.use_custodian { - let realm_custodian_info = next_account_info(account_info_iter)?; - Some(*realm_custodian_info.key) - } else { - None - }; - if config_args.use_council_mint { let council_token_mint_info = next_account_info(account_info_iter)?; @@ -60,9 +53,10 @@ pub fn process_set_realm_config( realm_data.config.council_mint = None; } - realm_data.config.custodian = realm_custodian; realm_data.config.community_mint_max_vote_weight_source = config_args.community_mint_max_vote_weight_source; + realm_data.config.min_community_tokens_to_create_governance = + config_args.min_community_tokens_to_create_governance; realm_data.serialize(&mut *realm_info.data.borrow_mut())?; diff --git a/governance/program/src/state/proposal.rs b/governance/program/src/state/proposal.rs index 75bf8669..44361cba 100644 --- a/governance/program/src/state/proposal.rs +++ b/governance/program/src/state/proposal.rs @@ -562,9 +562,10 @@ mod test { config: RealmConfig { council_mint: Some(Pubkey::new_unique()), reserved: [0; 8], - custodian: Some(Pubkey::new_unique()), + community_mint_max_vote_weight_source: MintMaxVoteWeightSource::FULL_SUPPLY_FRACTION, + min_community_tokens_to_create_governance: 10, }, } } diff --git a/governance/program/src/state/realm.rs b/governance/program/src/state/realm.rs index f6198f01..d1f9229e 100644 --- a/governance/program/src/state/realm.rs +++ b/governance/program/src/state/realm.rs @@ -21,9 +21,8 @@ pub struct RealmConfigArgs { /// If yes then council_mint account must also be passed to the instruction pub use_council_mint: bool, - /// Indicates whether custodian should be used - /// If yes then custodian account must also be passed to the instruction - pub use_custodian: bool, + /// Min number of community tokens required to create a governance + pub min_community_tokens_to_create_governance: u64, /// The source used for community mint max vote weight source pub community_mint_max_vote_weight_source: MintMaxVoteWeightSource, @@ -36,18 +35,14 @@ pub struct RealmConfig { /// Reserved space for future versions pub reserved: [u8; 8], + /// Min number of community tokens required to create a governance + pub min_community_tokens_to_create_governance: u64, + /// The source used for community mint max vote weight source pub community_mint_max_vote_weight_source: MintMaxVoteWeightSource, /// Optional council mint pub council_mint: Option, - - /// An authority tasked with non-critical and maintenance Realm operations - /// For example custodian authority is required to add governances to the Realm - /// There is no security risk with adding governances to the Realm but it should not be open for everybody - /// to prevent unrelated entries and noise - /// Note: This field is not used yet. It's reserved for future versions - pub custodian: Option, } /// Governance Realm Account @@ -77,7 +72,7 @@ pub struct Realm { impl AccountMaxSize for Realm { fn get_max_size(&self) -> Option { - Some(self.name.len() + 161) + Some(self.name.len() + 136) } } @@ -239,8 +234,9 @@ mod test { config: RealmConfig { council_mint: Some(Pubkey::new_unique()), reserved: [0; 8], - custodian: Some(Pubkey::new_unique()), + community_mint_max_vote_weight_source: MintMaxVoteWeightSource::Absolute(100), + min_community_tokens_to_create_governance: 10, }, }; diff --git a/governance/program/tests/process_add_signatory.rs b/governance/program/tests/process_add_signatory.rs index 48c0d44d..2f78c170 100644 --- a/governance/program/tests/process_add_signatory.rs +++ b/governance/program/tests/process_add_signatory.rs @@ -16,15 +16,19 @@ async fn test_add_signatory() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -58,15 +62,19 @@ async fn test_add_signatory_with_owner_or_delegate_must_sign_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let mut token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -100,15 +108,19 @@ async fn test_add_signatory_with_invalid_proposal_owner_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let mut token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await diff --git a/governance/program/tests/process_cancel_proposal.rs b/governance/program/tests/process_cancel_proposal.rs index ad4cf610..4ba37ad1 100644 --- a/governance/program/tests/process_cancel_proposal.rs +++ b/governance/program/tests/process_cancel_proposal.rs @@ -15,15 +15,19 @@ async fn test_cancel_proposal() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -54,15 +58,19 @@ async fn test_cancel_proposal_with_already_completed_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let proposal_cookie = governance_test .with_signed_off_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -96,15 +104,19 @@ async fn test_cancel_proposal_with_owner_or_delegate_must_sign_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let mut token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await diff --git a/governance/program/tests/process_cast_vote.rs b/governance/program/tests/process_cast_vote.rs index e3d5911e..c68af782 100644 --- a/governance/program/tests/process_cast_vote.rs +++ b/governance/program/tests/process_cast_vote.rs @@ -19,15 +19,19 @@ async fn test_cast_vote() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let proposal_cookie = governance_test .with_signed_off_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -92,15 +96,19 @@ async fn test_cast_vote_with_invalid_governance_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let mut proposal_cookie = governance_test .with_signed_off_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -110,7 +118,11 @@ async fn test_cast_vote_with_invalid_governance_error() { let governed_account_cookie2 = governance_test.with_governed_account().await; let account_governance_cookie2 = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie2) + .with_account_governance( + &realm_cookie, + &governed_account_cookie2, + &token_owner_record_cookie, + ) .await .unwrap(); @@ -134,15 +146,19 @@ async fn test_cast_vote_with_invalid_mint_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let mut proposal_cookie = governance_test .with_signed_off_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -170,15 +186,19 @@ async fn test_cast_vote_with_invalid_token_owner_record_mint_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let mut token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let proposal_cookie = governance_test .with_signed_off_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -212,15 +232,19 @@ async fn test_cast_vote_with_invalid_token_owner_record_from_different_realm_err let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let mut token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let proposal_cookie = governance_test .with_signed_off_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -253,15 +277,19 @@ async fn test_cast_vote_with_governance_authority_must_sign_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let mut token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let proposal_cookie = governance_test .with_signed_off_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -295,15 +323,19 @@ async fn test_cast_vote_with_vote_tipped_to_succeeded() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie1 = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie1, + ) + .await + .unwrap(); + let token_owner_record_cookie2 = governance_test .with_community_token_deposit(&realm_cookie) .await; @@ -372,16 +404,20 @@ async fn test_cast_vote_with_vote_tipped_to_defeated() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - // 100 votes let token_owner_record_cookie1 = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie1, + ) + .await + .unwrap(); + // 100 votes let token_owner_record_cookie2 = governance_test .with_community_token_deposit(&realm_cookie) @@ -457,19 +493,20 @@ async fn test_cast_vote_with_threshold_below_50_and_vote_not_tipped() { governance_config.vote_threshold_percentage = VoteThresholdPercentage::YesVote(40); + let token_owner_record_cookie = governance_test + .with_community_token_deposit(&realm_cookie) + .await; + let mut account_governance_cookie = governance_test .with_account_governance_using_config( &realm_cookie, &governed_account_cookie, + &token_owner_record_cookie, &governance_config, ) .await .unwrap(); - let token_owner_record_cookie = governance_test - .with_community_token_deposit(&realm_cookie) - .await; - // Total 210 tokens governance_test .mint_community_tokens(&realm_cookie, 110) @@ -503,15 +540,19 @@ async fn test_cast_vote_with_voting_time_expired_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let proposal_cookie = governance_test .with_signed_off_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -549,15 +590,19 @@ async fn test_cast_vote_with_cast_twice_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + governance_test .mint_community_tokens(&realm_cookie, 200) .await; diff --git a/governance/program/tests/process_create_account_governance.rs b/governance/program/tests/process_create_account_governance.rs index 4e24f777..163f86b4 100644 --- a/governance/program/tests/process_create_account_governance.rs +++ b/governance/program/tests/process_create_account_governance.rs @@ -14,9 +14,17 @@ async fn test_create_account_governance() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; + let token_owner_record_cookie = governance_test + .with_community_token_deposit(&realm_cookie) + .await; + // Act let account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) .await .unwrap(); @@ -39,8 +47,16 @@ async fn test_create_account_governance_with_invalid_realm_error() { let mut realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; + let token_owner_record_cookie = governance_test + .with_community_token_deposit(&realm_cookie) + .await; + let account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) .await .unwrap(); @@ -48,7 +64,11 @@ async fn test_create_account_governance_with_invalid_realm_error() { // Act let err = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) .await .err() .unwrap(); @@ -66,13 +86,22 @@ async fn test_create_account_governance_with_invalid_config_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; + let token_owner_record_cookie = governance_test + .with_community_token_deposit(&realm_cookie) + .await; + // Arrange let mut config = governance_test.get_default_governance_config(); config.vote_threshold_percentage = VoteThresholdPercentage::YesVote(0); // below 1% threshold // Act let err = governance_test - .with_account_governance_using_config(&realm_cookie, &governed_account_cookie, &config) + .with_account_governance_using_config( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + &config, + ) .await .err() .unwrap(); @@ -87,7 +116,12 @@ async fn test_create_account_governance_with_invalid_config_error() { // Act let err = governance_test - .with_account_governance_using_config(&realm_cookie, &governed_account_cookie, &config) + .with_account_governance_using_config( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + &config, + ) .await .err() .unwrap(); diff --git a/governance/program/tests/process_create_mint_governance.rs b/governance/program/tests/process_create_mint_governance.rs index a2997ba5..bc6efeec 100644 --- a/governance/program/tests/process_create_mint_governance.rs +++ b/governance/program/tests/process_create_mint_governance.rs @@ -16,9 +16,17 @@ async fn test_create_mint_governance() { let realm_cookie = governance_test.with_realm().await; let governed_mint_cookie = governance_test.with_governed_mint().await; + let token_owner_record_cookie = governance_test + .with_community_token_deposit(&realm_cookie) + .await; + // Act let mint_governance_cookie = governance_test - .with_mint_governance(&realm_cookie, &governed_mint_cookie) + .with_mint_governance( + &realm_cookie, + &governed_mint_cookie, + &token_owner_record_cookie, + ) .await .unwrap(); @@ -47,10 +55,18 @@ async fn test_create_mint_governance_without_transferring_mint_authority() { let realm_cookie = governance_test.with_realm().await; let mut governed_mint_cookie = governance_test.with_governed_mint().await; + let token_owner_record_cookie = governance_test + .with_community_token_deposit(&realm_cookie) + .await; + governed_mint_cookie.transfer_mint_authority = false; // Act let mint_governance_cookie = governance_test - .with_mint_governance(&realm_cookie, &governed_mint_cookie) + .with_mint_governance( + &realm_cookie, + &governed_mint_cookie, + &token_owner_record_cookie, + ) .await .unwrap(); @@ -80,12 +96,20 @@ async fn test_create_mint_governance_without_transferring_mint_authority_with_in let realm_cookie = governance_test.with_realm().await; let mut governed_mint_cookie = governance_test.with_governed_mint().await; + let token_owner_record_cookie = governance_test + .with_community_token_deposit(&realm_cookie) + .await; + governed_mint_cookie.transfer_mint_authority = false; governed_mint_cookie.mint_authority = Keypair::new(); // Act let err = governance_test - .with_mint_governance(&realm_cookie, &governed_mint_cookie) + .with_mint_governance( + &realm_cookie, + &governed_mint_cookie, + &token_owner_record_cookie, + ) .await .err() .unwrap(); @@ -103,6 +127,10 @@ async fn test_create_mint_governance_without_transferring_mint_authority_with_au let realm_cookie = governance_test.with_realm().await; let mut governed_mint_cookie = governance_test.with_governed_mint().await; + let token_owner_record_cookie = governance_test + .with_community_token_deposit(&realm_cookie) + .await; + governed_mint_cookie.transfer_mint_authority = false; // Act @@ -110,6 +138,7 @@ async fn test_create_mint_governance_without_transferring_mint_authority_with_au .with_mint_governance_using_instruction( &realm_cookie, &governed_mint_cookie, + &token_owner_record_cookie, |i| { i.accounts[3].is_signer = false; // governed_mint_authority }, @@ -131,11 +160,19 @@ async fn test_create_mint_governance_with_invalid_mint_authority_error() { let realm_cookie = governance_test.with_realm().await; let mut governed_mint_cookie = governance_test.with_governed_mint().await; + let token_owner_record_cookie = governance_test + .with_community_token_deposit(&realm_cookie) + .await; + governed_mint_cookie.mint_authority = Keypair::new(); // Act let err = governance_test - .with_mint_governance(&realm_cookie, &governed_mint_cookie) + .with_mint_governance( + &realm_cookie, + &governed_mint_cookie, + &token_owner_record_cookie, + ) .await .err() .unwrap(); @@ -152,8 +189,16 @@ async fn test_create_mint_governance_with_invalid_realm_error() { let mut realm_cookie = governance_test.with_realm().await; let governed_mint_cookie = governance_test.with_governed_mint().await; + let token_owner_record_cookie = governance_test + .with_community_token_deposit(&realm_cookie) + .await; + let mint_governance_cookie = governance_test - .with_mint_governance(&realm_cookie, &governed_mint_cookie) + .with_mint_governance( + &realm_cookie, + &governed_mint_cookie, + &token_owner_record_cookie, + ) .await .unwrap(); @@ -162,7 +207,11 @@ async fn test_create_mint_governance_with_invalid_realm_error() { // Act let err = governance_test - .with_mint_governance(&realm_cookie, &governed_mint_cookie) + .with_mint_governance( + &realm_cookie, + &governed_mint_cookie, + &token_owner_record_cookie, + ) .await .err() .unwrap(); diff --git a/governance/program/tests/process_create_program_governance.rs b/governance/program/tests/process_create_program_governance.rs index 253dce55..ab7e8253 100644 --- a/governance/program/tests/process_create_program_governance.rs +++ b/governance/program/tests/process_create_program_governance.rs @@ -17,9 +17,17 @@ async fn test_create_program_governance() { let realm_cookie = governance_test.with_realm().await; let governed_program_cookie = governance_test.with_governed_program().await; + let token_owner_record_cookie = governance_test + .with_community_token_deposit(&realm_cookie) + .await; + // Act let program_governance_cookie = governance_test - .with_program_governance(&realm_cookie, &governed_program_cookie) + .with_program_governance( + &realm_cookie, + &governed_program_cookie, + &token_owner_record_cookie, + ) .await .unwrap(); @@ -50,11 +58,19 @@ async fn test_create_program_governance_without_transferring_upgrade_authority() let realm_cookie = governance_test.with_realm().await; let mut governed_program_cookie = governance_test.with_governed_program().await; + let token_owner_record_cookie = governance_test + .with_community_token_deposit(&realm_cookie) + .await; + governed_program_cookie.transfer_upgrade_authority = false; // Act let program_governance_cookie = governance_test - .with_program_governance(&realm_cookie, &governed_program_cookie) + .with_program_governance( + &realm_cookie, + &governed_program_cookie, + &token_owner_record_cookie, + ) .await .unwrap(); @@ -89,12 +105,20 @@ async fn test_create_program_governance_without_transferring_upgrade_authority_w let realm_cookie = governance_test.with_realm().await; let mut governed_program_cookie = governance_test.with_governed_program().await; + let token_owner_record_cookie = governance_test + .with_community_token_deposit(&realm_cookie) + .await; + governed_program_cookie.transfer_upgrade_authority = false; governed_program_cookie.upgrade_authority = Keypair::new(); // Act let err = governance_test - .with_program_governance(&realm_cookie, &governed_program_cookie) + .with_program_governance( + &realm_cookie, + &governed_program_cookie, + &token_owner_record_cookie, + ) .await .err() .unwrap(); @@ -112,6 +136,10 @@ async fn test_create_program_governance_without_transferring_upgrade_authority_w let realm_cookie = governance_test.with_realm().await; let mut governed_program_cookie = governance_test.with_governed_program().await; + let token_owner_record_cookie = governance_test + .with_community_token_deposit(&realm_cookie) + .await; + governed_program_cookie.transfer_upgrade_authority = false; // Act @@ -119,6 +147,7 @@ async fn test_create_program_governance_without_transferring_upgrade_authority_w .with_program_governance_using_instruction( &realm_cookie, &governed_program_cookie, + &token_owner_record_cookie, |i| { i.accounts[4].is_signer = false; // governed_program_upgrade_authority }, @@ -140,11 +169,19 @@ async fn test_create_program_governance_with_incorrect_upgrade_authority_error() let realm_cookie = governance_test.with_realm().await; let mut governed_program_cookie = governance_test.with_governed_program().await; + let token_owner_record_cookie = governance_test + .with_community_token_deposit(&realm_cookie) + .await; + governed_program_cookie.upgrade_authority = Keypair::new(); // Act let err = governance_test - .with_program_governance(&realm_cookie, &governed_program_cookie) + .with_program_governance( + &realm_cookie, + &governed_program_cookie, + &token_owner_record_cookie, + ) .await .err() .unwrap(); @@ -161,8 +198,16 @@ async fn test_create_program_governance_with_invalid_realm_error() { let mut realm_cookie = governance_test.with_realm().await; let governed_program_cookie = governance_test.with_governed_program().await; + let token_owner_record_cookie = governance_test + .with_community_token_deposit(&realm_cookie) + .await; + let program_governance_cookie = governance_test - .with_program_governance(&realm_cookie, &governed_program_cookie) + .with_program_governance( + &realm_cookie, + &governed_program_cookie, + &token_owner_record_cookie, + ) .await .unwrap(); @@ -170,7 +215,11 @@ async fn test_create_program_governance_with_invalid_realm_error() { // Act let err = governance_test - .with_program_governance(&realm_cookie, &governed_program_cookie) + .with_program_governance( + &realm_cookie, + &governed_program_cookie, + &token_owner_record_cookie, + ) .await .err() .unwrap(); diff --git a/governance/program/tests/process_create_proposal.rs b/governance/program/tests/process_create_proposal.rs index ccb90dcf..1cb1e259 100644 --- a/governance/program/tests/process_create_proposal.rs +++ b/governance/program/tests/process_create_proposal.rs @@ -17,15 +17,19 @@ async fn test_create_community_proposal() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + // Act let proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) @@ -54,15 +58,19 @@ async fn test_create_multiple_proposals() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let community_token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &community_token_owner_record_cookie, + ) + .await + .unwrap(); + let council_token_owner_record_cookie = governance_test .with_council_token_deposit(&realm_cookie) .await; @@ -115,15 +123,19 @@ async fn test_create_proposal_with_not_authorized_governance_authority_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let mut token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + token_owner_record_cookie.governance_authority = Some(Keypair::new()); // Act @@ -148,14 +160,19 @@ async fn test_create_proposal_with_governance_delegate_signer() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let mut token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + governance_test .with_community_governance_delegate(&realm_cookie, &mut token_owner_record_cookie) .await; @@ -185,22 +202,22 @@ async fn test_create_proposal_with_not_enough_community_tokens_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - // Set token deposit amount below the required threshold - let token_amount = account_governance_cookie - .account - .config - .min_community_tokens_to_create_proposal as u64 - - 1; + let token_amount = 4; let token_owner_record_cookie = governance_test .with_community_token_deposit_amount(&realm_cookie, token_amount) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + // Act let err = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) @@ -220,22 +237,22 @@ async fn test_create_proposal_with_not_enough_council_tokens_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - // Set token deposit amount below the required threshold - let token_amount = account_governance_cookie - .account - .config - .min_council_tokens_to_create_proposal as u64 - - 1; + let token_amount = 1; let token_owner_record_cookie = governance_test .with_council_token_deposit_amount(&realm_cookie, token_amount) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + // Act let err = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) @@ -255,15 +272,19 @@ async fn test_create_proposal_with_owner_or_delegate_must_sign_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let council_token_owner_record_cookie = governance_test .with_council_token_deposit(&realm_cookie) .await; @@ -298,15 +319,19 @@ async fn test_create_proposal_with_invalid_governing_token_mint_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let mut token_owner_record_cookie = governance_test .with_council_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + // Try to use mint which doesn't belong to the Realm token_owner_record_cookie.account.governing_token_mint = Pubkey::new_unique(); @@ -329,15 +354,19 @@ async fn test_create_community_proposal_using_council_tokens() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let mut community_token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &community_token_owner_record_cookie, + ) + .await + .unwrap(); + let council_token_owner_record_cookie = governance_test .with_council_token_deposit(&realm_cookie) .await; @@ -379,15 +408,19 @@ async fn test_create_council_proposal_using_community_tokens() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let mut council_token_owner_record_cookie = governance_test .with_council_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &council_token_owner_record_cookie, + ) + .await + .unwrap(); + let community_token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; diff --git a/governance/program/tests/process_create_realm.rs b/governance/program/tests/process_create_realm.rs index 290fe5e2..7e4a3f6e 100644 --- a/governance/program/tests/process_create_realm.rs +++ b/governance/program/tests/process_create_realm.rs @@ -30,8 +30,9 @@ async fn test_create_realm_with_non_default_config() { let config_args = RealmConfigArgs { use_council_mint: false, - use_custodian: false, + community_mint_max_vote_weight_source: MintMaxVoteWeightSource::SupplyFraction(1), + min_community_tokens_to_create_governance: 10, }; // Act diff --git a/governance/program/tests/process_create_token_governance.rs b/governance/program/tests/process_create_token_governance.rs index c86ba0df..c10bcd5f 100644 --- a/governance/program/tests/process_create_token_governance.rs +++ b/governance/program/tests/process_create_token_governance.rs @@ -16,9 +16,17 @@ async fn test_create_token_governance() { let realm_cookie = governance_test.with_realm().await; let governed_token_cookie = governance_test.with_governed_token().await; + let token_owner_record_cookie = governance_test + .with_community_token_deposit(&realm_cookie) + .await; + // Act let token_governance_cookie = governance_test - .with_token_governance(&realm_cookie, &governed_token_cookie) + .with_token_governance( + &realm_cookie, + &governed_token_cookie, + &token_owner_record_cookie, + ) .await .unwrap(); @@ -44,11 +52,19 @@ async fn test_create_token_governance_without_transferring_token_owner() { let realm_cookie = governance_test.with_realm().await; let mut governed_token_cookie = governance_test.with_governed_token().await; + let token_owner_record_cookie = governance_test + .with_community_token_deposit(&realm_cookie) + .await; + governed_token_cookie.transfer_token_owner = false; // Act let token_governance_cookie = governance_test - .with_token_governance(&realm_cookie, &governed_token_cookie) + .with_token_governance( + &realm_cookie, + &governed_token_cookie, + &token_owner_record_cookie, + ) .await .unwrap(); @@ -78,12 +94,20 @@ async fn test_create_token_governance_without_transferring_token_owner_with_inva let realm_cookie = governance_test.with_realm().await; let mut governed_token_cookie = governance_test.with_governed_token().await; + let token_owner_record_cookie = governance_test + .with_community_token_deposit(&realm_cookie) + .await; + governed_token_cookie.transfer_token_owner = false; governed_token_cookie.token_owner = Keypair::new(); // Act let err = governance_test - .with_token_governance(&realm_cookie, &governed_token_cookie) + .with_token_governance( + &realm_cookie, + &governed_token_cookie, + &token_owner_record_cookie, + ) .await .err() .unwrap(); @@ -101,6 +125,10 @@ async fn test_create_token_governance_without_transferring_token_owner_with_owne let realm_cookie = governance_test.with_realm().await; let mut governed_token_cookie = governance_test.with_governed_token().await; + let token_owner_record_cookie = governance_test + .with_community_token_deposit(&realm_cookie) + .await; + governed_token_cookie.transfer_token_owner = false; // Act @@ -108,6 +136,7 @@ async fn test_create_token_governance_without_transferring_token_owner_with_owne .with_token_governance_using_instruction( &realm_cookie, &governed_token_cookie, + &token_owner_record_cookie, |i| { i.accounts[3].is_signer = false; // governed_token_owner }, @@ -129,11 +158,19 @@ async fn test_create_token_governance_with_invalid_token_owner_error() { let realm_cookie = governance_test.with_realm().await; let mut governed_token_cookie = governance_test.with_governed_token().await; + let token_owner_record_cookie = governance_test + .with_community_token_deposit(&realm_cookie) + .await; + governed_token_cookie.token_owner = Keypair::new(); // Act let err = governance_test - .with_token_governance(&realm_cookie, &governed_token_cookie) + .with_token_governance( + &realm_cookie, + &governed_token_cookie, + &token_owner_record_cookie, + ) .await .err() .unwrap(); @@ -150,8 +187,16 @@ async fn test_create_token_governance_with_invalid_realm_error() { let mut realm_cookie = governance_test.with_realm().await; let governed_token_cookie = governance_test.with_governed_token().await; + let token_owner_record_cookie = governance_test + .with_community_token_deposit(&realm_cookie) + .await; + let token_governance_cookie = governance_test - .with_token_governance(&realm_cookie, &governed_token_cookie) + .with_token_governance( + &realm_cookie, + &governed_token_cookie, + &token_owner_record_cookie, + ) .await .unwrap(); @@ -160,7 +205,11 @@ async fn test_create_token_governance_with_invalid_realm_error() { // Act let err = governance_test - .with_token_governance(&realm_cookie, &governed_token_cookie) + .with_token_governance( + &realm_cookie, + &governed_token_cookie, + &token_owner_record_cookie, + ) .await .err() .unwrap(); diff --git a/governance/program/tests/process_execute_instruction.rs b/governance/program/tests/process_execute_instruction.rs index 5ad82292..92a0da0c 100644 --- a/governance/program/tests/process_execute_instruction.rs +++ b/governance/program/tests/process_execute_instruction.rs @@ -24,15 +24,19 @@ async fn test_execute_mint_instruction() { let realm_cookie = governance_test.with_realm().await; let governed_mint_cookie = governance_test.with_governed_mint().await; - let mut mint_governance_cookie = governance_test - .with_mint_governance(&realm_cookie, &governed_mint_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut mint_governance_cookie = governance_test + .with_mint_governance( + &realm_cookie, + &governed_mint_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let mut proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut mint_governance_cookie) .await @@ -116,15 +120,19 @@ async fn test_execute_transfer_instruction() { let realm_cookie = governance_test.with_realm().await; let governed_token_cookie = governance_test.with_governed_token().await; - let mut token_governance_cookie = governance_test - .with_token_governance(&realm_cookie, &governed_token_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut token_governance_cookie = governance_test + .with_token_governance( + &realm_cookie, + &governed_token_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let mut proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut token_governance_cookie) .await @@ -208,15 +216,19 @@ async fn test_execute_upgrade_program_instruction() { let realm_cookie = governance_test.with_realm().await; let governed_program_cookie = governance_test.with_governed_program().await; - let mut program_governance_cookie = governance_test - .with_program_governance(&realm_cookie, &governed_program_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut program_governance_cookie = governance_test + .with_program_governance( + &realm_cookie, + &governed_program_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let mut proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut program_governance_cookie) .await @@ -328,15 +340,19 @@ async fn test_execute_instruction_with_invalid_state_errors() { let realm_cookie = governance_test.with_realm().await; let governed_mint_cookie = governance_test.with_governed_mint().await; - let mut mint_governance_cookie = governance_test - .with_mint_governance(&realm_cookie, &governed_mint_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut mint_governance_cookie = governance_test + .with_mint_governance( + &realm_cookie, + &governed_mint_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let mut proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut mint_governance_cookie) .await @@ -486,15 +502,19 @@ async fn test_execute_instruction_for_other_proposal_error() { let realm_cookie = governance_test.with_realm().await; let governed_mint_cookie = governance_test.with_governed_mint().await; - let mut mint_governance_cookie = governance_test - .with_mint_governance(&realm_cookie, &governed_mint_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut mint_governance_cookie = governance_test + .with_mint_governance( + &realm_cookie, + &governed_mint_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let mut proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut mint_governance_cookie) .await @@ -558,15 +578,19 @@ async fn test_execute_mint_instruction_twice_error() { let realm_cookie = governance_test.with_realm().await; let governed_mint_cookie = governance_test.with_governed_mint().await; - let mut mint_governance_cookie = governance_test - .with_mint_governance(&realm_cookie, &governed_mint_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut mint_governance_cookie = governance_test + .with_mint_governance( + &realm_cookie, + &governed_mint_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let mut proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut mint_governance_cookie) .await diff --git a/governance/program/tests/process_finalize_vote.rs b/governance/program/tests/process_finalize_vote.rs index a427777b..dc4a0ce4 100644 --- a/governance/program/tests/process_finalize_vote.rs +++ b/governance/program/tests/process_finalize_vote.rs @@ -23,19 +23,20 @@ async fn test_finalize_vote_to_succeeded() { governance_config.vote_threshold_percentage = VoteThresholdPercentage::YesVote(40); + let token_owner_record_cookie = governance_test + .with_community_token_deposit(&realm_cookie) + .await; + let mut account_governance_cookie = governance_test .with_account_governance_using_config( &realm_cookie, &governed_account_cookie, + &token_owner_record_cookie, &governance_config, ) .await .unwrap(); - let token_owner_record_cookie = governance_test - .with_community_token_deposit(&realm_cookie) - .await; - // Total 210 tokens governance_test .mint_community_tokens(&realm_cookie, 110) @@ -108,15 +109,19 @@ async fn test_finalize_vote_to_defeated() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + // Total 300 tokens governance_test .mint_community_tokens(&realm_cookie, 200) @@ -171,15 +176,19 @@ async fn test_finalize_vote_with_invalid_mint_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + // Total 300 tokens governance_test .mint_community_tokens(&realm_cookie, 200) @@ -226,15 +235,19 @@ async fn test_finalize_vote_with_invalid_governance_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + // Total 300 tokens governance_test .mint_community_tokens(&realm_cookie, 200) @@ -261,7 +274,11 @@ async fn test_finalize_vote_with_invalid_governance_error() { let governed_account_cookie2 = governance_test.with_governed_account().await; let account_governance_cookie2 = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie2) + .with_account_governance( + &realm_cookie, + &governed_account_cookie2, + &token_owner_record_cookie, + ) .await .unwrap(); diff --git a/governance/program/tests/process_flag_instruction_error.rs b/governance/program/tests/process_flag_instruction_error.rs index 5360af46..0f5d3838 100644 --- a/governance/program/tests/process_flag_instruction_error.rs +++ b/governance/program/tests/process_flag_instruction_error.rs @@ -19,15 +19,19 @@ async fn test_execute_flag_instruction_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let mut proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -101,15 +105,19 @@ async fn test_execute_instruction_after_flagged_with_error() { let realm_cookie = governance_test.with_realm().await; let governed_mint_cookie = governance_test.with_governed_mint().await; - let mut mint_governance_cookie = governance_test - .with_mint_governance(&realm_cookie, &governed_mint_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut mint_governance_cookie = governance_test + .with_mint_governance( + &realm_cookie, + &governed_mint_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let mut proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut mint_governance_cookie) .await @@ -186,15 +194,19 @@ async fn test_execute_second_instruction_after_first_instruction_flagged_with_er let realm_cookie = governance_test.with_realm().await; let governed_mint_cookie = governance_test.with_governed_mint().await; - let mut mint_governance_cookie = governance_test - .with_mint_governance(&realm_cookie, &governed_mint_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut mint_governance_cookie = governance_test + .with_mint_governance( + &realm_cookie, + &governed_mint_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let mut proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut mint_governance_cookie) .await @@ -267,15 +279,19 @@ async fn test_flag_instruction_error_with_instruction_already_executed_error() { let realm_cookie = governance_test.with_realm().await; let governed_mint_cookie = governance_test.with_governed_mint().await; - let mut mint_governance_cookie = governance_test - .with_mint_governance(&realm_cookie, &governed_mint_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut mint_governance_cookie = governance_test + .with_mint_governance( + &realm_cookie, + &governed_mint_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let mut proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut mint_governance_cookie) .await @@ -347,15 +363,19 @@ async fn test_flag_instruction_error_with_owner_or_delegate_must_sign_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let mut token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let mut proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await diff --git a/governance/program/tests/process_insert_instruction.rs b/governance/program/tests/process_insert_instruction.rs index e6ec3427..0cef9fb5 100644 --- a/governance/program/tests/process_insert_instruction.rs +++ b/governance/program/tests/process_insert_instruction.rs @@ -15,15 +15,19 @@ async fn test_insert_instruction() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let mut proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -63,15 +67,19 @@ async fn test_insert_multiple_instructions() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let mut proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -107,15 +115,19 @@ async fn test_insert_instruction_with_invalid_index_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let mut proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -140,15 +152,19 @@ async fn test_insert_instruction_with_instruction_already_exists_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let mut proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -182,15 +198,20 @@ async fn test_insert_instruction_with_invalid_hold_up_time_error() { config.min_instruction_hold_up_time = 100; - let mut account_governance_cookie = governance_test - .with_account_governance_using_config(&realm_cookie, &governed_account_cookie, &config) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance_using_config( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + &config, + ) + .await + .unwrap(); + let mut proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -217,15 +238,19 @@ async fn test_insert_instruction_with_not_editable_proposal_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let mut proposal_cookie = governance_test .with_signed_off_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -253,15 +278,19 @@ async fn test_insert_instruction_with_owner_or_delegate_must_sign_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let mut token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let mut proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -295,15 +324,19 @@ async fn test_insert_instruction_with_invalid_governance_for_proposal_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let mut proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -313,7 +346,11 @@ async fn test_insert_instruction_with_invalid_governance_for_proposal_error() { let governed_account_cookie2 = governance_test.with_governed_account().await; let account_governance_cookie2 = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie2) + .with_account_governance( + &realm_cookie, + &governed_account_cookie2, + &token_owner_record_cookie, + ) .await .unwrap(); diff --git a/governance/program/tests/process_relinquish_vote.rs b/governance/program/tests/process_relinquish_vote.rs index 884a2ce8..51645e92 100644 --- a/governance/program/tests/process_relinquish_vote.rs +++ b/governance/program/tests/process_relinquish_vote.rs @@ -16,15 +16,19 @@ async fn test_relinquish_voted_proposal() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let proposal_cookie = governance_test .with_signed_off_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -73,15 +77,19 @@ async fn test_relinquish_active_yes_vote() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + // Total 300 tokens governance_test .mint_community_tokens(&realm_cookie, 200) @@ -135,15 +143,19 @@ async fn test_relinquish_active_no_vote() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + // Total 300 tokens governance_test .mint_community_tokens(&realm_cookie, 200) @@ -197,15 +209,19 @@ async fn test_relinquish_vote_with_invalid_mint_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let mut proposal_cookie = governance_test .with_signed_off_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -239,15 +255,19 @@ async fn test_relinquish_vote_with_governance_authority_must_sign_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let mut token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + // Total 300 tokens governance_test .mint_community_tokens(&realm_cookie, 200) @@ -294,15 +314,19 @@ async fn test_relinquish_vote_with_invalid_vote_record_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let token_owner_record_cookie2 = governance_test .with_community_token_deposit(&realm_cookie) .await; @@ -354,15 +378,19 @@ async fn test_relinquish_vote_with_already_relinquished_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let proposal_cookie = governance_test .with_signed_off_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await diff --git a/governance/program/tests/process_remove_instruction.rs b/governance/program/tests/process_remove_instruction.rs index 9aa2a6aa..36299372 100644 --- a/governance/program/tests/process_remove_instruction.rs +++ b/governance/program/tests/process_remove_instruction.rs @@ -15,15 +15,19 @@ async fn test_remove_instruction() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let mut proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -70,15 +74,19 @@ async fn test_replace_instruction() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let mut proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -136,15 +144,19 @@ async fn test_remove_front_instruction() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let mut proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -194,15 +206,19 @@ async fn test_remove_instruction_with_owner_or_delegate_must_sign_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let mut token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let mut proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -245,15 +261,19 @@ async fn test_remove_instruction_with_proposal_not_editable_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let mut proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -295,15 +315,19 @@ async fn test_remove_instruction_with_instruction_from_other_proposal_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let mut proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await diff --git a/governance/program/tests/process_remove_signatory.rs b/governance/program/tests/process_remove_signatory.rs index 6a8109e9..346e13af 100644 --- a/governance/program/tests/process_remove_signatory.rs +++ b/governance/program/tests/process_remove_signatory.rs @@ -16,15 +16,19 @@ async fn test_remove_signatory() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -68,15 +72,19 @@ async fn test_remove_signatory_with_owner_or_delegate_must_sign_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let mut token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -119,15 +127,19 @@ async fn test_remove_signatory_with_invalid_proposal_owner_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let mut token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -167,15 +179,19 @@ async fn test_remove_signatory_with_not_editable_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -222,15 +238,19 @@ async fn test_remove_signatory_with_already_signed_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await diff --git a/governance/program/tests/process_set_governance_config.rs b/governance/program/tests/process_set_governance_config.rs index 03816d00..21d0310d 100644 --- a/governance/program/tests/process_set_governance_config.rs +++ b/governance/program/tests/process_set_governance_config.rs @@ -19,15 +19,19 @@ async fn test_set_governance_config() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let mut proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -148,15 +152,19 @@ async fn test_set_governance_config_with_invalid_governance_authority_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let mut proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -171,7 +179,11 @@ async fn test_set_governance_config_with_invalid_governance_authority_error() { let governed_account_cookie2 = governance_test.with_governed_account().await; let account_governance_cookie2 = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie2) + .with_account_governance( + &realm_cookie, + &governed_account_cookie2, + &token_owner_record_cookie, + ) .await .unwrap(); diff --git a/governance/program/tests/process_set_realm_config.rs b/governance/program/tests/process_set_realm_config.rs index d83fa85b..a05e5ce0 100644 --- a/governance/program/tests/process_set_realm_config.rs +++ b/governance/program/tests/process_set_realm_config.rs @@ -20,8 +20,9 @@ async fn test_set_realm_config() { let config_args = RealmConfigArgs { use_council_mint: true, - use_custodian: true, + community_mint_max_vote_weight_source: MintMaxVoteWeightSource::SupplyFraction(100), + min_community_tokens_to_create_governance: 10, }; // Act @@ -48,8 +49,9 @@ async fn test_set_realm_config_with_authority_must_sign_error() { let config_args = RealmConfigArgs { use_council_mint: true, - use_custodian: true, + community_mint_max_vote_weight_source: MintMaxVoteWeightSource::SupplyFraction(100), + min_community_tokens_to_create_governance: 10, }; // Act @@ -78,8 +80,9 @@ async fn test_set_realm_config_with_no_authority_error() { let config_args = RealmConfigArgs { use_council_mint: true, - use_custodian: true, + community_mint_max_vote_weight_source: MintMaxVoteWeightSource::SupplyFraction(100), + min_community_tokens_to_create_governance: 10, }; governance_test @@ -113,8 +116,9 @@ async fn test_set_realm_config_with_invalid_authority_error() { let config_args = RealmConfigArgs { use_council_mint: true, - use_custodian: true, + community_mint_max_vote_weight_source: MintMaxVoteWeightSource::SupplyFraction(100), + min_community_tokens_to_create_governance: 10, }; let realm_cookie2 = governance_test.with_realm().await; @@ -134,34 +138,6 @@ async fn test_set_realm_config_with_invalid_authority_error() { assert_eq!(err, GovernanceError::InvalidAuthorityForRealm.into()); } -#[tokio::test] -async fn test_set_realm_config_with_remove_custodian() { - // Arrange - let mut governance_test = GovernanceProgramTest::start_new().await; - - let mut realm_cookie = governance_test.with_realm().await; - - let config_args = RealmConfigArgs { - use_council_mint: true, - use_custodian: false, - community_mint_max_vote_weight_source: MintMaxVoteWeightSource::SupplyFraction(100), - }; - - // Act - governance_test - .set_realm_config(&mut realm_cookie, &config_args) - .await - .unwrap(); - - // Assert - let realm_account = governance_test - .get_realm_account(&realm_cookie.address) - .await; - - assert_eq!(realm_cookie.account, realm_account); - assert_eq!(None, realm_account.config.custodian); -} - #[tokio::test] async fn test_set_realm_config_with_remove_council() { // Arrange @@ -171,8 +147,9 @@ async fn test_set_realm_config_with_remove_council() { let config_args = RealmConfigArgs { use_council_mint: false, - use_custodian: true, + community_mint_max_vote_weight_source: MintMaxVoteWeightSource::SupplyFraction(100), + min_community_tokens_to_create_governance: 10, }; // Act @@ -199,8 +176,9 @@ async fn test_set_realm_config_with_council_change_error() { let config_args = RealmConfigArgs { use_council_mint: true, - use_custodian: true, + community_mint_max_vote_weight_source: MintMaxVoteWeightSource::SupplyFraction(100), + min_community_tokens_to_create_governance: 10, }; // Try to replace council mint @@ -229,8 +207,9 @@ async fn test_set_realm_config_with_council_restore_error() { let mut config_args = RealmConfigArgs { use_council_mint: false, - use_custodian: true, + community_mint_max_vote_weight_source: MintMaxVoteWeightSource::SupplyFraction(100), + min_community_tokens_to_create_governance: 10, }; governance_test diff --git a/governance/program/tests/process_sign_off_proposal.rs b/governance/program/tests/process_sign_off_proposal.rs index 99360fd5..7e3a1e45 100644 --- a/governance/program/tests/process_sign_off_proposal.rs +++ b/governance/program/tests/process_sign_off_proposal.rs @@ -15,15 +15,19 @@ async fn test_sign_off_proposal() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await @@ -69,15 +73,19 @@ async fn test_sign_off_proposal_with_signatory_must_sign_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let proposal_cookie = governance_test .with_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await diff --git a/governance/program/tests/process_withdraw_governing_tokens.rs b/governance/program/tests/process_withdraw_governing_tokens.rs index 45e9593a..1b3a7d3f 100644 --- a/governance/program/tests/process_withdraw_governing_tokens.rs +++ b/governance/program/tests/process_withdraw_governing_tokens.rs @@ -181,14 +181,17 @@ async fn test_withdraw_governing_tokens_with_unrelinquished_votes_error() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); let proposal_cookie = governance_test .with_signed_off_proposal(&token_owner_record_cookie, &mut account_governance_cookie) @@ -222,15 +225,19 @@ async fn test_withdraw_governing_tokens_after_relinquishing_vote() { let realm_cookie = governance_test.with_realm().await; let governed_account_cookie = governance_test.with_governed_account().await; - let mut account_governance_cookie = governance_test - .with_account_governance(&realm_cookie, &governed_account_cookie) - .await - .unwrap(); - let token_owner_record_cookie = governance_test .with_community_token_deposit(&realm_cookie) .await; + let mut account_governance_cookie = governance_test + .with_account_governance( + &realm_cookie, + &governed_account_cookie, + &token_owner_record_cookie, + ) + .await + .unwrap(); + let proposal_cookie = governance_test .with_signed_off_proposal(&token_owner_record_cookie, &mut account_governance_cookie) .await diff --git a/governance/program/tests/program_test/cookies.rs b/governance/program/tests/program_test/cookies.rs index 7b46c890..20460850 100644 --- a/governance/program/tests/program_test/cookies.rs +++ b/governance/program/tests/program_test/cookies.rs @@ -30,7 +30,7 @@ pub struct RealmCookie { } #[derive(Debug)] -pub struct TokeOwnerRecordCookie { +pub struct TokenOwnerRecordCookie { pub address: Pubkey, pub account: TokenOwnerRecord, @@ -46,7 +46,7 @@ pub struct TokeOwnerRecordCookie { pub governance_delegate: Keypair, } -impl TokeOwnerRecordCookie { +impl TokenOwnerRecordCookie { pub fn get_governance_authority(&self) -> &Keypair { self.governance_authority .as_ref() diff --git a/governance/program/tests/program_test/mod.rs b/governance/program/tests/program_test/mod.rs index 5abff270..b30beead 100644 --- a/governance/program/tests/program_test/mod.rs +++ b/governance/program/tests/program_test/mod.rs @@ -65,7 +65,7 @@ use self::{ cookies::{ GovernanceCookie, GovernedAccountCookie, GovernedMintCookie, GovernedProgramCookie, GovernedTokenCookie, ProposalCookie, ProposalInstructionCookie, RealmCookie, - TokeOwnerRecordCookie, TokenAccountCookie, VoteRecordCookie, + TokenAccountCookie, TokenOwnerRecordCookie, VoteRecordCookie, }, tools::NopOverride, }; @@ -137,8 +137,9 @@ impl GovernanceProgramTest { pub async fn with_realm(&mut self) -> RealmCookie { let config_args = RealmConfigArgs { use_council_mint: true, - use_custodian: true, + community_mint_max_vote_weight_source: MintMaxVoteWeightSource::FULL_SUPPLY_FRACTION, + min_community_tokens_to_create_governance: 10, }; self.with_realm_using_config_args(&config_args).await @@ -199,16 +200,15 @@ impl GovernanceProgramTest { }; let realm_authority = Keypair::new(); - let realm_custodian = Keypair::new(); let create_realm_instruction = create_realm( &self.program_id, &realm_authority.pubkey(), &community_token_mint_keypair.pubkey(), &self.context.payer.pubkey(), - Some(realm_custodian.pubkey()), council_token_mint_pubkey, name.clone(), + config_args.min_community_tokens_to_create_governance, config_args.community_mint_max_vote_weight_source.clone(), ); @@ -226,7 +226,9 @@ impl GovernanceProgramTest { config: RealmConfig { council_mint: council_token_mint_pubkey, reserved: [0; 8], - custodian: Some(realm_custodian.pubkey()), + + min_community_tokens_to_create_governance: config_args + .min_community_tokens_to_create_governance, community_mint_max_vote_weight_source: config_args .community_mint_max_vote_weight_source .clone(), @@ -255,17 +257,18 @@ impl GovernanceProgramTest { let council_mint = realm_cookie.account.config.council_mint.unwrap(); let realm_authority = Keypair::new(); - let realm_custodian = Keypair::new(); + let community_mint_max_vote_weight_source = MintMaxVoteWeightSource::FULL_SUPPLY_FRACTION; + let min_community_tokens_to_create_governance = 10; let create_realm_instruction = create_realm( &self.program_id, &realm_authority.pubkey(), &realm_cookie.account.community_mint, &self.context.payer.pubkey(), - Some(realm_custodian.pubkey()), Some(council_mint), name.clone(), + min_community_tokens_to_create_governance, community_mint_max_vote_weight_source, ); @@ -283,9 +286,10 @@ impl GovernanceProgramTest { config: RealmConfig { council_mint: Some(council_mint), reserved: [0; 8], - custodian: Some(realm_authority.pubkey()), + community_mint_max_vote_weight_source: MintMaxVoteWeightSource::FULL_SUPPLY_FRACTION, + min_community_tokens_to_create_governance, }, }; @@ -317,7 +321,7 @@ impl GovernanceProgramTest { pub async fn with_community_token_deposit( &mut self, realm_cookie: &RealmCookie, - ) -> TokeOwnerRecordCookie { + ) -> TokenOwnerRecordCookie { self.with_initial_governing_token_deposit( &realm_cookie.address, &realm_cookie.account.community_mint, @@ -332,7 +336,7 @@ impl GovernanceProgramTest { &mut self, realm_cookie: &RealmCookie, amount: u64, - ) -> TokeOwnerRecordCookie { + ) -> TokenOwnerRecordCookie { self.with_initial_governing_token_deposit( &realm_cookie.address, &realm_cookie.account.community_mint, @@ -346,7 +350,7 @@ impl GovernanceProgramTest { pub async fn with_subsequent_community_token_deposit( &mut self, realm_cookie: &RealmCookie, - token_owner_record_cookie: &TokeOwnerRecordCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, amount: u64, ) { self.with_subsequent_governing_token_deposit( @@ -363,7 +367,7 @@ impl GovernanceProgramTest { pub async fn with_subsequent_council_token_deposit( &mut self, realm_cookie: &RealmCookie, - token_owner_record_cookie: &TokeOwnerRecordCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, amount: u64, ) { self.with_subsequent_governing_token_deposit( @@ -381,7 +385,7 @@ impl GovernanceProgramTest { &mut self, realm_cookie: &RealmCookie, amount: u64, - ) -> TokeOwnerRecordCookie { + ) -> TokenOwnerRecordCookie { self.with_initial_governing_token_deposit( &realm_cookie.address, &realm_cookie.account.config.council_mint.unwrap(), @@ -395,7 +399,7 @@ impl GovernanceProgramTest { pub async fn with_council_token_deposit( &mut self, realm_cookie: &RealmCookie, - ) -> TokeOwnerRecordCookie { + ) -> TokenOwnerRecordCookie { self.with_initial_governing_token_deposit( &realm_cookie.address, &realm_cookie.account.config.council_mint.unwrap(), @@ -412,7 +416,7 @@ impl GovernanceProgramTest { governing_mint: &Pubkey, governing_mint_authority: &Keypair, amount: u64, - ) -> TokeOwnerRecordCookie { + ) -> TokenOwnerRecordCookie { let token_owner = Keypair::new(); let token_source = Keypair::new(); @@ -466,7 +470,7 @@ impl GovernanceProgramTest { let governance_delegate = Keypair::from_base58_string(&token_owner.to_base58_string()); - TokeOwnerRecordCookie { + TokenOwnerRecordCookie { address: token_owner_record_address, account, @@ -504,7 +508,7 @@ impl GovernanceProgramTest { realm: &Pubkey, governing_token_mint: &Pubkey, governing_token_mint_authority: &Keypair, - token_owner_record_cookie: &TokeOwnerRecordCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, amount: u64, ) { self.mint_tokens( @@ -537,7 +541,7 @@ impl GovernanceProgramTest { pub async fn with_community_governance_delegate( &mut self, realm_cookie: &RealmCookie, - token_owner_record_cookie: &mut TokeOwnerRecordCookie, + token_owner_record_cookie: &mut TokenOwnerRecordCookie, ) { self.with_governing_token_governance_delegate( realm_cookie, @@ -551,7 +555,7 @@ impl GovernanceProgramTest { pub async fn with_council_governance_delegate( &mut self, realm_cookie: &RealmCookie, - token_owner_record_cookie: &mut TokeOwnerRecordCookie, + token_owner_record_cookie: &mut TokenOwnerRecordCookie, ) { self.with_governing_token_governance_delegate( realm_cookie, @@ -566,7 +570,7 @@ impl GovernanceProgramTest { &mut self, realm_cookie: &RealmCookie, governing_token_mint: &Pubkey, - token_owner_record_cookie: &mut TokeOwnerRecordCookie, + token_owner_record_cookie: &mut TokenOwnerRecordCookie, ) { let new_governance_delegate = Keypair::new(); @@ -586,7 +590,7 @@ impl GovernanceProgramTest { pub async fn set_governance_delegate( &mut self, realm_cookie: &RealmCookie, - token_owner_record_cookie: &TokeOwnerRecordCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, signing_governance_authority: &Keypair, governing_token_mint: &Pubkey, new_governance_delegate: &Option, @@ -671,19 +675,12 @@ impl GovernanceProgramTest { None }; - let realm_custodian = if config_args.use_custodian { - let realm_custodian = Keypair::new(); - Some(realm_custodian.pubkey()) - } else { - None - }; - let mut set_realm_config_ix = set_realm_config( &self.program_id, &realm_cookie.address, &realm_cookie.realm_authority.as_ref().unwrap().pubkey(), council_token_mint, - realm_custodian, + config_args.min_community_tokens_to_create_governance, config_args.community_mint_max_vote_weight_source.clone(), ); @@ -692,7 +689,6 @@ impl GovernanceProgramTest { let default_signers = &[realm_cookie.realm_authority.as_ref().unwrap()]; let signers = signers_override.unwrap_or(default_signers); - realm_cookie.account.config.custodian = realm_custodian; realm_cookie.account.config.council_mint = council_token_mint; realm_cookie .account @@ -708,7 +704,7 @@ impl GovernanceProgramTest { pub async fn withdraw_community_tokens( &mut self, realm_cookie: &RealmCookie, - token_owner_record_cookie: &TokeOwnerRecordCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, ) -> Result<(), ProgramError> { self.withdraw_governing_tokens( realm_cookie, @@ -723,7 +719,7 @@ impl GovernanceProgramTest { pub async fn withdraw_council_tokens( &mut self, realm_cookie: &RealmCookie, - token_owner_record_cookie: &TokeOwnerRecordCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, ) -> Result<(), ProgramError> { self.withdraw_governing_tokens( realm_cookie, @@ -738,7 +734,7 @@ impl GovernanceProgramTest { async fn withdraw_governing_tokens( &mut self, realm_cookie: &RealmCookie, - token_owner_record_cookie: &TokeOwnerRecordCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, governing_token_mint: &Pubkey, governing_token_owner: &Keypair, @@ -831,10 +827,16 @@ impl GovernanceProgramTest { &mut self, realm_cookie: &RealmCookie, governed_account_cookie: &GovernedAccountCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, ) -> Result { let config = self.get_default_governance_config(); - self.with_account_governance_using_config(realm_cookie, governed_account_cookie, &config) - .await + self.with_account_governance_using_config( + realm_cookie, + governed_account_cookie, + token_owner_record_cookie, + &config, + ) + .await } #[allow(dead_code)] @@ -842,12 +844,14 @@ impl GovernanceProgramTest { &mut self, realm_cookie: &RealmCookie, governed_account_cookie: &GovernedAccountCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, governance_config: &GovernanceConfig, ) -> Result { let create_account_governance_instruction = create_account_governance( &self.program_id, &realm_cookie.address, &governed_account_cookie.address, + &token_owner_record_cookie.address, &self.context.payer.pubkey(), governance_config.clone(), ); @@ -953,10 +957,12 @@ impl GovernanceProgramTest { &mut self, realm_cookie: &RealmCookie, governed_program_cookie: &GovernedProgramCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, ) -> Result { self.with_program_governance_using_instruction( realm_cookie, governed_program_cookie, + token_owner_record_cookie, NopOverride, None, ) @@ -968,6 +974,7 @@ impl GovernanceProgramTest { &mut self, realm_cookie: &RealmCookie, governed_program_cookie: &GovernedProgramCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, instruction_override: F, signers_override: Option<&[&Keypair]>, ) -> Result { @@ -978,6 +985,7 @@ impl GovernanceProgramTest { &realm_cookie.address, &governed_program_cookie.address, &governed_program_cookie.upgrade_authority.pubkey(), + &token_owner_record_cookie.address, &self.context.payer.pubkey(), config.clone(), governed_program_cookie.transfer_upgrade_authority, @@ -1018,10 +1026,12 @@ impl GovernanceProgramTest { &mut self, realm_cookie: &RealmCookie, governed_mint_cookie: &GovernedMintCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, ) -> Result { self.with_mint_governance_using_instruction( realm_cookie, governed_mint_cookie, + token_owner_record_cookie, NopOverride, None, ) @@ -1033,6 +1043,7 @@ impl GovernanceProgramTest { &mut self, realm_cookie: &RealmCookie, governed_mint_cookie: &GovernedMintCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, instruction_override: F, signers_override: Option<&[&Keypair]>, ) -> Result { @@ -1043,6 +1054,7 @@ impl GovernanceProgramTest { &realm_cookie.address, &governed_mint_cookie.address, &governed_mint_cookie.mint_authority.pubkey(), + &token_owner_record_cookie.address, &self.context.payer.pubkey(), config.clone(), governed_mint_cookie.transfer_mint_authority, @@ -1083,10 +1095,12 @@ impl GovernanceProgramTest { &mut self, realm_cookie: &RealmCookie, governed_token_cookie: &GovernedTokenCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, ) -> Result { self.with_token_governance_using_instruction( realm_cookie, governed_token_cookie, + &token_owner_record_cookie, NopOverride, None, ) @@ -1098,6 +1112,7 @@ impl GovernanceProgramTest { &mut self, realm_cookie: &RealmCookie, governed_token_cookie: &GovernedTokenCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, instruction_override: F, signers_override: Option<&[&Keypair]>, ) -> Result { @@ -1108,6 +1123,7 @@ impl GovernanceProgramTest { &realm_cookie.address, &governed_token_cookie.address, &governed_token_cookie.token_owner.pubkey(), + &token_owner_record_cookie.address, &self.context.payer.pubkey(), config.clone(), governed_token_cookie.transfer_token_owner, @@ -1146,7 +1162,7 @@ impl GovernanceProgramTest { #[allow(dead_code)] pub async fn with_proposal( &mut self, - token_owner_record_cookie: &TokeOwnerRecordCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, governance_cookie: &mut GovernanceCookie, ) -> Result { self.with_proposal_using_instruction( @@ -1160,7 +1176,7 @@ impl GovernanceProgramTest { #[allow(dead_code)] pub async fn with_signed_off_proposal( &mut self, - token_owner_record_cookie: &TokeOwnerRecordCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, governance_cookie: &mut GovernanceCookie, ) -> Result { let proposal_cookie = self @@ -1180,7 +1196,7 @@ impl GovernanceProgramTest { #[allow(dead_code)] pub async fn with_proposal_using_instruction( &mut self, - token_owner_record_cookie: &TokeOwnerRecordCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, governance_cookie: &mut GovernanceCookie, instruction_override: F, ) -> Result { @@ -1264,7 +1280,7 @@ impl GovernanceProgramTest { pub async fn with_signatory( &mut self, proposal_cookie: &ProposalCookie, - token_owner_record_cookie: &TokeOwnerRecordCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, ) -> Result { let signatory = Keypair::new(); @@ -1309,7 +1325,7 @@ impl GovernanceProgramTest { pub async fn remove_signatory( &mut self, proposal_cookie: &ProposalCookie, - token_owner_record_cookie: &TokeOwnerRecordCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, signatory_record_cookie: &SignatoryRecordCookie, ) -> Result<(), ProgramError> { let remove_signatory_instruction = remove_signatory( @@ -1394,7 +1410,7 @@ impl GovernanceProgramTest { pub async fn relinquish_vote( &mut self, proposal_cookie: &ProposalCookie, - token_owner_record_cookie: &TokeOwnerRecordCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, ) -> Result<(), ProgramError> { self.relinquish_vote_using_instruction( proposal_cookie, @@ -1408,7 +1424,7 @@ impl GovernanceProgramTest { pub async fn relinquish_vote_using_instruction( &mut self, proposal_cookie: &ProposalCookie, - token_owner_record_cookie: &TokeOwnerRecordCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, instruction_override: F, ) -> Result<(), ProgramError> { let mut relinquish_vote_instruction = relinquish_vote( @@ -1436,7 +1452,7 @@ impl GovernanceProgramTest { pub async fn cancel_proposal( &mut self, proposal_cookie: &ProposalCookie, - token_owner_record_cookie: &TokeOwnerRecordCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, ) -> Result<(), ProgramError> { let cancel_proposal_instruction = cancel_proposal( &self.program_id, @@ -1458,7 +1474,7 @@ impl GovernanceProgramTest { pub async fn with_cast_vote( &mut self, proposal_cookie: &ProposalCookie, - token_owner_record_cookie: &TokeOwnerRecordCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, vote: Vote, ) -> Result { let vote_instruction = cast_vote( @@ -1512,7 +1528,7 @@ impl GovernanceProgramTest { pub async fn with_set_governance_config_instruction( &mut self, proposal_cookie: &mut ProposalCookie, - token_owner_record_cookie: &TokeOwnerRecordCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, governance_config: &GovernanceConfig, ) -> Result { let mut set_governance_config_ix = set_governance_config( @@ -1535,7 +1551,7 @@ impl GovernanceProgramTest { &mut self, governed_mint_cookie: &GovernedMintCookie, proposal_cookie: &mut ProposalCookie, - token_owner_record_cookie: &TokeOwnerRecordCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, index: Option, ) -> Result { let token_account_keypair = Keypair::new(); @@ -1570,7 +1586,7 @@ impl GovernanceProgramTest { &mut self, governed_token_cookie: &GovernedTokenCookie, proposal_cookie: &mut ProposalCookie, - token_owner_record_cookie: &TokeOwnerRecordCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, index: Option, ) -> Result { let token_account_keypair = Keypair::new(); @@ -1605,7 +1621,7 @@ impl GovernanceProgramTest { &mut self, governance_cookie: &GovernanceCookie, proposal_cookie: &mut ProposalCookie, - token_owner_record_cookie: &TokeOwnerRecordCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, ) -> Result { let program_buffer_keypair = Keypair::new(); let buffer_authority_keypair = Keypair::new(); @@ -1671,7 +1687,7 @@ impl GovernanceProgramTest { pub async fn with_nop_instruction( &mut self, proposal_cookie: &mut ProposalCookie, - token_owner_record_cookie: &TokeOwnerRecordCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, index: Option, ) -> Result { // Create NOP instruction as a placeholder @@ -1695,7 +1711,7 @@ impl GovernanceProgramTest { pub async fn with_instruction( &mut self, proposal_cookie: &mut ProposalCookie, - token_owner_record_cookie: &TokeOwnerRecordCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, index: Option, instruction: &mut Instruction, ) -> Result { @@ -1764,7 +1780,7 @@ impl GovernanceProgramTest { pub async fn remove_instruction( &mut self, proposal_cookie: &mut ProposalCookie, - token_owner_record_cookie: &TokeOwnerRecordCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, proposal_instruction_cookie: &ProposalInstructionCookie, ) -> Result<(), ProgramError> { let remove_instruction_instruction = remove_instruction( @@ -1808,7 +1824,7 @@ impl GovernanceProgramTest { pub async fn flag_instruction_error( &mut self, proposal_cookie: &ProposalCookie, - token_owner_record_cookie: &TokeOwnerRecordCookie, + token_owner_record_cookie: &TokenOwnerRecordCookie, proposal_instruction_cookie: &ProposalInstructionCookie, ) -> Result<(), ProgramError> { let governance_authority = token_owner_record_cookie.get_governance_authority();