Skip to content
This repository has been archived by the owner on Aug 2, 2024. It is now read-only.

Commit

Permalink
fix CI and convert From<&CallInfo> for FunctionInvocation to TryFrom
Browse files Browse the repository at this point in the history
  • Loading branch information
greged93 committed Dec 8, 2023
1 parent 71cdfa3 commit 14b0b62
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 13 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/pull-request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,10 @@ jobs:
runs-on: ubuntu-latest
needs: madara_commands
env:
SNCAST_VERSION: "0.8.3"
SNCAST_VERSION: "0.12.0"
SCARB_VERSION: "2.3.1"
steps:
- uses: keep-starknet-strange/starknet-foundry-compatibility-tests@fix/action
- uses: keep-starknet-strange/starknet-foundry-compatibility-tests@main

# https://github.com/keep-starknet-strange/madara/issues/1097
# benchmark:
Expand Down
22 changes: 17 additions & 5 deletions crates/pallets/starknet/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
#![cfg_attr(not(feature = "std"), no_std)]
#![allow(clippy::large_enum_variant)]

use blockifier::transaction::objects::TransactionExecutionResult;
/// Starknet pallet.
/// Definition of the pallet's runtime storage items, events, errors, and dispatchable
/// functions.
Expand Down Expand Up @@ -1118,16 +1119,26 @@ impl<T: Config> Pallet<T> {
disable_fee_charge,
)?;

fn get_function_invocation(call_info: Option<&CallInfo>) -> Option<FunctionInvocation> {
call_info.map(FunctionInvocation::from)
fn get_function_invocation(
call_info: Option<&CallInfo>,
) -> TransactionExecutionResult<Option<FunctionInvocation>> {
call_info.map(FunctionInvocation::try_from).transpose()
}

let mut results = vec![];
for (tx, res) in transactions.iter().zip(execution_results.iter()) {
match res {
Ok(tx_exec_info) => {
let validate_invocation = get_function_invocation(tx_exec_info.validate_call_info.as_ref());
let fee_transfer_invocation = get_function_invocation(tx_exec_info.fee_transfer_call_info.as_ref());
let validate_invocation = get_function_invocation(tx_exec_info.validate_call_info.as_ref())
.map_err(|err| {
log::error!("Failed to convert validate call info to function invocation: {}", err);
Error::<T>::TransactionExecutionFailed
})?;
let fee_transfer_invocation = get_function_invocation(tx_exec_info.fee_transfer_call_info.as_ref())
.map_err(|err| {
log::error!("Failed to convert fee transfer call info to function invocation: {}", err);
Error::<T>::TransactionExecutionFailed
})?;
let transaction_trace = match tx {
UserTransaction::Invoke(_) => TransactionTrace::Invoke(InvokeTransactionTrace {
validate_invocation,
Expand All @@ -1151,7 +1162,8 @@ impl<T: Config> Pallet<T> {
.execute_call_info
.as_ref()
.ok_or(Error::<T>::TransactionExecutionFailed)?
.into(),
.try_into()
.map_err(|_| Error::<T>::TransactionExecutionFailed)?,

fee_transfer_invocation,
})
Expand Down
2 changes: 1 addition & 1 deletion crates/pallets/starknet/src/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -79,5 +79,5 @@ pub fn convert_call_info_to_execute_invocation<T>(
revert_reason: revert_error.ok_or(Error::MissingRevertReason)?.clone(),
}));
}
Ok(ExecuteInvocation::Success(call_info.into()))
Ok(ExecuteInvocation::Success(call_info.try_into().map_err(|_| Error::TransactionExecutionFailed)?))
}
20 changes: 15 additions & 5 deletions crates/primitives/simulations/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ use alloc::string::String;
use alloc::vec::Vec;

use blockifier::execution::entry_point::{CallInfo, OrderedL2ToL1Message};
use blockifier::transaction::errors::TransactionExecutionError;
use blockifier::transaction::objects::TransactionExecutionResult;
use mp_felt::{Felt252Wrapper, UfeHex};
use starknet_api::api_core::EthAddress;
use starknet_api::deprecated_contract_class::EntryPointType;
Expand Down Expand Up @@ -158,13 +160,21 @@ pub struct FunctionInvocation {
pub messages: Vec<MessageToL1>,
}

impl From<&CallInfo> for FunctionInvocation {
fn from(call_info: &CallInfo) -> FunctionInvocation {
impl TryFrom<&CallInfo> for FunctionInvocation {
type Error = TransactionExecutionError;

fn try_from(call_info: &CallInfo) -> TransactionExecutionResult<FunctionInvocation> {
let messages = ordered_l2_to_l1_messages(call_info);

let inner_calls = call_info.inner_calls.iter().map(|call| call.into()).collect();
let inner_calls = call_info
.inner_calls
.iter()
.map(|call| call.try_into())
.collect::<Result<_, TransactionExecutionError>>()?;

call_info.get_sorted_l2_to_l1_payloads_length()?;

FunctionInvocation {
Ok(FunctionInvocation {
contract_address: call_info.call.storage_address.0.0.into(),
entry_point_selector: call_info.call.entry_point_selector.0.into(),
calldata: call_info.call.calldata.0.iter().map(|x| (*x).into()).collect(),
Expand All @@ -176,7 +186,7 @@ impl From<&CallInfo> for FunctionInvocation {
calls: inner_calls,
events: call_info.execution.events.iter().map(|event| event.event.clone()).collect(),
messages,
}
})
}
}

Expand Down

0 comments on commit 14b0b62

Please sign in to comment.