Governance: Min tokens to create governance (#2203)

* feat: add min_community_tokens_to_create_governance to config

* feat: add token owner record and governing mint to CreateAccountGovernance

* feat: add token owner record and governing mint to CreateMinGovernance

* feat: add token owner record and governing mint to CreateProgramGovernance

* feat: add token owner record and governing mint to CreateTokenGovernance

* feat: remove custodian

* fix: remove mint and update comments

* chore: make clippy happy

* chore: make clippy happy
This commit is contained in:
Sebastian Bor 2021-08-03 09:10:45 +01:00 committed by GitHub
parent f7286134bb
commit f6f5e9a619
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
32 changed files with 1050 additions and 578 deletions

2
Cargo.lock generated
View File

@ -170,7 +170,7 @@ dependencies = [
"arrayref",
"borsh",
"solana-program",
"spl-token 3.1.1",
"spl-token 3.2.0",
"thiserror",
"uint 0.8.5",
]

View File

@ -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<Pubkey>,
council_token_mint: Option<Pubkey>,
// 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<Pubkey>,
realm_custodian: Option<Pubkey>,
// 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,
},
};

View File

@ -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)?;

View File

@ -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)?;

View File

@ -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)?;

View File

@ -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,
},
};

View File

@ -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)?;

View File

@ -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())?;

View File

@ -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,
},
}
}

View File

@ -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<Pubkey>,
/// 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<Pubkey>,
}
/// Governance Realm Account
@ -77,7 +72,7 @@ pub struct Realm {
impl AccountMaxSize for Realm {
fn get_max_size(&self) -> Option<usize> {
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,
},
};

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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();

View File

@ -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();

View File

@ -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();

View File

@ -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;

View File

@ -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

View File

@ -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();

View File

@ -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

View File

@ -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();

View File

@ -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

View File

@ -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();

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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();

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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()

View File

@ -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<Pubkey>,
@ -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<GovernanceCookie, ProgramError> {
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<GovernanceCookie, ProgramError> {
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<GovernanceCookie, ProgramError> {
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<GovernanceCookie, ProgramError> {
@ -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<GovernanceCookie, ProgramError> {
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<GovernanceCookie, ProgramError> {
@ -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<GovernanceCookie, ProgramError> {
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<GovernanceCookie, ProgramError> {
@ -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<ProposalCookie, ProgramError> {
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<ProposalCookie, ProgramError> {
let proposal_cookie = self
@ -1180,7 +1196,7 @@ impl GovernanceProgramTest {
#[allow(dead_code)]
pub async fn with_proposal_using_instruction<F: Fn(&mut Instruction)>(
&mut self,
token_owner_record_cookie: &TokeOwnerRecordCookie,
token_owner_record_cookie: &TokenOwnerRecordCookie,
governance_cookie: &mut GovernanceCookie,
instruction_override: F,
) -> Result<ProposalCookie, ProgramError> {
@ -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<SignatoryRecordCookie, ProgramError> {
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<F: Fn(&mut 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<VoteRecordCookie, ProgramError> {
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<ProposalInstructionCookie, ProgramError> {
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<u16>,
) -> Result<ProposalInstructionCookie, ProgramError> {
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<u16>,
) -> Result<ProposalInstructionCookie, ProgramError> {
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<ProposalInstructionCookie, ProgramError> {
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<u16>,
) -> Result<ProposalInstructionCookie, ProgramError> {
// 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<u16>,
instruction: &mut Instruction,
) -> Result<ProposalInstructionCookie, ProgramError> {
@ -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();