diff --git a/.gitignore b/.gitignore index abd2877c54..4418e0f52b 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ tarpaulin-report.html openspec/ AGENTS.md CLAUDE.md +.codex .claude/ .gemini/ diff --git a/crates/codegen/src/sonatina/lower_runtime.rs b/crates/codegen/src/sonatina/lower_runtime.rs index 0133133bd6..1f92e633f1 100644 --- a/crates/codegen/src/sonatina/lower_runtime.rs +++ b/crates/codegen/src/sonatina/lower_runtime.rs @@ -1714,13 +1714,14 @@ impl<'ctx, 'db, 'a> FunctionLowerer<'ctx, 'db, 'a> { )); zero_for_type(&mut self.fb, Type::Unit) } - RuntimeBuiltin::CallDataSelector => { + RuntimeBuiltin::CallDataSelector { selector_size, .. } => { let zero = self.fb.make_imm_value(I256::zero()); let word = self.fb.insert_inst( EvmCalldataLoad::new(self.module.inst_set(), zero), Type::I256, ); - let shift = self.fb.make_imm_value(I256::from(224u64)); + let shift_bits = 8u64 * (32u64.saturating_sub(*selector_size)); + let shift = self.fb.make_imm_value(I256::from(shift_bits)); self.fb .insert_inst(Shr::new(self.module.inst_set(), shift, word), Type::I256) } diff --git a/crates/codegen/tests/fixtures/sonatina_ir/by_ref_trait_provider_storage_bug.snap b/crates/codegen/tests/fixtures/sonatina_ir/by_ref_trait_provider_storage_bug.snap index ba351e2d04..aa72762409 100644 --- a/crates/codegen/tests/fixtures/sonatina_ir/by_ref_trait_provider_storage_bug.snap +++ b/crates/codegen/tests/fixtures/sonatina_ir/by_ref_trait_provider_storage_bug.snap @@ -1,5 +1,6 @@ --- source: crates/codegen/tests/sonatina_ir.rs +assertion_line: 403 expression: output input_file: crates/codegen/tests/fixtures/by_ref_trait_provider_storage_bug.fe --- @@ -48,7 +49,7 @@ func private %abi_field_size(v0.i256) -> i256 { block1: v2.i256 = mload v1 i256; - v3.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_83d5_0 v2; + v3.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_d410_0 v2; br 0.i1 block2 block3; block2: @@ -82,7 +83,17 @@ func private %abi_single_root_size(v0.i256) -> i256 { return v3; } -func private %base(v0.objref<@layout_0>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_1107(v0.objref<@layout_0>) -> i256 { + block0: + jump block1; + + block1: + v3.objref = obj.proj v0 0.i256; + v4.i256 = obj.load v3; + return v4; +} + +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_1107_0(v0.objref<@layout_0>) -> i256 { block0: jump block1; @@ -195,15 +206,20 @@ func private %contract_runtime_root_ByRefTraitProviderStorageBug() { jump block1; block1: - v1.i256 = evm_calldata_load 0.i256; - v3.i256 = shr 224.i256 v1; - v4.i32 = trunc v3 i32; - br_table v4 block2 (1.i32 block3); + v1.i256 = evm_calldata_size; + v3.i1 = lt v1 4.i256; + br v3 block2 block3; block2: evm_revert 0.i256 0.i256; block3: + v5.i256 = evm_calldata_load 0.i256; + v7.i256 = shr 224.i256 v5; + v8.i32 = trunc v7 i32; + br_table v8 block2 (1.i32 block4); + + block4: call %contract_recv_abi_ByRefTraitProviderStorageBug_1; unreachable; } @@ -230,7 +246,7 @@ func private %encode(v0.i256, v1.objref<@layout_0>) { jump block1; block1: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_e918 v1 v0; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_1fac v1 v0; return; } @@ -242,8 +258,8 @@ func private %encode_field(v0.i256, v1.objref<@layout_0>, v2.i256) { br 0.i1 block2 block3; block2: - v5.i256 = call %base v1; - v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_83d5 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_1107 v1; + v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_d410 v0; v9.i256 = mload v2 i256; (v10.i256, v11.i1) = usubo v9 v5; br v11 block5 block6; @@ -261,7 +277,7 @@ func private %encode_field(v0.i256, v1.objref<@layout_0>, v2.i256) { evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_7682 v1 v10; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_d8bf v1 v10; v19.i256 = call %pos v1; v21.i256 = mload v2 i256; call %set_base v1 v21; @@ -285,7 +301,7 @@ func private %encode_single_root(v0.i256, v1.objref<@layout_0>) { jump block1; block1: - v4.i256 = call %base v1; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_1107 v1; (v6.i256, v7.i1) = uaddo v4 32.i256; br v7 block2 block3; @@ -315,7 +331,7 @@ func private %encode_single_root_alloc(v0.i256) -> @layout_4 { v9.objref = obj.proj v4 1.i256; v10.i256 = extract_value v3 1.i256; obj.store v9 v10; - v11.i256 = call %base v4; + v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_1107_0 v4; call %encode_single_root v0 v4; v13.objref<@layout_4> = obj.alloc @layout_4; v14.objref = obj.proj v13 0.i256; @@ -413,7 +429,7 @@ func private %impl_SolEncoder__new(v0.i256) -> @layout_0 { return v13; } -func private %core__lib__abi__trait_AbiSize__payload_size__ge513_83d5(v0.i256) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__ge513_d410(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -423,7 +439,7 @@ func private %core__lib__abi__trait_AbiSize__payload_size__ge513_83d5(v0.i256) - return 32.i256; } -func private %core__lib__abi__trait_AbiSize__payload_size__ge513_83d5_0(v0.i256) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__ge513_d410_0(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -498,7 +514,7 @@ func private %use_ctx(v0.i256) -> i256 { return v2; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_7682(v0.objref<@layout_0>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_1fac(v0.objref<@layout_0>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -515,7 +531,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_7682(v0 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_e918(v0.objref<@layout_0>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_d8bf(v0.objref<@layout_0>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; diff --git a/crates/codegen/tests/fixtures/sonatina_ir/code_region_qualified.snap b/crates/codegen/tests/fixtures/sonatina_ir/code_region_qualified.snap index 87a74bd22e..9cffe631b5 100644 --- a/crates/codegen/tests/fixtures/sonatina_ir/code_region_qualified.snap +++ b/crates/codegen/tests/fixtures/sonatina_ir/code_region_qualified.snap @@ -36,7 +36,7 @@ func private %init(v0.objref<@layout_1>) { v3.*i8 = evm_malloc v1; v4.i256 = ptr_to_int v3 i256; call %codecopy v0 v4 v2 v1; - call %std__lib__evm__effects__impl_trait_Evm_0098__return_data_cf61 v4 v1; + call %std__lib__evm__effects__impl_trait_Evm_0098__return_data_cf61_0 v4 v1; unreachable; } @@ -93,7 +93,7 @@ func private %runtime(v0.objref<@layout_1>) { jump block1; block1: - call %std__lib__evm__effects__impl_trait_Evm_0098__return_data_cf61_0 0.i256 0.i256; + call %std__lib__evm__effects__impl_trait_Evm_0098__return_data_cf61 0.i256 0.i256; unreachable; } diff --git a/crates/codegen/tests/fixtures/sonatina_ir/create_contract.snap b/crates/codegen/tests/fixtures/sonatina_ir/create_contract.snap index 0ca1ba83b4..2f69bd110f 100644 --- a/crates/codegen/tests/fixtures/sonatina_ir/create_contract.snap +++ b/crates/codegen/tests/fixtures/sonatina_ir/create_contract.snap @@ -10,9 +10,9 @@ type @layout_1 = {@layout_0}; type @layout_2 = {i256}; type @layout_3 = {i256, i256}; type @layout_4 = {i256, i256}; -type @layout_5 = {i256, i256}; +type @layout_5 = {@layout_4, i256}; type @layout_6 = {@layout_5, i256}; -type @layout_7 = {@layout_6, i256}; +type @layout_7 = {i256, i256}; type @layout_8 = {i256, i256}; type @layout_9 = {i256, i256, i256}; @@ -73,7 +73,7 @@ func private %abi_field_size(v0.@layout_2) -> i256 { block1: v5.@layout_2 = obj.load v1; - v6.i256 = call %core__lib__abi__trait_AbiSize__payload_size__g67a8_7f10_0 v5; + v6.i256 = call %core__lib__abi__trait_AbiSize__payload_size__g67a8_22ab_0 v5; br 0.i1 block2 block3; block2: @@ -126,27 +126,27 @@ func private %abi_single_root_size(v0.@layout_2) -> i256 { return v6; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_0639(v0.objref<@layout_4>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_1c35(v0.objref<@layout_6>) -> i256 { block0: jump block1; block1: - v3.objref = obj.proj v0 0.i256; + v3.objref = obj.proj v0 1.i256; v4.i256 = obj.load v3; return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_0639_0(v0.objref<@layout_4>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_7e81(v0.objref<@layout_6>) -> i256 { block0: jump block1; block1: - v3.objref = obj.proj v0 0.i256; + v3.objref = obj.proj v0 1.i256; v4.i256 = obj.load v3; return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_32b3(v0.objref<@layout_4>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_9234(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -156,7 +156,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_32b3(v0.objre return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_5cdf(v0.objref<@layout_4>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_9234_0(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -166,7 +166,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_5cdf(v0.objre return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_a76a(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_a428(v0.objref<@layout_6>) -> i256 { block0: jump block1; @@ -176,30 +176,40 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_a76a(v return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_c677(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_cef9(v0.objref<@layout_7>) -> i256 { block0: jump block1; block1: - v3.objref = obj.proj v0 1.i256; + v3.objref = obj.proj v0 0.i256; v4.i256 = obj.load v3; return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_d017(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_f05c(v0.objref<@layout_7>) -> i256 { block0: jump block1; block1: - v3.objref = obj.proj v0 1.i256; + v3.objref = obj.proj v0 0.i256; + v4.i256 = obj.load v3; + return v4; +} + +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_f05c_0(v0.objref<@layout_7>) -> i256 { + block0: + jump block1; + + block1: + v3.objref = obj.proj v0 0.i256; v4.i256 = obj.load v3; return v4; } func private %contract_init_abi_Child() { block0: - v0.objref<@layout_5> = obj.alloc @layout_5; - v1.objref<@layout_7> = obj.alloc @layout_7; + v0.objref<@layout_4> = obj.alloc @layout_4; + v1.objref<@layout_6> = obj.alloc @layout_6; jump block1; block1: @@ -237,12 +247,12 @@ func private %contract_init_abi_Child() { obj.store v23 v20; v25.objref = obj.proj v0 1.i256; obj.store v25 v13; - v26.@layout_5 = obj.load v0; - v27.@layout_7 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__decoder_new__g463e_badd v26; - v28.objref<@layout_6> = obj.proj v1 0.i256; - v29.@layout_6 = extract_value v27 0.i256; - v30.objref<@layout_5> = obj.proj v28 0.i256; - v31.@layout_5 = extract_value v29 0.i256; + v26.@layout_4 = obj.load v0; + v27.@layout_6 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__decoder_new__g463e_badd v26; + v28.objref<@layout_5> = obj.proj v1 0.i256; + v29.@layout_5 = extract_value v27 0.i256; + v30.objref<@layout_4> = obj.proj v28 0.i256; + v31.@layout_4 = extract_value v29 0.i256; v32.objref = obj.proj v30 0.i256; v33.i256 = extract_value v31 0.i256; obj.store v32 v33; @@ -314,8 +324,8 @@ func private %contract_init_root_Factory() { func private %contract_recv_abi_Factory_1() { block0: - v0.objref<@layout_5> = obj.alloc @layout_5; - v1.objref<@layout_7> = obj.alloc @layout_7; + v0.objref<@layout_4> = obj.alloc @layout_4; + v1.objref<@layout_6> = obj.alloc @layout_6; jump block1; block1: @@ -345,12 +355,12 @@ func private %contract_recv_abi_Factory_1() { obj.store v19 v16; v21.objref = obj.proj v0 1.i256; obj.store v21 v10; - v22.@layout_5 = obj.load v0; - v23.@layout_7 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__decoder_new__g463e_badd_0 v22; - v24.objref<@layout_6> = obj.proj v1 0.i256; - v25.@layout_6 = extract_value v23 0.i256; - v26.objref<@layout_5> = obj.proj v24 0.i256; - v27.@layout_5 = extract_value v25 0.i256; + v22.@layout_4 = obj.load v0; + v23.@layout_6 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__decoder_new__g463e_badd_0 v22; + v24.objref<@layout_5> = obj.proj v1 0.i256; + v25.@layout_5 = extract_value v23 0.i256; + v26.objref<@layout_4> = obj.proj v24 0.i256; + v27.@layout_4 = extract_value v25 0.i256; v28.objref = obj.proj v26 0.i256; v29.i256 = extract_value v27 0.i256; obj.store v28 v29; @@ -394,8 +404,8 @@ func private %contract_recv_abi_Factory_1() { func private %contract_recv_abi_Factory_2() { block0: - v0.objref<@layout_5> = obj.alloc @layout_5; - v1.objref<@layout_7> = obj.alloc @layout_7; + v0.objref<@layout_4> = obj.alloc @layout_4; + v1.objref<@layout_6> = obj.alloc @layout_6; jump block1; block1: @@ -425,12 +435,12 @@ func private %contract_recv_abi_Factory_2() { obj.store v19 v16; v21.objref = obj.proj v0 1.i256; obj.store v21 v10; - v22.@layout_5 = obj.load v0; - v23.@layout_7 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__decoder_new__g463e_badd_0 v22; - v24.objref<@layout_6> = obj.proj v1 0.i256; - v25.@layout_6 = extract_value v23 0.i256; - v26.objref<@layout_5> = obj.proj v24 0.i256; - v27.@layout_5 = extract_value v25 0.i256; + v22.@layout_4 = obj.load v0; + v23.@layout_6 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__decoder_new__g463e_badd_0 v22; + v24.objref<@layout_5> = obj.proj v1 0.i256; + v25.@layout_5 = extract_value v23 0.i256; + v26.objref<@layout_4> = obj.proj v24 0.i256; + v27.@layout_4 = extract_value v25 0.i256; v28.objref = obj.proj v26 0.i256; v29.i256 = extract_value v27 0.i256; obj.store v28 v29; @@ -482,10 +492,7 @@ func private %contract_runtime_root_Child() { jump block1; block1: - v1.i256 = evm_calldata_load 0.i256; - v3.i256 = shr 224.i256 v1; - v4.i32 = trunc v3 i32; - br_table v4 block2; + jump block2; block2: evm_revert 0.i256 0.i256; @@ -496,19 +503,24 @@ func private %contract_runtime_root_Factory() { jump block1; block1: - v1.i256 = evm_calldata_load 0.i256; - v3.i256 = shr 224.i256 v1; - v4.i32 = trunc v3 i32; - br_table v4 block2 (1.i32 block3) (2.i32 block4); + v1.i256 = evm_calldata_size; + v3.i1 = lt v1 4.i256; + br v3 block2 block3; block2: evm_revert 0.i256 0.i256; block3: + v5.i256 = evm_calldata_load 0.i256; + v7.i256 = shr 224.i256 v5; + v8.i32 = trunc v7 i32; + br_table v8 block2 (1.i32 block4) (2.i32 block5); + + block4: call %contract_recv_abi_Factory_1; unreachable; - block4: + block5: call %contract_recv_abi_Factory_2; unreachable; } @@ -826,7 +838,7 @@ func private %create_raw(v0.objref<@layout_1>, v1.i256, v2.i256, v3.i256) -> @la return v14; } -func private %core__lib__abi__decode_field__g3854_7ff1(v0.objref<@layout_7>) -> i256 { +func private %core__lib__abi__decode_field__g3854_7ff1(v0.objref<@layout_6>) -> i256 { block0: jump block1; @@ -834,9 +846,9 @@ func private %core__lib__abi__decode_field__g3854_7ff1(v0.objref<@layout_7>) -> br 0.i1 block2 block3; block2: - v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_3bfc v0; - v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_a76a v0; - v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_ad58 v0; + v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_faaf v0; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_1c35 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_d6f6 v0; (v6.i256, v7.i1) = uaddo v4 v3; br v7 block5 block6; @@ -844,7 +856,7 @@ func private %core__lib__abi__decode_field__g3854_7ff1(v0.objref<@layout_7>) -> jump block4; block4: - v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_a2fc v0; + v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_4a2a v0; return v23; block5: @@ -853,16 +865,16 @@ func private %core__lib__abi__decode_field__g3854_7ff1(v0.objref<@layout_7>) -> evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_c080 v0 v6; - v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_a76a v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_7f62 v0 v15; - v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_a2fc v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_c080 v0 v4; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_7f62 v0 v5; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_3a94 v0 v6; + v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_1c35 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_e50d v0 v15; + v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_4a2a v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_3a94 v0 v4; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_e50d v0 v5; return v17; } -func private %core__lib__abi__decode_field__g3854_ae51(v0.objref<@layout_7>) -> i256 { +func private %core__lib__abi__decode_field__g3854_a7a6(v0.objref<@layout_6>) -> i256 { block0: jump block1; @@ -870,9 +882,9 @@ func private %core__lib__abi__decode_field__g3854_ae51(v0.objref<@layout_7>) -> br 0.i1 block2 block3; block2: - v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_bdd2 v0; - v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_d017 v0; - v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_6e96 v0; + v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_f1cb v0; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_7e81 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_3ada v0; (v6.i256, v7.i1) = uaddo v4 v3; br v7 block5 block6; @@ -880,7 +892,7 @@ func private %core__lib__abi__decode_field__g3854_ae51(v0.objref<@layout_7>) -> jump block4; block4: - v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_6da3 v0; + v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_456a v0; return v23; block5: @@ -889,16 +901,16 @@ func private %core__lib__abi__decode_field__g3854_ae51(v0.objref<@layout_7>) -> evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_8106 v0 v6; - v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_d017 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_010d v0 v15; - v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_6da3 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_8106 v0 v4; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_010d v0 v5; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_6c7c v0 v6; + v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_7e81 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_9070 v0 v15; + v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_456a v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_6c7c v0 v4; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_9070 v0 v5; return v17; } -func private %core__lib__abi__decode_field__g3854_f9bf(v0.objref<@layout_7>) -> i256 { +func private %core__lib__abi__decode_field__g3854_ae51(v0.objref<@layout_6>) -> i256 { block0: jump block1; @@ -906,9 +918,9 @@ func private %core__lib__abi__decode_field__g3854_f9bf(v0.objref<@layout_7>) -> br 0.i1 block2 block3; block2: - v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_0984 v0; - v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_c677 v0; - v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_8da8 v0; + v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_1d57 v0; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_a428 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_62d0 v0; (v6.i256, v7.i1) = uaddo v4 v3; br v7 block5 block6; @@ -916,7 +928,7 @@ func private %core__lib__abi__decode_field__g3854_f9bf(v0.objref<@layout_7>) -> jump block4; block4: - v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_fcef v0; + v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_cfa9 v0; return v23; block5: @@ -925,16 +937,16 @@ func private %core__lib__abi__decode_field__g3854_f9bf(v0.objref<@layout_7>) -> evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_504e v0 v6; - v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_c677 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_7f12 v0 v15; - v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_fcef v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_504e v0 v4; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_7f12 v0 v5; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_a4e0 v0 v6; + v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_a428 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_4f6f v0 v15; + v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_cfa9 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_a4e0 v0 v4; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_4f6f v0 v5; return v17; } -func private %impl_trait_Deploy__decode_payload__gf196(v0.objref<@layout_7>) -> @layout_8 { +func private %impl_trait_Deploy__decode_payload__gf196(v0.objref<@layout_6>) -> @layout_8 { block0: jump block1; @@ -950,25 +962,25 @@ func private %impl_trait_Deploy__decode_payload__gf196(v0.objref<@layout_7>) -> return v9; } -func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_6da3(v0.objref<@layout_7>) -> i256 { +func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_456a(v0.objref<@layout_6>) -> i256 { block0: jump block1; block1: - v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_e372 v0; + v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_f0e4 v0; return v2; } -func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_a2fc(v0.objref<@layout_7>) -> i256 { +func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_4a2a(v0.objref<@layout_6>) -> i256 { block0: jump block1; block1: - v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_be19 v0; + v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_de06 v0; return v2; } -func private %impl_trait_Deploy2__decode_payload__gf196(v0.objref<@layout_7>) -> @layout_9 { +func private %impl_trait_Deploy2__decode_payload__gf196(v0.objref<@layout_6>) -> @layout_9 { block0: jump block1; @@ -987,13 +999,22 @@ func private %impl_trait_Deploy2__decode_payload__gf196(v0.objref<@layout_7>) -> return v12; } -func private %decode_payload__g4770(v0.objref<@layout_7>) -> @layout_3 { +func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_cfa9(v0.objref<@layout_6>) -> i256 { + block0: + jump block1; + + block1: + v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_e297 v0; + return v2; +} + +func private %decode_payload__g4770(v0.objref<@layout_6>) -> @layout_3 { block0: jump block1; block1: - v2.i256 = call %core__lib__abi__decode_field__g3854_f9bf v0; - v3.i256 = call %core__lib__abi__decode_field__g3854_f9bf v0; + v2.i256 = call %core__lib__abi__decode_field__g3854_a7a6 v0; + v3.i256 = call %core__lib__abi__decode_field__g3854_a7a6 v0; v4.objref<@layout_3> = obj.alloc @layout_3; v6.objref = obj.proj v4 0.i256; obj.store v6 v2; @@ -1003,30 +1024,21 @@ func private %decode_payload__g4770(v0.objref<@layout_7>) -> @layout_3 { return v9; } -func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_fcef(v0.objref<@layout_7>) -> i256 { - block0: - jump block1; - - block1: - v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_8dbd v0; - return v2; -} - -func private %std__lib__abi__sol__impl_trait_Sol_1f5f__decoder_new__g463e_badd(v0.@layout_5) -> @layout_7 { +func private %std__lib__abi__sol__impl_trait_Sol_1f5f__decoder_new__g463e_badd(v0.@layout_4) -> @layout_6 { block0: jump block1; block1: - v2.@layout_7 = call %std__lib__abi__sol__impl_SolDecoder_113c__new__g463e_ff02 v0; + v2.@layout_6 = call %std__lib__abi__sol__impl_SolDecoder_113c__new__g463e_5b76 v0; return v2; } -func private %std__lib__abi__sol__impl_trait_Sol_1f5f__decoder_new__g463e_badd_0(v0.@layout_5) -> @layout_7 { +func private %std__lib__abi__sol__impl_trait_Sol_1f5f__decoder_new__g463e_badd_0(v0.@layout_4) -> @layout_6 { block0: jump block1; block1: - v2.@layout_7 = call %std__lib__abi__sol__impl_SolDecoder_113c__new__g463e_ff02_0 v0; + v2.@layout_6 = call %std__lib__abi__sol__impl_SolDecoder_113c__new__g463e_5b76_0 v0; return v2; } @@ -1041,7 +1053,7 @@ func private %dynamic_payload_size(v0.i256) -> i256 { block2: v3.i256 = mload v1 i256; - v4.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_a376 v3; + v4.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_da2e v3; return v4; block3: @@ -1051,7 +1063,7 @@ func private %dynamic_payload_size(v0.i256) -> i256 { return 0.i256; } -func private %encode__g7769(v0.@layout_3, v1.objref<@layout_4>) { +func private %encode__g7769(v0.@layout_3, v1.objref<@layout_7>) { block0: v2.objref<@layout_3> = obj.alloc @layout_3; v3.*i256 = alloca i256; @@ -1064,7 +1076,7 @@ func private %encode__g7769(v0.@layout_3, v1.objref<@layout_4>) { jump block1; block1: - v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_0639_0 v1; + v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_9234_0 v1; (v13.i256, v14.i1) = uaddo v11 64.i256; br v14 block2 block3; @@ -1086,31 +1098,25 @@ func private %encode__g7769(v0.@layout_3, v1.objref<@layout_4>) { return; } -func private %impl_trait_Address__encode__g426c(v0.@layout_2, v1.objref<@layout_4>) { +func private %impl_trait_u256__encode__g426c(v0.i256, v1.objref<@layout_7>) { block0: - v2.objref<@layout_2> = obj.alloc @layout_2; - v4.objref = obj.proj v2 0.i256; - v5.i256 = extract_value v0 0.i256; - obj.store v4 v5; jump block1; block1: - v6.objref = obj.proj v2 0.i256; - v7.i256 = obj.load v6; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_2c07 v1 v7; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_9e76 v1 v0; return; } -func private %impl_trait_u256__encode__g426c(v0.i256, v1.objref<@layout_4>) { +func private %encode_abi_payload(v0.@layout_3) -> @layout_3 { block0: jump block1; block1: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_4070 v1 v0; - return; + v2.@layout_3 = call %encode_abi_payload_abi v0; + return v2; } -func private %encode_abi_payload(v0.@layout_3) -> @layout_3 { +func private %encode_abi_payload_abi(v0.@layout_3) -> @layout_3 { block0: jump block1; @@ -1125,15 +1131,15 @@ func private %encode_alloc(v0.@layout_3) -> @layout_3 { block1: v2.i256 = call %abi_payload_size v0; - v3.@layout_4 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_8751 v2; - v4.objref<@layout_4> = obj.alloc @layout_4; + v3.@layout_7 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_c31f v2; + v4.objref<@layout_7> = obj.alloc @layout_7; v6.objref = obj.proj v4 0.i256; v7.i256 = extract_value v3 0.i256; obj.store v6 v7; v9.objref = obj.proj v4 1.i256; v10.i256 = extract_value v3 1.i256; obj.store v9 v10; - v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_5cdf v4; + v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_cef9 v4; call %encode__g7769 v0 v4; v13.objref<@layout_3> = obj.alloc @layout_3; v14.objref = obj.proj v13 0.i256; @@ -1144,7 +1150,22 @@ func private %encode_alloc(v0.@layout_3) -> @layout_3 { return v16; } -func private %encode_field__g2e64(v0.i256, v1.objref<@layout_4>, v2.i256) { +func private %impl_trait_Address__encode__g426c(v0.@layout_2, v1.objref<@layout_7>) { + block0: + v2.objref<@layout_2> = obj.alloc @layout_2; + v4.objref = obj.proj v2 0.i256; + v5.i256 = extract_value v0 0.i256; + obj.store v4 v5; + jump block1; + + block1: + v6.objref = obj.proj v2 0.i256; + v7.i256 = obj.load v6; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_48e4 v1 v7; + return; +} + +func private %encode_field__gf6b4(v0.@layout_2, v1.objref<@layout_7>, v2.i256) { block0: jump block1; @@ -1152,8 +1173,8 @@ func private %encode_field__g2e64(v0.i256, v1.objref<@layout_4>, v2.i256) { br 0.i1 block2 block3; block2: - v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_0639 v1; - v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_ccad v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_f05c v1; + v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__g67a8_22ab v0; v9.i256 = mload v2 i256; (v10.i256, v11.i1) = usubo v9 v5; br v11 block5 block6; @@ -1162,7 +1183,7 @@ func private %encode_field__g2e64(v0.i256, v1.objref<@layout_4>, v2.i256) { jump block4; block4: - call %impl_trait_u256__encode__g426c v0 v1; + call %impl_trait_Address__encode__g426c v0 v1; return; block5: @@ -1171,15 +1192,15 @@ func private %encode_field__g2e64(v0.i256, v1.objref<@layout_4>, v2.i256) { evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_1f5e v1 v10; - v19.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_65f2 v1; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_43d2 v1 v10; + v19.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__pos__gf13e_57f4 v1; v21.i256 = mload v2 i256; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_3f4d v1 v21; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_02a0 v1 v21; v23.i256 = mload v2 i256; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_863e v1 v23; - call %impl_trait_u256__encode__g426c v0 v1; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_3f4d v1 v5; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_863e v1 v19; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_ad86 v1 v23; + call %impl_trait_Address__encode__g426c v0 v1; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_02a0 v1 v5; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_ad86 v1 v19; v30.i256 = mload v2 i256; (v32.i256, v33.i1) = uaddo v30 v8; br v33 block5 block7; @@ -1189,7 +1210,7 @@ func private %encode_field__g2e64(v0.i256, v1.objref<@layout_4>, v2.i256) { return; } -func private %encode_field__gf6b4(v0.@layout_2, v1.objref<@layout_4>, v2.i256) { +func private %encode_field__g2e64(v0.i256, v1.objref<@layout_7>, v2.i256) { block0: jump block1; @@ -1197,8 +1218,8 @@ func private %encode_field__gf6b4(v0.@layout_2, v1.objref<@layout_4>, v2.i256) { br 0.i1 block2 block3; block2: - v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_32b3 v1; - v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__g67a8_7f10 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_9234 v1; + v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_b252 v0; v9.i256 = mload v2 i256; (v10.i256, v11.i1) = usubo v9 v5; br v11 block5 block6; @@ -1207,7 +1228,7 @@ func private %encode_field__gf6b4(v0.@layout_2, v1.objref<@layout_4>, v2.i256) { jump block4; block4: - call %impl_trait_Address__encode__g426c v0 v1; + call %impl_trait_u256__encode__g426c v0 v1; return; block5: @@ -1216,15 +1237,15 @@ func private %encode_field__gf6b4(v0.@layout_2, v1.objref<@layout_4>, v2.i256) { evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_528a v1 v10; - v19.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_de88 v1; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_5707 v1 v10; + v19.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__pos__gf13e_bd8f v1; v21.i256 = mload v2 i256; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_b006 v1 v21; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_42c1 v1 v21; v23.i256 = mload v2 i256; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_d061 v1 v23; - call %impl_trait_Address__encode__g426c v0 v1; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_b006 v1 v5; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_d061 v1 v19; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_6571 v1 v23; + call %impl_trait_u256__encode__g426c v0 v1; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_42c1 v1 v5; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_6571 v1 v19; v30.i256 = mload v2 i256; (v32.i256, v33.i1) = uaddo v30 v8; br v33 block5 block7; @@ -1234,13 +1255,13 @@ func private %encode_field__gf6b4(v0.@layout_2, v1.objref<@layout_4>, v2.i256) { return; } -func private %encode_single_root(v0.@layout_2, v1.objref<@layout_4>) { +func private %encode_single_root(v0.@layout_2, v1.objref<@layout_7>) { block0: v2.*i256 = alloca i256; jump block1; block1: - v4.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_32b3 v1; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_f05c v1; (v6.i256, v7.i1) = uaddo v4 32.i256; br v7 block2 block3; @@ -1262,15 +1283,15 @@ func private %encode_single_root_alloc(v0.@layout_2) -> @layout_3 { block1: v2.i256 = call %abi_single_root_size v0; - v3.@layout_4 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_c533 v2; - v4.objref<@layout_4> = obj.alloc @layout_4; + v3.@layout_7 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_15b2 v2; + v4.objref<@layout_7> = obj.alloc @layout_7; v6.objref = obj.proj v4 0.i256; v7.i256 = extract_value v3 0.i256; obj.store v6 v7; v9.objref = obj.proj v4 1.i256; v10.i256 = extract_value v3 1.i256; obj.store v9 v10; - v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_32b3 v4; + v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_f05c_0 v4; call %encode_single_root v0 v4; v13.objref<@layout_3> = obj.alloc @layout_3; v14.objref = obj.proj v13 0.i256; @@ -1281,7 +1302,7 @@ func private %encode_single_root_alloc(v0.@layout_2) -> @layout_3 { return v16; } -func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_8751(v0.i256) -> @layout_4 { +func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_15b2(v0.i256) -> @layout_7 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -1289,11 +1310,11 @@ func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_8751(v0.i256) block1: v2.i256 = mload v1 i256; - v3.@layout_4 = call %std__lib__abi__sol__impl_SolEncoder_ce34__new_61f8 v2; + v3.@layout_7 = call %std__lib__abi__sol__impl_SolEncoder_ce34__new_31b9 v2; return v3; } -func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_c533(v0.i256) -> @layout_4 { +func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_c31f(v0.i256) -> @layout_7 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -1301,13 +1322,13 @@ func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_c533(v0.i256) block1: v2.i256 = mload v1 i256; - v3.@layout_4 = call %std__lib__abi__sol__impl_SolEncoder_ce34__new_aa27 v2; + v3.@layout_7 = call %std__lib__abi__sol__impl_SolEncoder_ce34__new_2dfb v2; return v3; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_3a5b(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_2779(v0.@layout_4) -> i256 { block0: - v1.objref<@layout_5> = obj.alloc @layout_5; + v1.objref<@layout_4> = obj.alloc @layout_4; v3.objref = obj.proj v1 0.i256; v4.i256 = extract_value v0 0.i256; obj.store v3 v4; @@ -1322,9 +1343,9 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_3a5b return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_7357(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_7d52(v0.@layout_4) -> i256 { block0: - v1.objref<@layout_5> = obj.alloc @layout_5; + v1.objref<@layout_4> = obj.alloc @layout_4; v3.objref = obj.proj v1 0.i256; v4.i256 = extract_value v0 0.i256; obj.store v3 v4; @@ -1339,9 +1360,9 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_7357 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_7ae6(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_a13b(v0.@layout_4) -> i256 { block0: - v1.objref<@layout_5> = obj.alloc @layout_5; + v1.objref<@layout_4> = obj.alloc @layout_4; v3.objref = obj.proj v1 0.i256; v4.i256 = extract_value v0 0.i256; obj.store v3 v4; @@ -1356,9 +1377,9 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_7ae6 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_afea(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_be02(v0.@layout_4) -> i256 { block0: - v1.objref<@layout_5> = obj.alloc @layout_5; + v1.objref<@layout_4> = obj.alloc @layout_4; v3.objref = obj.proj v1 0.i256; v4.i256 = extract_value v0 0.i256; obj.store v3 v4; @@ -1373,9 +1394,9 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_afea return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_f2e9(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_c67b(v0.@layout_4) -> i256 { block0: - v1.objref<@layout_5> = obj.alloc @layout_5; + v1.objref<@layout_4> = obj.alloc @layout_4; v3.objref = obj.proj v1 0.i256; v4.i256 = extract_value v0 0.i256; obj.store v3 v4; @@ -1390,9 +1411,9 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_f2e9 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_f8f2(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_f289(v0.@layout_4) -> i256 { block0: - v1.objref<@layout_5> = obj.alloc @layout_5; + v1.objref<@layout_4> = obj.alloc @layout_4; v3.objref = obj.proj v1 0.i256; v4.i256 = extract_value v0 0.i256; obj.store v3 v4; @@ -1407,45 +1428,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_f8f2 return v9; } -func private %core__lib__abi__impl_Cursor_1a04__new__g463e_15c7(v0.@layout_5) -> @layout_6 { - block0: - jump block1; - - block1: - v2.objref<@layout_6> = obj.alloc @layout_6; - v4.objref<@layout_5> = obj.proj v2 0.i256; - v5.objref = obj.proj v4 0.i256; - v6.i256 = extract_value v0 0.i256; - obj.store v5 v6; - v8.objref = obj.proj v4 1.i256; - v9.i256 = extract_value v0 1.i256; - obj.store v8 v9; - v10.objref = obj.proj v2 1.i256; - obj.store v10 0.i256; - v11.@layout_6 = obj.load v2; - return v11; -} - -func private %core__lib__abi__impl_Cursor_1a04__new__g463e_15c7_0(v0.@layout_5) -> @layout_6 { - block0: - jump block1; - - block1: - v2.objref<@layout_6> = obj.alloc @layout_6; - v4.objref<@layout_5> = obj.proj v2 0.i256; - v5.objref = obj.proj v4 0.i256; - v6.i256 = extract_value v0 0.i256; - obj.store v5 v6; - v8.objref = obj.proj v4 1.i256; - v9.i256 = extract_value v0 1.i256; - obj.store v8 v9; - v10.objref = obj.proj v2 1.i256; - obj.store v10 0.i256; - v11.@layout_6 = obj.load v2; - return v11; -} - -func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_61f8(v0.i256) -> @layout_4 { +func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_2dfb(v0.i256) -> @layout_7 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -1467,16 +1450,16 @@ func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_61f8(v0.i256) -> @la block4: v8.i256 = phi (0.i256 block2) (v7 block3); - v9.objref<@layout_4> = obj.alloc @layout_4; + v9.objref<@layout_7> = obj.alloc @layout_7; v10.objref = obj.proj v9 0.i256; obj.store v10 v8; v12.objref = obj.proj v9 1.i256; obj.store v12 v8; - v13.@layout_4 = obj.load v9; + v13.@layout_7 = obj.load v9; return v13; } -func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_aa27(v0.i256) -> @layout_4 { +func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_31b9(v0.i256) -> @layout_7 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -1498,25 +1481,25 @@ func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_aa27(v0.i256) -> @la block4: v8.i256 = phi (0.i256 block2) (v7 block3); - v9.objref<@layout_4> = obj.alloc @layout_4; + v9.objref<@layout_7> = obj.alloc @layout_7; v10.objref = obj.proj v9 0.i256; obj.store v10 v8; v12.objref = obj.proj v9 1.i256; obj.store v12 v8; - v13.@layout_4 = obj.load v9; + v13.@layout_7 = obj.load v9; return v13; } -func private %std__lib__abi__sol__impl_SolDecoder_113c__new__g463e_ff02(v0.@layout_5) -> @layout_7 { +func private %std__lib__abi__sol__impl_SolDecoder_113c__new__g463e_5b76(v0.@layout_4) -> @layout_6 { block0: jump block1; block1: - v2.@layout_6 = call %core__lib__abi__impl_Cursor_1a04__new__g463e_15c7_0 v0; - v4.objref<@layout_7> = obj.alloc @layout_7; - v5.objref<@layout_6> = obj.proj v4 0.i256; - v6.objref<@layout_5> = obj.proj v5 0.i256; - v7.@layout_5 = extract_value v2 0.i256; + v2.@layout_5 = call %core__lib__abi__impl_Cursor_1a04__new__g463e_7ca1 v0; + v4.objref<@layout_6> = obj.alloc @layout_6; + v5.objref<@layout_5> = obj.proj v4 0.i256; + v6.objref<@layout_4> = obj.proj v5 0.i256; + v7.@layout_4 = extract_value v2 0.i256; v8.objref = obj.proj v6 0.i256; v9.i256 = extract_value v7 0.i256; obj.store v8 v9; @@ -1528,20 +1511,20 @@ func private %std__lib__abi__sol__impl_SolDecoder_113c__new__g463e_ff02(v0.@layo obj.store v13 v14; v15.objref = obj.proj v4 1.i256; obj.store v15 0.i256; - v16.@layout_7 = obj.load v4; + v16.@layout_6 = obj.load v4; return v16; } -func private %std__lib__abi__sol__impl_SolDecoder_113c__new__g463e_ff02_0(v0.@layout_5) -> @layout_7 { +func private %std__lib__abi__sol__impl_SolDecoder_113c__new__g463e_5b76_0(v0.@layout_4) -> @layout_6 { block0: jump block1; block1: - v2.@layout_6 = call %core__lib__abi__impl_Cursor_1a04__new__g463e_15c7 v0; - v4.objref<@layout_7> = obj.alloc @layout_7; - v5.objref<@layout_6> = obj.proj v4 0.i256; - v6.objref<@layout_5> = obj.proj v5 0.i256; - v7.@layout_5 = extract_value v2 0.i256; + v2.@layout_5 = call %core__lib__abi__impl_Cursor_1a04__new__g463e_7ca1_0 v0; + v4.objref<@layout_6> = obj.alloc @layout_6; + v5.objref<@layout_5> = obj.proj v4 0.i256; + v6.objref<@layout_4> = obj.proj v5 0.i256; + v7.@layout_4 = extract_value v2 0.i256; v8.objref = obj.proj v6 0.i256; v9.i256 = extract_value v7 0.i256; obj.store v8 v9; @@ -1553,45 +1536,49 @@ func private %std__lib__abi__sol__impl_SolDecoder_113c__new__g463e_ff02_0(v0.@la obj.store v13 v14; v15.objref = obj.proj v4 1.i256; obj.store v15 0.i256; - v16.@layout_7 = obj.load v4; + v16.@layout_6 = obj.load v4; return v16; } -func private %payload_size__gbd8e(v0.@layout_3) -> i256 { +func private %core__lib__abi__impl_Cursor_1a04__new__g463e_7ca1(v0.@layout_4) -> @layout_5 { block0: - v1.objref<@layout_3> = obj.alloc @layout_3; - v3.objref = obj.proj v1 0.i256; - v4.i256 = extract_value v0 0.i256; - obj.store v3 v4; - v6.objref = obj.proj v1 1.i256; - v7.i256 = extract_value v0 1.i256; - obj.store v6 v7; jump block1; block1: - v9.objref = obj.proj v1 0.i256; - v10.i256 = obj.load v9; - v11.i256 = call %dynamic_payload_size v10; - (v12.i256, v13.i1) = uaddo 64.i256 v11; - br v13 block2 block3; - - block2: - mstore 0.i256 35408467139433450592217433187231851964531694900788300625387963629091585785856.i256 i256; - mstore 4.i256 17.i256 i256; - evm_revert 0.i256 36.i256; + v2.objref<@layout_5> = obj.alloc @layout_5; + v4.objref<@layout_4> = obj.proj v2 0.i256; + v5.objref = obj.proj v4 0.i256; + v6.i256 = extract_value v0 0.i256; + obj.store v5 v6; + v8.objref = obj.proj v4 1.i256; + v9.i256 = extract_value v0 1.i256; + obj.store v8 v9; + v10.objref = obj.proj v2 1.i256; + obj.store v10 0.i256; + v11.@layout_5 = obj.load v2; + return v11; +} - block3: - v18.objref = obj.proj v1 1.i256; - v19.i256 = obj.load v18; - v20.i256 = call %dynamic_payload_size v19; - (v21.i256, v22.i1) = uaddo v12 v20; - br v22 block2 block4; +func private %core__lib__abi__impl_Cursor_1a04__new__g463e_7ca1_0(v0.@layout_4) -> @layout_5 { + block0: + jump block1; - block4: - return v21; + block1: + v2.objref<@layout_5> = obj.alloc @layout_5; + v4.objref<@layout_4> = obj.proj v2 0.i256; + v5.objref = obj.proj v4 0.i256; + v6.i256 = extract_value v0 0.i256; + obj.store v5 v6; + v8.objref = obj.proj v4 1.i256; + v9.i256 = extract_value v0 1.i256; + obj.store v8 v9; + v10.objref = obj.proj v2 1.i256; + obj.store v10 0.i256; + v11.@layout_5 = obj.load v2; + return v11; } -func private %core__lib__abi__trait_AbiSize__payload_size__g67a8_7f10(v0.@layout_2) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__g67a8_22ab(v0.@layout_2) -> i256 { block0: v1.objref<@layout_2> = obj.alloc @layout_2; v3.objref = obj.proj v1 0.i256; @@ -1603,7 +1590,7 @@ func private %core__lib__abi__trait_AbiSize__payload_size__g67a8_7f10(v0.@layout return 32.i256; } -func private %core__lib__abi__trait_AbiSize__payload_size__g67a8_7f10_0(v0.@layout_2) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__g67a8_22ab_0(v0.@layout_2) -> i256 { block0: v1.objref<@layout_2> = obj.alloc @layout_2; v3.objref = obj.proj v1 0.i256; @@ -1615,7 +1602,7 @@ func private %core__lib__abi__trait_AbiSize__payload_size__g67a8_7f10_0(v0.@layo return 32.i256; } -func private %core__lib__abi__trait_AbiSize__payload_size__ge513_a376(v0.i256) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__ge513_b252(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -1625,60 +1612,83 @@ func private %core__lib__abi__trait_AbiSize__payload_size__ge513_a376(v0.i256) - return 32.i256; } -func private %core__lib__abi__trait_AbiSize__payload_size__ge513_ccad(v0.i256) -> i256 { +func private %payload_size__gbd8e(v0.@layout_3) -> i256 { block0: - v1.*i256 = alloca i256; - mstore v1 v0 i256; + v1.objref<@layout_3> = obj.alloc @layout_3; + v3.objref = obj.proj v1 0.i256; + v4.i256 = extract_value v0 0.i256; + obj.store v3 v4; + v6.objref = obj.proj v1 1.i256; + v7.i256 = extract_value v0 1.i256; + obj.store v6 v7; jump block1; block1: - return 32.i256; + v9.objref = obj.proj v1 0.i256; + v10.i256 = obj.load v9; + v11.i256 = call %dynamic_payload_size v10; + (v12.i256, v13.i1) = uaddo 64.i256 v11; + br v13 block2 block3; + + block2: + mstore 0.i256 35408467139433450592217433187231851964531694900788300625387963629091585785856.i256 i256; + mstore 4.i256 17.i256 i256; + evm_revert 0.i256 36.i256; + + block3: + v18.objref = obj.proj v1 1.i256; + v19.i256 = obj.load v18; + v20.i256 = call %dynamic_payload_size v19; + (v21.i256, v22.i1) = uaddo v12 v20; + br v22 block2 block4; + + block4: + return v21; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_65f2(v0.objref<@layout_4>) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__ge513_da2e(v0.i256) -> i256 { block0: + v1.*i256 = alloca i256; + mstore v1 v0 i256; jump block1; block1: - v3.objref = obj.proj v0 1.i256; - v4.i256 = obj.load v3; - return v4; + return 32.i256; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_6e96(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_3ada(v0.objref<@layout_6>) -> i256 { block0: jump block1; block1: - v3.objref<@layout_6> = obj.proj v0 0.i256; + v3.objref<@layout_5> = obj.proj v0 0.i256; v5.objref = obj.proj v3 1.i256; v6.i256 = obj.load v5; return v6; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_8da8(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__pos__gf13e_57f4(v0.objref<@layout_7>) -> i256 { block0: jump block1; block1: - v3.objref<@layout_6> = obj.proj v0 0.i256; - v5.objref = obj.proj v3 1.i256; - v6.i256 = obj.load v5; - return v6; + v3.objref = obj.proj v0 1.i256; + v4.i256 = obj.load v3; + return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_ad58(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_62d0(v0.objref<@layout_6>) -> i256 { block0: jump block1; block1: - v3.objref<@layout_6> = obj.proj v0 0.i256; + v3.objref<@layout_5> = obj.proj v0 0.i256; v5.objref = obj.proj v3 1.i256; v6.i256 = obj.load v5; return v6; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_de88(v0.objref<@layout_4>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__pos__gf13e_bd8f(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -1688,19 +1698,30 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_de88(v0.objref return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_0984(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_d6f6(v0.objref<@layout_6>) -> i256 { + block0: + jump block1; + + block1: + v3.objref<@layout_5> = obj.proj v0 0.i256; + v5.objref = obj.proj v3 1.i256; + v6.i256 = obj.load v5; + return v6; +} + +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_1d57(v0.objref<@layout_6>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; jump block1; block1: - v5.objref<@layout_6> = obj.proj v0 0.i256; - v6.objref<@layout_5> = obj.proj v5 0.i256; - v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_f8f2 v7; + v5.objref<@layout_5> = obj.proj v0 0.i256; + v6.objref<@layout_4> = obj.proj v5 0.i256; + v7.@layout_4 = obj.load v6; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_7d52 v7; mstore v1 v8 i256; - v9.objref<@layout_6> = obj.proj v0 0.i256; + v9.objref<@layout_5> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; v12.i256 = obj.load v11; (v14.i256, v15.i1) = uaddo v12 32.i256; @@ -1713,14 +1734,14 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_0 jump block4; block4: - v26.objref<@layout_6> = obj.proj v0 0.i256; - v27.objref<@layout_5> = obj.proj v26 0.i256; - v28.@layout_5 = obj.load v27; - v29.objref<@layout_6> = obj.proj v0 0.i256; + v26.objref<@layout_5> = obj.proj v0 0.i256; + v27.objref<@layout_4> = obj.proj v26 0.i256; + v28.@layout_4 = obj.load v27; + v29.objref<@layout_5> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_90b8 v28 v31; - v34.objref<@layout_6> = obj.proj v0 0.i256; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_e025 v28 v31; + v34.objref<@layout_5> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; return v32; @@ -1738,26 +1759,26 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_0 evm_revert 0.i256 36.i256; block7: - v21.objref<@layout_6> = obj.proj v0 0.i256; + v21.objref<@layout_5> = obj.proj v0 0.i256; v22.objref = obj.proj v21 1.i256; v23.i256 = obj.load v22; v24.i1 = lt v14 v23; br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_3bfc(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_de06(v0.objref<@layout_6>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; jump block1; block1: - v5.objref<@layout_6> = obj.proj v0 0.i256; - v6.objref<@layout_5> = obj.proj v5 0.i256; - v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_3a5b v7; + v5.objref<@layout_5> = obj.proj v0 0.i256; + v6.objref<@layout_4> = obj.proj v5 0.i256; + v7.@layout_4 = obj.load v6; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_f289 v7; mstore v1 v8 i256; - v9.objref<@layout_6> = obj.proj v0 0.i256; + v9.objref<@layout_5> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; v12.i256 = obj.load v11; (v14.i256, v15.i1) = uaddo v12 32.i256; @@ -1770,14 +1791,14 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_3 jump block4; block4: - v26.objref<@layout_6> = obj.proj v0 0.i256; - v27.objref<@layout_5> = obj.proj v26 0.i256; - v28.@layout_5 = obj.load v27; - v29.objref<@layout_6> = obj.proj v0 0.i256; + v26.objref<@layout_5> = obj.proj v0 0.i256; + v27.objref<@layout_4> = obj.proj v26 0.i256; + v28.@layout_4 = obj.load v27; + v29.objref<@layout_5> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_a9cc v28 v31; - v34.objref<@layout_6> = obj.proj v0 0.i256; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_8d63 v28 v31; + v34.objref<@layout_5> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; return v32; @@ -1795,26 +1816,26 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_3 evm_revert 0.i256 36.i256; block7: - v21.objref<@layout_6> = obj.proj v0 0.i256; + v21.objref<@layout_5> = obj.proj v0 0.i256; v22.objref = obj.proj v21 1.i256; v23.i256 = obj.load v22; v24.i1 = lt v14 v23; br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_8dbd(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_e297(v0.objref<@layout_6>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; jump block1; block1: - v5.objref<@layout_6> = obj.proj v0 0.i256; - v6.objref<@layout_5> = obj.proj v5 0.i256; - v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_afea v7; + v5.objref<@layout_5> = obj.proj v0 0.i256; + v6.objref<@layout_4> = obj.proj v5 0.i256; + v7.@layout_4 = obj.load v6; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_c67b v7; mstore v1 v8 i256; - v9.objref<@layout_6> = obj.proj v0 0.i256; + v9.objref<@layout_5> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; v12.i256 = obj.load v11; (v14.i256, v15.i1) = uaddo v12 32.i256; @@ -1827,14 +1848,14 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_8 jump block4; block4: - v26.objref<@layout_6> = obj.proj v0 0.i256; - v27.objref<@layout_5> = obj.proj v26 0.i256; - v28.@layout_5 = obj.load v27; - v29.objref<@layout_6> = obj.proj v0 0.i256; + v26.objref<@layout_5> = obj.proj v0 0.i256; + v27.objref<@layout_4> = obj.proj v26 0.i256; + v28.@layout_4 = obj.load v27; + v29.objref<@layout_5> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_1b26 v28 v31; - v34.objref<@layout_6> = obj.proj v0 0.i256; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_083f v28 v31; + v34.objref<@layout_5> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; return v32; @@ -1852,26 +1873,26 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_8 evm_revert 0.i256 36.i256; block7: - v21.objref<@layout_6> = obj.proj v0 0.i256; + v21.objref<@layout_5> = obj.proj v0 0.i256; v22.objref = obj.proj v21 1.i256; v23.i256 = obj.load v22; v24.i1 = lt v14 v23; br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_bdd2(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_f0e4(v0.objref<@layout_6>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; jump block1; block1: - v5.objref<@layout_6> = obj.proj v0 0.i256; - v6.objref<@layout_5> = obj.proj v5 0.i256; - v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_7357 v7; + v5.objref<@layout_5> = obj.proj v0 0.i256; + v6.objref<@layout_4> = obj.proj v5 0.i256; + v7.@layout_4 = obj.load v6; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_a13b v7; mstore v1 v8 i256; - v9.objref<@layout_6> = obj.proj v0 0.i256; + v9.objref<@layout_5> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; v12.i256 = obj.load v11; (v14.i256, v15.i1) = uaddo v12 32.i256; @@ -1884,14 +1905,14 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_b jump block4; block4: - v26.objref<@layout_6> = obj.proj v0 0.i256; - v27.objref<@layout_5> = obj.proj v26 0.i256; - v28.@layout_5 = obj.load v27; - v29.objref<@layout_6> = obj.proj v0 0.i256; + v26.objref<@layout_5> = obj.proj v0 0.i256; + v27.objref<@layout_4> = obj.proj v26 0.i256; + v28.@layout_4 = obj.load v27; + v29.objref<@layout_5> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_9d90 v28 v31; - v34.objref<@layout_6> = obj.proj v0 0.i256; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_4cc3 v28 v31; + v34.objref<@layout_5> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; return v32; @@ -1909,26 +1930,26 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_b evm_revert 0.i256 36.i256; block7: - v21.objref<@layout_6> = obj.proj v0 0.i256; + v21.objref<@layout_5> = obj.proj v0 0.i256; v22.objref = obj.proj v21 1.i256; v23.i256 = obj.load v22; v24.i1 = lt v14 v23; br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_be19(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_f1cb(v0.objref<@layout_6>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; jump block1; block1: - v5.objref<@layout_6> = obj.proj v0 0.i256; - v6.objref<@layout_5> = obj.proj v5 0.i256; - v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_f2e9 v7; + v5.objref<@layout_5> = obj.proj v0 0.i256; + v6.objref<@layout_4> = obj.proj v5 0.i256; + v7.@layout_4 = obj.load v6; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_be02 v7; mstore v1 v8 i256; - v9.objref<@layout_6> = obj.proj v0 0.i256; + v9.objref<@layout_5> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; v12.i256 = obj.load v11; (v14.i256, v15.i1) = uaddo v12 32.i256; @@ -1941,14 +1962,14 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_b jump block4; block4: - v26.objref<@layout_6> = obj.proj v0 0.i256; - v27.objref<@layout_5> = obj.proj v26 0.i256; - v28.@layout_5 = obj.load v27; - v29.objref<@layout_6> = obj.proj v0 0.i256; + v26.objref<@layout_5> = obj.proj v0 0.i256; + v27.objref<@layout_4> = obj.proj v26 0.i256; + v28.@layout_4 = obj.load v27; + v29.objref<@layout_5> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_3b13 v28 v31; - v34.objref<@layout_6> = obj.proj v0 0.i256; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_34f9 v28 v31; + v34.objref<@layout_5> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; return v32; @@ -1966,26 +1987,26 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_b evm_revert 0.i256 36.i256; block7: - v21.objref<@layout_6> = obj.proj v0 0.i256; + v21.objref<@layout_5> = obj.proj v0 0.i256; v22.objref = obj.proj v21 1.i256; v23.i256 = obj.load v22; v24.i1 = lt v14 v23; br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_e372(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_faaf(v0.objref<@layout_6>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; jump block1; block1: - v5.objref<@layout_6> = obj.proj v0 0.i256; - v6.objref<@layout_5> = obj.proj v5 0.i256; - v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_7ae6 v7; + v5.objref<@layout_5> = obj.proj v0 0.i256; + v6.objref<@layout_4> = obj.proj v5 0.i256; + v7.@layout_4 = obj.load v6; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_2779 v7; mstore v1 v8 i256; - v9.objref<@layout_6> = obj.proj v0 0.i256; + v9.objref<@layout_5> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; v12.i256 = obj.load v11; (v14.i256, v15.i1) = uaddo v12 32.i256; @@ -1998,14 +2019,14 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_e jump block4; block4: - v26.objref<@layout_6> = obj.proj v0 0.i256; - v27.objref<@layout_5> = obj.proj v26 0.i256; - v28.@layout_5 = obj.load v27; - v29.objref<@layout_6> = obj.proj v0 0.i256; + v26.objref<@layout_5> = obj.proj v0 0.i256; + v27.objref<@layout_4> = obj.proj v26 0.i256; + v28.@layout_4 = obj.load v27; + v29.objref<@layout_5> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_9b8c v28 v31; - v34.objref<@layout_6> = obj.proj v0 0.i256; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_aee9 v28 v31; + v34.objref<@layout_5> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; return v32; @@ -2023,14 +2044,14 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_e evm_revert 0.i256 36.i256; block7: - v21.objref<@layout_6> = obj.proj v0 0.i256; + v21.objref<@layout_5> = obj.proj v0 0.i256; v22.objref = obj.proj v21 1.i256; v23.i256 = obj.load v22; v24.i1 = lt v14 v23; br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_3f4d(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_02a0(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -2043,7 +2064,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_3f4d(v0.o return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_504e(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_3a94(v0.objref<@layout_6>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -2056,7 +2077,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_50 return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_8106(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_42c1(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -2064,12 +2085,12 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_81 block1: v3.i256 = mload v2 i256; - v6.objref = obj.proj v0 1.i256; + v6.objref = obj.proj v0 0.i256; obj.store v6 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_b006(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_6c7c(v0.objref<@layout_6>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -2077,12 +2098,12 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_b006(v0.o block1: v3.i256 = mload v2 i256; - v6.objref = obj.proj v0 0.i256; + v6.objref = obj.proj v0 1.i256; obj.store v6 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_c080(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_a4e0(v0.objref<@layout_6>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -2095,7 +2116,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_c0 return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_010d(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_4f6f(v0.objref<@layout_6>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -2103,13 +2124,13 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_010 block1: v3.i256 = mload v2 i256; - v6.objref<@layout_6> = obj.proj v0 0.i256; + v6.objref<@layout_5> = obj.proj v0 0.i256; v8.objref = obj.proj v6 1.i256; obj.store v8 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_7f12(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_6571(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -2117,13 +2138,12 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_7f1 block1: v3.i256 = mload v2 i256; - v6.objref<@layout_6> = obj.proj v0 0.i256; - v8.objref = obj.proj v6 1.i256; - obj.store v8 v3; + v6.objref = obj.proj v0 1.i256; + obj.store v6 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_7f62(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_9070(v0.objref<@layout_6>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -2131,13 +2151,13 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_7f6 block1: v3.i256 = mload v2 i256; - v6.objref<@layout_6> = obj.proj v0 0.i256; + v6.objref<@layout_5> = obj.proj v0 0.i256; v8.objref = obj.proj v6 1.i256; obj.store v8 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_863e(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_ad86(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -2150,7 +2170,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_863e(v0.ob return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_d061(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_e50d(v0.objref<@layout_6>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -2158,14 +2178,15 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_d061(v0.ob block1: v3.i256 = mload v2 i256; - v6.objref = obj.proj v0 1.i256; - obj.store v6 v3; + v6.objref<@layout_5> = obj.proj v0 0.i256; + v8.objref = obj.proj v6 1.i256; + obj.store v8 v3; return; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_1b26(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_083f(v0.@layout_4, v1.i256) -> i256 { block0: - v2.objref<@layout_5> = obj.alloc @layout_5; + v2.objref<@layout_4> = obj.alloc @layout_4; v3.*i256 = alloca i256; v5.objref = obj.proj v2 0.i256; v6.i256 = extract_value v0 0.i256; @@ -2185,9 +2206,9 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_3b13(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_34f9(v0.@layout_4, v1.i256) -> i256 { block0: - v2.objref<@layout_5> = obj.alloc @layout_5; + v2.objref<@layout_4> = obj.alloc @layout_4; v3.*i256 = alloca i256; v5.objref = obj.proj v2 0.i256; v6.i256 = extract_value v0 0.i256; @@ -2207,9 +2228,9 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_90b8(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_4cc3(v0.@layout_4, v1.i256) -> i256 { block0: - v2.objref<@layout_5> = obj.alloc @layout_5; + v2.objref<@layout_4> = obj.alloc @layout_4; v3.*i256 = alloca i256; v5.objref = obj.proj v2 0.i256; v6.i256 = extract_value v0 0.i256; @@ -2229,9 +2250,9 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_9b8c(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_8d63(v0.@layout_4, v1.i256) -> i256 { block0: - v2.objref<@layout_5> = obj.alloc @layout_5; + v2.objref<@layout_4> = obj.alloc @layout_4; v3.*i256 = alloca i256; v5.objref = obj.proj v2 0.i256; v6.i256 = extract_value v0 0.i256; @@ -2251,9 +2272,9 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_9d90(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_aee9(v0.@layout_4, v1.i256) -> i256 { block0: - v2.objref<@layout_5> = obj.alloc @layout_5; + v2.objref<@layout_4> = obj.alloc @layout_4; v3.*i256 = alloca i256; v5.objref = obj.proj v2 0.i256; v6.i256 = extract_value v0 0.i256; @@ -2273,9 +2294,9 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_a9cc(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_e025(v0.@layout_4, v1.i256) -> i256 { block0: - v2.objref<@layout_5> = obj.alloc @layout_5; + v2.objref<@layout_4> = obj.alloc @layout_4; v3.*i256 = alloca i256; v5.objref = obj.proj v2 0.i256; v6.i256 = extract_value v0 0.i256; @@ -2295,7 +2316,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_1f5e(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_43d2(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -2312,7 +2333,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_1f5e(v0 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_2c07(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_48e4(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -2329,7 +2350,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_2c07(v0 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_4070(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_5707(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -2346,7 +2367,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_4070(v0 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_528a(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_9e76(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; diff --git a/crates/codegen/tests/fixtures/sonatina_ir/effect_handle_field_deref.snap b/crates/codegen/tests/fixtures/sonatina_ir/effect_handle_field_deref.snap index fc08a94644..b406086f83 100644 --- a/crates/codegen/tests/fixtures/sonatina_ir/effect_handle_field_deref.snap +++ b/crates/codegen/tests/fixtures/sonatina_ir/effect_handle_field_deref.snap @@ -1,5 +1,6 @@ --- source: crates/codegen/tests/sonatina_ir.rs +assertion_line: 403 expression: output input_file: crates/codegen/tests/fixtures/effect_handle_field_deref.fe --- @@ -8,9 +9,9 @@ target = "evm-ethereum-osaka" type @layout_0 = {}; type @layout_1 = {@layout_0}; type @layout_2 = {i256, i256}; -type @layout_3 = {i256, i256}; +type @layout_3 = {@layout_2, i256}; type @layout_4 = {@layout_3, i256}; -type @layout_5 = {@layout_4, i256}; +type @layout_5 = {i256, i256}; type @layout_6 = {i256}; type @layout_7 = {i256}; type @layout_8 = {i256}; @@ -79,7 +80,7 @@ func private %abi_field_size(v0.i256) -> i256 { block1: v2.i256 = mload v1 i256; - v3.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_a8bc_0 v2; + v3.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_8d6a_0 v2; br 0.i1 block2 block3; block2: @@ -113,7 +114,17 @@ func private %abi_single_root_size(v0.i256) -> i256 { return v3; } -func private %impl_trait_SolEncoder__base(v0.objref<@layout_2>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_05a4(v0.objref<@layout_4>) -> i256 { + block0: + jump block1; + + block1: + v3.objref = obj.proj v0 1.i256; + v4.i256 = obj.load v3; + return v4; +} + +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_4cc8(v0.objref<@layout_5>) -> i256 { block0: jump block1; @@ -123,17 +134,17 @@ func private %impl_trait_SolEncoder__base(v0.objref<@layout_2>) -> i256 { return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_8cc3(v0.objref<@layout_5>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_4cc8_0(v0.objref<@layout_5>) -> i256 { block0: jump block1; block1: - v3.objref = obj.proj v0 1.i256; + v3.objref = obj.proj v0 0.i256; v4.i256 = obj.load v3; return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_8edd(v0.objref<@layout_5>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_69f5(v0.objref<@layout_4>) -> i256 { block0: jump block1; @@ -143,7 +154,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_8edd(v return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_cedc(v0.objref<@layout_5>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_f7b4(v0.objref<@layout_4>) -> i256 { block0: jump block1; @@ -212,8 +223,8 @@ func private %contract_init_root_EffectHandleFieldDeref() { func private %contract_recv_abi_EffectHandleFieldDeref_1() { block0: - v0.objref<@layout_3> = obj.alloc @layout_3; - v1.objref<@layout_5> = obj.alloc @layout_5; + v0.objref<@layout_2> = obj.alloc @layout_2; + v1.objref<@layout_4> = obj.alloc @layout_4; jump block1; block1: @@ -243,12 +254,12 @@ func private %contract_recv_abi_EffectHandleFieldDeref_1() { obj.store v19 v16; v21.objref = obj.proj v0 1.i256; obj.store v21 v10; - v22.@layout_3 = obj.load v0; - v23.@layout_5 = call %decoder_new v22; - v24.objref<@layout_4> = obj.proj v1 0.i256; - v25.@layout_4 = extract_value v23 0.i256; - v26.objref<@layout_3> = obj.proj v24 0.i256; - v27.@layout_3 = extract_value v25 0.i256; + v22.@layout_2 = obj.load v0; + v23.@layout_4 = call %decoder_new v22; + v24.objref<@layout_3> = obj.proj v1 0.i256; + v25.@layout_3 = extract_value v23 0.i256; + v26.objref<@layout_2> = obj.proj v24 0.i256; + v27.@layout_2 = extract_value v25 0.i256; v28.objref = obj.proj v26 0.i256; v29.i256 = extract_value v27 0.i256; obj.store v28 v29; @@ -292,8 +303,8 @@ func private %contract_recv_abi_EffectHandleFieldDeref_1() { func private %contract_recv_abi_EffectHandleFieldDeref_2() { block0: - v0.objref<@layout_3> = obj.alloc @layout_3; - v1.objref<@layout_5> = obj.alloc @layout_5; + v0.objref<@layout_2> = obj.alloc @layout_2; + v1.objref<@layout_4> = obj.alloc @layout_4; jump block1; block1: @@ -323,12 +334,12 @@ func private %contract_recv_abi_EffectHandleFieldDeref_2() { obj.store v19 v16; v21.objref = obj.proj v0 1.i256; obj.store v21 v10; - v22.@layout_3 = obj.load v0; - v23.@layout_5 = call %decoder_new v22; - v24.objref<@layout_4> = obj.proj v1 0.i256; - v25.@layout_4 = extract_value v23 0.i256; - v26.objref<@layout_3> = obj.proj v24 0.i256; - v27.@layout_3 = extract_value v25 0.i256; + v22.@layout_2 = obj.load v0; + v23.@layout_4 = call %decoder_new v22; + v24.objref<@layout_3> = obj.proj v1 0.i256; + v25.@layout_3 = extract_value v23 0.i256; + v26.objref<@layout_2> = obj.proj v24 0.i256; + v27.@layout_2 = extract_value v25 0.i256; v28.objref = obj.proj v26 0.i256; v29.i256 = extract_value v27 0.i256; obj.store v28 v29; @@ -367,8 +378,8 @@ func private %contract_recv_abi_EffectHandleFieldDeref_2() { func private %contract_recv_abi_EffectHandleFieldDeref_3() { block0: - v0.objref<@layout_3> = obj.alloc @layout_3; - v1.objref<@layout_5> = obj.alloc @layout_5; + v0.objref<@layout_2> = obj.alloc @layout_2; + v1.objref<@layout_4> = obj.alloc @layout_4; jump block1; block1: @@ -398,12 +409,12 @@ func private %contract_recv_abi_EffectHandleFieldDeref_3() { obj.store v19 v16; v21.objref = obj.proj v0 1.i256; obj.store v21 v10; - v22.@layout_3 = obj.load v0; - v23.@layout_5 = call %decoder_new v22; - v24.objref<@layout_4> = obj.proj v1 0.i256; - v25.@layout_4 = extract_value v23 0.i256; - v26.objref<@layout_3> = obj.proj v24 0.i256; - v27.@layout_3 = extract_value v25 0.i256; + v22.@layout_2 = obj.load v0; + v23.@layout_4 = call %decoder_new v22; + v24.objref<@layout_3> = obj.proj v1 0.i256; + v25.@layout_3 = extract_value v23 0.i256; + v26.objref<@layout_2> = obj.proj v24 0.i256; + v27.@layout_2 = extract_value v25 0.i256; v28.objref = obj.proj v26 0.i256; v29.i256 = extract_value v27 0.i256; obj.store v28 v29; @@ -444,28 +455,33 @@ func private %contract_runtime_root_EffectHandleFieldDeref() { jump block1; block1: - v1.i256 = evm_calldata_load 0.i256; - v3.i256 = shr 224.i256 v1; - v4.i32 = trunc v3 i32; - br_table v4 block2 (1.i32 block3) (2.i32 block4) (3.i32 block5); + v1.i256 = evm_calldata_size; + v3.i1 = lt v1 4.i256; + br v3 block2 block3; block2: evm_revert 0.i256 0.i256; block3: + v5.i256 = evm_calldata_load 0.i256; + v7.i256 = shr 224.i256 v5; + v8.i32 = trunc v7 i32; + br_table v8 block2 (1.i32 block4) (2.i32 block5) (3.i32 block6); + + block4: call %contract_recv_abi_EffectHandleFieldDeref_1; unreachable; - block4: + block5: call %contract_recv_abi_EffectHandleFieldDeref_2; unreachable; - block5: + block6: call %contract_recv_abi_EffectHandleFieldDeref_3; unreachable; } -func private %core__lib__abi__decode_field__g3854_89ba(v0.objref<@layout_5>) -> i256 { +func private %core__lib__abi__decode_field__g3854_89ba(v0.objref<@layout_4>) -> i256 { block0: jump block1; @@ -473,9 +489,9 @@ func private %core__lib__abi__decode_field__g3854_89ba(v0.objref<@layout_5>) -> br 0.i1 block2 block3; block2: - v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_d39e v0; - v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_8edd v0; - v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_047d v0; + v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_f172 v0; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_f7b4 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_479f v0; (v6.i256, v7.i1) = uaddo v4 v3; br v7 block5 block6; @@ -483,7 +499,7 @@ func private %core__lib__abi__decode_field__g3854_89ba(v0.objref<@layout_5>) -> jump block4; block4: - v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_e618 v0; + v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_2ef1 v0; return v23; block5: @@ -492,16 +508,16 @@ func private %core__lib__abi__decode_field__g3854_89ba(v0.objref<@layout_5>) -> evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_b155 v0 v6; - v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_8edd v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_ec19 v0 v15; - v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_e618 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_b155 v0 v4; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_ec19 v0 v5; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_63a1 v0 v6; + v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_f7b4 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_d6ad v0 v15; + v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_2ef1 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_63a1 v0 v4; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_d6ad v0 v5; return v17; } -func private %core__lib__abi__decode_field__g3854_bc76(v0.objref<@layout_5>) -> i256 { +func private %core__lib__abi__decode_field__g3854_bc76(v0.objref<@layout_4>) -> i256 { block0: jump block1; @@ -509,9 +525,9 @@ func private %core__lib__abi__decode_field__g3854_bc76(v0.objref<@layout_5>) -> br 0.i1 block2 block3; block2: - v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_3646 v0; - v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_8cc3 v0; - v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_c53e v0; + v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_037f v0; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_69f5 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_3beb v0; (v6.i256, v7.i1) = uaddo v4 v3; br v7 block5 block6; @@ -519,7 +535,7 @@ func private %core__lib__abi__decode_field__g3854_bc76(v0.objref<@layout_5>) -> jump block4; block4: - v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_e250 v0; + v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_4c7c v0; return v23; block5: @@ -528,16 +544,16 @@ func private %core__lib__abi__decode_field__g3854_bc76(v0.objref<@layout_5>) -> evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_6a44 v0 v6; - v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_8cc3 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_135d v0 v15; - v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_e250 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_6a44 v0 v4; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_135d v0 v5; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_5f4f v0 v6; + v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_69f5 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_5947 v0 v15; + v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_4c7c v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_5f4f v0 v4; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_5947 v0 v5; return v17; } -func private %core__lib__abi__decode_field__g3854_fcf7(v0.objref<@layout_5>) -> i256 { +func private %core__lib__abi__decode_field__g3854_fcf7(v0.objref<@layout_4>) -> i256 { block0: jump block1; @@ -545,9 +561,9 @@ func private %core__lib__abi__decode_field__g3854_fcf7(v0.objref<@layout_5>) -> br 0.i1 block2 block3; block2: - v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_c929 v0; - v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_cedc v0; - v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_ebe7 v0; + v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_2e10 v0; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_05a4 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_8283 v0; (v6.i256, v7.i1) = uaddo v4 v3; br v7 block5 block6; @@ -555,7 +571,7 @@ func private %core__lib__abi__decode_field__g3854_fcf7(v0.objref<@layout_5>) -> jump block4; block4: - v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_8d5d v0; + v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_fe55 v0; return v23; block5: @@ -564,16 +580,25 @@ func private %core__lib__abi__decode_field__g3854_fcf7(v0.objref<@layout_5>) -> evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_8d49 v0 v6; - v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_cedc v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_6579 v0 v15; - v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_8d5d v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_8d49 v0 v4; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_6579 v0 v5; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_f3bf v0 v6; + v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_05a4 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_6146 v0 v15; + v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_fe55 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_f3bf v0 v4; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_6146 v0 v5; return v17; } -func private %impl_trait_BumpMover__decode_payload__gf196(v0.objref<@layout_5>) -> @layout_7 { +func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_2ef1(v0.objref<@layout_4>) -> i256 { + block0: + jump block1; + + block1: + v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_c8a2 v0; + return v2; +} + +func private %impl_trait_BumpMover__decode_payload__gf196(v0.objref<@layout_4>) -> @layout_7 { block0: jump block1; @@ -586,7 +611,16 @@ func private %impl_trait_BumpMover__decode_payload__gf196(v0.objref<@layout_5>) return v6; } -func private %impl_trait_ReadViaHolder__decode_payload__gf196(v0.objref<@layout_5>) -> @layout_8 { +func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_4c7c(v0.objref<@layout_4>) -> i256 { + block0: + jump block1; + + block1: + v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_4da8 v0; + return v2; +} + +func private %impl_trait_ReadViaHolder__decode_payload__gf196(v0.objref<@layout_4>) -> @layout_8 { block0: jump block1; @@ -599,7 +633,7 @@ func private %impl_trait_ReadViaHolder__decode_payload__gf196(v0.objref<@layout_ return v6; } -func private %impl_trait_SeedSlot__decode_payload__gf196(v0.objref<@layout_5>) -> @layout_9 { +func private %impl_trait_SeedSlot__decode_payload__gf196(v0.objref<@layout_4>) -> @layout_9 { block0: jump block1; @@ -615,52 +649,34 @@ func private %impl_trait_SeedSlot__decode_payload__gf196(v0.objref<@layout_5>) - return v9; } -func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_8d5d(v0.objref<@layout_5>) -> i256 { - block0: - jump block1; - - block1: - v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_77a7 v0; - return v2; -} - -func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_e250(v0.objref<@layout_5>) -> i256 { +func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_fe55(v0.objref<@layout_4>) -> i256 { block0: jump block1; block1: - v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_b6e9 v0; + v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_40d7 v0; return v2; } -func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_e618(v0.objref<@layout_5>) -> i256 { +func private %decoder_new(v0.@layout_2) -> @layout_4 { block0: jump block1; block1: - v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_ebbf v0; + v2.@layout_4 = call %impl_SolDecoder__new__g463e v0; return v2; } -func private %decoder_new(v0.@layout_3) -> @layout_5 { +func private %encode(v0.i256, v1.objref<@layout_5>) { block0: jump block1; block1: - v2.@layout_5 = call %impl_SolDecoder__new__g463e v0; - return v2; -} - -func private %encode(v0.i256, v1.objref<@layout_2>) { - block0: - jump block1; - - block1: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_2aa5 v1 v0; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_b5c2 v1 v0; return; } -func private %encode_field(v0.i256, v1.objref<@layout_2>, v2.i256) { +func private %encode_field(v0.i256, v1.objref<@layout_5>, v2.i256) { block0: jump block1; @@ -668,8 +684,8 @@ func private %encode_field(v0.i256, v1.objref<@layout_2>, v2.i256) { br 0.i1 block2 block3; block2: - v5.i256 = call %impl_trait_SolEncoder__base v1; - v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_a8bc v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_4cc8 v1; + v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_8d6a v0; v9.i256 = mload v2 i256; (v10.i256, v11.i1) = usubo v9 v5; br v11 block5 block6; @@ -687,15 +703,15 @@ func private %encode_field(v0.i256, v1.objref<@layout_2>, v2.i256) { evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_8a50 v1 v10; - v19.i256 = call %impl_trait_SolEncoder__pos v1; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_7a6d v1 v10; + v19.i256 = call %pos__gf13e v1; v21.i256 = mload v2 i256; - call %impl_trait_SolEncoder__set_base v1 v21; + call %set_base__gf13e v1 v21; v23.i256 = mload v2 i256; - call %impl_trait_SolEncoder__set_pos v1 v23; + call %set_pos__gf13e v1 v23; call %encode v0 v1; - call %impl_trait_SolEncoder__set_base v1 v5; - call %impl_trait_SolEncoder__set_pos v1 v19; + call %set_base__gf13e v1 v5; + call %set_pos__gf13e v1 v19; v30.i256 = mload v2 i256; (v32.i256, v33.i1) = uaddo v30 v8; br v33 block5 block7; @@ -705,13 +721,13 @@ func private %encode_field(v0.i256, v1.objref<@layout_2>, v2.i256) { return; } -func private %encode_single_root(v0.i256, v1.objref<@layout_2>) { +func private %encode_single_root(v0.i256, v1.objref<@layout_5>) { block0: v2.*i256 = alloca i256; jump block1; block1: - v4.i256 = call %impl_trait_SolEncoder__base v1; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_4cc8 v1; (v6.i256, v7.i1) = uaddo v4 32.i256; br v7 block2 block3; @@ -733,15 +749,15 @@ func private %encode_single_root_alloc(v0.i256) -> @layout_10 { block1: v2.i256 = call %abi_single_root_size v0; - v3.@layout_2 = call %encoder_new v2; - v4.objref<@layout_2> = obj.alloc @layout_2; + v3.@layout_5 = call %encoder_new v2; + v4.objref<@layout_5> = obj.alloc @layout_5; v6.objref = obj.proj v4 0.i256; v7.i256 = extract_value v3 0.i256; obj.store v6 v7; v9.objref = obj.proj v4 1.i256; v10.i256 = extract_value v3 1.i256; obj.store v9 v10; - v11.i256 = call %impl_trait_SolEncoder__base v4; + v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_4cc8_0 v4; call %encode_single_root v0 v4; v13.objref<@layout_10> = obj.alloc @layout_10; v14.objref = obj.proj v13 0.i256; @@ -752,7 +768,7 @@ func private %encode_single_root_alloc(v0.i256) -> @layout_10 { return v16; } -func private %encoder_new(v0.i256) -> @layout_2 { +func private %encoder_new(v0.i256) -> @layout_5 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -760,7 +776,7 @@ func private %encoder_new(v0.i256) -> @layout_2 { block1: v2.i256 = mload v1 i256; - v3.@layout_2 = call %impl_SolEncoder__new v2; + v3.@layout_5 = call %impl_SolEncoder__new v2; return v3; } @@ -792,9 +808,9 @@ func private %from_raw(v0.i256) -> i256 { return v2; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_0a8e(v0.@layout_3) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_31de(v0.@layout_2) -> i256 { block0: - v1.objref<@layout_3> = obj.alloc @layout_3; + v1.objref<@layout_2> = obj.alloc @layout_2; v3.objref = obj.proj v1 0.i256; v4.i256 = extract_value v0 0.i256; obj.store v3 v4; @@ -809,9 +825,9 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_0a8e return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_2605(v0.@layout_3) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_5008(v0.@layout_2) -> i256 { block0: - v1.objref<@layout_3> = obj.alloc @layout_3; + v1.objref<@layout_2> = obj.alloc @layout_2; v3.objref = obj.proj v1 0.i256; v4.i256 = extract_value v0 0.i256; obj.store v3 v4; @@ -826,9 +842,9 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_2605 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_7233(v0.@layout_3) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_7534(v0.@layout_2) -> i256 { block0: - v1.objref<@layout_3> = obj.alloc @layout_3; + v1.objref<@layout_2> = obj.alloc @layout_2; v3.objref = obj.proj v1 0.i256; v4.i256 = extract_value v0 0.i256; obj.store v3 v4; @@ -843,9 +859,9 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_7233 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_9b08(v0.@layout_3) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_806c(v0.@layout_2) -> i256 { block0: - v1.objref<@layout_3> = obj.alloc @layout_3; + v1.objref<@layout_2> = obj.alloc @layout_2; v3.objref = obj.proj v1 0.i256; v4.i256 = extract_value v0 0.i256; obj.store v3 v4; @@ -860,9 +876,9 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_9b08 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_b143(v0.@layout_3) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_8d9f(v0.@layout_2) -> i256 { block0: - v1.objref<@layout_3> = obj.alloc @layout_3; + v1.objref<@layout_2> = obj.alloc @layout_2; v3.objref = obj.proj v1 0.i256; v4.i256 = extract_value v0 0.i256; obj.store v3 v4; @@ -877,9 +893,9 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_b143 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_c8fa(v0.@layout_3) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_feb2(v0.@layout_2) -> i256 { block0: - v1.objref<@layout_3> = obj.alloc @layout_3; + v1.objref<@layout_2> = obj.alloc @layout_2; v3.objref = obj.proj v1 0.i256; v4.i256 = extract_value v0 0.i256; obj.store v3 v4; @@ -894,7 +910,26 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_c8fa return v9; } -func private %impl_SolEncoder__new(v0.i256) -> @layout_2 { +func private %impl_Cursor__new__g463e(v0.@layout_2) -> @layout_3 { + block0: + jump block1; + + block1: + v2.objref<@layout_3> = obj.alloc @layout_3; + v4.objref<@layout_2> = obj.proj v2 0.i256; + v5.objref = obj.proj v4 0.i256; + v6.i256 = extract_value v0 0.i256; + obj.store v5 v6; + v8.objref = obj.proj v4 1.i256; + v9.i256 = extract_value v0 1.i256; + obj.store v8 v9; + v10.objref = obj.proj v2 1.i256; + obj.store v10 0.i256; + v11.@layout_3 = obj.load v2; + return v11; +} + +func private %impl_SolEncoder__new(v0.i256) -> @layout_5 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -916,25 +951,25 @@ func private %impl_SolEncoder__new(v0.i256) -> @layout_2 { block4: v8.i256 = phi (0.i256 block2) (v7 block3); - v9.objref<@layout_2> = obj.alloc @layout_2; + v9.objref<@layout_5> = obj.alloc @layout_5; v10.objref = obj.proj v9 0.i256; obj.store v10 v8; v12.objref = obj.proj v9 1.i256; obj.store v12 v8; - v13.@layout_2 = obj.load v9; + v13.@layout_5 = obj.load v9; return v13; } -func private %impl_SolDecoder__new__g463e(v0.@layout_3) -> @layout_5 { +func private %impl_SolDecoder__new__g463e(v0.@layout_2) -> @layout_4 { block0: jump block1; block1: - v2.@layout_4 = call %impl_Cursor__new__g463e v0; - v4.objref<@layout_5> = obj.alloc @layout_5; - v5.objref<@layout_4> = obj.proj v4 0.i256; - v6.objref<@layout_3> = obj.proj v5 0.i256; - v7.@layout_3 = extract_value v2 0.i256; + v2.@layout_3 = call %impl_Cursor__new__g463e v0; + v4.objref<@layout_4> = obj.alloc @layout_4; + v5.objref<@layout_3> = obj.proj v4 0.i256; + v6.objref<@layout_2> = obj.proj v5 0.i256; + v7.@layout_2 = extract_value v2 0.i256; v8.objref = obj.proj v6 0.i256; v9.i256 = extract_value v7 0.i256; obj.store v8 v9; @@ -946,30 +981,11 @@ func private %impl_SolDecoder__new__g463e(v0.@layout_3) -> @layout_5 { obj.store v13 v14; v15.objref = obj.proj v4 1.i256; obj.store v15 0.i256; - v16.@layout_5 = obj.load v4; + v16.@layout_4 = obj.load v4; return v16; } -func private %impl_Cursor__new__g463e(v0.@layout_3) -> @layout_4 { - block0: - jump block1; - - block1: - v2.objref<@layout_4> = obj.alloc @layout_4; - v4.objref<@layout_3> = obj.proj v2 0.i256; - v5.objref = obj.proj v4 0.i256; - v6.i256 = extract_value v0 0.i256; - obj.store v5 v6; - v8.objref = obj.proj v4 1.i256; - v9.i256 = extract_value v0 1.i256; - obj.store v8 v9; - v10.objref = obj.proj v2 1.i256; - obj.store v10 0.i256; - v11.@layout_4 = obj.load v2; - return v11; -} - -func private %core__lib__abi__trait_AbiSize__payload_size__ge513_a8bc(v0.i256) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__ge513_8d6a(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -979,7 +995,7 @@ func private %core__lib__abi__trait_AbiSize__payload_size__ge513_a8bc(v0.i256) - return 32.i256; } -func private %core__lib__abi__trait_AbiSize__payload_size__ge513_a8bc_0(v0.i256) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__ge513_8d6a_0(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -989,44 +1005,44 @@ func private %core__lib__abi__trait_AbiSize__payload_size__ge513_a8bc_0(v0.i256) return 32.i256; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_047d(v0.objref<@layout_5>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_3beb(v0.objref<@layout_4>) -> i256 { block0: jump block1; block1: - v3.objref<@layout_4> = obj.proj v0 0.i256; + v3.objref<@layout_3> = obj.proj v0 0.i256; v5.objref = obj.proj v3 1.i256; v6.i256 = obj.load v5; return v6; } -func private %impl_trait_SolEncoder__pos(v0.objref<@layout_2>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_479f(v0.objref<@layout_4>) -> i256 { block0: jump block1; block1: - v3.objref = obj.proj v0 1.i256; - v4.i256 = obj.load v3; - return v4; + v3.objref<@layout_3> = obj.proj v0 0.i256; + v5.objref = obj.proj v3 1.i256; + v6.i256 = obj.load v5; + return v6; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_c53e(v0.objref<@layout_5>) -> i256 { +func private %pos__gf13e(v0.objref<@layout_5>) -> i256 { block0: jump block1; block1: - v3.objref<@layout_4> = obj.proj v0 0.i256; - v5.objref = obj.proj v3 1.i256; - v6.i256 = obj.load v5; - return v6; + v3.objref = obj.proj v0 1.i256; + v4.i256 = obj.load v3; + return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_ebe7(v0.objref<@layout_5>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_8283(v0.objref<@layout_4>) -> i256 { block0: jump block1; block1: - v3.objref<@layout_4> = obj.proj v0 0.i256; + v3.objref<@layout_3> = obj.proj v0 0.i256; v5.objref = obj.proj v3 1.i256; v6.i256 = obj.load v5; return v6; @@ -1041,19 +1057,19 @@ func private %read_cell(v0.i256) -> i256 { return v2; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_3646(v0.objref<@layout_5>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_037f(v0.objref<@layout_4>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; jump block1; block1: - v5.objref<@layout_4> = obj.proj v0 0.i256; - v6.objref<@layout_3> = obj.proj v5 0.i256; - v7.@layout_3 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_b143 v7; + v5.objref<@layout_3> = obj.proj v0 0.i256; + v6.objref<@layout_2> = obj.proj v5 0.i256; + v7.@layout_2 = obj.load v6; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_7534 v7; mstore v1 v8 i256; - v9.objref<@layout_4> = obj.proj v0 0.i256; + v9.objref<@layout_3> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; v12.i256 = obj.load v11; (v14.i256, v15.i1) = uaddo v12 32.i256; @@ -1066,14 +1082,14 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_3 jump block4; block4: - v26.objref<@layout_4> = obj.proj v0 0.i256; - v27.objref<@layout_3> = obj.proj v26 0.i256; - v28.@layout_3 = obj.load v27; - v29.objref<@layout_4> = obj.proj v0 0.i256; + v26.objref<@layout_3> = obj.proj v0 0.i256; + v27.objref<@layout_2> = obj.proj v26 0.i256; + v28.@layout_2 = obj.load v27; + v29.objref<@layout_3> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ca68 v28 v31; - v34.objref<@layout_4> = obj.proj v0 0.i256; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_625a v28 v31; + v34.objref<@layout_3> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; return v32; @@ -1091,26 +1107,26 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_3 evm_revert 0.i256 36.i256; block7: - v21.objref<@layout_4> = obj.proj v0 0.i256; + v21.objref<@layout_3> = obj.proj v0 0.i256; v22.objref = obj.proj v21 1.i256; v23.i256 = obj.load v22; v24.i1 = lt v14 v23; br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_77a7(v0.objref<@layout_5>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_2e10(v0.objref<@layout_4>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; jump block1; block1: - v5.objref<@layout_4> = obj.proj v0 0.i256; - v6.objref<@layout_3> = obj.proj v5 0.i256; - v7.@layout_3 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_7233 v7; + v5.objref<@layout_3> = obj.proj v0 0.i256; + v6.objref<@layout_2> = obj.proj v5 0.i256; + v7.@layout_2 = obj.load v6; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_31de v7; mstore v1 v8 i256; - v9.objref<@layout_4> = obj.proj v0 0.i256; + v9.objref<@layout_3> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; v12.i256 = obj.load v11; (v14.i256, v15.i1) = uaddo v12 32.i256; @@ -1123,14 +1139,14 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_7 jump block4; block4: - v26.objref<@layout_4> = obj.proj v0 0.i256; - v27.objref<@layout_3> = obj.proj v26 0.i256; - v28.@layout_3 = obj.load v27; - v29.objref<@layout_4> = obj.proj v0 0.i256; + v26.objref<@layout_3> = obj.proj v0 0.i256; + v27.objref<@layout_2> = obj.proj v26 0.i256; + v28.@layout_2 = obj.load v27; + v29.objref<@layout_3> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_caf8 v28 v31; - v34.objref<@layout_4> = obj.proj v0 0.i256; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ace3 v28 v31; + v34.objref<@layout_3> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; return v32; @@ -1148,26 +1164,26 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_7 evm_revert 0.i256 36.i256; block7: - v21.objref<@layout_4> = obj.proj v0 0.i256; + v21.objref<@layout_3> = obj.proj v0 0.i256; v22.objref = obj.proj v21 1.i256; v23.i256 = obj.load v22; v24.i1 = lt v14 v23; br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_b6e9(v0.objref<@layout_5>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_40d7(v0.objref<@layout_4>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; jump block1; block1: - v5.objref<@layout_4> = obj.proj v0 0.i256; - v6.objref<@layout_3> = obj.proj v5 0.i256; - v7.@layout_3 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_0a8e v7; + v5.objref<@layout_3> = obj.proj v0 0.i256; + v6.objref<@layout_2> = obj.proj v5 0.i256; + v7.@layout_2 = obj.load v6; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_806c v7; mstore v1 v8 i256; - v9.objref<@layout_4> = obj.proj v0 0.i256; + v9.objref<@layout_3> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; v12.i256 = obj.load v11; (v14.i256, v15.i1) = uaddo v12 32.i256; @@ -1180,14 +1196,14 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_b jump block4; block4: - v26.objref<@layout_4> = obj.proj v0 0.i256; - v27.objref<@layout_3> = obj.proj v26 0.i256; - v28.@layout_3 = obj.load v27; - v29.objref<@layout_4> = obj.proj v0 0.i256; + v26.objref<@layout_3> = obj.proj v0 0.i256; + v27.objref<@layout_2> = obj.proj v26 0.i256; + v28.@layout_2 = obj.load v27; + v29.objref<@layout_3> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_d0f7 v28 v31; - v34.objref<@layout_4> = obj.proj v0 0.i256; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_7cb3 v28 v31; + v34.objref<@layout_3> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; return v32; @@ -1205,26 +1221,26 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_b evm_revert 0.i256 36.i256; block7: - v21.objref<@layout_4> = obj.proj v0 0.i256; + v21.objref<@layout_3> = obj.proj v0 0.i256; v22.objref = obj.proj v21 1.i256; v23.i256 = obj.load v22; v24.i1 = lt v14 v23; br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_c929(v0.objref<@layout_5>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_4da8(v0.objref<@layout_4>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; jump block1; block1: - v5.objref<@layout_4> = obj.proj v0 0.i256; - v6.objref<@layout_3> = obj.proj v5 0.i256; - v7.@layout_3 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_2605 v7; + v5.objref<@layout_3> = obj.proj v0 0.i256; + v6.objref<@layout_2> = obj.proj v5 0.i256; + v7.@layout_2 = obj.load v6; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_5008 v7; mstore v1 v8 i256; - v9.objref<@layout_4> = obj.proj v0 0.i256; + v9.objref<@layout_3> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; v12.i256 = obj.load v11; (v14.i256, v15.i1) = uaddo v12 32.i256; @@ -1237,14 +1253,14 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_c jump block4; block4: - v26.objref<@layout_4> = obj.proj v0 0.i256; - v27.objref<@layout_3> = obj.proj v26 0.i256; - v28.@layout_3 = obj.load v27; - v29.objref<@layout_4> = obj.proj v0 0.i256; + v26.objref<@layout_3> = obj.proj v0 0.i256; + v27.objref<@layout_2> = obj.proj v26 0.i256; + v28.@layout_2 = obj.load v27; + v29.objref<@layout_3> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_a18e v28 v31; - v34.objref<@layout_4> = obj.proj v0 0.i256; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_265c v28 v31; + v34.objref<@layout_3> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; return v32; @@ -1262,26 +1278,26 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_c evm_revert 0.i256 36.i256; block7: - v21.objref<@layout_4> = obj.proj v0 0.i256; + v21.objref<@layout_3> = obj.proj v0 0.i256; v22.objref = obj.proj v21 1.i256; v23.i256 = obj.load v22; v24.i1 = lt v14 v23; br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_d39e(v0.objref<@layout_5>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_c8a2(v0.objref<@layout_4>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; jump block1; block1: - v5.objref<@layout_4> = obj.proj v0 0.i256; - v6.objref<@layout_3> = obj.proj v5 0.i256; - v7.@layout_3 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_c8fa v7; + v5.objref<@layout_3> = obj.proj v0 0.i256; + v6.objref<@layout_2> = obj.proj v5 0.i256; + v7.@layout_2 = obj.load v6; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_8d9f v7; mstore v1 v8 i256; - v9.objref<@layout_4> = obj.proj v0 0.i256; + v9.objref<@layout_3> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; v12.i256 = obj.load v11; (v14.i256, v15.i1) = uaddo v12 32.i256; @@ -1294,14 +1310,14 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_d jump block4; block4: - v26.objref<@layout_4> = obj.proj v0 0.i256; - v27.objref<@layout_3> = obj.proj v26 0.i256; - v28.@layout_3 = obj.load v27; - v29.objref<@layout_4> = obj.proj v0 0.i256; + v26.objref<@layout_3> = obj.proj v0 0.i256; + v27.objref<@layout_2> = obj.proj v26 0.i256; + v28.@layout_2 = obj.load v27; + v29.objref<@layout_3> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_bd46 v28 v31; - v34.objref<@layout_4> = obj.proj v0 0.i256; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_38fd v28 v31; + v34.objref<@layout_3> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; return v32; @@ -1319,26 +1335,26 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_d evm_revert 0.i256 36.i256; block7: - v21.objref<@layout_4> = obj.proj v0 0.i256; + v21.objref<@layout_3> = obj.proj v0 0.i256; v22.objref = obj.proj v21 1.i256; v23.i256 = obj.load v22; v24.i1 = lt v14 v23; br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_ebbf(v0.objref<@layout_5>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_f172(v0.objref<@layout_4>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; jump block1; block1: - v5.objref<@layout_4> = obj.proj v0 0.i256; - v6.objref<@layout_3> = obj.proj v5 0.i256; - v7.@layout_3 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_9b08 v7; + v5.objref<@layout_3> = obj.proj v0 0.i256; + v6.objref<@layout_2> = obj.proj v5 0.i256; + v7.@layout_2 = obj.load v6; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_feb2 v7; mstore v1 v8 i256; - v9.objref<@layout_4> = obj.proj v0 0.i256; + v9.objref<@layout_3> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; v12.i256 = obj.load v11; (v14.i256, v15.i1) = uaddo v12 32.i256; @@ -1351,14 +1367,14 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_e jump block4; block4: - v26.objref<@layout_4> = obj.proj v0 0.i256; - v27.objref<@layout_3> = obj.proj v26 0.i256; - v28.@layout_3 = obj.load v27; - v29.objref<@layout_4> = obj.proj v0 0.i256; + v26.objref<@layout_3> = obj.proj v0 0.i256; + v27.objref<@layout_2> = obj.proj v26 0.i256; + v28.@layout_2 = obj.load v27; + v29.objref<@layout_3> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_731b v28 v31; - v34.objref<@layout_4> = obj.proj v0 0.i256; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_50f6 v28 v31; + v34.objref<@layout_3> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; return v32; @@ -1376,14 +1392,14 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_e evm_revert 0.i256 36.i256; block7: - v21.objref<@layout_4> = obj.proj v0 0.i256; + v21.objref<@layout_3> = obj.proj v0 0.i256; v22.objref = obj.proj v21 1.i256; v23.i256 = obj.load v22; v24.i1 = lt v14 v23; br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_6a44(v0.objref<@layout_5>, v1.i256) { +func private %set_base__gf13e(v0.objref<@layout_5>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -1391,12 +1407,12 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_6a block1: v3.i256 = mload v2 i256; - v6.objref = obj.proj v0 1.i256; + v6.objref = obj.proj v0 0.i256; obj.store v6 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_8d49(v0.objref<@layout_5>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_5f4f(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -1409,7 +1425,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_8d return; } -func private %impl_trait_SolEncoder__set_base(v0.objref<@layout_2>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_63a1(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -1417,12 +1433,12 @@ func private %impl_trait_SolEncoder__set_base(v0.objref<@layout_2>, v1.i256) { block1: v3.i256 = mload v2 i256; - v6.objref = obj.proj v0 0.i256; + v6.objref = obj.proj v0 1.i256; obj.store v6 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_b155(v0.objref<@layout_5>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_f3bf(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -1435,7 +1451,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_b1 return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_135d(v0.objref<@layout_5>, v1.i256) { +func private %set_pos__gf13e(v0.objref<@layout_5>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -1443,13 +1459,12 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_135 block1: v3.i256 = mload v2 i256; - v6.objref<@layout_4> = obj.proj v0 0.i256; - v8.objref = obj.proj v6 1.i256; - obj.store v8 v3; + v6.objref = obj.proj v0 1.i256; + obj.store v6 v3; return; } -func private %impl_trait_SolEncoder__set_pos(v0.objref<@layout_2>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_5947(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -1457,12 +1472,13 @@ func private %impl_trait_SolEncoder__set_pos(v0.objref<@layout_2>, v1.i256) { block1: v3.i256 = mload v2 i256; - v6.objref = obj.proj v0 1.i256; - obj.store v6 v3; + v6.objref<@layout_3> = obj.proj v0 0.i256; + v8.objref = obj.proj v6 1.i256; + obj.store v8 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_6579(v0.objref<@layout_5>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_6146(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -1470,13 +1486,13 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_657 block1: v3.i256 = mload v2 i256; - v6.objref<@layout_4> = obj.proj v0 0.i256; + v6.objref<@layout_3> = obj.proj v0 0.i256; v8.objref = obj.proj v6 1.i256; obj.store v8 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_ec19(v0.objref<@layout_5>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_d6ad(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -1484,7 +1500,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_ec1 block1: v3.i256 = mload v2 i256; - v6.objref<@layout_4> = obj.proj v0 0.i256; + v6.objref<@layout_3> = obj.proj v0 0.i256; v8.objref = obj.proj v6 1.i256; obj.store v8 v3; return; @@ -1502,9 +1518,9 @@ func private %stor_ptr(v0.i256) -> i256 { return v3; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_731b(v0.@layout_3, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_265c(v0.@layout_2, v1.i256) -> i256 { block0: - v2.objref<@layout_3> = obj.alloc @layout_3; + v2.objref<@layout_2> = obj.alloc @layout_2; v3.*i256 = alloca i256; v5.objref = obj.proj v2 0.i256; v6.i256 = extract_value v0 0.i256; @@ -1524,9 +1540,9 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_a18e(v0.@layout_3, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_38fd(v0.@layout_2, v1.i256) -> i256 { block0: - v2.objref<@layout_3> = obj.alloc @layout_3; + v2.objref<@layout_2> = obj.alloc @layout_2; v3.*i256 = alloca i256; v5.objref = obj.proj v2 0.i256; v6.i256 = extract_value v0 0.i256; @@ -1546,9 +1562,9 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_bd46(v0.@layout_3, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_50f6(v0.@layout_2, v1.i256) -> i256 { block0: - v2.objref<@layout_3> = obj.alloc @layout_3; + v2.objref<@layout_2> = obj.alloc @layout_2; v3.*i256 = alloca i256; v5.objref = obj.proj v2 0.i256; v6.i256 = extract_value v0 0.i256; @@ -1568,9 +1584,9 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ca68(v0.@layout_3, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_625a(v0.@layout_2, v1.i256) -> i256 { block0: - v2.objref<@layout_3> = obj.alloc @layout_3; + v2.objref<@layout_2> = obj.alloc @layout_2; v3.*i256 = alloca i256; v5.objref = obj.proj v2 0.i256; v6.i256 = extract_value v0 0.i256; @@ -1590,9 +1606,9 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_caf8(v0.@layout_3, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_7cb3(v0.@layout_2, v1.i256) -> i256 { block0: - v2.objref<@layout_3> = obj.alloc @layout_3; + v2.objref<@layout_2> = obj.alloc @layout_2; v3.*i256 = alloca i256; v5.objref = obj.proj v2 0.i256; v6.i256 = extract_value v0 0.i256; @@ -1612,9 +1628,9 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_d0f7(v0.@layout_3, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ace3(v0.@layout_2, v1.i256) -> i256 { block0: - v2.objref<@layout_3> = obj.alloc @layout_3; + v2.objref<@layout_2> = obj.alloc @layout_2; v3.*i256 = alloca i256; v5.objref = obj.proj v2 0.i256; v6.i256 = extract_value v0 0.i256; @@ -1647,7 +1663,7 @@ func private %write_cell(v0.i256, v1.i256) -> i256 { return v5; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_2aa5(v0.objref<@layout_2>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_7a6d(v0.objref<@layout_5>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -1664,7 +1680,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_2aa5(v0 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_8a50(v0.objref<@layout_2>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_b5c2(v0.objref<@layout_5>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; diff --git a/crates/codegen/tests/fixtures/sonatina_ir/erc20.snap b/crates/codegen/tests/fixtures/sonatina_ir/erc20.snap index 445de9e180..a5e5149d51 100644 --- a/crates/codegen/tests/fixtures/sonatina_ir/erc20.snap +++ b/crates/codegen/tests/fixtures/sonatina_ir/erc20.snap @@ -260,16 +260,16 @@ func private %__CoolCoin_recv_1_4(v0.@layout_0, v1.i256, v2.objref<@layout_2>, v return 1.i1; } -func private %abi_field_size__gda9b(v0.i1) -> i256 { +func private %abi_field_size__g5535(v0.i256) -> i256 { block0: - v1.*i1 = alloca i1; - mstore v1 v0 i1; + v1.*i256 = alloca i256; + mstore v1 v0 i256; jump block1; block1: - v2.i1 = mload v1 i1; - v3.i256 = call %core__lib__abi__trait_AbiSize__payload_size__gda9b_b33d_0 v2; - br 0.i1 block2 block3; + v2.i256 = mload v1 i256; + v3.i256 = call %core__lib__abi__impl_trait_String_c06e__payload_size__g3eb7_50d8_0 v2; + br 1.i1 block2 block3; block2: (v7.i256, v8.i1) = uaddo 32.i256 v3; @@ -290,16 +290,16 @@ func private %abi_field_size__gda9b(v0.i1) -> i256 { return v7; } -func private %abi_field_size__g5535(v0.i256) -> i256 { +func private %abi_field_size__gda9b(v0.i1) -> i256 { block0: - v1.*i256 = alloca i256; - mstore v1 v0 i256; + v1.*i1 = alloca i1; + mstore v1 v0 i1; jump block1; block1: - v2.i256 = mload v1 i256; - v3.i256 = call %core__lib__abi__impl_trait_String_c06e__payload_size__g3eb7_dfa6_0 v2; - br 1.i1 block2 block3; + v2.i1 = mload v1 i1; + v3.i256 = call %core__lib__abi__trait_AbiSize__payload_size__gda9b_ca77_0 v2; + br 0.i1 block2 block3; block2: (v7.i256, v8.i1) = uaddo 32.i256 v3; @@ -328,7 +328,7 @@ func private %abi_field_size__g65da(v0.i256) -> i256 { block1: v2.i256 = mload v1 i256; - v3.i256 = call %core__lib__abi__impl_trait_String_c06e__payload_size__gc7cf_9b7d_0 v2; + v3.i256 = call %core__lib__abi__impl_trait_String_c06e__payload_size__gc7cf_5272_0 v2; br 1.i1 block2 block3; block2: @@ -358,7 +358,7 @@ func private %abi_field_size__g79ff(v0.i8) -> i256 { block1: v2.i8 = mload v1 i8; - v3.i256 = call %core__lib__abi__trait_AbiSize__payload_size__g79ff_f3e8_0 v2; + v3.i256 = call %core__lib__abi__trait_AbiSize__payload_size__g79ff_9e57_0 v2; br 0.i1 block2 block3; block2: @@ -388,7 +388,7 @@ func private %abi_field_size__ge513(v0.i256) -> i256 { block1: v2.i256 = mload v1 i256; - v3.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_77e5_0 v2; + v3.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_0bb1_0 v2; br 0.i1 block2 block3; block2: @@ -410,55 +410,67 @@ func private %abi_field_size__ge513(v0.i256) -> i256 { return v7; } -func private %core__lib__abi__abi_payload_size__ge513_b9e3(v0.i256) -> i256 { +func private %core__lib__abi__abi_payload_size__geb2e_1453(v0.objref<@layout_3>) -> i256 { block0: - v1.*i256 = alloca i256; - mstore v1 v0 i256; jump block1; block1: - v2.i256 = mload v1 i256; - v3.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_a81c v2; - return v3; + v2.i256 = call %std__lib__evm__panic__impl_trait_Panic_bf0a__payload_size_3662 v0; + return v2; } -func private %core__lib__abi__abi_payload_size__ge513_cdf0(v0.i256) -> i256 { +func private %core__lib__abi__abi_payload_size__geb2e_1453_0(v0.objref<@layout_3>) -> i256 { block0: - v1.*i256 = alloca i256; - mstore v1 v0 i256; jump block1; block1: - v2.i256 = mload v1 i256; - v3.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_0454 v2; - return v3; + v2.i256 = call %std__lib__evm__panic__impl_trait_Panic_bf0a__payload_size_3662_0 v0; + return v2; } -func private %core__lib__abi__abi_payload_size__geb2e_fde6(v0.objref<@layout_3>) -> i256 { +func private %core__lib__abi__abi_payload_size__geb2e_1453_1(v0.objref<@layout_3>) -> i256 { block0: jump block1; block1: - v2.i256 = call %std__lib__evm__panic__impl_trait_Panic_bf0a__payload_size_1e4f v0; + v2.i256 = call %std__lib__evm__panic__impl_trait_Panic_bf0a__payload_size_3662_1 v0; return v2; } -func private %core__lib__abi__abi_payload_size__geb2e_fde6_0(v0.objref<@layout_3>) -> i256 { +func private %core__lib__abi__abi_payload_size__ge513_5105(v0.i256) -> i256 { + block0: + v1.*i256 = alloca i256; + mstore v1 v0 i256; + jump block1; + + block1: + v2.i256 = mload v1 i256; + v3.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_0ce8 v2; + return v3; +} + +func private %core__lib__abi__abi_payload_size__ge513_f355(v0.i256) -> i256 { block0: + v1.*i256 = alloca i256; + mstore v1 v0 i256; jump block1; block1: - v2.i256 = call %std__lib__evm__panic__impl_trait_Panic_bf0a__payload_size_1e4f_0 v0; - return v2; + v2.i256 = mload v1 i256; + v3.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_a109 v2; + return v3; } -func private %core__lib__abi__abi_payload_size__geb2e_fde6_1(v0.objref<@layout_3>) -> i256 { +func private %abi_single_root_size__ge513(v0.i256) -> i256 { block0: + v1.*i256 = alloca i256; + mstore v1 v0 i256; jump block1; block1: - v2.i256 = call %std__lib__evm__panic__impl_trait_Panic_bf0a__payload_size_1e4f_1 v0; - return v2; + v2.i256 = mload v1 i256; + v3.i256 = call %abi_field_size__ge513 v2; + return v3; } func private %abi_single_root_size__gda9b(v0.i1) -> i256 { @@ -473,7 +485,7 @@ func private %abi_single_root_size__gda9b(v0.i1) -> i256 { return v3; } -func private %abi_single_root_size__g65da(v0.i256) -> i256 { +func private %abi_single_root_size__g5535(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -481,11 +493,11 @@ func private %abi_single_root_size__g65da(v0.i256) -> i256 { block1: v2.i256 = mload v1 i256; - v3.i256 = call %abi_field_size__g65da v2; + v3.i256 = call %abi_field_size__g5535 v2; return v3; } -func private %abi_single_root_size__g5535(v0.i256) -> i256 { +func private %abi_single_root_size__g65da(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -493,7 +505,7 @@ func private %abi_single_root_size__g5535(v0.i256) -> i256 { block1: v2.i256 = mload v1 i256; - v3.i256 = call %abi_field_size__g5535 v2; + v3.i256 = call %abi_field_size__g65da v2; return v3; } @@ -509,18 +521,6 @@ func private %abi_single_root_size__g79ff(v0.i8) -> i256 { return v3; } -func private %abi_single_root_size__ge513(v0.i256) -> i256 { - block0: - v1.*i256 = alloca i256; - mstore v1 v0 i256; - jump block1; - - block1: - v2.i256 = mload v1 i256; - v3.i256 = call %abi_field_size__ge513 v2; - return v3; -} - func private %standalone_erc20__erc20__approve__g5c3f_26fb(v0.@layout_0, v1.@layout_0, v2.i256, v3.i256, v4.objref<@layout_2>) { block0: v5.objref<@layout_0> = obj.alloc @layout_0; @@ -816,7 +816,7 @@ func private %std__lib__evm__effects__assert_d98e_1(v0.i1) { return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_009f(v0.objref<@layout_4>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_0e14(v0.objref<@layout_4>) -> i256 { block0: jump block1; @@ -826,27 +826,27 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_009f(v0.objre return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_112b(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_162e(v0.objref<@layout_4>) -> i256 { block0: jump block1; block1: - v3.objref = obj.proj v0 1.i256; + v3.objref = obj.proj v0 0.i256; v4.i256 = obj.load v3; return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_1fe3(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_162e_0(v0.objref<@layout_4>) -> i256 { block0: jump block1; block1: - v3.objref = obj.proj v0 1.i256; + v3.objref = obj.proj v0 0.i256; v4.i256 = obj.load v3; return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_25d4(v0.objref<@layout_4>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_162e_1(v0.objref<@layout_4>) -> i256 { block0: jump block1; @@ -856,27 +856,27 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_25d4(v0.objre return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_2a40(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_1ae1(v0.objref<@layout_4>) -> i256 { block0: jump block1; block1: - v3.objref = obj.proj v0 1.i256; + v3.objref = obj.proj v0 0.i256; v4.i256 = obj.load v3; return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_2c1b(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_1ae1_0(v0.objref<@layout_4>) -> i256 { block0: jump block1; block1: - v3.objref = obj.proj v0 1.i256; + v3.objref = obj.proj v0 0.i256; v4.i256 = obj.load v3; return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_2c1b_0(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_2c1e(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -886,7 +886,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_2c1b_0 return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_3735(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_3041(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -896,17 +896,17 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_3735(v return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_4097(v0.objref<@layout_4>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_325f(v0.objref<@layout_7>) -> i256 { block0: jump block1; block1: - v3.objref = obj.proj v0 0.i256; + v3.objref = obj.proj v0 1.i256; v4.i256 = obj.load v3; return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_4097_0(v0.objref<@layout_4>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_3754(v0.objref<@layout_4>) -> i256 { block0: jump block1; @@ -916,17 +916,17 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_4097_0(v0.obj return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_4097_1(v0.objref<@layout_4>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_4553(v0.objref<@layout_7>) -> i256 { block0: jump block1; block1: - v3.objref = obj.proj v0 0.i256; + v3.objref = obj.proj v0 1.i256; v4.i256 = obj.load v3; return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_452e(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_4d02(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -936,17 +936,17 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_452e(v return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_5982(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_6218(v0.objref<@layout_4>) -> i256 { block0: jump block1; block1: - v3.objref = obj.proj v0 1.i256; + v3.objref = obj.proj v0 0.i256; v4.i256 = obj.load v3; return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_6030(v0.objref<@layout_4>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_6218_0(v0.objref<@layout_4>) -> i256 { block0: jump block1; @@ -956,7 +956,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_6030(v0.objre return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_61cd(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_6555(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -966,7 +966,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_61cd(v return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_64fa(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_7734(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -976,7 +976,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_64fa(v return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_655e(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_7f1e(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -986,7 +986,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_655e(v return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_6945(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_89ee(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -996,7 +996,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_6945(v return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_7666(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_8a12(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -1006,7 +1006,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_7666(v return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_7776(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_8c5a(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -1016,17 +1016,17 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_7776(v return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_7aef(v0.objref<@layout_4>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_8cdd(v0.objref<@layout_7>) -> i256 { block0: jump block1; block1: - v3.objref = obj.proj v0 0.i256; + v3.objref = obj.proj v0 1.i256; v4.i256 = obj.load v3; return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_7aef_0(v0.objref<@layout_4>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_9b93(v0.objref<@layout_4>) -> i256 { block0: jump block1; @@ -1036,7 +1036,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_7aef_0(v0.obj return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_7aef_1(v0.objref<@layout_4>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_9b93_0(v0.objref<@layout_4>) -> i256 { block0: jump block1; @@ -1046,17 +1046,17 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_7aef_1(v0.obj return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_8751(v0.objref<@layout_4>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_a01e(v0.objref<@layout_7>) -> i256 { block0: jump block1; block1: - v3.objref = obj.proj v0 0.i256; + v3.objref = obj.proj v0 1.i256; v4.i256 = obj.load v3; return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_8ac8(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_a7f6(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -1066,17 +1066,27 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_8ac8(v return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_a9a0(v0.objref<@layout_4>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_b221(v0.objref<@layout_7>) -> i256 { block0: jump block1; block1: - v3.objref = obj.proj v0 0.i256; + v3.objref = obj.proj v0 1.i256; + v4.i256 = obj.load v3; + return v4; +} + +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_b72d(v0.objref<@layout_7>) -> i256 { + block0: + jump block1; + + block1: + v3.objref = obj.proj v0 1.i256; v4.i256 = obj.load v3; return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_b56a(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_b72d_0(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -1086,7 +1096,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_b56a(v return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_bb09(v0.objref<@layout_4>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_bad5(v0.objref<@layout_4>) -> i256 { block0: jump block1; @@ -1096,17 +1106,17 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_bb09(v0.objre return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_bcf7(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_bfc2(v0.objref<@layout_4>) -> i256 { block0: jump block1; block1: - v3.objref = obj.proj v0 1.i256; + v3.objref = obj.proj v0 0.i256; v4.i256 = obj.load v3; return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_c13e(v0.objref<@layout_4>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_bfc2_0(v0.objref<@layout_4>) -> i256 { block0: jump block1; @@ -1116,27 +1126,47 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_c13e(v0.objre return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_c1be(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_bfc2_1(v0.objref<@layout_4>) -> i256 { block0: jump block1; block1: - v3.objref = obj.proj v0 1.i256; + v3.objref = obj.proj v0 0.i256; v4.i256 = obj.load v3; return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_d8a6(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_c6ed(v0.objref<@layout_4>) -> i256 { block0: jump block1; block1: - v3.objref = obj.proj v0 1.i256; + v3.objref = obj.proj v0 0.i256; + v4.i256 = obj.load v3; + return v4; +} + +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_c6ed_0(v0.objref<@layout_4>) -> i256 { + block0: + jump block1; + + block1: + v3.objref = obj.proj v0 0.i256; + v4.i256 = obj.load v3; + return v4; +} + +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_c6ed_1(v0.objref<@layout_4>) -> i256 { + block0: + jump block1; + + block1: + v3.objref = obj.proj v0 0.i256; v4.i256 = obj.load v3; return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_dd69(v0.objref<@layout_4>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_c940(v0.objref<@layout_4>) -> i256 { block0: jump block1; @@ -1146,7 +1176,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_dd69(v0.objre return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_deb4(v0.objref<@layout_4>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_c940_0(v0.objref<@layout_4>) -> i256 { block0: jump block1; @@ -1156,7 +1186,17 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_deb4(v0.objre return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_deb4_0(v0.objref<@layout_4>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_d310(v0.objref<@layout_7>) -> i256 { + block0: + jump block1; + + block1: + v3.objref = obj.proj v0 1.i256; + v4.i256 = obj.load v3; + return v4; +} + +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_db1d(v0.objref<@layout_4>) -> i256 { block0: jump block1; @@ -1166,7 +1206,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_deb4_0(v0.obj return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_deb4_1(v0.objref<@layout_4>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_db1d_0(v0.objref<@layout_4>) -> i256 { block0: jump block1; @@ -1176,7 +1216,17 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_deb4_1(v0.obj return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_fd6f(v0.objref<@layout_4>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_dd8a(v0.objref<@layout_7>) -> i256 { + block0: + jump block1; + + block1: + v3.objref = obj.proj v0 1.i256; + v4.i256 = obj.load v3; + return v4; +} + +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_e7dd(v0.objref<@layout_4>) -> i256 { block0: jump block1; @@ -2518,72 +2568,77 @@ func private %contract_runtime_root_CoolCoin() { jump block1; block1: - v1.i256 = evm_calldata_load 0.i256; - v3.i256 = shr 224.i256 v1; - v4.i32 = trunc v3 i32; - br_table v4 block2 (117300739.i32 block3) (157198259.i32 block4) (404098525.i32 block5) (599290589.i32 block6) (826074471.i32 block7) (961581905.i32 block8) (1086394137.i32 block9) (1117154408.i32 block10) (1889567281.i32 block11) (2043438992.i32 block12) (-1780966591.i32 block13) (-1537752361.i32 block14) (-1459249989.i32 block15) (-580719298.i32 block16); + v1.i256 = evm_calldata_size; + v3.i1 = lt v1 4.i256; + br v3 block2 block3; block2: evm_revert 0.i256 0.i256; block3: + v5.i256 = evm_calldata_load 0.i256; + v7.i256 = shr 224.i256 v5; + v8.i32 = trunc v7 i32; + br_table v8 block2 (117300739.i32 block4) (157198259.i32 block5) (404098525.i32 block6) (599290589.i32 block7) (826074471.i32 block8) (961581905.i32 block9) (1086394137.i32 block10) (1117154408.i32 block11) (1889567281.i32 block12) (2043438992.i32 block13) (-1780966591.i32 block14) (-1537752361.i32 block15) (-1459249989.i32 block16) (-580719298.i32 block17); + + block4: call %contract_recv_abi_CoolCoin_117300739; unreachable; - block4: + block5: call %contract_recv_abi_CoolCoin_157198259; unreachable; - block5: + block6: call %contract_recv_abi_CoolCoin_404098525; unreachable; - block6: + block7: call %contract_recv_abi_CoolCoin_599290589; unreachable; - block7: + block8: call %contract_recv_abi_CoolCoin_826074471; unreachable; - block8: + block9: call %contract_recv_abi_CoolCoin_961581905; unreachable; - block9: + block10: call %contract_recv_abi_CoolCoin_1086394137; unreachable; - block10: + block11: call %contract_recv_abi_CoolCoin_1117154408; unreachable; - block11: + block12: call %contract_recv_abi_CoolCoin_1889567281; unreachable; - block12: + block13: call %contract_recv_abi_CoolCoin_2043438992; unreachable; - block13: + block14: call %contract_recv_abi_CoolCoin_2514000705; unreachable; - block14: + block15: call %contract_recv_abi_CoolCoin_2757214935; unreachable; - block15: + block16: call %contract_recv_abi_CoolCoin_2835717307; unreachable; - block16: + block17: call %contract_recv_abi_CoolCoin_3714247998; unreachable; } -func private %std__lib__evm__effects__copy_words_c4e2(v0.i256, v1.i256, v2.i256) { +func private %std__lib__evm__effects__copy_words_4238(v0.i256, v1.i256, v2.i256) { block0: v3.*i256 = alloca i256; v4.*i256 = alloca i256; @@ -2637,7 +2692,7 @@ func private %std__lib__evm__effects__copy_words_c4e2(v0.i256, v1.i256, v2.i256) jump block2; } -func private %std__lib__evm__effects__copy_words_c4e2_0(v0.i256, v1.i256, v2.i256) { +func private %std__lib__evm__effects__copy_words_4238_0(v0.i256, v1.i256, v2.i256) { block0: v3.*i256 = alloca i256; v4.*i256 = alloca i256; @@ -2691,7 +2746,7 @@ func private %std__lib__evm__effects__copy_words_c4e2_0(v0.i256, v1.i256, v2.i25 jump block2; } -func private %std__lib__evm__effects__copy_words_c4e2_1(v0.i256, v1.i256, v2.i256) { +func private %std__lib__evm__effects__copy_words_4238_1(v0.i256, v1.i256, v2.i256) { block0: v3.*i256 = alloca i256; v4.*i256 = alloca i256; @@ -2753,9 +2808,9 @@ func private %core__lib__abi__decode_field__g3854_0595(v0.objref<@layout_7>) -> br 0.i1 block2 block3; block2: - v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_9246 v0; - v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_d8a6 v0; - v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_99ae v0; + v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_2714 v0; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_dd8a v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_30f1 v0; (v6.i256, v7.i1) = uaddo v4 v3; br v7 block5 block6; @@ -2763,7 +2818,7 @@ func private %core__lib__abi__decode_field__g3854_0595(v0.objref<@layout_7>) -> jump block4; block4: - v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_8ca5 v0; + v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_3704 v0; return v23; block5: @@ -2772,12 +2827,12 @@ func private %core__lib__abi__decode_field__g3854_0595(v0.objref<@layout_7>) -> evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_f8ba v0 v6; - v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_d8a6 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_aee2 v0 v15; - v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_8ca5 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_f8ba v0 v4; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_aee2 v0 v5; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_8f6d v0 v6; + v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_dd8a v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_aabb v0 v15; + v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_3704 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_8f6d v0 v4; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_aabb v0 v5; return v17; } @@ -2789,9 +2844,9 @@ func private %core__lib__abi__decode_field__g3854_0795(v0.objref<@layout_7>) -> br 0.i1 block2 block3; block2: - v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_2418 v0; - v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_5982 v0; - v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_6cfa v0; + v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_e531 v0; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_7734 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_3cf7 v0; (v6.i256, v7.i1) = uaddo v4 v3; br v7 block5 block6; @@ -2799,7 +2854,7 @@ func private %core__lib__abi__decode_field__g3854_0795(v0.objref<@layout_7>) -> jump block4; block4: - v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_5c7d v0; + v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_7dfa v0; return v23; block5: @@ -2808,12 +2863,12 @@ func private %core__lib__abi__decode_field__g3854_0795(v0.objref<@layout_7>) -> evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_c671 v0 v6; - v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_5982 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_5ecf v0 v15; - v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_5c7d v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_c671 v0 v4; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_5ecf v0 v5; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_d9a2 v0 v6; + v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_7734 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_c577 v0 v15; + v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_7dfa v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_d9a2 v0 v4; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_c577 v0 v5; return v17; } @@ -2825,9 +2880,9 @@ func private %core__lib__abi__decode_field__g8463_22ae(v0.objref<@layout_7>) -> br 0.i1 block2 block3; block2: - v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_d64a v0; - v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_1fe3 v0; - v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_c459 v0; + v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_f31c v0; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_7f1e v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_335d v0; (v6.i256, v7.i1) = uaddo v4 v3; br v7 block5 block6; @@ -2835,7 +2890,7 @@ func private %core__lib__abi__decode_field__g8463_22ae(v0.objref<@layout_7>) -> jump block4; block4: - v23.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_1e55 v0; + v23.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_ccef v0; return v23; block5: @@ -2844,12 +2899,12 @@ func private %core__lib__abi__decode_field__g8463_22ae(v0.objref<@layout_7>) -> evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_eef1 v0 v6; - v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_1fe3 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_5ddd v0 v15; - v17.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_1e55 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_eef1 v0 v4; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_5ddd v0 v5; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_594b v0 v6; + v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_7f1e v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_ae91 v0 v15; + v17.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_ccef v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_594b v0 v4; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_ae91 v0 v5; return v17; } @@ -2861,9 +2916,9 @@ func private %core__lib__abi__decode_field__g8463_240b(v0.objref<@layout_7>) -> br 0.i1 block2 block3; block2: - v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_bc48 v0; - v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_2a40 v0; - v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_eba7 v0; + v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_8ecd v0; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_4553 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_0b03 v0; (v6.i256, v7.i1) = uaddo v4 v3; br v7 block5 block6; @@ -2871,7 +2926,7 @@ func private %core__lib__abi__decode_field__g8463_240b(v0.objref<@layout_7>) -> jump block4; block4: - v23.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_e71d v0; + v23.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_c498 v0; return v23; block5: @@ -2880,12 +2935,12 @@ func private %core__lib__abi__decode_field__g8463_240b(v0.objref<@layout_7>) -> evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_b40e v0 v6; - v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_2a40 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_662e v0 v15; - v17.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_e71d v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_b40e v0 v4; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_662e v0 v5; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_a73f v0 v6; + v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_4553 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_3e2a v0 v15; + v17.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_c498 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_a73f v0 v4; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_3e2a v0 v5; return v17; } @@ -2897,9 +2952,9 @@ func private %core__lib__abi__decode_field__g8463_357c(v0.objref<@layout_7>) -> br 0.i1 block2 block3; block2: - v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_2ec5 v0; - v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_64fa v0; - v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_6c2f v0; + v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_d4bc v0; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_89ee v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_d09f v0; (v6.i256, v7.i1) = uaddo v4 v3; br v7 block5 block6; @@ -2907,7 +2962,7 @@ func private %core__lib__abi__decode_field__g8463_357c(v0.objref<@layout_7>) -> jump block4; block4: - v23.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_5c45 v0; + v23.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_815e v0; return v23; block5: @@ -2916,12 +2971,12 @@ func private %core__lib__abi__decode_field__g8463_357c(v0.objref<@layout_7>) -> evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_58b5 v0 v6; - v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_64fa v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_4f21 v0 v15; - v17.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_5c45 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_58b5 v0 v4; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_4f21 v0 v5; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_970f v0 v6; + v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_89ee v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_e646 v0 v15; + v17.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_815e v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_970f v0 v4; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_e646 v0 v5; return v17; } @@ -2933,9 +2988,9 @@ func private %core__lib__abi__decode_field__g8463_3756(v0.objref<@layout_7>) -> br 0.i1 block2 block3; block2: - v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_fd97 v0; - v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_655e v0; - v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_49de v0; + v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_e04a v0; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_8c5a v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_cb40 v0; (v6.i256, v7.i1) = uaddo v4 v3; br v7 block5 block6; @@ -2943,7 +2998,7 @@ func private %core__lib__abi__decode_field__g8463_3756(v0.objref<@layout_7>) -> jump block4; block4: - v23.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_1f10 v0; + v23.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_ab3a v0; return v23; block5: @@ -2952,12 +3007,12 @@ func private %core__lib__abi__decode_field__g8463_3756(v0.objref<@layout_7>) -> evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_48f6 v0 v6; - v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_655e v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_8814 v0 v15; - v17.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_1f10 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_48f6 v0 v4; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_8814 v0 v5; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_1a31 v0 v6; + v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_8c5a v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_a1f6 v0 v15; + v17.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_ab3a v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_1a31 v0 v4; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_a1f6 v0 v5; return v17; } @@ -2969,9 +3024,9 @@ func private %core__lib__abi__decode_field__g3854_5787(v0.objref<@layout_7>) -> br 0.i1 block2 block3; block2: - v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_51c6 v0; - v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_8ac8 v0; - v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_7119 v0; + v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_006f v0; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_8a12 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_2600 v0; (v6.i256, v7.i1) = uaddo v4 v3; br v7 block5 block6; @@ -2979,7 +3034,7 @@ func private %core__lib__abi__decode_field__g3854_5787(v0.objref<@layout_7>) -> jump block4; block4: - v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_8eef v0; + v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_0f30 v0; return v23; block5: @@ -2988,16 +3043,16 @@ func private %core__lib__abi__decode_field__g3854_5787(v0.objref<@layout_7>) -> evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_2563 v0 v6; - v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_8ac8 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_27c4 v0 v15; - v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_8eef v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_2563 v0 v4; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_27c4 v0 v5; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_a4a5 v0 v6; + v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_8a12 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_879e v0 v15; + v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_0f30 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_a4a5 v0 v4; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_879e v0 v5; return v17; } -func private %core__lib__abi__decode_field__g3854_7396(v0.objref<@layout_7>) -> i256 { +func private %core__lib__abi__decode_field__g3854_5b15(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -3005,9 +3060,9 @@ func private %core__lib__abi__decode_field__g3854_7396(v0.objref<@layout_7>) -> br 0.i1 block2 block3; block2: - v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_7972 v0; - v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_b56a v0; - v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_9608 v0; + v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_dccf_0 v0; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_b72d_0 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_0476_0 v0; (v6.i256, v7.i1) = uaddo v4 v3; br v7 block5 block6; @@ -3015,7 +3070,7 @@ func private %core__lib__abi__decode_field__g3854_7396(v0.objref<@layout_7>) -> jump block4; block4: - v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_1373 v0; + v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_d3f1 v0; return v23; block5: @@ -3024,16 +3079,16 @@ func private %core__lib__abi__decode_field__g3854_7396(v0.objref<@layout_7>) -> evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_70f3 v0 v6; - v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_b56a v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_e2de v0 v15; - v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_1373 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_70f3 v0 v4; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_e2de v0 v5; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_d8cd_0 v0 v6; + v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_b72d_0 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_b917_0 v0 v15; + v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_d3f1 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_d8cd_0 v0 v4; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_b917_0 v0 v5; return v17; } -func private %core__lib__abi__decode_field__g8463_77f0(v0.objref<@layout_7>) -> @layout_0 { +func private %core__lib__abi__decode_field__g3854_7396(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -3041,9 +3096,9 @@ func private %core__lib__abi__decode_field__g8463_77f0(v0.objref<@layout_7>) -> br 0.i1 block2 block3; block2: - v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_2677 v0; - v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_61cd v0; - v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_7b2b v0; + v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_0c21 v0; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_a01e v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_bfd7 v0; (v6.i256, v7.i1) = uaddo v4 v3; br v7 block5 block6; @@ -3051,7 +3106,7 @@ func private %core__lib__abi__decode_field__g8463_77f0(v0.objref<@layout_7>) -> jump block4; block4: - v23.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_040a v0; + v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_4632 v0; return v23; block5: @@ -3060,16 +3115,16 @@ func private %core__lib__abi__decode_field__g8463_77f0(v0.objref<@layout_7>) -> evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_bb8a v0 v6; - v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_61cd v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_888f v0 v15; - v17.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_040a v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_bb8a v0 v4; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_888f v0 v5; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_9088 v0 v6; + v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_a01e v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_b5a8 v0 v15; + v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_4632 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_9088 v0 v4; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_b5a8 v0 v5; return v17; } -func private %core__lib__abi__decode_field__g8463_7a80(v0.objref<@layout_7>) -> @layout_0 { +func private %core__lib__abi__decode_field__g8463_77f0(v0.objref<@layout_7>) -> @layout_0 { block0: jump block1; @@ -3077,9 +3132,9 @@ func private %core__lib__abi__decode_field__g8463_7a80(v0.objref<@layout_7>) -> br 0.i1 block2 block3; block2: - v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_a99d v0; - v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_6945 v0; - v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_8aa3 v0; + v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_318c v0; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_b221 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_b42f v0; (v6.i256, v7.i1) = uaddo v4 v3; br v7 block5 block6; @@ -3087,7 +3142,7 @@ func private %core__lib__abi__decode_field__g8463_7a80(v0.objref<@layout_7>) -> jump block4; block4: - v23.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_3454 v0; + v23.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_f378 v0; return v23; block5: @@ -3096,16 +3151,16 @@ func private %core__lib__abi__decode_field__g8463_7a80(v0.objref<@layout_7>) -> evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_d709 v0 v6; - v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_6945 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_ea2a v0 v15; - v17.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_3454 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_d709 v0 v4; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_ea2a v0 v5; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_9117 v0 v6; + v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_b221 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_3486 v0 v15; + v17.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_f378 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_9117 v0 v4; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_3486 v0 v5; return v17; } -func private %core__lib__abi__decode_field__g8463_7b8f(v0.objref<@layout_7>) -> @layout_0 { +func private %core__lib__abi__decode_field__g8463_7a80(v0.objref<@layout_7>) -> @layout_0 { block0: jump block1; @@ -3113,9 +3168,9 @@ func private %core__lib__abi__decode_field__g8463_7b8f(v0.objref<@layout_7>) -> br 0.i1 block2 block3; block2: - v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_8be4 v0; - v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_2c1b v0; - v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_1f4c v0; + v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_a067 v0; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_d310 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_294b v0; (v6.i256, v7.i1) = uaddo v4 v3; br v7 block5 block6; @@ -3123,7 +3178,7 @@ func private %core__lib__abi__decode_field__g8463_7b8f(v0.objref<@layout_7>) -> jump block4; block4: - v23.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_7f13 v0; + v23.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_2940 v0; return v23; block5: @@ -3132,12 +3187,12 @@ func private %core__lib__abi__decode_field__g8463_7b8f(v0.objref<@layout_7>) -> evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_d49b v0 v6; - v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_2c1b v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_d790 v0 v15; - v17.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_7f13 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_d49b v0 v4; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_d790 v0 v5; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_15e8 v0 v6; + v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_d310 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_ed4d v0 v15; + v17.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_2940 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_15e8 v0 v4; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_ed4d v0 v5; return v17; } @@ -3149,9 +3204,9 @@ func private %core__lib__abi__decode_field__g8463_85bf(v0.objref<@layout_7>) -> br 0.i1 block2 block3; block2: - v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_ed8c v0; - v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_c1be v0; - v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_a083 v0; + v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_81c0 v0; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_4d02 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_4a33 v0; (v6.i256, v7.i1) = uaddo v4 v3; br v7 block5 block6; @@ -3159,7 +3214,7 @@ func private %core__lib__abi__decode_field__g8463_85bf(v0.objref<@layout_7>) -> jump block4; block4: - v23.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_56c7 v0; + v23.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_731c v0; return v23; block5: @@ -3168,12 +3223,12 @@ func private %core__lib__abi__decode_field__g8463_85bf(v0.objref<@layout_7>) -> evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_e5ad v0 v6; - v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_c1be v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_355a v0 v15; - v17.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_56c7 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_e5ad v0 v4; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_355a v0 v5; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_7543 v0 v6; + v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_4d02 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_81cf v0 v15; + v17.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_731c v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_7543 v0 v4; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_81cf v0 v5; return v17; } @@ -3185,9 +3240,9 @@ func private %core__lib__abi__decode_field__g3854_87d1(v0.objref<@layout_7>) -> br 0.i1 block2 block3; block2: - v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_09f7 v0; - v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_bcf7 v0; - v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_e333 v0; + v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_2c65 v0; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_8cdd v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_95af v0; (v6.i256, v7.i1) = uaddo v4 v3; br v7 block5 block6; @@ -3195,7 +3250,7 @@ func private %core__lib__abi__decode_field__g3854_87d1(v0.objref<@layout_7>) -> jump block4; block4: - v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_78b8 v0; + v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_2f4a v0; return v23; block5: @@ -3204,12 +3259,12 @@ func private %core__lib__abi__decode_field__g3854_87d1(v0.objref<@layout_7>) -> evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_c7f2 v0 v6; - v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_bcf7 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_c04d v0 v15; - v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_78b8 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_c7f2 v0 v4; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_c04d v0 v5; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_edcf v0 v6; + v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_8cdd v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_cf9e v0 v15; + v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_2f4a v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_edcf v0 v4; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_cf9e v0 v5; return v17; } @@ -3221,9 +3276,9 @@ func private %core__lib__abi__decode_field__g3854_88df(v0.objref<@layout_7>) -> br 0.i1 block2 block3; block2: - v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_1898 v0; - v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_452e v0; - v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_f998 v0; + v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_89f1 v0; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_2c1e v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_a977 v0; (v6.i256, v7.i1) = uaddo v4 v3; br v7 block5 block6; @@ -3231,7 +3286,7 @@ func private %core__lib__abi__decode_field__g3854_88df(v0.objref<@layout_7>) -> jump block4; block4: - v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_630b v0; + v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_ccf0 v0; return v23; block5: @@ -3240,12 +3295,12 @@ func private %core__lib__abi__decode_field__g3854_88df(v0.objref<@layout_7>) -> evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_9157 v0 v6; - v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_452e v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_a128 v0 v15; - v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_630b v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_9157 v0 v4; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_a128 v0 v5; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_bd03 v0 v6; + v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_2c1e v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_d306 v0 v15; + v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_ccf0 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_bd03 v0 v4; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_d306 v0 v5; return v17; } @@ -3257,9 +3312,9 @@ func private %core__lib__abi__decode_field__g8463_933e(v0.objref<@layout_7>) -> br 0.i1 block2 block3; block2: - v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_bffc v0; - v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_7776 v0; - v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_fe61 v0; + v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_8702 v0; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_3041 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_fab0 v0; (v6.i256, v7.i1) = uaddo v4 v3; br v7 block5 block6; @@ -3267,7 +3322,7 @@ func private %core__lib__abi__decode_field__g8463_933e(v0.objref<@layout_7>) -> jump block4; block4: - v23.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_cec7 v0; + v23.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_8ff4 v0; return v23; block5: @@ -3276,12 +3331,12 @@ func private %core__lib__abi__decode_field__g8463_933e(v0.objref<@layout_7>) -> evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_12ee v0 v6; - v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_7776 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_1087 v0 v15; - v17.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_cec7 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_12ee v0 v4; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_1087 v0 v5; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_9ec2 v0 v6; + v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_3041 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_4253 v0 v15; + v17.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_8ff4 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_9ec2 v0 v4; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_4253 v0 v5; return v17; } @@ -3293,9 +3348,9 @@ func private %core__lib__abi__decode_field__g8463_9f0b(v0.objref<@layout_7>) -> br 0.i1 block2 block3; block2: - v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_e05e v0; - v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_112b v0; - v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_f05c v0; + v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_cd36 v0; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_6555 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_b5f6 v0; (v6.i256, v7.i1) = uaddo v4 v3; br v7 block5 block6; @@ -3303,7 +3358,7 @@ func private %core__lib__abi__decode_field__g8463_9f0b(v0.objref<@layout_7>) -> jump block4; block4: - v23.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_49f4 v0; + v23.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_eaf6 v0; return v23; block5: @@ -3312,12 +3367,12 @@ func private %core__lib__abi__decode_field__g8463_9f0b(v0.objref<@layout_7>) -> evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_4c89 v0 v6; - v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_112b v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_1acb v0 v15; - v17.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_49f4 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_4c89 v0 v4; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_1acb v0 v5; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_c90f v0 v6; + v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_6555 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_16b9 v0 v15; + v17.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_eaf6 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_c90f v0 v4; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_16b9 v0 v5; return v17; } @@ -3329,9 +3384,9 @@ func private %core__lib__abi__decode_field__g3854_a698(v0.objref<@layout_7>) -> br 0.i1 block2 block3; block2: - v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_75ad v0; - v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_7666 v0; - v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_a50d v0; + v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_818b v0; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_325f v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_0211 v0; (v6.i256, v7.i1) = uaddo v4 v3; br v7 block5 block6; @@ -3339,7 +3394,7 @@ func private %core__lib__abi__decode_field__g3854_a698(v0.objref<@layout_7>) -> jump block4; block4: - v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_e2bf v0; + v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_b933 v0; return v23; block5: @@ -3348,16 +3403,16 @@ func private %core__lib__abi__decode_field__g3854_a698(v0.objref<@layout_7>) -> evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_6e32 v0 v6; - v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_7666 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_aced v0 v15; - v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_e2bf v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_6e32 v0 v4; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_aced v0 v5; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_a559 v0 v6; + v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_325f v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_4954 v0 v15; + v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_b933 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_a559 v0 v4; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_4954 v0 v5; return v17; } -func private %core__lib__abi__decode_field__g3854_b587(v0.objref<@layout_7>) -> i256 { +func private %core__lib__abi__decode_field__g8463_e19a(v0.objref<@layout_7>) -> @layout_0 { block0: jump block1; @@ -3365,9 +3420,9 @@ func private %core__lib__abi__decode_field__g3854_b587(v0.objref<@layout_7>) -> br 0.i1 block2 block3; block2: - v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_8be4_0 v0; - v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_2c1b_0 v0; - v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_1f4c_0 v0; + v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_dccf v0; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_b72d v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_0476 v0; (v6.i256, v7.i1) = uaddo v4 v3; br v7 block5 block6; @@ -3375,7 +3430,7 @@ func private %core__lib__abi__decode_field__g3854_b587(v0.objref<@layout_7>) -> jump block4; block4: - v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_ada4 v0; + v23.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_b658 v0; return v23; block5: @@ -3384,12 +3439,12 @@ func private %core__lib__abi__decode_field__g3854_b587(v0.objref<@layout_7>) -> evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_d49b_0 v0 v6; - v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_2c1b_0 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_d790_0 v0 v15; - v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_ada4 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_d49b_0 v0 v4; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_d790_0 v0 v5; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_d8cd v0 v6; + v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_b72d v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_b917 v0 v15; + v17.@layout_0 = call %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_b658 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_d8cd v0 v4; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_b917 v0 v5; return v17; } @@ -3401,9 +3456,9 @@ func private %core__lib__abi__decode_field__g3854_ee70(v0.objref<@layout_7>) -> br 0.i1 block2 block3; block2: - v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_9743 v0; - v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_3735 v0; - v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_c508 v0; + v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_9fcb v0; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_a7f6 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_c123 v0; (v6.i256, v7.i1) = uaddo v4 v3; br v7 block5 block6; @@ -3411,7 +3466,7 @@ func private %core__lib__abi__decode_field__g3854_ee70(v0.objref<@layout_7>) -> jump block4; block4: - v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_0fba v0; + v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_53be v0; return v23; block5: @@ -3420,40 +3475,15 @@ func private %core__lib__abi__decode_field__g3854_ee70(v0.objref<@layout_7>) -> evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_5ab6 v0 v6; - v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_3735 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_8a2d v0 v15; - v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_0fba v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_5ab6 v0 v4; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_8a2d v0 v5; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_6b69 v0 v6; + v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_a7f6 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_7712 v0 v15; + v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_53be v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_6b69 v0 v4; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_7712 v0 v5; return v17; } -func private %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_040a(v0.objref<@layout_7>) -> @layout_0 { - block0: - jump block1; - - block1: - v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_697f v0; - v4.i256 = shr 160.i256 v2; - v6.i1 = eq v4 0.i256; - v7.i1 = is_zero v6; - br v7 block2 block3; - - block2: - evm_revert 0.i256 0.i256; - - block3: - jump block4; - - block4: - v8.objref<@layout_0> = obj.alloc @layout_0; - v10.objref = obj.proj v8 0.i256; - obj.store v10 v2; - v11.@layout_0 = obj.load v8; - return v11; -} - func private %impl_trait_Symbol__decode_payload__gf196(v0.objref<@layout_7>) { block0: jump block1; @@ -3462,74 +3492,15 @@ func private %impl_trait_Symbol__decode_payload__gf196(v0.objref<@layout_7>) { return; } -func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_0fba(v0.objref<@layout_7>) -> i256 { - block0: - jump block1; - - block1: - v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_8cb0 v0; - return v2; -} - -func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_1373(v0.objref<@layout_7>) -> i256 { +func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_0f30(v0.objref<@layout_7>) -> i256 { block0: jump block1; block1: - v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_da62 v0; + v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_c4c5 v0; return v2; } -func private %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_1e55(v0.objref<@layout_7>) -> @layout_0 { - block0: - jump block1; - - block1: - v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_3bfe v0; - v4.i256 = shr 160.i256 v2; - v6.i1 = eq v4 0.i256; - v7.i1 = is_zero v6; - br v7 block2 block3; - - block2: - evm_revert 0.i256 0.i256; - - block3: - jump block4; - - block4: - v8.objref<@layout_0> = obj.alloc @layout_0; - v10.objref = obj.proj v8 0.i256; - obj.store v10 v2; - v11.@layout_0 = obj.load v8; - return v11; -} - -func private %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_1f10(v0.objref<@layout_7>) -> @layout_0 { - block0: - jump block1; - - block1: - v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_87d4 v0; - v4.i256 = shr 160.i256 v2; - v6.i1 = eq v4 0.i256; - v7.i1 = is_zero v6; - br v7 block2 block3; - - block2: - evm_revert 0.i256 0.i256; - - block3: - jump block4; - - block4: - v8.objref<@layout_0> = obj.alloc @layout_0; - v10.objref = obj.proj v8 0.i256; - obj.store v10 v2; - v11.@layout_0 = obj.load v8; - return v11; -} - func private %impl_trait_TransferFrom__decode_payload__gf196(v0.objref<@layout_7>) -> @layout_8 { block0: jump block1; @@ -3571,12 +3542,12 @@ func private %impl_trait_DecreaseAllowance__decode_payload__gf196(v0.objref<@lay return v11; } -func private %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_3454(v0.objref<@layout_7>) -> @layout_0 { +func private %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_2940(v0.objref<@layout_7>) -> @layout_0 { block0: jump block1; block1: - v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_b3f4 v0; + v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_1aa7 v0; v4.i256 = shr 160.i256 v2; v6.i1 = eq v4 0.i256; v7.i1 = is_zero v6; @@ -3596,29 +3567,31 @@ func private %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g return v11; } -func private %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_49f4(v0.objref<@layout_7>) -> @layout_0 { +func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_2f4a(v0.objref<@layout_7>) -> i256 { block0: jump block1; block1: - v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_0d5e v0; - v4.i256 = shr 160.i256 v2; - v6.i1 = eq v4 0.i256; - v7.i1 = is_zero v6; - br v7 block2 block3; + v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_5e27 v0; + return v2; +} - block2: - evm_revert 0.i256 0.i256; +func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_3704(v0.objref<@layout_7>) -> i256 { + block0: + jump block1; - block3: - jump block4; + block1: + v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_ec4e v0; + return v2; +} - block4: - v8.objref<@layout_0> = obj.alloc @layout_0; - v10.objref = obj.proj v8 0.i256; - obj.store v10 v2; - v11.@layout_0 = obj.load v8; - return v11; +func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_4632(v0.objref<@layout_7>) -> i256 { + block0: + jump block1; + + block1: + v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_f7e1 v0; + return v2; } func private %impl_trait_Transfer__decode_payload__gf196(v0.objref<@layout_7>) -> @layout_10 { @@ -3639,6 +3612,15 @@ func private %impl_trait_Transfer__decode_payload__gf196(v0.objref<@layout_7>) - return v11; } +func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_53be(v0.objref<@layout_7>) -> i256 { + block0: + jump block1; + + block1: + v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_a248 v0; + return v2; +} + func private %impl_trait_BurnFrom__decode_payload__gf196(v0.objref<@layout_7>) -> @layout_11 { block0: jump block1; @@ -3657,31 +3639,6 @@ func private %impl_trait_BurnFrom__decode_payload__gf196(v0.objref<@layout_7>) - return v11; } -func private %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_56c7(v0.objref<@layout_7>) -> @layout_0 { - block0: - jump block1; - - block1: - v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_7ba8 v0; - v4.i256 = shr 160.i256 v2; - v6.i1 = eq v4 0.i256; - v7.i1 = is_zero v6; - br v7 block2 block3; - - block2: - evm_revert 0.i256 0.i256; - - block3: - jump block4; - - block4: - v8.objref<@layout_0> = obj.alloc @layout_0; - v10.objref = obj.proj v8 0.i256; - obj.store v10 v2; - v11.@layout_0 = obj.load v8; - return v11; -} - func private %impl_trait_Allowance__decode_payload__gf196(v0.objref<@layout_7>) -> @layout_12 { block0: jump block1; @@ -3702,49 +3659,6 @@ func private %impl_trait_Allowance__decode_payload__gf196(v0.objref<@layout_7>) return v13; } -func private %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_5c45(v0.objref<@layout_7>) -> @layout_0 { - block0: - jump block1; - - block1: - v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_6776 v0; - v4.i256 = shr 160.i256 v2; - v6.i1 = eq v4 0.i256; - v7.i1 = is_zero v6; - br v7 block2 block3; - - block2: - evm_revert 0.i256 0.i256; - - block3: - jump block4; - - block4: - v8.objref<@layout_0> = obj.alloc @layout_0; - v10.objref = obj.proj v8 0.i256; - obj.store v10 v2; - v11.@layout_0 = obj.load v8; - return v11; -} - -func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_5c7d(v0.objref<@layout_7>) -> i256 { - block0: - jump block1; - - block1: - v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_50b8 v0; - return v2; -} - -func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_630b(v0.objref<@layout_7>) -> i256 { - block0: - jump block1; - - block1: - v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_a048 v0; - return v2; -} - func private %impl_trait_Mint__decode_payload__gf196(v0.objref<@layout_7>) -> @layout_13 { block0: jump block1; @@ -3778,13 +3692,29 @@ func private %impl_trait_BalanceOf__decode_payload__gf196(v0.objref<@layout_7>) return v8; } -func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_78b8(v0.objref<@layout_7>) -> i256 { +func private %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_731c(v0.objref<@layout_7>) -> @layout_0 { block0: jump block1; block1: - v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_7676 v0; - return v2; + v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_a234 v0; + v4.i256 = shr 160.i256 v2; + v6.i1 = eq v4 0.i256; + v7.i1 = is_zero v6; + br v7 block2 block3; + + block2: + evm_revert 0.i256 0.i256; + + block3: + jump block4; + + block4: + v8.objref<@layout_0> = obj.alloc @layout_0; + v10.objref = obj.proj v8 0.i256; + obj.store v10 v2; + v11.@layout_0 = obj.load v8; + return v11; } func private %impl_trait_TotalSupply__decode_payload__gf196(v0.objref<@layout_7>) { @@ -3795,12 +3725,21 @@ func private %impl_trait_TotalSupply__decode_payload__gf196(v0.objref<@layout_7> return; } -func private %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_7f13(v0.objref<@layout_7>) -> @layout_0 { +func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_7dfa(v0.objref<@layout_7>) -> i256 { + block0: + jump block1; + + block1: + v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_c69e v0; + return v2; +} + +func private %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_815e(v0.objref<@layout_7>) -> @layout_0 { block0: jump block1; block1: - v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_83b2 v0; + v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_263c v0; v4.i256 = shr 160.i256 v2; v6.i1 = eq v4 0.i256; v7.i1 = is_zero v6; @@ -3820,22 +3759,13 @@ func private %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g return v11; } -func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_8ca5(v0.objref<@layout_7>) -> i256 { - block0: - jump block1; - - block1: - v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_9212 v0; - return v2; -} - func private %decode_payload__gf566(v0.objref<@layout_7>) -> @layout_15 { block0: jump block1; block1: - v2.i256 = call %core__lib__abi__decode_field__g3854_b587 v0; - v3.@layout_0 = call %core__lib__abi__decode_field__g8463_7b8f v0; + v2.i256 = call %core__lib__abi__decode_field__g3854_5b15 v0; + v3.@layout_0 = call %core__lib__abi__decode_field__g8463_e19a v0; v4.objref<@layout_15> = obj.alloc @layout_15; v6.objref = obj.proj v4 0.i256; obj.store v6 v2; @@ -3847,13 +3777,29 @@ func private %decode_payload__gf566(v0.objref<@layout_7>) -> @layout_15 { return v11; } -func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_8eef(v0.objref<@layout_7>) -> i256 { +func private %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_8ff4(v0.objref<@layout_7>) -> @layout_0 { block0: jump block1; block1: - v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_c0d0 v0; - return v2; + v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_e104 v0; + v4.i256 = shr 160.i256 v2; + v6.i1 = eq v4 0.i256; + v7.i1 = is_zero v6; + br v7 block2 block3; + + block2: + evm_revert 0.i256 0.i256; + + block3: + jump block4; + + block4: + v8.objref<@layout_0> = obj.alloc @layout_0; + v10.objref = obj.proj v8 0.i256; + obj.store v10 v2; + v11.@layout_0 = obj.load v8; + return v11; } func private %impl_trait_IncreaseAllowance__decode_payload__gf196(v0.objref<@layout_7>) -> @layout_16 { @@ -3874,12 +3820,62 @@ func private %impl_trait_IncreaseAllowance__decode_payload__gf196(v0.objref<@lay return v11; } -func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_ada4(v0.objref<@layout_7>) -> i256 { +func private %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_ab3a(v0.objref<@layout_7>) -> @layout_0 { + block0: + jump block1; + + block1: + v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_e429 v0; + v4.i256 = shr 160.i256 v2; + v6.i1 = eq v4 0.i256; + v7.i1 = is_zero v6; + br v7 block2 block3; + + block2: + evm_revert 0.i256 0.i256; + + block3: + jump block4; + + block4: + v8.objref<@layout_0> = obj.alloc @layout_0; + v10.objref = obj.proj v8 0.i256; + obj.store v10 v2; + v11.@layout_0 = obj.load v8; + return v11; +} + +func private %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_b658(v0.objref<@layout_7>) -> @layout_0 { + block0: + jump block1; + + block1: + v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_6bac v0; + v4.i256 = shr 160.i256 v2; + v6.i1 = eq v4 0.i256; + v7.i1 = is_zero v6; + br v7 block2 block3; + + block2: + evm_revert 0.i256 0.i256; + + block3: + jump block4; + + block4: + v8.objref<@layout_0> = obj.alloc @layout_0; + v10.objref = obj.proj v8 0.i256; + obj.store v10 v2; + v11.@layout_0 = obj.load v8; + return v11; +} + +func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_b933(v0.objref<@layout_7>) -> i256 { block0: jump block1; block1: - v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_44f9 v0; + v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_daa2 v0; return v2; } @@ -3909,12 +3905,37 @@ func private %impl_trait_Approve__decode_payload__gf196(v0.objref<@layout_7>) -> return v11; } -func private %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_cec7(v0.objref<@layout_7>) -> @layout_0 { +func private %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_c498(v0.objref<@layout_7>) -> @layout_0 { + block0: + jump block1; + + block1: + v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_6967 v0; + v4.i256 = shr 160.i256 v2; + v6.i1 = eq v4 0.i256; + v7.i1 = is_zero v6; + br v7 block2 block3; + + block2: + evm_revert 0.i256 0.i256; + + block3: + jump block4; + + block4: + v8.objref<@layout_0> = obj.alloc @layout_0; + v10.objref = obj.proj v8 0.i256; + obj.store v10 v2; + v11.@layout_0 = obj.load v8; + return v11; +} + +func private %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_ccef(v0.objref<@layout_7>) -> @layout_0 { block0: jump block1; block1: - v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_a40d v0; + v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_6a1a v0; v4.i256 = shr 160.i256 v2; v6.i1 = eq v4 0.i256; v7.i1 = is_zero v6; @@ -3934,21 +3955,55 @@ func private %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g return v11; } -func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_e2bf(v0.objref<@layout_7>) -> i256 { +func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_ccf0(v0.objref<@layout_7>) -> i256 { block0: jump block1; block1: - v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_e61f v0; + v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_dbb7 v0; return v2; } -func private %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_e71d(v0.objref<@layout_7>) -> @layout_0 { +func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_d3f1(v0.objref<@layout_7>) -> i256 { + block0: + jump block1; + + block1: + v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_4a63 v0; + return v2; +} + +func private %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_eaf6(v0.objref<@layout_7>) -> @layout_0 { + block0: + jump block1; + + block1: + v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_8433 v0; + v4.i256 = shr 160.i256 v2; + v6.i1 = eq v4 0.i256; + v7.i1 = is_zero v6; + br v7 block2 block3; + + block2: + evm_revert 0.i256 0.i256; + + block3: + jump block4; + + block4: + v8.objref<@layout_0> = obj.alloc @layout_0; + v10.objref = obj.proj v8 0.i256; + obj.store v10 v2; + v11.@layout_0 = obj.load v8; + return v11; +} + +func private %std__lib__evm__effects__impl_trait_Address_9c1b__decode_payload__g407e_f378(v0.objref<@layout_7>) -> @layout_0 { block0: jump block1; block1: - v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_7304 v0; + v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_9615 v0; v4.i256 = shr 160.i256 v2; v6.i1 = eq v4 0.i256; v7.i1 = is_zero v6; @@ -3998,7 +4053,7 @@ func private %decoder_new(v0.@layout_5) -> @layout_7 { return v2; } -func private %core__lib__abi__dynamic_payload_size__ge513_7ef0(v0.i256) -> i256 { +func private %core__lib__abi__dynamic_payload_size__ge513_8a42(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -4009,7 +4064,7 @@ func private %core__lib__abi__dynamic_payload_size__ge513_7ef0(v0.i256) -> i256 block2: v3.i256 = mload v1 i256; - v4.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_a6ac v3; + v4.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_737b v3; return v4; block3: @@ -4019,7 +4074,7 @@ func private %core__lib__abi__dynamic_payload_size__ge513_7ef0(v0.i256) -> i256 return 0.i256; } -func private %core__lib__abi__dynamic_payload_size__ge513_7ef0_0(v0.i256) -> i256 { +func private %core__lib__abi__dynamic_payload_size__ge513_8a42_0(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -4030,7 +4085,7 @@ func private %core__lib__abi__dynamic_payload_size__ge513_7ef0_0(v0.i256) -> i25 block2: v3.i256 = mload v1 i256; - v4.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_a6ac_0 v3; + v4.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_737b_0 v3; return v4; block3: @@ -4040,7 +4095,7 @@ func private %core__lib__abi__dynamic_payload_size__ge513_7ef0_0(v0.i256) -> i25 return 0.i256; } -func private %core__lib__abi__dynamic_payload_size__ge513_7ef0_1(v0.i256) -> i256 { +func private %core__lib__abi__dynamic_payload_size__ge513_8a42_1(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -4051,7 +4106,7 @@ func private %core__lib__abi__dynamic_payload_size__ge513_7ef0_1(v0.i256) -> i25 block2: v3.i256 = mload v1 i256; - v4.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_a6ac_1 v3; + v4.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_737b_1 v3; return v4; block3: @@ -4165,127 +4220,53 @@ func private %emit__g4c3d(v0.objref<@layout_2>, v1.@layout_20) { return; } -func private %std__lib__evm__panic__impl_trait_Panic_2bdd__encode__g9c6f_02eb(v0.@layout_3, v1.objref<@layout_4>) { +func private %impl_trait_bool__encode__g426c(v0.i1, v1.objref<@layout_4>) { block0: - v2.objref<@layout_3> = obj.alloc @layout_3; - v3.*i256 = alloca i256; - v5.objref = obj.proj v2 0.i256; - v6.i256 = extract_value v0 0.i256; - obj.store v5 v6; jump block1; block1: - v8.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_7aef v1; - (v10.i256, v11.i1) = uaddo v8 32.i256; - br v11 block2 block3; + br v0 block2 block3; block2: - mstore 0.i256 35408467139433450592217433187231851964531694900788300625387963629091585785856.i256 i256; - mstore 4.i256 17.i256 i256; - evm_revert 0.i256 36.i256; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_ac29 v1 1.i256; + jump block4; block3: - mstore v3 v10 i256; - v16.objref = obj.proj v2 0.i256; - v17.i256 = obj.load v16; - v18.i256 = ptr_to_int v3 i256; - call %core__lib__abi__encode_field__g2e64_1064 v17 v1 v18; - return; -} - -func private %std__lib__evm__panic__impl_trait_Panic_2bdd__encode__g9c6f_02eb_0(v0.@layout_3, v1.objref<@layout_4>) { - block0: - v2.objref<@layout_3> = obj.alloc @layout_3; - v3.*i256 = alloca i256; - v5.objref = obj.proj v2 0.i256; - v6.i256 = extract_value v0 0.i256; - obj.store v5 v6; - jump block1; - - block1: - v8.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_7aef_0 v1; - (v10.i256, v11.i1) = uaddo v8 32.i256; - br v11 block2 block3; - - block2: - mstore 0.i256 35408467139433450592217433187231851964531694900788300625387963629091585785856.i256 i256; - mstore 4.i256 17.i256 i256; - evm_revert 0.i256 36.i256; - - block3: - mstore v3 v10 i256; - v16.objref = obj.proj v2 0.i256; - v17.i256 = obj.load v16; - v18.i256 = ptr_to_int v3 i256; - call %core__lib__abi__encode_field__g2e64_1064_0 v17 v1 v18; - return; -} - -func private %std__lib__evm__panic__impl_trait_Panic_2bdd__encode__g9c6f_02eb_1(v0.@layout_3, v1.objref<@layout_4>) { - block0: - v2.objref<@layout_3> = obj.alloc @layout_3; - v3.*i256 = alloca i256; - v5.objref = obj.proj v2 0.i256; - v6.i256 = extract_value v0 0.i256; - obj.store v5 v6; - jump block1; - - block1: - v8.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_7aef_1 v1; - (v10.i256, v11.i1) = uaddo v8 32.i256; - br v11 block2 block3; - - block2: - mstore 0.i256 35408467139433450592217433187231851964531694900788300625387963629091585785856.i256 i256; - mstore 4.i256 17.i256 i256; - evm_revert 0.i256 36.i256; - - block3: - mstore v3 v10 i256; - v16.objref = obj.proj v2 0.i256; - v17.i256 = obj.load v16; - v18.i256 = ptr_to_int v3 i256; - call %core__lib__abi__encode_field__g2e64_1064_1 v17 v1 v18; - return; -} - -func private %core__lib__abi__impl_trait_u256_d99e__encode__g426c_2015(v0.i256, v1.objref<@layout_4>) { - block0: - jump block1; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_ac29 v1 0.i256; + jump block4; - block1: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_eb98 v1 v0; + block4: return; } -func private %core__lib__abi__impl_trait_u256_d99e__encode__g426c_2910(v0.i256, v1.objref<@layout_4>) { +func private %core__lib__abi__impl_trait_u256_d99e__encode__g426c_4098(v0.i256, v1.objref<@layout_4>) { block0: jump block1; block1: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_8eda v1 v0; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_0c14 v1 v0; return; } -func private %encode__g3cd9(v0.i256, v1.objref<@layout_4>) { +func private %encode__gbe21(v0.i256, v1.objref<@layout_4>) { block0: jump block1; block1: - v3.i256 = call %core__lib__num__impl_trait_String_8f88__to_word__g3eb7_e974 v0; - v4.i256 = call %core__lib__abi__packed_string_len_c13a v3; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_0617 v1 v4; + v3.i256 = call %core__lib__num__impl_trait_String_8f88__to_word__gc7cf_fa45 v0; + v4.i256 = call %core__lib__abi__packed_string_len_82e7 v3; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_4ddb v1 v4; v8.i1 = eq v4 0.i256; v9.i1 = is_zero v8; br v9 block2 block3; block2: - v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_8751 v1; + v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_0e14 v1; v13.i256 = add v11 32.i256; v15.i256 = sub 32.i256 v4; v17.i256 = mul v15 8.i256; v19.i256 = shl v17 v3; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_at_e460 v1 v13 v19; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word_at__gf13e_02b7 v1 v13 v19; jump block4; block3: @@ -4295,25 +4276,25 @@ func private %encode__g3cd9(v0.i256, v1.objref<@layout_4>) { return; } -func private %encode__gbe21(v0.i256, v1.objref<@layout_4>) { +func private %encode__g3cd9(v0.i256, v1.objref<@layout_4>) { block0: jump block1; block1: - v3.i256 = call %core__lib__num__impl_trait_String_8f88__to_word__gc7cf_810c v0; - v4.i256 = call %core__lib__abi__packed_string_len_29ef v3; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_7a95 v1 v4; + v3.i256 = call %core__lib__num__impl_trait_String_8f88__to_word__g3eb7_d36e v0; + v4.i256 = call %core__lib__abi__packed_string_len_e6bf v3; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_058e v1 v4; v8.i1 = eq v4 0.i256; v9.i1 = is_zero v8; br v9 block2 block3; block2: - v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_bb09 v1; + v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_e7dd v1; v13.i256 = add v11 32.i256; v15.i256 = sub 32.i256 v4; v17.i256 = mul v15 8.i256; v19.i256 = shl v17 v3; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_at_7ecd v1 v13 v19; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word_at__gf13e_8899 v1 v13 v19; jump block4; block3: @@ -4323,112 +4304,89 @@ func private %encode__gbe21(v0.i256, v1.objref<@layout_4>) { return; } -func private %std__lib__evm__effects__encode_abi_payload__geb2e_59d4(v0.@layout_3) -> @layout_21 { +func private %core__lib__abi__impl_trait_u256_d99e__encode__g426c_86ce(v0.i256, v1.objref<@layout_4>) { + block0: + jump block1; + + block1: + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_d941 v1 v0; + return; +} + +func private %std__lib__evm__effects__encode_abi_payload__ge513_5dc2(v0.i256) -> @layout_21 { block0: jump block1; block1: - v2.@layout_21 = call %core__lib__abi__encode_alloc__g994a_d25b v0; + v2.@layout_21 = call %std__lib__evm__effects__encode_abi_payload_abi__gac80_b9d5 v0; return v2; } -func private %std__lib__evm__effects__encode_abi_payload__geb2e_59d4_0(v0.@layout_3) -> @layout_21 { +func private %std__lib__evm__effects__encode_abi_payload_abi__gac80_11a9(v0.i256) -> @layout_21 { block0: jump block1; block1: - v2.@layout_21 = call %core__lib__abi__encode_alloc__g994a_d25b_0 v0; + v2.@layout_21 = call %core__lib__abi__encode_alloc__gac80_5d8f v0; return v2; } -func private %std__lib__evm__effects__encode_abi_payload__geb2e_59d4_1(v0.@layout_3) -> @layout_21 { +func private %std__lib__evm__effects__encode_abi_payload_abi__gac80_b9d5(v0.i256) -> @layout_21 { block0: jump block1; block1: - v2.@layout_21 = call %core__lib__abi__encode_alloc__g994a_d25b_1 v0; + v2.@layout_21 = call %core__lib__abi__encode_alloc__gac80_719b v0; return v2; } -func private %std__lib__evm__effects__encode_abi_payload__ge513_5dc2(v0.i256) -> @layout_21 { +func private %std__lib__evm__effects__encode_abi_payload_abi__g994a_bdda(v0.@layout_3) -> @layout_21 { block0: jump block1; block1: - v2.@layout_21 = call %core__lib__abi__encode_alloc__gac80_c438 v0; + v2.@layout_21 = call %core__lib__abi__encode_alloc__g994a_1983 v0; return v2; } -func private %std__lib__evm__effects__encode_abi_payload__ge513_bb73(v0.i256) -> @layout_21 { +func private %std__lib__evm__effects__encode_abi_payload_abi__g994a_bdda_0(v0.@layout_3) -> @layout_21 { block0: jump block1; block1: - v2.@layout_21 = call %core__lib__abi__encode_alloc__gac80_492c v0; + v2.@layout_21 = call %core__lib__abi__encode_alloc__g994a_1983_0 v0; return v2; } -func private %impl_trait_u8__encode__g426c(v0.i8, v1.objref<@layout_4>) { +func private %std__lib__evm__effects__encode_abi_payload_abi__g994a_bdda_1(v0.@layout_3) -> @layout_21 { block0: jump block1; block1: - v3.i256 = zext v0 i256; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_124f v1 v3; - return; + v2.@layout_21 = call %core__lib__abi__encode_alloc__g994a_1983_1 v0; + return v2; } -func private %core__lib__abi__encode_alloc__gac80_492c(v0.i256) -> @layout_21 { +func private %std__lib__evm__effects__encode_abi_payload__ge513_bb73(v0.i256) -> @layout_21 { block0: jump block1; block1: - v2.i256 = call %core__lib__abi__abi_payload_size__ge513_b9e3 v0; - v3.@layout_4 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_a4f7 v2; - v4.objref<@layout_4> = obj.alloc @layout_4; - v6.objref = obj.proj v4 0.i256; - v7.i256 = extract_value v3 0.i256; - obj.store v6 v7; - v9.objref = obj.proj v4 1.i256; - v10.i256 = extract_value v3 1.i256; - obj.store v9 v10; - v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_dd69 v4; - call %core__lib__abi__impl_trait_u256_d99e__encode__g426c_2015 v0 v4; - v13.objref<@layout_21> = obj.alloc @layout_21; - v14.objref = obj.proj v13 0.i256; - obj.store v14 v11; - v15.objref = obj.proj v13 1.i256; - obj.store v15 v2; - v16.@layout_21 = obj.load v13; - return v16; + v2.@layout_21 = call %std__lib__evm__effects__encode_abi_payload_abi__gac80_11a9 v0; + return v2; } -func private %core__lib__abi__encode_alloc__gac80_c438(v0.i256) -> @layout_21 { +func private %impl_trait_u8__encode__g426c(v0.i8, v1.objref<@layout_4>) { block0: jump block1; block1: - v2.i256 = call %core__lib__abi__abi_payload_size__ge513_cdf0 v0; - v3.@layout_4 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_9a7a v2; - v4.objref<@layout_4> = obj.alloc @layout_4; - v6.objref = obj.proj v4 0.i256; - v7.i256 = extract_value v3 0.i256; - obj.store v6 v7; - v9.objref = obj.proj v4 1.i256; - v10.i256 = extract_value v3 1.i256; - obj.store v9 v10; - v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_009f v4; - call %core__lib__abi__impl_trait_u256_d99e__encode__g426c_c169 v0 v4; - v13.objref<@layout_21> = obj.alloc @layout_21; - v14.objref = obj.proj v13 0.i256; - obj.store v14 v11; - v15.objref = obj.proj v13 1.i256; - obj.store v15 v2; - v16.@layout_21 = obj.load v13; - return v16; + v3.i256 = zext v0 i256; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_569b v1 v3; + return; } -func private %core__lib__abi__encode_alloc__g994a_d25b(v0.@layout_3) -> @layout_21 { +func private %core__lib__abi__encode_alloc__g994a_1983(v0.@layout_3) -> @layout_21 { block0: jump block1; @@ -4437,8 +4395,8 @@ func private %core__lib__abi__encode_alloc__g994a_d25b(v0.@layout_3) -> @layout_ v4.objref = obj.proj v2 0.i256; v5.i256 = extract_value v0 0.i256; obj.store v4 v5; - v6.i256 = call %core__lib__abi__abi_payload_size__geb2e_fde6 v2; - v7.@layout_4 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_8043 v6; + v6.i256 = call %core__lib__abi__abi_payload_size__geb2e_1453 v2; + v7.@layout_4 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_eace v6; v8.objref<@layout_4> = obj.alloc @layout_4; v9.objref = obj.proj v8 0.i256; v10.i256 = extract_value v7 0.i256; @@ -4446,8 +4404,8 @@ func private %core__lib__abi__encode_alloc__g994a_d25b(v0.@layout_3) -> @layout_ v12.objref = obj.proj v8 1.i256; v13.i256 = extract_value v7 1.i256; obj.store v12 v13; - v14.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_deb4 v8; - call %std__lib__evm__panic__impl_trait_Panic_2bdd__encode__g9c6f_02eb v0 v8; + v14.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_162e v8; + call %std__lib__evm__panic__impl_trait_Panic_2bdd__encode__g9c6f_b2fa v0 v8; v16.objref<@layout_21> = obj.alloc @layout_21; v17.objref = obj.proj v16 0.i256; obj.store v17 v14; @@ -4457,7 +4415,7 @@ func private %core__lib__abi__encode_alloc__g994a_d25b(v0.@layout_3) -> @layout_ return v19; } -func private %core__lib__abi__encode_alloc__g994a_d25b_0(v0.@layout_3) -> @layout_21 { +func private %core__lib__abi__encode_alloc__g994a_1983_0(v0.@layout_3) -> @layout_21 { block0: jump block1; @@ -4466,8 +4424,8 @@ func private %core__lib__abi__encode_alloc__g994a_d25b_0(v0.@layout_3) -> @layou v4.objref = obj.proj v2 0.i256; v5.i256 = extract_value v0 0.i256; obj.store v4 v5; - v6.i256 = call %core__lib__abi__abi_payload_size__geb2e_fde6_0 v2; - v7.@layout_4 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_8043_0 v6; + v6.i256 = call %core__lib__abi__abi_payload_size__geb2e_1453_0 v2; + v7.@layout_4 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_eace_0 v6; v8.objref<@layout_4> = obj.alloc @layout_4; v9.objref = obj.proj v8 0.i256; v10.i256 = extract_value v7 0.i256; @@ -4475,8 +4433,8 @@ func private %core__lib__abi__encode_alloc__g994a_d25b_0(v0.@layout_3) -> @layou v12.objref = obj.proj v8 1.i256; v13.i256 = extract_value v7 1.i256; obj.store v12 v13; - v14.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_deb4_0 v8; - call %std__lib__evm__panic__impl_trait_Panic_2bdd__encode__g9c6f_02eb_0 v0 v8; + v14.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_162e_0 v8; + call %std__lib__evm__panic__impl_trait_Panic_2bdd__encode__g9c6f_b2fa_0 v0 v8; v16.objref<@layout_21> = obj.alloc @layout_21; v17.objref = obj.proj v16 0.i256; obj.store v17 v14; @@ -4486,7 +4444,7 @@ func private %core__lib__abi__encode_alloc__g994a_d25b_0(v0.@layout_3) -> @layou return v19; } -func private %core__lib__abi__encode_alloc__g994a_d25b_1(v0.@layout_3) -> @layout_21 { +func private %core__lib__abi__encode_alloc__g994a_1983_1(v0.@layout_3) -> @layout_21 { block0: jump block1; @@ -4495,8 +4453,8 @@ func private %core__lib__abi__encode_alloc__g994a_d25b_1(v0.@layout_3) -> @layou v4.objref = obj.proj v2 0.i256; v5.i256 = extract_value v0 0.i256; obj.store v4 v5; - v6.i256 = call %core__lib__abi__abi_payload_size__geb2e_fde6_1 v2; - v7.@layout_4 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_8043_1 v6; + v6.i256 = call %core__lib__abi__abi_payload_size__geb2e_1453_1 v2; + v7.@layout_4 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_eace_1 v6; v8.objref<@layout_4> = obj.alloc @layout_4; v9.objref = obj.proj v8 0.i256; v10.i256 = extract_value v7 0.i256; @@ -4504,8 +4462,8 @@ func private %core__lib__abi__encode_alloc__g994a_d25b_1(v0.@layout_3) -> @layou v12.objref = obj.proj v8 1.i256; v13.i256 = extract_value v7 1.i256; obj.store v12 v13; - v14.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_deb4_1 v8; - call %std__lib__evm__panic__impl_trait_Panic_2bdd__encode__g9c6f_02eb_1 v0 v8; + v14.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_162e_1 v8; + call %std__lib__evm__panic__impl_trait_Panic_2bdd__encode__g9c6f_b2fa_1 v0 v8; v16.objref<@layout_21> = obj.alloc @layout_21; v17.objref = obj.proj v16 0.i256; obj.store v17 v14; @@ -4515,56 +4473,125 @@ func private %core__lib__abi__encode_alloc__g994a_d25b_1(v0.@layout_3) -> @layou return v19; } -func private %impl_trait_bool__encode__g426c(v0.i1, v1.objref<@layout_4>) { +func private %core__lib__abi__encode_alloc__gac80_5d8f(v0.i256) -> @layout_21 { block0: jump block1; block1: - br v0 block2 block3; + v2.i256 = call %core__lib__abi__abi_payload_size__ge513_5105 v0; + v3.@layout_4 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_bce5 v2; + v4.objref<@layout_4> = obj.alloc @layout_4; + v6.objref = obj.proj v4 0.i256; + v7.i256 = extract_value v3 0.i256; + obj.store v6 v7; + v9.objref = obj.proj v4 1.i256; + v10.i256 = extract_value v3 1.i256; + obj.store v9 v10; + v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_3754 v4; + call %core__lib__abi__impl_trait_u256_d99e__encode__g426c_86ce v0 v4; + v13.objref<@layout_21> = obj.alloc @layout_21; + v14.objref = obj.proj v13 0.i256; + obj.store v14 v11; + v15.objref = obj.proj v13 1.i256; + obj.store v15 v2; + v16.@layout_21 = obj.load v13; + return v16; +} + +func private %core__lib__abi__encode_alloc__gac80_719b(v0.i256) -> @layout_21 { + block0: + jump block1; + + block1: + v2.i256 = call %core__lib__abi__abi_payload_size__ge513_f355 v0; + v3.@layout_4 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_cb65 v2; + v4.objref<@layout_4> = obj.alloc @layout_4; + v6.objref = obj.proj v4 0.i256; + v7.i256 = extract_value v3 0.i256; + obj.store v6 v7; + v9.objref = obj.proj v4 1.i256; + v10.i256 = extract_value v3 1.i256; + obj.store v9 v10; + v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_bad5 v4; + call %core__lib__abi__impl_trait_u256_d99e__encode__g426c_f05a v0 v4; + v13.objref<@layout_21> = obj.alloc @layout_21; + v14.objref = obj.proj v13 0.i256; + obj.store v14 v11; + v15.objref = obj.proj v13 1.i256; + obj.store v15 v2; + v16.@layout_21 = obj.load v13; + return v16; +} + +func private %std__lib__evm__panic__impl_trait_Panic_2bdd__encode__g9c6f_b2fa(v0.@layout_3, v1.objref<@layout_4>) { + block0: + v2.objref<@layout_3> = obj.alloc @layout_3; + v3.*i256 = alloca i256; + v5.objref = obj.proj v2 0.i256; + v6.i256 = extract_value v0 0.i256; + obj.store v5 v6; + jump block1; + + block1: + v8.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_bfc2 v1; + (v10.i256, v11.i1) = uaddo v8 32.i256; + br v11 block2 block3; block2: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_d813 v1 1.i256; - jump block4; + mstore 0.i256 35408467139433450592217433187231851964531694900788300625387963629091585785856.i256 i256; + mstore 4.i256 17.i256 i256; + evm_revert 0.i256 36.i256; block3: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_d813 v1 0.i256; - jump block4; - - block4: + mstore v3 v10 i256; + v16.objref = obj.proj v2 0.i256; + v17.i256 = obj.load v16; + v18.i256 = ptr_to_int v3 i256; + call %core__lib__abi__encode_field__g2e64_63bc v17 v1 v18; return; } -func private %core__lib__abi__impl_trait_u256_d99e__encode__g426c_c169(v0.i256, v1.objref<@layout_4>) { +func private %std__lib__evm__panic__impl_trait_Panic_2bdd__encode__g9c6f_b2fa_0(v0.@layout_3, v1.objref<@layout_4>) { block0: + v2.objref<@layout_3> = obj.alloc @layout_3; + v3.*i256 = alloca i256; + v5.objref = obj.proj v2 0.i256; + v6.i256 = extract_value v0 0.i256; + obj.store v5 v6; jump block1; block1: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_8727 v1 v0; + v8.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_bfc2_0 v1; + (v10.i256, v11.i1) = uaddo v8 32.i256; + br v11 block2 block3; + + block2: + mstore 0.i256 35408467139433450592217433187231851964531694900788300625387963629091585785856.i256 i256; + mstore 4.i256 17.i256 i256; + evm_revert 0.i256 36.i256; + + block3: + mstore v3 v10 i256; + v16.objref = obj.proj v2 0.i256; + v17.i256 = obj.load v16; + v18.i256 = ptr_to_int v3 i256; + call %core__lib__abi__encode_field__g2e64_63bc_0 v17 v1 v18; return; } -func private %std__lib__evm__effects__encode_calldata__geb2e_13c2(v0.i32, v1.@layout_3) -> @layout_21 { +func private %std__lib__evm__panic__impl_trait_Panic_2bdd__encode__g9c6f_b2fa_1(v0.@layout_3, v1.objref<@layout_4>) { block0: - v2.*i32 = alloca i32; - mstore v2 v0 i32; + v2.objref<@layout_3> = obj.alloc @layout_3; + v3.*i256 = alloca i256; + v5.objref = obj.proj v2 0.i256; + v6.i256 = extract_value v0 0.i256; + obj.store v5 v6; jump block1; block1: - v4.i32 = mload v2 i32; - v5.i256 = zext v4 i256; - v7.i256 = shl 224.i256 v5; - v9.@layout_21 = call %std__lib__evm__effects__encode_abi_payload__geb2e_59d4 v1; - v10.objref<@layout_21> = obj.alloc @layout_21; - v12.objref = obj.proj v10 0.i256; - v13.i256 = extract_value v9 0.i256; - obj.store v12 v13; - v15.objref = obj.proj v10 1.i256; - v16.i256 = extract_value v9 1.i256; - obj.store v15 v16; - v17.objref = obj.proj v10 1.i256; - v18.i256 = obj.load v17; - (v19.i256, v20.i1) = uaddo 4.i256 v18; - br v20 block2 block3; + v8.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_bfc2_1 v1; + (v10.i256, v11.i1) = uaddo v8 32.i256; + br v11 block2 block3; block2: mstore 0.i256 35408467139433450592217433187231851964531694900788300625387963629091585785856.i256 i256; @@ -4572,31 +4599,24 @@ func private %std__lib__evm__effects__encode_calldata__geb2e_13c2(v0.i32, v1.@la evm_revert 0.i256 36.i256; block3: - v24.*i8 = evm_malloc v19; - v25.i256 = ptr_to_int v24 i256; - mstore v25 v7 i256; - (v29.i256, v30.i1) = uaddo v25 4.i256; - br v30 block2 block4; + mstore v3 v10 i256; + v16.objref = obj.proj v2 0.i256; + v17.i256 = obj.load v16; + v18.i256 = ptr_to_int v3 i256; + call %core__lib__abi__encode_field__g2e64_63bc_1 v17 v1 v18; + return; +} - block4: - v32.objref = obj.proj v10 0.i256; - v33.i256 = obj.load v32; - v34.objref = obj.proj v10 1.i256; - v35.i256 = obj.load v34; - call %std__lib__evm__effects__copy_words_c4e2 v29 v33 v35; - v37.objref = obj.proj v10 1.i256; - v38.i256 = obj.load v37; - (v40.i256, v41.i1) = uaddo 4.i256 v38; - br v41 block2 block5; +func private %std__lib__evm__effects__encode_calldata__geb2e_13c2(v0.i32, v1.@layout_3) -> @layout_21 { + block0: + v2.*i32 = alloca i32; + mstore v2 v0 i32; + jump block1; - block5: - v42.objref<@layout_21> = obj.alloc @layout_21; - v44.objref = obj.proj v42 0.i256; - obj.store v44 v25; - v45.objref = obj.proj v42 1.i256; - obj.store v45 v40; - v46.@layout_21 = obj.load v42; - return v46; + block1: + v3.i32 = mload v2 i32; + v5.@layout_21 = call %std__lib__evm__effects__encode_calldata_abi__g994a_2b5f v3 v1; + return v5; } func private %std__lib__evm__effects__encode_calldata__geb2e_13c2_0(v0.i32, v1.@layout_3) -> @layout_21 { @@ -4606,139 +4626,285 @@ func private %std__lib__evm__effects__encode_calldata__geb2e_13c2_0(v0.i32, v1.@ jump block1; block1: - v4.i32 = mload v2 i32; - v5.i256 = zext v4 i256; - v7.i256 = shl 224.i256 v5; - v9.@layout_21 = call %std__lib__evm__effects__encode_abi_payload__geb2e_59d4_0 v1; - v10.objref<@layout_21> = obj.alloc @layout_21; - v12.objref = obj.proj v10 0.i256; - v13.i256 = extract_value v9 0.i256; - obj.store v12 v13; - v15.objref = obj.proj v10 1.i256; - v16.i256 = extract_value v9 1.i256; - obj.store v15 v16; - v17.objref = obj.proj v10 1.i256; - v18.i256 = obj.load v17; - (v19.i256, v20.i1) = uaddo 4.i256 v18; - br v20 block2 block3; + v3.i32 = mload v2 i32; + v5.@layout_21 = call %std__lib__evm__effects__encode_calldata_abi__g994a_2b5f_0 v3 v1; + return v5; +} + +func private %std__lib__evm__effects__encode_calldata__geb2e_13c2_1(v0.i32, v1.@layout_3) -> @layout_21 { + block0: + v2.*i32 = alloca i32; + mstore v2 v0 i32; + jump block1; + + block1: + v3.i32 = mload v2 i32; + v5.@layout_21 = call %std__lib__evm__effects__encode_calldata_abi__g994a_2b5f_1 v3 v1; + return v5; +} + +func private %std__lib__evm__effects__encode_calldata_abi__g994a_2b5f(v0.i32, v1.@layout_3) -> @layout_21 { + block0: + v2.*i32 = alloca i32; + mstore v2 v0 i32; + jump block1; + + block1: + br 0.i1 block2 block3; block2: - mstore 0.i256 35408467139433450592217433187231851964531694900788300625387963629091585785856.i256 i256; - mstore 4.i256 17.i256 i256; - evm_revert 0.i256 36.i256; + v7.@layout_21 = call %std__lib__evm__effects__encode_abi_payload_abi__g994a_bdda v1; + return v7; block3: - v24.*i8 = evm_malloc v19; - v25.i256 = ptr_to_int v24 i256; - mstore v25 v7 i256; - (v29.i256, v30.i1) = uaddo v25 4.i256; - br v30 block2 block4; + jump block4; block4: - v32.objref = obj.proj v10 0.i256; - v33.i256 = obj.load v32; - v34.objref = obj.proj v10 1.i256; - v35.i256 = obj.load v34; - call %std__lib__evm__effects__copy_words_c4e2_0 v29 v33 v35; - v37.objref = obj.proj v10 1.i256; - v38.i256 = obj.load v37; - (v40.i256, v41.i1) = uaddo 4.i256 v38; - br v41 block2 block5; + br 0.i1 block5 block6; block5: - v42.objref<@layout_21> = obj.alloc @layout_21; - v44.objref = obj.proj v42 0.i256; - obj.store v44 v25; - v45.objref = obj.proj v42 1.i256; - obj.store v45 v40; - v46.@layout_21 = obj.load v42; - return v46; + evm_revert 0.i256 0.i256; + + block6: + jump block7; + + block7: + v12.i32 = mload v2 i32; + v13.i256 = call %core__lib__num__impl_trait_T_1e89__to_word__g6338_b832 v12; + v14.i256 = shl 224.i256 v13; + v16.@layout_21 = call %std__lib__evm__effects__encode_abi_payload_abi__g994a_bdda v1; + v17.objref<@layout_21> = obj.alloc @layout_21; + v18.objref = obj.proj v17 0.i256; + v19.i256 = extract_value v16 0.i256; + obj.store v18 v19; + v21.objref = obj.proj v17 1.i256; + v22.i256 = extract_value v16 1.i256; + obj.store v21 v22; + v23.objref = obj.proj v17 1.i256; + v24.i256 = obj.load v23; + (v26.i256, v27.i1) = uaddo 4.i256 v24; + br v27 block8 block9; + + block8: + mstore 0.i256 35408467139433450592217433187231851964531694900788300625387963629091585785856.i256 i256; + mstore 4.i256 17.i256 i256; + evm_revert 0.i256 36.i256; + + block9: + v31.*i8 = evm_malloc v26; + v32.i256 = ptr_to_int v31 i256; + mstore v32 v14 i256; + (v36.i256, v37.i1) = uaddo v32 4.i256; + br v37 block8 block10; + + block10: + v39.objref = obj.proj v17 0.i256; + v40.i256 = obj.load v39; + v41.objref = obj.proj v17 1.i256; + v42.i256 = obj.load v41; + call %std__lib__evm__effects__copy_words_4238 v36 v40 v42; + v44.objref = obj.proj v17 1.i256; + v45.i256 = obj.load v44; + (v47.i256, v48.i1) = uaddo 4.i256 v45; + br v48 block8 block11; + + block11: + v49.objref<@layout_21> = obj.alloc @layout_21; + v51.objref = obj.proj v49 0.i256; + obj.store v51 v32; + v52.objref = obj.proj v49 1.i256; + obj.store v52 v47; + v53.@layout_21 = obj.load v49; + return v53; } -func private %std__lib__evm__effects__encode_calldata__geb2e_13c2_1(v0.i32, v1.@layout_3) -> @layout_21 { +func private %std__lib__evm__effects__encode_calldata_abi__g994a_2b5f_0(v0.i32, v1.@layout_3) -> @layout_21 { block0: v2.*i32 = alloca i32; mstore v2 v0 i32; jump block1; block1: - v4.i32 = mload v2 i32; - v5.i256 = zext v4 i256; - v7.i256 = shl 224.i256 v5; - v9.@layout_21 = call %std__lib__evm__effects__encode_abi_payload__geb2e_59d4_1 v1; - v10.objref<@layout_21> = obj.alloc @layout_21; - v12.objref = obj.proj v10 0.i256; - v13.i256 = extract_value v9 0.i256; - obj.store v12 v13; - v15.objref = obj.proj v10 1.i256; - v16.i256 = extract_value v9 1.i256; - obj.store v15 v16; - v17.objref = obj.proj v10 1.i256; - v18.i256 = obj.load v17; - (v19.i256, v20.i1) = uaddo 4.i256 v18; - br v20 block2 block3; + br 0.i1 block2 block3; block2: + v7.@layout_21 = call %std__lib__evm__effects__encode_abi_payload_abi__g994a_bdda_0 v1; + return v7; + + block3: + jump block4; + + block4: + br 0.i1 block5 block6; + + block5: + evm_revert 0.i256 0.i256; + + block6: + jump block7; + + block7: + v12.i32 = mload v2 i32; + v13.i256 = call %core__lib__num__impl_trait_T_1e89__to_word__g6338_b832_0 v12; + v14.i256 = shl 224.i256 v13; + v16.@layout_21 = call %std__lib__evm__effects__encode_abi_payload_abi__g994a_bdda_0 v1; + v17.objref<@layout_21> = obj.alloc @layout_21; + v18.objref = obj.proj v17 0.i256; + v19.i256 = extract_value v16 0.i256; + obj.store v18 v19; + v21.objref = obj.proj v17 1.i256; + v22.i256 = extract_value v16 1.i256; + obj.store v21 v22; + v23.objref = obj.proj v17 1.i256; + v24.i256 = obj.load v23; + (v26.i256, v27.i1) = uaddo 4.i256 v24; + br v27 block8 block9; + + block8: mstore 0.i256 35408467139433450592217433187231851964531694900788300625387963629091585785856.i256 i256; mstore 4.i256 17.i256 i256; evm_revert 0.i256 36.i256; + block9: + v31.*i8 = evm_malloc v26; + v32.i256 = ptr_to_int v31 i256; + mstore v32 v14 i256; + (v36.i256, v37.i1) = uaddo v32 4.i256; + br v37 block8 block10; + + block10: + v39.objref = obj.proj v17 0.i256; + v40.i256 = obj.load v39; + v41.objref = obj.proj v17 1.i256; + v42.i256 = obj.load v41; + call %std__lib__evm__effects__copy_words_4238_0 v36 v40 v42; + v44.objref = obj.proj v17 1.i256; + v45.i256 = obj.load v44; + (v47.i256, v48.i1) = uaddo 4.i256 v45; + br v48 block8 block11; + + block11: + v49.objref<@layout_21> = obj.alloc @layout_21; + v51.objref = obj.proj v49 0.i256; + obj.store v51 v32; + v52.objref = obj.proj v49 1.i256; + obj.store v52 v47; + v53.@layout_21 = obj.load v49; + return v53; +} + +func private %std__lib__evm__effects__encode_calldata_abi__g994a_2b5f_1(v0.i32, v1.@layout_3) -> @layout_21 { + block0: + v2.*i32 = alloca i32; + mstore v2 v0 i32; + jump block1; + + block1: + br 0.i1 block2 block3; + + block2: + v7.@layout_21 = call %std__lib__evm__effects__encode_abi_payload_abi__g994a_bdda_1 v1; + return v7; + block3: - v24.*i8 = evm_malloc v19; - v25.i256 = ptr_to_int v24 i256; - mstore v25 v7 i256; - (v29.i256, v30.i1) = uaddo v25 4.i256; - br v30 block2 block4; + jump block4; block4: - v32.objref = obj.proj v10 0.i256; - v33.i256 = obj.load v32; - v34.objref = obj.proj v10 1.i256; - v35.i256 = obj.load v34; - call %std__lib__evm__effects__copy_words_c4e2_1 v29 v33 v35; - v37.objref = obj.proj v10 1.i256; - v38.i256 = obj.load v37; - (v40.i256, v41.i1) = uaddo 4.i256 v38; - br v41 block2 block5; + br 0.i1 block5 block6; block5: - v42.objref<@layout_21> = obj.alloc @layout_21; - v44.objref = obj.proj v42 0.i256; - obj.store v44 v25; - v45.objref = obj.proj v42 1.i256; - obj.store v45 v40; - v46.@layout_21 = obj.load v42; - return v46; + evm_revert 0.i256 0.i256; + + block6: + jump block7; + + block7: + v12.i32 = mload v2 i32; + v13.i256 = call %core__lib__num__impl_trait_T_1e89__to_word__g6338_b832_1 v12; + v14.i256 = shl 224.i256 v13; + v16.@layout_21 = call %std__lib__evm__effects__encode_abi_payload_abi__g994a_bdda_1 v1; + v17.objref<@layout_21> = obj.alloc @layout_21; + v18.objref = obj.proj v17 0.i256; + v19.i256 = extract_value v16 0.i256; + obj.store v18 v19; + v21.objref = obj.proj v17 1.i256; + v22.i256 = extract_value v16 1.i256; + obj.store v21 v22; + v23.objref = obj.proj v17 1.i256; + v24.i256 = obj.load v23; + (v26.i256, v27.i1) = uaddo 4.i256 v24; + br v27 block8 block9; + + block8: + mstore 0.i256 35408467139433450592217433187231851964531694900788300625387963629091585785856.i256 i256; + mstore 4.i256 17.i256 i256; + evm_revert 0.i256 36.i256; + + block9: + v31.*i8 = evm_malloc v26; + v32.i256 = ptr_to_int v31 i256; + mstore v32 v14 i256; + (v36.i256, v37.i1) = uaddo v32 4.i256; + br v37 block8 block10; + + block10: + v39.objref = obj.proj v17 0.i256; + v40.i256 = obj.load v39; + v41.objref = obj.proj v17 1.i256; + v42.i256 = obj.load v41; + call %std__lib__evm__effects__copy_words_4238_1 v36 v40 v42; + v44.objref = obj.proj v17 1.i256; + v45.i256 = obj.load v44; + (v47.i256, v48.i1) = uaddo 4.i256 v45; + br v48 block8 block11; + + block11: + v49.objref<@layout_21> = obj.alloc @layout_21; + v51.objref = obj.proj v49 0.i256; + obj.store v51 v32; + v52.objref = obj.proj v49 1.i256; + obj.store v52 v47; + v53.@layout_21 = obj.load v49; + return v53; } -func private %core__lib__abi__impl_trait_u256_d99e__encode__g426c_cd38(v0.i256, v1.objref<@layout_4>) { +func private %core__lib__abi__impl_trait_u256_d99e__encode__g426c_cf3b(v0.i256, v1.objref<@layout_4>) { block0: jump block1; block1: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_4fb9 v1 v0; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_9416 v1 v0; return; } -func private %core__lib__abi__impl_trait_u256_d99e__encode__g426c_cd38_0(v0.i256, v1.objref<@layout_4>) { +func private %core__lib__abi__impl_trait_u256_d99e__encode__g426c_cf3b_0(v0.i256, v1.objref<@layout_4>) { block0: jump block1; block1: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_4fb9_0 v1 v0; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_9416_0 v1 v0; return; } -func private %core__lib__abi__impl_trait_u256_d99e__encode__g426c_cd38_1(v0.i256, v1.objref<@layout_4>) { +func private %core__lib__abi__impl_trait_u256_d99e__encode__g426c_cf3b_1(v0.i256, v1.objref<@layout_4>) { block0: jump block1; block1: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_4fb9_1 v1 v0; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_9416_1 v1 v0; return; } -func private %encode_field__g0a88(v0.i8, v1.objref<@layout_4>, v2.i256) { +func private %core__lib__abi__impl_trait_u256_d99e__encode__g426c_f05a(v0.i256, v1.objref<@layout_4>) { + block0: + jump block1; + + block1: + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_ed14 v1 v0; + return; +} + +func private %encode_field__ge927(v0.i1, v1.objref<@layout_4>, v2.i256) { block0: jump block1; @@ -4746,8 +4912,8 @@ func private %encode_field__g0a88(v0.i8, v1.objref<@layout_4>, v2.i256) { br 0.i1 block2 block3; block2: - v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_a9a0 v1; - v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__g79ff_f3e8 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_6218 v1; + v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__gda9b_ca77 v0; v9.i256 = mload v2 i256; (v10.i256, v11.i1) = usubo v9 v5; br v11 block5 block6; @@ -4756,7 +4922,7 @@ func private %encode_field__g0a88(v0.i8, v1.objref<@layout_4>, v2.i256) { jump block4; block4: - call %impl_trait_u8__encode__g426c v0 v1; + call %impl_trait_bool__encode__g426c v0 v1; return; block5: @@ -4765,15 +4931,15 @@ func private %encode_field__g0a88(v0.i8, v1.objref<@layout_4>, v2.i256) { evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_7b53 v1 v10; - v19.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_7b90 v1; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_1c16 v1 v10; + v19.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__pos__gf13e_caff v1; v21.i256 = mload v2 i256; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_844b v1 v21; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_2d32 v1 v21; v23.i256 = mload v2 i256; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_0f4a v1 v23; - call %impl_trait_u8__encode__g426c v0 v1; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_844b v1 v5; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_0f4a v1 v19; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_3657 v1 v23; + call %impl_trait_bool__encode__g426c v0 v1; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_2d32 v1 v5; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_3657 v1 v19; v30.i256 = mload v2 i256; (v32.i256, v33.i1) = uaddo v30 v8; br v33 block5 block7; @@ -4783,7 +4949,7 @@ func private %encode_field__g0a88(v0.i8, v1.objref<@layout_4>, v2.i256) { return; } -func private %core__lib__abi__encode_field__g2e64_1064(v0.i256, v1.objref<@layout_4>, v2.i256) { +func private %core__lib__abi__encode_field__g2e64_0a4e(v0.i256, v1.objref<@layout_4>, v2.i256) { block0: jump block1; @@ -4791,8 +4957,8 @@ func private %core__lib__abi__encode_field__g2e64_1064(v0.i256, v1.objref<@layou br 0.i1 block2 block3; block2: - v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_4097 v1; - v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_3812 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_db1d v1; + v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_0bb1 v0; v9.i256 = mload v2 i256; (v10.i256, v11.i1) = usubo v9 v5; br v11 block5 block6; @@ -4801,7 +4967,7 @@ func private %core__lib__abi__encode_field__g2e64_1064(v0.i256, v1.objref<@layou jump block4; block4: - call %core__lib__abi__impl_trait_u256_d99e__encode__g426c_cd38 v0 v1; + call %core__lib__abi__impl_trait_u256_d99e__encode__g426c_4098 v0 v1; return; block5: @@ -4810,15 +4976,15 @@ func private %core__lib__abi__encode_field__g2e64_1064(v0.i256, v1.objref<@layou evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_406a v1 v10; - v19.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_2f14 v1; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_07a7 v1 v10; + v19.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__pos__gf13e_9e98 v1; v21.i256 = mload v2 i256; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_e03a v1 v21; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_a30c v1 v21; v23.i256 = mload v2 i256; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_4e67 v1 v23; - call %core__lib__abi__impl_trait_u256_d99e__encode__g426c_cd38 v0 v1; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_e03a v1 v5; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_4e67 v1 v19; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_cdee v1 v23; + call %core__lib__abi__impl_trait_u256_d99e__encode__g426c_4098 v0 v1; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_a30c v1 v5; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_cdee v1 v19; v30.i256 = mload v2 i256; (v32.i256, v33.i1) = uaddo v30 v8; br v33 block5 block7; @@ -4828,16 +4994,16 @@ func private %core__lib__abi__encode_field__g2e64_1064(v0.i256, v1.objref<@layou return; } -func private %core__lib__abi__encode_field__g2e64_1064_0(v0.i256, v1.objref<@layout_4>, v2.i256) { +func private %encode_field__g859f(v0.i256, v1.objref<@layout_4>, v2.i256) { block0: jump block1; block1: - br 0.i1 block2 block3; + br 1.i1 block2 block3; block2: - v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_4097_0 v1; - v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_3812_0 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_c940 v1; + v8.i256 = call %core__lib__abi__impl_trait_String_c06e__payload_size__g3eb7_50d8 v0; v9.i256 = mload v2 i256; (v10.i256, v11.i1) = usubo v9 v5; br v11 block5 block6; @@ -4846,7 +5012,7 @@ func private %core__lib__abi__encode_field__g2e64_1064_0(v0.i256, v1.objref<@lay jump block4; block4: - call %core__lib__abi__impl_trait_u256_d99e__encode__g426c_cd38_0 v0 v1; + call %encode__g3cd9 v0 v1; return; block5: @@ -4855,15 +5021,15 @@ func private %core__lib__abi__encode_field__g2e64_1064_0(v0.i256, v1.objref<@lay evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_406a_0 v1 v10; - v19.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_2f14_0 v1; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_cf0c v1 v10; + v19.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__pos__gf13e_154a v1; v21.i256 = mload v2 i256; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_e03a_0 v1 v21; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_b256 v1 v21; v23.i256 = mload v2 i256; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_4e67_0 v1 v23; - call %core__lib__abi__impl_trait_u256_d99e__encode__g426c_cd38_0 v0 v1; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_e03a_0 v1 v5; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_4e67_0 v1 v19; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_aa42 v1 v23; + call %encode__g3cd9 v0 v1; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_b256 v1 v5; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_aa42 v1 v19; v30.i256 = mload v2 i256; (v32.i256, v33.i1) = uaddo v30 v8; br v33 block5 block7; @@ -4873,7 +5039,7 @@ func private %core__lib__abi__encode_field__g2e64_1064_0(v0.i256, v1.objref<@lay return; } -func private %core__lib__abi__encode_field__g2e64_1064_1(v0.i256, v1.objref<@layout_4>, v2.i256) { +func private %encode_field__g0a88(v0.i8, v1.objref<@layout_4>, v2.i256) { block0: jump block1; @@ -4881,8 +5047,8 @@ func private %core__lib__abi__encode_field__g2e64_1064_1(v0.i256, v1.objref<@lay br 0.i1 block2 block3; block2: - v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_4097_1 v1; - v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_3812_1 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_1ae1 v1; + v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__g79ff_9e57 v0; v9.i256 = mload v2 i256; (v10.i256, v11.i1) = usubo v9 v5; br v11 block5 block6; @@ -4891,7 +5057,7 @@ func private %core__lib__abi__encode_field__g2e64_1064_1(v0.i256, v1.objref<@lay jump block4; block4: - call %core__lib__abi__impl_trait_u256_d99e__encode__g426c_cd38_1 v0 v1; + call %impl_trait_u8__encode__g426c v0 v1; return; block5: @@ -4900,15 +5066,15 @@ func private %core__lib__abi__encode_field__g2e64_1064_1(v0.i256, v1.objref<@lay evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_406a_1 v1 v10; - v19.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_2f14_1 v1; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_db15 v1 v10; + v19.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__pos__gf13e_6cf1 v1; v21.i256 = mload v2 i256; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_e03a_1 v1 v21; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_ea14 v1 v21; v23.i256 = mload v2 i256; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_4e67_1 v1 v23; - call %core__lib__abi__impl_trait_u256_d99e__encode__g426c_cd38_1 v0 v1; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_e03a_1 v1 v5; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_4e67_1 v1 v19; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_b891 v1 v23; + call %impl_trait_u8__encode__g426c v0 v1; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_ea14 v1 v5; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_b891 v1 v19; v30.i256 = mload v2 i256; (v32.i256, v33.i1) = uaddo v30 v8; br v33 block5 block7; @@ -4918,7 +5084,7 @@ func private %core__lib__abi__encode_field__g2e64_1064_1(v0.i256, v1.objref<@lay return; } -func private %encode_field__ge927(v0.i1, v1.objref<@layout_4>, v2.i256) { +func private %core__lib__abi__encode_field__g2e64_63bc(v0.i256, v1.objref<@layout_4>, v2.i256) { block0: jump block1; @@ -4926,8 +5092,8 @@ func private %encode_field__ge927(v0.i1, v1.objref<@layout_4>, v2.i256) { br 0.i1 block2 block3; block2: - v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_c13e v1; - v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__gda9b_b33d v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_c6ed v1; + v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_3028 v0; v9.i256 = mload v2 i256; (v10.i256, v11.i1) = usubo v9 v5; br v11 block5 block6; @@ -4936,7 +5102,7 @@ func private %encode_field__ge927(v0.i1, v1.objref<@layout_4>, v2.i256) { jump block4; block4: - call %impl_trait_bool__encode__g426c v0 v1; + call %core__lib__abi__impl_trait_u256_d99e__encode__g426c_cf3b v0 v1; return; block5: @@ -4945,15 +5111,15 @@ func private %encode_field__ge927(v0.i1, v1.objref<@layout_4>, v2.i256) { evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_aa60 v1 v10; - v19.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_6cac v1; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_6cb1 v1 v10; + v19.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__pos__gf13e_f96a v1; v21.i256 = mload v2 i256; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_cc2c v1 v21; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_b5ff v1 v21; v23.i256 = mload v2 i256; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_b6ef v1 v23; - call %impl_trait_bool__encode__g426c v0 v1; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_cc2c v1 v5; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_b6ef v1 v19; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_478f v1 v23; + call %core__lib__abi__impl_trait_u256_d99e__encode__g426c_cf3b v0 v1; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_b5ff v1 v5; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_478f v1 v19; v30.i256 = mload v2 i256; (v32.i256, v33.i1) = uaddo v30 v8; br v33 block5 block7; @@ -4963,16 +5129,16 @@ func private %encode_field__ge927(v0.i1, v1.objref<@layout_4>, v2.i256) { return; } -func private %encode_field__g859f(v0.i256, v1.objref<@layout_4>, v2.i256) { +func private %core__lib__abi__encode_field__g2e64_63bc_0(v0.i256, v1.objref<@layout_4>, v2.i256) { block0: jump block1; block1: - br 1.i1 block2 block3; + br 0.i1 block2 block3; block2: - v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_25d4 v1; - v8.i256 = call %core__lib__abi__impl_trait_String_c06e__payload_size__g3eb7_dfa6 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_c6ed_0 v1; + v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_3028_0 v0; v9.i256 = mload v2 i256; (v10.i256, v11.i1) = usubo v9 v5; br v11 block5 block6; @@ -4981,7 +5147,7 @@ func private %encode_field__g859f(v0.i256, v1.objref<@layout_4>, v2.i256) { jump block4; block4: - call %encode__g3cd9 v0 v1; + call %core__lib__abi__impl_trait_u256_d99e__encode__g426c_cf3b_0 v0 v1; return; block5: @@ -4990,15 +5156,15 @@ func private %encode_field__g859f(v0.i256, v1.objref<@layout_4>, v2.i256) { evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_1ad1 v1 v10; - v19.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_d8ed v1; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_6cb1_0 v1 v10; + v19.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__pos__gf13e_f96a_0 v1; v21.i256 = mload v2 i256; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_c5ff v1 v21; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_b5ff_0 v1 v21; v23.i256 = mload v2 i256; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_7410 v1 v23; - call %encode__g3cd9 v0 v1; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_c5ff v1 v5; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_7410 v1 v19; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_478f_0 v1 v23; + call %core__lib__abi__impl_trait_u256_d99e__encode__g426c_cf3b_0 v0 v1; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_b5ff_0 v1 v5; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_478f_0 v1 v19; v30.i256 = mload v2 i256; (v32.i256, v33.i1) = uaddo v30 v8; br v33 block5 block7; @@ -5008,7 +5174,7 @@ func private %encode_field__g859f(v0.i256, v1.objref<@layout_4>, v2.i256) { return; } -func private %core__lib__abi__encode_field__g2e64_555f(v0.i256, v1.objref<@layout_4>, v2.i256) { +func private %core__lib__abi__encode_field__g2e64_63bc_1(v0.i256, v1.objref<@layout_4>, v2.i256) { block0: jump block1; @@ -5016,8 +5182,8 @@ func private %core__lib__abi__encode_field__g2e64_555f(v0.i256, v1.objref<@layou br 0.i1 block2 block3; block2: - v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_fd6f v1; - v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_77e5 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_c6ed_1 v1; + v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_3028_1 v0; v9.i256 = mload v2 i256; (v10.i256, v11.i1) = usubo v9 v5; br v11 block5 block6; @@ -5026,7 +5192,7 @@ func private %core__lib__abi__encode_field__g2e64_555f(v0.i256, v1.objref<@layou jump block4; block4: - call %core__lib__abi__impl_trait_u256_d99e__encode__g426c_2910 v0 v1; + call %core__lib__abi__impl_trait_u256_d99e__encode__g426c_cf3b_1 v0 v1; return; block5: @@ -5035,15 +5201,15 @@ func private %core__lib__abi__encode_field__g2e64_555f(v0.i256, v1.objref<@layou evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_8f67 v1 v10; - v19.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_0de4 v1; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_6cb1_1 v1 v10; + v19.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__pos__gf13e_f96a_1 v1; v21.i256 = mload v2 i256; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_fa20 v1 v21; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_b5ff_1 v1 v21; v23.i256 = mload v2 i256; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_3857 v1 v23; - call %core__lib__abi__impl_trait_u256_d99e__encode__g426c_2910 v0 v1; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_fa20 v1 v5; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_3857 v1 v19; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_478f_1 v1 v23; + call %core__lib__abi__impl_trait_u256_d99e__encode__g426c_cf3b_1 v0 v1; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_b5ff_1 v1 v5; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_478f_1 v1 v19; v30.i256 = mload v2 i256; (v32.i256, v33.i1) = uaddo v30 v8; br v33 block5 block7; @@ -5061,8 +5227,8 @@ func private %encode_field__g6d7e(v0.i256, v1.objref<@layout_4>, v2.i256) { br 1.i1 block2 block3; block2: - v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_6030 v1; - v8.i256 = call %core__lib__abi__impl_trait_String_c06e__payload_size__gc7cf_9b7d v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_9b93 v1; + v8.i256 = call %core__lib__abi__impl_trait_String_c06e__payload_size__gc7cf_5272 v0; v9.i256 = mload v2 i256; (v10.i256, v11.i1) = usubo v9 v5; br v11 block5 block6; @@ -5080,15 +5246,15 @@ func private %encode_field__g6d7e(v0.i256, v1.objref<@layout_4>, v2.i256) { evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_406d v1 v10; - v19.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_324d v1; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_36d8 v1 v10; + v19.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__pos__gf13e_78fa v1; v21.i256 = mload v2 i256; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_750c v1 v21; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_d942 v1 v21; v23.i256 = mload v2 i256; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_597d v1 v23; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_c622 v1 v23; call %encode__gbe21 v0 v1; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_750c v1 v5; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_597d v1 v19; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_d942 v1 v5; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_c622 v1 v19; v30.i256 = mload v2 i256; (v32.i256, v33.i1) = uaddo v30 v8; br v33 block5 block7; @@ -5098,35 +5264,13 @@ func private %encode_field__g6d7e(v0.i256, v1.objref<@layout_4>, v2.i256) { return; } -func private %encode_single_root__ge927(v0.i1, v1.objref<@layout_4>) { - block0: - v2.*i256 = alloca i256; - jump block1; - - block1: - v4.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_c13e v1; - (v6.i256, v7.i1) = uaddo v4 32.i256; - br v7 block2 block3; - - block2: - mstore 0.i256 35408467139433450592217433187231851964531694900788300625387963629091585785856.i256 i256; - mstore 4.i256 17.i256 i256; - evm_revert 0.i256 36.i256; - - block3: - mstore v2 v6 i256; - v14.i256 = ptr_to_int v2 i256; - call %encode_field__ge927 v0 v1 v14; - return; -} - func private %encode_single_root__g0a88(v0.i8, v1.objref<@layout_4>) { block0: v2.*i256 = alloca i256; jump block1; block1: - v4.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_a9a0 v1; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_1ae1 v1; (v6.i256, v7.i1) = uaddo v4 32.i256; br v7 block2 block3; @@ -5148,7 +5292,7 @@ func private %encode_single_root__g859f(v0.i256, v1.objref<@layout_4>) { jump block1; block1: - v4.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_25d4 v1; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_c940 v1; (v6.i256, v7.i1) = uaddo v4 32.i256; br v7 block2 block3; @@ -5164,13 +5308,13 @@ func private %encode_single_root__g859f(v0.i256, v1.objref<@layout_4>) { return; } -func private %encode_single_root__g2e64(v0.i256, v1.objref<@layout_4>) { +func private %encode_single_root__ge927(v0.i1, v1.objref<@layout_4>) { block0: v2.*i256 = alloca i256; jump block1; block1: - v4.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_fd6f v1; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_6218 v1; (v6.i256, v7.i1) = uaddo v4 32.i256; br v7 block2 block3; @@ -5182,7 +5326,7 @@ func private %encode_single_root__g2e64(v0.i256, v1.objref<@layout_4>) { block3: mstore v2 v6 i256; v14.i256 = ptr_to_int v2 i256; - call %core__lib__abi__encode_field__g2e64_555f v0 v1 v14; + call %encode_field__ge927 v0 v1 v14; return; } @@ -5192,7 +5336,7 @@ func private %encode_single_root__g6d7e(v0.i256, v1.objref<@layout_4>) { jump block1; block1: - v4.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_6030 v1; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_9b93 v1; (v6.i256, v7.i1) = uaddo v4 32.i256; br v7 block2 block3; @@ -5214,7 +5358,7 @@ func private %encode_single_root_alloc__g472d(v0.i256) -> @layout_21 { block1: v2.i256 = call %abi_single_root_size__g5535 v0; - v3.@layout_4 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_a948 v2; + v3.@layout_4 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_b8cf v2; v4.objref<@layout_4> = obj.alloc @layout_4; v6.objref = obj.proj v4 0.i256; v7.i256 = extract_value v3 0.i256; @@ -5222,7 +5366,7 @@ func private %encode_single_root_alloc__g472d(v0.i256) -> @layout_21 { v9.objref = obj.proj v4 1.i256; v10.i256 = extract_value v3 1.i256; obj.store v9 v10; - v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_25d4 v4; + v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_c940_0 v4; call %encode_single_root__g859f v0 v4; v13.objref<@layout_21> = obj.alloc @layout_21; v14.objref = obj.proj v13 0.i256; @@ -5239,7 +5383,7 @@ func private %encode_single_root_alloc__g0c18(v0.i256) -> @layout_21 { block1: v2.i256 = call %abi_single_root_size__g65da v0; - v3.@layout_4 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_30df v2; + v3.@layout_4 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_a0ae v2; v4.objref<@layout_4> = obj.alloc @layout_4; v6.objref = obj.proj v4 0.i256; v7.i256 = extract_value v3 0.i256; @@ -5247,7 +5391,7 @@ func private %encode_single_root_alloc__g0c18(v0.i256) -> @layout_21 { v9.objref = obj.proj v4 1.i256; v10.i256 = extract_value v3 1.i256; obj.store v9 v10; - v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_6030 v4; + v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_9b93_0 v4; call %encode_single_root__g6d7e v0 v4; v13.objref<@layout_21> = obj.alloc @layout_21; v14.objref = obj.proj v13 0.i256; @@ -5264,7 +5408,7 @@ func private %encode_single_root_alloc__gcb0a(v0.i8) -> @layout_21 { block1: v2.i256 = call %abi_single_root_size__g79ff v0; - v3.@layout_4 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_513f v2; + v3.@layout_4 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_68e7 v2; v4.objref<@layout_4> = obj.alloc @layout_4; v6.objref = obj.proj v4 0.i256; v7.i256 = extract_value v3 0.i256; @@ -5272,7 +5416,7 @@ func private %encode_single_root_alloc__gcb0a(v0.i8) -> @layout_21 { v9.objref = obj.proj v4 1.i256; v10.i256 = extract_value v3 1.i256; obj.store v9 v10; - v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_a9a0 v4; + v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_1ae1_0 v4; call %encode_single_root__g0a88 v0 v4; v13.objref<@layout_21> = obj.alloc @layout_21; v14.objref = obj.proj v13 0.i256; @@ -5289,7 +5433,7 @@ func private %encode_single_root_alloc__gac80(v0.i256) -> @layout_21 { block1: v2.i256 = call %abi_single_root_size__ge513 v0; - v3.@layout_4 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_94e9 v2; + v3.@layout_4 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_bff7 v2; v4.objref<@layout_4> = obj.alloc @layout_4; v6.objref = obj.proj v4 0.i256; v7.i256 = extract_value v3 0.i256; @@ -5297,7 +5441,7 @@ func private %encode_single_root_alloc__gac80(v0.i256) -> @layout_21 { v9.objref = obj.proj v4 1.i256; v10.i256 = extract_value v3 1.i256; obj.store v9 v10; - v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_fd6f v4; + v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_db1d_0 v4; call %encode_single_root__g2e64 v0 v4; v13.objref<@layout_21> = obj.alloc @layout_21; v14.objref = obj.proj v13 0.i256; @@ -5314,7 +5458,7 @@ func private %encode_single_root_alloc__g09ca(v0.i1) -> @layout_21 { block1: v2.i256 = call %abi_single_root_size__gda9b v0; - v3.@layout_4 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_1514 v2; + v3.@layout_4 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_ec43 v2; v4.objref<@layout_4> = obj.alloc @layout_4; v6.objref = obj.proj v4 0.i256; v7.i256 = extract_value v3 0.i256; @@ -5322,7 +5466,7 @@ func private %encode_single_root_alloc__g09ca(v0.i1) -> @layout_21 { v9.objref = obj.proj v4 1.i256; v10.i256 = extract_value v3 1.i256; obj.store v9 v10; - v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_c13e v4; + v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_6218_0 v4; call %encode_single_root__ge927 v0 v4; v13.objref<@layout_21> = obj.alloc @layout_21; v14.objref = obj.proj v13 0.i256; @@ -5333,7 +5477,29 @@ func private %encode_single_root_alloc__g09ca(v0.i1) -> @layout_21 { return v16; } -func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_1514(v0.i256) -> @layout_4 { +func private %encode_single_root__g2e64(v0.i256, v1.objref<@layout_4>) { + block0: + v2.*i256 = alloca i256; + jump block1; + + block1: + v4.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_db1d v1; + (v6.i256, v7.i1) = uaddo v4 32.i256; + br v7 block2 block3; + + block2: + mstore 0.i256 35408467139433450592217433187231851964531694900788300625387963629091585785856.i256 i256; + mstore 4.i256 17.i256 i256; + evm_revert 0.i256 36.i256; + + block3: + mstore v2 v6 i256; + v14.i256 = ptr_to_int v2 i256; + call %core__lib__abi__encode_field__g2e64_0a4e v0 v1 v14; + return; +} + +func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_68e7(v0.i256) -> @layout_4 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -5341,11 +5507,11 @@ func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_1514(v0.i256) block1: v2.i256 = mload v1 i256; - v3.@layout_4 = call %std__lib__abi__sol__impl_SolEncoder_ce34__new_978f v2; + v3.@layout_4 = call %std__lib__abi__sol__impl_SolEncoder_ce34__new_f000 v2; return v3; } -func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_30df(v0.i256) -> @layout_4 { +func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_a0ae(v0.i256) -> @layout_4 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -5353,11 +5519,11 @@ func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_30df(v0.i256) block1: v2.i256 = mload v1 i256; - v3.@layout_4 = call %std__lib__abi__sol__impl_SolEncoder_ce34__new_c575 v2; + v3.@layout_4 = call %std__lib__abi__sol__impl_SolEncoder_ce34__new_6dac v2; return v3; } -func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_513f(v0.i256) -> @layout_4 { +func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_b8cf(v0.i256) -> @layout_4 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -5365,11 +5531,11 @@ func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_513f(v0.i256) block1: v2.i256 = mload v1 i256; - v3.@layout_4 = call %std__lib__abi__sol__impl_SolEncoder_ce34__new_f042 v2; + v3.@layout_4 = call %std__lib__abi__sol__impl_SolEncoder_ce34__new_2c84 v2; return v3; } -func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_8043(v0.i256) -> @layout_4 { +func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_bce5(v0.i256) -> @layout_4 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -5377,11 +5543,11 @@ func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_8043(v0.i256) block1: v2.i256 = mload v1 i256; - v3.@layout_4 = call %std__lib__abi__sol__impl_SolEncoder_ce34__new_2462 v2; + v3.@layout_4 = call %std__lib__abi__sol__impl_SolEncoder_ce34__new_6b9d v2; return v3; } -func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_8043_0(v0.i256) -> @layout_4 { +func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_bff7(v0.i256) -> @layout_4 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -5389,11 +5555,11 @@ func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_8043_0(v0.i25 block1: v2.i256 = mload v1 i256; - v3.@layout_4 = call %std__lib__abi__sol__impl_SolEncoder_ce34__new_2462_0 v2; + v3.@layout_4 = call %std__lib__abi__sol__impl_SolEncoder_ce34__new_f79e v2; return v3; } -func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_8043_1(v0.i256) -> @layout_4 { +func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_cb65(v0.i256) -> @layout_4 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -5401,11 +5567,11 @@ func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_8043_1(v0.i25 block1: v2.i256 = mload v1 i256; - v3.@layout_4 = call %std__lib__abi__sol__impl_SolEncoder_ce34__new_2462_1 v2; + v3.@layout_4 = call %std__lib__abi__sol__impl_SolEncoder_ce34__new_20bf v2; return v3; } -func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_94e9(v0.i256) -> @layout_4 { +func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_eace(v0.i256) -> @layout_4 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -5413,11 +5579,11 @@ func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_94e9(v0.i256) block1: v2.i256 = mload v1 i256; - v3.@layout_4 = call %std__lib__abi__sol__impl_SolEncoder_ce34__new_c2ff v2; + v3.@layout_4 = call %std__lib__abi__sol__impl_SolEncoder_ce34__new_116e v2; return v3; } -func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_9a7a(v0.i256) -> @layout_4 { +func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_eace_0(v0.i256) -> @layout_4 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -5425,11 +5591,11 @@ func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_9a7a(v0.i256) block1: v2.i256 = mload v1 i256; - v3.@layout_4 = call %std__lib__abi__sol__impl_SolEncoder_ce34__new_1301 v2; + v3.@layout_4 = call %std__lib__abi__sol__impl_SolEncoder_ce34__new_116e_0 v2; return v3; } -func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_a4f7(v0.i256) -> @layout_4 { +func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_eace_1(v0.i256) -> @layout_4 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -5437,11 +5603,11 @@ func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_a4f7(v0.i256) block1: v2.i256 = mload v1 i256; - v3.@layout_4 = call %std__lib__abi__sol__impl_SolEncoder_ce34__new_24a6 v2; + v3.@layout_4 = call %std__lib__abi__sol__impl_SolEncoder_ce34__new_116e_1 v2; return v3; } -func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_a948(v0.i256) -> @layout_4 { +func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_ec43(v0.i256) -> @layout_4 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -5449,7 +5615,7 @@ func private %std__lib__abi__sol__impl_trait_Sol_1f5f__encoder_new_a948(v0.i256) block1: v2.i256 = mload v1 i256; - v3.@layout_4 = call %std__lib__abi__sol__impl_SolEncoder_ce34__new_8670 v2; + v3.@layout_4 = call %std__lib__abi__sol__impl_SolEncoder_ce34__new_4d7f v2; return v3; } @@ -5683,7 +5849,7 @@ func private %grant(v0.i256, v1.i256, v2.@layout_0) { return; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_07fa(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_0412(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -5700,7 +5866,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_07fa return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_10c2(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_0412_0(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -5717,7 +5883,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_10c2 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_1af2(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_07b6(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -5734,7 +5900,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_1af2 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_3194(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_0d04(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -5751,7 +5917,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_3194 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_3fdb(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_0f33(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -5768,7 +5934,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_3fdb return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_4b56(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_101b(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -5785,7 +5951,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_4b56 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_4f68(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_2275(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -5802,7 +5968,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_4f68 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_52e4(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_2fe2(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -5819,7 +5985,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_52e4 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_54c0(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_3395(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -5836,7 +6002,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_54c0 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_5b55(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_35ae(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -5853,7 +6019,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_5b55 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_5bb5(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_3ab5(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -5870,7 +6036,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_5bb5 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_5fa6(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_4160(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -5887,7 +6053,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_5fa6 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_6679(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_4463(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -5904,7 +6070,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_6679 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_6aca(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_4e2d(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -5921,7 +6087,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_6aca return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_6e05(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_5304(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -5938,7 +6104,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_6e05 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_6eac(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_5ce5(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -5955,7 +6121,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_6eac return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_7aa7(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_6712(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -5972,7 +6138,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_7aa7 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_7c3a(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_6959(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -5989,7 +6155,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_7c3a return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_8042(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_6da2(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -6006,7 +6172,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_8042 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_8379(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_70a8(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -6023,7 +6189,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_8379 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_83a5(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_71f4(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -6040,7 +6206,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_83a5 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_8e49(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_73fa(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -6057,7 +6223,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_8e49 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_8ee6(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_83ea(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -6074,7 +6240,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_8ee6 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_8f13(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_88ae(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -6091,7 +6257,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_8f13 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_8f90(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_8d19(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -6108,7 +6274,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_8f90 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_98ab(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_8e34(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -6125,7 +6291,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_98ab return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_9e12(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_8e63(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -6142,7 +6308,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_9e12 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_a6d8(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_9166(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -6159,7 +6325,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_a6d8 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_acd0(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_9369(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -6176,7 +6342,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_acd0 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_af05(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_adde(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -6193,7 +6359,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_af05 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_c5ca(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_afad(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -6210,7 +6376,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_c5ca return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_c5d0(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_bbe1(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -6227,7 +6393,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_c5d0 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_c9e2(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_c70f(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -6244,7 +6410,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_c9e2 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_c9e2_0(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_cf49(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -6261,7 +6427,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_c9e2 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_cf02(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_e616(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -6278,7 +6444,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_cf02 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_d29e(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_e626(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -6295,7 +6461,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_d29e return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_d2a6(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_ee15(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -6312,7 +6478,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_d2a6 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_f69f(v0.@layout_5) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_fa36(v0.@layout_5) -> i256 { block0: v1.objref<@layout_5> = obj.alloc @layout_5; v3.objref = obj.proj v1 0.i256; @@ -6517,7 +6683,7 @@ func private %ne(v0.@layout_0, v1.@layout_0) -> i1 { return v12; } -func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_1301(v0.i256) -> @layout_4 { +func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_116e(v0.i256) -> @layout_4 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -6548,7 +6714,7 @@ func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_1301(v0.i256) -> @la return v13; } -func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_2462(v0.i256) -> @layout_4 { +func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_116e_0(v0.i256) -> @layout_4 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -6579,7 +6745,7 @@ func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_2462(v0.i256) -> @la return v13; } -func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_2462_0(v0.i256) -> @layout_4 { +func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_116e_1(v0.i256) -> @layout_4 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -6610,7 +6776,32 @@ func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_2462_0(v0.i256) -> @ return v13; } -func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_2462_1(v0.i256) -> @layout_4 { +func private %impl_SolDecoder__new__g463e(v0.@layout_5) -> @layout_7 { + block0: + jump block1; + + block1: + v2.@layout_6 = call %impl_Cursor__new__g463e v0; + v4.objref<@layout_7> = obj.alloc @layout_7; + v5.objref<@layout_6> = obj.proj v4 0.i256; + v6.objref<@layout_5> = obj.proj v5 0.i256; + v7.@layout_5 = extract_value v2 0.i256; + v8.objref = obj.proj v6 0.i256; + v9.i256 = extract_value v7 0.i256; + obj.store v8 v9; + v11.objref = obj.proj v6 1.i256; + v12.i256 = extract_value v7 1.i256; + obj.store v11 v12; + v13.objref = obj.proj v5 1.i256; + v14.i256 = extract_value v2 1.i256; + obj.store v13 v14; + v15.objref = obj.proj v4 1.i256; + obj.store v15 0.i256; + v16.@layout_7 = obj.load v4; + return v16; +} + +func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_20bf(v0.i256) -> @layout_4 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -6641,7 +6832,7 @@ func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_2462_1(v0.i256) -> @ return v13; } -func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_24a6(v0.i256) -> @layout_4 { +func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_2c84(v0.i256) -> @layout_4 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -6672,32 +6863,7 @@ func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_24a6(v0.i256) -> @la return v13; } -func private %impl_SolDecoder__new__g463e(v0.@layout_5) -> @layout_7 { - block0: - jump block1; - - block1: - v2.@layout_6 = call %impl_Cursor__new__g463e v0; - v4.objref<@layout_7> = obj.alloc @layout_7; - v5.objref<@layout_6> = obj.proj v4 0.i256; - v6.objref<@layout_5> = obj.proj v5 0.i256; - v7.@layout_5 = extract_value v2 0.i256; - v8.objref = obj.proj v6 0.i256; - v9.i256 = extract_value v7 0.i256; - obj.store v8 v9; - v11.objref = obj.proj v6 1.i256; - v12.i256 = extract_value v7 1.i256; - obj.store v11 v12; - v13.objref = obj.proj v5 1.i256; - v14.i256 = extract_value v2 1.i256; - obj.store v13 v14; - v15.objref = obj.proj v4 1.i256; - obj.store v15 0.i256; - v16.@layout_7 = obj.load v4; - return v16; -} - -func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_8670(v0.i256) -> @layout_4 { +func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_4d7f(v0.i256) -> @layout_4 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -6728,7 +6894,26 @@ func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_8670(v0.i256) -> @la return v13; } -func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_978f(v0.i256) -> @layout_4 { +func private %impl_Cursor__new__g463e(v0.@layout_5) -> @layout_6 { + block0: + jump block1; + + block1: + v2.objref<@layout_6> = obj.alloc @layout_6; + v4.objref<@layout_5> = obj.proj v2 0.i256; + v5.objref = obj.proj v4 0.i256; + v6.i256 = extract_value v0 0.i256; + obj.store v5 v6; + v8.objref = obj.proj v4 1.i256; + v9.i256 = extract_value v0 1.i256; + obj.store v8 v9; + v10.objref = obj.proj v2 1.i256; + obj.store v10 0.i256; + v11.@layout_6 = obj.load v2; + return v11; +} + +func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_6b9d(v0.i256) -> @layout_4 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -6759,26 +6944,7 @@ func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_978f(v0.i256) -> @la return v13; } -func private %impl_Cursor__new__g463e(v0.@layout_5) -> @layout_6 { - block0: - jump block1; - - block1: - v2.objref<@layout_6> = obj.alloc @layout_6; - v4.objref<@layout_5> = obj.proj v2 0.i256; - v5.objref = obj.proj v4 0.i256; - v6.i256 = extract_value v0 0.i256; - obj.store v5 v6; - v8.objref = obj.proj v4 1.i256; - v9.i256 = extract_value v0 1.i256; - obj.store v8 v9; - v10.objref = obj.proj v2 1.i256; - obj.store v10 0.i256; - v11.@layout_6 = obj.load v2; - return v11; -} - -func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_c2ff(v0.i256) -> @layout_4 { +func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_6dac(v0.i256) -> @layout_4 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -6809,7 +6975,7 @@ func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_c2ff(v0.i256) -> @la return v13; } -func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_c575(v0.i256) -> @layout_4 { +func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_f000(v0.i256) -> @layout_4 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -6840,7 +7006,7 @@ func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_c575(v0.i256) -> @la return v13; } -func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_f042(v0.i256) -> @layout_4 { +func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_f79e(v0.i256) -> @layout_4 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -6871,7 +7037,7 @@ func private %std__lib__abi__sol__impl_SolEncoder_ce34__new_f042(v0.i256) -> @la return v13; } -func private %core__lib__abi__packed_string_len_225d(v0.i256) -> i256 { +func private %core__lib__abi__packed_string_len_3496(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -6913,7 +7079,7 @@ func private %core__lib__abi__packed_string_len_225d(v0.i256) -> i256 { jump block2; } -func private %core__lib__abi__packed_string_len_225d_0(v0.i256) -> i256 { +func private %core__lib__abi__packed_string_len_3496_0(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -6955,7 +7121,7 @@ func private %core__lib__abi__packed_string_len_225d_0(v0.i256) -> i256 { jump block2; } -func private %core__lib__abi__packed_string_len_29ef(v0.i256) -> i256 { +func private %core__lib__abi__packed_string_len_82e7(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -6997,7 +7163,7 @@ func private %core__lib__abi__packed_string_len_29ef(v0.i256) -> i256 { jump block2; } -func private %core__lib__abi__packed_string_len_c13a(v0.i256) -> i256 { +func private %core__lib__abi__packed_string_len_e2e5(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -7039,7 +7205,7 @@ func private %core__lib__abi__packed_string_len_c13a(v0.i256) -> i256 { jump block2; } -func private %core__lib__abi__packed_string_len_ecb6(v0.i256) -> i256 { +func private %core__lib__abi__packed_string_len_e2e5_0(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -7081,7 +7247,7 @@ func private %core__lib__abi__packed_string_len_ecb6(v0.i256) -> i256 { jump block2; } -func private %core__lib__abi__packed_string_len_ecb6_0(v0.i256) -> i256 { +func private %core__lib__abi__packed_string_len_e6bf(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -7123,7 +7289,27 @@ func private %core__lib__abi__packed_string_len_ecb6_0(v0.i256) -> i256 { jump block2; } -func private %core__lib__abi__trait_AbiSize__payload_size__ge513_0454(v0.i256) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__ge513_0bb1(v0.i256) -> i256 { + block0: + v1.*i256 = alloca i256; + mstore v1 v0 i256; + jump block1; + + block1: + return 32.i256; +} + +func private %core__lib__abi__trait_AbiSize__payload_size__ge513_0bb1_0(v0.i256) -> i256 { + block0: + v1.*i256 = alloca i256; + mstore v1 v0 i256; + jump block1; + + block1: + return 32.i256; +} + +func private %core__lib__abi__trait_AbiSize__payload_size__ge513_0ce8(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -7133,14 +7319,44 @@ func private %core__lib__abi__trait_AbiSize__payload_size__ge513_0454(v0.i256) - return 32.i256; } -func private %std__lib__evm__panic__impl_trait_Panic_bf0a__payload_size_1e4f(v0.objref<@layout_3>) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__ge513_3028(v0.i256) -> i256 { + block0: + v1.*i256 = alloca i256; + mstore v1 v0 i256; + jump block1; + + block1: + return 32.i256; +} + +func private %core__lib__abi__trait_AbiSize__payload_size__ge513_3028_0(v0.i256) -> i256 { + block0: + v1.*i256 = alloca i256; + mstore v1 v0 i256; + jump block1; + + block1: + return 32.i256; +} + +func private %core__lib__abi__trait_AbiSize__payload_size__ge513_3028_1(v0.i256) -> i256 { + block0: + v1.*i256 = alloca i256; + mstore v1 v0 i256; + jump block1; + + block1: + return 32.i256; +} + +func private %std__lib__evm__panic__impl_trait_Panic_bf0a__payload_size_3662(v0.objref<@layout_3>) -> i256 { block0: jump block1; block1: v4.objref = obj.proj v0 0.i256; v5.i256 = obj.load v4; - v6.i256 = call %core__lib__abi__dynamic_payload_size__ge513_7ef0 v5; + v6.i256 = call %core__lib__abi__dynamic_payload_size__ge513_8a42 v5; (v7.i256, v8.i1) = uaddo 32.i256 v6; br v8 block2 block3; @@ -7153,14 +7369,14 @@ func private %std__lib__evm__panic__impl_trait_Panic_bf0a__payload_size_1e4f(v0. return v7; } -func private %std__lib__evm__panic__impl_trait_Panic_bf0a__payload_size_1e4f_0(v0.objref<@layout_3>) -> i256 { +func private %std__lib__evm__panic__impl_trait_Panic_bf0a__payload_size_3662_0(v0.objref<@layout_3>) -> i256 { block0: jump block1; block1: v4.objref = obj.proj v0 0.i256; v5.i256 = obj.load v4; - v6.i256 = call %core__lib__abi__dynamic_payload_size__ge513_7ef0_0 v5; + v6.i256 = call %core__lib__abi__dynamic_payload_size__ge513_8a42_0 v5; (v7.i256, v8.i1) = uaddo 32.i256 v6; br v8 block2 block3; @@ -7173,14 +7389,14 @@ func private %std__lib__evm__panic__impl_trait_Panic_bf0a__payload_size_1e4f_0(v return v7; } -func private %std__lib__evm__panic__impl_trait_Panic_bf0a__payload_size_1e4f_1(v0.objref<@layout_3>) -> i256 { +func private %std__lib__evm__panic__impl_trait_Panic_bf0a__payload_size_3662_1(v0.objref<@layout_3>) -> i256 { block0: jump block1; block1: v4.objref = obj.proj v0 0.i256; v5.i256 = obj.load v4; - v6.i256 = call %core__lib__abi__dynamic_payload_size__ge513_7ef0_1 v5; + v6.i256 = call %core__lib__abi__dynamic_payload_size__ge513_8a42_1 v5; (v7.i256, v8.i1) = uaddo 32.i256 v6; br v8 block2 block3; @@ -7193,57 +7409,53 @@ func private %std__lib__evm__panic__impl_trait_Panic_bf0a__payload_size_1e4f_1(v return v7; } -func private %core__lib__abi__trait_AbiSize__payload_size__ge513_3812(v0.i256) -> i256 { - block0: - v1.*i256 = alloca i256; - mstore v1 v0 i256; - jump block1; - - block1: - return 32.i256; -} - -func private %core__lib__abi__trait_AbiSize__payload_size__ge513_3812_0(v0.i256) -> i256 { +func private %core__lib__abi__impl_trait_String_c06e__payload_size__g3eb7_50d8(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; jump block1; block1: - return 32.i256; -} + v3.i256 = mload v1 i256; + v4.i256 = call %core__lib__num__impl_trait_String_8f88__to_word__g3eb7_852f v3; + v5.i256 = call %core__lib__abi__packed_string_len_3496 v4; + v6.i256 = call %core__lib__abi__round_up_words_e15b v5; + (v7.i256, v8.i1) = uaddo 32.i256 v6; + br v8 block2 block3; -func private %core__lib__abi__trait_AbiSize__payload_size__ge513_3812_1(v0.i256) -> i256 { - block0: - v1.*i256 = alloca i256; - mstore v1 v0 i256; - jump block1; + block2: + mstore 0.i256 35408467139433450592217433187231851964531694900788300625387963629091585785856.i256 i256; + mstore 4.i256 17.i256 i256; + evm_revert 0.i256 36.i256; - block1: - return 32.i256; + block3: + return v7; } -func private %core__lib__abi__trait_AbiSize__payload_size__ge513_77e5(v0.i256) -> i256 { +func private %core__lib__abi__impl_trait_String_c06e__payload_size__g3eb7_50d8_0(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; jump block1; block1: - return 32.i256; -} + v3.i256 = mload v1 i256; + v4.i256 = call %core__lib__num__impl_trait_String_8f88__to_word__g3eb7_852f_0 v3; + v5.i256 = call %core__lib__abi__packed_string_len_3496_0 v4; + v6.i256 = call %core__lib__abi__round_up_words_e15b_0 v5; + (v7.i256, v8.i1) = uaddo 32.i256 v6; + br v8 block2 block3; -func private %core__lib__abi__trait_AbiSize__payload_size__ge513_77e5_0(v0.i256) -> i256 { - block0: - v1.*i256 = alloca i256; - mstore v1 v0 i256; - jump block1; + block2: + mstore 0.i256 35408467139433450592217433187231851964531694900788300625387963629091585785856.i256 i256; + mstore 4.i256 17.i256 i256; + evm_revert 0.i256 36.i256; - block1: - return 32.i256; + block3: + return v7; } -func private %core__lib__abi__impl_trait_String_c06e__payload_size__gc7cf_9b7d(v0.i256) -> i256 { +func private %core__lib__abi__impl_trait_String_c06e__payload_size__gc7cf_5272(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -7251,9 +7463,9 @@ func private %core__lib__abi__impl_trait_String_c06e__payload_size__gc7cf_9b7d(v block1: v3.i256 = mload v1 i256; - v4.i256 = call %core__lib__num__impl_trait_String_8f88__to_word__gc7cf_9de4 v3; - v5.i256 = call %core__lib__abi__packed_string_len_ecb6 v4; - v6.i256 = call %core__lib__abi__round_up_words_a41d v5; + v4.i256 = call %core__lib__num__impl_trait_String_8f88__to_word__gc7cf_593d v3; + v5.i256 = call %core__lib__abi__packed_string_len_e2e5 v4; + v6.i256 = call %core__lib__abi__round_up_words_b9e2 v5; (v7.i256, v8.i1) = uaddo 32.i256 v6; br v8 block2 block3; @@ -7266,7 +7478,7 @@ func private %core__lib__abi__impl_trait_String_c06e__payload_size__gc7cf_9b7d(v return v7; } -func private %core__lib__abi__impl_trait_String_c06e__payload_size__gc7cf_9b7d_0(v0.i256) -> i256 { +func private %core__lib__abi__impl_trait_String_c06e__payload_size__gc7cf_5272_0(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -7274,9 +7486,9 @@ func private %core__lib__abi__impl_trait_String_c06e__payload_size__gc7cf_9b7d_0 block1: v3.i256 = mload v1 i256; - v4.i256 = call %core__lib__num__impl_trait_String_8f88__to_word__gc7cf_9de4_0 v3; - v5.i256 = call %core__lib__abi__packed_string_len_ecb6_0 v4; - v6.i256 = call %core__lib__abi__round_up_words_a41d_0 v5; + v4.i256 = call %core__lib__num__impl_trait_String_8f88__to_word__gc7cf_593d_0 v3; + v5.i256 = call %core__lib__abi__packed_string_len_e2e5_0 v4; + v6.i256 = call %core__lib__abi__round_up_words_b9e2_0 v5; (v7.i256, v8.i1) = uaddo 32.i256 v6; br v8 block2 block3; @@ -7289,17 +7501,7 @@ func private %core__lib__abi__impl_trait_String_c06e__payload_size__gc7cf_9b7d_0 return v7; } -func private %core__lib__abi__trait_AbiSize__payload_size__ge513_a6ac(v0.i256) -> i256 { - block0: - v1.*i256 = alloca i256; - mstore v1 v0 i256; - jump block1; - - block1: - return 32.i256; -} - -func private %core__lib__abi__trait_AbiSize__payload_size__ge513_a6ac_0(v0.i256) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__ge513_737b(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -7309,7 +7511,7 @@ func private %core__lib__abi__trait_AbiSize__payload_size__ge513_a6ac_0(v0.i256) return 32.i256; } -func private %core__lib__abi__trait_AbiSize__payload_size__ge513_a6ac_1(v0.i256) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__ge513_737b_0(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -7319,7 +7521,7 @@ func private %core__lib__abi__trait_AbiSize__payload_size__ge513_a6ac_1(v0.i256) return 32.i256; } -func private %core__lib__abi__trait_AbiSize__payload_size__ge513_a81c(v0.i256) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__ge513_737b_1(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -7329,103 +7531,57 @@ func private %core__lib__abi__trait_AbiSize__payload_size__ge513_a81c(v0.i256) - return 32.i256; } -func private %core__lib__abi__trait_AbiSize__payload_size__gda9b_b33d(v0.i1) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__g79ff_9e57(v0.i8) -> i256 { block0: - v1.*i1 = alloca i1; - mstore v1 v0 i1; + v1.*i8 = alloca i8; + mstore v1 v0 i8; jump block1; block1: return 32.i256; } -func private %core__lib__abi__trait_AbiSize__payload_size__gda9b_b33d_0(v0.i1) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__g79ff_9e57_0(v0.i8) -> i256 { block0: - v1.*i1 = alloca i1; - mstore v1 v0 i1; + v1.*i8 = alloca i8; + mstore v1 v0 i8; jump block1; block1: return 32.i256; } -func private %core__lib__abi__impl_trait_String_c06e__payload_size__g3eb7_dfa6(v0.i256) -> i256 { - block0: - v1.*i256 = alloca i256; - mstore v1 v0 i256; - jump block1; - - block1: - v3.i256 = mload v1 i256; - v4.i256 = call %core__lib__num__impl_trait_String_8f88__to_word__g3eb7_2617 v3; - v5.i256 = call %core__lib__abi__packed_string_len_225d v4; - v6.i256 = call %core__lib__abi__round_up_words_b13c v5; - (v7.i256, v8.i1) = uaddo 32.i256 v6; - br v8 block2 block3; - - block2: - mstore 0.i256 35408467139433450592217433187231851964531694900788300625387963629091585785856.i256 i256; - mstore 4.i256 17.i256 i256; - evm_revert 0.i256 36.i256; - - block3: - return v7; -} - -func private %core__lib__abi__impl_trait_String_c06e__payload_size__g3eb7_dfa6_0(v0.i256) -> i256 { - block0: - v1.*i256 = alloca i256; - mstore v1 v0 i256; - jump block1; - - block1: - v3.i256 = mload v1 i256; - v4.i256 = call %core__lib__num__impl_trait_String_8f88__to_word__g3eb7_2617_0 v3; - v5.i256 = call %core__lib__abi__packed_string_len_225d_0 v4; - v6.i256 = call %core__lib__abi__round_up_words_b13c_0 v5; - (v7.i256, v8.i1) = uaddo 32.i256 v6; - br v8 block2 block3; - - block2: - mstore 0.i256 35408467139433450592217433187231851964531694900788300625387963629091585785856.i256 i256; - mstore 4.i256 17.i256 i256; - evm_revert 0.i256 36.i256; - - block3: - return v7; -} - -func private %core__lib__abi__trait_AbiSize__payload_size__g79ff_f3e8(v0.i8) -> i256 { - block0: - v1.*i8 = alloca i8; - mstore v1 v0 i8; +func private %core__lib__abi__trait_AbiSize__payload_size__ge513_a109(v0.i256) -> i256 { + block0: + v1.*i256 = alloca i256; + mstore v1 v0 i256; jump block1; block1: return 32.i256; } -func private %core__lib__abi__trait_AbiSize__payload_size__g79ff_f3e8_0(v0.i8) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__gda9b_ca77(v0.i1) -> i256 { block0: - v1.*i8 = alloca i8; - mstore v1 v0 i8; + v1.*i1 = alloca i1; + mstore v1 v0 i1; jump block1; block1: return 32.i256; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_0de4(v0.objref<@layout_4>) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__gda9b_ca77_0(v0.i1) -> i256 { block0: + v1.*i1 = alloca i1; + mstore v1 v0 i1; jump block1; block1: - v3.objref = obj.proj v0 1.i256; - v4.i256 = obj.load v3; - return v4; + return 32.i256; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_1f4c(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_0211(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -7436,7 +7592,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_1f4c(v0 return v6; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_1f4c_0(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_0476(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -7447,27 +7603,29 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_1f4c_0( return v6; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_2f14(v0.objref<@layout_4>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_0476_0(v0.objref<@layout_7>) -> i256 { block0: jump block1; block1: - v3.objref = obj.proj v0 1.i256; - v4.i256 = obj.load v3; - return v4; + v3.objref<@layout_6> = obj.proj v0 0.i256; + v5.objref = obj.proj v3 1.i256; + v6.i256 = obj.load v5; + return v6; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_2f14_0(v0.objref<@layout_4>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_0b03(v0.objref<@layout_7>) -> i256 { block0: jump block1; block1: - v3.objref = obj.proj v0 1.i256; - v4.i256 = obj.load v3; - return v4; + v3.objref<@layout_6> = obj.proj v0 0.i256; + v5.objref = obj.proj v3 1.i256; + v6.i256 = obj.load v5; + return v6; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_2f14_1(v0.objref<@layout_4>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__pos__gf13e_154a(v0.objref<@layout_4>) -> i256 { block0: jump block1; @@ -7477,17 +7635,18 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_2f14_1(v0.objr return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_324d(v0.objref<@layout_4>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_2600(v0.objref<@layout_7>) -> i256 { block0: jump block1; block1: - v3.objref = obj.proj v0 1.i256; - v4.i256 = obj.load v3; - return v4; + v3.objref<@layout_6> = obj.proj v0 0.i256; + v5.objref = obj.proj v3 1.i256; + v6.i256 = obj.load v5; + return v6; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_49de(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_294b(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -7498,7 +7657,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_49de(v0 return v6; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_6c2f(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_30f1(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -7509,17 +7668,18 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_6c2f(v0 return v6; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_6cac(v0.objref<@layout_4>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_335d(v0.objref<@layout_7>) -> i256 { block0: jump block1; block1: - v3.objref = obj.proj v0 1.i256; - v4.i256 = obj.load v3; - return v4; + v3.objref<@layout_6> = obj.proj v0 0.i256; + v5.objref = obj.proj v3 1.i256; + v6.i256 = obj.load v5; + return v6; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_6cfa(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_3cf7(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -7530,7 +7690,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_6cfa(v0 return v6; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_7119(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_4a33(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -7541,18 +7701,17 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_7119(v0 return v6; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_7b2b(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__pos__gf13e_6cf1(v0.objref<@layout_4>) -> i256 { block0: jump block1; block1: - v3.objref<@layout_6> = obj.proj v0 0.i256; - v5.objref = obj.proj v3 1.i256; - v6.i256 = obj.load v5; - return v6; + v3.objref = obj.proj v0 1.i256; + v4.i256 = obj.load v3; + return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_7b90(v0.objref<@layout_4>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__pos__gf13e_78fa(v0.objref<@layout_4>) -> i256 { block0: jump block1; @@ -7562,7 +7721,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_7b90(v0.objref return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_8aa3(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_95af(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -7573,18 +7732,17 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_8aa3(v0 return v6; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_9608(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__pos__gf13e_9e98(v0.objref<@layout_4>) -> i256 { block0: jump block1; block1: - v3.objref<@layout_6> = obj.proj v0 0.i256; - v5.objref = obj.proj v3 1.i256; - v6.i256 = obj.load v5; - return v6; + v3.objref = obj.proj v0 1.i256; + v4.i256 = obj.load v3; + return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_99ae(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_a977(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -7595,7 +7753,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_99ae(v0 return v6; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_a083(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_b42f(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -7606,7 +7764,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_a083(v0 return v6; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_a50d(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_b5f6(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -7617,7 +7775,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_a50d(v0 return v6; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_c459(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_bfd7(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -7628,7 +7786,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_c459(v0 return v6; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_c508(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_c123(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -7639,7 +7797,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_c508(v0 return v6; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_d8ed(v0.objref<@layout_4>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__pos__gf13e_caff(v0.objref<@layout_4>) -> i256 { block0: jump block1; @@ -7649,7 +7807,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_d8ed(v0.objref return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_e333(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_cb40(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -7660,7 +7818,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_e333(v0 return v6; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_eba7(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_d09f(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -7671,29 +7829,37 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_eba7(v0 return v6; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_f05c(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__pos__gf13e_f96a(v0.objref<@layout_4>) -> i256 { block0: jump block1; block1: - v3.objref<@layout_6> = obj.proj v0 0.i256; - v5.objref = obj.proj v3 1.i256; - v6.i256 = obj.load v5; - return v6; + v3.objref = obj.proj v0 1.i256; + v4.i256 = obj.load v3; + return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_f998(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__pos__gf13e_f96a_0(v0.objref<@layout_4>) -> i256 { block0: jump block1; block1: - v3.objref<@layout_6> = obj.proj v0 0.i256; - v5.objref = obj.proj v3 1.i256; - v6.i256 = obj.load v5; - return v6; + v3.objref = obj.proj v0 1.i256; + v4.i256 = obj.load v3; + return v4; +} + +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__pos__gf13e_f96a_1(v0.objref<@layout_4>) -> i256 { + block0: + jump block1; + + block1: + v3.objref = obj.proj v0 1.i256; + v4.i256 = obj.load v3; + return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_fe61(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_fab0(v0.objref<@layout_7>) -> i256 { block0: jump block1; @@ -7704,7 +7870,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_fe61(v0 return v6; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_09f7(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_006f(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -7714,7 +7880,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_0 v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_4b56 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_4e2d v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -7735,7 +7901,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_0 v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_f700 v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_c615 v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -7761,7 +7927,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_0 br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_0d5e(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_0c21(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -7771,7 +7937,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_0 v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_52e4 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_07b6 v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -7792,7 +7958,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_0 v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ebca v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_26bb v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -7818,7 +7984,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_0 br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_1898(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_1aa7(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -7828,7 +7994,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_1 v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_d29e v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_35ae v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -7849,7 +8015,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_1 v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_90b5 v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_5c59 v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -7875,7 +8041,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_1 br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_2418(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_263c(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -7885,7 +8051,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_2 v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_f69f v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_2275 v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -7906,7 +8072,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_2 v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_a844 v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_9b17 v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -7932,7 +8098,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_2 br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_2677(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_2714(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -7942,7 +8108,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_2 v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_6eac v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_5ce5 v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -7963,7 +8129,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_2 v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_dbef v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_9cbb v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -7989,7 +8155,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_2 br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_2ec5(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_2c65(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -7999,7 +8165,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_2 v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_acd0 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_9166 v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -8020,7 +8186,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_2 v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_5d2f v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_73ce v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -8046,7 +8212,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_2 br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_3bfe(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_318c(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -8056,7 +8222,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_3 v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_3fdb v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_ee15 v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -8077,7 +8243,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_3 v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_bd7e v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_9eec v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -8103,7 +8269,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_3 br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_44f9(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_4a63(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -8113,7 +8279,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_4 v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_5bb5 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_71f4 v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -8134,7 +8300,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_4 v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_2d1c v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_065e v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -8160,7 +8326,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_4 br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_50b8(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_5e27(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -8170,7 +8336,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_5 v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_54c0 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_bbe1 v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -8191,7 +8357,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_5 v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_3e3b v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_f905 v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -8217,7 +8383,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_5 br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_51c6(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_6967(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -8227,7 +8393,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_5 v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_8f90 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_4463 v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -8248,7 +8414,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_5 v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_47bf v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_554b v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -8274,7 +8440,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_5 br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_6776(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_6a1a(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -8284,7 +8450,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_6 v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_3194 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_3395 v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -8305,7 +8471,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_6 v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_f4a7 v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_0f90 v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -8331,7 +8497,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_6 br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_697f(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_6bac(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -8341,7 +8507,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_6 v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_8042 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_0d04 v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -8362,7 +8528,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_6 v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_71ef v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_8436 v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -8388,7 +8554,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_6 br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_7304(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_818b(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -8398,7 +8564,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_7 v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_8e49 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_8e63 v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -8419,7 +8585,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_7 v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_10fb v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_0352 v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -8445,7 +8611,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_7 br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_75ad(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_81c0(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -8455,7 +8621,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_7 v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_83a5 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_83ea v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -8476,7 +8642,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_7 v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_63c2 v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_aab2 v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -8502,7 +8668,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_7 br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_7676(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_8433(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -8512,7 +8678,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_7 v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_7aa7 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_70a8 v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -8533,7 +8699,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_7 v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_348a v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_b2b8 v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -8559,7 +8725,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_7 br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_7972(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_8702(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -8569,7 +8735,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_7 v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_07fa v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_6959 v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -8590,7 +8756,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_7 v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_4b4e v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_d912 v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -8616,7 +8782,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_7 br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_7ba8(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_89f1(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -8626,7 +8792,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_7 v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_9e12 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_6da2 v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -8647,7 +8813,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_7 v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ece9 v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_263b v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -8673,7 +8839,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_7 br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_83b2(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_8ecd(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -8683,7 +8849,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_8 v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_6aca v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_cf49 v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -8704,7 +8870,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_8 v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_8ba4 v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_407c v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -8730,7 +8896,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_8 br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_87d4(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_9615(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -8740,7 +8906,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_8 v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_8f13 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_9369 v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -8761,7 +8927,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_8 v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_2fc3 v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_fb5d v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -8787,7 +8953,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_8 br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_8be4(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_9fcb(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -8797,7 +8963,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_8 v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_c9e2 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_88ae v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -8818,7 +8984,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_8 v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_b2e2 v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_91e9 v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -8844,7 +9010,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_8 br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_8be4_0(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_a067(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -8854,7 +9020,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_8 v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_c9e2_0 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_afad v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -8875,7 +9041,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_8 v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_b2e2_0 v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_bf84 v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -8901,7 +9067,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_8 br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_8cb0(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_a234(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -8911,7 +9077,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_8 v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_c5d0 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_4160 v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -8932,7 +9098,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_8 v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_6fee v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_32ec v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -8958,7 +9124,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_8 br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_9212(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_a248(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -8968,7 +9134,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_9 v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_5fa6 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_73fa v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -8989,7 +9155,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_9 v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_c1bd v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_07fb v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -9015,7 +9181,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_9 br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_9246(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_c4c5(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -9025,7 +9191,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_9 v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_8379 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_adde v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -9046,7 +9212,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_9 v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_2cc5 v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_19d6 v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -9072,7 +9238,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_9 br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_9743(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_c69e(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -9082,7 +9248,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_9 v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_1af2 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_2fe2 v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -9103,7 +9269,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_9 v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_7f9b v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ab1f v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -9129,7 +9295,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_9 br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_a048(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_cd36(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -9139,7 +9305,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_a v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_af05 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_0f33 v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -9160,7 +9326,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_a v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_091f v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ac5e v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -9186,7 +9352,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_a br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_a40d(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_d4bc(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -9196,7 +9362,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_a v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_10c2 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_6712 v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -9217,7 +9383,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_a v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_aab1 v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_9453 v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -9243,7 +9409,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_a br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_a99d(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_daa2(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -9253,7 +9419,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_a v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_6679 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_8d19 v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -9274,7 +9440,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_a v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_8e1e v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_574c v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -9300,7 +9466,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_a br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_b3f4(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_dbb7(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -9310,7 +9476,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_b v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_7c3a v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_8e34 v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -9331,7 +9497,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_b v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_0ddd v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_dd6e v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -9357,7 +9523,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_b br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_bc48(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_dccf(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -9367,7 +9533,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_b v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_a6d8 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_0412 v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -9388,7 +9554,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_b v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_de6a v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_bd50 v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -9414,7 +9580,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_b br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_bffc(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_dccf_0(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -9424,7 +9590,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_b v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_8ee6 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_0412_0 v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -9445,7 +9611,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_b v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_142c v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_bd50_0 v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -9471,7 +9637,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_b br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_c0d0(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_e04a(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -9481,7 +9647,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_c v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_cf02 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_e616 v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -9502,7 +9668,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_c v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_f768 v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_36b9 v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -9528,7 +9694,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_c br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_d64a(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_e104(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -9538,7 +9704,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_d v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_5b55 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_fa36 v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -9559,7 +9725,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_d v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_a988 v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_fde6 v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -9585,7 +9751,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_d br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_da62(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_e429(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -9595,7 +9761,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_d v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_c5ca v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_101b v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -9616,7 +9782,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_d v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_3283 v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_c766 v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -9642,7 +9808,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_d br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_e05e(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_e531(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -9652,7 +9818,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_e v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_98ab v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_c70f v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -9673,7 +9839,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_e v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_8ac3 v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_705e v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -9699,7 +9865,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_e br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_e61f(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_ec4e(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -9709,7 +9875,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_e v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_4f68 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_5304 v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -9730,7 +9896,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_e v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_9d5e v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_5a55 v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -9756,7 +9922,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_e br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_ed8c(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_f31c(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -9766,7 +9932,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_e v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_6e05 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_e626 v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -9787,7 +9953,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_e v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_5ebd v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_51d2 v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -9813,7 +9979,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_e br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_fd97(v0.objref<@layout_7>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_f7e1(v0.objref<@layout_7>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -9823,7 +9989,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_f v5.objref<@layout_6> = obj.proj v0 0.i256; v6.objref<@layout_5> = obj.proj v5 0.i256; v7.@layout_5 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_d2a6 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_3ab5 v7; mstore v1 v8 i256; v9.objref<@layout_6> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -9844,7 +10010,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_f v29.objref<@layout_6> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_41fc v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_45b1 v28 v31; v34.objref<@layout_6> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -9953,7 +10119,7 @@ func private %std__lib__evm__effects__revert_error__geb2e_c430_1(v0.@layout_3) { evm_revert v12 v14; } -func private %core__lib__abi__round_up_words_a41d(v0.i256) -> i256 { +func private %core__lib__abi__round_up_words_b9e2(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -10005,7 +10171,7 @@ func private %core__lib__abi__round_up_words_a41d(v0.i256) -> i256 { return v20; } -func private %core__lib__abi__round_up_words_a41d_0(v0.i256) -> i256 { +func private %core__lib__abi__round_up_words_b9e2_0(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -10057,7 +10223,7 @@ func private %core__lib__abi__round_up_words_a41d_0(v0.i256) -> i256 { return v20; } -func private %core__lib__abi__round_up_words_b13c(v0.i256) -> i256 { +func private %core__lib__abi__round_up_words_e15b(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -10109,7 +10275,7 @@ func private %core__lib__abi__round_up_words_b13c(v0.i256) -> i256 { return v20; } -func private %core__lib__abi__round_up_words_b13c_0(v0.i256) -> i256 { +func private %core__lib__abi__round_up_words_e15b_0(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -10176,7 +10342,7 @@ func private %set__g2163(v0.@layout_0, v1.i256) { return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_12ee(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_15e8(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10189,7 +10355,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_12 return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_2563(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_1a31(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10202,7 +10368,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_25 return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_48f6(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_2d32(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10210,12 +10376,12 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_48 block1: v3.i256 = mload v2 i256; - v6.objref = obj.proj v0 1.i256; + v6.objref = obj.proj v0 0.i256; obj.store v6 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_4c89(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_594b(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10228,7 +10394,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_4c return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_58b5(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_6b69(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10241,7 +10407,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_58 return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_5ab6(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_7543(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10254,7 +10420,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_5a return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_6e32(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_8f6d(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10267,7 +10433,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_6e return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_70f3(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_9088(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10280,7 +10446,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_70 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_750c(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_9117(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10288,12 +10454,12 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_750c(v0.o block1: v3.i256 = mload v2 i256; - v6.objref = obj.proj v0 0.i256; + v6.objref = obj.proj v0 1.i256; obj.store v6 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_844b(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_970f(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10301,12 +10467,12 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_844b(v0.o block1: v3.i256 = mload v2 i256; - v6.objref = obj.proj v0 0.i256; + v6.objref = obj.proj v0 1.i256; obj.store v6 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_9157(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_9ec2(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10319,7 +10485,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_91 return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_b40e(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_a30c(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10327,12 +10493,12 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_b4 block1: v3.i256 = mload v2 i256; - v6.objref = obj.proj v0 1.i256; + v6.objref = obj.proj v0 0.i256; obj.store v6 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_bb8a(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_a4a5(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10345,7 +10511,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_bb return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_c5ff(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_a559(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10353,12 +10519,12 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_c5ff(v0.o block1: v3.i256 = mload v2 i256; - v6.objref = obj.proj v0 0.i256; + v6.objref = obj.proj v0 1.i256; obj.store v6 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_c671(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_a73f(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10371,7 +10537,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_c6 return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_c7f2(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_b256(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10379,12 +10545,12 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_c7 block1: v3.i256 = mload v2 i256; - v6.objref = obj.proj v0 1.i256; + v6.objref = obj.proj v0 0.i256; obj.store v6 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_cc2c(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_b5ff(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10397,7 +10563,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_cc2c(v0.o return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_d49b(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_b5ff_0(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10405,12 +10571,12 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_d4 block1: v3.i256 = mload v2 i256; - v6.objref = obj.proj v0 1.i256; + v6.objref = obj.proj v0 0.i256; obj.store v6 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_d49b_0(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_b5ff_1(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10418,12 +10584,12 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_d4 block1: v3.i256 = mload v2 i256; - v6.objref = obj.proj v0 1.i256; + v6.objref = obj.proj v0 0.i256; obj.store v6 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_d709(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_bd03(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10436,7 +10602,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_d7 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_e03a(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_c90f(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10444,12 +10610,12 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_e03a(v0.o block1: v3.i256 = mload v2 i256; - v6.objref = obj.proj v0 0.i256; + v6.objref = obj.proj v0 1.i256; obj.store v6 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_e03a_0(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_d8cd(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10457,12 +10623,12 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_e03a_0(v0 block1: v3.i256 = mload v2 i256; - v6.objref = obj.proj v0 0.i256; + v6.objref = obj.proj v0 1.i256; obj.store v6 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_e03a_1(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_d8cd_0(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10470,12 +10636,12 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_e03a_1(v0 block1: v3.i256 = mload v2 i256; - v6.objref = obj.proj v0 0.i256; + v6.objref = obj.proj v0 1.i256; obj.store v6 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_e5ad(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_d942(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10483,12 +10649,12 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_e5 block1: v3.i256 = mload v2 i256; - v6.objref = obj.proj v0 1.i256; + v6.objref = obj.proj v0 0.i256; obj.store v6 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_eef1(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_d9a2(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10501,7 +10667,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_ee return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_f8ba(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_ea14(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10509,12 +10675,12 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_f8 block1: v3.i256 = mload v2 i256; - v6.objref = obj.proj v0 1.i256; + v6.objref = obj.proj v0 0.i256; obj.store v6 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_fa20(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_edcf(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10522,7 +10688,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_fa20(v0.o block1: v3.i256 = mload v2 i256; - v6.objref = obj.proj v0 0.i256; + v6.objref = obj.proj v0 1.i256; obj.store v6 v3; return; } @@ -10591,7 +10757,7 @@ func private %std__lib__evm__storage_map__impl_StorageMap_9f54__set__ga15b_f7f7_ return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_0f4a(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_16b9(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10599,12 +10765,13 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_0f4a(v0.ob block1: v3.i256 = mload v2 i256; - v6.objref = obj.proj v0 1.i256; - obj.store v6 v3; + v6.objref<@layout_6> = obj.proj v0 0.i256; + v8.objref = obj.proj v6 1.i256; + obj.store v8 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_1087(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_3486(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10618,7 +10785,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_108 return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_1acb(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_3657(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10626,13 +10793,12 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_1ac block1: v3.i256 = mload v2 i256; - v6.objref<@layout_6> = obj.proj v0 0.i256; - v8.objref = obj.proj v6 1.i256; - obj.store v8 v3; + v6.objref = obj.proj v0 1.i256; + obj.store v6 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_27c4(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_3e2a(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10646,7 +10812,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_27c return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_355a(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_4253(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10660,7 +10826,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_355 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_3857(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_478f(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10673,7 +10839,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_3857(v0.ob return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_4e67(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_478f_0(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10686,7 +10852,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_4e67(v0.ob return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_4e67_0(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_478f_1(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10699,7 +10865,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_4e67_0(v0. return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_4e67_1(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_4954(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10707,12 +10873,13 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_4e67_1(v0. block1: v3.i256 = mload v2 i256; - v6.objref = obj.proj v0 1.i256; - obj.store v6 v3; + v6.objref<@layout_6> = obj.proj v0 0.i256; + v8.objref = obj.proj v6 1.i256; + obj.store v8 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_4f21(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_7712(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10726,7 +10893,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_4f2 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_597d(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_81cf(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10734,12 +10901,13 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_597d(v0.ob block1: v3.i256 = mload v2 i256; - v6.objref = obj.proj v0 1.i256; - obj.store v6 v3; + v6.objref<@layout_6> = obj.proj v0 0.i256; + v8.objref = obj.proj v6 1.i256; + obj.store v8 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_5ddd(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_879e(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10753,7 +10921,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_5dd return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_5ecf(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_a1f6(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10767,7 +10935,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_5ec return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_662e(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_aa42(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10775,13 +10943,12 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_662 block1: v3.i256 = mload v2 i256; - v6.objref<@layout_6> = obj.proj v0 0.i256; - v8.objref = obj.proj v6 1.i256; - obj.store v8 v3; + v6.objref = obj.proj v0 1.i256; + obj.store v6 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_7410(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_aabb(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10789,12 +10956,13 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_7410(v0.ob block1: v3.i256 = mload v2 i256; - v6.objref = obj.proj v0 1.i256; - obj.store v6 v3; + v6.objref<@layout_6> = obj.proj v0 0.i256; + v8.objref = obj.proj v6 1.i256; + obj.store v8 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_8814(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_ae91(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10808,7 +10976,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_881 return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_888f(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_b5a8(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10822,7 +10990,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_888 return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_8a2d(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_b891(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10830,13 +10998,12 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_8a2 block1: v3.i256 = mload v2 i256; - v6.objref<@layout_6> = obj.proj v0 0.i256; - v8.objref = obj.proj v6 1.i256; - obj.store v8 v3; + v6.objref = obj.proj v0 1.i256; + obj.store v6 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_a128(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_b917(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10850,7 +11017,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_a12 return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_aced(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_b917_0(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10864,7 +11031,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_ace return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_aee2(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_c577(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10878,7 +11045,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_aee return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_b6ef(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_c622(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10891,7 +11058,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_b6ef(v0.ob return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_c04d(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_cdee(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10899,13 +11066,12 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_c04 block1: v3.i256 = mload v2 i256; - v6.objref<@layout_6> = obj.proj v0 0.i256; - v8.objref = obj.proj v6 1.i256; - obj.store v8 v3; + v6.objref = obj.proj v0 1.i256; + obj.store v6 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_d790(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_cf9e(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10919,7 +11085,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_d79 return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_d790_0(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_d306(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10933,7 +11099,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_d79 return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_e2de(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_e646(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -10947,7 +11113,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_e2d return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_ea2a(v0.objref<@layout_7>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_ed4d(v0.objref<@layout_7>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -11601,7 +11767,15 @@ func private %std__lib__evm__word__impl_trait_u256_1f9e__to_word_05d2_0(v0.i256) return v0; } -func private %core__lib__num__impl_trait_String_8f88__to_word__g3eb7_2617(v0.i256) -> i256 { +func private %std__lib__evm__word__impl_trait_u256_1f9e__to_word_3e9f(v0.i256) -> i256 { + block0: + jump block1; + + block1: + return v0; +} + +func private %core__lib__num__impl_trait_String_8f88__to_word__gc7cf_593d(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -11612,7 +11786,7 @@ func private %core__lib__num__impl_trait_String_8f88__to_word__g3eb7_2617(v0.i25 return v2; } -func private %core__lib__num__impl_trait_String_8f88__to_word__g3eb7_2617_0(v0.i256) -> i256 { +func private %core__lib__num__impl_trait_String_8f88__to_word__gc7cf_593d_0(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -11623,26 +11797,43 @@ func private %core__lib__num__impl_trait_String_8f88__to_word__g3eb7_2617_0(v0.i return v2; } -func private %std__lib__evm__word__impl_trait_u256_1f9e__to_word_3e9f(v0.i256) -> i256 { +func private %core__lib__num__impl_trait_u32_4335__to_word_6874(v0.i32) -> i256 { block0: + v1.*i32 = alloca i32; + mstore v1 v0 i32; jump block1; block1: - return v0; + v2.i32 = mload v1 i32; + v3.i256 = zext v2 i256; + return v3; } -func private %core__lib__num__impl_trait_String_8f88__to_word__gc7cf_810c(v0.i256) -> i256 { +func private %core__lib__num__impl_trait_u32_4335__to_word_6874_0(v0.i32) -> i256 { block0: - v1.*i256 = alloca i256; - mstore v1 v0 i256; + v1.*i32 = alloca i32; + mstore v1 v0 i32; jump block1; block1: - v2.i256 = mload v1 i256; - return v2; + v2.i32 = mload v1 i32; + v3.i256 = zext v2 i256; + return v3; +} + +func private %core__lib__num__impl_trait_u32_4335__to_word_6874_1(v0.i32) -> i256 { + block0: + v1.*i32 = alloca i32; + mstore v1 v0 i32; + jump block1; + + block1: + v2.i32 = mload v1 i32; + v3.i256 = zext v2 i256; + return v3; } -func private %core__lib__num__impl_trait_String_8f88__to_word__gc7cf_9de4(v0.i256) -> i256 { +func private %core__lib__num__impl_trait_String_8f88__to_word__g3eb7_852f(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -11653,7 +11844,7 @@ func private %core__lib__num__impl_trait_String_8f88__to_word__gc7cf_9de4(v0.i25 return v2; } -func private %core__lib__num__impl_trait_String_8f88__to_word__gc7cf_9de4_0(v0.i256) -> i256 { +func private %core__lib__num__impl_trait_String_8f88__to_word__g3eb7_852f_0(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -11664,7 +11855,43 @@ func private %core__lib__num__impl_trait_String_8f88__to_word__gc7cf_9de4_0(v0.i return v2; } -func private %core__lib__num__impl_trait_String_8f88__to_word__g3eb7_e974(v0.i256) -> i256 { +func private %core__lib__num__impl_trait_T_1e89__to_word__g6338_b832(v0.i32) -> i256 { + block0: + v1.*i32 = alloca i32; + mstore v1 v0 i32; + jump block1; + + block1: + v2.i32 = mload v1 i32; + v3.i256 = call %core__lib__num__impl_trait_u32_4335__to_word_6874 v2; + return v3; +} + +func private %core__lib__num__impl_trait_T_1e89__to_word__g6338_b832_0(v0.i32) -> i256 { + block0: + v1.*i32 = alloca i32; + mstore v1 v0 i32; + jump block1; + + block1: + v2.i32 = mload v1 i32; + v3.i256 = call %core__lib__num__impl_trait_u32_4335__to_word_6874_0 v2; + return v3; +} + +func private %core__lib__num__impl_trait_T_1e89__to_word__g6338_b832_1(v0.i32) -> i256 { + block0: + v1.*i32 = alloca i32; + mstore v1 v0 i32; + jump block1; + + block1: + v2.i32 = mload v1 i32; + v3.i256 = call %core__lib__num__impl_trait_u32_4335__to_word_6874_1 v2; + return v3; +} + +func private %core__lib__num__impl_trait_String_8f88__to_word__g3eb7_d36e(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -11693,6 +11920,17 @@ func private %impl_trait_bool__to_word(v0.i1) -> i256 { return v4; } +func private %core__lib__num__impl_trait_String_8f88__to_word__gc7cf_fa45(v0.i256) -> i256 { + block0: + v1.*i256 = alloca i256; + mstore v1 v0 i256; + jump block1; + + block1: + v2.i256 = mload v1 i256; + return v2; +} + func private %standalone_erc20__erc20__transfer__g5c3f_6cc9(v0.@layout_0, v1.@layout_0, v2.i256, v3.i256, v4.objref<@layout_2>) { block0: v5.objref<@layout_0> = obj.alloc @layout_0; @@ -11851,7 +12089,7 @@ func private %standalone_erc20__erc20__transfer__g5c3f_c11b(v0.@layout_0, v1.@la return; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_091f(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_0352(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -11873,7 +12111,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_0ddd(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_065e(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -11895,7 +12133,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_10fb(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_07fb(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -11917,7 +12155,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_142c(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_0f90(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -11939,7 +12177,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_2cc5(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_19d6(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -11961,7 +12199,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_2d1c(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_263b(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -11983,7 +12221,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_2fc3(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_26bb(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12005,7 +12243,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_3283(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_32ec(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12027,7 +12265,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_348a(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_36b9(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12049,7 +12287,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_3e3b(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_407c(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12071,7 +12309,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_41fc(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_45b1(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12093,7 +12331,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_47bf(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_51d2(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12115,7 +12353,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_4b4e(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_554b(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12137,7 +12375,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_5d2f(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_574c(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12159,7 +12397,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_5ebd(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_5a55(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12181,7 +12419,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_63c2(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_5c59(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12203,7 +12441,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_6fee(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_705e(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12225,7 +12463,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_71ef(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_73ce(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12247,7 +12485,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_7f9b(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_8436(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12269,7 +12507,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_8ac3(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_91e9(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12291,7 +12529,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_8ba4(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_9453(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12313,7 +12551,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_8e1e(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_9b17(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12335,7 +12573,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_90b5(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_9cbb(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12357,7 +12595,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_9d5e(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_9eec(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12379,7 +12617,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_a844(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_aab2(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12401,7 +12639,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_a988(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ab1f(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12423,7 +12661,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_aab1(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ac5e(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12445,7 +12683,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_b2e2(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_b2b8(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12467,7 +12705,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_b2e2_0(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_bd50(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12489,7 +12727,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_bd7e(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_bd50_0(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12511,7 +12749,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_c1bd(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_bf84(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12533,7 +12771,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_dbef(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_c615(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12555,7 +12793,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_de6a(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_c766(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12577,7 +12815,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ebca(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_d912(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12599,7 +12837,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ece9(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_dd6e(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12621,7 +12859,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_f4a7(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_f905(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12643,7 +12881,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_f700(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_fb5d(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -12665,7 +12903,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_f768(v0.@layout_5, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_fde6(v0.@layout_5, v1.i256) -> i256 { block0: v2.objref<@layout_5> = obj.alloc @layout_5; v3.*i256 = alloca i256; @@ -13141,7 +13379,7 @@ func private %std__lib__evm__storage_map__impl_trait_Address_4d4e__write_key_fab return v10; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_0617(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_058e(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -13158,7 +13396,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_0617(v0 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_124f(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_07a7(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -13175,7 +13413,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_124f(v0 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_1ad1(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_0c14(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -13192,7 +13430,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_1ad1(v0 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_406a(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_1c16(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -13209,7 +13447,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_406a(v0 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_406a_0(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_36d8(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -13226,7 +13464,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_406a_0( return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_406a_1(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_4ddb(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -13243,7 +13481,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_406a_1( return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_406d(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_569b(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -13260,7 +13498,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_406d(v0 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_4fb9(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_6cb1(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -13277,7 +13515,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_4fb9(v0 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_4fb9_0(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_6cb1_0(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -13294,7 +13532,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_4fb9_0( return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_4fb9_1(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_6cb1_1(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -13311,7 +13549,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_4fb9_1( return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_7a95(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_9416(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -13328,7 +13566,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_7a95(v0 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_7b53(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_9416_0(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -13345,7 +13583,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_7b53(v0 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_8727(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_9416_1(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -13362,7 +13600,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_8727(v0 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_8eda(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_ac29(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -13379,7 +13617,37 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_8eda(v0 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_8f67(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word_at__gf13e_02b7(v0.objref<@layout_4>, v1.i256, v2.i256) { + block0: + v3.*i256 = alloca i256; + v4.*i256 = alloca i256; + mstore v3 v1 i256; + mstore v4 v2 i256; + jump block1; + + block1: + v5.i256 = mload v3 i256; + v6.i256 = mload v4 i256; + mstore v5 v6 i256; + return; +} + +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word_at__gf13e_8899(v0.objref<@layout_4>, v1.i256, v2.i256) { + block0: + v3.*i256 = alloca i256; + v4.*i256 = alloca i256; + mstore v3 v1 i256; + mstore v4 v2 i256; + jump block1; + + block1: + v5.i256 = mload v3 i256; + v6.i256 = mload v4 i256; + mstore v5 v6 i256; + return; +} + +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_cf0c(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -13396,7 +13664,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_8f67(v0 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_aa60(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_d941(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -13413,37 +13681,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_aa60(v0 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_at_7ecd(v0.objref<@layout_4>, v1.i256, v2.i256) { - block0: - v3.*i256 = alloca i256; - v4.*i256 = alloca i256; - mstore v3 v1 i256; - mstore v4 v2 i256; - jump block1; - - block1: - v5.i256 = mload v3 i256; - v6.i256 = mload v4 i256; - mstore v5 v6 i256; - return; -} - -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_at_e460(v0.objref<@layout_4>, v1.i256, v2.i256) { - block0: - v3.*i256 = alloca i256; - v4.*i256 = alloca i256; - mstore v3 v1 i256; - mstore v4 v2 i256; - jump block1; - - block1: - v5.i256 = mload v3 i256; - v6.i256 = mload v4 i256; - mstore v5 v6 i256; - return; -} - -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_d813(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_db15(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -13460,7 +13698,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_d813(v0 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_eb98(v0.objref<@layout_4>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_ed14(v0.objref<@layout_4>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; diff --git a/crates/codegen/tests/fixtures/sonatina_ir/event_logging.snap b/crates/codegen/tests/fixtures/sonatina_ir/event_logging.snap index 9e14970edb..bcafedb2e9 100644 --- a/crates/codegen/tests/fixtures/sonatina_ir/event_logging.snap +++ b/crates/codegen/tests/fixtures/sonatina_ir/event_logging.snap @@ -1,5 +1,6 @@ --- source: crates/codegen/tests/sonatina_ir.rs +assertion_line: 403 expression: output input_file: crates/codegen/tests/fixtures/event_logging.fe --- @@ -138,6 +139,15 @@ func private %encode_abi_payload(v0.i256) -> @layout_5 { block0: jump block1; + block1: + v2.@layout_5 = call %encode_abi_payload_abi v0; + return v2; +} + +func private %encode_abi_payload_abi(v0.i256) -> @layout_5 { + block0: + jump block1; + block1: v2.@layout_5 = call %encode_alloc v0; return v2; diff --git a/crates/codegen/tests/fixtures/sonatina_ir/event_logging_via_log.snap b/crates/codegen/tests/fixtures/sonatina_ir/event_logging_via_log.snap index f1a2a5e398..caff398dda 100644 --- a/crates/codegen/tests/fixtures/sonatina_ir/event_logging_via_log.snap +++ b/crates/codegen/tests/fixtures/sonatina_ir/event_logging_via_log.snap @@ -1,5 +1,6 @@ --- source: crates/codegen/tests/sonatina_ir.rs +assertion_line: 403 expression: output input_file: crates/codegen/tests/fixtures/event_logging_via_log.fe --- @@ -147,6 +148,15 @@ func private %encode_abi_payload(v0.i256) -> @layout_5 { block0: jump block1; + block1: + v2.@layout_5 = call %encode_abi_payload_abi v0; + return v2; +} + +func private %encode_abi_payload_abi(v0.i256) -> @layout_5 { + block0: + jump block1; + block1: v2.@layout_5 = call %encode_alloc v0; return v2; diff --git a/crates/codegen/tests/fixtures/sonatina_ir/high_level_contract.snap b/crates/codegen/tests/fixtures/sonatina_ir/high_level_contract.snap index 3b32cd66a5..6557ea3e98 100644 --- a/crates/codegen/tests/fixtures/sonatina_ir/high_level_contract.snap +++ b/crates/codegen/tests/fixtures/sonatina_ir/high_level_contract.snap @@ -1,5 +1,6 @@ --- source: crates/codegen/tests/sonatina_ir.rs +assertion_line: 403 expression: output input_file: crates/codegen/tests/fixtures/high_level_contract.fe --- @@ -62,7 +63,7 @@ func private %abi_field_size(v0.i256) -> i256 { block1: v2.i256 = mload v1 i256; - v3.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_9950_0 v2; + v3.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_7fea_0 v2; br 0.i1 block2 block3; block2: @@ -96,7 +97,7 @@ func private %abi_single_root_size(v0.i256) -> i256 { return v3; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_2196(v0.objref<@layout_2>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_24e0(v0.objref<@layout_2>) -> i256 { block0: jump block1; @@ -106,7 +107,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_2196(v return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_90a5(v0.objref<@layout_2>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_5a82(v0.objref<@layout_2>) -> i256 { block0: jump block1; @@ -116,7 +117,17 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_90a5(v return v4; } -func private %impl_trait_SolEncoder__base(v0.objref<@layout_3>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_807c(v0.objref<@layout_3>) -> i256 { + block0: + jump block1; + + block1: + v3.objref = obj.proj v0 0.i256; + v4.i256 = obj.load v3; + return v4; +} + +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_807c_0(v0.objref<@layout_3>) -> i256 { block0: jump block1; @@ -428,28 +439,33 @@ func private %contract_runtime_root_EchoContract() { jump block1; block1: - v1.i256 = evm_calldata_load 0.i256; - v3.i256 = shr 224.i256 v1; - v4.i32 = trunc v3 i32; - br_table v4 block2 (1.i32 block3) (2.i32 block4) (3.i32 block5); + v1.i256 = evm_calldata_size; + v3.i1 = lt v1 4.i256; + br v3 block2 block3; block2: evm_revert 0.i256 0.i256; block3: + v5.i256 = evm_calldata_load 0.i256; + v7.i256 = shr 224.i256 v5; + v8.i32 = trunc v7 i32; + br_table v8 block2 (1.i32 block4) (2.i32 block5) (3.i32 block6); + + block4: call %contract_recv_abi_EchoContract_1; unreachable; - block4: + block5: call %contract_recv_abi_EchoContract_2; unreachable; - block5: + block6: call %contract_recv_abi_EchoContract_3; unreachable; } -func private %core__lib__abi__decode_field__g3854_6f45(v0.objref<@layout_2>) -> i256 { +func private %core__lib__abi__decode_field__g3854_ad5b(v0.objref<@layout_2>) -> i256 { block0: jump block1; @@ -457,9 +473,9 @@ func private %core__lib__abi__decode_field__g3854_6f45(v0.objref<@layout_2>) -> br 0.i1 block2 block3; block2: - v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_1759 v0; - v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_2196 v0; - v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_f11f v0; + v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_2ece v0; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_24e0 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_4a39 v0; (v6.i256, v7.i1) = uaddo v4 v3; br v7 block5 block6; @@ -467,7 +483,7 @@ func private %core__lib__abi__decode_field__g3854_6f45(v0.objref<@layout_2>) -> jump block4; block4: - v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_9510 v0; + v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_d44b v0; return v23; block5: @@ -476,16 +492,16 @@ func private %core__lib__abi__decode_field__g3854_6f45(v0.objref<@layout_2>) -> evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_3ff5 v0 v6; - v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_2196 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_6dc7 v0 v15; - v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_9510 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_3ff5 v0 v4; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_6dc7 v0 v5; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_8643 v0 v6; + v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_24e0 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_3a51 v0 v15; + v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_d44b v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_8643 v0 v4; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_3a51 v0 v5; return v17; } -func private %core__lib__abi__decode_field__g3854_ad5b(v0.objref<@layout_2>) -> i256 { +func private %core__lib__abi__decode_field__g3854_e16c(v0.objref<@layout_2>) -> i256 { block0: jump block1; @@ -493,9 +509,9 @@ func private %core__lib__abi__decode_field__g3854_ad5b(v0.objref<@layout_2>) -> br 0.i1 block2 block3; block2: - v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_5e30 v0; - v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_90a5 v0; - v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_21c1 v0; + v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_3026 v0; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_5a82 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_bf61 v0; (v6.i256, v7.i1) = uaddo v4 v3; br v7 block5 block6; @@ -503,7 +519,7 @@ func private %core__lib__abi__decode_field__g3854_ad5b(v0.objref<@layout_2>) -> jump block4; block4: - v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_1f61 v0; + v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_981c v0; return v23; block5: @@ -512,24 +528,15 @@ func private %core__lib__abi__decode_field__g3854_ad5b(v0.objref<@layout_2>) -> evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_0c04 v0 v6; - v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_90a5 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_e59d v0 v15; - v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_1f61 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_0c04 v0 v4; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_e59d v0 v5; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_9743 v0 v6; + v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_5a82 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_3e2b v0 v15; + v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_981c v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_9743 v0 v4; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_3e2b v0 v5; return v17; } -func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_1f61(v0.objref<@layout_2>) -> i256 { - block0: - jump block1; - - block1: - v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_bf2c v0; - return v2; -} - func private %impl_trait_GetX__decode_payload__gf196(v0.objref<@layout_2>) { block0: jump block1; @@ -551,8 +558,8 @@ func private %decode_payload__g4770(v0.objref<@layout_2>) -> @layout_4 { jump block1; block1: - v2.i256 = call %core__lib__abi__decode_field__g3854_6f45 v0; - v3.i256 = call %core__lib__abi__decode_field__g3854_6f45 v0; + v2.i256 = call %core__lib__abi__decode_field__g3854_e16c v0; + v3.i256 = call %core__lib__abi__decode_field__g3854_e16c v0; v4.objref<@layout_4> = obj.alloc @layout_4; v6.objref = obj.proj v4 0.i256; obj.store v6 v2; @@ -562,12 +569,12 @@ func private %decode_payload__g4770(v0.objref<@layout_2>) -> @layout_4 { return v9; } -func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_9510(v0.objref<@layout_2>) -> i256 { +func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_981c(v0.objref<@layout_2>) -> i256 { block0: jump block1; block1: - v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_16c3 v0; + v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_af1a v0; return v2; } @@ -584,6 +591,15 @@ func private %impl_trait_Echo__decode_payload__gf196(v0.objref<@layout_2>) -> @l return v6; } +func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_d44b(v0.objref<@layout_2>) -> i256 { + block0: + jump block1; + + block1: + v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_f885 v0; + return v2; +} + func private %decoder_new(v0.@layout_0) -> @layout_2 { block0: jump block1; @@ -598,7 +614,7 @@ func private %encode(v0.i256, v1.objref<@layout_3>) { jump block1; block1: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_d116 v1 v0; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_f389 v1 v0; return; } @@ -610,8 +626,8 @@ func private %encode_field(v0.i256, v1.objref<@layout_3>, v2.i256) { br 0.i1 block2 block3; block2: - v5.i256 = call %impl_trait_SolEncoder__base v1; - v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_9950 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_807c v1; + v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_7fea v0; v9.i256 = mload v2 i256; (v10.i256, v11.i1) = usubo v9 v5; br v11 block5 block6; @@ -629,15 +645,15 @@ func private %encode_field(v0.i256, v1.objref<@layout_3>, v2.i256) { evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_6213 v1 v10; - v19.i256 = call %impl_trait_SolEncoder__pos v1; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_0a0b v1 v10; + v19.i256 = call %pos__gf13e v1; v21.i256 = mload v2 i256; - call %impl_trait_SolEncoder__set_base v1 v21; + call %set_base__gf13e v1 v21; v23.i256 = mload v2 i256; - call %impl_trait_SolEncoder__set_pos v1 v23; + call %set_pos__gf13e v1 v23; call %encode v0 v1; - call %impl_trait_SolEncoder__set_base v1 v5; - call %impl_trait_SolEncoder__set_pos v1 v19; + call %set_base__gf13e v1 v5; + call %set_pos__gf13e v1 v19; v30.i256 = mload v2 i256; (v32.i256, v33.i1) = uaddo v30 v8; br v33 block5 block7; @@ -653,7 +669,7 @@ func private %encode_single_root(v0.i256, v1.objref<@layout_3>) { jump block1; block1: - v4.i256 = call %impl_trait_SolEncoder__base v1; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_807c v1; (v6.i256, v7.i1) = uaddo v4 32.i256; br v7 block2 block3; @@ -683,7 +699,7 @@ func private %encode_single_root_alloc(v0.i256) -> @layout_4 { v9.objref = obj.proj v4 1.i256; v10.i256 = extract_value v3 1.i256; obj.store v9 v10; - v11.i256 = call %impl_trait_SolEncoder__base v4; + v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_807c_0 v4; call %encode_single_root v0 v4; v13.objref<@layout_4> = obj.alloc @layout_4; v14.objref = obj.proj v13 0.i256; @@ -706,7 +722,7 @@ func private %encoder_new(v0.i256) -> @layout_3 { return v3; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_639c(v0.@layout_0) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_81ec(v0.@layout_0) -> i256 { block0: v1.objref<@layout_0> = obj.alloc @layout_0; v3.objref = obj.proj v1 0.i256; @@ -723,7 +739,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_639c return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_6ee3(v0.@layout_0) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_92c4(v0.@layout_0) -> i256 { block0: v1.objref<@layout_0> = obj.alloc @layout_0; v3.objref = obj.proj v1 0.i256; @@ -740,7 +756,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_6ee3 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_f8c0(v0.@layout_0) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_b612(v0.@layout_0) -> i256 { block0: v1.objref<@layout_0> = obj.alloc @layout_0; v3.objref = obj.proj v1 0.i256; @@ -757,7 +773,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_f8c0 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_fbd3(v0.@layout_0) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_bb52(v0.@layout_0) -> i256 { block0: v1.objref<@layout_0> = obj.alloc @layout_0; v3.objref = obj.proj v1 0.i256; @@ -774,6 +790,31 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_fbd3 return v9; } +func private %impl_SolDecoder__new__g463e(v0.@layout_0) -> @layout_2 { + block0: + jump block1; + + block1: + v2.@layout_1 = call %impl_Cursor__new__g463e v0; + v4.objref<@layout_2> = obj.alloc @layout_2; + v5.objref<@layout_1> = obj.proj v4 0.i256; + v6.objref<@layout_0> = obj.proj v5 0.i256; + v7.@layout_0 = extract_value v2 0.i256; + v8.objref = obj.proj v6 0.i256; + v9.i256 = extract_value v7 0.i256; + obj.store v8 v9; + v11.objref = obj.proj v6 1.i256; + v12.i256 = extract_value v7 1.i256; + obj.store v11 v12; + v13.objref = obj.proj v5 1.i256; + v14.i256 = extract_value v2 1.i256; + obj.store v13 v14; + v15.objref = obj.proj v4 1.i256; + obj.store v15 0.i256; + v16.@layout_2 = obj.load v4; + return v16; +} + func private %impl_SolEncoder__new(v0.i256) -> @layout_3 { block0: v1.*i256 = alloca i256; @@ -824,32 +865,17 @@ func private %impl_Cursor__new__g463e(v0.@layout_0) -> @layout_1 { return v11; } -func private %impl_SolDecoder__new__g463e(v0.@layout_0) -> @layout_2 { +func private %core__lib__abi__trait_AbiSize__payload_size__ge513_7fea(v0.i256) -> i256 { block0: + v1.*i256 = alloca i256; + mstore v1 v0 i256; jump block1; block1: - v2.@layout_1 = call %impl_Cursor__new__g463e v0; - v4.objref<@layout_2> = obj.alloc @layout_2; - v5.objref<@layout_1> = obj.proj v4 0.i256; - v6.objref<@layout_0> = obj.proj v5 0.i256; - v7.@layout_0 = extract_value v2 0.i256; - v8.objref = obj.proj v6 0.i256; - v9.i256 = extract_value v7 0.i256; - obj.store v8 v9; - v11.objref = obj.proj v6 1.i256; - v12.i256 = extract_value v7 1.i256; - obj.store v11 v12; - v13.objref = obj.proj v5 1.i256; - v14.i256 = extract_value v2 1.i256; - obj.store v13 v14; - v15.objref = obj.proj v4 1.i256; - obj.store v15 0.i256; - v16.@layout_2 = obj.load v4; - return v16; + return 32.i256; } -func private %core__lib__abi__trait_AbiSize__payload_size__ge513_9950(v0.i256) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__ge513_7fea_0(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -859,17 +885,17 @@ func private %core__lib__abi__trait_AbiSize__payload_size__ge513_9950(v0.i256) - return 32.i256; } -func private %core__lib__abi__trait_AbiSize__payload_size__ge513_9950_0(v0.i256) -> i256 { +func private %pos__gf13e(v0.objref<@layout_3>) -> i256 { block0: - v1.*i256 = alloca i256; - mstore v1 v0 i256; jump block1; block1: - return 32.i256; + v3.objref = obj.proj v0 1.i256; + v4.i256 = obj.load v3; + return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_21c1(v0.objref<@layout_2>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_4a39(v0.objref<@layout_2>) -> i256 { block0: jump block1; @@ -880,17 +906,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_21c1(v0 return v6; } -func private %impl_trait_SolEncoder__pos(v0.objref<@layout_3>) -> i256 { - block0: - jump block1; - - block1: - v3.objref = obj.proj v0 1.i256; - v4.i256 = obj.load v3; - return v4; -} - -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_f11f(v0.objref<@layout_2>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_bf61(v0.objref<@layout_2>) -> i256 { block0: jump block1; @@ -901,7 +917,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_f11f(v0 return v6; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_16c3(v0.objref<@layout_2>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_2ece(v0.objref<@layout_2>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -911,7 +927,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_1 v5.objref<@layout_1> = obj.proj v0 0.i256; v6.objref<@layout_0> = obj.proj v5 0.i256; v7.@layout_0 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_f8c0 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_81ec v7; mstore v1 v8 i256; v9.objref<@layout_1> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -932,7 +948,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_1 v29.objref<@layout_1> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_43ea v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_d735 v28 v31; v34.objref<@layout_1> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -958,7 +974,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_1 br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_1759(v0.objref<@layout_2>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_3026(v0.objref<@layout_2>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -968,7 +984,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_1 v5.objref<@layout_1> = obj.proj v0 0.i256; v6.objref<@layout_0> = obj.proj v5 0.i256; v7.@layout_0 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_639c v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_92c4 v7; mstore v1 v8 i256; v9.objref<@layout_1> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -989,7 +1005,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_1 v29.objref<@layout_1> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_d43a v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_fc04 v28 v31; v34.objref<@layout_1> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -1015,7 +1031,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_1 br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_5e30(v0.objref<@layout_2>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_af1a(v0.objref<@layout_2>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -1025,7 +1041,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_5 v5.objref<@layout_1> = obj.proj v0 0.i256; v6.objref<@layout_0> = obj.proj v5 0.i256; v7.@layout_0 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_6ee3 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_b612 v7; mstore v1 v8 i256; v9.objref<@layout_1> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -1046,7 +1062,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_5 v29.objref<@layout_1> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_caf9 v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_1150 v28 v31; v34.objref<@layout_1> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -1072,7 +1088,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_5 br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_bf2c(v0.objref<@layout_2>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_f885(v0.objref<@layout_2>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; @@ -1082,7 +1098,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_b v5.objref<@layout_1> = obj.proj v0 0.i256; v6.objref<@layout_0> = obj.proj v5 0.i256; v7.@layout_0 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_fbd3 v7; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_bb52 v7; mstore v1 v8 i256; v9.objref<@layout_1> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; @@ -1103,7 +1119,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_b v29.objref<@layout_1> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_9b33 v28 v31; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_83be v28 v31; v34.objref<@layout_1> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; @@ -1129,7 +1145,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_b br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_0c04(v0.objref<@layout_2>, v1.i256) { +func private %set_base__gf13e(v0.objref<@layout_3>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -1137,12 +1153,12 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_0c block1: v3.i256 = mload v2 i256; - v6.objref = obj.proj v0 1.i256; + v6.objref = obj.proj v0 0.i256; obj.store v6 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_3ff5(v0.objref<@layout_2>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_8643(v0.objref<@layout_2>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -1155,7 +1171,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_3f return; } -func private %impl_trait_SolEncoder__set_base(v0.objref<@layout_3>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_9743(v0.objref<@layout_2>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -1163,12 +1179,12 @@ func private %impl_trait_SolEncoder__set_base(v0.objref<@layout_3>, v1.i256) { block1: v3.i256 = mload v2 i256; - v6.objref = obj.proj v0 0.i256; + v6.objref = obj.proj v0 1.i256; obj.store v6 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_6dc7(v0.objref<@layout_2>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_3a51(v0.objref<@layout_2>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -1182,7 +1198,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_6dc return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_e59d(v0.objref<@layout_2>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_3e2b(v0.objref<@layout_2>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -1196,7 +1212,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_e59 return; } -func private %impl_trait_SolEncoder__set_pos(v0.objref<@layout_3>, v1.i256) { +func private %set_pos__gf13e(v0.objref<@layout_3>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -1209,7 +1225,7 @@ func private %impl_trait_SolEncoder__set_pos(v0.objref<@layout_3>, v1.i256) { return; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_43ea(v0.@layout_0, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_1150(v0.@layout_0, v1.i256) -> i256 { block0: v2.objref<@layout_0> = obj.alloc @layout_0; v3.*i256 = alloca i256; @@ -1231,7 +1247,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_9b33(v0.@layout_0, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_83be(v0.@layout_0, v1.i256) -> i256 { block0: v2.objref<@layout_0> = obj.alloc @layout_0; v3.*i256 = alloca i256; @@ -1253,7 +1269,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_caf9(v0.@layout_0, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_d735(v0.@layout_0, v1.i256) -> i256 { block0: v2.objref<@layout_0> = obj.alloc @layout_0; v3.*i256 = alloca i256; @@ -1275,7 +1291,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_d43a(v0.@layout_0, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_fc04(v0.@layout_0, v1.i256) -> i256 { block0: v2.objref<@layout_0> = obj.alloc @layout_0; v3.*i256 = alloca i256; @@ -1297,7 +1313,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_6213(v0.objref<@layout_3>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_0a0b(v0.objref<@layout_3>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -1314,7 +1330,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_6213(v0 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_d116(v0.objref<@layout_3>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_f389(v0.objref<@layout_3>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; diff --git a/crates/codegen/tests/fixtures/sonatina_ir/init_args_with_child_dep.snap b/crates/codegen/tests/fixtures/sonatina_ir/init_args_with_child_dep.snap index 719aa2dc40..27bbb896db 100644 --- a/crates/codegen/tests/fixtures/sonatina_ir/init_args_with_child_dep.snap +++ b/crates/codegen/tests/fixtures/sonatina_ir/init_args_with_child_dep.snap @@ -1,5 +1,6 @@ --- source: crates/codegen/tests/sonatina_ir.rs +assertion_line: 403 expression: output input_file: crates/codegen/tests/fixtures/init_args_with_child_dep.fe --- @@ -9,9 +10,9 @@ type @layout_0 = {}; type @layout_1 = {@layout_0}; type @layout_2 = {i256, i256}; type @layout_3 = {i256, i256}; -type @layout_4 = {@layout_3, i256}; +type @layout_4 = {i256, i256}; type @layout_5 = {@layout_4, i256}; -type @layout_6 = {i256, i256}; +type @layout_6 = {@layout_5, i256}; type @layout_7 = {i256}; type @layout_8 = {i256}; @@ -63,17 +64,17 @@ func private %abi_payload_size(v0.@layout_2) -> i256 { return v9; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_43fa(v0.objref<@layout_5>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_2bd8(v0.objref<@layout_3>) -> i256 { block0: jump block1; block1: - v3.objref = obj.proj v0 1.i256; + v3.objref = obj.proj v0 0.i256; v4.i256 = obj.load v3; return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_7dbb(v0.objref<@layout_6>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_2bd8_0(v0.objref<@layout_3>) -> i256 { block0: jump block1; @@ -83,17 +84,17 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_7dbb(v0.objre return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_7dbb_0(v0.objref<@layout_6>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_73e6(v0.objref<@layout_6>) -> i256 { block0: jump block1; block1: - v3.objref = obj.proj v0 0.i256; + v3.objref = obj.proj v0 1.i256; v4.i256 = obj.load v3; return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_85b5(v0.objref<@layout_6>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_b3d3(v0.objref<@layout_3>) -> i256 { block0: jump block1; @@ -103,7 +104,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_85b5(v0.objre return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_b557(v0.objref<@layout_5>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_e769(v0.objref<@layout_6>) -> i256 { block0: jump block1; @@ -115,8 +116,8 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_b557(v func private %contract_init_abi_Child() { block0: - v0.objref<@layout_3> = obj.alloc @layout_3; - v1.objref<@layout_5> = obj.alloc @layout_5; + v0.objref<@layout_4> = obj.alloc @layout_4; + v1.objref<@layout_6> = obj.alloc @layout_6; jump block1; block1: @@ -154,12 +155,12 @@ func private %contract_init_abi_Child() { obj.store v23 v20; v25.objref = obj.proj v0 1.i256; obj.store v25 v13; - v26.@layout_3 = obj.load v0; - v27.@layout_5 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__decoder_new__g463e_6eaf v26; - v28.objref<@layout_4> = obj.proj v1 0.i256; - v29.@layout_4 = extract_value v27 0.i256; - v30.objref<@layout_3> = obj.proj v28 0.i256; - v31.@layout_3 = extract_value v29 0.i256; + v26.@layout_4 = obj.load v0; + v27.@layout_6 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__decoder_new__g463e_6eaf_0 v26; + v28.objref<@layout_5> = obj.proj v1 0.i256; + v29.@layout_5 = extract_value v27 0.i256; + v30.objref<@layout_4> = obj.proj v28 0.i256; + v31.@layout_4 = extract_value v29 0.i256; v32.objref = obj.proj v30 0.i256; v33.i256 = extract_value v31 0.i256; obj.store v32 v33; @@ -190,8 +191,8 @@ func private %contract_init_abi_Child() { func private %contract_init_abi_Parent() { block0: - v0.objref<@layout_3> = obj.alloc @layout_3; - v1.objref<@layout_5> = obj.alloc @layout_5; + v0.objref<@layout_4> = obj.alloc @layout_4; + v1.objref<@layout_6> = obj.alloc @layout_6; jump block1; block1: @@ -229,12 +230,12 @@ func private %contract_init_abi_Parent() { obj.store v23 v20; v25.objref = obj.proj v0 1.i256; obj.store v25 v13; - v26.@layout_3 = obj.load v0; - v27.@layout_5 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__decoder_new__g463e_6eaf_0 v26; - v28.objref<@layout_4> = obj.proj v1 0.i256; - v29.@layout_4 = extract_value v27 0.i256; - v30.objref<@layout_3> = obj.proj v28 0.i256; - v31.@layout_3 = extract_value v29 0.i256; + v26.@layout_4 = obj.load v0; + v27.@layout_6 = call %std__lib__abi__sol__impl_trait_Sol_1f5f__decoder_new__g463e_6eaf v26; + v28.objref<@layout_5> = obj.proj v1 0.i256; + v29.@layout_5 = extract_value v27 0.i256; + v30.objref<@layout_4> = obj.proj v28 0.i256; + v31.@layout_4 = extract_value v29 0.i256; v32.objref = obj.proj v30 0.i256; v33.i256 = extract_value v31 0.i256; obj.store v32 v33; @@ -288,10 +289,7 @@ func private %contract_runtime_root_Child() { jump block1; block1: - v1.i256 = evm_calldata_load 0.i256; - v3.i256 = shr 224.i256 v1; - v4.i32 = trunc v3 i32; - br_table v4 block2; + jump block2; block2: evm_revert 0.i256 0.i256; @@ -302,10 +300,7 @@ func private %contract_runtime_root_Parent() { jump block1; block1: - v1.i256 = evm_calldata_load 0.i256; - v3.i256 = shr 224.i256 v1; - v4.i32 = trunc v3 i32; - br_table v4 block2; + jump block2; block2: evm_revert 0.i256 0.i256; @@ -491,7 +486,7 @@ func private %create_raw(v0.objref<@layout_1>, v1.i256, v2.i256, v3.i256) -> @la return v14; } -func private %core__lib__abi__decode_field__g3854_29f4(v0.objref<@layout_5>) -> i256 { +func private %core__lib__abi__decode_field__g3854_142d(v0.objref<@layout_6>) -> i256 { block0: jump block1; @@ -499,9 +494,9 @@ func private %core__lib__abi__decode_field__g3854_29f4(v0.objref<@layout_5>) -> br 0.i1 block2 block3; block2: - v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_1285 v0; - v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_43fa v0; - v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_1dfb v0; + v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_760d v0; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_73e6 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_a8c0 v0; (v6.i256, v7.i1) = uaddo v4 v3; br v7 block5 block6; @@ -509,7 +504,7 @@ func private %core__lib__abi__decode_field__g3854_29f4(v0.objref<@layout_5>) -> jump block4; block4: - v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_4e26 v0; + v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_ecfb v0; return v23; block5: @@ -518,16 +513,16 @@ func private %core__lib__abi__decode_field__g3854_29f4(v0.objref<@layout_5>) -> evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_6705 v0 v6; - v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_43fa v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_4a51 v0 v15; - v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_4e26 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_6705 v0 v4; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_4a51 v0 v5; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_2988 v0 v6; + v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_73e6 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_0b8c v0 v15; + v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_ecfb v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_2988 v0 v4; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_0b8c v0 v5; return v17; } -func private %core__lib__abi__decode_field__g3854_bdd0(v0.objref<@layout_5>) -> i256 { +func private %core__lib__abi__decode_field__g3854_5790(v0.objref<@layout_6>) -> i256 { block0: jump block1; @@ -535,9 +530,9 @@ func private %core__lib__abi__decode_field__g3854_bdd0(v0.objref<@layout_5>) -> br 0.i1 block2 block3; block2: - v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_f2ee v0; - v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_b557 v0; - v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_b693 v0; + v3.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_d294 v0; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_e769 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_2977 v0; (v6.i256, v7.i1) = uaddo v4 v3; br v7 block5 block6; @@ -545,7 +540,7 @@ func private %core__lib__abi__decode_field__g3854_bdd0(v0.objref<@layout_5>) -> jump block4; block4: - v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_66ca v0; + v23.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_cc88 v0; return v23; block5: @@ -554,22 +549,22 @@ func private %core__lib__abi__decode_field__g3854_bdd0(v0.objref<@layout_5>) -> evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_a978 v0 v6; - v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__base__g463e_b557 v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_25bb v0 v15; - v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_66ca v0; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_a978 v0 v4; - call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_25bb v0 v5; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_aba9 v0 v6; + v15.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__base__ga238_e769 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_3ccf v0 v15; + v17.i256 = call %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_cc88 v0; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_aba9 v0 v4; + call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_3ccf v0 v5; return v17; } -func private %decode_payload__g4770(v0.objref<@layout_5>) -> @layout_2 { +func private %decode_payload__g4770(v0.objref<@layout_6>) -> @layout_2 { block0: jump block1; block1: - v2.i256 = call %core__lib__abi__decode_field__g3854_29f4 v0; - v3.i256 = call %core__lib__abi__decode_field__g3854_29f4 v0; + v2.i256 = call %core__lib__abi__decode_field__g3854_142d v0; + v3.i256 = call %core__lib__abi__decode_field__g3854_142d v0; v4.objref<@layout_2> = obj.alloc @layout_2; v6.objref = obj.proj v4 0.i256; obj.store v6 v2; @@ -579,12 +574,12 @@ func private %decode_payload__g4770(v0.objref<@layout_5>) -> @layout_2 { return v9; } -func private %decode_payload__g3854(v0.objref<@layout_5>) -> @layout_8 { +func private %decode_payload__g3854(v0.objref<@layout_6>) -> @layout_8 { block0: jump block1; block1: - v2.i256 = call %core__lib__abi__decode_field__g3854_bdd0 v0; + v2.i256 = call %core__lib__abi__decode_field__g3854_5790 v0; v3.objref<@layout_8> = obj.alloc @layout_8; v5.objref = obj.proj v3 0.i256; obj.store v5 v2; @@ -592,39 +587,39 @@ func private %decode_payload__g3854(v0.objref<@layout_5>) -> @layout_8 { return v6; } -func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_4e26(v0.objref<@layout_5>) -> i256 { +func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_cc88(v0.objref<@layout_6>) -> i256 { block0: jump block1; block1: - v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_c26a v0; + v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_fbd4 v0; return v2; } -func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_66ca(v0.objref<@layout_5>) -> i256 { +func private %core__lib__abi__impl_trait_u256_85b6__decode_payload__g407e_ecfb(v0.objref<@layout_6>) -> i256 { block0: jump block1; block1: - v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_fb8f v0; + v2.i256 = call %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_6cfc v0; return v2; } -func private %std__lib__abi__sol__impl_trait_Sol_1f5f__decoder_new__g463e_6eaf(v0.@layout_3) -> @layout_5 { +func private %std__lib__abi__sol__impl_trait_Sol_1f5f__decoder_new__g463e_6eaf(v0.@layout_4) -> @layout_6 { block0: jump block1; block1: - v2.@layout_5 = call %std__lib__abi__sol__impl_SolDecoder_113c__new__g463e_7b57_0 v0; + v2.@layout_6 = call %std__lib__abi__sol__impl_SolDecoder_113c__new__g463e_2f08_0 v0; return v2; } -func private %std__lib__abi__sol__impl_trait_Sol_1f5f__decoder_new__g463e_6eaf_0(v0.@layout_3) -> @layout_5 { +func private %std__lib__abi__sol__impl_trait_Sol_1f5f__decoder_new__g463e_6eaf_0(v0.@layout_4) -> @layout_6 { block0: jump block1; block1: - v2.@layout_5 = call %std__lib__abi__sol__impl_SolDecoder_113c__new__g463e_7b57 v0; + v2.@layout_6 = call %std__lib__abi__sol__impl_SolDecoder_113c__new__g463e_2f08 v0; return v2; } @@ -639,7 +634,7 @@ func private %dynamic_payload_size(v0.i256) -> i256 { block2: v3.i256 = mload v1 i256; - v4.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_99cc v3; + v4.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_1ff0 v3; return v4; block3: @@ -649,7 +644,7 @@ func private %dynamic_payload_size(v0.i256) -> i256 { return 0.i256; } -func private %encode__g7769(v0.@layout_2, v1.objref<@layout_6>) { +func private %encode__g7769(v0.@layout_2, v1.objref<@layout_3>) { block0: v2.objref<@layout_2> = obj.alloc @layout_2; v3.*i256 = alloca i256; @@ -662,7 +657,7 @@ func private %encode__g7769(v0.@layout_2, v1.objref<@layout_6>) { jump block1; block1: - v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_7dbb_0 v1; + v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_2bd8_0 v1; (v13.i256, v14.i1) = uaddo v11 64.i256; br v14 block2 block3; @@ -684,16 +679,16 @@ func private %encode__g7769(v0.@layout_2, v1.objref<@layout_6>) { return; } -func private %encode__g426c(v0.i256, v1.objref<@layout_6>) { +func private %encode_abi_payload(v0.@layout_2) -> @layout_2 { block0: jump block1; block1: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_98f2 v1 v0; - return; + v2.@layout_2 = call %encode_abi_payload_abi v0; + return v2; } -func private %encode_abi_payload(v0.@layout_2) -> @layout_2 { +func private %encode_abi_payload_abi(v0.@layout_2) -> @layout_2 { block0: jump block1; @@ -708,15 +703,15 @@ func private %encode_alloc(v0.@layout_2) -> @layout_2 { block1: v2.i256 = call %abi_payload_size v0; - v3.@layout_6 = call %encoder_new v2; - v4.objref<@layout_6> = obj.alloc @layout_6; + v3.@layout_3 = call %encoder_new v2; + v4.objref<@layout_3> = obj.alloc @layout_3; v6.objref = obj.proj v4 0.i256; v7.i256 = extract_value v3 0.i256; obj.store v6 v7; v9.objref = obj.proj v4 1.i256; v10.i256 = extract_value v3 1.i256; obj.store v9 v10; - v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_85b5 v4; + v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_b3d3 v4; call %encode__g7769 v0 v4; v13.objref<@layout_2> = obj.alloc @layout_2; v14.objref = obj.proj v13 0.i256; @@ -727,7 +722,16 @@ func private %encode_alloc(v0.@layout_2) -> @layout_2 { return v16; } -func private %encode_field(v0.i256, v1.objref<@layout_6>, v2.i256) { +func private %encode__g426c(v0.i256, v1.objref<@layout_3>) { + block0: + jump block1; + + block1: + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_e4a0 v1 v0; + return; +} + +func private %encode_field(v0.i256, v1.objref<@layout_3>, v2.i256) { block0: jump block1; @@ -735,8 +739,8 @@ func private %encode_field(v0.i256, v1.objref<@layout_6>, v2.i256) { br 0.i1 block2 block3; block2: - v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_7dbb v1; - v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_b316 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_2bd8 v1; + v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_c75c v0; v9.i256 = mload v2 i256; (v10.i256, v11.i1) = usubo v9 v5; br v11 block5 block6; @@ -754,15 +758,15 @@ func private %encode_field(v0.i256, v1.objref<@layout_6>, v2.i256) { evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_9d70 v1 v10; - v19.i256 = call %impl_trait_SolEncoder__pos v1; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_2eda v1 v10; + v19.i256 = call %pos__gf13e v1; v21.i256 = mload v2 i256; - call %impl_trait_SolEncoder__set_base v1 v21; + call %set_base__gf13e v1 v21; v23.i256 = mload v2 i256; - call %impl_trait_SolEncoder__set_pos v1 v23; + call %set_pos__gf13e v1 v23; call %encode__g426c v0 v1; - call %impl_trait_SolEncoder__set_base v1 v5; - call %impl_trait_SolEncoder__set_pos v1 v19; + call %set_base__gf13e v1 v5; + call %set_pos__gf13e v1 v19; v30.i256 = mload v2 i256; (v32.i256, v33.i1) = uaddo v30 v8; br v33 block5 block7; @@ -772,7 +776,7 @@ func private %encode_field(v0.i256, v1.objref<@layout_6>, v2.i256) { return; } -func private %encoder_new(v0.i256) -> @layout_6 { +func private %encoder_new(v0.i256) -> @layout_3 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -780,13 +784,13 @@ func private %encoder_new(v0.i256) -> @layout_6 { block1: v2.i256 = mload v1 i256; - v3.@layout_6 = call %impl_SolEncoder__new v2; + v3.@layout_3 = call %impl_SolEncoder__new v2; return v3; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_0327(v0.@layout_3) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_438e(v0.@layout_4) -> i256 { block0: - v1.objref<@layout_3> = obj.alloc @layout_3; + v1.objref<@layout_4> = obj.alloc @layout_4; v3.objref = obj.proj v1 0.i256; v4.i256 = extract_value v0 0.i256; obj.store v3 v4; @@ -801,9 +805,9 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_0327 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_5bb3(v0.@layout_3) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_5d41(v0.@layout_4) -> i256 { block0: - v1.objref<@layout_3> = obj.alloc @layout_3; + v1.objref<@layout_4> = obj.alloc @layout_4; v3.objref = obj.proj v1 0.i256; v4.i256 = extract_value v0 0.i256; obj.store v3 v4; @@ -818,9 +822,9 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_5bb3 return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_b8bc(v0.@layout_3) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_7909(v0.@layout_4) -> i256 { block0: - v1.objref<@layout_3> = obj.alloc @layout_3; + v1.objref<@layout_4> = obj.alloc @layout_4; v3.objref = obj.proj v1 0.i256; v4.i256 = extract_value v0 0.i256; obj.store v3 v4; @@ -835,9 +839,9 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_b8bc return v9; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_cc6d(v0.@layout_3) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_8481(v0.@layout_4) -> i256 { block0: - v1.objref<@layout_3> = obj.alloc @layout_3; + v1.objref<@layout_4> = obj.alloc @layout_4; v3.objref = obj.proj v1 0.i256; v4.i256 = extract_value v0 0.i256; obj.store v3 v4; @@ -852,47 +856,16 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_cc6d return v9; } -func private %impl_SolEncoder__new(v0.i256) -> @layout_6 { +func private %std__lib__abi__sol__impl_SolDecoder_113c__new__g463e_2f08(v0.@layout_4) -> @layout_6 { block0: - v1.*i256 = alloca i256; - mstore v1 v0 i256; jump block1; block1: - v2.i256 = mload v1 i256; - v4.i1 = eq v2 0.i256; - br v4 block2 block3; - - block2: - jump block4; - - block3: - v5.i256 = mload v1 i256; - v6.*i8 = evm_malloc v5; - v7.i256 = ptr_to_int v6 i256; - jump block4; - - block4: - v8.i256 = phi (0.i256 block2) (v7 block3); - v9.objref<@layout_6> = obj.alloc @layout_6; - v10.objref = obj.proj v9 0.i256; - obj.store v10 v8; - v12.objref = obj.proj v9 1.i256; - obj.store v12 v8; - v13.@layout_6 = obj.load v9; - return v13; -} - -func private %std__lib__abi__sol__impl_SolDecoder_113c__new__g463e_7b57(v0.@layout_3) -> @layout_5 { - block0: - jump block1; - - block1: - v2.@layout_4 = call %core__lib__abi__impl_Cursor_1a04__new__g463e_aa29 v0; - v4.objref<@layout_5> = obj.alloc @layout_5; - v5.objref<@layout_4> = obj.proj v4 0.i256; - v6.objref<@layout_3> = obj.proj v5 0.i256; - v7.@layout_3 = extract_value v2 0.i256; + v2.@layout_5 = call %core__lib__abi__impl_Cursor_1a04__new__g463e_326d v0; + v4.objref<@layout_6> = obj.alloc @layout_6; + v5.objref<@layout_5> = obj.proj v4 0.i256; + v6.objref<@layout_4> = obj.proj v5 0.i256; + v7.@layout_4 = extract_value v2 0.i256; v8.objref = obj.proj v6 0.i256; v9.i256 = extract_value v7 0.i256; obj.store v8 v9; @@ -904,20 +877,20 @@ func private %std__lib__abi__sol__impl_SolDecoder_113c__new__g463e_7b57(v0.@layo obj.store v13 v14; v15.objref = obj.proj v4 1.i256; obj.store v15 0.i256; - v16.@layout_5 = obj.load v4; + v16.@layout_6 = obj.load v4; return v16; } -func private %std__lib__abi__sol__impl_SolDecoder_113c__new__g463e_7b57_0(v0.@layout_3) -> @layout_5 { +func private %std__lib__abi__sol__impl_SolDecoder_113c__new__g463e_2f08_0(v0.@layout_4) -> @layout_6 { block0: jump block1; block1: - v2.@layout_4 = call %core__lib__abi__impl_Cursor_1a04__new__g463e_aa29_0 v0; - v4.objref<@layout_5> = obj.alloc @layout_5; - v5.objref<@layout_4> = obj.proj v4 0.i256; - v6.objref<@layout_3> = obj.proj v5 0.i256; - v7.@layout_3 = extract_value v2 0.i256; + v2.@layout_5 = call %core__lib__abi__impl_Cursor_1a04__new__g463e_326d_0 v0; + v4.objref<@layout_6> = obj.alloc @layout_6; + v5.objref<@layout_5> = obj.proj v4 0.i256; + v6.objref<@layout_4> = obj.proj v5 0.i256; + v7.@layout_4 = extract_value v2 0.i256; v8.objref = obj.proj v6 0.i256; v9.i256 = extract_value v7 0.i256; obj.store v8 v9; @@ -929,17 +902,17 @@ func private %std__lib__abi__sol__impl_SolDecoder_113c__new__g463e_7b57_0(v0.@la obj.store v13 v14; v15.objref = obj.proj v4 1.i256; obj.store v15 0.i256; - v16.@layout_5 = obj.load v4; + v16.@layout_6 = obj.load v4; return v16; } -func private %core__lib__abi__impl_Cursor_1a04__new__g463e_aa29(v0.@layout_3) -> @layout_4 { +func private %core__lib__abi__impl_Cursor_1a04__new__g463e_326d(v0.@layout_4) -> @layout_5 { block0: jump block1; block1: - v2.objref<@layout_4> = obj.alloc @layout_4; - v4.objref<@layout_3> = obj.proj v2 0.i256; + v2.objref<@layout_5> = obj.alloc @layout_5; + v4.objref<@layout_4> = obj.proj v2 0.i256; v5.objref = obj.proj v4 0.i256; v6.i256 = extract_value v0 0.i256; obj.store v5 v6; @@ -948,17 +921,17 @@ func private %core__lib__abi__impl_Cursor_1a04__new__g463e_aa29(v0.@layout_3) -> obj.store v8 v9; v10.objref = obj.proj v2 1.i256; obj.store v10 0.i256; - v11.@layout_4 = obj.load v2; + v11.@layout_5 = obj.load v2; return v11; } -func private %core__lib__abi__impl_Cursor_1a04__new__g463e_aa29_0(v0.@layout_3) -> @layout_4 { +func private %core__lib__abi__impl_Cursor_1a04__new__g463e_326d_0(v0.@layout_4) -> @layout_5 { block0: jump block1; block1: - v2.objref<@layout_4> = obj.alloc @layout_4; - v4.objref<@layout_3> = obj.proj v2 0.i256; + v2.objref<@layout_5> = obj.alloc @layout_5; + v4.objref<@layout_4> = obj.proj v2 0.i256; v5.objref = obj.proj v4 0.i256; v6.i256 = extract_value v0 0.i256; obj.store v5 v6; @@ -967,28 +940,39 @@ func private %core__lib__abi__impl_Cursor_1a04__new__g463e_aa29_0(v0.@layout_3) obj.store v8 v9; v10.objref = obj.proj v2 1.i256; obj.store v10 0.i256; - v11.@layout_4 = obj.load v2; + v11.@layout_5 = obj.load v2; return v11; } -func private %core__lib__abi__trait_AbiSize__payload_size__ge513_99cc(v0.i256) -> i256 { +func private %impl_SolEncoder__new(v0.i256) -> @layout_3 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; jump block1; block1: - return 32.i256; -} + v2.i256 = mload v1 i256; + v4.i1 = eq v2 0.i256; + br v4 block2 block3; -func private %core__lib__abi__trait_AbiSize__payload_size__ge513_b316(v0.i256) -> i256 { - block0: - v1.*i256 = alloca i256; - mstore v1 v0 i256; - jump block1; + block2: + jump block4; - block1: - return 32.i256; + block3: + v5.i256 = mload v1 i256; + v6.*i8 = evm_malloc v5; + v7.i256 = ptr_to_int v6 i256; + jump block4; + + block4: + v8.i256 = phi (0.i256 block2) (v7 block3); + v9.objref<@layout_3> = obj.alloc @layout_3; + v10.objref = obj.proj v9 0.i256; + obj.store v10 v8; + v12.objref = obj.proj v9 1.i256; + obj.store v12 v8; + v13.@layout_3 = obj.load v9; + return v13; } func private %payload_size__gbd8e(v0.@layout_2) -> i256 { @@ -1025,18 +1009,38 @@ func private %payload_size__gbd8e(v0.@layout_2) -> i256 { return v21; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_1dfb(v0.objref<@layout_5>) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__ge513_1ff0(v0.i256) -> i256 { block0: + v1.*i256 = alloca i256; + mstore v1 v0 i256; jump block1; block1: - v3.objref<@layout_4> = obj.proj v0 0.i256; + return 32.i256; +} + +func private %core__lib__abi__trait_AbiSize__payload_size__ge513_c75c(v0.i256) -> i256 { + block0: + v1.*i256 = alloca i256; + mstore v1 v0 i256; + jump block1; + + block1: + return 32.i256; +} + +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_2977(v0.objref<@layout_6>) -> i256 { + block0: + jump block1; + + block1: + v3.objref<@layout_5> = obj.proj v0 0.i256; v5.objref = obj.proj v3 1.i256; v6.i256 = obj.load v5; return v6; } -func private %impl_trait_SolEncoder__pos(v0.objref<@layout_6>) -> i256 { +func private %pos__gf13e(v0.objref<@layout_3>) -> i256 { block0: jump block1; @@ -1046,30 +1050,30 @@ func private %impl_trait_SolEncoder__pos(v0.objref<@layout_6>) -> i256 { return v4; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__pos__g463e_b693(v0.objref<@layout_5>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__pos__ga238_a8c0(v0.objref<@layout_6>) -> i256 { block0: jump block1; block1: - v3.objref<@layout_4> = obj.proj v0 0.i256; + v3.objref<@layout_5> = obj.proj v0 0.i256; v5.objref = obj.proj v3 1.i256; v6.i256 = obj.load v5; return v6; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_1285(v0.objref<@layout_5>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_6cfc(v0.objref<@layout_6>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; jump block1; block1: - v5.objref<@layout_4> = obj.proj v0 0.i256; - v6.objref<@layout_3> = obj.proj v5 0.i256; - v7.@layout_3 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_5bb3 v7; + v5.objref<@layout_5> = obj.proj v0 0.i256; + v6.objref<@layout_4> = obj.proj v5 0.i256; + v7.@layout_4 = obj.load v6; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_438e v7; mstore v1 v8 i256; - v9.objref<@layout_4> = obj.proj v0 0.i256; + v9.objref<@layout_5> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; v12.i256 = obj.load v11; (v14.i256, v15.i1) = uaddo v12 32.i256; @@ -1082,14 +1086,14 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_1 jump block4; block4: - v26.objref<@layout_4> = obj.proj v0 0.i256; - v27.objref<@layout_3> = obj.proj v26 0.i256; - v28.@layout_3 = obj.load v27; - v29.objref<@layout_4> = obj.proj v0 0.i256; + v26.objref<@layout_5> = obj.proj v0 0.i256; + v27.objref<@layout_4> = obj.proj v26 0.i256; + v28.@layout_4 = obj.load v27; + v29.objref<@layout_5> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_2397 v28 v31; - v34.objref<@layout_4> = obj.proj v0 0.i256; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_e286 v28 v31; + v34.objref<@layout_5> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; return v32; @@ -1107,26 +1111,26 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_1 evm_revert 0.i256 36.i256; block7: - v21.objref<@layout_4> = obj.proj v0 0.i256; + v21.objref<@layout_5> = obj.proj v0 0.i256; v22.objref = obj.proj v21 1.i256; v23.i256 = obj.load v22; v24.i1 = lt v14 v23; br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_c26a(v0.objref<@layout_5>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_760d(v0.objref<@layout_6>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; jump block1; block1: - v5.objref<@layout_4> = obj.proj v0 0.i256; - v6.objref<@layout_3> = obj.proj v5 0.i256; - v7.@layout_3 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_b8bc v7; + v5.objref<@layout_5> = obj.proj v0 0.i256; + v6.objref<@layout_4> = obj.proj v5 0.i256; + v7.@layout_4 = obj.load v6; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_7909 v7; mstore v1 v8 i256; - v9.objref<@layout_4> = obj.proj v0 0.i256; + v9.objref<@layout_5> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; v12.i256 = obj.load v11; (v14.i256, v15.i1) = uaddo v12 32.i256; @@ -1139,14 +1143,14 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_c jump block4; block4: - v26.objref<@layout_4> = obj.proj v0 0.i256; - v27.objref<@layout_3> = obj.proj v26 0.i256; - v28.@layout_3 = obj.load v27; - v29.objref<@layout_4> = obj.proj v0 0.i256; + v26.objref<@layout_5> = obj.proj v0 0.i256; + v27.objref<@layout_4> = obj.proj v26 0.i256; + v28.@layout_4 = obj.load v27; + v29.objref<@layout_5> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_5e1a v28 v31; - v34.objref<@layout_4> = obj.proj v0 0.i256; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_d38f v28 v31; + v34.objref<@layout_5> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; return v32; @@ -1164,26 +1168,26 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_c evm_revert 0.i256 36.i256; block7: - v21.objref<@layout_4> = obj.proj v0 0.i256; + v21.objref<@layout_5> = obj.proj v0 0.i256; v22.objref = obj.proj v21 1.i256; v23.i256 = obj.load v22; v24.i1 = lt v14 v23; br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_f2ee(v0.objref<@layout_5>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_d294(v0.objref<@layout_6>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; jump block1; block1: - v5.objref<@layout_4> = obj.proj v0 0.i256; - v6.objref<@layout_3> = obj.proj v5 0.i256; - v7.@layout_3 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_cc6d v7; + v5.objref<@layout_5> = obj.proj v0 0.i256; + v6.objref<@layout_4> = obj.proj v5 0.i256; + v7.@layout_4 = obj.load v6; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_8481 v7; mstore v1 v8 i256; - v9.objref<@layout_4> = obj.proj v0 0.i256; + v9.objref<@layout_5> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; v12.i256 = obj.load v11; (v14.i256, v15.i1) = uaddo v12 32.i256; @@ -1196,14 +1200,14 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_f jump block4; block4: - v26.objref<@layout_4> = obj.proj v0 0.i256; - v27.objref<@layout_3> = obj.proj v26 0.i256; - v28.@layout_3 = obj.load v27; - v29.objref<@layout_4> = obj.proj v0 0.i256; + v26.objref<@layout_5> = obj.proj v0 0.i256; + v27.objref<@layout_4> = obj.proj v26 0.i256; + v28.@layout_4 = obj.load v27; + v29.objref<@layout_5> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_89b0 v28 v31; - v34.objref<@layout_4> = obj.proj v0 0.i256; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_b006 v28 v31; + v34.objref<@layout_5> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; return v32; @@ -1221,26 +1225,26 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_f evm_revert 0.i256 36.i256; block7: - v21.objref<@layout_4> = obj.proj v0 0.i256; + v21.objref<@layout_5> = obj.proj v0 0.i256; v22.objref = obj.proj v21 1.i256; v23.i256 = obj.load v22; v24.i1 = lt v14 v23; br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_fb8f(v0.objref<@layout_5>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__read_word__ga238_fbd4(v0.objref<@layout_6>) -> i256 { block0: v1.*i256 = alloca i256; v2.*i256 = alloca i256; jump block1; block1: - v5.objref<@layout_4> = obj.proj v0 0.i256; - v6.objref<@layout_3> = obj.proj v5 0.i256; - v7.@layout_3 = obj.load v6; - v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_0327 v7; + v5.objref<@layout_5> = obj.proj v0 0.i256; + v6.objref<@layout_4> = obj.proj v5 0.i256; + v7.@layout_4 = obj.load v6; + v8.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__len_5d41 v7; mstore v1 v8 i256; - v9.objref<@layout_4> = obj.proj v0 0.i256; + v9.objref<@layout_5> = obj.proj v0 0.i256; v11.objref = obj.proj v9 1.i256; v12.i256 = obj.load v11; (v14.i256, v15.i1) = uaddo v12 32.i256; @@ -1253,14 +1257,14 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_f jump block4; block4: - v26.objref<@layout_4> = obj.proj v0 0.i256; - v27.objref<@layout_3> = obj.proj v26 0.i256; - v28.@layout_3 = obj.load v27; - v29.objref<@layout_4> = obj.proj v0 0.i256; + v26.objref<@layout_5> = obj.proj v0 0.i256; + v27.objref<@layout_4> = obj.proj v26 0.i256; + v28.@layout_4 = obj.load v27; + v29.objref<@layout_5> = obj.proj v0 0.i256; v30.objref = obj.proj v29 1.i256; v31.i256 = obj.load v30; - v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_d08f v28 v31; - v34.objref<@layout_4> = obj.proj v0 0.i256; + v32.i256 = call %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_fa9f v28 v31; + v34.objref<@layout_5> = obj.proj v0 0.i256; v35.objref = obj.proj v34 1.i256; obj.store v35 v14; return v32; @@ -1278,14 +1282,14 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__read_word__g463e_f evm_revert 0.i256 36.i256; block7: - v21.objref<@layout_4> = obj.proj v0 0.i256; + v21.objref<@layout_5> = obj.proj v0 0.i256; v22.objref = obj.proj v21 1.i256; v23.i256 = obj.load v22; v24.i1 = lt v14 v23; br v24 block2 block5; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_6705(v0.objref<@layout_5>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_2988(v0.objref<@layout_6>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -1298,7 +1302,7 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_67 return; } -func private %impl_trait_SolEncoder__set_base(v0.objref<@layout_6>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_base__ga238_aba9(v0.objref<@layout_6>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -1306,12 +1310,12 @@ func private %impl_trait_SolEncoder__set_base(v0.objref<@layout_6>, v1.i256) { block1: v3.i256 = mload v2 i256; - v6.objref = obj.proj v0 0.i256; + v6.objref = obj.proj v0 1.i256; obj.store v6 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_a978(v0.objref<@layout_5>, v1.i256) { +func private %set_base__gf13e(v0.objref<@layout_3>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -1319,12 +1323,12 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_base__g463e_a9 block1: v3.i256 = mload v2 i256; - v6.objref = obj.proj v0 1.i256; + v6.objref = obj.proj v0 0.i256; obj.store v6 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_25bb(v0.objref<@layout_5>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_0b8c(v0.objref<@layout_6>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -1332,13 +1336,13 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_25b block1: v3.i256 = mload v2 i256; - v6.objref<@layout_4> = obj.proj v0 0.i256; + v6.objref<@layout_5> = obj.proj v0 0.i256; v8.objref = obj.proj v6 1.i256; obj.store v8 v3; return; } -func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_4a51(v0.objref<@layout_5>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolDecoder_eb56__set_pos__ga238_3ccf(v0.objref<@layout_6>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -1346,13 +1350,13 @@ func private %std__lib__abi__sol__impl_trait_SolDecoder_68ab__set_pos__g463e_4a5 block1: v3.i256 = mload v2 i256; - v6.objref<@layout_4> = obj.proj v0 0.i256; + v6.objref<@layout_5> = obj.proj v0 0.i256; v8.objref = obj.proj v6 1.i256; obj.store v8 v3; return; } -func private %impl_trait_SolEncoder__set_pos(v0.objref<@layout_6>, v1.i256) { +func private %set_pos__gf13e(v0.objref<@layout_3>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -1365,9 +1369,9 @@ func private %impl_trait_SolEncoder__set_pos(v0.objref<@layout_6>, v1.i256) { return; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_2397(v0.@layout_3, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_b006(v0.@layout_4, v1.i256) -> i256 { block0: - v2.objref<@layout_3> = obj.alloc @layout_3; + v2.objref<@layout_4> = obj.alloc @layout_4; v3.*i256 = alloca i256; v5.objref = obj.proj v2 0.i256; v6.i256 = extract_value v0 0.i256; @@ -1387,9 +1391,9 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_5e1a(v0.@layout_3, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_d38f(v0.@layout_4, v1.i256) -> i256 { block0: - v2.objref<@layout_3> = obj.alloc @layout_3; + v2.objref<@layout_4> = obj.alloc @layout_4; v3.*i256 = alloca i256; v5.objref = obj.proj v2 0.i256; v6.i256 = extract_value v0 0.i256; @@ -1409,9 +1413,9 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_89b0(v0.@layout_3, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_e286(v0.@layout_4, v1.i256) -> i256 { block0: - v2.objref<@layout_3> = obj.alloc @layout_3; + v2.objref<@layout_4> = obj.alloc @layout_4; v3.*i256 = alloca i256; v5.objref = obj.proj v2 0.i256; v6.i256 = extract_value v0 0.i256; @@ -1431,9 +1435,9 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_d08f(v0.@layout_3, v1.i256) -> i256 { +func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_fa9f(v0.@layout_4, v1.i256) -> i256 { block0: - v2.objref<@layout_3> = obj.alloc @layout_3; + v2.objref<@layout_4> = obj.alloc @layout_4; v3.*i256 = alloca i256; v5.objref = obj.proj v2 0.i256; v6.i256 = extract_value v0 0.i256; @@ -1453,7 +1457,7 @@ func private %std__lib__evm__memory_input__impl_trait_MemoryBytes_c1cd__word_at_ return v14; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_98f2(v0.objref<@layout_6>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_2eda(v0.objref<@layout_3>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -1470,7 +1474,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_98f2(v0 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_9d70(v0.objref<@layout_6>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_e4a0(v0.objref<@layout_3>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; diff --git a/crates/codegen/tests/fixtures/sonatina_ir/match_fn_call.snap b/crates/codegen/tests/fixtures/sonatina_ir/match_fn_call.snap index 74473f6b87..16e5a6d1f3 100644 --- a/crates/codegen/tests/fixtures/sonatina_ir/match_fn_call.snap +++ b/crates/codegen/tests/fixtures/sonatina_ir/match_fn_call.snap @@ -1,5 +1,6 @@ --- source: crates/codegen/tests/sonatina_ir.rs +assertion_line: 403 expression: output input_file: crates/codegen/tests/fixtures/match_fn_call.fe --- @@ -128,7 +129,7 @@ func private %standalone_match_fn_call__match_fn_call__read_selector__gcd5c_4179 jump block1; block1: - v2.i256 = call %std__lib__evm__effects__impl_trait_Evm_0098__calldataload_7969_1 0.i256; + v2.i256 = call %std__lib__evm__effects__impl_trait_Evm_0098__calldataload_7969 0.i256; v4.i256 = shr 224.i256 v2; return v4; } @@ -138,7 +139,7 @@ func private %standalone_match_fn_call__match_fn_call__read_selector__gcd5c_aed9 jump block1; block1: - v2.i256 = call %std__lib__evm__effects__impl_trait_Evm_0098__calldataload_7969 0.i256; + v2.i256 = call %std__lib__evm__effects__impl_trait_Evm_0098__calldataload_7969_0 0.i256; v4.i256 = shr 224.i256 v2; return v4; } @@ -148,7 +149,7 @@ func private %standalone_match_fn_call__match_fn_call__read_selector__gcd5c_f4a3 jump block1; block1: - v2.i256 = call %std__lib__evm__effects__impl_trait_Evm_0098__calldataload_7969_0 0.i256; + v2.i256 = call %std__lib__evm__effects__impl_trait_Evm_0098__calldataload_7969_1 0.i256; v4.i256 = shr 224.i256 v2; return v4; } diff --git a/crates/codegen/tests/fixtures/sonatina_ir/newtype_storage_byplace_effect_arg.snap b/crates/codegen/tests/fixtures/sonatina_ir/newtype_storage_byplace_effect_arg.snap index e727f30d0c..cc8d601b7c 100644 --- a/crates/codegen/tests/fixtures/sonatina_ir/newtype_storage_byplace_effect_arg.snap +++ b/crates/codegen/tests/fixtures/sonatina_ir/newtype_storage_byplace_effect_arg.snap @@ -1,5 +1,6 @@ --- source: crates/codegen/tests/sonatina_ir.rs +assertion_line: 403 expression: output input_file: crates/codegen/tests/fixtures/newtype_storage_byplace_effect_arg.fe --- @@ -48,7 +49,7 @@ func private %abi_field_size(v0.i256) -> i256 { block1: v2.i256 = mload v1 i256; - v3.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_a5ce_0 v2; + v3.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_e240_0 v2; br 0.i1 block2 block3; block2: @@ -82,7 +83,17 @@ func private %abi_single_root_size(v0.i256) -> i256 { return v3; } -func private %base(v0.objref<@layout_0>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_287a(v0.objref<@layout_0>) -> i256 { + block0: + jump block1; + + block1: + v3.objref = obj.proj v0 0.i256; + v4.i256 = obj.load v3; + return v4; +} + +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_287a_0(v0.objref<@layout_0>) -> i256 { block0: jump block1; @@ -214,15 +225,20 @@ func private %contract_runtime_root_NewtypeByPlaceEffectArg() { jump block1; block1: - v1.i256 = evm_calldata_load 0.i256; - v3.i256 = shr 224.i256 v1; - v4.i32 = trunc v3 i32; - br_table v4 block2 (1.i32 block3); + v1.i256 = evm_calldata_size; + v3.i1 = lt v1 4.i256; + br v3 block2 block3; block2: evm_revert 0.i256 0.i256; block3: + v5.i256 = evm_calldata_load 0.i256; + v7.i256 = shr 224.i256 v5; + v8.i32 = trunc v7 i32; + br_table v8 block2 (1.i32 block4); + + block4: call %contract_recv_abi_NewtypeByPlaceEffectArg_1; unreachable; } @@ -249,7 +265,7 @@ func private %encode(v0.i256, v1.objref<@layout_0>) { jump block1; block1: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_8b2d v1 v0; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_3c1a v1 v0; return; } @@ -261,8 +277,8 @@ func private %encode_field(v0.i256, v1.objref<@layout_0>, v2.i256) { br 0.i1 block2 block3; block2: - v5.i256 = call %base v1; - v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_a5ce v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_287a v1; + v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_e240 v0; v9.i256 = mload v2 i256; (v10.i256, v11.i1) = usubo v9 v5; br v11 block5 block6; @@ -280,7 +296,7 @@ func private %encode_field(v0.i256, v1.objref<@layout_0>, v2.i256) { evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_a98a v1 v10; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_bce9 v1 v10; v19.i256 = call %pos v1; v21.i256 = mload v2 i256; call %set_base v1 v21; @@ -304,7 +320,7 @@ func private %encode_single_root(v0.i256, v1.objref<@layout_0>) { jump block1; block1: - v4.i256 = call %base v1; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_287a v1; (v6.i256, v7.i1) = uaddo v4 32.i256; br v7 block2 block3; @@ -334,7 +350,7 @@ func private %encode_single_root_alloc(v0.i256) -> @layout_4 { v9.objref = obj.proj v4 1.i256; v10.i256 = extract_value v3 1.i256; obj.store v9 v10; - v11.i256 = call %base v4; + v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_287a_0 v4; call %encode_single_root v0 v4; v13.objref<@layout_4> = obj.alloc @layout_4; v14.objref = obj.proj v13 0.i256; @@ -432,7 +448,7 @@ func private %impl_Cursor__new__g463e(v0.@layout_1) -> @layout_2 { return v11; } -func private %core__lib__abi__trait_AbiSize__payload_size__ge513_a5ce(v0.i256) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__ge513_e240(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -442,7 +458,7 @@ func private %core__lib__abi__trait_AbiSize__payload_size__ge513_a5ce(v0.i256) - return 32.i256; } -func private %core__lib__abi__trait_AbiSize__payload_size__ge513_a5ce_0(v0.i256) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__ge513_e240_0(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -488,7 +504,7 @@ func private %set_pos(v0.objref<@layout_0>, v1.i256) { return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_8b2d(v0.objref<@layout_0>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_3c1a(v0.objref<@layout_0>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -505,7 +521,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_8b2d(v0 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_a98a(v0.objref<@layout_0>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_bce9(v0.objref<@layout_0>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; diff --git a/crates/codegen/tests/fixtures/sonatina_ir/newtype_storage_field_mut_method_call.snap b/crates/codegen/tests/fixtures/sonatina_ir/newtype_storage_field_mut_method_call.snap index 6f33ca9a95..ba37b39b78 100644 --- a/crates/codegen/tests/fixtures/sonatina_ir/newtype_storage_field_mut_method_call.snap +++ b/crates/codegen/tests/fixtures/sonatina_ir/newtype_storage_field_mut_method_call.snap @@ -1,5 +1,6 @@ --- source: crates/codegen/tests/sonatina_ir.rs +assertion_line: 403 expression: output input_file: crates/codegen/tests/fixtures/newtype_storage_field_mut_method_call.fe --- @@ -37,7 +38,7 @@ func private %abi_field_size(v0.i256) -> i256 { block1: v2.i256 = mload v1 i256; - v3.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_4e75_0 v2; + v3.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_64aa_0 v2; br 0.i1 block2 block3; block2: @@ -71,7 +72,17 @@ func private %abi_single_root_size(v0.i256) -> i256 { return v3; } -func private %base(v0.objref<@layout_0>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_24ab(v0.objref<@layout_0>) -> i256 { + block0: + jump block1; + + block1: + v3.objref = obj.proj v0 0.i256; + v4.i256 = obj.load v3; + return v4; +} + +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_24ab_0(v0.objref<@layout_0>) -> i256 { block0: jump block1; @@ -203,15 +214,20 @@ func private %contract_runtime_root_NewtypeStorageFieldMutMethodCall() { jump block1; block1: - v1.i256 = evm_calldata_load 0.i256; - v3.i256 = shr 224.i256 v1; - v4.i32 = trunc v3 i32; - br_table v4 block2 (1.i32 block3); + v1.i256 = evm_calldata_size; + v3.i1 = lt v1 4.i256; + br v3 block2 block3; block2: evm_revert 0.i256 0.i256; block3: + v5.i256 = evm_calldata_load 0.i256; + v7.i256 = shr 224.i256 v5; + v8.i32 = trunc v7 i32; + br_table v8 block2 (1.i32 block4); + + block4: call %contract_recv_abi_NewtypeStorageFieldMutMethodCall_1; unreachable; } @@ -238,7 +254,7 @@ func private %encode(v0.i256, v1.objref<@layout_0>) { jump block1; block1: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_90ae v1 v0; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_65a5 v1 v0; return; } @@ -250,8 +266,8 @@ func private %encode_field(v0.i256, v1.objref<@layout_0>, v2.i256) { br 0.i1 block2 block3; block2: - v5.i256 = call %base v1; - v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_4e75 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_24ab v1; + v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_64aa v0; v9.i256 = mload v2 i256; (v10.i256, v11.i1) = usubo v9 v5; br v11 block5 block6; @@ -269,7 +285,7 @@ func private %encode_field(v0.i256, v1.objref<@layout_0>, v2.i256) { evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_9251 v1 v10; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_86b9 v1 v10; v19.i256 = call %pos v1; v21.i256 = mload v2 i256; call %set_base v1 v21; @@ -293,7 +309,7 @@ func private %encode_single_root(v0.i256, v1.objref<@layout_0>) { jump block1; block1: - v4.i256 = call %base v1; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_24ab v1; (v6.i256, v7.i1) = uaddo v4 32.i256; br v7 block2 block3; @@ -323,7 +339,7 @@ func private %encode_single_root_alloc(v0.i256) -> @layout_4 { v9.objref = obj.proj v4 1.i256; v10.i256 = extract_value v3 1.i256; obj.store v9 v10; - v11.i256 = call %base v4; + v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_24ab_0 v4; call %encode_single_root v0 v4; v13.objref<@layout_4> = obj.alloc @layout_4; v14.objref = obj.proj v13 0.i256; @@ -421,7 +437,7 @@ func private %impl_Cursor__new__g463e(v0.@layout_1) -> @layout_2 { return v11; } -func private %core__lib__abi__trait_AbiSize__payload_size__ge513_4e75(v0.i256) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__ge513_64aa(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -431,7 +447,7 @@ func private %core__lib__abi__trait_AbiSize__payload_size__ge513_4e75(v0.i256) - return 32.i256; } -func private %core__lib__abi__trait_AbiSize__payload_size__ge513_4e75_0(v0.i256) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__ge513_64aa_0(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -477,7 +493,7 @@ func private %set_pos(v0.objref<@layout_0>, v1.i256) { return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_90ae(v0.objref<@layout_0>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_65a5(v0.objref<@layout_0>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -494,7 +510,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_90ae(v0 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_9251(v0.objref<@layout_0>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_86b9(v0.objref<@layout_0>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; diff --git a/crates/codegen/tests/fixtures/sonatina_ir/ref_is_not_a_copy.snap b/crates/codegen/tests/fixtures/sonatina_ir/ref_is_not_a_copy.snap index 44b07fa059..17916e6042 100644 --- a/crates/codegen/tests/fixtures/sonatina_ir/ref_is_not_a_copy.snap +++ b/crates/codegen/tests/fixtures/sonatina_ir/ref_is_not_a_copy.snap @@ -43,7 +43,7 @@ func private %assert(v0.i1) { return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_28e3(v0.objref<@layout_1>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_434d(v0.objref<@layout_1>) -> i256 { block0: jump block1; @@ -53,7 +53,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_28e3(v0.objre return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_82b2(v0.objref<@layout_1>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_541d(v0.objref<@layout_1>) -> i256 { block0: jump block1; @@ -63,7 +63,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_82b2(v0.objre return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_f82f(v0.objref<@layout_1>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_a86a(v0.objref<@layout_1>) -> i256 { block0: jump block1; @@ -138,7 +138,7 @@ func private %dynamic_payload_size(v0.i256) -> i256 { block2: v3.i256 = mload v1 i256; - v4.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_4dac v3; + v4.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_c152 v3; return v4; block3: @@ -148,44 +148,16 @@ func private %dynamic_payload_size(v0.i256) -> i256 { return 0.i256; } -func private %encode__g9c6f(v0.@layout_0, v1.objref<@layout_1>) { - block0: - v2.objref<@layout_0> = obj.alloc @layout_0; - v3.*i256 = alloca i256; - v5.objref = obj.proj v2 0.i256; - v6.i256 = extract_value v0 0.i256; - obj.store v5 v6; - jump block1; - - block1: - v8.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_28e3 v1; - (v10.i256, v11.i1) = uaddo v8 32.i256; - br v11 block2 block3; - - block2: - mstore 0.i256 35408467139433450592217433187231851964531694900788300625387963629091585785856.i256 i256; - mstore 4.i256 17.i256 i256; - evm_revert 0.i256 36.i256; - - block3: - mstore v3 v10 i256; - v16.objref = obj.proj v2 0.i256; - v17.i256 = obj.load v16; - v18.i256 = ptr_to_int v3 i256; - call %encode_field v17 v1 v18; - return; -} - func private %encode__g426c(v0.i256, v1.objref<@layout_1>) { block0: jump block1; block1: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_4c7a v1 v0; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_1126 v1 v0; return; } -func private %encode_abi_payload(v0.@layout_0) -> @layout_2 { +func private %encode_abi_payload_abi(v0.@layout_0) -> @layout_2 { block0: jump block1; @@ -212,7 +184,7 @@ func private %encode_alloc(v0.@layout_0) -> @layout_2 { v12.objref = obj.proj v8 1.i256; v13.i256 = extract_value v7 1.i256; obj.store v12 v13; - v14.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_f82f v8; + v14.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_541d v8; call %encode__g9c6f v0 v8; v16.objref<@layout_2> = obj.alloc @layout_2; v17.objref = obj.proj v16 0.i256; @@ -230,53 +202,112 @@ func private %encode_calldata(v0.i32, v1.@layout_0) -> @layout_2 { jump block1; block1: - v4.i32 = mload v2 i32; - v5.i256 = zext v4 i256; - v7.i256 = shl 224.i256 v5; - v9.@layout_2 = call %encode_abi_payload v1; - v10.objref<@layout_2> = obj.alloc @layout_2; - v12.objref = obj.proj v10 0.i256; - v13.i256 = extract_value v9 0.i256; - obj.store v12 v13; - v15.objref = obj.proj v10 1.i256; - v16.i256 = extract_value v9 1.i256; - obj.store v15 v16; - v17.objref = obj.proj v10 1.i256; - v18.i256 = obj.load v17; - (v19.i256, v20.i1) = uaddo 4.i256 v18; - br v20 block2 block3; + v3.i32 = mload v2 i32; + v5.@layout_2 = call %encode_calldata_abi v3 v1; + return v5; +} + +func private %encode_calldata_abi(v0.i32, v1.@layout_0) -> @layout_2 { + block0: + v2.*i32 = alloca i32; + mstore v2 v0 i32; + jump block1; + + block1: + br 0.i1 block2 block3; block2: - mstore 0.i256 35408467139433450592217433187231851964531694900788300625387963629091585785856.i256 i256; - mstore 4.i256 17.i256 i256; - evm_revert 0.i256 36.i256; + v7.@layout_2 = call %encode_abi_payload_abi v1; + return v7; block3: - v24.*i8 = evm_malloc v19; - v25.i256 = ptr_to_int v24 i256; - mstore v25 v7 i256; - (v29.i256, v30.i1) = uaddo v25 4.i256; - br v30 block2 block4; + jump block4; block4: - v32.objref = obj.proj v10 0.i256; - v33.i256 = obj.load v32; - v34.objref = obj.proj v10 1.i256; - v35.i256 = obj.load v34; - call %copy_words v29 v33 v35; - v37.objref = obj.proj v10 1.i256; - v38.i256 = obj.load v37; - (v40.i256, v41.i1) = uaddo 4.i256 v38; - br v41 block2 block5; + br 0.i1 block5 block6; block5: - v42.objref<@layout_2> = obj.alloc @layout_2; - v44.objref = obj.proj v42 0.i256; - obj.store v44 v25; - v45.objref = obj.proj v42 1.i256; - obj.store v45 v40; - v46.@layout_2 = obj.load v42; - return v46; + evm_revert 0.i256 0.i256; + + block6: + jump block7; + + block7: + v12.i32 = mload v2 i32; + v13.i256 = call %to_word__g6338 v12; + v14.i256 = shl 224.i256 v13; + v16.@layout_2 = call %encode_abi_payload_abi v1; + v17.objref<@layout_2> = obj.alloc @layout_2; + v18.objref = obj.proj v17 0.i256; + v19.i256 = extract_value v16 0.i256; + obj.store v18 v19; + v21.objref = obj.proj v17 1.i256; + v22.i256 = extract_value v16 1.i256; + obj.store v21 v22; + v23.objref = obj.proj v17 1.i256; + v24.i256 = obj.load v23; + (v26.i256, v27.i1) = uaddo 4.i256 v24; + br v27 block8 block9; + + block8: + mstore 0.i256 35408467139433450592217433187231851964531694900788300625387963629091585785856.i256 i256; + mstore 4.i256 17.i256 i256; + evm_revert 0.i256 36.i256; + + block9: + v31.*i8 = evm_malloc v26; + v32.i256 = ptr_to_int v31 i256; + mstore v32 v14 i256; + (v36.i256, v37.i1) = uaddo v32 4.i256; + br v37 block8 block10; + + block10: + v39.objref = obj.proj v17 0.i256; + v40.i256 = obj.load v39; + v41.objref = obj.proj v17 1.i256; + v42.i256 = obj.load v41; + call %copy_words v36 v40 v42; + v44.objref = obj.proj v17 1.i256; + v45.i256 = obj.load v44; + (v47.i256, v48.i1) = uaddo 4.i256 v45; + br v48 block8 block11; + + block11: + v49.objref<@layout_2> = obj.alloc @layout_2; + v51.objref = obj.proj v49 0.i256; + obj.store v51 v32; + v52.objref = obj.proj v49 1.i256; + obj.store v52 v47; + v53.@layout_2 = obj.load v49; + return v53; +} + +func private %encode__g9c6f(v0.@layout_0, v1.objref<@layout_1>) { + block0: + v2.objref<@layout_0> = obj.alloc @layout_0; + v3.*i256 = alloca i256; + v5.objref = obj.proj v2 0.i256; + v6.i256 = extract_value v0 0.i256; + obj.store v5 v6; + jump block1; + + block1: + v8.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_434d v1; + (v10.i256, v11.i1) = uaddo v8 32.i256; + br v11 block2 block3; + + block2: + mstore 0.i256 35408467139433450592217433187231851964531694900788300625387963629091585785856.i256 i256; + mstore 4.i256 17.i256 i256; + evm_revert 0.i256 36.i256; + + block3: + mstore v3 v10 i256; + v16.objref = obj.proj v2 0.i256; + v17.i256 = obj.load v16; + v18.i256 = ptr_to_int v3 i256; + call %encode_field v17 v1 v18; + return; } func private %encode_field(v0.i256, v1.objref<@layout_1>, v2.i256) { @@ -287,8 +318,8 @@ func private %encode_field(v0.i256, v1.objref<@layout_1>, v2.i256) { br 0.i1 block2 block3; block2: - v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_82b2 v1; - v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_98c3 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_a86a v1; + v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_0cc4 v0; v9.i256 = mload v2 i256; (v10.i256, v11.i1) = usubo v9 v5; br v11 block5 block6; @@ -306,7 +337,7 @@ func private %encode_field(v0.i256, v1.objref<@layout_1>, v2.i256) { evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_d090 v1 v10; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_7144 v1 v10; v19.i256 = call %pos v1; v21.i256 = mload v2 i256; call %set_base v1 v21; @@ -401,17 +432,7 @@ func private %new(v0.i256) -> @layout_1 { return v13; } -func private %core__lib__abi__trait_AbiSize__payload_size__ge513_4dac(v0.i256) -> i256 { - block0: - v1.*i256 = alloca i256; - mstore v1 v0 i256; - jump block1; - - block1: - return 32.i256; -} - -func private %core__lib__abi__trait_AbiSize__payload_size__ge513_98c3(v0.i256) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__ge513_0cc4(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -441,6 +462,16 @@ func private %impl_trait_Panic__payload_size(v0.objref<@layout_0>) -> i256 { return v7; } +func private %core__lib__abi__trait_AbiSize__payload_size__ge513_c152(v0.i256) -> i256 { + block0: + v1.*i256 = alloca i256; + mstore v1 v0 i256; + jump block1; + + block1: + return 32.i256; +} + func private %pos(v0.objref<@layout_1>) -> i256 { block0: jump block1; @@ -540,7 +571,31 @@ func private %test_ref_is_not_a_copy() { return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_4c7a(v0.objref<@layout_1>, v1.i256) { +func private %impl_trait_u32__to_word(v0.i32) -> i256 { + block0: + v1.*i32 = alloca i32; + mstore v1 v0 i32; + jump block1; + + block1: + v2.i32 = mload v1 i32; + v3.i256 = zext v2 i256; + return v3; +} + +func private %to_word__g6338(v0.i32) -> i256 { + block0: + v1.*i32 = alloca i32; + mstore v1 v0 i32; + jump block1; + + block1: + v2.i32 = mload v1 i32; + v3.i256 = call %impl_trait_u32__to_word v2; + return v3; +} + +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_1126(v0.objref<@layout_1>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -557,7 +612,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_4c7a(v0 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_d090(v0.objref<@layout_1>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_7144(v0.objref<@layout_1>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; diff --git a/crates/codegen/tests/fixtures/sonatina_ir/revert.snap b/crates/codegen/tests/fixtures/sonatina_ir/revert.snap index 7a91653908..3d33c09551 100644 --- a/crates/codegen/tests/fixtures/sonatina_ir/revert.snap +++ b/crates/codegen/tests/fixtures/sonatina_ir/revert.snap @@ -1,5 +1,6 @@ --- source: crates/codegen/tests/sonatina_ir.rs +assertion_line: 403 expression: output input_file: crates/codegen/tests/fixtures/revert.fe --- @@ -14,7 +15,7 @@ func private %standalone_revert__revert__fail__gcd5c_631a(v0.objref<@layout_1>) block1: call %std__lib__evm__effects__impl_trait_Evm_d0d8__mstore_feb5 v0 0.i256 42.i256; - call %std__lib__evm__effects__impl_trait_Evm_0098__revert_8f03_0 0.i256 32.i256; + call %std__lib__evm__effects__impl_trait_Evm_0098__revert_8f03 0.i256 32.i256; unreachable; } @@ -24,7 +25,7 @@ func private %standalone_revert__revert__fail__gcd5c_7451(v0.objref<@layout_1>) block1: call %std__lib__evm__effects__impl_trait_Evm_d0d8__mstore_feb5_0 v0 0.i256 42.i256; - call %std__lib__evm__effects__impl_trait_Evm_0098__revert_8f03 0.i256 32.i256; + call %std__lib__evm__effects__impl_trait_Evm_0098__revert_8f03_0 0.i256 32.i256; unreachable; } diff --git a/crates/codegen/tests/fixtures/sonatina_ir/tstor_ptr_contract.snap b/crates/codegen/tests/fixtures/sonatina_ir/tstor_ptr_contract.snap index c4049a50ce..880f5977eb 100644 --- a/crates/codegen/tests/fixtures/sonatina_ir/tstor_ptr_contract.snap +++ b/crates/codegen/tests/fixtures/sonatina_ir/tstor_ptr_contract.snap @@ -1,5 +1,6 @@ --- source: crates/codegen/tests/sonatina_ir.rs +assertion_line: 403 expression: output input_file: crates/codegen/tests/fixtures/tstor_ptr_contract.fe --- @@ -53,7 +54,7 @@ func private %abi_field_size(v0.i1) -> i256 { block1: v2.i1 = mload v1 i1; - v3.i256 = call %core__lib__abi__trait_AbiSize__payload_size__gda9b_f558_0 v2; + v3.i256 = call %core__lib__abi__trait_AbiSize__payload_size__gda9b_01fa_0 v2; br 0.i1 block2 block3; block2: @@ -87,7 +88,17 @@ func private %abi_single_root_size(v0.i1) -> i256 { return v3; } -func private %base(v0.objref<@layout_0>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_a447(v0.objref<@layout_0>) -> i256 { + block0: + jump block1; + + block1: + v3.objref = obj.proj v0 0.i256; + v4.i256 = obj.load v3; + return v4; +} + +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_a447_0(v0.objref<@layout_0>) -> i256 { block0: jump block1; @@ -200,15 +211,20 @@ func private %contract_runtime_root_GuardContract() { jump block1; block1: - v1.i256 = evm_calldata_load 0.i256; - v3.i256 = shr 224.i256 v1; - v4.i32 = trunc v3 i32; - br_table v4 block2 (1.i32 block3); + v1.i256 = evm_calldata_size; + v3.i1 = lt v1 4.i256; + br v3 block2 block3; block2: evm_revert 0.i256 0.i256; block3: + v5.i256 = evm_calldata_load 0.i256; + v7.i256 = shr 224.i256 v5; + v8.i32 = trunc v7 i32; + br_table v8 block2 (1.i32 block4); + + block4: call %contract_recv_abi_GuardContract_1; unreachable; } @@ -238,11 +254,11 @@ func private %encode(v0.i1, v1.objref<@layout_0>) { br v0 block2 block3; block2: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_9a9f v1 1.i256; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_06ad v1 1.i256; jump block4; block3: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_9a9f v1 0.i256; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_06ad v1 0.i256; jump block4; block4: @@ -257,8 +273,8 @@ func private %encode_field(v0.i1, v1.objref<@layout_0>, v2.i256) { br 0.i1 block2 block3; block2: - v5.i256 = call %base v1; - v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__gda9b_f558 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_a447 v1; + v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__gda9b_01fa v0; v9.i256 = mload v2 i256; (v10.i256, v11.i1) = usubo v9 v5; br v11 block5 block6; @@ -276,7 +292,7 @@ func private %encode_field(v0.i1, v1.objref<@layout_0>, v2.i256) { evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_74a3 v1 v10; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_5de7 v1 v10; v19.i256 = call %pos v1; v21.i256 = mload v2 i256; call %set_base v1 v21; @@ -300,7 +316,7 @@ func private %encode_single_root(v0.i1, v1.objref<@layout_0>) { jump block1; block1: - v4.i256 = call %base v1; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_a447 v1; (v6.i256, v7.i1) = uaddo v4 32.i256; br v7 block2 block3; @@ -330,7 +346,7 @@ func private %encode_single_root_alloc(v0.i1) -> @layout_4 { v9.objref = obj.proj v4 1.i256; v10.i256 = extract_value v3 1.i256; obj.store v9 v10; - v11.i256 = call %base v4; + v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_a447_0 v4; call %encode_single_root v0 v4; v13.objref<@layout_4> = obj.alloc @layout_4; v14.objref = obj.proj v13 0.i256; @@ -353,6 +369,25 @@ func private %encoder_new(v0.i256) -> @layout_0 { return v3; } +func private %impl_Cursor__new__g463e(v0.@layout_1) -> @layout_2 { + block0: + jump block1; + + block1: + v2.objref<@layout_2> = obj.alloc @layout_2; + v4.objref<@layout_1> = obj.proj v2 0.i256; + v5.objref = obj.proj v4 0.i256; + v6.i256 = extract_value v0 0.i256; + obj.store v5 v6; + v8.objref = obj.proj v4 1.i256; + v9.i256 = extract_value v0 1.i256; + obj.store v8 v9; + v10.objref = obj.proj v2 1.i256; + obj.store v10 0.i256; + v11.@layout_2 = obj.load v2; + return v11; +} + func private %impl_SolDecoder__new__g463e(v0.@layout_1) -> @layout_3 { block0: jump block1; @@ -409,26 +444,7 @@ func private %impl_SolEncoder__new(v0.i256) -> @layout_0 { return v13; } -func private %impl_Cursor__new__g463e(v0.@layout_1) -> @layout_2 { - block0: - jump block1; - - block1: - v2.objref<@layout_2> = obj.alloc @layout_2; - v4.objref<@layout_1> = obj.proj v2 0.i256; - v5.objref = obj.proj v4 0.i256; - v6.i256 = extract_value v0 0.i256; - obj.store v5 v6; - v8.objref = obj.proj v4 1.i256; - v9.i256 = extract_value v0 1.i256; - obj.store v8 v9; - v10.objref = obj.proj v2 1.i256; - obj.store v10 0.i256; - v11.@layout_2 = obj.load v2; - return v11; -} - -func private %core__lib__abi__trait_AbiSize__payload_size__gda9b_f558(v0.i1) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__gda9b_01fa(v0.i1) -> i256 { block0: v1.*i1 = alloca i1; mstore v1 v0 i1; @@ -438,7 +454,7 @@ func private %core__lib__abi__trait_AbiSize__payload_size__gda9b_f558(v0.i1) -> return 32.i256; } -func private %core__lib__abi__trait_AbiSize__payload_size__gda9b_f558_0(v0.i1) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__gda9b_01fa_0(v0.i1) -> i256 { block0: v1.*i1 = alloca i1; mstore v1 v0 i1; @@ -484,7 +500,7 @@ func private %set_pos(v0.objref<@layout_0>, v1.i256) { return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_74a3(v0.objref<@layout_0>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_06ad(v0.objref<@layout_0>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -501,7 +517,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_74a3(v0 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_9a9f(v0.objref<@layout_0>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_5de7(v0.objref<@layout_0>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; diff --git a/crates/codegen/tests/fixtures/sonatina_ir/tuple_return_contract.snap b/crates/codegen/tests/fixtures/sonatina_ir/tuple_return_contract.snap index 6527f84684..5e6787a388 100644 --- a/crates/codegen/tests/fixtures/sonatina_ir/tuple_return_contract.snap +++ b/crates/codegen/tests/fixtures/sonatina_ir/tuple_return_contract.snap @@ -1,5 +1,6 @@ --- source: crates/codegen/tests/sonatina_ir.rs +assertion_line: 403 expression: output input_file: crates/codegen/tests/fixtures/tuple_return_contract.fe --- @@ -45,7 +46,7 @@ func private %abi_field_size(v0.@layout_1) -> i256 { block1: v10.@layout_1 = obj.load v1; - v11.i256 = call %core__lib__abi__impl_trait____ccb6__payload_size__g6d15_e33b_0 v10; + v11.i256 = call %core__lib__abi__impl_trait____ccb6__payload_size__g6d15_af22_0 v10; br 0.i1 block2 block3; block2: @@ -86,7 +87,7 @@ func private %abi_single_root_size(v0.@layout_1) -> i256 { return v11; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_8e95(v0.objref<@layout_2>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_1e68(v0.objref<@layout_2>) -> i256 { block0: jump block1; @@ -96,7 +97,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_8e95(v0.objre return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_8e95_0(v0.objref<@layout_2>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_1e68_0(v0.objref<@layout_2>) -> i256 { block0: jump block1; @@ -106,7 +107,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_8e95_0(v0.obj return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_8e95_1(v0.objref<@layout_2>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_7189(v0.objref<@layout_2>) -> i256 { block0: jump block1; @@ -116,7 +117,17 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_8e95_1(v0.obj return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_a403(v0.objref<@layout_2>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_7189_0(v0.objref<@layout_2>) -> i256 { + block0: + jump block1; + + block1: + v3.objref = obj.proj v0 0.i256; + v4.i256 = obj.load v3; + return v4; +} + +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_7189_1(v0.objref<@layout_2>) -> i256 { block0: jump block1; @@ -228,15 +239,20 @@ func private %contract_runtime_root_TupleReturnContract() { jump block1; block1: - v1.i256 = evm_calldata_load 0.i256; - v3.i256 = shr 224.i256 v1; - v4.i32 = trunc v3 i32; - br_table v4 block2 (1.i32 block3); + v1.i256 = evm_calldata_size; + v3.i1 = lt v1 4.i256; + br v3 block2 block3; block2: evm_revert 0.i256 0.i256; block3: + v5.i256 = evm_calldata_load 0.i256; + v7.i256 = shr 224.i256 v5; + v8.i32 = trunc v7 i32; + br_table v8 block2 (1.i32 block4); + + block4: call %contract_recv_abi_TupleReturnContract_1; unreachable; } @@ -258,7 +274,7 @@ func private %decoder_new(v0.@layout_3) -> @layout_5 { return v2; } -func private %core__lib__abi__dynamic_payload_size__g67a8_baae(v0.@layout_0) -> i256 { +func private %core__lib__abi__dynamic_payload_size__g67a8_486e(v0.@layout_0) -> i256 { block0: v1.objref<@layout_0> = obj.alloc @layout_0; v3.objref = obj.proj v1 0.i256; @@ -271,7 +287,7 @@ func private %core__lib__abi__dynamic_payload_size__g67a8_baae(v0.@layout_0) -> block2: v6.@layout_0 = obj.load v1; - v7.i256 = call %core__lib__abi__trait_AbiSize__payload_size__g67a8_75f0 v6; + v7.i256 = call %core__lib__abi__trait_AbiSize__payload_size__g67a8_92b9 v6; return v7; block3: @@ -281,7 +297,7 @@ func private %core__lib__abi__dynamic_payload_size__g67a8_baae(v0.@layout_0) -> return 0.i256; } -func private %core__lib__abi__dynamic_payload_size__g67a8_baae_0(v0.@layout_0) -> i256 { +func private %core__lib__abi__dynamic_payload_size__g67a8_486e_0(v0.@layout_0) -> i256 { block0: v1.objref<@layout_0> = obj.alloc @layout_0; v3.objref = obj.proj v1 0.i256; @@ -294,7 +310,7 @@ func private %core__lib__abi__dynamic_payload_size__g67a8_baae_0(v0.@layout_0) - block2: v6.@layout_0 = obj.load v1; - v7.i256 = call %core__lib__abi__trait_AbiSize__payload_size__g67a8_75f0_0 v6; + v7.i256 = call %core__lib__abi__trait_AbiSize__payload_size__g67a8_92b9_0 v6; return v7; block3: @@ -304,7 +320,7 @@ func private %core__lib__abi__dynamic_payload_size__g67a8_baae_0(v0.@layout_0) - return 0.i256; } -func private %core__lib__abi__dynamic_payload_size__ge513_f973(v0.i256) -> i256 { +func private %core__lib__abi__dynamic_payload_size__ge513_b682(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -315,7 +331,7 @@ func private %core__lib__abi__dynamic_payload_size__ge513_f973(v0.i256) -> i256 block2: v3.i256 = mload v1 i256; - v4.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_c169 v3; + v4.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_64eb v3; return v4; block3: @@ -325,7 +341,7 @@ func private %core__lib__abi__dynamic_payload_size__ge513_f973(v0.i256) -> i256 return 0.i256; } -func private %core__lib__abi__dynamic_payload_size__ge513_f973_0(v0.i256) -> i256 { +func private %core__lib__abi__dynamic_payload_size__ge513_b682_0(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -336,7 +352,7 @@ func private %core__lib__abi__dynamic_payload_size__ge513_f973_0(v0.i256) -> i25 block2: v3.i256 = mload v1 i256; - v4.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_c169_0 v3; + v4.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_64eb_0 v3; return v4; block3: @@ -346,6 +362,30 @@ func private %core__lib__abi__dynamic_payload_size__ge513_f973_0(v0.i256) -> i25 return 0.i256; } +func private %impl_trait_Address__encode__g426c(v0.@layout_0, v1.objref<@layout_2>) { + block0: + v2.objref<@layout_0> = obj.alloc @layout_0; + v4.objref = obj.proj v2 0.i256; + v5.i256 = extract_value v0 0.i256; + obj.store v4 v5; + jump block1; + + block1: + v6.objref = obj.proj v2 0.i256; + v7.i256 = obj.load v6; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_92e0 v1 v7; + return; +} + +func private %impl_trait_u256__encode__g426c(v0.i256, v1.objref<@layout_2>) { + block0: + jump block1; + + block1: + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_92cb v1 v0; + return; +} + func private %encode__g4887(v0.@layout_1, v1.objref<@layout_2>) { block0: v2.objref<@layout_1> = obj.alloc @layout_1; @@ -361,7 +401,7 @@ func private %encode__g4887(v0.@layout_1, v1.objref<@layout_2>) { jump block1; block1: - v13.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_8e95_1 v1; + v13.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_7189_1 v1; (v15.i256, v16.i1) = uaddo v13 64.i256; br v16 block2 block3; @@ -383,31 +423,7 @@ func private %encode__g4887(v0.@layout_1, v1.objref<@layout_2>) { return; } -func private %impl_trait_u256__encode__g426c(v0.i256, v1.objref<@layout_2>) { - block0: - jump block1; - - block1: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_a864 v1 v0; - return; -} - -func private %impl_trait_Address__encode__g426c(v0.@layout_0, v1.objref<@layout_2>) { - block0: - v2.objref<@layout_0> = obj.alloc @layout_0; - v4.objref = obj.proj v2 0.i256; - v5.i256 = extract_value v0 0.i256; - obj.store v4 v5; - jump block1; - - block1: - v6.objref = obj.proj v2 0.i256; - v7.i256 = obj.load v6; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_e52b v1 v7; - return; -} - -func private %encode_field__g189a(v0.@layout_1, v1.objref<@layout_2>, v2.i256) { +func private %encode_field__g2e64(v0.i256, v1.objref<@layout_2>, v2.i256) { block0: jump block1; @@ -415,8 +431,8 @@ func private %encode_field__g189a(v0.@layout_1, v1.objref<@layout_2>, v2.i256) { br 0.i1 block2 block3; block2: - v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_a403 v1; - v8.i256 = call %core__lib__abi__impl_trait____ccb6__payload_size__g6d15_e33b v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_7189_0 v1; + v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_506c v0; v9.i256 = mload v2 i256; (v10.i256, v11.i1) = usubo v9 v5; br v11 block5 block6; @@ -425,7 +441,7 @@ func private %encode_field__g189a(v0.@layout_1, v1.objref<@layout_2>, v2.i256) { jump block4; block4: - call %encode__g4887 v0 v1; + call %impl_trait_u256__encode__g426c v0 v1; return; block5: @@ -434,15 +450,15 @@ func private %encode_field__g189a(v0.@layout_1, v1.objref<@layout_2>, v2.i256) { evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_4363 v1 v10; - v19.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_d646 v1; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_ed54_0 v1 v10; + v19.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__pos__gf13e_1a3f_0 v1; v21.i256 = mload v2 i256; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_80f4 v1 v21; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_da43_0 v1 v21; v23.i256 = mload v2 i256; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_516e v1 v23; - call %encode__g4887 v0 v1; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_80f4 v1 v5; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_516e v1 v19; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_c405_0 v1 v23; + call %impl_trait_u256__encode__g426c v0 v1; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_da43_0 v1 v5; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_c405_0 v1 v19; v30.i256 = mload v2 i256; (v32.i256, v33.i1) = uaddo v30 v8; br v33 block5 block7; @@ -452,7 +468,7 @@ func private %encode_field__g189a(v0.@layout_1, v1.objref<@layout_2>, v2.i256) { return; } -func private %encode_field__gf6b4(v0.@layout_0, v1.objref<@layout_2>, v2.i256) { +func private %encode_field__g189a(v0.@layout_1, v1.objref<@layout_2>, v2.i256) { block0: jump block1; @@ -460,8 +476,8 @@ func private %encode_field__gf6b4(v0.@layout_0, v1.objref<@layout_2>, v2.i256) { br 0.i1 block2 block3; block2: - v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_8e95 v1; - v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__g67a8_7cab v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_1e68 v1; + v8.i256 = call %core__lib__abi__impl_trait____ccb6__payload_size__g6d15_af22 v0; v9.i256 = mload v2 i256; (v10.i256, v11.i1) = usubo v9 v5; br v11 block5 block6; @@ -470,7 +486,7 @@ func private %encode_field__gf6b4(v0.@layout_0, v1.objref<@layout_2>, v2.i256) { jump block4; block4: - call %impl_trait_Address__encode__g426c v0 v1; + call %encode__g4887 v0 v1; return; block5: @@ -479,15 +495,15 @@ func private %encode_field__gf6b4(v0.@layout_0, v1.objref<@layout_2>, v2.i256) { evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_647a v1 v10; - v19.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_08db v1; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_4df3 v1 v10; + v19.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__pos__gf13e_0365 v1; v21.i256 = mload v2 i256; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_3ff5 v1 v21; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_a260 v1 v21; v23.i256 = mload v2 i256; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_0d08 v1 v23; - call %impl_trait_Address__encode__g426c v0 v1; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_3ff5 v1 v5; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_0d08 v1 v19; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_31f1 v1 v23; + call %encode__g4887 v0 v1; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_a260 v1 v5; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_31f1 v1 v19; v30.i256 = mload v2 i256; (v32.i256, v33.i1) = uaddo v30 v8; br v33 block5 block7; @@ -497,7 +513,7 @@ func private %encode_field__gf6b4(v0.@layout_0, v1.objref<@layout_2>, v2.i256) { return; } -func private %encode_field__g2e64(v0.i256, v1.objref<@layout_2>, v2.i256) { +func private %encode_field__gf6b4(v0.@layout_0, v1.objref<@layout_2>, v2.i256) { block0: jump block1; @@ -505,8 +521,8 @@ func private %encode_field__g2e64(v0.i256, v1.objref<@layout_2>, v2.i256) { br 0.i1 block2 block3; block2: - v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_8e95_0 v1; - v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__ge513_7c20 v0; + v5.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_7189 v1; + v8.i256 = call %core__lib__abi__trait_AbiSize__payload_size__g67a8_9b74 v0; v9.i256 = mload v2 i256; (v10.i256, v11.i1) = usubo v9 v5; br v11 block5 block6; @@ -515,7 +531,7 @@ func private %encode_field__g2e64(v0.i256, v1.objref<@layout_2>, v2.i256) { jump block4; block4: - call %impl_trait_u256__encode__g426c v0 v1; + call %impl_trait_Address__encode__g426c v0 v1; return; block5: @@ -524,15 +540,15 @@ func private %encode_field__g2e64(v0.i256, v1.objref<@layout_2>, v2.i256) { evm_revert 0.i256 36.i256; block6: - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_647a_0 v1 v10; - v19.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_08db_0 v1; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_ed54 v1 v10; + v19.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__pos__gf13e_1a3f v1; v21.i256 = mload v2 i256; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_3ff5_0 v1 v21; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_da43 v1 v21; v23.i256 = mload v2 i256; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_0d08_0 v1 v23; - call %impl_trait_u256__encode__g426c v0 v1; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_3ff5_0 v1 v5; - call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_0d08_0 v1 v19; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_c405 v1 v23; + call %impl_trait_Address__encode__g426c v0 v1; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_da43 v1 v5; + call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_c405 v1 v19; v30.i256 = mload v2 i256; (v32.i256, v33.i1) = uaddo v30 v8; br v33 block5 block7; @@ -548,7 +564,7 @@ func private %encode_single_root(v0.@layout_1, v1.objref<@layout_2>) { jump block1; block1: - v4.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_a403 v1; + v4.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_1e68 v1; (v6.i256, v7.i1) = uaddo v4 64.i256; br v7 block2 block3; @@ -578,7 +594,7 @@ func private %encode_single_root_alloc(v0.@layout_1) -> @layout_6 { v9.objref = obj.proj v4 1.i256; v10.i256 = extract_value v3 1.i256; obj.store v9 v10; - v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_19ce__base_a403 v4; + v11.i256 = call %std__lib__abi__sol__impl_trait_SolEncoder_dd96__base__gf13e_1e68_0 v4; call %encode_single_root v0 v4; v13.objref<@layout_6> = obj.alloc @layout_6; v14.objref = obj.proj v13 0.i256; @@ -620,31 +636,6 @@ func private %impl_Cursor__new__g463e(v0.@layout_3) -> @layout_4 { return v11; } -func private %impl_SolDecoder__new__g463e(v0.@layout_3) -> @layout_5 { - block0: - jump block1; - - block1: - v2.@layout_4 = call %impl_Cursor__new__g463e v0; - v4.objref<@layout_5> = obj.alloc @layout_5; - v5.objref<@layout_4> = obj.proj v4 0.i256; - v6.objref<@layout_3> = obj.proj v5 0.i256; - v7.@layout_3 = extract_value v2 0.i256; - v8.objref = obj.proj v6 0.i256; - v9.i256 = extract_value v7 0.i256; - obj.store v8 v9; - v11.objref = obj.proj v6 1.i256; - v12.i256 = extract_value v7 1.i256; - obj.store v11 v12; - v13.objref = obj.proj v5 1.i256; - v14.i256 = extract_value v2 1.i256; - obj.store v13 v14; - v15.objref = obj.proj v4 1.i256; - obj.store v15 0.i256; - v16.@layout_5 = obj.load v4; - return v16; -} - func private %impl_SolEncoder__new(v0.i256) -> @layout_2 { block0: v1.*i256 = alloca i256; @@ -676,31 +667,52 @@ func private %impl_SolEncoder__new(v0.i256) -> @layout_2 { return v13; } -func private %core__lib__abi__trait_AbiSize__payload_size__g67a8_75f0(v0.@layout_0) -> i256 { +func private %impl_SolDecoder__new__g463e(v0.@layout_3) -> @layout_5 { block0: - v1.objref<@layout_0> = obj.alloc @layout_0; - v3.objref = obj.proj v1 0.i256; - v4.i256 = extract_value v0 0.i256; - obj.store v3 v4; + jump block1; + + block1: + v2.@layout_4 = call %impl_Cursor__new__g463e v0; + v4.objref<@layout_5> = obj.alloc @layout_5; + v5.objref<@layout_4> = obj.proj v4 0.i256; + v6.objref<@layout_3> = obj.proj v5 0.i256; + v7.@layout_3 = extract_value v2 0.i256; + v8.objref = obj.proj v6 0.i256; + v9.i256 = extract_value v7 0.i256; + obj.store v8 v9; + v11.objref = obj.proj v6 1.i256; + v12.i256 = extract_value v7 1.i256; + obj.store v11 v12; + v13.objref = obj.proj v5 1.i256; + v14.i256 = extract_value v2 1.i256; + obj.store v13 v14; + v15.objref = obj.proj v4 1.i256; + obj.store v15 0.i256; + v16.@layout_5 = obj.load v4; + return v16; +} + +func private %core__lib__abi__trait_AbiSize__payload_size__ge513_506c(v0.i256) -> i256 { + block0: + v1.*i256 = alloca i256; + mstore v1 v0 i256; jump block1; block1: return 32.i256; } -func private %core__lib__abi__trait_AbiSize__payload_size__g67a8_75f0_0(v0.@layout_0) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__ge513_64eb(v0.i256) -> i256 { block0: - v1.objref<@layout_0> = obj.alloc @layout_0; - v3.objref = obj.proj v1 0.i256; - v4.i256 = extract_value v0 0.i256; - obj.store v3 v4; + v1.*i256 = alloca i256; + mstore v1 v0 i256; jump block1; block1: return 32.i256; } -func private %core__lib__abi__trait_AbiSize__payload_size__ge513_7c20(v0.i256) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__ge513_64eb_0(v0.i256) -> i256 { block0: v1.*i256 = alloca i256; mstore v1 v0 i256; @@ -710,7 +722,7 @@ func private %core__lib__abi__trait_AbiSize__payload_size__ge513_7c20(v0.i256) - return 32.i256; } -func private %core__lib__abi__trait_AbiSize__payload_size__g67a8_7cab(v0.@layout_0) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__g67a8_92b9(v0.@layout_0) -> i256 { block0: v1.objref<@layout_0> = obj.alloc @layout_0; v3.objref = obj.proj v1 0.i256; @@ -722,27 +734,31 @@ func private %core__lib__abi__trait_AbiSize__payload_size__g67a8_7cab(v0.@layout return 32.i256; } -func private %core__lib__abi__trait_AbiSize__payload_size__ge513_c169(v0.i256) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__g67a8_92b9_0(v0.@layout_0) -> i256 { block0: - v1.*i256 = alloca i256; - mstore v1 v0 i256; + v1.objref<@layout_0> = obj.alloc @layout_0; + v3.objref = obj.proj v1 0.i256; + v4.i256 = extract_value v0 0.i256; + obj.store v3 v4; jump block1; block1: return 32.i256; } -func private %core__lib__abi__trait_AbiSize__payload_size__ge513_c169_0(v0.i256) -> i256 { +func private %core__lib__abi__trait_AbiSize__payload_size__g67a8_9b74(v0.@layout_0) -> i256 { block0: - v1.*i256 = alloca i256; - mstore v1 v0 i256; + v1.objref<@layout_0> = obj.alloc @layout_0; + v3.objref = obj.proj v1 0.i256; + v4.i256 = extract_value v0 0.i256; + obj.store v3 v4; jump block1; block1: return 32.i256; } -func private %core__lib__abi__impl_trait____ccb6__payload_size__g6d15_e33b(v0.@layout_1) -> i256 { +func private %core__lib__abi__impl_trait____ccb6__payload_size__g6d15_af22(v0.@layout_1) -> i256 { block0: v1.objref<@layout_1> = obj.alloc @layout_1; v3.objref = obj.proj v1 0.i256; @@ -758,7 +774,7 @@ func private %core__lib__abi__impl_trait____ccb6__payload_size__g6d15_e33b(v0.@l block1: v11.objref = obj.proj v1 0.i256; v12.i256 = obj.load v11; - v13.i256 = call %core__lib__abi__dynamic_payload_size__ge513_f973 v12; + v13.i256 = call %core__lib__abi__dynamic_payload_size__ge513_b682 v12; (v14.i256, v15.i1) = uaddo 64.i256 v13; br v15 block2 block3; @@ -770,7 +786,7 @@ func private %core__lib__abi__impl_trait____ccb6__payload_size__g6d15_e33b(v0.@l block3: v20.objref<@layout_0> = obj.proj v1 1.i256; v21.@layout_0 = obj.load v20; - v22.i256 = call %core__lib__abi__dynamic_payload_size__g67a8_baae v21; + v22.i256 = call %core__lib__abi__dynamic_payload_size__g67a8_486e v21; (v23.i256, v24.i1) = uaddo v14 v22; br v24 block2 block4; @@ -778,7 +794,7 @@ func private %core__lib__abi__impl_trait____ccb6__payload_size__g6d15_e33b(v0.@l return v23; } -func private %core__lib__abi__impl_trait____ccb6__payload_size__g6d15_e33b_0(v0.@layout_1) -> i256 { +func private %core__lib__abi__impl_trait____ccb6__payload_size__g6d15_af22_0(v0.@layout_1) -> i256 { block0: v1.objref<@layout_1> = obj.alloc @layout_1; v3.objref = obj.proj v1 0.i256; @@ -794,7 +810,7 @@ func private %core__lib__abi__impl_trait____ccb6__payload_size__g6d15_e33b_0(v0. block1: v11.objref = obj.proj v1 0.i256; v12.i256 = obj.load v11; - v13.i256 = call %core__lib__abi__dynamic_payload_size__ge513_f973_0 v12; + v13.i256 = call %core__lib__abi__dynamic_payload_size__ge513_b682_0 v12; (v14.i256, v15.i1) = uaddo 64.i256 v13; br v15 block2 block3; @@ -806,7 +822,7 @@ func private %core__lib__abi__impl_trait____ccb6__payload_size__g6d15_e33b_0(v0. block3: v20.objref<@layout_0> = obj.proj v1 1.i256; v21.@layout_0 = obj.load v20; - v22.i256 = call %core__lib__abi__dynamic_payload_size__g67a8_baae_0 v21; + v22.i256 = call %core__lib__abi__dynamic_payload_size__g67a8_486e_0 v21; (v23.i256, v24.i1) = uaddo v14 v22; br v24 block2 block4; @@ -814,7 +830,7 @@ func private %core__lib__abi__impl_trait____ccb6__payload_size__g6d15_e33b_0(v0. return v23; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_08db(v0.objref<@layout_2>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__pos__gf13e_0365(v0.objref<@layout_2>) -> i256 { block0: jump block1; @@ -824,7 +840,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_08db(v0.objref return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_08db_0(v0.objref<@layout_2>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__pos__gf13e_1a3f(v0.objref<@layout_2>) -> i256 { block0: jump block1; @@ -834,7 +850,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_08db_0(v0.objr return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_d646(v0.objref<@layout_2>) -> i256 { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__pos__gf13e_1a3f_0(v0.objref<@layout_2>) -> i256 { block0: jump block1; @@ -844,7 +860,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__pos_d646(v0.objref return v4; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_3ff5(v0.objref<@layout_2>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_a260(v0.objref<@layout_2>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -857,7 +873,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_3ff5(v0.o return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_3ff5_0(v0.objref<@layout_2>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_da43(v0.objref<@layout_2>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -870,7 +886,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_3ff5_0(v0 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_80f4(v0.objref<@layout_2>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_base__gf13e_da43_0(v0.objref<@layout_2>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -883,7 +899,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_base_80f4(v0.o return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_0d08(v0.objref<@layout_2>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_31f1(v0.objref<@layout_2>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -896,7 +912,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_0d08(v0.ob return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_0d08_0(v0.objref<@layout_2>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_c405(v0.objref<@layout_2>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -909,7 +925,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_0d08_0(v0. return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_516e(v0.objref<@layout_2>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__set_pos__gf13e_c405_0(v0.objref<@layout_2>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -922,7 +938,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__set_pos_516e(v0.ob return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_4363(v0.objref<@layout_2>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_4df3(v0.objref<@layout_2>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -939,7 +955,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_4363(v0 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_647a(v0.objref<@layout_2>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_92cb(v0.objref<@layout_2>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -956,7 +972,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_647a(v0 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_647a_0(v0.objref<@layout_2>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_92e0(v0.objref<@layout_2>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -973,7 +989,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_647a_0( return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_a864(v0.objref<@layout_2>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_ed54(v0.objref<@layout_2>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; @@ -990,7 +1006,7 @@ func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_a864(v0 return; } -func private %std__lib__abi__sol__impl_trait_SolEncoder_19ce__write_word_e52b(v0.objref<@layout_2>, v1.i256) { +func private %std__lib__abi__sol__impl_trait_SolEncoder_dd96__write_word__gf13e_ed54_0(v0.objref<@layout_2>, v1.i256) { block0: v2.*i256 = alloca i256; mstore v2 v1 i256; diff --git a/crates/fe/src/abi.rs b/crates/fe/src/abi.rs index 787eb198ca..304ffe8e79 100644 --- a/crates/fe/src/abi.rs +++ b/crates/fe/src/abi.rs @@ -190,7 +190,10 @@ fn recv_arm_to_abi_entry( let arm = arm_view .arm(db) .ok_or_else(|| "missing recv arm during ABI generation".to_string())?; - if arm_view.is_fallback(db) { + let recv_abi_ty = arm_view.recv(db).abi_ty(db); + let abi_info = arm_view.abi_info(db, recv_abi_ty); + + if abi_info.is_fallback { return Ok(RecvArmAbiEmission::Emit(AbiEntry { entry_type: "fallback".to_string(), name: None, @@ -217,6 +220,11 @@ fn recv_arm_to_abi_entry( .to_opt() .map(|name| name.data(db).to_string()) .unwrap_or_else(|| "".to_string()); + if recv_abi_ty != sol_ty { + return Ok(RecvArmAbiEmission::Skip(format!( + "skipping recv arm `{variant_name}`: JSON ABI emission only supports `std::abi::Sol` recv blocks" + ))); + } if !variant_has_canonical_json_abi_shape(db, variant_struct) { return Ok(RecvArmAbiEmission::Skip(format!( "skipping recv arm `{variant_name}`: ABI shape is not compiler-known for manual `MsgVariant` impls; only `msg`-generated variants are emitted" @@ -251,6 +259,11 @@ fn recv_arm_to_abi_entry( "cannot emit JSON ABI for `{selector_signature}`: selector value could not be resolved" ) })?; + let selector_value = big_endian_bytes_to_u32(&selector_value.data(db).to_bytes_be()).ok_or_else(|| { + format!( + "cannot emit JSON ABI for `{selector_signature}`: selector value does not fit a 4-byte Sol selector" + ) + })?; let parsed_signature = parse_function_signature(selector_signature)?; ensure_selector_matches_signature( selector_signature, @@ -1034,6 +1047,16 @@ fn selector_for_signature(signature: &str) -> u32 { u32::from_be_bytes([output[0], output[1], output[2], output[3]]) } +fn big_endian_bytes_to_u32(bytes: &[u8]) -> Option { + if bytes.len() > 4 { + return None; + } + let mut padded = [0u8; 4]; + let offset = 4usize.saturating_sub(bytes.len()); + padded[offset..].copy_from_slice(bytes); + Some(u32::from_be_bytes(padded)) +} + fn resolve_sol_abi_ty<'db>( db: &'db DriverDataBase, scope: ScopeId<'db>, diff --git a/crates/fe/tests/fixtures/fe_test/custom_abi_selectors.fe b/crates/fe/tests/fixtures/fe_test/custom_abi_selectors.fe new file mode 100644 index 0000000000..bca3a6f1d6 --- /dev/null +++ b/crates/fe/tests/fixtures/fe_test/custom_abi_selectors.fe @@ -0,0 +1,339 @@ +use core::abi::Abi +use core::abi::ByteInput +use core::num::IntDowncast +use std::abi::Sol +use std::abi::SolDecoder +use std::abi::SolEncoder +use std::abi::sol +use std::evm::Address +use std::evm::Call +use std::evm::Create +use std::evm::Evm + +pub struct TinyAbi {} +pub struct ShortAbi {} + +impl Abi for TinyAbi { + type Selector = u8 + type Decoder = SolDecoder + type Encoder = SolEncoder + const SELECTOR_SIZE: u256 = 1 + + fn selector_from_prefix(_ prefix: u256) -> Self::Selector { + (prefix >> 248).downcast_unchecked() + } + + fn decode_bool_word(_ word: u256) -> bool { + Sol::decode_bool_word(word) + } + fn decode_u8_word(_ word: u256) -> u8 { + Sol::decode_u8_word(word) + } + fn decode_u16_word(_ word: u256) -> u16 { + Sol::decode_u16_word(word) + } + fn decode_u32_word(_ word: u256) -> u32 { + Sol::decode_u32_word(word) + } + fn decode_u64_word(_ word: u256) -> u64 { + Sol::decode_u64_word(word) + } + fn decode_u128_word(_ word: u256) -> u128 { + Sol::decode_u128_word(word) + } + fn decode_i8_word(_ word: u256) -> i8 { + Sol::decode_i8_word(word) + } + fn decode_i16_word(_ word: u256) -> i16 { + Sol::decode_i16_word(word) + } + fn decode_i32_word(_ word: u256) -> i32 { + Sol::decode_i32_word(word) + } + fn decode_i64_word(_ word: u256) -> i64 { + Sol::decode_i64_word(word) + } + fn decode_i128_word(_ word: u256) -> i128 { + Sol::decode_i128_word(word) + } + fn decode_error() -> ! { + Sol::decode_error() + } + + fn decoder_new(_ input: own I) -> Self::Decoder { + SolDecoder::new(input) + } + + fn decoder_with_base(_ input: own I, _ base: u256) -> Self::Decoder { + SolDecoder::with_base(input, base) + } + + fn encoder_new(_ size: u256) -> Self::Encoder { + SolEncoder::new(size) + } + fn store_word(ptr: u256, value: u256) { + Sol::store_word(ptr: ptr, value: value) + } +} + +impl Abi for ShortAbi { + type Selector = u16 + type Decoder = SolDecoder + type Encoder = SolEncoder + const SELECTOR_SIZE: u256 = 2 + + fn selector_from_prefix(_ prefix: u256) -> Self::Selector { + (prefix >> 240).downcast_unchecked() + } + + fn decode_bool_word(_ word: u256) -> bool { + Sol::decode_bool_word(word) + } + fn decode_u8_word(_ word: u256) -> u8 { + Sol::decode_u8_word(word) + } + fn decode_u16_word(_ word: u256) -> u16 { + Sol::decode_u16_word(word) + } + fn decode_u32_word(_ word: u256) -> u32 { + Sol::decode_u32_word(word) + } + fn decode_u64_word(_ word: u256) -> u64 { + Sol::decode_u64_word(word) + } + fn decode_u128_word(_ word: u256) -> u128 { + Sol::decode_u128_word(word) + } + fn decode_i8_word(_ word: u256) -> i8 { + Sol::decode_i8_word(word) + } + fn decode_i16_word(_ word: u256) -> i16 { + Sol::decode_i16_word(word) + } + fn decode_i32_word(_ word: u256) -> i32 { + Sol::decode_i32_word(word) + } + fn decode_i64_word(_ word: u256) -> i64 { + Sol::decode_i64_word(word) + } + fn decode_i128_word(_ word: u256) -> i128 { + Sol::decode_i128_word(word) + } + fn decode_error() -> ! { + Sol::decode_error() + } + + fn decoder_new(_ input: own I) -> Self::Decoder { + SolDecoder::new(input) + } + + fn decoder_with_base(_ input: own I, _ base: u256) -> Self::Decoder { + SolDecoder::with_base(input, base) + } + + fn encoder_new(_ size: u256) -> Self::Encoder { + SolEncoder::new(size) + } + fn store_word(ptr: u256, value: u256) { + Sol::store_word(ptr: ptr, value: value) + } +} + +const TINY_ALIAS: u8 = 0x7e + +const fn tiny_pick() -> u8 { + 0x42 +} + +const fn tiny_identity(_ selector: u8) -> u8 { + selector +} + +#[abi = TinyAbi] +msg TinyLiteralMsg { + #[selector = 0x2a] + Literal, +} + +#[abi = TinyAbi] +msg TinyConstMsg { + #[selector = TINY_ALIAS] + ConstAlias, +} + +#[abi = TinyAbi] +msg TinyFnMsg { + #[selector = tiny_pick()] + PickedByFn, + + #[selector = tiny_identity(0x33)] + PassedThroughFn, +} + +#[abi = TinyAbi] +msg TinyOneByte { + #[selector = 0x01] + One, +} + +#[abi = TinyAbi] +msg TinyBareMsg { + #[selector = 0x55] + Bare, +} + +#[abi = TinyAbi] +msg TinyArgsMsg { + #[selector = 0x10] + Set { value: u256 }, + + #[selector = 0x11] + Add { a: u256, b: u256 } -> u256, +} + +#[abi = ShortAbi] +msg ShortMsg { + #[selector = 0xbeef] + Short, +} + +#[abi = ShortAbi] +msg ShortArgsMsg { + #[selector = 0xabcd] + Set { value: u256 }, +} + +msg SolMsg { + #[selector = 0x00000001] + SolOne, + + #[selector = sol("solSet()")] + SolSet, + + #[selector = sol("last()")] + Last -> u256, +} + +pub contract SelectorTarget { + mut last: u256, + + recv TinyLiteralMsg { + Literal uses (mut last) { + last = 42 + } + } + + recv TinyConstMsg { + ConstAlias uses (mut last) { + last = 126 + } + } + + recv TinyFnMsg { + PickedByFn uses (mut last) { + last = 66 + } + PassedThroughFn uses (mut last) { + last = 51 + } + } + + recv TinyOneByte { + One uses (mut last) { + last = 1 + } + } + + recv ShortMsg { + Short uses (mut last) { + last = 48879 + } + } + + recv TinyArgsMsg { + Set { value } uses (mut last) { + last = value + } + + Add { a, b } -> u256 uses (mut last) { + let sum = a + b + last = sum + sum + } + } + + recv ShortArgsMsg { + Set { value } uses (mut last) { + last = value + } + } + + recv TinyBareMsg { + Bare uses (mut last) { + last = 85 + } + } + + recv SolMsg { + SolOne uses (mut last) { + last = 1001 + } + SolSet uses (mut last) { + last = 2002 + } + Last -> u256 uses (last) { + last + } + } +} + +fn assert_last(addr: Address, expected: u256) uses (evm: mut Evm) { + let actual: u256 = with (Call = evm) { + addr.call(SolMsg::Last {}) + } + assert(actual == expected) +} + +#[test] +fn custom_abi_selectors_dispatch_and_call() uses (evm: mut Evm) { + let target = evm.create2(value: 0, args: (), salt: 0) + + with (Call = evm) { + target.call(TinyLiteralMsg::Literal {}) + assert_last(addr: target, expected: 42) + + target.call(TinyConstMsg::ConstAlias {}) + assert_last(addr: target, expected: 126) + + target.call(TinyFnMsg::PickedByFn {}) + assert_last(addr: target, expected: 66) + + target.call(TinyFnMsg::PassedThroughFn {}) + assert_last(addr: target, expected: 51) + + target.call(ShortMsg::Short {}) + assert_last(addr: target, expected: 48879) + + target.call(TinyBareMsg::Bare {}) + assert_last(addr: target, expected: 85) + + target.call(TinyOneByte::One {}) + assert_last(addr: target, expected: 1) + + target.call(SolMsg::SolOne {}) + assert_last(addr: target, expected: 1001) + + target.call(SolMsg::SolSet {}) + assert_last(addr: target, expected: 2002) + + target.call(TinyArgsMsg::Set { value: 9999 }) + assert_last(addr: target, expected: 9999) + + let sum: u256 = target.call(TinyArgsMsg::Add { a: 7, b: 35 }) + assert(sum == 42) + assert_last(addr: target, expected: 42) + + target.call(ShortArgsMsg::Set { value: 123456 }) + assert_last(addr: target, expected: 123456) + } +} diff --git a/crates/hir/src/analysis/diagnostics.rs b/crates/hir/src/analysis/diagnostics.rs index 6aceaa7b77..b208438273 100644 --- a/crates/hir/src/analysis/diagnostics.rs +++ b/crates/hir/src/analysis/diagnostics.rs @@ -555,14 +555,14 @@ impl DiagnosticVoucher for crate::SelectorError { 4, "duplicate selector in msg block".to_string(), format!( - "`{}` has selector {:#010x} which conflicts with `{}`", + "`{}` has selector {} which conflicts with `{}`", self.variant_name, selector, first_variant_name ), vec!["each variant in a msg block must have a unique selector".to_string()], self.secondary_range.map(|range| SubDiagnostic { style: LabelStyle::Secondary, message: format!( - "`{first_variant_name}` with selector {selector:#010x} declared here" + "`{first_variant_name}` with selector {selector} declared here" ), span: Some(Span::new(self.file, range, SpanKind::Original)), }), @@ -3974,13 +3974,13 @@ impl DiagnosticVoucher for BodyDiag<'_> { SubDiagnostic { style: LabelStyle::Primary, message: format!( - "`{second}` has selector 0x{selector:08x} which conflicts with `{first}`" + "`{second}` has selector {selector} which conflicts with `{first}`" ), span: primary.resolve(db), }, SubDiagnostic { style: LabelStyle::Secondary, - message: format!("`{first}` with selector 0x{selector:08x} declared here"), + message: format!("`{first}` declared here"), span: first_use.resolve(db), }, ]; @@ -3989,7 +3989,7 @@ impl DiagnosticVoucher for BodyDiag<'_> { message: "duplicate selector across recv blocks".to_string(), sub_diagnostics, notes: vec![ - "each msg variant in a contract must have a unique selector".to_string(), + "each msg variant in a contract must have a unique, non-overlapping selector prefix".to_string(), ], error_code, } diff --git a/crates/hir/src/analysis/ty/diagnostics.rs b/crates/hir/src/analysis/ty/diagnostics.rs index d19fc43086..59f2ffe5e2 100644 --- a/crates/hir/src/analysis/ty/diagnostics.rs +++ b/crates/hir/src/analysis/ty/diagnostics.rs @@ -614,7 +614,7 @@ pub enum BodyDiag<'db> { RecvDuplicateSelector { primary: DynLazySpan<'db>, first_use: DynLazySpan<'db>, - selector: u32, + selector: String, first_variant: IdentId<'db>, second_variant: IdentId<'db>, }, diff --git a/crates/hir/src/analysis/ty/msg_selector.rs b/crates/hir/src/analysis/ty/msg_selector.rs index 2b6d17ea5a..8dccb71f0c 100644 --- a/crates/hir/src/analysis/ty/msg_selector.rs +++ b/crates/hir/src/analysis/ty/msg_selector.rs @@ -5,15 +5,27 @@ use parser::{ ast::{self, AttrListOwner as _, prelude::*}, }; -use crate::analysis::ty::diagnostics::FuncBodyDiag; -use crate::analysis::ty::ty_check::eval_msg_variant_selector; use crate::analysis::{ HirAnalysisDb, analysis_pass::ModuleAnalysisPass, diagnostics::DiagnosticVoucher, }; -use crate::hir_def::{ItemKind, Mod, Struct, TopLevelMod}; +use crate::analysis::{ + name_resolution::{PathRes, resolve_path}, + semantic::{SemConstScalar, SemConstValue, eval_body_owner_const}, + ty::{ + corelib::resolve_core_trait, + diagnostics::FuncBodyDiag, + trait_def::{TraitInstId, assoc_const_body_for_trait_inst}, + trait_resolution::{PredicateListId, TraitSolveCx}, + ty_check::{BodyOwner, eval_msg_variant_selector}, + ty_def::TyId, + }, +}; +use crate::hir_def::{IdentId, IntegerId, ItemKind, Mod, PathId, Struct, TopLevelMod}; use crate::lower::parse_file_impl; use crate::span::{DesugaredOrigin, HirOrigin, MsgDesugaredFocus}; use crate::{SelectorError, SelectorErrorKind}; +use common::{indexmap::IndexMap, ingot::IngotKind}; +use num_traits::ToPrimitive; pub struct MsgSelectorAnalysisPass; @@ -54,8 +66,11 @@ fn check_msg_mod<'db>( ) -> Vec> { let file = top_mod.file(db); - let mut seen: FxHashMap = FxHashMap::default(); + let mut seen: FxHashMap, (parser::TextRange, String, String)> = + FxHashMap::default(); let mut diags: Vec> = vec![]; + let abi_ty = resolve_msg_mod_abi_ty(db, msg_mod); + let selector_size = abi_ty.and_then(|ty| eval_abi_selector_size(db, msg_mod.scope(), ty)); for struct_ in msg_variant_structs(db, msg_mod) { let Some(name) = struct_.name(db).to_opt() else { @@ -66,18 +81,23 @@ fn check_msg_mod<'db>( db, crate::analysis::ty::adt_def::AdtRef::from(struct_).as_adt(db), ); - let Some(selector) = eval_msg_variant_selector(db, variant_ty, struct_.scope(), ty_diags) + let Some(abi_ty) = abi_ty else { + continue; + }; + let Some(selector) = + eval_msg_variant_selector(db, variant_ty, abi_ty, struct_.scope(), ty_diags) else { continue; }; + let selector_text = selector_text(db, selector, selector_size); let range = msg_variant_focus_range(db, top_mod, struct_, MsgDesugaredFocus::Selector); - if let Some((first_range, first_name)) = seen.get(&selector) { + if let Some((first_range, first_name, first_selector_text)) = seen.get(&selector) { diags.push(Box::new(SelectorError { kind: SelectorErrorKind::Duplicate { first_variant_name: first_name.clone(), - selector, + selector: first_selector_text.clone(), }, file, primary_range: range, @@ -85,13 +105,106 @@ fn check_msg_mod<'db>( variant_name: name.data(db).to_string(), }) as _); } else { - seen.insert(selector, (range, name.data(db).to_string())); + seen.insert(selector, (range, name.data(db).to_string(), selector_text)); } } diags } +fn resolve_msg_mod_abi_ty<'db>(db: &'db dyn HirAnalysisDb, msg_mod: Mod<'db>) -> Option> { + let assumptions = PredicateListId::empty_list(db); + if let Some(path) = ItemKind::Mod(msg_mod) + .attrs(db) + .and_then(|attrs| attrs.abi_path(db)) + && let Some(ty) = resolve_ty_path(db, path, msg_mod.scope(), assumptions) + { + return Some(ty); + } + resolve_sol_abi_ty(db, msg_mod.scope(), assumptions) +} + +fn resolve_ty_path<'db>( + db: &'db dyn HirAnalysisDb, + path: PathId<'db>, + scope: crate::hir_def::scope_graph::ScopeId<'db>, + assumptions: PredicateListId<'db>, +) -> Option> { + match resolve_path(db, path, scope, assumptions, false).ok()? { + PathRes::Ty(ty) | PathRes::TyAlias(_, ty) => Some(ty), + _ => None, + } +} + +fn resolve_sol_abi_ty<'db>( + db: &'db dyn HirAnalysisDb, + scope: crate::hir_def::scope_graph::ScopeId<'db>, + assumptions: PredicateListId<'db>, +) -> Option> { + let ingot = scope.ingot(db); + let std_root = if ingot.kind(db) == IngotKind::Std { + IdentId::make_ingot(db) + } else { + IdentId::new(db, "std".to_string()) + }; + + let sol_path = PathId::from_ident(db, std_root) + .push_ident(db, IdentId::new(db, "abi".to_string())) + .push_ident(db, IdentId::new(db, "Sol".to_string())); + + resolve_ty_path(db, sol_path, scope, assumptions) +} + +fn eval_abi_selector_size<'db>( + db: &'db dyn HirAnalysisDb, + scope: crate::hir_def::scope_graph::ScopeId<'db>, + abi_ty: TyId<'db>, +) -> Option { + let abi_trait = resolve_core_trait(db, scope, &["abi", "Abi"])?; + let inst = TraitInstId::new(db, abi_trait, vec![abi_ty], IndexMap::new()); + let solve_cx = TraitSolveCx::new(db, scope); + let selector_size_name = IdentId::new(db, "SELECTOR_SIZE".to_string()); + let body = assoc_const_body_for_trait_inst(db, solve_cx, inst, selector_size_name)?; + match eval_body_owner_const( + db, + BodyOwner::AnonConstBody { + body, + expected: TyId::u256(db), + }, + Vec::new(), + ) { + Ok(value) => match value.value(db) { + SemConstValue::Scalar { + value: SemConstScalar::Int { value }, + .. + } => value.to_usize(), + _ => None, + }, + _ => None, + } +} + +fn selector_text<'db>( + db: &'db dyn HirAnalysisDb, + selector: IntegerId<'db>, + selector_size: Option, +) -> String { + let mut bytes = selector.data(db).to_bytes_be(); + if let Some(size) = selector_size + && bytes.len() <= size + { + let mut padded = vec![0; size.saturating_sub(bytes.len())]; + padded.extend(bytes); + bytes = padded; + } + + let mut out = String::from("0x"); + for byte in bytes { + out.push_str(&format!("{byte:02x}")); + } + out +} + fn msg_variant_structs<'db>( db: &'db dyn HirAnalysisDb, msg_mod: Mod<'db>, diff --git a/crates/hir/src/analysis/ty/ty_check/contract.rs b/crates/hir/src/analysis/ty/ty_check/contract.rs index 7074619f0b..7180c97a22 100644 --- a/crates/hir/src/analysis/ty/ty_check/contract.rs +++ b/crates/hir/src/analysis/ty/ty_check/contract.rs @@ -12,25 +12,26 @@ use crate::{ analysis::{ HirAnalysisDb, name_resolution::{ExpectedPathKind, PathRes, diagnostics::PathResDiag, resolve_path}, - semantic::{SemConstScalar, SemConstValue, eval_body_owner_const}, + semantic::{CtfeError, SemConstScalar, SemConstValue, eval_body_owner_const}, ty::{ adt_def::AdtRef, canonical::Canonical, corelib::resolve_core_trait, diagnostics::{BodyDiag, FuncBodyDiag, TraitConstraintDiag, TyDiagCollection}, + normalize::normalize_ty, trait_def::TraitInstId, - trait_def::impls_for_ty, + trait_def::{assoc_const_body_for_trait_inst, impls_for_ty}, trait_resolution::{ GoalSatisfiability, PredicateListId, TraitSolveCx, is_goal_satisfiable, }, ty_check::check_body, - ty_def::{PrimTy, TyBase, TyData, TyId}, + ty_def::TyId, }, }, - hir_def::{Contract, IdentId, ItemKind, Mod, PathId, Struct, scope_graph::ScopeId}, + hir_def::{Contract, IdentId, IntegerId, ItemKind, Mod, PathId, Struct, scope_graph::ScopeId}, span::{DynLazySpan, path::LazyPathSpan}, }; -use common::{indexmap::IndexMap, ingot::IngotKind}; +use common::indexmap::IndexMap; #[allow(clippy::enum_variant_names)] pub enum VariantResError<'db> { @@ -61,24 +62,70 @@ fn implements_msg_variant<'db>(db: &'db dyn HirAnalysisDb, struct_: Struct<'db>) .any(|impl_| impl_.skip_binder().trait_def(db).eq(&msg_variant_trait)) } -fn resolve_sol_abi_ty<'db>( +fn implements_msg_variant_for_abi<'db>( db: &'db dyn HirAnalysisDb, + struct_: Struct<'db>, + abi_ty: TyId<'db>, scope: ScopeId<'db>, assumptions: PredicateListId<'db>, -) -> Option> { - let ingot = scope.ingot(db); - let std_root = if ingot.kind(db) == IngotKind::Std { - IdentId::make_ingot(db) - } else { - IdentId::new(db, "std".to_string()) +) -> bool { + let Some(msg_variant_trait) = resolve_core_trait(db, scope, &["message", "MsgVariant"]) else { + return false; }; - let sol_path = PathId::from_ident(db, std_root) - .push_ident(db, IdentId::new(db, "abi".to_string())) - .push_ident(db, IdentId::new(db, "Sol".to_string())); + let adt_def = AdtRef::from(struct_).as_adt(db); + let ty = TyId::adt(db, adt_def); + let inst = TraitInstId::new(db, msg_variant_trait, vec![ty, abi_ty], IndexMap::new()); + let solve_cx = TraitSolveCx::new(db, scope).with_assumptions(assumptions); + !matches!( + is_goal_satisfiable(db, solve_cx, inst), + GoalSatisfiability::UnSat(_) + ) +} + +fn abi_selector_ty<'db>( + db: &'db dyn HirAnalysisDb, + scope: ScopeId<'db>, + assumptions: PredicateListId<'db>, + abi_ty: TyId<'db>, +) -> Option> { + let abi_trait = resolve_core_trait(db, scope, &["abi", "Abi"])?; + let inst = TraitInstId::new(db, abi_trait, vec![abi_ty], IndexMap::new()); + let selector_ident = IdentId::new(db, "Selector".to_string()); + Some(normalize_ty( + db, + TyId::assoc_ty(db, inst, selector_ident), + scope, + assumptions, + )) +} - match resolve_path(db, sol_path, scope, assumptions, false).ok()? { - PathRes::Ty(ty) | PathRes::TyAlias(_, ty) => Some(ty), +fn eval_abi_selector_size<'db>( + db: &'db dyn HirAnalysisDb, + scope: ScopeId<'db>, + assumptions: PredicateListId<'db>, + abi_ty: TyId<'db>, +) -> Option { + let abi_trait = resolve_core_trait(db, scope, &["abi", "Abi"])?; + let inst = TraitInstId::new(db, abi_trait, vec![abi_ty], IndexMap::new()); + let solve_cx = TraitSolveCx::new(db, scope).with_assumptions(assumptions); + let selector_size_name = IdentId::new(db, "SELECTOR_SIZE".to_string()); + let body = assoc_const_body_for_trait_inst(db, solve_cx, inst, selector_size_name)?; + match eval_body_owner_const( + db, + BodyOwner::AnonConstBody { + body, + expected: TyId::u256(db), + }, + Vec::new(), + ) { + Ok(value) => match value.value(db) { + SemConstValue::Scalar { + value: SemConstScalar::Int { value }, + .. + } => value.to_usize(), + _ => None, + }, _ => None, } } @@ -88,7 +135,7 @@ fn check_ty_decodable<'db>( db: &'db dyn HirAnalysisDb, solve_cx: TraitSolveCx<'db>, decode_trait: crate::hir_def::Trait<'db>, - sol_ty: TyId<'db>, + abi_ty: TyId<'db>, ty: TyId<'db>, span: DynLazySpan<'db>, diags: &mut Vec>, @@ -103,7 +150,7 @@ fn check_ty_decodable<'db>( db, solve_cx, decode_trait, - sol_ty, + abi_ty, elem, span.clone(), diags, @@ -116,7 +163,7 @@ fn check_ty_decodable<'db>( return; } - let inst = TraitInstId::new(db, decode_trait, vec![ty, sol_ty], IndexMap::new()); + let inst = TraitInstId::new(db, decode_trait, vec![ty, abi_ty], IndexMap::new()); if let GoalSatisfiability::UnSat(_) = is_goal_satisfiable(db, solve_cx, inst) { diags.push( TyDiagCollection::from(TraitConstraintDiag::TraitBoundNotSat { @@ -134,13 +181,11 @@ fn check_recv_variant_param_types_decodable<'db>( db: &'db dyn HirAnalysisDb, contract: Contract<'db>, variant: ResolvedRecvVariant<'db>, + abi_ty: TyId<'db>, span: DynLazySpan<'db>, assumptions: PredicateListId<'db>, diags: &mut Vec>, ) { - let Some(sol_ty) = resolve_sol_abi_ty(db, contract.scope(), assumptions) else { - return; - }; let Some(decode_trait) = resolve_core_trait(db, contract.scope(), &["abi", "Decode"]) else { return; }; @@ -151,7 +196,7 @@ fn check_recv_variant_param_types_decodable<'db>( db, solve_cx, decode_trait, - sol_ty, + abi_ty, field_ty, span.clone(), diags, @@ -173,6 +218,17 @@ fn msg_variants<'db>( .filter(move |s| implements_msg_variant(db, *s)) } +fn msg_variants_for_abi<'db>( + db: &'db dyn HirAnalysisDb, + msg_mod: Mod<'db>, + abi_ty: TyId<'db>, + scope: ScopeId<'db>, + assumptions: PredicateListId<'db>, +) -> impl Iterator> + 'db { + msg_variants(db, msg_mod) + .filter(move |s| implements_msg_variant_for_abi(db, *s, abi_ty, scope, assumptions)) +} + /// Resolved msg variant in a recv arm. #[derive(Debug, Clone, Copy)] pub struct ResolvedRecvVariant<'db> { @@ -250,6 +306,10 @@ pub fn check_contract_recv_block<'db>( let recv_span = contract.span().recv(recv_idx as usize); let path_span = recv_span.clone().path(); + let recv_view = contract + .recv(db, recv_idx) + .expect("recv index was validated above"); + let abi_ty = recv_view.abi_ty(db); // Check if this is a named recv block (recv MsgType { ... }) or bare (recv { ... }) if let Some(msg_mod) = resolve_recv_msg_mod( @@ -261,10 +321,10 @@ pub fn check_contract_recv_block<'db>( true, ) { // Named recv block - validate against the specific msg module - check_named_recv_block(db, contract, recv_idx, msg_mod, &mut diags); + check_named_recv_block(db, contract, recv_idx, msg_mod, abi_ty, &mut diags); } else if recv.msg_path.is_none() { // Bare recv block - no msg module specified - check_bare_recv_block(db, contract, recv_idx, &mut diags); + check_bare_recv_block(db, contract, recv_idx, abi_ty, &mut diags); } // If msg_path was Some but didn't resolve, diagnostics were already emitted @@ -278,6 +338,7 @@ fn check_named_recv_block<'db>( contract: Contract<'db>, recv_idx: u32, msg_mod: Mod<'db>, + abi_ty: TyId<'db>, diags: &mut Vec>, ) { let recv = &contract.recvs(db).data(db)[recv_idx as usize]; @@ -327,6 +388,23 @@ fn check_named_recv_block<'db>( continue; }; + if !implements_msg_variant_for_abi( + db, + resolved.variant_struct, + abi_ty, + contract.scope(), + assumptions, + ) { + diags.push( + BodyDiag::RecvArmNotMsgVariantTrait { + primary: pat_span, + given_ty: resolved.ty, + } + .into(), + ); + continue; + } + if let Some(first_span) = seen.get(&resolved.ty) { diags.push( BodyDiag::RecvArmDuplicateVariant { @@ -346,6 +424,7 @@ fn check_named_recv_block<'db>( db, contract, resolved, + abi_ty, pat_span.clone(), assumptions, diags, @@ -387,7 +466,7 @@ fn check_named_recv_block<'db>( } // Check for missing variants (exhaustiveness) - let missing: Vec<_> = msg_variants(db, msg_mod) + let missing: Vec<_> = msg_variants_for_abi(db, msg_mod, abi_ty, contract.scope(), assumptions) .filter_map(|variant| { if !covered.contains(&variant) { variant.name(db).to_opt() @@ -414,6 +493,7 @@ fn check_bare_recv_block<'db>( db: &'db dyn HirAnalysisDb, contract: Contract<'db>, recv_idx: u32, + abi_ty: TyId<'db>, diags: &mut Vec>, ) { let recv = &contract.recvs(db).data(db)[recv_idx as usize]; @@ -450,6 +530,23 @@ fn check_bare_recv_block<'db>( continue; }; + if !implements_msg_variant_for_abi( + db, + resolved.variant_struct, + abi_ty, + contract.scope(), + assumptions, + ) { + diags.push( + BodyDiag::RecvArmNotMsgVariantTrait { + primary: pat_span, + given_ty: resolved.ty, + } + .into(), + ); + continue; + } + if let Some(first_span) = seen.get(&resolved.ty) { diags.push( BodyDiag::RecvArmDuplicateVariant { @@ -468,6 +565,7 @@ fn check_bare_recv_block<'db>( db, contract, resolved, + abi_ty, pat_span.clone(), assumptions, diags, @@ -504,14 +602,14 @@ pub fn check_contract_recv_blocks<'db>( contract: Contract<'db>, ) -> Vec> { let mut diags = Vec::new(); - let mut seen_msg_blocks = FxHashMap::, (DynLazySpan<'db>, IdentId<'db>)>::default(); + let mut seen_msg_blocks = + FxHashMap::<(Mod<'db>, TyId<'db>), (DynLazySpan<'db>, IdentId<'db>)>::default(); let mut seen_fallback: Option> = None; - // Track selectors across ALL recv blocks: selector -> (span, variant_name, struct) - // We store the struct to correctly identify duplicates - comparing by name alone fails - // when different msg blocks have variants with the same name but different selectors. - let mut seen_selectors = - FxHashMap::, IdentId<'db>, Struct<'db>)>::default(); + // Track selectors across ALL recv blocks. Mixed selector sizes are ambiguous when + // one selector is a prefix of another, so conflicts are checked by bytes rather than + // by integer value alone. + let mut seen_selectors = Vec::>::new(); // Track handler types across ALL recv blocks for duplicate detection. // We use TyId to handle type aliases correctly. @@ -522,6 +620,11 @@ pub fn check_contract_recv_blocks<'db>( for (idx, recv) in contract.recvs(db).data(db).iter().enumerate() { let recv_span = contract.span().recv(idx); let path_span = recv_span.clone().path(); + let recv_view = contract + .recv(db, idx as u32) + .expect("recv index came from contract recv list"); + let abi_ty = recv_view.abi_ty(db); + let selector_size = eval_abi_selector_size(db, contract.scope(), assumptions, abi_ty); for (arm_idx, arm) in recv.arms.data(db).iter().enumerate() { if !arm.is_fallback(db) { @@ -556,9 +659,10 @@ pub fn check_contract_recv_blocks<'db>( }; let path_span: DynLazySpan<'db> = path_span.into(); - let is_duplicate_msg_block = seen_msg_blocks.contains_key(&msg_mod); + let msg_block_key = (msg_mod, abi_ty); + let is_duplicate_msg_block = seen_msg_blocks.contains_key(&msg_block_key); if is_duplicate_msg_block { - if let Some((first_span, first_name)) = seen_msg_blocks.get(&msg_mod) { + if let Some((first_span, first_name)) = seen_msg_blocks.get(&msg_block_key) { diags.push( BodyDiag::RecvDuplicateMsgBlock { primary: path_span.clone(), @@ -571,11 +675,12 @@ pub fn check_contract_recv_blocks<'db>( // Skip handler/selector conflict checks for duplicate msg blocks continue; } else { - seen_msg_blocks.insert(msg_mod, (path_span.clone(), msg_name)); + seen_msg_blocks.insert(msg_block_key, (path_span.clone(), msg_name)); } // Check for selector and handler conflicts across all msg variants in this recv block - for variant in msg_variants(db, msg_mod) { + for variant in msg_variants_for_abi(db, msg_mod, abi_ty, contract.scope(), assumptions) + { let Some(variant_name) = variant.name(db).to_opt() else { continue; }; @@ -584,14 +689,19 @@ pub fn check_contract_recv_blocks<'db>( // Check selector conflicts let variant_ty = TyId::adt(db, AdtRef::from(variant).as_adt(db)); - if let Some(selector) = - eval_msg_variant_selector(db, variant_ty, variant.scope(), &mut diags) - { + if let (Some(selector), Some(selector_size)) = ( + eval_msg_variant_selector(db, variant_ty, abi_ty, variant.scope(), &mut diags), + selector_size, + ) { check_selector_conflict( - selector, - variant, - variant_name, - variant_span.clone(), + db, + selector_size, + SelectorUse { + selector, + variant, + variant_name, + span: variant_span.clone(), + }, &mut seen_selectors, &mut diags, ); @@ -616,19 +726,39 @@ pub fn check_contract_recv_blocks<'db>( }; if let Ok(resolved) = resolve_variant_bare(db, contract, path, assumptions) { + if !implements_msg_variant_for_abi( + db, + resolved.variant_struct, + abi_ty, + contract.scope(), + assumptions, + ) { + continue; + } let Some(variant_name) = resolved.variant_struct.name(db).to_opt() else { continue; }; // Check selector conflicts - if let Some(selector) = - eval_msg_variant_selector(db, resolved.ty, contract.scope(), &mut diags) - { + if let (Some(selector), Some(selector_size)) = ( + eval_msg_variant_selector( + db, + resolved.ty, + abi_ty, + contract.scope(), + &mut diags, + ), + selector_size, + ) { check_selector_conflict( - selector, - resolved.variant_struct, - variant_name, - pat_span.clone(), + db, + selector_size, + SelectorUse { + selector, + variant: resolved.variant_struct, + variant_name, + span: pat_span.clone(), + }, &mut seen_selectors, &mut diags, ); @@ -644,32 +774,89 @@ pub fn check_contract_recv_blocks<'db>( diags } -/// Check for selector conflicts and emit diagnostics if found. -fn check_selector_conflict<'db>( - selector: u32, +struct SeenSelector<'db> { + bytes: Vec, + text: String, + span: DynLazySpan<'db>, + variant_name: IdentId<'db>, + variant: Struct<'db>, +} + +struct SelectorUse<'db> { + selector: IntegerId<'db>, variant: Struct<'db>, variant_name: IdentId<'db>, - variant_span: DynLazySpan<'db>, - seen_selectors: &mut FxHashMap, IdentId<'db>, Struct<'db>)>, + span: DynLazySpan<'db>, +} + +fn selector_bytes<'db>( + db: &'db dyn HirAnalysisDb, + selector: IntegerId<'db>, + selector_size: usize, +) -> Option> { + let raw = selector.data(db).to_bytes_be(); + if raw.len() > selector_size { + return None; + } + let mut out = vec![0; selector_size.saturating_sub(raw.len())]; + out.extend(raw); + Some(out) +} + +fn selector_hex(bytes: &[u8]) -> String { + let mut out = String::from("0x"); + for byte in bytes { + out.push_str(&format!("{byte:02x}")); + } + out +} + +fn selector_prefixes_overlap(left: &[u8], right: &[u8]) -> bool { + left.iter().zip(right.iter()).all(|(lhs, rhs)| lhs == rhs) +} + +/// Check for selector conflicts and emit diagnostics if found. +fn check_selector_conflict<'db>( + db: &'db dyn HirAnalysisDb, + selector_size: usize, + use_: SelectorUse<'db>, + seen_selectors: &mut Vec>, diags: &mut Vec>, ) { - if let Some((first_span, first_variant, first_struct)) = seen_selectors.get(&selector) { + let Some(bytes) = selector_bytes(db, use_.selector, selector_size) else { + return; + }; + let selector_text = selector_hex(&bytes); + + for first in seen_selectors.iter() { // Don't report if it's the same variant (duplicate msg block already reported) - if *first_struct != variant { + if first.variant != use_.variant && selector_prefixes_overlap(&first.bytes, &bytes) { + let selector_desc = if first.text == selector_text { + selector_text.clone() + } else { + format!("{selector_text} overlaps {}", first.text) + }; diags.push( BodyDiag::RecvDuplicateSelector { - primary: variant_span, - first_use: first_span.clone(), - selector, - first_variant: *first_variant, - second_variant: variant_name, + primary: use_.span.clone(), + first_use: first.span.clone(), + selector: selector_desc, + first_variant: first.variant_name, + second_variant: use_.variant_name, } .into(), ); + return; } - } else { - seen_selectors.insert(selector, (variant_span, variant_name, variant)); } + + seen_selectors.push(SeenSelector { + bytes, + text: selector_text, + span: use_.span, + variant_name: use_.variant_name, + variant: use_.variant, + }); } /// Check for handler type conflicts and emit diagnostics if found. @@ -697,33 +884,21 @@ fn check_handler_conflict<'db>( pub(crate) fn eval_msg_variant_selector<'db>( db: &'db dyn HirAnalysisDb, variant_ty: TyId<'db>, + abi_ty: TyId<'db>, scope: ScopeId<'db>, diags: &mut Vec>, -) -> Option { +) -> Option> { let msg_variant_trait = resolve_core_trait(db, scope, &["message", "MsgVariant"])?; - - let canonical_ty = Canonical::new(db, variant_ty); - let scope_ingot = scope.ingot(db); - let search_ingots = [ - Some(scope_ingot), - variant_ty.ingot(db).filter(|&ingot| ingot != scope_ingot), - ]; - let implementor = search_ingots.into_iter().flatten().find_map(|ingot| { - impls_for_ty(db, ingot, canonical_ty) - .iter() - .find(|impl_| impl_.skip_binder().trait_def(db) == msg_variant_trait) - .copied() - })?; - let impl_ = implementor.skip_binder(); - let selector_name = IdentId::new(db, "SELECTOR".to_string()); - let selector_const = impl_ - .hir_impl_trait(db) - .hir_consts(db) - .iter() - .find(|c| c.name.to_opt() == Some(selector_name))?; - - let body = selector_const.value.to_opt()?; + let inst = TraitInstId::new( + db, + msg_variant_trait, + vec![variant_ty, abi_ty], + IndexMap::new(), + ); + let assumptions = PredicateListId::empty_list(db); + let solve_cx = TraitSolveCx::new(db, scope).with_assumptions(assumptions); + let body = assoc_const_body_for_trait_inst(db, solve_cx, inst, selector_name)?; if matches!( body.expr(db).data(db, body), crate::hir_def::Partial::Absent @@ -731,35 +906,45 @@ pub(crate) fn eval_msg_variant_selector<'db>( return None; } - let expected_ty = TyId::new(db, TyData::TyBase(TyBase::Prim(PrimTy::U32))); + let expected_ty = abi_selector_ty(db, scope, assumptions, abi_ty)?; let result = super::check_anon_const_body(db, body, expected_ty); diags.extend(result.0.clone()); if !result.0.is_empty() { return None; } - match eval_body_owner_const( - db, - BodyOwner::AnonConstBody { - body, - expected: expected_ty, - }, - Vec::new(), - ) { + let owner = BodyOwner::AnonConstBody { + body, + expected: expected_ty, + }; + match eval_body_owner_const(db, owner, Vec::new()) { Ok(value) => match value.value(db) { SemConstValue::Scalar { value: SemConstScalar::Int { value }, .. - } => value.to_u32(), + } => value + .to_biguint() + .map(|value| IntegerId::new(db, value)) + .or_else(|| { + diags.push(BodyDiag::ConstValueMustBeKnown(body.span().into()).into()); + None + }), _ => { diags.push(BodyDiag::ConstValueMustBeKnown(body.span().into()).into()); None } }, - Err(_) => { + Err(CtfeError::NotConstEvaluable { .. }) => { diags.push(BodyDiag::ConstValueMustBeKnown(body.span().into()).into()); None } + Err(err) => { + let ty = TyId::invalid(db, super::invalid_cause_from_ctfe_error(db, owner, err)); + if let Some(diag) = ty.emit_diag(db, body.span().into()) { + diags.push(diag.into()); + } + None + } } } diff --git a/crates/hir/src/core/hir_def/attr.rs b/crates/hir/src/core/hir_def/attr.rs index 2d7a13f881..32bb2f17ce 100644 --- a/crates/hir/src/core/hir_def/attr.rs +++ b/crates/hir/src/core/hir_def/attr.rs @@ -295,6 +295,23 @@ impl<'db> AttrListId<'db> { }) } + /// Returns the ABI path from `#[abi = path::ToAbi]` or `#[abi(path::ToAbi)]`. + pub fn abi_path(self, db: &'db dyn HirDb) -> Option> { + self.data(db) + .iter() + .filter_map(|attr| { + let Attr::Normal(normal_attr) = attr else { + return None; + }; + let path = normal_attr.path.to_opt()?; + let ident = path.as_ident(db)?; + (ident.data(db) == "abi") + .then(|| normal_attr.path_value(db)) + .flatten() + }) + .last() + } + pub fn arithmetic_mode(self, db: &'db dyn HirDb) -> Option { self.data(db) .iter() @@ -427,6 +444,32 @@ impl<'db> NormalAttr<'db> { ArithmeticMode::parse(mode) } + pub fn path_value(&self, db: &'db dyn HirDb) -> Option> { + if self.has_value { + return match self.value { + Some(AttrArgValue::Path(path)) => Some(path), + Some(AttrArgValue::Ident(ident)) => Some(PathId::from_ident(db, ident)), + Some(AttrArgValue::Lit(_)) | None => None, + }; + } + + if self.has_args { + let [arg] = self.args.as_slice() else { + return None; + }; + if arg.has_value { + return match arg.value { + Some(AttrArgValue::Path(path)) => Some(path), + Some(AttrArgValue::Ident(ident)) => Some(PathId::from_ident(db, ident)), + Some(AttrArgValue::Lit(_)) | None => None, + }; + } + return arg.key.to_opt(); + } + + None + } + pub(crate) fn keyword_attr_spec(&self, db: &'db dyn HirDb) -> KeywordAttrSpec { KeywordAttrSpec { has_value: self.has_value, @@ -502,5 +545,6 @@ impl<'db> AttrArg<'db> { #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub enum AttrArgValue<'db> { Ident(IdentId<'db>), + Path(PathId<'db>), Lit(super::LitKind<'db>), } diff --git a/crates/hir/src/core/hir_def/item.rs b/crates/hir/src/core/hir_def/item.rs index ace967a509..9091461292 100644 --- a/crates/hir/src/core/hir_def/item.rs +++ b/crates/hir/src/core/hir_def/item.rs @@ -910,6 +910,7 @@ pub struct ContractRecvListId<'db> { #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct ContractRecv<'db> { pub msg_path: Option>, + pub abi_path: Option>, pub arms: ContractRecvArmListId<'db>, } diff --git a/crates/hir/src/core/lower/attr.rs b/crates/hir/src/core/lower/attr.rs index 38e7b57c78..f742d1106a 100644 --- a/crates/hir/src/core/lower/attr.rs +++ b/crates/hir/src/core/lower/attr.rs @@ -196,7 +196,12 @@ impl<'db> AttrArgValue<'db> { Some(Self::Ident(IdentId::lower_token(ctxt, token))) } Some(ast::AttrArgValueKind::Lit(lit)) => Some(Self::Lit(LitKind::lower_ast(ctxt, lit))), - Some(ast::AttrArgValueKind::Expr(_)) => None, + Some(ast::AttrArgValueKind::Expr(expr)) => match expr.kind() { + ast::ExprKind::Path(path_expr) => PathId::lower_ast_partial(ctxt, path_expr.path()) + .to_opt() + .map(Self::Path), + _ => None, + }, None => None, } } diff --git a/crates/hir/src/core/lower/contract.rs b/crates/hir/src/core/lower/contract.rs index 4232e7bcac..cc3f08f61f 100644 --- a/crates/hir/src/core/lower/contract.rs +++ b/crates/hir/src/core/lower/contract.rs @@ -96,12 +96,18 @@ impl<'db> Contract<'db> { r.attr_list(), "recv block", ); + let recv_attrs = AttrListId::lower_ast_opt(ctxt, r.attr_list()); + let abi_path = recv_attrs.abi_path(ctxt.db()); let msg_path = r.path().map(|p| crate::hir_def::PathId::lower_ast(ctxt, p)); let arms = r .arms() .map(|arms| ContractRecvArmListId::lower_ast(ctxt, recv_idx, arms)) .unwrap_or_else(|| ContractRecvArmListId::new(ctxt.db(), vec![])); - data.push(ContractRecv { msg_path, arms }); + data.push(ContractRecv { + msg_path, + abi_path, + arms, + }); } ContractRecvListId::new(ctxt.db(), data) }; diff --git a/crates/hir/src/core/lower/error.rs b/crates/hir/src/core/lower/error.rs index 77b248df75..af310d4dd5 100644 --- a/crates/hir/src/core/lower/error.rs +++ b/crates/hir/src/core/lower/error.rs @@ -177,7 +177,7 @@ pub(super) fn lower_error_struct<'db>( Partial::Present( PathId::from_ident(db, builder.roots().core) .push_str(db, "error") - .push_str_args(db, "ErrorVariant", builder.sol_args()), + .push_str_args(db, "ErrorVariant", builder.abi_args(builder.sol_ty())), ), ); @@ -437,12 +437,14 @@ fn lower_error_encode_impl<'db>( let field_specs = field_specs.to_vec(); let impl_trait_idx = builder.ctxt().next_impl_trait_idx(); - let trait_ref = Partial::Present(builder.core_abi_trait_ref_sol("Encode")); + let sol_ty = builder.sol_ty(); + let trait_ref = Partial::Present(builder.core_abi_trait_ref("Encode", sol_ty)); let ty = Partial::Present(self_ty); builder.with_item_scope( TrackedItemVariant::ImplTrait(impl_trait_idx), |builder, id| { - let direct_encode_const = create_direct_encode_assoc_const(builder, &field_specs); + let direct_encode_const = + create_direct_encode_assoc_const(builder, &field_specs, sol_ty); let impl_trait = builder.new_impl_trait( id, trait_ref, @@ -453,7 +455,7 @@ fn lower_error_encode_impl<'db>( ); // encode() method - let abi_encoder_trait_ref = builder.core_abi_trait_ref_sol("AbiEncoder"); + let abi_encoder_trait_ref = builder.core_abi_trait_ref("AbiEncoder", sol_ty); let (e_generic_params, e_ty) = builder.type_param_with_trait_bound("E", abi_encoder_trait_ref); @@ -470,7 +472,7 @@ fn lower_error_encode_impl<'db>( None, FuncModifiers::new(Visibility::Private, false, false, false), |body| { - body.encode_fields(&field_specs, encoder_ident, e_ty); + body.encode_fields(&field_specs, sol_ty, encoder_ident, e_ty); }, ); diff --git a/crates/hir/src/core/lower/hir_builder.rs b/crates/hir/src/core/lower/hir_builder.rs index 1c3be3a505..36867aa9aa 100644 --- a/crates/hir/src/core/lower/hir_builder.rs +++ b/crates/hir/src/core/lower/hir_builder.rs @@ -146,15 +146,15 @@ where self.ty_path(path) } - pub(super) fn sol_args(&self) -> GenericArgListId<'db> { - GenericArgListId::given1_type(self.db(), self.sol_ty()) + pub(super) fn abi_args(&self, abi_ty: TypeId<'db>) -> GenericArgListId<'db> { + GenericArgListId::given1_type(self.db(), abi_ty) } - pub(super) fn core_abi_trait_ref_sol(&self, name: &str) -> TraitRefId<'db> { + pub(super) fn core_abi_trait_ref(&self, name: &str, abi_ty: TypeId<'db>) -> TraitRefId<'db> { let db = self.db(); let path = PathId::from_ident(db, self.roots.core) .push_str(db, "abi") - .push_str_args(db, name, self.sol_args()); + .push_str_args(db, name, self.abi_args(abi_ty)); TraitRefId::new(db, Partial::Present(path)) } @@ -513,13 +513,6 @@ where self.body.f_ctxt.db() } - fn sol_ty(&self) -> TypeId<'db> { - let path = PathId::from_ident(self.db(), self.roots.std) - .push_str(self.db(), "abi") - .push_str(self.db(), "Sol"); - TypeId::new(self.db(), TypeKind::Path(Partial::Present(path))) - } - fn abi_size_trait_ref(&self) -> TraitRefId<'db> { let path = PathId::from_ident(self.db(), self.roots.core) .push_str(self.db(), "abi") @@ -637,6 +630,7 @@ where pub(super) fn encode_fields( &mut self, fields: &[(IdentId<'db>, TypeId<'db>)], + abi_ty: TypeId<'db>, encoder_ident: IdentId<'db>, encoder_ty: TypeId<'db>, ) { @@ -676,7 +670,7 @@ where db, vec![ GenericArg::Type(TypeGenericArg { - ty: Partial::Present(self.sol_ty()), + ty: Partial::Present(abi_ty), }), GenericArg::Type(TypeGenericArg { ty: Partial::Present(field_ty), @@ -706,6 +700,7 @@ where &mut self, target_ident: IdentId<'db>, ty: TypeId<'db>, + abi_ty: TypeId<'db>, decoder_ty: TypeId<'db>, ) { let db = self.db(); @@ -713,7 +708,7 @@ where db, vec![ GenericArg::Type(TypeGenericArg { - ty: Partial::Present(self.sol_ty()), + ty: Partial::Present(abi_ty), }), GenericArg::Type(TypeGenericArg { ty: Partial::Present(ty), diff --git a/crates/hir/src/core/lower/item.rs b/crates/hir/src/core/lower/item.rs index a42132a4b0..d5eaf627b7 100644 --- a/crates/hir/src/core/lower/item.rs +++ b/crates/hir/src/core/lower/item.rs @@ -39,7 +39,7 @@ pub enum SelectorErrorKind { /// Duplicate selector value. Duplicate { first_variant_name: String, - selector: u32, + selector: String, }, } diff --git a/crates/hir/src/core/lower/msg.rs b/crates/hir/src/core/lower/msg.rs index 8297a9dd51..c5c83185ec 100644 --- a/crates/hir/src/core/lower/msg.rs +++ b/crates/hir/src/core/lower/msg.rs @@ -33,8 +33,8 @@ use super::body::BodyCtxt; /// #[msg] /// mod Erc20 { /// pub struct Transfer { pub to: Address, pub amount: u256 } -/// impl MsgVariant for Transfer { -/// const SELECTOR: u32 = 0x1234 +/// impl MsgVariant for Transfer { +/// const SELECTOR: ::Selector = 0x1234 /// type Return = bool /// } /// } @@ -55,10 +55,14 @@ pub(super) fn lower_msg_as_mod<'db>(ctxt: &mut FileLowerCtxt<'db>, ast: ast::Msg }; let mut builder = HirBuilder::new(ctxt, msg_desugared); + let abi_ty = attributes + .abi_path(builder.db()) + .map(|path| builder.ty_path(path)) + .unwrap_or_else(|| builder.sol_ty()); builder.desugared_mod(name, attributes, vis, |builder| { if let Some(variants) = ast.variants() { for (idx, variant) in variants.into_iter().enumerate() { - lower_msg_variant(builder, &ast, idx, variant); + lower_msg_variant(builder, &ast, idx, variant, abi_ty); } } }) @@ -70,6 +74,7 @@ fn lower_msg_variant<'db>( msg_ast: &ast::Msg, variant_idx: usize, variant: ast::MsgVariant, + abi_ty: TypeId<'db>, ) { let mut builder = builder.with_desugared(MsgDesugared { msg: parser::ast::AstPtr::new(msg_ast), @@ -81,10 +86,10 @@ fn lower_msg_variant<'db>( let struct_ = lower_msg_variant_struct(&mut builder, &variant); // Create the impl MsgVariant for this variant - lower_msg_variant_impl(&mut builder, &variant, struct_); + lower_msg_variant_impl(&mut builder, &variant, struct_, abi_ty); - // Create `impl Encode for Variant` and `impl Decode for Variant`. - lower_msg_variant_encode_decode_impls(&mut builder, &variant, struct_); + // Create `impl Encode for Variant` and `impl Decode for Variant`. + lower_msg_variant_encode_decode_impls(&mut builder, &variant, struct_, abi_ty); } fn variant_struct_ty<'db>(db: &'db dyn HirDb, struct_: Struct<'db>) -> TypeId<'db> { @@ -96,6 +101,29 @@ fn variant_struct_ty<'db>(db: &'db dyn HirDb, struct_: Struct<'db>) -> TypeId<'d TypeId::new(db, TypeKind::Path(Partial::Present(self_type_path))) } +fn abi_selector_type<'db>( + db: &'db dyn HirDb, + core_root: IdentId<'db>, + abi_ty: TypeId<'db>, +) -> TypeId<'db> { + let abi_trait_path = PathId::from_ident(db, core_root) + .push_str(db, "abi") + .push_str(db, "Abi"); + let abi_trait_ref = TraitRefId::new(db, Partial::Present(abi_trait_path)); + let qualified = PathId::new( + db, + PathKind::QualifiedType { + type_: abi_ty, + trait_: abi_trait_ref, + }, + None, + ); + TypeId::new( + db, + TypeKind::Path(Partial::Present(qualified.push_str(db, "Selector"))), + ) +} + fn lower_msg_variant_field_specs<'db>( ctxt: &mut FileLowerCtxt<'db>, variant: &ast::MsgVariant, @@ -120,10 +148,11 @@ fn lower_msg_variant_encode_decode_impls<'db>( builder: &mut HirBuilder<'_, 'db, MsgDesugared>, variant: &ast::MsgVariant, struct_: Struct<'db>, + abi_ty: TypeId<'db>, ) { lower_msg_variant_abi_size_impl(builder, variant, struct_); - lower_msg_variant_encode_impl(builder, variant, struct_); - lower_msg_variant_decode_trait_impl(builder, variant, struct_); + lower_msg_variant_encode_impl(builder, variant, struct_, abi_ty); + lower_msg_variant_decode_trait_impl(builder, variant, struct_, abi_ty); } fn lower_msg_variant_abi_size_impl<'db>( @@ -205,16 +234,18 @@ fn lower_msg_variant_encode_impl<'db>( builder: &mut HirBuilder<'_, 'db, MsgDesugared>, variant: &ast::MsgVariant, struct_: Struct<'db>, + abi_ty: TypeId<'db>, ) -> ImplTrait<'db> { let field_specs = lower_msg_variant_field_specs(builder.ctxt(), variant); let impl_trait_idx = builder.ctxt().next_impl_trait_idx(); - let trait_ref = Partial::Present(builder.core_abi_trait_ref_sol("Encode")); + let trait_ref = Partial::Present(builder.core_abi_trait_ref("Encode", abi_ty)); let ty = Partial::Present(variant_struct_ty(builder.db(), struct_)); builder.with_item_scope( TrackedItemVariant::ImplTrait(impl_trait_idx), |builder, id| { - let direct_encode_const = create_direct_encode_assoc_const(builder, &field_specs); + let direct_encode_const = + create_direct_encode_assoc_const(builder, &field_specs, abi_ty); let impl_trait = builder.new_impl_trait( id, trait_ref, @@ -224,7 +255,7 @@ fn lower_msg_variant_encode_impl<'db>( builder.origin(), ); - let abi_encoder_trait_ref = builder.core_abi_trait_ref_sol("AbiEncoder"); + let abi_encoder_trait_ref = builder.core_abi_trait_ref("AbiEncoder", abi_ty); let (e_generic_params, e_ty) = builder.type_param_with_trait_bound("E", abi_encoder_trait_ref); @@ -241,7 +272,7 @@ fn lower_msg_variant_encode_impl<'db>( None, FuncModifiers::new(Visibility::Private, false, false, false), |body| { - body.encode_fields(&field_specs, encoder_ident, e_ty); + body.encode_fields(&field_specs, abi_ty, encoder_ident, e_ty); }, ); @@ -302,11 +333,12 @@ pub(super) fn create_direct_encode_assoc_const< >( builder: &mut HirBuilder<'_, 'db, O>, fields: &[(IdentId<'db>, TypeId<'db>)], + abi_ty: TypeId<'db>, ) -> AssocConstDef<'db> { let db = builder.db(); let name = builder.ident("DIRECT_ENCODE"); let ty = builder.ty_ident(builder.ident("bool")); - let encode_trait = builder.core_abi_trait_ref_sol("Encode"); + let encode_trait = builder.core_abi_trait_ref("Encode", abi_ty); let id = builder.ctxt().joined_id(TrackedItemVariant::NamelessBody); let origin = builder.origin(); let mut body_ctxt = BodyCtxt::new(builder.ctxt(), id); @@ -625,16 +657,17 @@ fn lower_msg_variant_decode_trait_impl<'db>( builder: &mut HirBuilder<'_, 'db, MsgDesugared>, variant: &ast::MsgVariant, struct_: Struct<'db>, + abi_ty: TypeId<'db>, ) -> ImplTrait<'db> { let db = builder.db(); let fields = lower_msg_variant_field_specs(builder.ctxt(), variant); let field_names = fields.iter().map(|(name, _)| *name).collect::>(); - let trait_ref = builder.core_abi_trait_ref_sol("Decode"); + let trait_ref = builder.core_abi_trait_ref("Decode", abi_ty); let ty = variant_struct_ty(db, struct_); builder.impl_trait(trait_ref, ty, |builder| { - let abi_decoder_trait_ref = builder.core_abi_trait_ref_sol("AbiDecoder"); + let abi_decoder_trait_ref = builder.core_abi_trait_ref("AbiDecoder", abi_ty); let (d_generic_params, d_ty) = builder.type_param_with_trait_bound("D", abi_decoder_trait_ref); @@ -649,7 +682,7 @@ fn lower_msg_variant_decode_trait_impl<'db>( FuncModifiers::new(Visibility::Private, false, false, false), |body| { for (name, ty) in fields.iter().copied() { - body.decode_into(name, ty, d_ty); + body.decode_into(name, ty, abi_ty, d_ty); } body.return_record_self(&field_names); }, @@ -703,10 +736,11 @@ fn lower_msg_variant_impl<'db>( builder: &mut HirBuilder<'_, 'db, MsgDesugared>, variant: &ast::MsgVariant, struct_: Struct<'db>, + abi_ty: TypeId<'db>, ) -> ImplTrait<'db> { let db = builder.db(); let roots = builder.roots(); - let abi_args = builder.sol_args(); + let abi_args = builder.abi_args(abi_ty); let msg_variant_trait_path = PathId::from_ident(db, roots.core) .push_str(db, "message") @@ -730,9 +764,10 @@ fn lower_msg_variant_impl<'db>( }; let types = vec![builder.assoc_ty("Return", return_ty)]; let consts = vec![create_selector_const( - builder.ctxt(), + builder, variant, &variant_name, + abi_ty, )]; (types, consts) }) @@ -752,22 +787,19 @@ struct ParsedSelector { /// /// The selector value is lowered as a const expression body, which is evaluated later by CTFE. fn create_selector_const<'db>( - ctxt: &mut FileLowerCtxt<'db>, + builder: &mut HirBuilder<'_, 'db, MsgDesugared>, variant: &ast::MsgVariant, variant_name: &str, + abi_ty: TypeId<'db>, ) -> AssocConstDef<'db> { use parser::ast::prelude::*; + let core_root = builder.roots().core; + let ctxt = builder.ctxt(); let db = ctxt.db(); let file = ctxt.top_mod().file(db); let selector_name = IdentId::new(db, "SELECTOR".to_string()); - let selector_ty = TypeId::new( - db, - TypeKind::Path(Partial::Present(PathId::from_ident( - db, - IdentId::new(db, "u32".to_string()), - ))), - ); + let selector_ty = abi_selector_type(db, core_root, abi_ty); let parsed = variant .attr_list() @@ -839,7 +871,6 @@ fn parse_selector_attr<'db>( attr_list: ast::AttrList, ) -> Option { use crate::hir_def::LitKind; - use num_bigint::BigUint; for attr in named_attr_specs(Some(attr_list), "selector") { let range = attr.range; @@ -856,9 +887,14 @@ fn parse_selector_attr<'db>( let lit_kind = LitKind::lower_ast(ctxt, lit); match &lit_kind { LitKind::Int(int_id) => { - let u32_max = BigUint::from(u32::MAX); - let v = int_id.data(ctxt.db()); - (v > &u32_max).then_some(SelectorErrorKind::Overflow) + // Selectors are 4-byte prefixes in the EVM world. Even when + // ABIs customize the selector type, we still reject values + // that don't fit in 32 bits to avoid silent truncation. + if int_id.data(ctxt.db()) > &BigUint::from(u32::MAX) { + Some(SelectorErrorKind::Overflow) + } else { + None + } } LitKind::String(_) | LitKind::Bool(_) => { Some(SelectorErrorKind::InvalidType) diff --git a/crates/hir/src/core/lower/payable.rs b/crates/hir/src/core/lower/payable.rs index 10edee853e..b1a233e309 100644 --- a/crates/hir/src/core/lower/payable.rs +++ b/crates/hir/src/core/lower/payable.rs @@ -87,8 +87,7 @@ pub(super) fn report_payable_attr_on_msg_variant<'db>( } } -/// Report an error for any non-`#[payable]` normal attribute on an `init` block -/// or `recv` arm. Only `#[payable]` (and doc comments) are valid here. +/// Report an error for unsupported normal attributes on contract entry points. pub(super) fn report_unknown_attrs_on_contract_entry<'db>( ctxt: &mut FileLowerCtxt<'db>, attrs: Option, @@ -107,7 +106,7 @@ pub(super) fn report_unknown_attrs_on_contract_entry<'db>( .path() .map(|p| p.text().to_string()) .unwrap_or_default(); - if attr_name == "payable" { + if attr_name == "payable" || (entry_kind == "recv block" && attr_name == "abi") { continue; } diff --git a/crates/hir/src/core/print.rs b/crates/hir/src/core/print.rs index dd98b46abc..1c99847319 100644 --- a/crates/hir/src/core/print.rs +++ b/crates/hir/src/core/print.rs @@ -227,6 +227,7 @@ impl<'db> AttrArgValue<'db> { pub fn pretty_print(&self, db: &'db dyn HirDb) -> String { match self { AttrArgValue::Ident(ident) => ident.data(db).to_string(), + AttrArgValue::Path(path) => path.pretty_print(db), AttrArgValue::Lit(lit) => lit.pretty_print(db), } } diff --git a/crates/hir/src/core/semantic/mod.rs b/crates/hir/src/core/semantic/mod.rs index 46f4d7b588..37e7024679 100644 --- a/crates/hir/src/core/semantic/mod.rs +++ b/crates/hir/src/core/semantic/mod.rs @@ -1343,6 +1343,14 @@ impl<'db> RecvView<'db> { .and_then(|r| r.msg_path) } + pub fn abi_path(self, db: &'db dyn HirDb) -> Option> { + self.contract(db) + .recvs(db) + .data(db) + .get(self.recv_idx(db) as usize) + .and_then(|r| r.abi_path) + } + pub fn arm(self, db: &'db dyn HirDb, arm_idx: u32) -> Option> { self.contract(db) .recv_arm(db, self.recv_idx(db) as usize, arm_idx as usize) @@ -1361,6 +1369,14 @@ impl<'db> RecvView<'db> { } } +#[salsa::tracked] +impl<'db> RecvView<'db> { + #[salsa::tracked] + pub fn abi_ty(self, db: &'db dyn HirAnalysisDb) -> TyId<'db> { + resolve_recv_abi_ty(db, self).unwrap_or_else(|| TyId::invalid(db, InvalidCause::Other)) + } +} + #[salsa::interned] #[derive(Debug)] pub struct RecvArmView<'db> { @@ -1447,7 +1463,7 @@ impl<'db> RecvArmView<'db> { let contract = recv.contract(db); let variant_ty = self.variant_ty(db); - let selector_info = get_variant_selector_info(db, variant_ty, contract.scope()); + let selector_info = get_variant_selector_info(db, variant_ty, abi, contract.scope()); let Some(msg_variant_trait) = resolve_core_trait(db, contract.scope(), &["message", "MsgVariant"]) @@ -1493,13 +1509,7 @@ impl<'db> RecvArmView<'db> { return Vec::new(); } - let assumptions = PredicateListId::empty_list(db); let recv = self.recv(db); - let contract = recv.contract(db); - - let Some(sol_ty) = resolve_sol_abi_ty(db, contract.scope(), assumptions) else { - return Vec::new(); - }; let variant_ty = self.variant_ty(db); let Some(variant_struct) = variant_struct_from_ty(db, variant_ty) else { @@ -1510,7 +1520,7 @@ impl<'db> RecvArmView<'db> { return Vec::new(); }; - let abi_info = self.abi_info(db, sol_ty); + let abi_info = self.abi_info(db, recv.abi_ty(db)); compute_arg_bindings( db, variant_struct, @@ -1760,15 +1770,15 @@ impl<'db> EffectEnvView<'db> { #[derive(Debug, Clone, PartialEq, Eq, Hash, Update)] pub struct RecvArmAbiInfo<'db> { pub is_fallback: bool, - pub selector_value: Option, + pub selector_value: Option>, pub selector_signature: Option, pub args_ty: TyId<'db>, pub ret_ty: Option>, } #[derive(Debug, Clone, PartialEq, Eq, Hash, Update)] -struct VariantSelectorInfo { - value: Option, +struct VariantSelectorInfo<'db> { + value: Option>, signature: Option, } @@ -2691,6 +2701,26 @@ fn resolve_msg_mod<'db>( } } +fn resolve_recv_abi_ty<'db>(db: &'db dyn HirAnalysisDb, recv: RecvView<'db>) -> Option> { + let assumptions = PredicateListId::empty_list(db); + let contract = recv.contract(db); + + if let Some(path) = recv.abi_path(db) { + return resolve_ty_path(db, path, contract.scope(), assumptions); + } + + if let Some(msg_mod) = recv + .msg_path(db) + .and_then(|path| resolve_msg_mod(db, contract, path, assumptions)) + && let Some(path) = msg_mod.attributes(db).abi_path(db) + && let Some(ty) = resolve_ty_path(db, path, msg_mod.scope(), assumptions) + { + return Some(ty); + } + + resolve_sol_abi_ty(db, contract.scope(), assumptions) +} + fn resolve_recv_variant<'db>( db: &'db dyn HirAnalysisDb, contract: Contract<'db>, @@ -2728,12 +2758,25 @@ fn resolve_recv_variant<'db>( } } -fn resolve_sol_abi_ty<'db>( +fn resolve_ty_path<'db>( db: &'db dyn HirAnalysisDb, + path: PathId<'db>, scope: ScopeId<'db>, assumptions: PredicateListId<'db>, ) -> Option> { use crate::analysis::name_resolution::{PathRes, resolve_path}; + + match resolve_path(db, path, scope, assumptions, false).ok()? { + PathRes::Ty(ty) | PathRes::TyAlias(_, ty) => Some(ty), + _ => None, + } +} + +fn resolve_sol_abi_ty<'db>( + db: &'db dyn HirAnalysisDb, + scope: ScopeId<'db>, + assumptions: PredicateListId<'db>, +) -> Option> { use common::ingot::IngotKind; let ingot = scope.ingot(db); @@ -2747,25 +2790,22 @@ fn resolve_sol_abi_ty<'db>( .push_ident(db, IdentId::new(db, "abi".to_string())) .push_ident(db, IdentId::new(db, "Sol".to_string())); - match resolve_path(db, sol_path, scope, assumptions, false).ok()? { - PathRes::Ty(ty) | PathRes::TyAlias(_, ty) => Some(ty), - _ => None, - } + resolve_ty_path(db, sol_path, scope, assumptions) } fn get_variant_selector_info<'db>( db: &'db dyn HirAnalysisDb, variant_ty: TyId<'db>, + abi: TyId<'db>, scope: ScopeId<'db>, -) -> VariantSelectorInfo { - use crate::analysis::semantic::{SemConstScalar, SemConstValue, eval_body_owner_const}; - use crate::analysis::ty::{ - canonical::Canonical, - corelib::resolve_core_trait, - trait_def::impls_for_ty, - ty_def::{PrimTy, TyBase, TyData}, +) -> VariantSelectorInfo<'db> { + use crate::analysis::{ + semantic::{SemConstScalar, SemConstValue, eval_body_owner_const}, + ty::{ + corelib::resolve_core_trait, trait_def::assoc_const_body_for_trait_inst, + ty_check::BodyOwner, + }, }; - use num_traits::ToPrimitive; let Some(msg_variant_trait) = resolve_core_trait(db, scope, &["message", "MsgVariant"]) else { return VariantSelectorInfo { @@ -2773,50 +2813,27 @@ fn get_variant_selector_info<'db>( signature: None, }; }; - let canonical_ty = Canonical::new(db, variant_ty); - let scope_ingot = scope.ingot(db); - let search_ingots = [ - Some(scope_ingot), - variant_ty.ingot(db).filter(|&ingot| ingot != scope_ingot), - ]; - - let Some(implementor) = search_ingots.into_iter().flatten().find_map(|ingot| { - impls_for_ty(db, ingot, canonical_ty) - .iter() - .find(|impl_| impl_.skip_binder().trait_def(db).eq(&msg_variant_trait)) - .copied() - }) else { - return VariantSelectorInfo { - value: None, - signature: None, - }; - }; - let impl_ = implementor.skip_binder(); - + let assumptions = PredicateListId::empty_list(db); + let solve_cx = TraitSolveCx::new(db, scope).with_assumptions(assumptions); + let inst = TraitInstId::new( + db, + msg_variant_trait, + vec![variant_ty, abi], + IndexMap::new(), + ); let selector_name = IdentId::new(db, "SELECTOR".to_string()); - let hir_impl = impl_.hir_impl_trait(db); - let Some(selector_const) = hir_impl - .hir_consts(db) - .iter() - .find(|c| c.name.to_opt() == Some(selector_name)) - else { + let Some(body) = assoc_const_body_for_trait_inst(db, solve_cx, inst, selector_name) else { return VariantSelectorInfo { value: None, signature: None, }; }; - let Some(body) = selector_const.value.to_opt() else { - return VariantSelectorInfo { - value: None, - signature: None, - }; - }; - let signature = selector_signature_from_body(db, body, hir_impl.scope()); - let expected_ty = TyId::new(db, TyData::TyBase(TyBase::Prim(PrimTy::U32))); + let expected_ty = abi_selector_ty(db, abi, scope, assumptions); + let signature = selector_signature_from_body(db, body, body.scope(), expected_ty); let value = match eval_body_owner_const( db, - crate::analysis::ty::ty_check::BodyOwner::AnonConstBody { + BodyOwner::AnonConstBody { body, expected: expected_ty, }, @@ -2826,7 +2843,7 @@ fn get_variant_selector_info<'db>( SemConstValue::Scalar { value: SemConstScalar::Int { value }, .. - } => value.to_u32(), + } => value.to_biguint().map(|value| IntegerId::new(db, value)), _ => None, }, Err(_) => None, @@ -2835,14 +2852,31 @@ fn get_variant_selector_info<'db>( VariantSelectorInfo { value, signature } } +fn abi_selector_ty<'db>( + db: &'db dyn HirAnalysisDb, + abi: TyId<'db>, + scope: ScopeId<'db>, + assumptions: PredicateListId<'db>, +) -> TyId<'db> { + let Some(abi_trait) = resolve_core_trait(db, scope, &["abi", "Abi"]) else { + return TyId::invalid(db, InvalidCause::Other); + }; + let inst = TraitInstId::new(db, abi_trait, vec![abi], IndexMap::new()); + let selector_ident = IdentId::new(db, "Selector".to_string()); + normalize_ty( + db, + TyId::assoc_ty(db, inst, selector_ident), + scope, + assumptions, + ) +} + fn selector_signature_from_body<'db>( db: &'db dyn HirAnalysisDb, body: Body<'db>, scope: ScopeId<'db>, + expected_ty: TyId<'db>, ) -> Option { - use crate::analysis::ty::ty_def::{PrimTy, TyBase, TyData}; - - let expected_ty = TyId::new(db, TyData::TyBase(TyBase::Prim(PrimTy::U32))); let (_, typed_body) = crate::analysis::ty::ty_check::check_anon_const_body(db, body, expected_ty); let mut visited = SelectorSearchVisited::new(); diff --git a/crates/hir/src/core/span/attr.rs b/crates/hir/src/core/span/attr.rs index 0b7009ecbf..c211b70cb0 100644 --- a/crates/hir/src/core/span/attr.rs +++ b/crates/hir/src/core/span/attr.rs @@ -58,6 +58,9 @@ define_lazy_span_node!( define_lazy_span_node!(LazyAttrArgValueSpan, ast::AttrArgValue); impl<'db> LazyAttrArgValueSpan<'db> { + pub fn path(self) -> LazyPathSpan<'db> { + LazyPathSpan(self.0) + } pub fn lit(self) -> LazyLitSpan<'db> { LazyLitSpan(self.0) } diff --git a/crates/hir/src/core/visitor.rs b/crates/hir/src/core/visitor.rs index 4c92f3f0be..fc94b3a2e3 100644 --- a/crates/hir/src/core/visitor.rs +++ b/crates/hir/src/core/visitor.rs @@ -1629,6 +1629,14 @@ pub fn walk_attribute<'db, V>( }, ); } + Some(AttrArgValue::Path(path)) => { + ctxt.with_new_ctxt( + |span| span.value().path(), + |ctxt| { + visitor.visit_path(ctxt, path); + }, + ); + } Some(AttrArgValue::Lit(l)) => { ctxt.with_new_ctxt( |span| span.value().lit(), diff --git a/crates/hir/test_files/desugar/msg.snap b/crates/hir/test_files/desugar/msg.snap index ccd6cb97ee..baaf710049 100644 --- a/crates/hir/test_files/desugar/msg.snap +++ b/crates/hir/test_files/desugar/msg.snap @@ -15,7 +15,7 @@ mod CounterMsg { impl core::message::MsgVariant for Increment { type Return = () - const SELECTOR: u32 = 1 + const SELECTOR: ::Selector = 1 } impl core::abi::AbiSize for Increment { @@ -46,7 +46,7 @@ mod CounterMsg { impl core::message::MsgVariant for Get { type Return = (u64, u64) - const SELECTOR: u32 = 2 + const SELECTOR: ::Selector = 2 } impl core::abi::AbiSize for Get { @@ -79,7 +79,7 @@ mod CounterMsg { impl core::message::MsgVariant for Set { type Return = u64 - const SELECTOR: u32 = 3 + const SELECTOR: ::Selector = 3 } impl core::abi::AbiSize for Set { diff --git a/crates/mir/src/runtime/ir.rs b/crates/mir/src/runtime/ir.rs index da2c30f574..3cc13e19ad 100644 --- a/crates/mir/src/runtime/ir.rs +++ b/crates/mir/src/runtime/ir.rs @@ -3,7 +3,7 @@ use hir::analysis::{ semantic::{FieldIndex, SemanticInstance}, ty::ty_def::TyId, }; -use hir::hir_def::{BinOp, Contract, Func, TopLevelMod, UnOp}; +use hir::hir_def::{BinOp, Contract, Func, IntegerId, TopLevelMod, UnOp}; use hir::projection::IndexSource; use hir::semantic::ProviderBinding; use salsa::Update; @@ -830,7 +830,8 @@ pub struct ContractInitAbiPlan<'db> { #[derive(Clone, Debug, PartialEq, Eq, Hash, Update)] pub struct ContractRecvAbiPlan<'db> { pub contract: Contract<'db>, - pub selector: Option, + pub abi: ContractAbiPlan<'db>, + pub selector: Option>, pub payable: bool, pub user_recv: RuntimeInstance<'db>, pub entry_effect_args: Box<[EntryEffectArgPlan<'db>]>, @@ -838,6 +839,14 @@ pub struct ContractRecvAbiPlan<'db> { pub ret: RuntimeReturnPlan<'db>, } +#[derive(Clone, Debug, PartialEq, Eq, Hash, Update)] +pub struct ContractAbiPlan<'db> { + pub abi_ty: TyId<'db>, + pub selector_ty: TyId<'db>, + pub selector_size: u64, + pub selector_class: ScalarClass<'db>, +} + #[derive(Clone, Debug, PartialEq, Eq, Hash, Update)] pub enum EntryEffectArgPlan<'db> { ContractField(ContractFieldBinding<'db>), @@ -935,7 +944,8 @@ pub enum RuntimeReturnPlan<'db> { #[derive(Clone, Debug, PartialEq, Eq, Hash, Update)] pub struct DispatchArm<'db> { - pub selector: u32, + pub abi: ContractAbiPlan<'db>, + pub selector: IntegerId<'db>, pub wrapper: RuntimeInstance<'db>, } @@ -1229,7 +1239,10 @@ pub enum RuntimeBuiltin<'db> { topic2: RValueId, topic3: RValueId, }, - CallDataSelector, + CallDataSelector { + selector_size: u64, + class: ScalarClass<'db>, + }, MakeContractFieldRef { slot: u128, class: RuntimeClass<'db>, diff --git a/crates/mir/src/runtime/package.rs b/crates/mir/src/runtime/package.rs index b693a7f6b5..69676769f3 100644 --- a/crates/mir/src/runtime/package.rs +++ b/crates/mir/src/runtime/package.rs @@ -3,20 +3,28 @@ use hir::{ analysis::{ semantic::{ GenericSubst, ImplEnv, ManualContractSection, RootSemanticInstanceError, - SemanticInstance, SemanticInstanceKey, get_or_build_semantic_instance, - owner_effect_bindings, root_semantic_instance_key, + SemConstScalar, SemConstValue, SemanticInstance, SemanticInstanceKey, + eval_body_owner_const, get_or_build_semantic_instance, owner_effect_bindings, + root_semantic_instance_key, }, ty::{ const_ty::ConstTyData, corelib::{resolve_core_trait, resolve_lib_type_path}, - trait_def::{TraitInstId, resolve_trait_method_instance}, - trait_resolution::TraitSolveCx, + normalize::normalize_ty, + trait_def::{ + TraitInstId, assoc_const_body_for_trait_inst, resolve_trait_method_instance, + }, + trait_resolution::{PredicateListId, TraitSolveCx}, ty_check::{BodyOwner, LocalBinding}, ty_def::{TyData, TyId}, }, }, - hir_def::{Contract, Func, IdentId, InlineHint, ItemKind, ManualContractRootAttr, TopLevelMod}, + hir_def::{ + Contract, Func, IdentId, InlineHint, IntegerId, ItemKind, ManualContractRootAttr, + TopLevelMod, + }, }; +use num_traits::ToPrimitive; use rustc_hash::{FxHashMap, FxHashSet}; use crate::{ @@ -38,12 +46,13 @@ use crate::{ stable_identity_hash, type_identity, }, runtime::{ - AddressSpaceKind, ConstRegionId, ContractInitAbiPlan, ContractRecvAbiPlan, DispatchArm, - DispatchDefault, EntryEffectArgPlan, InitArgsPlan, LayoutId, LayoutKey, RefKind, RefView, - ResolvedCodeRegion, RuntimeClass, RuntimeCodeRegion, RuntimeCodeRegionKey, RuntimeFunction, - RuntimeFunctionOwner, RuntimeInlineHint, RuntimeInputPlan, RuntimeLinkage, RuntimeObject, - RuntimePackage, RuntimePackagePlan, RuntimeReturnPlan, RuntimeSection, RuntimeSectionName, - RuntimeSectionRef, RuntimeSyntheticSpec, ScalarClass, ScalarRepr, ScalarRole, + AddressSpaceKind, ConstRegionId, ContractAbiPlan, ContractInitAbiPlan, ContractRecvAbiPlan, + DispatchArm, DispatchDefault, EntryEffectArgPlan, InitArgsPlan, LayoutId, LayoutKey, + RefKind, RefView, ResolvedCodeRegion, RuntimeClass, RuntimeCodeRegion, + RuntimeCodeRegionKey, RuntimeFunction, RuntimeFunctionOwner, RuntimeInlineHint, + RuntimeInputPlan, RuntimeLinkage, RuntimeObject, RuntimePackage, RuntimePackagePlan, + RuntimeReturnPlan, RuntimeSection, RuntimeSectionName, RuntimeSectionRef, + RuntimeSyntheticSpec, ScalarClass, ScalarRepr, ScalarRole, TargetRootProviderMaterialization, }, verify::verify_runtime_package, @@ -632,31 +641,43 @@ fn contract_runtime_root<'db>( db: &'db dyn MirDb, contract: Contract<'db>, ) -> Result, LowerError> { - let abi_ty = sol_abi_ty(db, contract.scope())?; let mut dispatch = Vec::new(); let mut default = DispatchDefault::RevertEmpty; - for arm in contract.recv_views(db).flat_map(|recv| recv.arms(db)) { - let (abi_info, wrapper) = contract_recv_wrapper(db, arm, abi_ty)?; - if abi_info.is_fallback { - if matches!(default, DispatchDefault::Call { .. }) { - return Err(LowerError::Unsupported(format!( - "contract `{}` has multiple fallback recv arms", - contract_name(db, contract) - ))); + for recv in contract.recv_views(db) { + let abi = contract_abi_plan(db, contract.scope(), recv.abi_ty(db))?; + for arm in recv.arms(db) { + let (abi_info, wrapper) = contract_recv_wrapper(db, arm, abi.clone())?; + if abi_info.is_fallback { + if matches!(default, DispatchDefault::Call { .. }) { + return Err(LowerError::Unsupported(format!( + "contract `{}` has multiple fallback recv arms", + contract_name(db, contract) + ))); + } + default = DispatchDefault::Call { wrapper }; + continue; } - default = DispatchDefault::Call { wrapper }; - continue; - } - let selector = abi_info.selector_value.ok_or_else(|| { - LowerError::Unsupported(format!( - "recv arm in `{}` is missing a resolved selector", - contract_name(db, contract) - )) - })?; - dispatch.push(DispatchArm { selector, wrapper }); + let selector = abi_info.selector_value.ok_or_else(|| { + LowerError::Unsupported(format!( + "recv arm in `{}` is missing a resolved selector", + contract_name(db, contract) + )) + })?; + dispatch.push(DispatchArm { + abi: abi.clone(), + selector, + wrapper, + }); + } } - dispatch.sort_by_key(|arm| arm.selector); + dispatch.sort_by(|left, right| { + left.abi + .selector_size + .cmp(&right.abi.selector_size) + .then_with(|| left.selector.data(db).cmp(right.selector.data(db))) + }); + check_dispatch_selector_conflicts(db, contract, &dispatch)?; Ok(synthetic_instance( db, RuntimeSyntheticSpec::ContractRuntimeRoot { @@ -668,6 +689,59 @@ fn contract_runtime_root<'db>( )) } +fn check_dispatch_selector_conflicts<'db>( + db: &'db dyn MirDb, + contract: Contract<'db>, + dispatch: &[DispatchArm<'db>], +) -> Result<(), LowerError> { + let mut seen = Vec::<(Vec, String)>::new(); + for arm in dispatch { + let bytes = dispatch_selector_bytes(db, arm)?; + let text = selector_hex(&bytes); + for (first_bytes, first_text) in &seen { + if selector_prefixes_overlap(first_bytes, &bytes) { + return Err(LowerError::Unsupported(format!( + "contract `{}` has overlapping recv selectors: {first_text} overlaps {text}; \ + each msg variant in a contract must have a unique, non-overlapping selector prefix", + contract_name(db, contract), + ))); + } + } + seen.push((bytes, text)); + } + Ok(()) +} + +fn dispatch_selector_bytes<'db>( + db: &'db dyn MirDb, + arm: &DispatchArm<'db>, +) -> Result, LowerError> { + let raw = arm.selector.data(db).to_bytes_be(); + let selector_size = arm.abi.selector_size as usize; + if raw.len() > selector_size { + return Err(LowerError::Unsupported(format!( + "selector {} does not fit in {} byte ABI selector", + selector_hex(&raw), + arm.abi.selector_size, + ))); + } + let mut out = vec![0; selector_size.saturating_sub(raw.len())]; + out.extend(raw); + Ok(out) +} + +fn selector_hex(bytes: &[u8]) -> String { + let mut out = String::from("0x"); + for byte in bytes { + out.push_str(&format!("{byte:02x}")); + } + out +} + +fn selector_prefixes_overlap(left: &[u8], right: &[u8]) -> bool { + left.iter().zip(right.iter()).all(|(lhs, rhs)| lhs == rhs) +} + fn contract_init_root<'db>( db: &'db dyn MirDb, contract: Contract<'db>, @@ -724,9 +798,15 @@ fn contract_init_abi_plan<'db>( let init_args = if contract.init_args_ty(db) == TyId::unit(db) { InitArgsPlan::None } else { + let abi_ty = sol_abi_ty(db, contract.scope())?; InitArgsPlan::DecodeInitTail { tuple_ty: contract.init_args_ty(db), - decode_fn: resolve_decode_instance(db, contract.scope(), contract.init_args_ty(db))?, + decode_fn: resolve_decode_instance( + db, + contract.scope(), + abi_ty, + contract.init_args_ty(db), + )?, projected_fields, } }; @@ -742,10 +822,10 @@ fn contract_init_abi_plan<'db>( fn contract_recv_wrapper<'db>( db: &'db dyn MirDb, arm: RecvArmView<'db>, - abi_ty: TyId<'db>, + abi: ContractAbiPlan<'db>, ) -> Result<(RecvArmAbiInfo<'db>, RuntimeInstance<'db>), LowerError> { let contract = arm.contract(db); - let abi_info = arm.abi_info(db, abi_ty); + let abi_info = arm.abi_info(db, abi.abi_ty); let recv = arm.recv(db); let user_recv = runtime_instance_for_semantic( db, @@ -787,7 +867,7 @@ fn contract_recv_wrapper<'db>( } else { RuntimeInputPlan::DecodeCalldataPayload { msg_ty: abi_info.args_ty, - decode_fn: resolve_decode_instance(db, contract.scope(), abi_info.args_ty)?, + decode_fn: resolve_decode_instance(db, contract.scope(), abi.abi_ty, abi_info.args_ty)?, projected_fields, } }; @@ -801,6 +881,7 @@ fn contract_recv_wrapper<'db>( RuntimeSyntheticSpec::ContractRecvAbi { plan: ContractRecvAbiPlan { contract, + abi, selector: abi_info.selector_value, payable: match arm.arm(db) { Some(recv_arm) => recv_arm.is_payable(db), @@ -1516,19 +1597,131 @@ fn synthetic_instance<'db>( get_or_build_runtime_instance(db, key) } +fn contract_abi_plan<'db>( + db: &'db dyn MirDb, + scope: hir::hir_def::scope_graph::ScopeId<'db>, + abi_ty: TyId<'db>, +) -> Result, LowerError> { + let assumptions = PredicateListId::empty_list(db); + let abi_trait = resolve_core_trait(db, scope, &["abi", "Abi"]) + .ok_or_else(|| LowerError::Unsupported("missing required core::abi::Abi".to_string()))?; + let abi_inst = TraitInstId::new_simple(db, abi_trait, vec![abi_ty]); + + let selector_ty = normalize_ty( + db, + TyId::assoc_ty(db, abi_inst, IdentId::new(db, "Selector".to_string())), + scope, + assumptions, + ); + let selector_class = crate::runtime::lower::type_info::scalar_class_for_ty_in_env( + db, + RuntimeTypeEnv::new(Some(scope), assumptions), + selector_ty, + ) + .ok_or_else(|| { + LowerError::Unsupported(format!( + "ABI `{}` selector type `{}` is not a scalar runtime type", + abi_ty.pretty_print(db), + selector_ty.pretty_print(db), + )) + })?; + if !matches!(selector_class.repr, ScalarRepr::Int { signed: false, .. }) { + return Err(LowerError::Unsupported(format!( + "ABI `{}` selector type `{}` must lower to an unsigned integer", + abi_ty.pretty_print(db), + selector_ty.pretty_print(db), + ))); + } + + let solve_cx = TraitSolveCx::new(db, scope).with_assumptions(assumptions); + let selector_size_name = IdentId::new(db, "SELECTOR_SIZE".to_string()); + let selector_size_body = + assoc_const_body_for_trait_inst(db, solve_cx, abi_inst, selector_size_name).ok_or_else( + || { + LowerError::Unsupported(format!( + "missing evaluable associated const `SELECTOR_SIZE` for ABI `{}`", + abi_ty.pretty_print(db), + )) + }, + )?; + let selector_size = match eval_body_owner_const( + db, + BodyOwner::AnonConstBody { + body: selector_size_body, + expected: TyId::u256(db), + }, + Vec::new(), + ) { + Ok(value) => match value.value(db) { + SemConstValue::Scalar { + value: SemConstScalar::Int { value }, + .. + } => value.to_u64().ok_or_else(|| { + LowerError::Unsupported(format!( + "associated const `SELECTOR_SIZE` for ABI `{}` is too large", + abi_ty.pretty_print(db), + )) + })?, + _ => { + return Err(LowerError::Unsupported(format!( + "failed to evaluate associated const `SELECTOR_SIZE` for ABI `{}`", + abi_ty.pretty_print(db), + ))); + } + }, + Err(_) => { + return Err(LowerError::Unsupported(format!( + "failed to evaluate associated const `SELECTOR_SIZE` for ABI `{}`", + abi_ty.pretty_print(db), + ))); + } + }; + if selector_size > 32 { + return Err(LowerError::Unsupported(format!( + "ABI `{}` selector size {selector_size} exceeds one EVM word", + abi_ty.pretty_print(db), + ))); + } + + Ok(ContractAbiPlan { + abi_ty, + selector_ty, + selector_size, + selector_class, + }) +} + fn resolve_decode_instance<'db>( db: &'db dyn MirDb, scope: hir::hir_def::scope_graph::ScopeId<'db>, + abi_ty: TyId<'db>, ty: TyId<'db>, ) -> Result, LowerError> { - let abi_ty = sol_abi_ty(db, scope)?; - let decoder_ty = sol_decoder_ty(db, scope)?; + let decoder_ty = abi_decoder_ty(db, scope, abi_ty)?; let decode_trait = resolve_core_trait(db, scope, &["abi", "Decode"]) .ok_or_else(|| LowerError::Unsupported("missing required core::abi::Decode".to_string()))?; let inst = TraitInstId::new_simple(db, decode_trait, vec![ty, abi_ty]); resolve_trait_runtime_instance(db, scope, inst, "decode_payload", vec![decoder_ty]) } +fn abi_decoder_ty<'db>( + db: &'db dyn MirDb, + scope: hir::hir_def::scope_graph::ScopeId<'db>, + abi_ty: TyId<'db>, +) -> Result, LowerError> { + let assumptions = PredicateListId::empty_list(db); + let abi_trait = resolve_core_trait(db, scope, &["abi", "Abi"]) + .ok_or_else(|| LowerError::Unsupported("missing required core::abi::Abi".to_string()))?; + let abi_inst = TraitInstId::new_simple(db, abi_trait, vec![abi_ty]); + let decoder_ctor = normalize_ty( + db, + TyId::assoc_ty(db, abi_inst, IdentId::new(db, "Decoder".to_string())), + scope, + assumptions, + ); + Ok(TyId::app(db, decoder_ctor, memory_bytes_ty(db, scope)?)) +} + fn resolve_trait_runtime_instance<'db>( db: &'db dyn MirDb, scope: hir::hir_def::scope_graph::ScopeId<'db>, @@ -1612,15 +1805,6 @@ fn memory_bytes_ty<'db>( }) } -fn sol_decoder_ty<'db>( - db: &'db dyn MirDb, - scope: hir::hir_def::scope_graph::ScopeId<'db>, -) -> Result, LowerError> { - let ctor = resolve_lib_type_path(db, scope, "std::abi::sol::SolDecoder") - .ok_or_else(|| LowerError::Unsupported("missing std::abi::sol::SolDecoder".to_string()))?; - Ok(TyId::app(db, ctor, memory_bytes_ty(db, scope)?)) -} - fn make_runtime_function<'db>( db: &'db dyn MirDb, instance: RuntimeInstance<'db>, @@ -1781,6 +1965,16 @@ fn runtime_instance_sort_key<'db>(db: &'db dyn MirDb, instance: RuntimeInstance< runtime_instance_sort_key_query(db, instance) } +fn optional_selector_key<'db>(db: &'db dyn MirDb, selector: Option>) -> String { + selector + .map(|selector| selector_key(db, selector)) + .unwrap_or_else(|| "fallback".to_string()) +} + +fn selector_key<'db>(db: &'db dyn MirDb, selector: IntegerId<'db>) -> String { + selector.data(db).to_str_radix(10) +} + #[salsa::tracked] fn runtime_instance_symbol_key_query<'db>( db: &'db dyn MirDb, @@ -1886,10 +2080,10 @@ fn runtime_synthetic_spec_symbol_key<'db>( init_args_plan_symbol_key(db, &plan.init_args) ), RuntimeSyntheticSpec::ContractRecvAbi { plan } => format!( - "__synthetic:contract_recv_abi:{}:{}:{}:{}:{}", + "__synthetic:contract_recv_abi:{}:{}:{}:{}:{}:{}", item_identity(db, plan.contract.into()), - plan.selector - .map_or_else(|| "fallback".to_string(), |selector| selector.to_string()), + optional_selector_key(db, plan.selector), + type_identity(db, plan.abi.abi_ty), plan.payable, runtime_instance_symbol_key(db, plan.user_recv), runtime_input_plan_symbol_key(db, &plan.input) @@ -1914,8 +2108,9 @@ fn runtime_synthetic_spec_symbol_key<'db>( dispatch .iter() .map(|arm| format!( - "{}:{}", - arm.selector, + "{}:{}:{}", + type_identity(db, arm.abi.abi_ty), + selector_key(db, arm.selector), runtime_instance_symbol_key(db, arm.wrapper) )) .collect::>() @@ -1973,10 +2168,10 @@ fn runtime_synthetic_spec_sort_key<'db>( init_args_plan_sort_key(db, &plan.init_args) ), RuntimeSyntheticSpec::ContractRecvAbi { plan } => format!( - "__synthetic:contract_recv_abi:{}:{}:{}:{}:{}", + "__synthetic:contract_recv_abi:{}:{}:{}:{}:{}:{}", item_identity(db, plan.contract.into()), - plan.selector - .map_or_else(|| "fallback".to_string(), |selector| selector.to_string()), + optional_selector_key(db, plan.selector), + type_identity(db, plan.abi.abi_ty), plan.payable, runtime_instance_sort_key(db, plan.user_recv), runtime_input_plan_sort_key(db, &plan.input) @@ -2001,8 +2196,9 @@ fn runtime_synthetic_spec_sort_key<'db>( dispatch .iter() .map(|arm| format!( - "{}:{}", - arm.selector, + "{}:{}:{}", + type_identity(db, arm.abi.abi_ty), + selector_key(db, arm.selector), runtime_instance_sort_key(db, arm.wrapper) )) .collect::>() @@ -2402,8 +2598,7 @@ fn symbol_base_for_runtime_instance<'db>( RuntimeSyntheticSpec::ContractRecvAbi { plan } => format!( "contract_recv_abi_{}_{}", contract_name(db, plan.contract), - plan.selector - .map_or_else(|| "fallback".to_string(), |selector| selector.to_string()), + optional_selector_key(db, plan.selector), ), RuntimeSyntheticSpec::ContractInitRoot { contract, .. } => { format!("contract_init_root_{}", contract_name(db, *contract)) @@ -2510,7 +2705,8 @@ mod tests { arm.abi_info(db, abi_ty).selector_signature.as_deref() == Some(selector_sig) }) .unwrap_or_else(|| panic!("missing recv arm `{selector_sig}`")); - let (_, wrapper) = contract_recv_wrapper(db, arm, abi_ty).expect("recv wrapper"); + let abi = contract_abi_plan(db, contract.scope(), abi_ty).expect("Sol ABI plan"); + let (_, wrapper) = contract_recv_wrapper(db, arm, abi).expect("recv wrapper"); let RuntimeInstanceSource::Synthetic(synthetic) = wrapper.key(db).source(db) else { panic!("recv wrapper should be synthetic"); }; diff --git a/crates/mir/src/runtime/pretty.rs b/crates/mir/src/runtime/pretty.rs index b8746ece79..edc0518363 100644 --- a/crates/mir/src/runtime/pretty.rs +++ b/crates/mir/src/runtime/pretty.rs @@ -854,7 +854,9 @@ fn format_builtin<'db>(db: &'db dyn MirDb, builtin: &RuntimeBuiltin<'db>) -> Str format_local_id(*topic2), format_local_id(*topic3) ), - RuntimeBuiltin::CallDataSelector => "calldata_selector".to_string(), + RuntimeBuiltin::CallDataSelector { selector_size, .. } => { + format!("calldata_selector({selector_size})") + } RuntimeBuiltin::MakeContractFieldRef { slot, class, kind } => format!( "make_contract_field_ref slot={slot} {} {}", format_class(db, class), diff --git a/crates/mir/src/runtime/synthetic.rs b/crates/mir/src/runtime/synthetic.rs index 4840175474..002763ad7b 100644 --- a/crates/mir/src/runtime/synthetic.rs +++ b/crates/mir/src/runtime/synthetic.rs @@ -12,7 +12,7 @@ use hir::{ }, }, hir_def::{ - IdentId, + IdentId, IntegerId, expr::{ArithBinOp, BinOp, CompBinOp}, }, }; @@ -24,13 +24,13 @@ use crate::{ }, layout_size_bytes, runtime::{ - AddressSpaceKind, BorrowAccess, ConstScalar, ContractInitAbiPlan, ContractRecvAbiPlan, - DispatchDefault, EntryEffectArgPlan, InitArgsPlan, PlaceElem, PlaceRoot, RBlock, RBlockId, - RExpr, RLocal, RLocalId, RStmt, RTerminator, RefKind, RefView, RuntimeBody, - RuntimeBoundarySpec, RuntimeBuiltin, RuntimeCarrier, RuntimeClass, RuntimeExitBehavior, - RuntimeInputPlan, RuntimeInterfaceSignature, RuntimeLocalRoot, RuntimeParamPlan, - RuntimePlace, RuntimeReturnPlan, RuntimeSyntheticSpec, ScalarClass, ScalarRepr, ScalarRole, - TargetRootProviderBinding, TargetRootProviderMaterialization, + AddressSpaceKind, BorrowAccess, ConstScalar, ContractAbiPlan, ContractInitAbiPlan, + ContractRecvAbiPlan, DispatchDefault, EntryEffectArgPlan, InitArgsPlan, PlaceElem, + PlaceRoot, RBlock, RBlockId, RExpr, RLocal, RLocalId, RStmt, RTerminator, RefKind, RefView, + RuntimeBody, RuntimeBoundarySpec, RuntimeBuiltin, RuntimeCarrier, RuntimeClass, + RuntimeExitBehavior, RuntimeInputPlan, RuntimeInterfaceSignature, RuntimeLocalRoot, + RuntimeParamPlan, RuntimePlace, RuntimeReturnPlan, RuntimeSyntheticSpec, ScalarClass, + ScalarRepr, ScalarRole, TargetRootProviderBinding, TargetRootProviderMaterialization, lower::{ boundary::{RuntimeValueAddress, RuntimeValueSource}, classify::{ref_class_for_place_result, semantic_return_ty}, @@ -469,7 +469,8 @@ impl<'db> SyntheticBodyBuilder<'db> { fn build_contract_recv_abi(&mut self, plan: ContractRecvAbiPlan<'db>) { let zero = self.push_const_word(RBlockId::from_u32(0), 0); - let four = self.push_const_word(RBlockId::from_u32(0), 4); + let selector_size = + self.push_const_word(RBlockId::from_u32(0), plan.abi.selector_size as u32); let cont_bb = if plan.payable { RBlockId::from_u32(0) } else { @@ -489,7 +490,7 @@ impl<'db> SyntheticBodyBuilder<'db> { RuntimeClass::Scalar(word_scalar_class()), RuntimeBuiltin::CallDataSize, ); - let payload_len = self.push_binary_word(cont_bb, ArithBinOp::Sub, size, four); + let payload_len = self.push_binary_word(cont_bb, ArithBinOp::Sub, size, selector_size); let payload_ptr = self.push_builtin_value( cont_bb, TyId::u256(self.db), @@ -500,7 +501,7 @@ impl<'db> SyntheticBodyBuilder<'db> { cont_bb, RuntimeBuiltin::CallDataCopy { dst: payload_ptr, - offset: four, + offset: selector_size, len: payload_len, }, ); @@ -511,7 +512,8 @@ impl<'db> SyntheticBodyBuilder<'db> { payload_len, ); let decoder_new = - resolve_sol_decoder_new(self.db, plan.contract.scope()).expect("decoder_new"); + resolve_abi_decoder_new(self.db, plan.contract.scope(), plan.abi.abi_ty) + .expect("decoder_new"); let decoder = self.push_call_result(cont_bb, decoder_new, vec![input]); if let Some(decoded) = self.push_call(cont_bb, decode_fn, vec![decoder]) { call_args.extend(self.extract_selected_tuple_fields( @@ -541,9 +543,10 @@ impl<'db> SyntheticBodyBuilder<'db> { RuntimeReturnPlan::Value { .. } => { let ret_value = ret.expect("value-returning recv wrapper should produce a value"); let scope = plan.contract.scope(); - let encode_alloc = resolve_sol_encode_single_root_alloc( + let encode_alloc = resolve_abi_encode_single_root_alloc( self.db, scope, + plan.abi.abi_ty, self.locals[ret_value.index()].semantic_ty, ) .expect("encode_single_root_alloc"); @@ -605,22 +608,7 @@ impl<'db> SyntheticBodyBuilder<'db> { default: DispatchDefault<'db>, ) { let zero = self.push_const_word(RBlockId::from_u32(0), 0); - let selector = self.push_builtin_value( - RBlockId::from_u32(0), - TyId::u256(self.db), - RuntimeClass::Scalar(selector_scalar_class()), - RuntimeBuiltin::CallDataSelector, - ); let default_bb = self.new_block(); - let mut cases = Vec::with_capacity(dispatch.len()); - for arm in dispatch { - let block = self.new_block(); - cases.push((u32_scalar(arm.selector), block)); - self.blocks[block.index()].terminator = RTerminator::TerminalCall { - callee: arm.wrapper, - args: Box::default(), - }; - } self.blocks[default_bb.index()].terminator = match default { DispatchDefault::RevertEmpty => RTerminator::Revert { offset: zero, @@ -631,11 +619,73 @@ impl<'db> SyntheticBodyBuilder<'db> { args: Box::default(), }, }; - self.blocks[0].terminator = RTerminator::SwitchScalar { - discr: selector, - cases: cases.into_boxed_slice(), - default: default_bb, - }; + if dispatch.is_empty() { + self.blocks[0].terminator = RTerminator::Goto(default_bb); + return; + } + + let input_len = self.push_builtin_value( + RBlockId::from_u32(0), + TyId::u256(self.db), + RuntimeClass::Scalar(word_scalar_class()), + RuntimeBuiltin::CallDataSize, + ); + let mut groups = + Vec::<(ContractAbiPlan<'db>, Vec<&crate::runtime::DispatchArm<'db>>)>::new(); + for arm in dispatch { + if let Some((_, arms)) = groups.iter_mut().find(|(abi, _)| abi == &arm.abi) { + arms.push(arm); + } else { + groups.push((arm.abi.clone(), vec![arm])); + } + } + + let group_count = groups.len(); + let mut current_bb = RBlockId::from_u32(0); + for (idx, (abi, arms)) in groups.into_iter().enumerate() { + let next_group = if idx + 1 == group_count { + default_bb + } else { + self.new_block() + }; + let selector_bb = self.new_block(); + let selector_size = self.push_const_word(current_bb, abi.selector_size as u32); + let is_short = + self.push_bool_binary(current_bb, CompBinOp::Lt, input_len, selector_size); + self.blocks[current_bb.index()].terminator = RTerminator::Branch { + cond: is_short, + then_bb: next_group, + else_bb: selector_bb, + }; + + let selector = self.push_builtin_value( + selector_bb, + abi.selector_ty, + RuntimeClass::Scalar(abi.selector_class.clone()), + RuntimeBuiltin::CallDataSelector { + selector_size: abi.selector_size, + class: abi.selector_class.clone(), + }, + ); + let mut cases = Vec::with_capacity(arms.len()); + for arm in arms { + let block = self.new_block(); + cases.push(( + selector_const_scalar(self.db, arm.selector, &abi.selector_class), + block, + )); + self.blocks[block.index()].terminator = RTerminator::TerminalCall { + callee: arm.wrapper, + args: Box::default(), + }; + } + self.blocks[selector_bb.index()].terminator = RTerminator::SwitchScalar { + discr: selector, + cases: cases.into_boxed_slice(), + default: next_group, + }; + current_bb = next_group; + } } fn emit_nonpayable_guard(&mut self, zero: RLocalId) -> RBlockId { @@ -1477,29 +1527,23 @@ fn word_scalar_class<'db>() -> ScalarClass<'db> { } } -fn selector_scalar_class<'db>() -> ScalarClass<'db> { - ScalarClass { - repr: ScalarRepr::Int { - bits: 32, - signed: false, - }, - role: ScalarRole::Plain, - } -} - -fn u32_scalar(value: u32) -> ConstScalar { +fn selector_const_scalar<'db>( + db: &'db dyn MirDb, + selector: IntegerId<'db>, + class: &ScalarClass<'db>, +) -> ConstScalar { + let ScalarRepr::Int { bits, signed } = class.repr else { + panic!("ABI selector class should be integer-backed, got {class:?}"); + }; + let words = selector.data(db).to_bytes_be(); + debug_assert!( + words.len() <= usize::from(bits.div_ceil(8)), + "selector value does not fit selector class {class:?}", + ); ConstScalar::Int { - bits: 32, - signed: false, - words: if value == 0 { - Vec::new() - } else { - value - .to_be_bytes() - .into_iter() - .skip_while(|byte| *byte == 0) - .collect() - }, + bits, + signed, + words, } } @@ -1508,20 +1552,28 @@ fn resolve_sol_decoder_new<'db>( scope: hir::hir_def::scope_graph::ScopeId<'db>, ) -> Option> { let abi_ty = sol_abi_ty(db, scope)?; + resolve_abi_decoder_new(db, scope, abi_ty) +} + +fn resolve_abi_decoder_new<'db>( + db: &'db dyn MirDb, + scope: hir::hir_def::scope_graph::ScopeId<'db>, + abi_ty: TyId<'db>, +) -> Option> { let input_ty = memory_bytes_ty(db, scope)?; let abi_trait = resolve_core_trait(db, scope, &["abi", "Abi"])?; let inst = TraitInstId::new_simple(db, abi_trait, vec![abi_ty]); resolve_trait_runtime_instance(db, scope, inst, "decoder_new", vec![input_ty]).ok() } -fn resolve_sol_encode_single_root_alloc<'db>( +fn resolve_abi_encode_single_root_alloc<'db>( db: &'db dyn MirDb, scope: hir::hir_def::scope_graph::ScopeId<'db>, + abi_ty: TyId<'db>, ty: TyId<'db>, ) -> Option> { let assumptions = PredicateListId::empty_list(db); let func = resolve_lib_func_path(db, scope, "core::abi::encode_single_root_alloc")?; - let abi_ty = sol_abi_ty(db, scope)?; let key = SemanticInstanceKey::new( db, BodyOwner::Func(func), diff --git a/crates/mir/src/verify/package.rs b/crates/mir/src/verify/package.rs index c7e707ff4a..2b3c17087e 100644 --- a/crates/mir/src/verify/package.rs +++ b/crates/mir/src/verify/package.rs @@ -137,46 +137,7 @@ fn verify_synthetic_function<'db>( RuntimeFunctionOwner::Synthetic(spec) => match spec { RuntimeSyntheticSpec::ContractRuntimeRoot { dispatch, default, .. - } => { - let Some(entry) = body.blocks.first() else { - return Err(VerifyError::InvalidReturnClass); - }; - let RTerminator::SwitchScalar { - cases, - default: default_bb, - .. - } = &entry.terminator - else { - return Err(VerifyError::InvalidReturnClass); - }; - if cases.len() != dispatch.len() { - return Err(VerifyError::InvalidReturnClass); - } - for ((_, block), arm) in cases.iter().zip(dispatch.iter()) { - let Some(target) = body.block(*block) else { - return Err(VerifyError::MissingRuntimeBlock(*block)); - }; - let RTerminator::TerminalCall { callee, args } = &target.terminator else { - return Err(VerifyError::InvalidReturnClass); - }; - if *callee != arm.wrapper || !args.is_empty() { - return Err(VerifyError::InvalidReturnClass); - } - } - - let Some(default_target) = body.block(*default_bb) else { - return Err(VerifyError::MissingRuntimeBlock(*default_bb)); - }; - match (default, &default_target.terminator) { - (DispatchDefault::RevertEmpty, RTerminator::Revert { .. }) => {} - ( - DispatchDefault::Call { wrapper }, - RTerminator::TerminalCall { callee, args }, - ) if *callee == wrapper && args.is_empty() => {} - _ => return Err(VerifyError::InvalidReturnClass), - } - Ok(()) - } + } => verify_contract_runtime_root(body, &dispatch, default), RuntimeSyntheticSpec::ContractInitRoot { .. } => { verify_has_terminator(body, |term| matches!(term, RTerminator::ReturnData { .. })) } @@ -195,6 +156,128 @@ fn verify_synthetic_function<'db>( } } +fn verify_contract_runtime_root<'db>( + body: &crate::runtime::RuntimeBody<'db>, + dispatch: &[crate::runtime::DispatchArm<'db>], + default: DispatchDefault<'db>, +) -> Result<(), VerifyError<'db>> { + if body.blocks.is_empty() { + return Err(VerifyError::InvalidReturnClass); + } + + let mut remaining = dispatch.iter().map(|arm| arm.wrapper).collect::>(); + let mut seen_default = false; + let mut visited = FxHashSet::default(); + verify_contract_runtime_block( + body, + crate::runtime::RBlockId::from_u32(0), + &mut remaining, + default, + &mut seen_default, + &mut visited, + )?; + + if remaining.is_empty() && seen_default { + Ok(()) + } else { + Err(VerifyError::InvalidReturnClass) + } +} + +fn verify_contract_runtime_block<'db>( + body: &crate::runtime::RuntimeBody<'db>, + block: crate::runtime::RBlockId, + remaining: &mut Vec>, + default: DispatchDefault<'db>, + seen_default: &mut bool, + visited: &mut FxHashSet, +) -> Result<(), VerifyError<'db>> { + if !visited.insert(block) { + return Ok(()); + } + let Some(block_data) = body.block(block) else { + return Err(VerifyError::MissingRuntimeBlock(block)); + }; + + match &block_data.terminator { + RTerminator::Goto(target) => { + verify_contract_runtime_block(body, *target, remaining, default, seen_default, visited) + } + RTerminator::Branch { + then_bb, else_bb, .. + } => { + verify_contract_runtime_block( + body, + *then_bb, + remaining, + default, + seen_default, + visited, + )?; + verify_contract_runtime_block(body, *else_bb, remaining, default, seen_default, visited) + } + RTerminator::SwitchScalar { + cases, + default: default_bb, + .. + } => { + for (_, case_bb) in cases { + verify_contract_dispatch_case(body, *case_bb, remaining)?; + } + verify_contract_runtime_block( + body, + *default_bb, + remaining, + default, + seen_default, + visited, + ) + } + term => verify_contract_default_terminator(term, default, seen_default), + } +} + +fn verify_contract_dispatch_case<'db>( + body: &crate::runtime::RuntimeBody<'db>, + block: crate::runtime::RBlockId, + remaining: &mut Vec>, +) -> Result<(), VerifyError<'db>> { + let Some(block_data) = body.block(block) else { + return Err(VerifyError::MissingRuntimeBlock(block)); + }; + let RTerminator::TerminalCall { callee, args } = &block_data.terminator else { + return Err(VerifyError::InvalidReturnClass); + }; + if !args.is_empty() { + return Err(VerifyError::InvalidReturnClass); + } + let Some(pos) = remaining.iter().position(|wrapper| wrapper == callee) else { + return Err(VerifyError::InvalidReturnClass); + }; + remaining.swap_remove(pos); + Ok(()) +} + +fn verify_contract_default_terminator<'db>( + term: &RTerminator<'db>, + default: DispatchDefault<'db>, + seen_default: &mut bool, +) -> Result<(), VerifyError<'db>> { + match (default, term) { + (DispatchDefault::RevertEmpty, RTerminator::Revert { .. }) => { + *seen_default = true; + Ok(()) + } + (DispatchDefault::Call { wrapper }, RTerminator::TerminalCall { callee, args }) + if *callee == wrapper && args.is_empty() => + { + *seen_default = true; + Ok(()) + } + _ => Err(VerifyError::InvalidReturnClass), + } +} + fn verify_has_terminator<'db>( body: &crate::runtime::RuntimeBody<'db>, pred: impl Fn(&RTerminator<'db>) -> bool, diff --git a/crates/mir/src/verify/runtime.rs b/crates/mir/src/verify/runtime.rs index cc0a0e28d7..80003935b7 100644 --- a/crates/mir/src/verify/runtime.rs +++ b/crates/mir/src/verify/runtime.rs @@ -763,13 +763,9 @@ fn verify_builtin<'db>( verify_word_value(body, *topic3)?; Ok(None) } - RuntimeBuiltin::CallDataSelector => Ok(Some(RuntimeClass::Scalar(ScalarClass { - repr: ScalarRepr::Int { - bits: 32, - signed: false, - }, - role: ScalarRole::Plain, - }))), + RuntimeBuiltin::CallDataSelector { class, .. } => { + Ok(Some(RuntimeClass::Scalar(class.clone()))) + } RuntimeBuiltin::MakeContractFieldRef { class, kind, .. } => { if let RuntimeClass::Ref { kind: actual_kind, diff --git a/crates/uitest/fixtures/ty_check/event_unsupported_field_type.snap b/crates/uitest/fixtures/ty_check/event_unsupported_field_type.snap index e2b20ee731..bd313693d4 100644 --- a/crates/uitest/fixtures/ty_check/event_unsupported_field_type.snap +++ b/crates/uitest/fixtures/ty_check/event_unsupported_field_type.snap @@ -1,5 +1,6 @@ --- source: crates/uitest/tests/ty_check.rs +assertion_line: 27 expression: diags input_file: fixtures/ty_check/event_unsupported_field_type.fe --- @@ -12,9 +13,9 @@ error[6-0003]: trait bound is not satisfied 6 │ │ } │ ╰─^ `StorageMap` doesn't implement `Encode` │ - ┌─ src/evm/effects.fe:344:14 + ┌─ src/evm/effects.fe:347:14 │ -344 │ where T: Encode + AbiSize +347 │ where T: Encode + AbiSize │ ----------- required by this bound on `encode_abi_payload` error[6-0003]: trait bound is not satisfied @@ -26,7 +27,7 @@ error[6-0003]: trait bound is not satisfied 6 │ │ } │ ╰─^ `StorageMap` doesn't implement `AbiSize` │ - ┌─ src/evm/effects.fe:344:28 + ┌─ src/evm/effects.fe:347:28 │ -344 │ where T: Encode + AbiSize +347 │ where T: Encode + AbiSize │ ------- required by this bound on `encode_abi_payload` diff --git a/crates/uitest/fixtures/ty_check/recv_duplicate_selector.snap b/crates/uitest/fixtures/ty_check/recv_duplicate_selector.snap index 0d8cd5e9a7..a81521b94b 100644 --- a/crates/uitest/fixtures/ty_check/recv_duplicate_selector.snap +++ b/crates/uitest/fixtures/ty_check/recv_duplicate_selector.snap @@ -8,20 +8,20 @@ error[8-0047]: duplicate selector across recv blocks ┌─ recv_duplicate_selector.fe:13:5 │ 5 │ Deposit { amount: u64 } -> u64, - │ ------- `Deposit` with selector 0x00000001 declared here + │ ------- `Deposit` declared here · 13 │ Transfer { to: u64, amount: u64 } -> bool, │ ^^^^^^^^ `Transfer` has selector 0x00000001 which conflicts with `Deposit` │ - = each msg variant in a contract must have a unique selector + = each msg variant in a contract must have a unique, non-overlapping selector prefix error[8-0047]: duplicate selector across recv blocks ┌─ recv_duplicate_selector.fe:56:5 │ 51 │ Foo { x: u64 } -> u64, - │ --- `Foo` with selector 0x00000001 declared here + │ --- `Foo` declared here · 56 │ Foo { y: u64 } -> bool, │ ^^^ `Foo` has selector 0x00000001 which conflicts with `Foo` │ - = each msg variant in a contract must have a unique selector + = each msg variant in a contract must have a unique, non-overlapping selector prefix diff --git a/crates/uitest/fixtures/ty_check/recv_duplicate_selector_const_expr.snap b/crates/uitest/fixtures/ty_check/recv_duplicate_selector_const_expr.snap index 8658b9c991..21c692dfe2 100644 --- a/crates/uitest/fixtures/ty_check/recv_duplicate_selector_const_expr.snap +++ b/crates/uitest/fixtures/ty_check/recv_duplicate_selector_const_expr.snap @@ -8,9 +8,9 @@ error[8-0047]: duplicate selector across recv blocks ┌─ recv_duplicate_selector_const_expr.fe:11:5 │ 6 │ Deposit { amount: u64 } -> u64, - │ ------- `Deposit` with selector 0xa9059cbb declared here + │ ------- `Deposit` declared here · 11 │ Transfer { to: u64, amount: u64 } -> bool, │ ^^^^^^^^ `Transfer` has selector 0xa9059cbb which conflicts with `Deposit` │ - = each msg variant in a contract must have a unique selector + = each msg variant in a contract must have a unique, non-overlapping selector prefix diff --git a/crates/uitest/fixtures/ty_check/selector_overflow.snap b/crates/uitest/fixtures/ty_check/selector_overflow.snap index 67e2500376..312956cb0e 100644 --- a/crates/uitest/fixtures/ty_check/selector_overflow.snap +++ b/crates/uitest/fixtures/ty_check/selector_overflow.snap @@ -1,5 +1,6 @@ --- source: crates/uitest/tests/ty_check.rs +assertion_line: 27 expression: diags input_file: fixtures/ty_check/selector_overflow.fe --- diff --git a/ingots/core/src/abi.fe b/ingots/core/src/abi.fe index 31637aae82..f5f1050d82 100644 --- a/ingots/core/src/abi.fe +++ b/ingots/core/src/abi.fe @@ -83,7 +83,7 @@ impl Cursor /// ABI definition (selector width/format). pub trait Abi { - type Selector + type Selector: WordValue /// Higher-kinded type constructor for a decoder over some `ByteInput`. type Decoder: * -> * /// ABI encoder type. diff --git a/ingots/std/src/abi/sol.fe b/ingots/std/src/abi/sol.fe index 2d18eb56cc..92410d1963 100644 --- a/ingots/std/src/abi/sol.fe +++ b/ingots/std/src/abi/sol.fe @@ -305,12 +305,12 @@ pub fn decode_string_view_at(_ input: own I, base: u256, head_pos: u256) -> S StringView { bytes: decode_bytes_view_at(input, base: base, head_pos: head_pos) } } -impl AbiDecoder for SolDecoder +impl AbiDecoder for SolDecoder where I: ByteInput { type Input = I - fn input(self) -> Self::Input { + fn input(self) -> I { self.cur.input } @@ -382,7 +382,7 @@ impl SolEncoder { } } -impl AbiEncoder for SolEncoder { +impl AbiEncoder for SolEncoder { fn base(self) -> u256 { self.base } diff --git a/ingots/std/src/evm/effects.fe b/ingots/std/src/evm/effects.fe index f377ae5915..6485088047 100644 --- a/ingots/std/src/evm/effects.fe +++ b/ingots/std/src/evm/effects.fe @@ -1,5 +1,6 @@ use core::effect_ref::{EffectHandle, EffectHandleMut, EffectRef, EffectRefMut} use core::{size_of} +use core::num::WordValue use core::abi::{ Abi, AbiDecoder, @@ -8,6 +9,8 @@ use core::abi::{ AbiSpan, Decode, Encode, + decode_payload_root, + decode_single_root, encode_alloc, encode_single_root_alloc, } @@ -21,7 +24,7 @@ use ingot::evm::intrinsic::{ } use ingot::abi::Sol use ingot::abi::Text -use ingot::abi::sol::{decode_input_at, decode_output} +use ingot::abi::sol::{SolDecoder, decode_input_at, decode_output} use super::calldata::CallData use super::contract_field_slot use super::panic::Panic @@ -343,7 +346,13 @@ fn copy_words(dest: u256, src: u256, len: u256) { pub fn encode_abi_payload(_ value: own T) -> (u256, u256) where T: Encode + AbiSize { - encode_alloc(value) + encode_abi_payload_abi(value) +} + +pub fn encode_abi_payload_abi(_ value: own T) -> (u256, u256) + where T: Encode + AbiSize +{ + encode_alloc(value) } /// High-level contract calls with ABI encoding/decoding. @@ -371,22 +380,27 @@ pub trait Call { ) != 0 } - fn call(mut self, addr: own Address, gas: u256, value: u256, message: own M) -> M::Return - where M: MsgVariant + Encode, M::Return: Decode + AbiSize + fn call(mut self, addr: own Address, gas: u256, value: u256, message: own M) -> M::Return + where M: MsgVariant + Encode, + M::Return: Decode + AbiSize - fn static(mut self, addr: own Address, gas: u256, message: own M) -> M::Return - where M: MsgVariant + Encode, M::Return: Decode + AbiSize + fn static(mut self, addr: own Address, gas: u256, message: own M) -> M::Return + where M: MsgVariant + Encode, + M::Return: Decode + AbiSize - fn delegate(mut self, addr: own Address, gas: u256, message: own M) -> M::Return - where M: MsgVariant + Encode, M::Return: Decode + AbiSize + fn delegate(mut self, addr: own Address, gas: u256, message: own M) -> M::Return + where M: MsgVariant + Encode, + M::Return: Decode + AbiSize } impl Address { /// Call a contract at this address with a typed message. /// /// Forwards all available gas and sends no value. Reverts on failure. - pub fn call(self, _ message: own M) -> M::Return - uses (call: mut Call) where M: MsgVariant + Encode, M::Return: Decode + AbiSize + pub fn call(self, _ message: own M) -> M::Return + uses (call: mut Call) + where M: MsgVariant + Encode, + M::Return: Decode + AbiSize { call.call(addr: self, gas: ops::gas(), value: 0, message) } @@ -406,17 +420,35 @@ impl Evm { self.runtime_selector() } + /// Return the current selector from raw calldata using ABI `A`. + pub fn selector_abi(self) -> A::Selector { + self.runtime_selector() + } + /// Return a calldata view over the current Solidity call arguments. pub fn args(self) -> CallData { CallData::with_base(size_of()) } + /// Return a calldata view over the current call arguments using ABI `A`. + pub fn args_abi(self) -> CallData { + CallData::with_base(A::SELECTOR_SIZE) + } + /// Decode the current Solidity call arguments, skipping the 4-byte selector. pub fn decode_args(self) -> T where T: Decode { decode_input_at(self.input(), size_of()) } + + /// Decode the current call arguments using ABI `A`, skipping the selector prefix. + pub fn decode_args_abi(mut self) -> T + where T: Decode + { + let mut d = SolDecoder::with_base(self.input(), A::SELECTOR_SIZE) + decode_payload_root>(mut d) + } } impl Ctx for Evm { @@ -582,9 +614,26 @@ impl Create for Evm { fn encode_calldata(_ selector: u32, _ message: own M) -> (u256, u256) where M: Encode { - let selector_size = size_of() - let selector_word = (selector as u256) << 224 - let encoded = encode_abi_payload(message) + encode_calldata_abi(selector, message) +} + +fn encode_calldata_abi(_ selector: A::Selector, _ message: own M) -> (u256, u256) + where M: Encode +{ + let selector_size = A::SELECTOR_SIZE + if selector_size == 0 { + return encode_abi_payload_abi(message) + } + + // EVM CALL data is limited to 32-byte word operations for the prefix word. + if selector_size > 32 { + ops::revert(offset: 0, len: 0) + } + + let shift = (32 - selector_size) * 8 + let selector_word = selector.to_word() << shift + + let encoded = encode_abi_payload_abi(message) let ptr = mem::alloc(selector_size + encoded.1) ops::mstore(addr: ptr, value: selector_word) copy_words(dest: ptr + selector_size, src: encoded.0, len: encoded.1) @@ -613,7 +662,15 @@ pub fn bubble_last_revert() -> ! { pub fn decode_returndata(_ ret: MemoryBytes) -> R where R: Decode + AbiSize { - decode_output(ret) + decode_returndata_abi(ret) +} + +/// Decode ABI data from an in-memory returndata buffer using ABI `A`. +pub fn decode_returndata_abi(_ ret: MemoryBytes) -> R + where R: Decode + AbiSize +{ + let mut d = SolDecoder::new(ret) + decode_single_root>(mut d) } /// Perform a raw `STATICCALL` and ABI-decode the returndata on success. @@ -622,6 +679,13 @@ pub fn decode_returndata(_ ret: MemoryBytes) -> R /// decoder, so short or non-canonical returndata also reverts. pub fn staticcall_decode(addr: Address, gas: u256, args_offset: u256, args_len: u256) -> R where R: Decode + AbiSize +{ + staticcall_decode_abi(addr: addr, gas: gas, args_offset: args_offset, args_len: args_len) +} + +/// Perform a raw `STATICCALL` and ABI-decode the returndata on success using ABI `A`. +pub fn staticcall_decode_abi(addr: Address, gas: u256, args_offset: u256, args_len: u256) -> R + where R: Decode + AbiSize { let ok = ops::staticcall( gas: gas, @@ -636,33 +700,36 @@ pub fn staticcall_decode(addr: Address, gas: u256, args_offset: u256, args_le bubble_last_revert() } - decode_returndata(last_returndata()) + decode_returndata_abi(last_returndata()) } impl Call for Evm { - fn call(mut self, addr: own Address, gas: u256, value: u256, message: own M) -> M::Return - where M: MsgVariant + Encode, M::Return: Decode + AbiSize + fn call(mut self, addr: own Address, gas: u256, value: u256, message: own M) -> M::Return + where M: MsgVariant + Encode, + M::Return: Decode + AbiSize { - let out: (u256, u256) = encode_calldata(>::SELECTOR, message) + let out: (u256, u256) = encode_calldata_abi(>::SELECTOR, message) if !self.raw_call(addr, gas, value, args_offset: out.0, args_len: out.1) { bubble_last_revert() } - decode_returndata(last_returndata()) + decode_returndata_abi(last_returndata()) } - fn static(mut self, addr: own Address, gas: u256, message: own M) -> M::Return - where M: MsgVariant + Encode, M::Return: Decode + AbiSize + fn static(mut self, addr: own Address, gas: u256, message: own M) -> M::Return + where M: MsgVariant + Encode, + M::Return: Decode + AbiSize { - let out: (u256, u256) = encode_calldata(>::SELECTOR, message) - staticcall_decode(addr: addr, gas: gas, args_offset: out.0, args_len: out.1) + let out: (u256, u256) = encode_calldata_abi(>::SELECTOR, message) + staticcall_decode_abi(addr: addr, gas: gas, args_offset: out.0, args_len: out.1) } - fn delegate(mut self, addr: own Address, gas: u256, message: own M) -> M::Return - where M: MsgVariant + Encode, M::Return: Decode + AbiSize + fn delegate(mut self, addr: own Address, gas: u256, message: own M) -> M::Return + where M: MsgVariant + Encode, + M::Return: Decode + AbiSize { - let out: (u256, u256) = encode_calldata(>::SELECTOR, message) + let out: (u256, u256) = encode_calldata_abi(>::SELECTOR, message) let ok = ops::delegatecall( gas: gas, addr: addr.inner, @@ -676,7 +743,7 @@ impl Call for Evm { bubble_last_revert() } - decode_returndata(last_returndata()) + decode_returndata_abi(last_returndata()) } }