Skip to content

Commit

Permalink
pgf: can add only one steward, steward added must be auproposal author
Browse files Browse the repository at this point in the history
  • Loading branch information
Fraccaman committed Aug 14, 2023
1 parent dc7975c commit ec96bb4
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 21 deletions.
2 changes: 1 addition & 1 deletion core/src/ledger/governance/cli/onchain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,7 @@ impl PgfAction {
matches!(self, PgfAction::Add)
}
}

/// Pgf fundings
#[derive(
Debug, Clone, BorshSerialize, BorshDeserialize, Serialize, Deserialize,
Expand Down
16 changes: 10 additions & 6 deletions core/src/ledger/governance/cli/validation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -223,20 +223,24 @@ pub fn is_valid_default_proposal_data(

pub fn is_valid_pgf_stewards_data(
data: &Vec<PgfSteward>,
author: &Address
author: &Address,
) -> Result<(), ProposalValidation> {
if !data.is_empty() {
let total_added_stewards = data.iter().filter(|steward| steward.action.is_add()).cloned().collect::<Vec<PgfSteward>>();
let total_added_stewards = data
.iter()
.filter(|steward| steward.action.is_add())
.cloned()
.collect::<Vec<PgfSteward>>();
if total_added_stewards.len() > 1 {
return Err(ProposalValidation::InvalidPgfStewardsExtraData)
} else if total_added_stewards.len() == 0 {
Err(ProposalValidation::InvalidPgfStewardsExtraData)
} else if total_added_stewards.is_empty() {
Ok(())
} else {
let steward_address = &total_added_stewards.get(0).unwrap().address;
if steward_address.eq(author) {
return Ok(())
return Ok(());
} else {
return Err(ProposalValidation::InvalidPgfStewardsExtraData)
return Err(ProposalValidation::InvalidPgfStewardsExtraData);
}
}
} else {
Expand Down
32 changes: 18 additions & 14 deletions shared/src/ledger/governance/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ use std::collections::BTreeSet;

use borsh::BorshDeserialize;
use namada_core::ledger::governance::storage::keys as gov_storage;
use namada_core::ledger::governance::storage::proposal::{ProposalType, AddRemove};
use namada_core::ledger::governance::storage::proposal::{
AddRemove, ProposalType,
};
use namada_core::ledger::governance::storage::vote::StorageProposalVote;
use namada_core::ledger::governance::utils::is_valid_validator_voting_period;
use namada_core::ledger::storage_api::governance::is_proposal_accepted;
Expand Down Expand Up @@ -282,30 +284,32 @@ where

match proposal_type {
ProposalType::PGFSteward(stewards) => {
let steward_added = stewards.iter().filter_map(|steward| {
match steward {
let steward_added = stewards
.iter()
.filter_map(|steward| match steward {
AddRemove::Add(address) => Some(address),
AddRemove::Remove(_) => None,
}
}).cloned().collect::<Vec<Address>>();
})
.cloned()
.collect::<Vec<Address>>();

if steward_added.len() > 1 {
return Ok(false)
Ok(false)
} else if steward_added.is_empty() {
return Ok(stewards.len() < MAX_PGF_ACTIONS)
return Ok(stewards.len() < MAX_PGF_ACTIONS);
} else {
match steward_added.get(0) {
Some(address) => {
let author_key = gov_storage::get_author_key(proposal_id);
let author = self.force_read(&author_key, ReadType::Post)?;
return Ok(stewards.len() < MAX_PGF_ACTIONS && address.eq(&author))
let author_key =
gov_storage::get_author_key(proposal_id);
let author =
self.force_read(&author_key, ReadType::Post)?;
return Ok(stewards.len() < MAX_PGF_ACTIONS
&& address.eq(&author));
}
None => {
return Ok(false)
},
None => return Ok(false),
}
}

}
ProposalType::PGFPayment(payments) => {
if payments.len() < MAX_PGF_ACTIONS {
Expand Down

0 comments on commit ec96bb4

Please sign in to comment.