From fa07c21ad61869b95c1655ce092dffa638d39fc0 Mon Sep 17 00:00:00 2001 From: clint Date: Fri, 1 Dec 2023 16:40:29 +0800 Subject: [PATCH] Adjust multicall function --- src/contracts/multicall.cairo | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/contracts/multicall.cairo b/src/contracts/multicall.cairo index 3b4d877..ea9bbdc 100644 --- a/src/contracts/multicall.cairo +++ b/src/contracts/multicall.cairo @@ -73,24 +73,24 @@ mod Multicall { impl Multicall of super::IMulticall { fn multicall(ref self: ContractState, _targets: Array) -> Array { let mut results: Array = array![]; - let mut i = 0; - + let mut targets = _targets; loop { - if i == _targets.len() { - break; + match targets.pop_front() { + Option::Some(Call{address, + selector, + calldata }) => { + let returnData = starknet::call_contract_syscall( + address, selector, calldata.span() + ) + .unwrap_syscall(); + + // TODO: when Sierra has the ability to catch a revert to resume execution + // we should add false to the result to indicate a failure + results.append(MulticallResult { success: true, returnData: returnData }); + }, + Option::None => { break; } } - let Call{address, selector, calldata } = _targets[i].clone(); - let returnData = starknet::call_contract_syscall( - address: address, entry_point_selector: selector, calldata: calldata.span(), - ) - .unwrap_syscall(); - - // TODO: when Sierra has the ability to catch a revert to resume execution - // we should add false to the result to indicate a failure - results.append(MulticallResult { success: true, returnData: returnData }); - i += 1; }; - results }