stellar_multicall/
contract.rs1use stellar_axelar_std::{contract, contractimpl, soroban_sdk, Env, Val, Vec};
2
3use crate::interface::MulticallInterface;
4use crate::types::FunctionCall;
5
6#[contract]
7pub struct Multicall;
8
9#[contractimpl]
10impl Multicall {
11 pub fn __constructor(_env: &Env) {}
12}
13
14#[contractimpl]
15impl MulticallInterface for Multicall {
16 fn multicall(env: &Env, function_calls: Vec<FunctionCall>) -> Vec<Val> {
17 let mut results = Vec::new(env);
18
19 for FunctionCall {
20 contract,
21 approver,
22 function,
23 args,
24 } in function_calls.into_iter()
25 {
26 approver.require_auth();
27
28 let result: Val = env.invoke_contract(&contract, &function, args.clone());
29
30 results.push_back(result);
31 }
32
33 results
34 }
35}