1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
use eosio::*;
use eosio_cdt::*;
use std::marker::PhantomData;

#[eosio::action]
pub fn exec(
    executer: PhantomData<AccountName>,
    trx: PhantomData<Transaction<Vec<u8>>>,
) {
    require_auth(current_receiver());
    let mut ds = current_data_stream();
    let executer = ds.read::<AccountName>().expect("read");
    require_auth(executer);

    let id: TransactionId = {
        let now = current_time_point().as_micros() as u128;
        let value = u128::from(executer.as_u64()) << 64 | now;
        value.into()
    };

    let bytes = ds.as_remaining_bytes().unwrap();
    send_deferred_bytes(id, executer, bytes, false);
}

eosio::abi!(exec);