defuse/contract/
admin_call.rs1use defuse_near_promise::{NearPromise, actions::NearAction};
2use near_plugins::{AccessControllable, access_control_any};
3use near_sdk::{env, near, require};
4
5use super::{Contract, ContractExt, Role};
6use crate::admin_call::AdminCallManager;
7
8#[near]
9impl AdminCallManager for Contract {
10 #[access_control_any(roles(Role::DAO))]
11 #[payable]
12 fn admin_call(&mut self, promises: Vec<NearPromise>) {
13 require!(
14 !env::attached_deposit().is_zero(),
15 "requires attached deposit of at least 1 yoctoNEAR"
16 );
17
18 for p in promises {
19 require!(
20 p.actions.iter().all(|action| {
21 matches!(
22 action,
23 NearAction::FunctionCall(_) | NearAction::Transfer(_)
24 )
25 }),
26 "unsupported action"
27 );
28
29 p.build().detach();
30 }
31 }
32}