defuse/
intents.rs

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    /// Adds access key for calling `execute_signed_intents`
20    /// with allowance passed as attached deposit via `#[payable]`
21    /// NOTE: requires 1yN for security purposes
22    fn add_relayer_key(&mut self, public_key: PublicKey) -> Promise;
23
24    fn do_add_relayer_key(&mut self, public_key: PublicKey);
25
26    /// NOTE: requires 1yN for security purposes
27    fn delete_relayer_key(&mut self, public_key: PublicKey) -> Promise;
28}