1use defuse_core::payload::multi::MultiPayload;
2
3use near_plugins::AccessControllable;
4use near_sdk::{Promise, PublicKey, ext_contract};
5
6use crate::{fees::FeesManager, salts::SaltManager};
7
8pub use crate::simulation_output::{SimulationOutput, StateOutput};
9
10#[ext_contract(ext_intents)]
11pub trait Intents: FeesManager + SaltManager {
12 fn execute_intents(&mut self, signed: Vec<MultiPayload>);
13
14 fn simulate_intents(&self, signed: Vec<MultiPayload>) -> SimulationOutput;
15}
16
17#[ext_contract(ext_relayer_keys)]
18pub trait RelayerKeys: AccessControllable {
19 fn add_relayer_key(&mut self, public_key: PublicKey) -> Promise;
23
24 fn do_add_relayer_key(&mut self, public_key: PublicKey);
25
26 fn delete_relayer_key(&mut self, public_key: PublicKey) -> Promise;
28}