From 9755dd5d9ec669c52e36ade0fb49afb2abce410c Mon Sep 17 00:00:00 2001 From: Grant Wuerker Date: Wed, 13 Apr 2022 11:42:54 +0200 Subject: [PATCH] Gas reporting for integration tests. --- Cargo.lock | 1 + crates/test-utils/Cargo.toml | 1 + crates/test-utils/src/lib.rs | 54 ++++++++- crates/tests/src/demo_erc20.rs | 3 + crates/tests/src/demo_guestbook.rs | 3 + crates/tests/src/demo_uniswap.rs | 4 + crates/tests/src/features.rs | 71 +++++++++-- ...mpiler_tests__demo_erc20__erc20_token.snap | 21 ++++ ...ler_tests__demo_guestbook__guest_book.snap | 8 ++ ...ts__demo_uniswap__uniswap_contracts-2.snap | 7 ++ ...ests__demo_uniswap__uniswap_contracts.snap | 18 +++ ..._tests__features__address_bytes10_map.snap | 10 ++ ...fe_compiler_tests__features__balances.snap | 12 ++ ..._compiler_tests__features__base_tuple.snap | 7 ++ .../fe_compiler_tests__features__call_fn.snap | 6 + ...fe_compiler_tests__features__case_001.snap | 7 ++ ...fe_compiler_tests__features__case_002.snap | 7 ++ ...fe_compiler_tests__features__case_003.snap | 7 ++ ...fe_compiler_tests__features__case_004.snap | 7 ++ ...fe_compiler_tests__features__case_005.snap | 7 ++ ...fe_compiler_tests__features__case_006.snap | 7 ++ ...fe_compiler_tests__features__case_007.snap | 7 ++ ...fe_compiler_tests__features__case_008.snap | 7 ++ ...fe_compiler_tests__features__case_009.snap | 7 ++ .../fe_compiler_tests__features__case_01.snap | 7 ++ ...fe_compiler_tests__features__case_010.snap | 7 ++ ...fe_compiler_tests__features__case_011.snap | 7 ++ ...fe_compiler_tests__features__case_012.snap | 7 ++ ...fe_compiler_tests__features__case_013.snap | 7 ++ ...fe_compiler_tests__features__case_014.snap | 7 ++ ...fe_compiler_tests__features__case_015.snap | 7 ++ ...fe_compiler_tests__features__case_016.snap | 7 ++ ...fe_compiler_tests__features__case_017.snap | 7 ++ ...fe_compiler_tests__features__case_018.snap | 7 ++ ...fe_compiler_tests__features__case_019.snap | 7 ++ .../fe_compiler_tests__features__case_02.snap | 7 ++ ...fe_compiler_tests__features__case_020.snap | 7 ++ ...fe_compiler_tests__features__case_021.snap | 7 ++ ...fe_compiler_tests__features__case_022.snap | 7 ++ ...fe_compiler_tests__features__case_023.snap | 7 ++ ...fe_compiler_tests__features__case_024.snap | 7 ++ ...fe_compiler_tests__features__case_025.snap | 7 ++ ...fe_compiler_tests__features__case_026.snap | 7 ++ ...fe_compiler_tests__features__case_027.snap | 7 ++ ...fe_compiler_tests__features__case_028.snap | 7 ++ ...fe_compiler_tests__features__case_029.snap | 7 ++ .../fe_compiler_tests__features__case_03.snap | 7 ++ ...fe_compiler_tests__features__case_030.snap | 7 ++ ...fe_compiler_tests__features__case_031.snap | 7 ++ ...fe_compiler_tests__features__case_032.snap | 7 ++ ...fe_compiler_tests__features__case_033.snap | 7 ++ ...fe_compiler_tests__features__case_034.snap | 7 ++ ...fe_compiler_tests__features__case_035.snap | 7 ++ ...fe_compiler_tests__features__case_036.snap | 7 ++ ...fe_compiler_tests__features__case_037.snap | 7 ++ ...fe_compiler_tests__features__case_038.snap | 7 ++ ...fe_compiler_tests__features__case_039.snap | 7 ++ .../fe_compiler_tests__features__case_04.snap | 7 ++ ...fe_compiler_tests__features__case_040.snap | 7 ++ ...fe_compiler_tests__features__case_041.snap | 7 ++ ...fe_compiler_tests__features__case_042.snap | 7 ++ ...fe_compiler_tests__features__case_043.snap | 7 ++ ...fe_compiler_tests__features__case_044.snap | 7 ++ ...fe_compiler_tests__features__case_045.snap | 7 ++ ...fe_compiler_tests__features__case_046.snap | 7 ++ ...fe_compiler_tests__features__case_047.snap | 7 ++ ...fe_compiler_tests__features__case_048.snap | 7 ++ ...fe_compiler_tests__features__case_049.snap | 7 ++ .../fe_compiler_tests__features__case_05.snap | 7 ++ ...fe_compiler_tests__features__case_050.snap | 7 ++ ...fe_compiler_tests__features__case_051.snap | 7 ++ ...fe_compiler_tests__features__case_052.snap | 7 ++ ...fe_compiler_tests__features__case_053.snap | 7 ++ ...fe_compiler_tests__features__case_054.snap | 7 ++ ...fe_compiler_tests__features__case_055.snap | 7 ++ ...fe_compiler_tests__features__case_056.snap | 7 ++ ...fe_compiler_tests__features__case_057.snap | 7 ++ ...fe_compiler_tests__features__case_058.snap | 7 ++ ...fe_compiler_tests__features__case_059.snap | 7 ++ .../fe_compiler_tests__features__case_06.snap | 7 ++ ...fe_compiler_tests__features__case_060.snap | 7 ++ ...fe_compiler_tests__features__case_061.snap | 7 ++ ...fe_compiler_tests__features__case_062.snap | 7 ++ ...fe_compiler_tests__features__case_063.snap | 7 ++ ...fe_compiler_tests__features__case_064.snap | 7 ++ ...fe_compiler_tests__features__case_065.snap | 7 ++ ...fe_compiler_tests__features__case_066.snap | 7 ++ ...fe_compiler_tests__features__case_067.snap | 7 ++ ...fe_compiler_tests__features__case_068.snap | 7 ++ ...fe_compiler_tests__features__case_069.snap | 7 ++ .../fe_compiler_tests__features__case_07.snap | 7 ++ ...fe_compiler_tests__features__case_070.snap | 7 ++ ...fe_compiler_tests__features__case_071.snap | 7 ++ ...fe_compiler_tests__features__case_072.snap | 7 ++ ...fe_compiler_tests__features__case_073.snap | 7 ++ ...fe_compiler_tests__features__case_074.snap | 7 ++ ...fe_compiler_tests__features__case_075.snap | 7 ++ ...fe_compiler_tests__features__case_076.snap | 7 ++ ...fe_compiler_tests__features__case_077.snap | 7 ++ ...fe_compiler_tests__features__case_078.snap | 7 ++ ...fe_compiler_tests__features__case_079.snap | 7 ++ .../fe_compiler_tests__features__case_08.snap | 7 ++ ...fe_compiler_tests__features__case_080.snap | 7 ++ ...fe_compiler_tests__features__case_081.snap | 7 ++ ...fe_compiler_tests__features__case_082.snap | 7 ++ ...fe_compiler_tests__features__case_083.snap | 7 ++ ...fe_compiler_tests__features__case_084.snap | 7 ++ ...fe_compiler_tests__features__case_085.snap | 7 ++ ...fe_compiler_tests__features__case_086.snap | 7 ++ ...fe_compiler_tests__features__case_087.snap | 7 ++ ...fe_compiler_tests__features__case_088.snap | 7 ++ ...fe_compiler_tests__features__case_089.snap | 7 ++ .../fe_compiler_tests__features__case_09.snap | 7 ++ ...fe_compiler_tests__features__case_090.snap | 7 ++ ...fe_compiler_tests__features__case_091.snap | 7 ++ ...fe_compiler_tests__features__case_092.snap | 7 ++ ...fe_compiler_tests__features__case_093.snap | 7 ++ ...fe_compiler_tests__features__case_094.snap | 7 ++ ...fe_compiler_tests__features__case_095.snap | 7 ++ ...fe_compiler_tests__features__case_096.snap | 7 ++ ...fe_compiler_tests__features__case_097.snap | 7 ++ ...fe_compiler_tests__features__case_098.snap | 7 ++ ...fe_compiler_tests__features__case_099.snap | 7 ++ ...fe_compiler_tests__features__case_1-2.snap | 7 ++ ...fe_compiler_tests__features__case_1-3.snap | 10 ++ .../fe_compiler_tests__features__case_1.snap | 7 ++ .../fe_compiler_tests__features__case_10.snap | 7 ++ ...fe_compiler_tests__features__case_100.snap | 7 ++ ...fe_compiler_tests__features__case_101.snap | 7 ++ ...fe_compiler_tests__features__case_102.snap | 7 ++ ...fe_compiler_tests__features__case_103.snap | 7 ++ ...fe_compiler_tests__features__case_104.snap | 7 ++ ...fe_compiler_tests__features__case_105.snap | 7 ++ ...fe_compiler_tests__features__case_106.snap | 7 ++ ...fe_compiler_tests__features__case_107.snap | 7 ++ ...fe_compiler_tests__features__case_108.snap | 7 ++ ...fe_compiler_tests__features__case_109.snap | 7 ++ .../fe_compiler_tests__features__case_11.snap | 7 ++ ...fe_compiler_tests__features__case_110.snap | 7 ++ ...fe_compiler_tests__features__case_111.snap | 7 ++ ...fe_compiler_tests__features__case_112.snap | 7 ++ ...fe_compiler_tests__features__case_113.snap | 7 ++ ...fe_compiler_tests__features__case_114.snap | 7 ++ ...fe_compiler_tests__features__case_115.snap | 7 ++ ...fe_compiler_tests__features__case_116.snap | 7 ++ ...fe_compiler_tests__features__case_117.snap | 7 ++ ...fe_compiler_tests__features__case_118.snap | 7 ++ ...fe_compiler_tests__features__case_119.snap | 7 ++ .../fe_compiler_tests__features__case_12.snap | 7 ++ ...fe_compiler_tests__features__case_120.snap | 7 ++ ...fe_compiler_tests__features__case_121.snap | 7 ++ ...fe_compiler_tests__features__case_122.snap | 7 ++ ...fe_compiler_tests__features__case_123.snap | 7 ++ ...fe_compiler_tests__features__case_124.snap | 7 ++ ...fe_compiler_tests__features__case_125.snap | 7 ++ ...fe_compiler_tests__features__case_126.snap | 7 ++ ...fe_compiler_tests__features__case_127.snap | 7 ++ ...fe_compiler_tests__features__case_128.snap | 7 ++ ...fe_compiler_tests__features__case_129.snap | 7 ++ .../fe_compiler_tests__features__case_13.snap | 7 ++ ...fe_compiler_tests__features__case_130.snap | 7 ++ ...fe_compiler_tests__features__case_131.snap | 7 ++ ...fe_compiler_tests__features__case_132.snap | 7 ++ ...fe_compiler_tests__features__case_133.snap | 7 ++ ...fe_compiler_tests__features__case_134.snap | 7 ++ ...fe_compiler_tests__features__case_135.snap | 7 ++ ...fe_compiler_tests__features__case_136.snap | 7 ++ ...fe_compiler_tests__features__case_137.snap | 7 ++ ...fe_compiler_tests__features__case_138.snap | 7 ++ ...fe_compiler_tests__features__case_139.snap | 7 ++ ...fe_compiler_tests__features__case_140.snap | 7 ++ ...fe_compiler_tests__features__case_141.snap | 7 ++ ...fe_compiler_tests__features__case_142.snap | 7 ++ ...fe_compiler_tests__features__case_143.snap | 7 ++ ...fe_compiler_tests__features__case_144.snap | 7 ++ ...fe_compiler_tests__features__case_145.snap | 7 ++ ...fe_compiler_tests__features__case_146.snap | 7 ++ ...fe_compiler_tests__features__case_147.snap | 7 ++ ...fe_compiler_tests__features__case_148.snap | 7 ++ ...fe_compiler_tests__features__case_149.snap | 7 ++ ...fe_compiler_tests__features__case_150.snap | 7 ++ ...fe_compiler_tests__features__case_151.snap | 7 ++ ...fe_compiler_tests__features__case_152.snap | 7 ++ ...fe_compiler_tests__features__case_153.snap | 7 ++ ...fe_compiler_tests__features__case_154.snap | 7 ++ ...fe_compiler_tests__features__case_155.snap | 7 ++ ...fe_compiler_tests__features__case_156.snap | 7 ++ ...fe_compiler_tests__features__case_157.snap | 7 ++ ...r_tests__features__case_158_map_tuple.snap | 7 ++ ...atures__case_159_int_literal_coercion.snap | 7 ++ ...ts__features__case_160_associated_fns.snap | 7 ++ ..._tests__features__case_161_struct_fns.snap | 7 ++ ...atures__case_162_cast_address_to_u256.snap | 7 ++ ...fe_compiler_tests__features__case_2-2.snap | 7 ++ ...fe_compiler_tests__features__case_2-3.snap | 10 ++ .../fe_compiler_tests__features__case_2.snap | 7 ++ .../fe_compiler_tests__features__case_3.snap | 10 ++ .../fe_compiler_tests__features__case_4.snap | 10 ++ .../fe_compiler_tests__features__case_5.snap | 10 ++ .../fe_compiler_tests__features__case_6.snap | 10 ++ ...r_tests__features__checked_arithmetic.snap | 114 ++++++++++++++++++ ...compiler_tests__features__constructor.snap | 7 ++ ...ler_tests__features__create2_contract.snap | 7 ++ ...iler_tests__features__create_contract.snap | 7 ++ ...__features__create_contract_from_init.snap | 7 ++ ...eatures__ctx_param_external_func_call.snap | 8 ++ ...eatures__ctx_param_internal_func_call.snap | 7 ++ ...ler_tests__features__ctx_param_simple.snap | 7 ++ .../fe_compiler_tests__features__events.snap | 10 ++ ...er_tests__features__external_contract.snap | 8 ++ ..._compiler_tests__features__intrinsics.snap | 12 ++ .../fe_compiler_tests__features__keccak.snap | 11 ++ .../fe_compiler_tests__features__math.snap | 8 ++ ...compiler_tests__features__multi_param.snap | 7 ++ ..._compiler_tests__features__nested_map.snap | 18 +++ ...mpiler_tests__features__numeric_casts.snap | 7 ++ ...mpiler_tests__features__numeric_sizes.snap | 30 +++++ ...ompiler_tests__features__return_array.snap | 7 ++ ...__features__return_builtin_attributes.snap | 15 +++ ..._compiler_tests__features__send_value.snap | 7 ++ ...mpiler_tests__features__short_circuit.snap | 9 ++ ...er_tests__features__sized_vals_in_sto.snap | 13 ++ .../fe_compiler_tests__features__strings.snap | 10 ++ .../fe_compiler_tests__features__structs.snap | 15 +++ ..._tests__features__tuple_destructuring.snap | 8 ++ ...mpiler_tests__features__two_contracts.snap | 7 ++ ...er_tests__stress__abi_encoding_stress.snap | 21 ++++ ...er_tests__stress__data_copying_stress.snap | 17 +++ ..._tests__stress__external_calls_stress.snap | 16 +++ ..._compiler_tests__stress__tuple_stress.snap | 15 +++ crates/tests/src/stress.rs | 11 +- 231 files changed, 1976 insertions(+), 9 deletions(-) create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__demo_erc20__erc20_token.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__demo_guestbook__guest_book.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__demo_uniswap__uniswap_contracts-2.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__demo_uniswap__uniswap_contracts.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__address_bytes10_map.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__balances.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__base_tuple.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__call_fn.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_001.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_002.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_003.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_004.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_005.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_006.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_007.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_008.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_009.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_01.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_010.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_011.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_012.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_013.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_014.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_015.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_016.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_017.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_018.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_019.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_02.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_020.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_021.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_022.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_023.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_024.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_025.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_026.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_027.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_028.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_029.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_03.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_030.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_031.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_032.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_033.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_034.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_035.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_036.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_037.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_038.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_039.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_04.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_040.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_041.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_042.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_043.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_044.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_045.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_046.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_047.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_048.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_049.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_05.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_050.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_051.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_052.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_053.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_054.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_055.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_056.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_057.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_058.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_059.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_06.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_060.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_061.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_062.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_063.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_064.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_065.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_066.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_067.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_068.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_069.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_07.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_070.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_071.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_072.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_073.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_074.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_075.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_076.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_077.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_078.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_079.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_08.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_080.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_081.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_082.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_083.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_084.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_085.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_086.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_087.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_088.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_089.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_09.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_090.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_091.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_092.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_093.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_094.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_095.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_096.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_097.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_098.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_099.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_1-2.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_1-3.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_1.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_10.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_100.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_101.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_102.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_103.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_104.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_105.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_106.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_107.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_108.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_109.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_11.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_110.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_111.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_112.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_113.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_114.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_115.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_116.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_117.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_118.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_119.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_12.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_120.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_121.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_122.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_123.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_124.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_125.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_126.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_127.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_128.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_129.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_13.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_130.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_131.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_132.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_133.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_134.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_135.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_136.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_137.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_138.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_139.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_140.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_141.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_142.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_143.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_144.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_145.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_146.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_147.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_148.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_149.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_150.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_151.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_152.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_153.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_154.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_155.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_156.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_157.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_158_map_tuple.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_159_int_literal_coercion.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_160_associated_fns.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_161_struct_fns.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_162_cast_address_to_u256.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_2-2.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_2-3.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_2.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_3.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_4.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_5.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__case_6.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__checked_arithmetic.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__constructor.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__create2_contract.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__create_contract.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__create_contract_from_init.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__ctx_param_external_func_call.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__ctx_param_internal_func_call.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__ctx_param_simple.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__events.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__external_contract.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__intrinsics.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__keccak.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__math.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__multi_param.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__nested_map.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__numeric_casts.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__numeric_sizes.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__return_array.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__return_builtin_attributes.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__send_value.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__short_circuit.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__sized_vals_in_sto.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__strings.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__structs.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__tuple_destructuring.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__features__two_contracts.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__stress__abi_encoding_stress.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__stress__data_copying_stress.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__stress__external_calls_stress.snap create mode 100644 crates/tests/src/snapshots/fe_compiler_tests__stress__tuple_stress.snap diff --git a/Cargo.lock b/Cargo.lock index e89660e8ed..ddd3a8b62f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -625,6 +625,7 @@ dependencies = [ "getrandom 0.2.3", "hex", "indexmap", + "insta", "primitive-types", "serde_json", "solc", diff --git a/crates/test-utils/Cargo.toml b/crates/test-utils/Cargo.toml index 6b39188ae9..a2810875f5 100644 --- a/crates/test-utils/Cargo.toml +++ b/crates/test-utils/Cargo.toml @@ -22,6 +22,7 @@ serde_json = "1.0.64" solc = {git = "https://github.com/g-r-a-n-t/solc-rust", rev = "52d4146", optional = true} yultsur = {git = "https://github.com/g-r-a-n-t/yultsur", rev = "ae85470"} indexmap = "1.6.2" +insta = "1.7.1" # used by ethabi, we need to force the js feature for wasm support getrandom = { version = "0.2.3", features = ["js"] } diff --git a/crates/test-utils/src/lib.rs b/crates/test-utils/src/lib.rs index cb16427bdb..b816eac401 100644 --- a/crates/test-utils/src/lib.rs +++ b/crates/test-utils/src/lib.rs @@ -4,10 +4,54 @@ use fe_common::utils::keccak; use fe_driver as driver; use fe_yulgen::runtime::functions; use primitive_types::{H160, U256}; +use std::cell::RefCell; use std::collections::BTreeMap; +use std::fmt::{Display, Formatter}; use std::str::FromStr; use yultsur::*; +#[macro_export] +macro_rules! assert_harness_gas_report { + ($harness:ident) => { + assert_snapshot!(format!("{}", $harness.gas_reporter)); + }; +} + +#[derive(Default, Debug)] +pub struct GasReporter { + records: RefCell>, +} + +impl GasReporter { + pub fn add_record(&self, description: &str, gas_used: u64) { + self.records.borrow_mut().push(GasRecord { + description: description.to_string(), + gas_used, + }) + } + + pub fn add_func_call_record(&self, function: &str, input: &[ethabi::Token], gas_used: u64) { + let description = format!("{}({:?})", function, input); + self.add_record(&description, gas_used) + } +} + +impl Display for GasReporter { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + for record in self.records.borrow().iter() { + writeln!(f, "{} used {} gas", record.description, record.gas_used)?; + } + + Ok(()) + } +} + +#[derive(Debug)] +pub struct GasRecord { + pub description: String, + pub gas_used: u64, +} + pub trait ToBeBytes { fn to_be_bytes(&self) -> [u8; 32]; } @@ -34,6 +78,7 @@ pub const DEFAULT_CALLER: &str = "1000000000000000000000000000000000000001"; #[allow(dead_code)] pub struct ContractHarness { + pub gas_reporter: GasReporter, pub address: H160, pub abi: ethabi::Contract, pub caller: H160, @@ -46,6 +91,7 @@ impl ContractHarness { let caller = address(DEFAULT_CALLER); ContractHarness { + gas_reporter: GasReporter::default(), address: contract_address, abi, caller, @@ -92,6 +138,7 @@ impl ContractHarness { output: Option<ðabi::Token>, ) { let actual_output = self.call_function(executor, name, input); + assert_eq!( output.map(ToOwned::to_owned), actual_output, @@ -107,8 +154,13 @@ impl ContractHarness { input: &[ethabi::Token], ) -> Option { let function = &self.abi.functions[name][0]; + let start_gas = executor.used_gas(); + let capture = self.capture_call(executor, name, input); + let gas_used = executor.used_gas() - start_gas; + self.gas_reporter + .add_func_call_record(name, input, gas_used); - match self.capture_call(executor, name, input) { + match capture { evm::Capture::Exit((ExitReason::Succeed(_), output)) => function .decode_output(&output) .unwrap_or_else(|_| panic!("unable to decode output of {}: {:?}", name, &output)) diff --git a/crates/tests/src/demo_erc20.rs b/crates/tests/src/demo_erc20.rs index becba39a03..6e38e083f0 100644 --- a/crates/tests/src/demo_erc20.rs +++ b/crates/tests/src/demo_erc20.rs @@ -1,6 +1,7 @@ #![cfg(feature = "solc-backend")] use fe_compiler_test_utils::*; +use insta::assert_snapshot; #[test] fn erc20_token() { @@ -177,5 +178,7 @@ fn erc20_token() { ), ], ); + + assert_harness_gas_report!(harness); }); } diff --git a/crates/tests/src/demo_guestbook.rs b/crates/tests/src/demo_guestbook.rs index 3083fe70c8..e01b67b9f8 100644 --- a/crates/tests/src/demo_guestbook.rs +++ b/crates/tests/src/demo_guestbook.rs @@ -1,6 +1,7 @@ #![cfg(feature = "solc-backend")] use fe_compiler_test_utils::*; +use insta::assert_snapshot; #[test] fn guest_book() { @@ -17,5 +18,7 @@ fn guest_book() { harness.test_function(&mut executor, "get_msg", &[sender], Some(&msg)); harness.events_emitted(executor, &[("Signed", &[msg])]); + + assert_harness_gas_report!(harness); }) } diff --git a/crates/tests/src/demo_uniswap.rs b/crates/tests/src/demo_uniswap.rs index 01e3166d1b..5ffac5fec6 100644 --- a/crates/tests/src/demo_uniswap.rs +++ b/crates/tests/src/demo_uniswap.rs @@ -1,6 +1,7 @@ #![cfg(feature = "solc-backend")] use fe_compiler_test_utils::*; +use insta::assert_snapshot; #[test] fn uniswap_contracts() { @@ -283,5 +284,8 @@ fn uniswap_contracts() { &[pair_address], Some(&uint_token_from_dec_str("708")), ); + + assert_harness_gas_report!(pair_harness); + assert_harness_gas_report!(factory_harness); }); } diff --git a/crates/tests/src/features.rs b/crates/tests/src/features.rs index cd20c039d1..4f3faeb9dc 100644 --- a/crates/tests/src/features.rs +++ b/crates/tests/src/features.rs @@ -3,6 +3,7 @@ #![cfg(feature = "solc-backend")] use evm::{Capture, ExitReason}; use evm_runtime::Handler; +use insta::assert_snapshot; use primitive_types::{H160, U256}; use rstest::rstest; use std::collections::BTreeMap; @@ -106,6 +107,8 @@ fn test_send_value() { ), &encode_revert("Error(uint256)", &[uint_token(0x101)]), ); + + assert_harness_gas_report!(harness); }) } @@ -183,6 +186,8 @@ fn test_balances() { &[bob_token], Some(&uint_token(10)), ); + + assert_harness_gas_report!(harness); }) } @@ -437,7 +442,8 @@ fn test_arrays() { fn test_method_return(fixture_file: &str, input: &[ethabi::Token], expected: ethabi::Token) { with_executor(&|mut executor| { let harness = deploy_contract(&mut executor, fixture_file, "Foo", &[]); - harness.test_function(&mut executor, "bar", input, Some(&expected)) + harness.test_function(&mut executor, "bar", input, Some(&expected)); + assert_harness_gas_report!(harness); }) } @@ -451,7 +457,9 @@ fn return_array() { "bar", &[uint_token(42)], Some(&uint_array_token(&[0, 0, 0, 42, 0])), - ) + ); + + assert_harness_gas_report!(harness); }) } @@ -460,7 +468,8 @@ fn numeric_casts() { with_executor(&|mut executor| { let harness = deploy_contract(&mut executor, "numeric_casts.fe", "Foo", &[]); - harness.test_function(&mut executor, "bar", &[], None) + harness.test_function(&mut executor, "bar", &[], None); + assert_harness_gas_report!(harness); }) } @@ -474,7 +483,8 @@ fn multi_param() { "bar", &[uint_token(4), uint_token(42), uint_token(420)], Some(&uint_array_token(&[4, 42, 420])), - ) + ); + assert_harness_gas_report!(harness); }) } @@ -518,6 +528,7 @@ fn test_map(fixture_file: &str) { &[uint_token(26)], Some(&uint_token(12)), ); + assert_harness_gas_report!(harness); }) } @@ -548,6 +559,7 @@ fn address_bytes10_map() { harness.test_function(&mut executor, "read_bar", &[address1], Some(&bytes1)); harness.test_function(&mut executor, "read_bar", &[address2], Some(&bytes2)); + assert_harness_gas_report!(harness); }) } @@ -611,6 +623,7 @@ fn return_builtin_attributes() { &[], Some(&uint_token(gas_price)), ); + assert_harness_gas_report!(harness); }) } @@ -702,6 +715,7 @@ fn nested_map() { &[address2, uint_token(100)], Some(&bool_token(false)), ); + assert_harness_gas_report!(harness); }) } @@ -739,6 +753,7 @@ fn events() { ("Addresses", &[addr_array]), ], ); + assert_harness_gas_report!(harness); }) } @@ -753,6 +768,7 @@ fn constructor() { ); harness.test_function(&mut executor, "read_bar", &[], Some(&uint_token(68))); + assert_harness_gas_report!(harness); }) } @@ -818,6 +834,7 @@ fn strings() { ], )], ); + assert_harness_gas_report!(harness); }); } @@ -852,6 +869,8 @@ fn test_numeric_sizes() { Some(&config.i_max.clone()), ); } + + assert_harness_gas_report!(harness); }) } @@ -875,6 +894,8 @@ fn sized_vals_in_sto() { harness.test_function(&mut executor, "emit_event", &[], None); harness.events_emitted(executor, &[("MyEvent", &[num, nums, string])]); + + assert_harness_gas_report!(harness); }); } @@ -1190,6 +1211,8 @@ fn checked_arithmetic() { Some(&config.i_min), ); } + + assert_harness_gas_report!(harness); }); } @@ -1245,6 +1268,8 @@ fn structs() { &[], Some(&string_token("foo")), ); + + assert_harness_gas_report!(harness); }); } @@ -1298,6 +1323,8 @@ fn keccak() { keccak::full_as_bytes("foo".as_bytes()).into(), )), ); + + assert_harness_gas_report!(harness); }); } @@ -1324,6 +1351,8 @@ fn short_circuit() { Some(&bool_token(true)), ); harness.test_function_reverts(&mut executor, "short_circuit_or", &[bool_token(false)], &[]); + + assert_harness_gas_report!(harness); }); } @@ -1344,14 +1373,17 @@ fn math() { &[uint_token(1), uint_token(2)], Some(&uint_token(1)), ); + + assert_harness_gas_report!(harness); }); } #[test] fn two_contracts() { with_executor(&|mut executor| { - let foo_harness = deploy_contract(&mut executor, "two_contracts.fe", "Foo", &[]); - foo_harness.test_function(&mut executor, "foo", &[], Some(&uint_token(42))); + let harness = deploy_contract(&mut executor, "two_contracts.fe", "Foo", &[]); + harness.test_function(&mut executor, "foo", &[], Some(&uint_token(42))); + assert_harness_gas_report!(harness); }) } @@ -1390,6 +1422,8 @@ fn external_contract() { ); foo_harness.events_emitted(executor, &[("MyEvent", &[my_num, my_addrs, my_string])]); + + assert_harness_gas_report!(proxy_harness); }) } @@ -1408,6 +1442,8 @@ fn create2_contract() { let foo_harness = load_contract(foo_address, "create2_contract.fe", "Foo"); foo_harness.test_function(&mut executor, "get_my_num", &[], Some(&uint_token(42))); + + assert_harness_gas_report!(factory_harness); }) } @@ -1426,6 +1462,8 @@ fn create_contract() { let foo_harness = load_contract(foo_address, "create_contract.fe", "Foo"); foo_harness.test_function(&mut executor, "get_my_num", &[], Some(&uint_token(42))); + + assert_harness_gas_report!(factory_harness); }) } @@ -1448,6 +1486,8 @@ fn create_contract_from_init() { let foo_harness = load_contract(foo_address, "create_contract_from_init.fe", "Foo"); foo_harness.test_function(&mut executor, "get_my_num", &[], Some(&uint_token(42))); + + assert_harness_gas_report!(factory_harness); }) } @@ -1505,6 +1545,7 @@ fn aug_assign(target: u64, op: &str, value: u64, expected: u64) { &[uint_token(target), uint_token(value)], Some(&uint_token(expected)), ); + assert_harness_gas_report!(harness); }); } @@ -1518,6 +1559,7 @@ fn base_tuple() { &[uint_token(42), bool_token(true)], Some(&tuple_token(&[uint_token(42), bool_token(true)])), ); + assert_harness_gas_report!(harness); }); } @@ -1532,6 +1574,7 @@ fn tuple_destructuring() { &[uint_token(1), bool_token(false)], Some(&uint_token(1)), ); + assert_harness_gas_report!(harness); }); } @@ -1787,6 +1830,8 @@ fn intrinsics() { &[], Some(ðabi::Token::Address(harness.caller)), ); + + assert_harness_gas_report!(harness); }); } @@ -1801,7 +1846,9 @@ fn call_fn() { harness.test_call_reverts(&mut executor, calldata.clone(), &[]); calldata[31] = 0; - harness.test_call_returns(&mut executor, calldata, &[]) + harness.test_call_returns(&mut executor, calldata, &[]); + + assert_harness_gas_report!(harness); }); } @@ -1817,6 +1864,8 @@ fn signext_int_array1(method: &str, params: &[ethabi::Token], expected: Option