defuse/contract/
fees.rs

1use core::mem;
2use std::borrow::Cow;
3
4use defuse_core::{
5    events::DefuseIntentEmit,
6    fees::{FeeChangedEvent, FeeCollectorChangedEvent, Pips},
7};
8use near_plugins::{AccessControllable, Pausable, access_control_any, pause};
9use near_sdk::{AccountId, assert_one_yocto, near, require};
10
11use crate::fees::FeesManager;
12
13use super::{Contract, ContractExt, Role};
14
15#[near]
16impl FeesManager for Contract {
17    #[pause(name = "intents")]
18    #[access_control_any(roles(Role::DAO, Role::FeesManager))]
19    #[payable]
20    fn set_fee(&mut self, #[allow(unused_mut)] mut fee: Pips) {
21        assert_one_yocto();
22        require!(self.fees.fee != fee, "same");
23        mem::swap(&mut self.fees.fee, &mut fee);
24        FeeChangedEvent {
25            old_fee: fee,
26            new_fee: self.fees.fee,
27        }
28        .emit();
29    }
30
31    fn fee(&self) -> Pips {
32        self.fees.fee
33    }
34
35    #[pause(name = "intents")]
36    #[access_control_any(roles(Role::DAO, Role::FeesManager))]
37    #[payable]
38    fn set_fee_collector(&mut self, #[allow(unused_mut)] mut fee_collector: AccountId) {
39        assert_one_yocto();
40        require!(self.fees.fee_collector != fee_collector, "same");
41        mem::swap(&mut self.fees.fee_collector, &mut fee_collector);
42        FeeCollectorChangedEvent {
43            old_fee_collector: fee_collector.into(),
44            new_fee_collector: Cow::Borrowed(self.fees.fee_collector.as_ref()),
45        }
46        .emit();
47    }
48
49    fn fee_collector(&self) -> &AccountId {
50        &self.fees.fee_collector
51    }
52}