Skip to content

Commit fe22d9b

Browse files
devwckdsaiintbrisson
authored andcommitted
feat: transfer fees to treasury (#78)
Closes CHAIN-60
1 parent 9457b3f commit fe22d9b

File tree

7 files changed

+77
-21
lines changed

7 files changed

+77
-21
lines changed

pallets/governance/src/application.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ use codec::{Decode, Encode, MaxEncodedLen};
44
use polkadot_sdk::frame_election_provider_support::Get;
55
use polkadot_sdk::frame_support::dispatch::DispatchResult;
66
use polkadot_sdk::frame_support::traits::Currency;
7-
use polkadot_sdk::frame_support::traits::WithdrawReasons;
87
use polkadot_sdk::frame_support::DebugNoBound;
98
use polkadot_sdk::sp_runtime::BoundedVec;
109
use polkadot_sdk::sp_std::vec::Vec;
@@ -69,10 +68,10 @@ pub fn submit_application<T: crate::Config>(
6968
let config = crate::GlobalGovernanceConfig::<T>::get();
7069
let cost = config.agent_application_cost;
7170

72-
let _ = <T as crate::Config>::Currency::withdraw(
71+
<T as crate::Config>::Currency::transfer(
7372
&payer,
73+
&crate::DaoTreasuryAddress::<T>::get(),
7474
cost,
75-
WithdrawReasons::except(WithdrawReasons::TIP),
7675
ExistenceRequirement::AllowDeath,
7776
)
7877
.map_err(|_| crate::Error::<T>::NotEnoughBalanceToApply)?;
@@ -145,10 +144,12 @@ pub fn accept_application<T: crate::Config>(application_id: u32) -> DispatchResu
145144
}
146145
});
147146

148-
// Pay the application cost back to the applicant
149-
// TODO: should this value be used?
150-
let _ =
151-
<T as crate::Config>::Currency::deposit_creating(&application.payer_key, application.cost);
147+
let _ = <T as crate::Config>::Currency::transfer(
148+
&crate::DaoTreasuryAddress::<T>::get(),
149+
&application.payer_key,
150+
application.cost,
151+
ExistenceRequirement::AllowDeath,
152+
);
152153

153154
crate::Pallet::<T>::deposit_event(crate::Event::<T>::ApplicationAccepted(application.id));
154155

@@ -169,8 +170,6 @@ pub fn deny_application<T: crate::Config>(application_id: u32) -> DispatchResult
169170
}
170171
});
171172

172-
// Application cost is discarded
173-
174173
crate::Pallet::<T>::deposit_event(crate::Event::<T>::ApplicationDenied(application.id));
175174

176175
Ok(())

pallets/governance/src/proposal.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ use crate::{GovernanceConfiguration, NotDelegatingVotingPower};
1111
use codec::{Decode, Encode, MaxEncodedLen};
1212
use polkadot_sdk::frame_election_provider_support::Get;
1313
use polkadot_sdk::frame_support::traits::Currency;
14-
use polkadot_sdk::frame_support::traits::WithdrawReasons;
1514
use polkadot_sdk::polkadot_sdk_frame::traits::CheckedAdd;
1615
use polkadot_sdk::sp_runtime::SaturatedConversion;
1716
use polkadot_sdk::sp_std::{collections::btree_set::BTreeSet, vec::Vec};
@@ -76,8 +75,12 @@ impl<T: crate::Config> Proposal<T> {
7675
}
7776

7877
fn execute_proposal(self) -> DispatchResult {
79-
let _ =
80-
<T as crate::Config>::Currency::deposit_creating(&self.proposer, self.proposal_cost);
78+
let _ = <T as crate::Config>::Currency::transfer(
79+
&crate::DaoTreasuryAddress::<T>::get(),
80+
&self.proposer,
81+
self.proposal_cost,
82+
ExistenceRequirement::AllowDeath,
83+
);
8184

8285
match self.data {
8386
ProposalData::GlobalParams(data) => {
@@ -378,13 +381,13 @@ fn add_proposal<T: crate::Config>(
378381
let config = GlobalGovernanceConfig::<T>::get();
379382

380383
let cost = config.proposal_cost;
381-
let _ = <T as crate::Config>::Currency::withdraw(
384+
<T as crate::Config>::Currency::transfer(
382385
&proposer,
386+
&crate::DaoTreasuryAddress::<T>::get(),
383387
cost,
384-
WithdrawReasons::except(WithdrawReasons::TIP),
385388
ExistenceRequirement::AllowDeath,
386389
)
387-
.map_err(|_| crate::Error::<T>::NotEnoughBalanceToPropose)?;
390+
.map_err(|_| crate::Error::<T>::NotEnoughBalanceToApply)?;
388391

389392
let proposal_id: u64 = crate::Proposals::<T>::iter()
390393
.count()

pallets/governance/tests/application.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
1+
use pallet_emission0::PendingEmission;
12
use pallet_governance::application::ApplicationStatus;
23
use pallet_governance::AgentApplications;
4+
use pallet_governance::DaoTreasuryAddress;
35
use pallet_governance::GlobalGovernanceConfig;
6+
use pallet_governance::TreasuryEmissionFee;
7+
use pallet_governance_api::GovernanceApi;
48
use polkadot_sdk::frame_support::assert_err;
9+
use polkadot_sdk::sp_runtime::Percent;
510
use test_utils::*;
611

712
#[test]
@@ -203,6 +208,10 @@ fn error_is_thrown_on_multiple_applications_same_key() {
203208
#[test]
204209
fn application_denied_doesnt_add_to_whitelist() {
205210
new_test_ext().execute_with(|| {
211+
PendingEmission::<Test>::set(0);
212+
TreasuryEmissionFee::<Test>::set(Percent::zero());
213+
let balance = get_balance(DaoTreasuryAddress::<Test>::get());
214+
206215
let key = 0;
207216
let adding_key = 1;
208217
pallet_governance::Curators::<Test>::insert(key, ());
@@ -249,12 +258,20 @@ fn application_denied_doesnt_add_to_whitelist() {
249258
application.status,
250259
ApplicationStatus::Resolved { accepted: false }
251260
);
261+
assert_eq!(
262+
get_balance(Test::dao_treasury_address()),
263+
balance + crate::GlobalGovernanceConfig::<Test>::get().agent_application_cost
264+
);
252265
});
253266
}
254267

255268
#[test]
256269
fn application_expires() {
257270
new_test_ext().execute_with(|| {
271+
PendingEmission::<Test>::set(0);
272+
TreasuryEmissionFee::<Test>::set(Percent::zero());
273+
let balance = get_balance(DaoTreasuryAddress::<Test>::get());
274+
258275
let key = 0;
259276
let adding_key = 1;
260277
pallet_governance::Curators::<Test>::insert(key, ());
@@ -285,6 +302,10 @@ fn application_expires() {
285302
let application =
286303
pallet_governance::AgentApplications::<Test>::get(application_id).unwrap();
287304
assert_eq!(application.status, ApplicationStatus::Expired);
305+
assert_eq!(
306+
get_balance(Test::dao_treasury_address()),
307+
balance + crate::GlobalGovernanceConfig::<Test>::get().agent_application_cost
308+
);
288309
});
289310
}
290311

pallets/governance/tests/voting.rs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1+
use pallet_emission0::PendingEmission;
12
use pallet_governance::{
23
config::GovernanceConfiguration,
34
proposal::{GlobalParamsData, ProposalStatus},
4-
DaoTreasuryAddress, Error, GlobalGovernanceConfig, Proposals,
5+
DaoTreasuryAddress, Error, GlobalGovernanceConfig, Proposals, TreasuryEmissionFee,
56
};
7+
use pallet_governance_api::GovernanceApi;
68
use polkadot_sdk::frame_support::traits::Get;
79
use polkadot_sdk::{frame_support::assert_err, sp_runtime::BoundedBTreeSet};
810
use polkadot_sdk::{frame_support::assert_ok, sp_runtime::Percent};
@@ -203,6 +205,10 @@ fn global_custom_proposal_is_accepted_correctly() {
203205
#[test]
204206
fn global_proposal_is_refused_correctly() {
205207
new_test_ext().execute_with(|| {
208+
PendingEmission::<Test>::set(0);
209+
TreasuryEmissionFee::<Test>::set(Percent::zero());
210+
let balance = get_balance(DaoTreasuryAddress::<Test>::get());
211+
206212
zero_min_burn();
207213
const FOR: u32 = 0;
208214
const AGAINST: u32 = 1;
@@ -235,6 +241,10 @@ fn global_proposal_is_refused_correctly() {
235241
stake_against: 10_000_000_000_000_000_000,
236242
}
237243
);
244+
assert_eq!(
245+
get_balance(Test::dao_treasury_address()),
246+
balance + crate::GlobalGovernanceConfig::<Test>::get().proposal_cost
247+
);
238248
});
239249
}
240250

@@ -454,6 +464,10 @@ fn creates_emission_proposal_and_it_expires() {
454464
new_test_ext().execute_with(|| {
455465
zero_min_burn();
456466

467+
PendingEmission::<Test>::set(0);
468+
TreasuryEmissionFee::<Test>::set(Percent::zero());
469+
let balance = get_balance(DaoTreasuryAddress::<Test>::get());
470+
457471
let default_proposal_expiration: u64 =
458472
<Test as pallet_governance::Config>::DefaultProposalExpiration::get();
459473

@@ -483,6 +497,10 @@ fn creates_emission_proposal_and_it_expires() {
483497
Proposals::<Test>::get(0).unwrap().status,
484498
ProposalStatus::Expired
485499
);
500+
assert_eq!(
501+
get_balance(Test::dao_treasury_address()),
502+
balance + crate::GlobalGovernanceConfig::<Test>::get().proposal_cost
503+
);
486504
});
487505
}
488506

pallets/torus0/src/agent.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use codec::{Decode, Encode, MaxEncodedLen};
33
use pallet_emission0_api::Emission0Api;
44
use pallet_governance_api::GovernanceApi;
55
use polkadot_sdk::frame_election_provider_support::Get;
6-
use polkadot_sdk::frame_support::traits::{Currency, ExistenceRequirement, WithdrawReasons};
6+
use polkadot_sdk::frame_support::traits::{Currency, ExistenceRequirement};
77
use polkadot_sdk::frame_support::DebugNoBound;
88
use polkadot_sdk::polkadot_sdk_frame::prelude::BlockNumberFor;
99
use polkadot_sdk::sp_runtime::DispatchError;
@@ -92,10 +92,11 @@ pub fn register<T: crate::Config>(
9292

9393
let burn = crate::Burn::<T>::get();
9494

95-
let _ = <T as crate::Config>::Currency::withdraw(
95+
// Registration cost is sent to treasury
96+
<T as crate::Config>::Currency::transfer(
9697
&payer,
98+
&<T as crate::Config>::Governance::dao_treasury_address(),
9799
burn,
98-
WithdrawReasons::except(WithdrawReasons::TIP),
99100
ExistenceRequirement::AllowDeath,
100101
)
101102
.map_err(|_| crate::Error::<T>::NotEnoughBalanceToRegisterAgent)?;

pallets/torus0/tests/agent.rs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,20 @@
1+
use pallet_governance_api::GovernanceApi;
12
use pallet_torus0::{Burn, Error};
23
use polkadot_sdk::{frame_support::assert_err, sp_core::Get, sp_runtime::Percent};
3-
use test_utils::{assert_ok, pallet_governance, Test};
4+
use test_utils::{
5+
assert_ok, get_balance,
6+
pallet_emission0::PendingEmission,
7+
pallet_governance::{self, DaoTreasuryAddress, TreasuryEmissionFee},
8+
Test,
9+
};
410

511
#[test]
612
fn register_correctly() {
713
test_utils::new_test_ext().execute_with(|| {
14+
PendingEmission::<Test>::set(0);
15+
TreasuryEmissionFee::<Test>::set(Percent::zero());
16+
let balance = get_balance(DaoTreasuryAddress::<Test>::get());
17+
818
let agent = 0;
919
let name = "agent".as_bytes().to_vec();
1020
let url = "idk://agent".as_bytes().to_vec();
@@ -27,6 +37,11 @@ fn register_correctly() {
2737
assert_eq!(agent.name.to_vec(), name);
2838
assert_eq!(agent.url.to_vec(), url);
2939
assert_eq!(agent.metadata.to_vec(), metadata);
40+
41+
assert_eq!(
42+
get_balance(Test::dao_treasury_address()),
43+
balance + Burn::<Test>::get()
44+
);
3045
});
3146
}
3247

xtask/src/build_spec.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,6 @@ fn grandpa(genesis: &mut Value) {
9191
)];
9292

9393
let key = key_name(b"Grandpa", b"Authorities");
94-
dbg!(&key);
9594

9695
let mut buf = Cursor::new(vec![0; grandpa.size_hint()]);
9796
grandpa.encode_to(&mut buf);

0 commit comments

Comments
 (0)