//! > Test trivial pow2 by add loop
//! > test_runner_name
test_profiling
//! > cairo_code
fn pow2_14000() {
pow2_by_add_loop(14000, 1);
}
fn pow2_by_add_loop(n: felt252, x: felt252) -> felt252 {
if n == 0 {
return x;
} else {
return pow2_by_add_loop(n - 1, x + x);
}
}
//! > max_stack_trace_depth
10
//! > function_name
pow2_14000
//! > expected_profiling_info
Weight by sierra statement:
statement 22: 42000 (withdraw_gas([0], [1]) { fallthrough([4], [5]) 48([6], [7]) })
statement 25: 14000 (felt252_is_zero([8]) { fallthrough() 35([9]) })
statement 42: 13999 (store_temp<RangeCheck>([4]) -> ([4]))
statement 43: 13999 (store_temp<GasBuiltin>([13]) -> ([13]))
statement 44: 13999 (store_temp<felt252>([15]) -> ([15]))
statement 45: 13999 (store_temp<felt252>([17]) -> ([17]))
statement 46: 13999 (function_call<user@test::pow2_by_add_loop>([4], [13], [15], [17]) -> ([18], [19], [20]))
statement 47: 13999 (return([18], [19], [20]))
statement 13: 3 (store_temp<core::panics::PanicResult::<((),)>>([10]) -> ([10]))
statement 33: 3 (store_temp<core::panics::PanicResult::<(core::felt252,)>>([12]) -> ([12]))
statement 58: 3 (withdraw_gas([0], [1]) { fallthrough([2], [3]) 69([4], [5]) })
statement 1: 1 (store_temp<RangeCheck>([0]) -> ([0]))
statement 2: 1 (store_temp<GasBuiltin>([1]) -> ([1]))
statement 3: 1 (function_call<user@test::pow2_by_add_loop{14000, 1, }>([0], [1]) -> ([2], [3], [4]))
statement 4: 1 (enum_match<core::panics::PanicResult::<(core::felt252,)>>([4]) { fallthrough([5]) 15([6]) })
statement 11: 1 (store_temp<RangeCheck>([2]) -> ([2]))
statement 12: 1 (store_temp<GasBuiltin>([7]) -> ([7]))
statement 14: 1 (return([2], [7], [10]))
statement 31: 1 (store_temp<RangeCheck>([4]) -> ([4]))
statement 32: 1 (store_temp<GasBuiltin>([10]) -> ([10]))
statement 34: 1 (return([4], [10], [12]))
statement 63: 1 (store_temp<RangeCheck>([2]) -> ([2]))
statement 64: 1 (store_temp<GasBuiltin>([6]) -> ([6]))
statement 65: 1 (store_temp<felt252>([7]) -> ([7]))
statement 66: 1 (store_temp<felt252>([8]) -> ([8]))
statement 67: 1 (function_call<user@test::pow2_by_add_loop>([2], [6], [7], [8]) -> ([9], [10], [11]))
statement 68: 1 (return([9], [10], [11]))
Weight by concrete libfunc:
libfunc withdraw_gas: 42003
libfunc store_temp<felt252>: 28000
libfunc store_temp<GasBuiltin>: 14003
libfunc store_temp<RangeCheck>: 14003
libfunc felt252_is_zero: 14000
libfunc function_call<user@test::pow2_by_add_loop>: 14000
libfunc store_temp<core::panics::PanicResult::<((),)>>: 3
libfunc store_temp<core::panics::PanicResult::<(core::felt252,)>>: 3
libfunc enum_match<core::panics::PanicResult::<(core::felt252,)>>: 1
libfunc function_call<user@test::pow2_by_add_loop{14000, 1, }>: 1
return: 14002
Weight by generic libfunc:
libfunc store_temp: 56012
libfunc withdraw_gas: 42003
libfunc function_call: 14001
libfunc felt252_is_zero: 14000
libfunc enum_match: 1
return: 14002
Weight by user function (inc. generated):
function test::pow2_by_add_loop: 140000
function test::pow2_14000: 10
function test::pow2_by_add_loop{14000, 1, }: 9
Weight by original user function (exc. generated):
function test::pow2_by_add_loop: 140000
function test::pow2_14000: 10
function test::pow2_by_add_loop{14000, 1, }: 9
Weight by Cairo function:
function lib.cairo::pow2_by_add_loop: 126009
function core::Felt252PartialEq::eq: 14000
function lib.cairo::pow2_14000: 10
Weight by Sierra stack trace:
test::pow2_14000: 140019
test::pow2_14000 -> test::pow2_by_add_loop{14000, 1, }: 140009
test::pow2_14000 -> test::pow2_by_add_loop{14000, 1, } -> test::pow2_by_add_loop: 140000
test::pow2_14000 -> test::pow2_by_add_loop{14000, 1, } -> test::pow2_by_add_loop -> test::pow2_by_add_loop: 139990
test::pow2_14000 -> test::pow2_by_add_loop{14000, 1, } -> test::pow2_by_add_loop -> test::pow2_by_add_loop -> test::pow2_by_add_loop: 139980
test::pow2_14000 -> test::pow2_by_add_loop{14000, 1, } -> test::pow2_by_add_loop -> test::pow2_by_add_loop -> test::pow2_by_add_loop -> test::pow2_by_add_loop: 139970
test::pow2_14000 -> test::pow2_by_add_loop{14000, 1, } -> test::pow2_by_add_loop -> test::pow2_by_add_loop -> test::pow2_by_add_loop -> test::pow2_by_add_loop -> test::pow2_by_add_loop: 139960
test::pow2_14000 -> test::pow2_by_add_loop{14000, 1, } -> test::pow2_by_add_loop -> test::pow2_by_add_loop -> test::pow2_by_add_loop -> test::pow2_by_add_loop -> test::pow2_by_add_loop -> test::pow2_by_add_loop: 139950
test::pow2_14000 -> test::pow2_by_add_loop{14000, 1, } -> test::pow2_by_add_loop -> test::pow2_by_add_loop -> test::pow2_by_add_loop -> test::pow2_by_add_loop -> test::pow2_by_add_loop -> test::pow2_by_add_loop -> test::pow2_by_add_loop: 139940
test::pow2_14000 -> test::pow2_by_add_loop{14000, 1, } -> test::pow2_by_add_loop -> test::pow2_by_add_loop -> test::pow2_by_add_loop -> test::pow2_by_add_loop -> test::pow2_by_add_loop -> test::pow2_by_add_loop -> test::pow2_by_add_loop -> test::pow2_by_add_loop: 139930
test::pow2_14000 -> test::pow2_by_add_loop{14000, 1, } -> test::pow2_by_add_loop -> test::pow2_by_add_loop -> test::pow2_by_add_loop -> test::pow2_by_add_loop -> test::pow2_by_add_loop -> test::pow2_by_add_loop -> test::pow2_by_add_loop -> test::pow2_by_add_loop -> test::pow2_by_add_loop: 139920
Weight by Cairo stack trace:
test::pow2_14000: 140019
//! > ==========================================================================
//! > Test deserialization for calling `__validate__` with 2 calls
//! > test_runner_name
test_profiling
//! > cairo_code
#[starknet::contract(account)]
mod test_contract {
use starknet::account::Call;
#[storage]
struct Storage {}
#[external(v0)]
fn __validate__(ref self: ContractState, calls: Array<Call>) {}
#[external(v0)]
fn __execute__(ref self: ContractState, mut calls: Array<Call>) -> Array<Span<felt252>> {
array![]
}
}
fn validate_call() {
let serialized_args = array![
0x2, // Array with 2 `Call`s.
// Call 1.
0xb, // to.
0x219209e083275171774dab1df80982e9df2096516f06319c5c6d71ae0a8480c, // selector.
0x3, // calldata length.
0x7a6f98c03379b9513ca84cca1373ff452a7462a3b61598f0af5bb27ad7f76d1, // calldata 0.
0x4db5d32, // calldata 1.
0x0, // calldata 2.
// Call 2.
0xb, // to.
0x2c0f7bf2d6cf5304c29171bf493feb222fef84bdaf17805a6574b0c2e8bcc87, // selector.
0x9, // calldata length.
0x4db5d32, // calldata 0.
0x0, // calldata 1.
0x896ba264a31df2, // calldata 2.
0x0, // calldata 3.
0x2, // calldata 4.
0x53c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8, // calldata 5.
0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7, // calldata 6.
0x54767f773cc172172c3afc5265bd0a76089c24cdef409635d27ac1a1fa96ca8, // calldata 7.
0x65586264 // calldata 8.
]
.span();
test_contract::__wrapper____validate__(serialized_args);
}
//! > function_name
validate_call
//! > expected_profiling_info
Weight by sierra statement:
statement 419: 14 (contract_address_try_from_felt252([0], [7]) { fallthrough([8], [9]) 497([10]) })
statement 437: 10 (array_slice<felt252>([19], [23], [22], [24]) { fallthrough([25], [26]) 473([27]) })
statement 446: 10 (array_slice<felt252>([31], [35], [20], [32]) { fallthrough([36], [37]) 459([38]) })
statement 457: 10 (store_temp<core::option::Option::<core::starknet::account::Call>>([44]) -> ([44]))
statement 327: 9 (withdraw_gas([0], [1]) { fallthrough([5], [6]) 370([7], [8]) })
statement 349: 8 (array_append<core::starknet::account::Call>([3], [18]) -> ([21]))
statement 431: 8 (u32_try_from_felt252([8], [18]) { fallthrough([19], [20]) 479([21]) })
statement 339: 6 (store_temp<core::panics::PanicResult::<(core::array::Span::<core::felt252>, core::option::Option::<core::array::Array::<core::starknet::account::Call>>)>>([14]) -> ([14]))
statement 443: 6 (u32_overflowing_sub([25], [29], [30]) { fallthrough([31], [32]) 465([33], [34]) })
statement 344: 4 (store_temp<core::array::Span::<core::felt252>>([2]) -> ([2]))
statement 354: 4 (store_temp<core::array::Span::<core::felt252>>([16]) -> ([16]))
statement 355: 4 (store_temp<Array<core::starknet::account::Call>>([21]) -> ([21]))
statement 414: 4 (array_snapshot_pop_front<felt252>([2]) { fallthrough([3], [4]) 501([5]) })
statement 421: 4 (store_temp<Snapshot<Array<felt252>>>([3]) -> ([3]))
statement 422: 4 (array_snapshot_pop_front<felt252>([3]) { fallthrough([11], [12]) 492([13]) })
statement 424: 4 (store_temp<Snapshot<Array<felt252>>>([11]) -> ([11]))
statement 425: 4 (array_snapshot_pop_front<felt252>([11]) { fallthrough([14], [15]) 486([16]) })
statement 430: 4 (store_temp<Snapshot<Array<felt252>>>([14]) -> ([14]))
statement 456: 4 (store_temp<core::array::Span::<core::felt252>>([41]) -> ([41]))
statement 1: 3 (withdraw_gas([0], [1]) { fallthrough([3], [4]) 131([5], [6]) })
statement 83: 3 (array_snapshot_pop_front<felt252>([64]) { fallthrough([65], [66]) 94([67]) })
statement 103: 3 (store_temp<core::panics::PanicResult::<((),)>>([73]) -> ([73]))
statement 330: 3 (felt252_is_zero([9]) { fallthrough() 341([10]) })
statement 63: 2 (store_temp<Snapshot<Array<felt252>>>([47]) -> ([47]))
statement 64: 2 (array_snapshot_pop_front<felt252>([47]) { fallthrough([48], [49]) 119([50]) })
statement 72: 2 (store_temp<core::array::Span::<core::felt252>>([54]) -> ([54]))
statement 73: 2 (store_temp<Array<core::starknet::account::Call>>([53]) -> ([53]))
statement 343: 2 (store_temp<RangeCheck>([5]) -> ([5]))
statement 345: 2 (function_call<user@core::starknet::account::CallSerde::deserialize>([5], [2]) -> ([15], [16], [17]))
statement 346: 2 (enum_match<core::option::Option::<core::starknet::account::Call>>([17]) { fallthrough([18]) 359([19]) })
statement 352: 2 (store_temp<RangeCheck>([15]) -> ([15]))
statement 353: 2 (store_temp<GasBuiltin>([20]) -> ([20]))
statement 356: 2 (store_temp<felt252>([23]) -> ([23]))
statement 357: 2 (function_call<user@core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop>>([15], [20], [16], [21], [23]) -> ([24], [25], [26]))
statement 358: 2 (return([24], [25], [26]))
statement 418: 2 (store_temp<felt252>([7]) -> ([7]))
statement 429: 2 (store_temp<felt252>([18]) -> ([18]))
statement 436: 2 (store_temp<u32>([22]) -> ([22]))
statement 442: 2 (store_temp<u32>([29]) -> ([29]))
statement 447: 2 (branch_align() -> ())
statement 455: 2 (store_temp<RangeCheck>([36]) -> ([36]))
statement 458: 2 (return([36], [41], [44]))
statement 7: 1 (array_new<felt252>() -> ([11]))
statement 9: 1 (store_temp<felt252>([12]) -> ([12]))
statement 10: 1 (array_append<felt252>([11], [12]) -> ([13]))
statement 12: 1 (store_temp<felt252>([14]) -> ([14]))
statement 13: 1 (array_append<felt252>([13], [14]) -> ([15]))
statement 15: 1 (store_temp<felt252>([16]) -> ([16]))
statement 16: 1 (array_append<felt252>([15], [16]) -> ([17]))
statement 18: 1 (store_temp<felt252>([18]) -> ([18]))
statement 19: 1 (array_append<felt252>([17], [18]) -> ([19]))
statement 21: 1 (store_temp<felt252>([20]) -> ([20]))
statement 22: 1 (array_append<felt252>([19], [20]) -> ([21]))
statement 24: 1 (store_temp<felt252>([22]) -> ([22]))
statement 25: 1 (array_append<felt252>([21], [22]) -> ([23]))
statement 27: 1 (store_temp<felt252>([24]) -> ([24]))
statement 28: 1 (array_append<felt252>([23], [24]) -> ([25]))
statement 29: 1 (store_temp<felt252>([8]) -> ([8]))
statement 30: 1 (array_append<felt252>([25], [8]) -> ([26]))
statement 32: 1 (store_temp<felt252>([27]) -> ([27]))
statement 33: 1 (array_append<felt252>([26], [27]) -> ([28]))
statement 35: 1 (store_temp<felt252>([29]) -> ([29]))
statement 36: 1 (array_append<felt252>([28], [29]) -> ([30]))
statement 37: 1 (store_temp<felt252>([9]) -> ([9]))
statement 38: 1 (array_append<felt252>([30], [9]) -> ([31]))
statement 40: 1 (store_temp<felt252>([32]) -> ([32]))
statement 41: 1 (array_append<felt252>([31], [32]) -> ([33]))
statement 43: 1 (store_temp<felt252>([34]) -> ([34]))
statement 44: 1 (array_append<felt252>([33], [34]) -> ([35]))
statement 45: 1 (store_temp<felt252>([10]) -> ([10]))
statement 46: 1 (array_append<felt252>([35], [10]) -> ([36]))
statement 47: 1 (store_temp<felt252>([7]) -> ([7]))
statement 48: 1 (array_append<felt252>([36], [7]) -> ([37]))
statement 50: 1 (store_temp<felt252>([38]) -> ([38]))
statement 51: 1 (array_append<felt252>([37], [38]) -> ([39]))
statement 53: 1 (store_temp<felt252>([40]) -> ([40]))
statement 54: 1 (array_append<felt252>([39], [40]) -> ([41]))
statement 56: 1 (store_temp<felt252>([42]) -> ([42]))
statement 57: 1 (array_append<felt252>([41], [42]) -> ([43]))
statement 59: 1 (store_temp<felt252>([44]) -> ([44]))
statement 60: 1 (array_append<felt252>([43], [44]) -> ([45]))
statement 68: 1 (array_new<core::starknet::account::Call>() -> ([53]))
statement 70: 1 (store_temp<RangeCheck>([3]) -> ([3]))
statement 71: 1 (store_temp<GasBuiltin>([4]) -> ([4]))
statement 74: 1 (store_temp<felt252>([52]) -> ([52]))
statement 75: 1 (function_call<user@core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop>>([3], [4], [54], [53], [52]) -> ([55], [56], [57]))
statement 76: 1 (enum_match<core::panics::PanicResult::<(core::array::Span::<core::felt252>, core::option::Option::<core::array::Array::<core::starknet::account::Call>>)>>([57]) { fallthrough([58]) 112([59]) })
statement 79: 1 (enum_match<core::option::Option::<core::array::Array::<core::starknet::account::Call>>>([61]) { fallthrough([62]) 105([63]) })
statement 100: 1 (store_temp<RangeCheck>([55]) -> ([55]))
statement 101: 1 (store_temp<GasBuiltin>([70]) -> ([70]))
statement 102: 1 (store_temp<System>([2]) -> ([2]))
statement 104: 1 (return([55], [70], [2], [73]))
statement 337: 1 (store_temp<RangeCheck>([5]) -> ([5]))
statement 338: 1 (store_temp<GasBuiltin>([11]) -> ([11]))
statement 340: 1 (return([5], [11], [14]))
Weight by concrete libfunc:
libfunc store_temp<felt252>: 26
libfunc array_slice<felt252>: 20
libfunc array_append<felt252>: 19
libfunc array_snapshot_pop_front<felt252>: 17
libfunc contract_address_try_from_felt252: 14
libfunc store_temp<Snapshot<Array<felt252>>>: 14
libfunc store_temp<core::array::Span::<core::felt252>>: 14
libfunc withdraw_gas: 12
libfunc store_temp<core::option::Option::<core::starknet::account::Call>>: 10
libfunc store_temp<RangeCheck>: 9
libfunc array_append<core::starknet::account::Call>: 8
libfunc u32_try_from_felt252: 8
libfunc store_temp<Array<core::starknet::account::Call>>: 6
libfunc store_temp<core::panics::PanicResult::<(core::array::Span::<core::felt252>, core::option::Option::<core::array::Array::<core::starknet::account::Call>>)>>: 6
libfunc u32_overflowing_sub: 6
libfunc store_temp<GasBuiltin>: 5
libfunc store_temp<u32>: 4
libfunc felt252_is_zero: 3
libfunc function_call<user@core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop>>: 3
libfunc store_temp<core::panics::PanicResult::<((),)>>: 3
libfunc branch_align: 2
libfunc enum_match<core::option::Option::<core::starknet::account::Call>>: 2
libfunc function_call<user@core::starknet::account::CallSerde::deserialize>: 2
libfunc array_new<core::starknet::account::Call>: 1
libfunc array_new<felt252>: 1
libfunc enum_match<core::option::Option::<core::array::Array::<core::starknet::account::Call>>>: 1
libfunc enum_match<core::panics::PanicResult::<(core::array::Span::<core::felt252>, core::option::Option::<core::array::Array::<core::starknet::account::Call>>)>>: 1
libfunc store_temp<System>: 1
return: 6
Weight by generic libfunc:
libfunc store_temp: 98
libfunc array_append: 27
libfunc array_slice: 20
libfunc array_snapshot_pop_front: 17
libfunc contract_address_try_from_felt252: 14
libfunc withdraw_gas: 12
libfunc u32_try_from_felt252: 8
libfunc u32_overflowing_sub: 6
libfunc function_call: 5
libfunc enum_match: 4
libfunc felt252_is_zero: 3
libfunc array_new: 2
libfunc branch_align: 2
return: 6
Weight by user function (inc. generated):
function core::starknet::account::CallSerde::deserialize: 100
function test::validate_call: 67
function core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop>: 57
Weight by original user function (exc. generated):
function core::starknet::account::CallSerde::deserialize: 100
function test::validate_call: 67
function core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop>: 57
Weight by Cairo function:
function core::array::ArrayImpl::append: 46
function core::array::deserialize_array_helper: 46
function core::array::SpanFelt252Serde::deserialize: 24
function core::starknet::account::CallSerde::deserialize: 18
function core::starknet::contract_address::ContractAddressSerde::deserialize: 16
function core::integer::Felt252TryIntoU32::try_into: 14
function core::Felt252Serde::deserialize: 12
function core::array::SpanImpl::pop_front: 12
function core::array::ArraySerde::deserialize: 8
function core::integer::u32_checked_sub: 8
function lib.cairo::validate_call: 7
function contract::__wrapper____validate__: 4
function core::Felt252PartialEq::eq: 3
function core::array::SpanImpl::is_empty: 3
function core::array::ArrayImpl::new: 2
function core::option::OptionTraitImpl::expect: 1
Weight by Sierra stack trace:
test::validate_call: 224
test::validate_call -> core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop>: 157
test::validate_call -> core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop> -> core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop>: 85
test::validate_call -> core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop> -> core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop> -> core::starknet::account::CallSerde::deserialize: 50
test::validate_call -> core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop> -> core::starknet::account::CallSerde::deserialize: 50
test::validate_call -> core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop> -> core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop> -> core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop>: 13
Weight by Cairo stack trace:
test::validate_call: 224
test::validate_call -> core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop>: 157
test::validate_call -> core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop> -> core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop>: 85
test::validate_call -> core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop> -> core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop> -> core::starknet::account::CallSerde::deserialize: 50
test::validate_call -> core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop> -> core::starknet::account::CallSerde::deserialize: 50
test::validate_call -> core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop> -> core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop> -> core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop>: 13
//! > ==========================================================================
//! > Test deserialization for calling `__validate__` with 1 call
//! > test_runner_name
test_profiling
//! > cairo_code
#[starknet::contract(account)]
mod test_contract {
use starknet::account::Call;
#[storage]
struct Storage {}
#[external(v0)]
fn __validate__(ref self: ContractState, calls: Array<Call>) {}
#[external(v0)]
fn __execute__(ref self: ContractState, mut calls: Array<Call>) -> Array<Span<felt252>> {
array![]
}
}
fn validate_call() {
let serialized_args = array![
0x1, // Array with a single `Call`.
// Call 1.
0xb, // to.
0x219209e083275171774dab1df80982e9df2096516f06319c5c6d71ae0a8480c, // selector.
0x3, // calldata length.
0x7a6f98c03379b9513ca84cca1373ff452a7462a3b61598f0af5bb27ad7f76d1, // calldata 0.
0x4db5d32, // calldata 1.
0x0 // calldata 2.
]
.span();
test_contract::__wrapper____validate__(serialized_args);
}
//! > function_name
validate_call
//! > expected_profiling_info
Weight by sierra statement:
statement 383: 7 (contract_address_try_from_felt252([0], [7]) { fallthrough([8], [9]) 461([10]) })
statement 291: 6 (withdraw_gas([0], [1]) { fallthrough([5], [6]) 334([7], [8]) })
statement 303: 6 (store_temp<core::panics::PanicResult::<(core::array::Span::<core::felt252>, core::option::Option::<core::array::Array::<core::starknet::account::Call>>)>>([14]) -> ([14]))
statement 401: 5 (array_slice<felt252>([19], [23], [22], [24]) { fallthrough([25], [26]) 437([27]) })
statement 410: 5 (array_slice<felt252>([31], [35], [20], [32]) { fallthrough([36], [37]) 423([38]) })
statement 421: 5 (store_temp<core::option::Option::<core::starknet::account::Call>>([44]) -> ([44]))
statement 313: 4 (array_append<core::starknet::account::Call>([3], [18]) -> ([21]))
statement 395: 4 (u32_try_from_felt252([8], [18]) { fallthrough([19], [20]) 443([21]) })
statement 1: 3 (withdraw_gas([0], [1]) { fallthrough([3], [4]) 95([5], [6]) })
statement 47: 3 (array_snapshot_pop_front<felt252>([40]) { fallthrough([41], [42]) 58([43]) })
statement 67: 3 (store_temp<core::panics::PanicResult::<((),)>>([49]) -> ([49]))
statement 407: 3 (u32_overflowing_sub([25], [29], [30]) { fallthrough([31], [32]) 429([33], [34]) })
statement 27: 2 (store_temp<Snapshot<Array<felt252>>>([23]) -> ([23]))
statement 28: 2 (array_snapshot_pop_front<felt252>([23]) { fallthrough([24], [25]) 83([26]) })
statement 36: 2 (store_temp<core::array::Span::<core::felt252>>([30]) -> ([30]))
statement 37: 2 (store_temp<Array<core::starknet::account::Call>>([29]) -> ([29]))
statement 294: 2 (felt252_is_zero([9]) { fallthrough() 305([10]) })
statement 308: 2 (store_temp<core::array::Span::<core::felt252>>([2]) -> ([2]))
statement 318: 2 (store_temp<core::array::Span::<core::felt252>>([16]) -> ([16]))
statement 319: 2 (store_temp<Array<core::starknet::account::Call>>([21]) -> ([21]))
statement 378: 2 (array_snapshot_pop_front<felt252>([2]) { fallthrough([3], [4]) 465([5]) })
statement 385: 2 (store_temp<Snapshot<Array<felt252>>>([3]) -> ([3]))
statement 386: 2 (array_snapshot_pop_front<felt252>([3]) { fallthrough([11], [12]) 456([13]) })
statement 388: 2 (store_temp<Snapshot<Array<felt252>>>([11]) -> ([11]))
statement 389: 2 (array_snapshot_pop_front<felt252>([11]) { fallthrough([14], [15]) 450([16]) })
statement 394: 2 (store_temp<Snapshot<Array<felt252>>>([14]) -> ([14]))
statement 420: 2 (store_temp<core::array::Span::<core::felt252>>([41]) -> ([41]))
statement 3: 1 (array_new<felt252>() -> ([7]))
statement 5: 1 (store_temp<felt252>([8]) -> ([8]))
statement 6: 1 (array_append<felt252>([7], [8]) -> ([9]))
statement 8: 1 (store_temp<felt252>([10]) -> ([10]))
statement 9: 1 (array_append<felt252>([9], [10]) -> ([11]))
statement 11: 1 (store_temp<felt252>([12]) -> ([12]))
statement 12: 1 (array_append<felt252>([11], [12]) -> ([13]))
statement 14: 1 (store_temp<felt252>([14]) -> ([14]))
statement 15: 1 (array_append<felt252>([13], [14]) -> ([15]))
statement 17: 1 (store_temp<felt252>([16]) -> ([16]))
statement 18: 1 (array_append<felt252>([15], [16]) -> ([17]))
statement 20: 1 (store_temp<felt252>([18]) -> ([18]))
statement 21: 1 (array_append<felt252>([17], [18]) -> ([19]))
statement 23: 1 (store_temp<felt252>([20]) -> ([20]))
statement 24: 1 (array_append<felt252>([19], [20]) -> ([21]))
statement 32: 1 (array_new<core::starknet::account::Call>() -> ([29]))
statement 34: 1 (store_temp<RangeCheck>([3]) -> ([3]))
statement 35: 1 (store_temp<GasBuiltin>([4]) -> ([4]))
statement 38: 1 (store_temp<felt252>([28]) -> ([28]))
statement 39: 1 (function_call<user@core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop>>([3], [4], [30], [29], [28]) -> ([31], [32], [33]))
statement 40: 1 (enum_match<core::panics::PanicResult::<(core::array::Span::<core::felt252>, core::option::Option::<core::array::Array::<core::starknet::account::Call>>)>>([33]) { fallthrough([34]) 76([35]) })
statement 43: 1 (enum_match<core::option::Option::<core::array::Array::<core::starknet::account::Call>>>([37]) { fallthrough([38]) 69([39]) })
statement 64: 1 (store_temp<RangeCheck>([31]) -> ([31]))
statement 65: 1 (store_temp<GasBuiltin>([46]) -> ([46]))
statement 66: 1 (store_temp<System>([2]) -> ([2]))
statement 68: 1 (return([31], [46], [2], [49]))
statement 301: 1 (store_temp<RangeCheck>([5]) -> ([5]))
statement 302: 1 (store_temp<GasBuiltin>([11]) -> ([11]))
statement 304: 1 (return([5], [11], [14]))
statement 307: 1 (store_temp<RangeCheck>([5]) -> ([5]))
statement 309: 1 (function_call<user@core::starknet::account::CallSerde::deserialize>([5], [2]) -> ([15], [16], [17]))
statement 310: 1 (enum_match<core::option::Option::<core::starknet::account::Call>>([17]) { fallthrough([18]) 323([19]) })
statement 316: 1 (store_temp<RangeCheck>([15]) -> ([15]))
statement 317: 1 (store_temp<GasBuiltin>([20]) -> ([20]))
statement 320: 1 (store_temp<felt252>([23]) -> ([23]))
statement 321: 1 (function_call<user@core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop>>([15], [20], [16], [21], [23]) -> ([24], [25], [26]))
statement 322: 1 (return([24], [25], [26]))
statement 382: 1 (store_temp<felt252>([7]) -> ([7]))
statement 393: 1 (store_temp<felt252>([18]) -> ([18]))
statement 400: 1 (store_temp<u32>([22]) -> ([22]))
statement 406: 1 (store_temp<u32>([29]) -> ([29]))
statement 411: 1 (branch_align() -> ())
statement 419: 1 (store_temp<RangeCheck>([36]) -> ([36]))
statement 422: 1 (return([36], [41], [44]))
Weight by concrete libfunc:
libfunc array_snapshot_pop_front<felt252>: 11
libfunc store_temp<felt252>: 11
libfunc array_slice<felt252>: 10
libfunc withdraw_gas: 9
libfunc store_temp<Snapshot<Array<felt252>>>: 8
libfunc store_temp<core::array::Span::<core::felt252>>: 8
libfunc array_append<felt252>: 7
libfunc contract_address_try_from_felt252: 7
libfunc store_temp<RangeCheck>: 6
libfunc store_temp<core::panics::PanicResult::<(core::array::Span::<core::felt252>, core::option::Option::<core::array::Array::<core::starknet::account::Call>>)>>: 6
libfunc store_temp<core::option::Option::<core::starknet::account::Call>>: 5
libfunc array_append<core::starknet::account::Call>: 4
libfunc store_temp<Array<core::starknet::account::Call>>: 4
libfunc store_temp<GasBuiltin>: 4
libfunc u32_try_from_felt252: 4
libfunc store_temp<core::panics::PanicResult::<((),)>>: 3
libfunc u32_overflowing_sub: 3
libfunc felt252_is_zero: 2
libfunc function_call<user@core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop>>: 2
libfunc store_temp<u32>: 2
libfunc array_new<core::starknet::account::Call>: 1
libfunc array_new<felt252>: 1
libfunc branch_align: 1
libfunc enum_match<core::option::Option::<core::array::Array::<core::starknet::account::Call>>>: 1
libfunc enum_match<core::option::Option::<core::starknet::account::Call>>: 1
libfunc enum_match<core::panics::PanicResult::<(core::array::Span::<core::felt252>, core::option::Option::<core::array::Array::<core::starknet::account::Call>>)>>: 1
libfunc function_call<user@core::starknet::account::CallSerde::deserialize>: 1
libfunc store_temp<System>: 1
return: 4
Weight by generic libfunc:
libfunc store_temp: 58
libfunc array_append: 11
libfunc array_snapshot_pop_front: 11
libfunc array_slice: 10
libfunc withdraw_gas: 9
libfunc contract_address_try_from_felt252: 7
libfunc u32_try_from_felt252: 4
libfunc enum_match: 3
libfunc function_call: 3
libfunc u32_overflowing_sub: 3
libfunc array_new: 2
libfunc felt252_is_zero: 2
libfunc branch_align: 1
return: 4
Weight by user function (inc. generated):
function core::starknet::account::CallSerde::deserialize: 50
function test::validate_call: 43
function core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop>: 35
Weight by original user function (exc. generated):
function core::starknet::account::CallSerde::deserialize: 50
function test::validate_call: 43
function core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop>: 35
Weight by Cairo function:
function core::array::deserialize_array_helper: 29
function core::array::ArrayImpl::append: 18
function core::array::SpanFelt252Serde::deserialize: 12
function core::starknet::account::CallSerde::deserialize: 9
function core::array::ArraySerde::deserialize: 8
function core::array::SpanImpl::pop_front: 8
function core::starknet::contract_address::ContractAddressSerde::deserialize: 8
function core::integer::Felt252TryIntoU32::try_into: 7
function lib.cairo::validate_call: 7
function core::Felt252Serde::deserialize: 6
function contract::__wrapper____validate__: 4
function core::integer::u32_checked_sub: 4
function core::array::SpanImpl::is_empty: 3
function core::Felt252PartialEq::eq: 2
function core::array::ArrayImpl::new: 2
function core::option::OptionTraitImpl::expect: 1
Weight by Sierra stack trace:
test::validate_call: 128
test::validate_call -> core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop>: 85
test::validate_call -> core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop> -> core::starknet::account::CallSerde::deserialize: 50
test::validate_call -> core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop> -> core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop>: 13
Weight by Cairo stack trace:
test::validate_call: 128
test::validate_call -> core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop>: 85
test::validate_call -> core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop> -> core::starknet::account::CallSerde::deserialize: 50
test::validate_call -> core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop> -> core::array::deserialize_array_helper::<core::starknet::account::Call, core::starknet::account::CallSerde, core::starknet::account::CallDrop>: 13
//! > ==========================================================================
//! > Test ecdsa validation.
//! > test_runner_name
test_profiling
//! > cairo_code
fn ecdsa_call() {
let message_hash = 0x503f4bea29baee10b22a7f10bdc82dda071c977c1f25b8f3973d34e6b03b2c;
let public_key = 0x7b7454acbe7845da996377f85eb0892044d75ae95d04d3325a391951f35d2ec;
let signature_r = 0xbe96d72eb4f94078192c2e84d5230cde2a70f4b45c8797e2c907acff5060bb;
let signature_s = 0x677ae6bba6daf00d2631fab14c8acf24be6579f9d9e98f67aa7f2770e57a1f5;
core::ecdsa::check_ecdsa_signature(:message_hash, :public_key, :signature_r, :signature_s);
}
//! > function_name
ecdsa_call
//! > expected_profiling_info
Weight by sierra statement:
statement 56: 14 (ec_point_from_x_nz([0], [3]) { fallthrough([18], [19]) 151([20]) })
statement 59: 14 (ec_point_from_x_nz([18], [21]) { fallthrough([22], [23]) 143([24]) })
statement 66: 12 (ec_state_try_finalize_nz([28]) { fallthrough([29]) 135() })
statement 78: 12 (ec_state_try_finalize_nz([37]) { fallthrough([38]) 129() })
statement 84: 12 (ec_state_try_finalize_nz([41]) { fallthrough([42]) 100() })
statement 105: 12 (ec_state_try_finalize_nz([49]) { fallthrough([50]) 124() })
statement 82: 10 (ec_state_add([39], [40]) -> ([41]))
statement 103: 10 (ec_state_add([35], [48]) -> ([49]))
statement 61: 7 (ec_state_init() -> ([25]))
statement 64: 5 (ec_state_add_mul([1], [26], [5], [23]) -> ([27], [28]))
statement 73: 5 (ec_state_add_mul([27], [33], [2], [32]) -> ([34], [35]))
statement 75: 5 (ec_state_add_mul([34], [25], [4], [19]) -> ([36], [37]))
statement 65: 3 (store_temp<EcState>([28]) -> ([28]))
statement 76: 3 (store_temp<EcState>([37]) -> ([37]))
statement 77: 3 (store_temp<EcState>([35]) -> ([35]))
statement 83: 3 (store_temp<EcState>([41]) -> ([41]))
statement 104: 3 (store_temp<EcState>([49]) -> ([49]))
statement 63: 2 (store_temp<NonZero<EcPoint>>([23]) -> ([23]))
statement 72: 2 (store_temp<NonZero<EcPoint>>([32]) -> ([32]))
statement 74: 2 (store_temp<NonZero<EcPoint>>([19]) -> ([19]))
statement 102: 2 (store_temp<NonZero<EcPoint>>([48]) -> ([48]))
statement 4: 1 (store_temp<RangeCheck>([0]) -> ([0]))
statement 5: 1 (store_temp<EcOp>([1]) -> ([1]))
statement 6: 1 (store_temp<felt252>([2]) -> ([2]))
statement 7: 1 (store_temp<felt252>([3]) -> ([3]))
statement 8: 1 (store_temp<felt252>([4]) -> ([4]))
statement 9: 1 (store_temp<felt252>([5]) -> ([5]))
statement 10: 1 (function_call<user@core::ecdsa::check_ecdsa_signature>([0], [1], [2], [3], [4], [5]) -> ([6], [7], [8]))
statement 12: 1 (store_temp<RangeCheck>([6]) -> ([6]))
statement 13: 1 (store_temp<EcOp>([7]) -> ([7]))
statement 14: 1 (return([6], [7]))
statement 16: 1 (felt252_is_zero([6]) { fallthrough() 23([7]) })
statement 29: 1 (store_temp<felt252>([11]) -> ([11]))
statement 30: 1 (felt252_is_zero([11]) { fallthrough() 40([12]) })
statement 44: 1 (store_temp<felt252>([16]) -> ([16]))
statement 45: 1 (felt252_is_zero([16]) { fallthrough() 54([17]) })
statement 90: 1 (store_temp<felt252>([46]) -> ([46]))
statement 91: 1 (felt252_is_zero([46]) { fallthrough() 97([47]) })
statement 99: 1 (jump() { 101() })
statement 110: 1 (store_temp<felt252>([53]) -> ([53]))
statement 111: 1 (felt252_is_zero([53]) { fallthrough() 119([54]) })
statement 115: 1 (store_temp<RangeCheck>([22]) -> ([22]))
statement 116: 1 (store_temp<EcOp>([36]) -> ([36]))
statement 117: 1 (store_temp<core::bool>([56]) -> ([56]))
statement 118: 1 (return([22], [36], [56]))
Weight by concrete libfunc:
libfunc ec_state_try_finalize_nz: 48
libfunc ec_point_from_x_nz: 28
libfunc ec_state_add: 20
libfunc ec_state_add_mul: 15
libfunc store_temp<EcState>: 15
libfunc store_temp<NonZero<EcPoint>>: 8
libfunc store_temp<felt252>: 8
libfunc ec_state_init: 7
libfunc felt252_is_zero: 5
libfunc store_temp<EcOp>: 3
libfunc store_temp<RangeCheck>: 3
libfunc function_call<user@core::ecdsa::check_ecdsa_signature>: 1
libfunc jump: 1
libfunc store_temp<core::bool>: 1
return: 2
Weight by generic libfunc:
libfunc ec_state_try_finalize_nz: 48
libfunc store_temp: 38
libfunc ec_point_from_x_nz: 28
libfunc ec_state_add: 20
libfunc ec_state_add_mul: 15
libfunc ec_state_init: 7
libfunc felt252_is_zero: 5
libfunc function_call: 1
libfunc jump: 1
return: 2
Weight by user function (inc. generated):
function core::ecdsa::check_ecdsa_signature: 155
function test::ecdsa_call: 10
Weight by original user function (exc. generated):
function core::ecdsa::check_ecdsa_signature: 155
function test::ecdsa_call: 10
Weight by Cairo function:
function core::ec::EcStateImpl::finalize_nz: 63
function core::ec::EcPointImpl::new_nz_from_x: 28
function core::ec::EcStateImpl::add_mul: 21
function core::Felt252PartialEq::eq: 14
function core::ec::EcStateImpl::sub: 12
function core::ec::EcStateImpl::add: 10
function lib.cairo::ecdsa_call: 10
function core::ec::EcStateImpl::init: 7
Weight by Sierra stack trace:
test::ecdsa_call: 165
test::ecdsa_call -> core::ecdsa::check_ecdsa_signature: 155
Weight by Cairo stack trace:
test::ecdsa_call: 165
test::ecdsa_call -> core::ecdsa::check_ecdsa_signature: 155
//! > ==========================================================================
//! > Test erc20_transfer
//! > test_runner_name
test_profiling
//! > cairo_code
use starknet::ContractAddress;
#[starknet::interface]
trait IERC20<TContractState> {
fn transfer(ref self: TContractState, recipient: ContractAddress, amount: u256);
}
#[starknet::contract]
mod erc_20 {
use core::num::traits::Zero;
use starknet::storage::Map;
use starknet::{ContractAddress, get_caller_address};
#[storage]
struct Storage {
name: felt252,
symbol: felt252,
decimals: u8,
total_supply: u256,
balances: Map<ContractAddress, u256>,
allowances: Map<(ContractAddress, ContractAddress), u256>,
}
#[event]
#[derive(Drop, starknet::Event)]
enum Event {
Transfer: Transfer,
Approval: Approval,
}
#[derive(Drop, starknet::Event)]
struct Transfer {
from: ContractAddress,
to: ContractAddress,
value: u256,
}
#[derive(Drop, starknet::Event)]
struct Approval {
owner: ContractAddress,
spender: ContractAddress,
value: u256,
}
#[abi(embed_v0)]
impl IERC20Impl of super::IERC20<ContractState> {
fn transfer(ref self: ContractState, recipient: ContractAddress, amount: u256) {
let sender = get_caller_address();
self.transfer_helper(sender, recipient, amount);
}
}
#[generate_trait]
impl StorageImpl of StorageTrait {
fn transfer_helper(
ref self: ContractState,
sender: ContractAddress,
recipient: ContractAddress,
amount: u256,
) {
assert(!Zero::is_zero(@sender), 'ERC20: transfer from 0');
assert(!Zero::is_zero(@recipient), 'ERC20: transfer to 0');
self.balances.write(sender, self.balances.read(sender) - amount);
self.balances.write(recipient, self.balances.read(recipient) + amount);
self.emit(Transfer { from: sender, to: recipient, value: amount });
}
}
}
fn erc20_transfer() {
const CONTRACT_ADDRESS: ContractAddress = 2_felt252.try_into().unwrap();
starknet::testing::set_caller_address(CONTRACT_ADDRESS);
erc_20::__external::transfer(array![1, 0, 0].span());
}
//! > function_name
erc20_transfer
//! > expected_profiling_info
Weight by sierra statement:
statement 724: 14 (storage_read_syscall([1], [2], [9], [7]) { fallthrough([10], [11], [12]) 786([13], [14], [15]) })
statement 734: 14 (storage_read_syscall([10], [11], [8], [22]) { fallthrough([23], [24], [25]) 759([26], [27], [28]) })
statement 272: 10 (storage_base_address_from_felt252([0], [28]) -> ([29], [30]))
statement 349: 10 (storage_base_address_from_felt252([67], [85]) -> ([86], [87]))
statement 374: 10 (storage_base_address_from_felt252([86], [112]) -> ([113], [114]))
statement 446: 10 (storage_base_address_from_felt252([146], [163]) -> ([164], [165]))
statement 50: 9 (withdraw_gas([1], [2]) { fallthrough([5], [6]) 210([7], [8]) })
statement 522: 9 (emit_event_syscall([210], [178], [237], [238]) { fallthrough([239], [240]) 535([241], [242], [243]) })
statement 356: 8 (storage_write_syscall([68], [36], [92], [90], [88]) { fallthrough([93], [94]) 636([95], [96], [97]) })
statement 366: 8 (storage_write_syscall([93], [94], [102], [101], [98]) { fallthrough([103], [104]) 617([105], [106], [107]) })
statement 452: 8 (storage_write_syscall([147], [120], [169], [168], [166]) { fallthrough([170], [171]) 560([172], [173], [174]) })
statement 459: 8 (storage_write_syscall([170], [171], [91], [176], [175]) { fallthrough([177], [178]) 546([179], [180], [181]) })
statement 58: 7 (contract_address_try_from_felt252([5], [14]) { fallthrough([15], [16]) 191([17]) })
statement 747: 6 (store_temp<core::panics::PanicResult::<(core::integer::u256,)>>([37]) -> ([37]))
statement 94: 5 (get_execution_info_v3_syscall([6], [3]) { fallthrough([43], [44], [45]) 137([46], [47], [48]) })
statement 467: 5 (store_temp<test::erc_20::Event>([187]) -> ([187]))
statement 727: 4 (u128s_from_felt252([0], [12]) { fallthrough([16], [17]) 769([18], [19], [20]) })
statement 737: 4 (u128s_from_felt252([16], [25]) { fallthrough([29], [30]) 749([31], [32], [33]) })
statement 37: 3 (store_temp<core::panics::PanicResult::<((),)>>([28]) -> ([28]))
statement 77: 3 (array_snapshot_pop_front<felt252>([28]) { fallthrough([38], [39]) 92([40]) })
statement 127: 3 (store_temp<core::panics::PanicResult::<(core::array::Span::<core::felt252>,)>>([70]) -> ([70]))
statement 288: 3 (u128_overflowing_sub([34], [42], [46]) { fallthrough([47], [48]) 298([49], [50]) })
statement 307: 3 (u128_overflowing_sub([54], [41], [61]) { fallthrough([62], [63]) 315([64], [65]) })
statement 387: 3 (u128_overflowing_add([118], [126], [45]) { fallthrough([127], [128]) 397([129], [130]) })
statement 405: 3 (u128_overflowing_add([134], [125], [44]) { fallthrough([141], [142]) 413([143], [144]) })
statement 533: 3 (store_temp<core::panics::PanicResult::<(test::erc_20::ContractState, ())>>([247]) -> ([247]))
statement 1: 2 (const_as_box<Const<Tuple<felt252>, Const<felt252, 2>>, 0>() -> ([4]))
statement 4: 2 (store_temp<core::array::Span::<core::felt252>>([6]) -> ([6]))
statement 24: 2 (store_temp<core::array::Span::<core::felt252>>([17]) -> ([17]))
statement 53: 2 (array_snapshot_pop_front<felt252>([9]) { fallthrough([10], [11]) 197([12]) })
statement 60: 2 (store_temp<Snapshot<Array<felt252>>>([10]) -> ([10]))
statement 61: 2 (array_snapshot_pop_front<felt252>([10]) { fallthrough([18], [19]) 177([20]) })
statement 66: 2 (u128s_from_felt252([15], [22]) { fallthrough([23], [24]) 168([25], [26], [27]) })
statement 68: 2 (store_temp<Snapshot<Array<felt252>>>([18]) -> ([18]))
statement 69: 2 (array_snapshot_pop_front<felt252>([18]) { fallthrough([28], [29]) 160([30]) })
statement 74: 2 (u128s_from_felt252([23], [32]) { fallthrough([33], [34]) 150([35], [36], [37]) })
statement 76: 2 (store_temp<Snapshot<Array<felt252>>>([28]) -> ([28]))
statement 111: 2 (store_temp<core::integer::u256>([49]) -> ([49]))
statement 270: 2 (pedersen([2], [26], [19]) -> ([27], [28]))
statement 347: 2 (pedersen([27], [83], [82]) -> ([84], [85]))
statement 372: 2 (pedersen([84], [110], [109]) -> ([111], [112]))
statement 444: 2 (pedersen([111], [25], [161]) -> ([162], [163]))
statement 490: 2 (store_temp<Array<felt252>>([205]) -> ([211]))
statement 491: 2 (store_temp<Array<felt252>>([209]) -> ([212]))
statement 723: 2 (store_temp<u32>([9]) -> ([9]))
statement 726: 2 (store_temp<felt252>([12]) -> ([12]))
statement 731: 2 (store_temp<GasBuiltin>([10]) -> ([10]))
statement 732: 2 (store_temp<u32>([8]) -> ([8]))
statement 733: 2 (store_temp<StorageAddress>([22]) -> ([22]))
statement 736: 2 (store_temp<felt252>([25]) -> ([25]))
statement 738: 2 (branch_align() -> ())
statement 739: 2 (store_temp<GasBuiltin>([23]) -> ([23]))
statement 744: 2 (store_temp<RangeCheck>([29]) -> ([29]))
statement 745: 2 (store_temp<GasBuiltin>([34]) -> ([34]))
statement 746: 2 (store_temp<System>([24]) -> ([24]))
statement 748: 2 (return([29], [34], [24], [37]))
statement 5: 1 (cheatcode<10052436086942832998170947883001859293934451>([6]) -> ([7]))
statement 8: 1 (array_new<felt252>() -> ([9]))
statement 10: 1 (store_temp<felt252>([10]) -> ([10]))
statement 11: 1 (array_append<felt252>([9], [10]) -> ([11]))
statement 13: 1 (store_temp<felt252>([12]) -> ([12]))
statement 14: 1 (array_append<felt252>([11], [12]) -> ([13]))
statement 15: 1 (store_temp<felt252>([8]) -> ([8]))
statement 16: 1 (array_append<felt252>([13], [8]) -> ([14]))
statement 20: 1 (store_temp<Pedersen>([2]) -> ([2]))
statement 21: 1 (store_temp<RangeCheck>([0]) -> ([0]))
statement 22: 1 (store_temp<GasBuiltin>([1]) -> ([1]))
statement 23: 1 (store_temp<System>([3]) -> ([3]))
statement 25: 1 (function_call<user@test::erc_20::__wrapper__IERC20Impl__transfer>([2], [0], [1], [3], [17]) -> ([18], [19], [20], [21], [22]))
statement 26: 1 (enum_match<core::panics::PanicResult::<(core::array::Span::<core::felt252>,)>>([22]) { fallthrough([23]) 39([24]) })
statement 33: 1 (store_temp<RangeCheck>([19]) -> ([19]))
statement 34: 1 (store_temp<GasBuiltin>([25]) -> ([25]))
statement 35: 1 (store_temp<Pedersen>([18]) -> ([18]))
statement 36: 1 (store_temp<System>([21]) -> ([21]))
statement 38: 1 (return([19], [25], [18], [21], [28]))
statement 57: 1 (store_temp<felt252>([14]) -> ([14]))
statement 65: 1 (store_temp<felt252>([22]) -> ([22]))
statement 73: 1 (store_temp<felt252>([32]) -> ([32]))
statement 97: 1 (store_temp<Box<core::starknet::info::v3::ExecutionInfo>>([45]) -> ([45]))
statement 105: 1 (store_temp<RangeCheck>([33]) -> ([33]))
statement 106: 1 (store_temp<GasBuiltin>([43]) -> ([43]))
statement 107: 1 (store_temp<Pedersen>([0]) -> ([0]))
statement 108: 1 (store_temp<System>([44]) -> ([44]))
statement 109: 1 (store_temp<ContractAddress>([53]) -> ([53]))
statement 110: 1 (store_temp<ContractAddress>([16]) -> ([16]))
statement 112: 1 (function_call<user@test::erc_20::StorageImpl::transfer_helper>([33], [43], [0], [44], [56], [53], [16], [49]) -> ([57], [58], [59], [60], [61]))
statement 113: 1 (enum_match<core::panics::PanicResult::<(test::erc_20::ContractState, ())>>([61]) { fallthrough([62]) 129([63]) })
statement 117: 1 (array_new<felt252>() -> ([65]))
statement 123: 1 (store_temp<Pedersen>([59]) -> ([59]))
statement 124: 1 (store_temp<RangeCheck>([57]) -> ([57]))
statement 125: 1 (store_temp<GasBuiltin>([64]) -> ([64]))
statement 126: 1 (store_temp<System>([60]) -> ([60]))
statement 128: 1 (return([59], [57], [64], [60], [70]))
statement 226: 1 (felt252_is_zero([9]) { fallthrough() 240([10]) })
statement 244: 1 (felt252_is_zero([14]) { fallthrough() 258([15]) })
statement 269: 1 (store_temp<felt252>([26]) -> ([26]))
statement 271: 1 (store_temp<felt252>([28]) -> ([28]))
statement 276: 1 (store_temp<RangeCheck>([29]) -> ([29]))
statement 277: 1 (store_temp<GasBuiltin>([1]) -> ([1]))
statement 278: 1 (store_temp<System>([3]) -> ([3]))
statement 279: 1 (store_temp<core::starknet::storage::StoragePointer0Offset::<core::starknet::storage::Mutable::<core::integer::u256>>>([33]) -> ([33]))
statement 280: 1 (function_call<user@core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::<core::starknet::storage::Mutable::<core::integer::u256>, core::starknet::storage::MutableImpl::<core::integer::u256>, core::starknet::storage_access::StoreUsingPacking::<core::integer::u256, (core::integer::u128, core::integer::u128), core::starknet::storage_access::StorePackingU256, core::starknet::storage_access::TupleNextStore::<(core::integer::u128, core::integer::u128), core::tuple::TupleSplitTupleSize2::<core::integer::u128, core::integer::u128>, core::starknet::storage_access::StoreUsingPacking::<core::integer::u128, core::felt252, core::starknet::storage_access::StorePackingU128, core::starknet::storage_access::StoreFelt252>, core::starknet::storage_access::StoreUsingPacking::<(core::integer::u128,), core::integer::u128, core::starknet::storage_access::StorePackingTuple1::<core::integer::u128>, core::starknet::storage_access::StoreUsingPacking::<core::integer::u128, core::felt252, core::starknet::storage_access::StorePackingU128, core::starknet::storage_access::StoreFelt252>>, core::integer::u128Drop, core::tuple::TupleNextDrop::<(core::integer::u128,), core::tuple::TupleSplitTupleSize1::<core::integer::u128>, core::tuple::IsTupleTupleSize1::<core::integer::u128>, core::integer::u128Drop, core::tuple::TupleSize0Drop>, core::tuple::TupleSplitTupleSize1::<core::integer::u128>>>>::read>([29], [1], [3], [33]) -> ([34], [35], [36], [37]))
statement 281: 1 (enum_match<core::panics::PanicResult::<(core::integer::u256,)>>([37]) { fallthrough([38]) 678([39]) })
statement 289: 1 (branch_align() -> ())
statement 293: 1 (store_temp<RangeCheck>([47]) -> ([54]))
statement 294: 1 (store_temp<GasBuiltin>([51]) -> ([55]))
statement 295: 1 (store_temp<u128>([48]) -> ([56]))
statement 296: 1 (store_temp<core::bool>([53]) -> ([57]))
statement 297: 1 (jump() { 306() })
statement 308: 1 (branch_align() -> ())
statement 310: 1 (store_temp<RangeCheck>([62]) -> ([67]))
statement 311: 1 (store_temp<GasBuiltin>([66]) -> ([68]))
statement 312: 1 (store_temp<u128>([63]) -> ([69]))
statement 313: 1 (store_temp<u128>([56]) -> ([70]))
statement 314: 1 (jump() { 340() })
statement 340: 1 (enum_match<core::bool>([57]) { fallthrough([79]) 656([80]) })
statement 346: 1 (store_temp<felt252>([83]) -> ([83]))
statement 348: 1 (store_temp<felt252>([85]) -> ([85]))
statement 355: 1 (store_temp<u32>([92]) -> ([92]))
statement 363: 1 (store_temp<GasBuiltin>([93]) -> ([93]))
statement 364: 1 (store_temp<u32>([102]) -> ([102]))
statement 365: 1 (store_temp<StorageAddress>([101]) -> ([101]))
statement 371: 1 (store_temp<felt252>([110]) -> ([110]))
statement 373: 1 (store_temp<felt252>([112]) -> ([112]))
statement 378: 1 (store_temp<RangeCheck>([113]) -> ([113]))
statement 379: 1 (store_temp<GasBuiltin>([103]) -> ([103]))
statement 380: 1 (store_temp<System>([104]) -> ([104]))
statement 381: 1 (store_temp<core::starknet::storage::StoragePointer0Offset::<core::starknet::storage::Mutable::<core::integer::u256>>>([117]) -> ([117]))
statement 382: 1 (function_call<user@core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::<core::starknet::storage::Mutable::<core::integer::u256>, core::starknet::storage::MutableImpl::<core::integer::u256>, core::starknet::storage_access::StoreUsingPacking::<core::integer::u256, (core::integer::u128, core::integer::u128), core::starknet::storage_access::StorePackingU256, core::starknet::storage_access::TupleNextStore::<(core::integer::u128, core::integer::u128), core::tuple::TupleSplitTupleSize2::<core::integer::u128, core::integer::u128>, core::starknet::storage_access::StoreUsingPacking::<core::integer::u128, core::felt252, core::starknet::storage_access::StorePackingU128, core::starknet::storage_access::StoreFelt252>, core::starknet::storage_access::StoreUsingPacking::<(core::integer::u128,), core::integer::u128, core::starknet::storage_access::StorePackingTuple1::<core::integer::u128>, core::starknet::storage_access::StoreUsingPacking::<core::integer::u128, core::felt252, core::starknet::storage_access::StorePackingU128, core::starknet::storage_access::StoreFelt252>>, core::integer::u128Drop, core::tuple::TupleNextDrop::<(core::integer::u128,), core::tuple::TupleSplitTupleSize1::<core::integer::u128>, core::tuple::IsTupleTupleSize1::<core::integer::u128>, core::integer::u128Drop, core::tuple::TupleSize0Drop>, core::tuple::TupleSplitTupleSize1::<core::integer::u128>>>>::read>([113], [103], [104], [117]) -> ([118], [119], [120], [121]))
statement 383: 1 (enum_match<core::panics::PanicResult::<(core::integer::u256,)>>([121]) { fallthrough([122]) 600([123]) })
statement 388: 1 (branch_align() -> ())
statement 392: 1 (store_temp<RangeCheck>([127]) -> ([134]))
statement 393: 1 (store_temp<GasBuiltin>([131]) -> ([135]))
statement 394: 1 (store_temp<u128>([128]) -> ([136]))
statement 395: 1 (store_temp<core::bool>([133]) -> ([137]))
statement 396: 1 (jump() { 405() })
statement 406: 1 (branch_align() -> ())
statement 408: 1 (store_temp<RangeCheck>([141]) -> ([146]))
statement 409: 1 (store_temp<GasBuiltin>([145]) -> ([147]))
statement 410: 1 (store_temp<u128>([142]) -> ([148]))
statement 411: 1 (store_temp<u128>([136]) -> ([149]))
statement 412: 1 (jump() { 438() })
statement 438: 1 (enum_match<core::bool>([137]) { fallthrough([158]) 578([159]) })
statement 443: 1 (store_temp<felt252>([25]) -> ([25]))
statement 445: 1 (store_temp<felt252>([163]) -> ([163]))
statement 451: 1 (store_temp<u32>([169]) -> ([169]))
statement 456: 1 (store_temp<GasBuiltin>([170]) -> ([170]))
statement 457: 1 (store_temp<u32>([91]) -> ([91]))
statement 458: 1 (store_temp<StorageAddress>([176]) -> ([176]))
statement 463: 1 (array_new<felt252>() -> ([184]))
statement 464: 1 (array_new<felt252>() -> ([185]))
statement 468: 1 (enum_match<test::erc_20::Event>([187]) { fallthrough([188]) 493([189]) })
statement 470: 1 (store_temp<GasBuiltin>([177]) -> ([177]))
statement 483: 1 (store_temp<felt252>([204]) -> ([204]))
statement 484: 1 (array_append<felt252>([184], [204]) -> ([205]))
statement 485: 1 (array_append<felt252>([185], [195]) -> ([206]))
statement 486: 1 (array_append<felt252>([206], [197]) -> ([207]))
statement 487: 1 (array_append<felt252>([207], [201]) -> ([208]))
statement 488: 1 (array_append<felt252>([208], [203]) -> ([209]))
statement 489: 1 (store_temp<GasBuiltin>([190]) -> ([210]))
statement 492: 1 (jump() { 516() })
statement 524: 1 (store_temp<GasBuiltin>([239]) -> ([239]))
statement 529: 1 (store_temp<RangeCheck>([164]) -> ([164]))
statement 530: 1 (store_temp<GasBuiltin>([244]) -> ([244]))
statement 531: 1 (store_temp<Pedersen>([162]) -> ([162]))
statement 532: 1 (store_temp<System>([240]) -> ([240]))
statement 534: 1 (return([164], [244], [162], [240], [247]))
Weight by concrete libfunc:
libfunc storage_base_address_from_felt252: 40
libfunc storage_write_syscall: 32
libfunc storage_read_syscall: 28
libfunc store_temp<GasBuiltin>: 22
libfunc store_temp<felt252>: 19
libfunc store_temp<RangeCheck>: 13
libfunc u128s_from_felt252: 12
libfunc array_snapshot_pop_front<felt252>: 9
libfunc emit_event_syscall: 9
libfunc store_temp<System>: 9
libfunc withdraw_gas: 9
libfunc array_append<felt252>: 8
libfunc pedersen: 8
libfunc store_temp<u32>: 8
libfunc contract_address_try_from_felt252: 7
libfunc branch_align: 6
libfunc store_temp<Snapshot<Array<felt252>>>: 6
libfunc store_temp<core::panics::PanicResult::<(core::integer::u256,)>>: 6
libfunc store_temp<u128>: 6
libfunc u128_overflowing_add: 6
libfunc u128_overflowing_sub: 6
libfunc get_execution_info_v3_syscall: 5
libfunc jump: 5
libfunc store_temp<Pedersen>: 5
libfunc store_temp<test::erc_20::Event>: 5
libfunc array_new<felt252>: 4
libfunc store_temp<Array<felt252>>: 4
libfunc store_temp<StorageAddress>: 4
libfunc store_temp<core::array::Span::<core::felt252>>: 4
libfunc store_temp<core::panics::PanicResult::<((),)>>: 3
libfunc store_temp<core::panics::PanicResult::<(core::array::Span::<core::felt252>,)>>: 3
libfunc store_temp<core::panics::PanicResult::<(test::erc_20::ContractState, ())>>: 3
libfunc const_as_box<Const<Tuple<felt252>, Const<felt252, 2>>, 0>: 2
libfunc enum_match<core::bool>: 2
libfunc enum_match<core::panics::PanicResult::<(core::integer::u256,)>>: 2
libfunc felt252_is_zero: 2
libfunc function_call<user@core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::<core::starknet::storage::Mutable::<core::integer::u256>, core::starknet::storage::MutableImpl::<core::integer::u256>, core::starknet::storage_access::StoreUsingPacking::<core::integer::u256, (core::integer::u128, core::integer::u128), core::starknet::storage_access::StorePackingU256, core::starknet::storage_access::TupleNextStore::<(core::integer::u128, core::integer::u128), core::tuple::TupleSplitTupleSize2::<core::integer::u128, core::integer::u128>, core::starknet::storage_access::StoreUsingPacking::<core::integer::u128, core::felt252, core::starknet::storage_access::StorePackingU128, core::starknet::storage_access::StoreFelt252>, core::starknet::storage_access::StoreUsingPacking::<(core::integer::u128,), core::integer::u128, core::starknet::storage_access::StorePackingTuple1::<core::integer::u128>, core::starknet::storage_access::StoreUsingPacking::<core::integer::u128, core::felt252, core::starknet::storage_access::StorePackingU128, core::starknet::storage_access::StoreFelt252>>, core::integer::u128Drop, core::tuple::TupleNextDrop::<(core::integer::u128,), core::tuple::TupleSplitTupleSize1::<core::integer::u128>, core::tuple::IsTupleTupleSize1::<core::integer::u128>, core::integer::u128Drop, core::tuple::TupleSize0Drop>, core::tuple::TupleSplitTupleSize1::<core::integer::u128>>>>::read>: 2
libfunc store_temp<ContractAddress>: 2
libfunc store_temp<core::bool>: 2
libfunc store_temp<core::integer::u256>: 2
libfunc store_temp<core::starknet::storage::StoragePointer0Offset::<core::starknet::storage::Mutable::<core::integer::u256>>>: 2
libfunc cheatcode<10052436086942832998170947883001859293934451>: 1
libfunc enum_match<core::panics::PanicResult::<(core::array::Span::<core::felt252>,)>>: 1
libfunc enum_match<core::panics::PanicResult::<(test::erc_20::ContractState, ())>>: 1
libfunc enum_match<test::erc_20::Event>: 1
libfunc function_call<user@test::erc_20::StorageImpl::transfer_helper>: 1
libfunc function_call<user@test::erc_20::__wrapper__IERC20Impl__transfer>: 1
libfunc store_temp<Box<core::starknet::info::v3::ExecutionInfo>>: 1
return: 5
Weight by generic libfunc:
libfunc store_temp: 129
libfunc storage_base_address_from_felt252: 40
libfunc storage_write_syscall: 32
libfunc storage_read_syscall: 28
libfunc u128s_from_felt252: 12
libfunc array_snapshot_pop_front: 9
libfunc emit_event_syscall: 9
libfunc withdraw_gas: 9
libfunc array_append: 8
libfunc pedersen: 8
libfunc contract_address_try_from_felt252: 7
libfunc enum_match: 7
libfunc branch_align: 6
libfunc u128_overflowing_add: 6
libfunc u128_overflowing_sub: 6
libfunc get_execution_info_v3_syscall: 5
libfunc jump: 5
libfunc array_new: 4
libfunc function_call: 4
libfunc const_as_box: 2
libfunc felt252_is_zero: 2
libfunc cheatcode: 1
return: 5
Weight by user function (inc. generated):
function test::erc_20::StorageImpl::transfer_helper: 187
function core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::<core::starknet::storage::Mutable::<core::integer::u256>, core::starknet::storage::MutableImpl::<core::integer::u256>, core::starknet::storage_access::StoreUsingPacking::<core::integer::u256, (core::integer::u128, core::integer::u128), core::starknet::storage_access::StorePackingU256, core::starknet::storage_access::TupleNextStore::<(core::integer::u128, core::integer::u128), core::tuple::TupleSplitTupleSize2::<core::integer::u128, core::integer::u128>, core::starknet::storage_access::StoreUsingPacking::<core::integer::u128, core::felt252, core::starknet::storage_access::StorePackingU128, core::starknet::storage_access::StoreFelt252>, core::starknet::storage_access::StoreUsingPacking::<(core::integer::u128,), core::integer::u128, core::starknet::storage_access::StorePackingTuple1::<core::integer::u128>, core::starknet::storage_access::StoreUsingPacking::<core::integer::u128, core::felt252, core::starknet::storage_access::StorePackingU128, core::starknet::storage_access::StoreFelt252>>, core::integer::u128Drop, core::tuple::TupleNextDrop::<(core::integer::u128,), core::tuple::TupleSplitTupleSize1::<core::integer::u128>, core::tuple::IsTupleTupleSize1::<core::integer::u128>, core::integer::u128Drop, core::tuple::TupleSize0Drop>, core::tuple::TupleSplitTupleSize1::<core::integer::u128>>>>::read: 66
function test::erc_20::__wrapper__IERC20Impl__transfer: 63
function test::erc20_transfer: 28
Weight by original user function (exc. generated):
function test::erc_20::StorageImpl::transfer_helper: 187
function core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::<core::starknet::storage::Mutable::<core::integer::u256>, core::starknet::storage::MutableImpl::<core::integer::u256>, core::starknet::storage_access::StoreUsingPacking::<core::integer::u256, (core::integer::u128, core::integer::u128), core::starknet::storage_access::StorePackingU256, core::starknet::storage_access::TupleNextStore::<(core::integer::u128, core::integer::u128), core::tuple::TupleSplitTupleSize2::<core::integer::u128, core::integer::u128>, core::starknet::storage_access::StoreUsingPacking::<core::integer::u128, core::felt252, core::starknet::storage_access::StorePackingU128, core::starknet::storage_access::StoreFelt252>, core::starknet::storage_access::StoreUsingPacking::<(core::integer::u128,), core::integer::u128, core::starknet::storage_access::StorePackingTuple1::<core::integer::u128>, core::starknet::storage_access::StoreUsingPacking::<core::integer::u128, core::felt252, core::starknet::storage_access::StorePackingU128, core::starknet::storage_access::StoreFelt252>>, core::integer::u128Drop, core::tuple::TupleNextDrop::<(core::integer::u128,), core::tuple::TupleSplitTupleSize1::<core::integer::u128>, core::tuple::IsTupleTupleSize1::<core::integer::u128>, core::integer::u128Drop, core::tuple::TupleSize0Drop>, core::tuple::TupleSplitTupleSize1::<core::integer::u128>>>>::read: 66
function test::erc_20::__wrapper__IERC20Impl__transfer: 63
function test::erc20_transfer: 28
Weight by Cairo function:
function core::starknet::storage::StoragePathImpl::finalize: 44
function core::integer::u128_try_from_felt252: 22
function core::starknet::storage_access::StoreFelt252::write_at_offset: 22
function core::starknet::storage_access::StoreFelt252::read_at_offset: 20
function contract::ContractStateEventEmitter::emit: 18
function contract::__wrapper__IERC20Impl__transfer: 18
function core::array::ArrayImpl::append: 18
function core::integer::u256_overflowing_add: 18
function core::integer::u256_overflowing_sub: 18
function core::starknet::storage_access::StoreFelt252::write: 18
function core::starknet::storage_access::StoreFelt252::read: 16
function lib.cairo::erc20_transfer: 16
function core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::read: 14
function core::pedersen::HashStateImpl::update: 12
function core::starknet::storage::map::MutableStorableEntryReadAccess::read: 10
function lib.cairo::erc_20::IERC20Impl::transfer: 9
function core::array::SpanImpl::pop_front: 8
function core::starknet::contract_address::ContractAddressSerde::deserialize: 8
function starknet_derive::EventIsEvent::append_keys_and_data: 7
function core::array::SpanImpl::is_empty: 5
function core::starknet::info::get_execution_info: 5
function core::array::ArrayImpl::new: 4
function core::starknet::testing::set_caller_address: 3
function core::Felt252PartialEq::eq: 2
function core::Felt252Serde::deserialize: 2
function lib.cairo::erc_20::StorageImpl::transfer_helper: 2
function unknown: 2
function core::box::BoxImpl::unbox: 1
function core::integer::u256_checked_add: 1
function core::integer::u256_checked_sub: 1
Weight by Sierra stack trace:
test::erc20_transfer: 344
test::erc20_transfer -> test::erc_20::__wrapper__IERC20Impl__transfer: 316
test::erc20_transfer -> test::erc_20::__wrapper__IERC20Impl__transfer -> test::erc_20::StorageImpl::transfer_helper: 253
test::erc20_transfer -> test::erc_20::__wrapper__IERC20Impl__transfer -> test::erc_20::StorageImpl::transfer_helper -> core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::<core::starknet::storage::Mutable::<core::integer::u256>, core::starknet::storage::MutableImpl::<core::integer::u256>, core::starknet::storage_access::StoreUsingPacking::<core::integer::u256, (core::integer::u128, core::integer::u128), core::starknet::storage_access::StorePackingU256, core::starknet::storage_access::TupleNextStore::<(core::integer::u128, core::integer::u128), core::tuple::TupleSplitTupleSize2::<core::integer::u128, core::integer::u128>, core::starknet::storage_access::StoreUsingPacking::<core::integer::u128, core::felt252, core::starknet::storage_access::StorePackingU128, core::starknet::storage_access::StoreFelt252>, core::starknet::storage_access::StoreUsingPacking::<(core::integer::u128,), core::integer::u128, core::starknet::storage_access::StorePackingTuple1::<core::integer::u128>, core::starknet::storage_access::StoreUsingPacking::<core::integer::u128, core::felt252, core::starknet::storage_access::StorePackingU128, core::starknet::storage_access::StoreFelt252>>, core::integer::u128Drop, core::tuple::TupleNextDrop::<(core::integer::u128,), core::tuple::TupleSplitTupleSize1::<core::integer::u128>, core::tuple::IsTupleTupleSize1::<core::integer::u128>, core::integer::u128Drop, core::tuple::TupleSize0Drop>, core::tuple::TupleSplitTupleSize1::<core::integer::u128>>>>::read: 66
Weight by Cairo stack trace:
test::erc20_transfer: 344
test::erc20_transfer -> test::erc_20::__wrapper__IERC20Impl__transfer: 316
test::erc20_transfer -> test::erc_20::__wrapper__IERC20Impl__transfer -> test::erc_20::StorageImpl::transfer_helper: 253
test::erc20_transfer -> test::erc_20::__wrapper__IERC20Impl__transfer -> test::erc_20::StorageImpl::transfer_helper -> core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::<core::starknet::storage::Mutable::<core::integer::u256>, core::starknet::storage::MutableImpl::<core::integer::u256>, core::starknet::storage_access::StoreUsingPacking::<core::integer::u256, (core::integer::u128, core::integer::u128), core::starknet::storage_access::StorePackingU256, core::starknet::storage_access::TupleNextStore::<(core::integer::u128, core::integer::u128), core::tuple::TupleSplitTupleSize2::<core::integer::u128, core::integer::u128>, core::starknet::storage_access::StoreUsingPacking::<core::integer::u128, core::felt252, core::starknet::storage_access::StorePackingU128, core::starknet::storage_access::StoreFelt252>, core::starknet::storage_access::StoreUsingPacking::<(core::integer::u128,), core::integer::u128, core::starknet::storage_access::StorePackingTuple1::<core::integer::u128>, core::starknet::storage_access::StoreUsingPacking::<core::integer::u128, core::felt252, core::starknet::storage_access::StorePackingU128, core::starknet::storage_access::StoreFelt252>>, core::integer::u128Drop, core::tuple::TupleNextDrop::<(core::integer::u128,), core::tuple::TupleSplitTupleSize1::<core::integer::u128>, core::tuple::IsTupleTupleSize1::<core::integer::u128>, core::integer::u128Drop, core::tuple::TupleSize0Drop>, core::tuple::TupleSplitTupleSize1::<core::integer::u128>>>>::read: 66