From b8c59c56e0f0a259561650ce9f464b8979ec865a Mon Sep 17 00:00:00 2001 From: rodiazet Date: Wed, 8 Jan 2020 10:08:26 +0100 Subject: [PATCH] [WASM] Add keccak256, balance, extcodecopy, blockhash, coinbase, log's, call, callcode, delegatecall, staticcall --- libyul/backends/wasm/EVMToEwasmTranslator.cpp | 220 ++++++++++++------ .../standard_eWasm_requested/output.json | 49 ++-- test/libyul/ewasmTranslationTests/balance.yul | 6 +- .../ewasmTranslationTests/blockhash.yul | 5 +- .../libyul/ewasmTranslationTests/coinbase.yul | 3 +- .../ewasmTranslationTests/extcodecopy.yul | 5 +- .../ewasmTranslationTests/extcodesize.yul | 4 +- test/libyul/ewasmTranslationTests/log0.yul | 2 +- test/libyul/ewasmTranslationTests/log1.yul | 2 +- test/libyul/ewasmTranslationTests/log2.yul | 2 +- test/libyul/ewasmTranslationTests/log3.yul | 2 +- test/libyul/ewasmTranslationTests/log4.yul | 2 +- .../ewasmTranslationTests/selfdestruct.yul | 4 +- .../ewasmTranslationTests/smoke_call.yul | 5 +- .../ewasmTranslationTests/smoke_callcode.yul | 5 +- .../ewasmTranslationTests/smoke_create.yul | 2 +- .../smoke_delegatecall.yul | 5 +- .../smoke_staticcall.yul | 5 +- 18 files changed, 224 insertions(+), 104 deletions(-) diff --git a/libyul/backends/wasm/EVMToEwasmTranslator.cpp b/libyul/backends/wasm/EVMToEwasmTranslator.cpp index 7264515df..168f5fbf4 100644 --- a/libyul/backends/wasm/EVMToEwasmTranslator.cpp +++ b/libyul/backends/wasm/EVMToEwasmTranslator.cpp @@ -214,7 +214,10 @@ function cmp(a, b) -> r { r := i64.ne(a, b) } } - +)" +// Split long string to make it compilable on msvc +// https://docs.microsoft.com/en-us/cpp/error-messages/compiler-errors-1/compiler-error-c2026?view=vs-2019 +R"( function lt(x1, x2, x3, x4, y1, y2, y3, y4) -> z1, z2, z3, z4 { switch cmp(x1, y1) case 0 { @@ -335,6 +338,11 @@ function signextend(x1, x2, x3, x4, y1, y2, y3, y4) -> z1, z2, z3, z4 { // TODO implement unreachable() } +function u256_to_u128(x1, x2, x3, x4) -> v1, v2 { + if i64.ne(0, i64.or(x1, x2)) { invalid() } + v2 := x4 + v1 := x3 +} function u256_to_i64(x1, x2, x3, x4) -> v { if i64.ne(0, i64.or(i64.or(x1, x2), x3)) { invalid() } @@ -347,10 +355,30 @@ function u256_to_i32(x1, x2, x3, x4) -> v { v := x4 } +function u256_to_byte(x1, x2, x3, x4) -> v { + if i64.ne(0, i64.or(i64.or(x1, x2), x3)) { invalid() } + if i64.gt_u(x4, 255) { invalid() } + v := x4 +} + function u256_to_i32ptr(x1, x2, x3, x4) -> v { v := u256_to_i32(x1, x2, x3, x4) } +function to_internal_i32ptr(x1, x2, x3, x4) -> r { + let p := u256_to_i32ptr(x1, x2, x3, x4) + r := i64.add(p, 64) + if i64.lt_u(r, p) { invalid() } +} + +function u256_to_address(x1, x2, x3, x4) -> r1, r2, r3 { + if i64.ne(0, x1) { invalid() } + if i64.ne(0, i64.shr_u(x2, 32)) { invalid() } + r1 := x2 + r2 := x3 + r3 := x4 +} + function keccak256(x1, x2, x3, x4, y1, y2, y3, y4) -> z1, z2, z3, z4 { // TODO implement unreachable() @@ -361,8 +389,9 @@ function address() -> z1, z2, z3, z4 { z1, z2, z3, z4 := mload_internal(0) } function balance(x1, x2, x3, x4) -> z1, z2, z3, z4 { - // TODO implement - unreachable() + mstore_address(0, x1, x2, x3, x4) + eth.getExternalBalance(12, 48) + z1, z2, z3, z4 := mload_internal(32) } function selfbalance() -> z1, z2, z3, z4 { // TODO: not part of current Ewasm spec @@ -393,8 +422,7 @@ function calldatasize() -> z1, z2, z3, z4 { } function calldatacopy(x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4) { eth.callDataCopy( - // scratch - TODO: overflow check - i64.add(u256_to_i32ptr(x1, x2, x3, x4), 64), + to_internal_i32ptr(x1, x2, x3, x4), u256_to_i32(y1, y2, y3, y4), u256_to_i32(z1, z2, z3, z4) ) @@ -406,8 +434,7 @@ function codesize() -> z1, z2, z3, z4 { } function codecopy(x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4) { eth.codeCopy( - // scratch - TODO: overflow check - i64.add(u256_to_i32ptr(x1, x2, x3, x4), 64), + to_internal_i32ptr(x1, x2, x3, x4), u256_to_i32(y1, y2, y3, y4), u256_to_i32(z1, z2, z3, z4) ) @@ -421,17 +448,22 @@ function gasprice() -> z1, z2, z3, z4 { eth.getTxGasPrice(0) z1, z2, z3, z4 := mload_internal(0) } +function extcodesize_internal(x1, x2, x3, x4) -> r { + mstore_address(0, x1, x2, x3, x4) + r := eth.getExternalCodeSize(12) +} function extcodesize(x1, x2, x3, x4) -> z1, z2, z3, z4 { - // TODO implement - unreachable() + z4 := extcodesize_internal(x1, x2, x3, x4) } function extcodehash(x1, x2, x3, x4) -> z1, z2, z3, z4 { // TODO: not part of current Ewasm spec unreachable() } -function extcodecopy(v1, v2, v3, v4, x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4) { - // TODO implement - unreachable() +function extcodecopy(a1, a2, a3, a4, p1, p2, p3, p4, o1, o2, o3, o4, l1, l2, l3, l4) { + mstore_address(0, a1, a2, a3, a4) + let codeOffset := u256_to_i32(o1, o2, o3, o4) + let codeLength := u256_to_i32(l1, l2, l3, l4) + eth.externalCodeCopy(12, to_internal_i32ptr(p1, p2, p3, p4), codeOffset, codeLength) } function returndatasize() -> z1, z2, z3, z4 { @@ -439,20 +471,21 @@ function returndatasize() -> z1, z2, z3, z4 { } function returndatacopy(x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4) { eth.returnDataCopy( - // scratch - TODO: overflow check - i64.add(u256_to_i32ptr(x1, x2, x3, x4), 64), + to_internal_i32ptr(x1, x2, x3, x4), u256_to_i32(y1, y2, y3, y4), u256_to_i32(z1, z2, z3, z4) ) } function blockhash(x1, x2, x3, x4) -> z1, z2, z3, z4 { - // TODO implement - unreachable() + let r := eth.getBlockHash(u256_to_i64(x1, x2, x3, x4), 0) + if i64.eqz(r) { + z1, z2, z3, z4 := mload_internal(0) + } } function coinbase() -> z1, z2, z3, z4 { - // TODO implement - unreachable() + eth.getBlockCoinbase(0) + z1, z2, z3, z4 := mload_internal(0) } function timestamp() -> z1, z2, z3, z4 { z4 := eth.getBlockTimestamp() @@ -522,11 +555,7 @@ function restore_temp_mem_64(t1, t2, t3, t4, t5, t6, t7, t8) { i64.store(54, t8) } function mload(x1, x2, x3, x4) -> z1, z2, z3, z4 { - let pos := u256_to_i32ptr(x1, x2, x3, x4) - // Make room for the scratch space - // TODO do we need to check for overflow? - pos := i64.add(pos, 64) - z1, z2, z3, z4 := mload_internal(pos) + z1, z2, z3, z4 := mload_internal(to_internal_i32ptr(x1, x2, x3, x4)) } function mload_internal(pos) -> z1, z2, z3, z4 { z1 := endian_swap(i64.load(pos)) @@ -535,11 +564,7 @@ function mload_internal(pos) -> z1, z2, z3, z4 { z4 := endian_swap(i64.load(i64.add(pos, 24))) } function mstore(x1, x2, x3, x4, y1, y2, y3, y4) { - let pos := u256_to_i32ptr(x1, x2, x3, x4) - // Make room for the scratch space - // TODO do we need to check for overflow? - pos := i64.add(pos, 64) - mstore_internal(pos, y1, y2, y3, y4) + mstore_internal(to_internal_i32ptr(x1, x2, x3, x4), y1, y2, y3, y4) } function mstore_internal(pos, y1, y2, y3, y4) { i64.store(pos, endian_swap(y1)) @@ -547,6 +572,10 @@ function mstore_internal(pos, y1, y2, y3, y4) { i64.store(i64.add(pos, 16), endian_swap(y3)) i64.store(i64.add(pos, 24), endian_swap(y4)) } +function mstore_address(pos, a1, a2, a3, a4) { + a1, a2, a3 := u256_to_address(a1, a2, a3, a4) + mstore_internal(pos, 0, a1, a2, a3) +} function mstore8(x1, x2, x3, x4, y1, y2, y3, y4) { // TODO implement unreachable() @@ -578,47 +607,84 @@ function gas() -> z1, z2, z3, z4 { } function log0(p1, p2, p3, p4, s1, s2, s3, s4) { - // TODO implement - unreachable() + eth.log( + to_internal_i32ptr(p1, p2, p3, p4), + u256_to_i32(s1, s2, s3, s4), + 0, 0, 0, 0, 0 + ) } function log1( p1, p2, p3, p4, s1, s2, s3, s4, - t11, t12, t13, t14 + t1_1, t1_2, t1_3, t1_4 ) { - // TODO implement - unreachable() + eth.log( + to_internal_i32ptr(p1, p2, p3, p4), + u256_to_i32(s1, s2, s3, s4), + 1, + to_internal_i32ptr(t1_1, t1_2, t1_3, t1_4), + 0, 0, 0 + ) } function log2( p1, p2, p3, p4, s1, s2, s3, s4, - t11, t12, t13, t14, - t21, t22, t23, t24 + t1_1, t1_2, t1_3, t1_4, + t2_1, t2_2, t2_3, t2_4 ) { - // TODO implement - unreachable() + eth.log( + to_internal_i32ptr(p1, p2, p3, p4), + u256_to_i32(s1, s2, s3, s4), + 2, + to_internal_i32ptr(t1_1, t1_2, t1_3, t1_4), + to_internal_i32ptr(t2_1, t2_2, t2_3, t2_4), + 0, 0 + ) } function log3( p1, p2, p3, p4, s1, s2, s3, s4, - t11, t12, t13, t14, - t21, t22, t23, t24, - t31, t32, t33, t34 + t1_1, t1_2, t1_3, t1_4, + t2_1, t2_2, t2_3, t2_4, + t3_1, t3_2, t3_3, t3_4 ) { - // TODO implement - unreachable() + eth.log( + to_internal_i32ptr(p1, p2, p3, p4), + u256_to_i32(s1, s2, s3, s4), + 3, + to_internal_i32ptr(t1_1, t1_2, t1_3, t1_4), + to_internal_i32ptr(t2_1, t2_2, t2_3, t2_4), + to_internal_i32ptr(t3_1, t3_2, t3_3, t3_4), + 0 + ) } function log4( p1, p2, p3, p4, s1, s2, s3, s4, - t11, t12, t13, t14, - t21, t22, t23, t24, - t31, t32, t33, t34, - t41, t42, t43, t44, + t1_1, t1_2, t1_3, t1_4, + t2_1, t2_2, t2_3, t2_4, + t3_1, t3_2, t3_3, t3_4, + t4_1, t4_2, t4_3, t4_4, ) { - // TODO implement - unreachable() + eth.log( + to_internal_i32ptr(p1, p2, p3, p4), + u256_to_i32(s1, s2, s3, s4), + 4, + to_internal_i32ptr(t1_1, t1_2, t1_3, t1_4), + to_internal_i32ptr(t2_1, t2_2, t2_3, t2_4), + to_internal_i32ptr(t3_1, t3_2, t3_3, t3_4), + to_internal_i32ptr(t4_1, t4_2, t4_3, t4_4) + ) } -function create(x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4) -> a1, a2, a3, a4 { - // TODO implement - unreachable() +function create( + x1, x2, x3, x4, + y1, y2, y3, y4, + z1, z2, z3, z4 +) -> a1, a2, a3, a4 { + let v1, v2 := u256_to_u128(x1, x2, x3, x4) + mstore_internal(0, 0, 0, v1, v2) + + let r := eth.create(0, to_internal_i32ptr(y1, y2, y3, y4), u256_to_i32(z1, z2, z3, z4), 32) + if i64.eqz(r) { + a1, a2, a3, a4 := mload_internal(32) + } } function call( a1, a2, a3, a4, @@ -629,8 +695,13 @@ function call( f1, f2, f3, f4, g1, g2, g3, g4 ) -> x1, x2, x3, x4 { - // TODO implement - unreachable() + let g := u256_to_i64(a1, a2, a3, a4) + mstore_address(0, b1, b2, b3, b4) + + let v1, v2 := u256_to_u128(c1, c2, c3, c4) + mstore_internal(32, 0, 0, v1, v2) + + x4 := eth.call(g, 12, 32, to_internal_i32ptr(d1, d2, d3, d4), u256_to_i32(e1, e2, e3, e4)) } function callcode( a1, a2, a3, a4, @@ -641,8 +712,18 @@ function callcode( f1, f2, f3, f4, g1, g2, g3, g4 ) -> x1, x2, x3, x4 { - // TODO implement - unreachable() + mstore_address(0, b1, b2, b3, b4) + + let v1, v2 := u256_to_u128(c1, c2, c3, c4) + mstore_internal(32, 0, 0, v1, v2) + + x4 := eth.callCode( + u256_to_i64(a1, a2, a3, a4), + 12, + 32, + to_internal_i32ptr(d1, d2, d3, d4), + u256_to_i32(e1, e2, e3, e4) + ) } function delegatecall( a1, a2, a3, a4, @@ -652,8 +733,14 @@ function delegatecall( e1, e2, e3, e4, f1, f2, f3, f4 ) -> x1, x2, x3, x4 { - // TODO implement - unreachable() + mstore_address(0, b1, b2, b3, b4) + + x4 := eth.callDelegate( + u256_to_i64(a1, a2, a3, a4), + 12, + to_internal_i32ptr(c1, c2, c3, c4), + u256_to_i32(d1, d2, d3, d4) + ) } function staticcall( a1, a2, a3, a4, @@ -663,8 +750,14 @@ function staticcall( e1, e2, e3, e4, f1, f2, f3, f4 ) -> x1, x2, x3, x4 { - // TODO implement - unreachable() + mstore_address(0, b1, b2, b3, b4) + + x4 := eth.callStatic( + u256_to_i64(a1, a2, a3, a4), + 12, + to_internal_i32ptr(c1, c2, c3, c4), + u256_to_i32(d1, d2, d3, d4) + ) } function create2( a1, a2, a3, a4, @@ -676,22 +769,20 @@ function create2( unreachable() } function selfdestruct(a1, a2, a3, a4) { - mstore(0, 0, 0, 0, a1, a2, a3, a4) + mstore_address(0, a1, a2, a3, a4) // In EVM, addresses are padded to 32 bytes, so discard the first 12. eth.selfDestruct(12) } function return(x1, x2, x3, x4, y1, y2, y3, y4) { eth.finish( - // scratch - TODO: overflow check - i64.add(u256_to_i32ptr(x1, x2, x3, x4), 64), + to_internal_i32ptr(x1, x2, x3, x4), u256_to_i32(y1, y2, y3, y4) ) } function revert(x1, x2, x3, x4, y1, y2, y3, y4) { eth.revert( - // scratch - TODO: overflow check - i64.add(u256_to_i32ptr(x1, x2, x3, x4), 64), + to_internal_i32ptr(x1, x2, x3, x4), u256_to_i32(y1, y2, y3, y4) ) } @@ -768,4 +859,3 @@ void EVMToEwasmTranslator::parsePolyfill() for (auto const& statement: m_polyfill->statements) m_polyfillFunctions.insert(std::get(statement).name); } - diff --git a/test/cmdlineTests/standard_eWasm_requested/output.json b/test/cmdlineTests/standard_eWasm_requested/output.json index 9b7e42572..a0c6849f1 100644 --- a/test/cmdlineTests/standard_eWasm_requested/output.json +++ b/test/cmdlineTests/standard_eWasm_requested/output.json @@ -7,23 +7,29 @@ (func $main (local $_1 i64) - (local $_2 i64) + (local $p i64) + (local $r i64) (local $hi i64) - (local $y i64) (local $hi_1 i64) - (local $_3 i64) + (local $y i64) + (local $hi_2 i64) + (local $_2 i64) (local.set $_1 (i64.const 0)) - (local.set $_2 (i64.add (call $u256_to_i32 (local.get $_1) (local.get $_1) (local.get $_1) (i64.const 64)) (i64.const 64))) - (local.set $hi (i64.shl (i64.or (i64.shl (i64.or (i64.and (i64.shl (local.get $_1) (i64.const 8)) (i64.const 65280)) (i64.and (i64.shr_u (local.get $_1) (i64.const 8)) (i64.const 255))) (i64.const 16)) (call $endian_swap_16 (i64.shr_u (local.get $_1) (i64.const 16)))) (i64.const 32))) - (local.set $y (i64.or (local.get $hi) (call $endian_swap_32 (i64.shr_u (local.get $_1) (i64.const 32))))) - (i64.store (i32.wrap_i64 (local.get $_2)) (local.get $y)) - (i64.store (i32.wrap_i64 (i64.add (local.get $_2) (i64.const 8))) (local.get $y)) - (i64.store (i32.wrap_i64 (i64.add (local.get $_2) (i64.const 16))) (local.get $y)) - (local.set $hi_1 (i64.shl (call $endian_swap_32 (i64.const 128)) (i64.const 32))) - (i64.store (i32.wrap_i64 (i64.add (local.get $_2) (i64.const 24))) (i64.or (local.get $hi_1) (call $endian_swap_32 (i64.shr_u (i64.const 128) (i64.const 32))))) - (local.set $_3 (datasize \"C_2_deployed\")) - (call $eth.codeCopy (i32.wrap_i64 (i64.add (call $u256_to_i32 (local.get $_1) (local.get $_1) (local.get $_1) (local.get $_1)) (i64.const 64))) (i32.wrap_i64 (call $u256_to_i32 (local.get $_1) (local.get $_1) (local.get $_1) (dataoffset \"C_2_deployed\"))) (i32.wrap_i64 (call $u256_to_i32 (local.get $_1) (local.get $_1) (local.get $_1) (local.get $_3)))) - (call $eth.finish (i32.wrap_i64 (i64.add (call $u256_to_i32 (local.get $_1) (local.get $_1) (local.get $_1) (local.get $_1)) (i64.const 64))) (i32.wrap_i64 (call $u256_to_i32 (local.get $_1) (local.get $_1) (local.get $_1) (local.get $_3)))) + (local.set $p (call $u256_to_i32 (local.get $_1) (local.get $_1) (local.get $_1) (i64.const 64))) + (local.set $r (i64.add (local.get $p) (i64.const 64))) + (if (i64.ne (i64.extend_i32_u (i64.lt_u (local.get $r) (local.get $p))) (i64.const 0)) (then + (unreachable))) + (local.set $hi (i64.shl (call $endian_swap_16 (local.get $_1)) (i64.const 16))) + (local.set $hi_1 (i64.shl (i64.or (local.get $hi) (call $endian_swap_16 (i64.shr_u (local.get $_1) (i64.const 16)))) (i64.const 32))) + (local.set $y (i64.or (local.get $hi_1) (call $endian_swap_32 (i64.shr_u (local.get $_1) (i64.const 32))))) + (i64.store (i32.wrap_i64 (local.get $r)) (local.get $y)) + (i64.store (i32.wrap_i64 (i64.add (local.get $r) (i64.const 8))) (local.get $y)) + (i64.store (i32.wrap_i64 (i64.add (local.get $r) (i64.const 16))) (local.get $y)) + (local.set $hi_2 (i64.shl (call $endian_swap_32 (i64.const 128)) (i64.const 32))) + (i64.store (i32.wrap_i64 (i64.add (local.get $r) (i64.const 24))) (i64.or (local.get $hi_2) (call $endian_swap_32 (i64.shr_u (i64.const 128) (i64.const 32))))) + (local.set $_2 (datasize \"C_2_deployed\")) + (call $eth.codeCopy (i32.wrap_i64 (call $to_internal_i32ptr (local.get $_1) (local.get $_1) (local.get $_1) (local.get $_1))) (i32.wrap_i64 (call $u256_to_i32 (local.get $_1) (local.get $_1) (local.get $_1) (dataoffset \"C_2_deployed\"))) (i32.wrap_i64 (call $u256_to_i32 (local.get $_1) (local.get $_1) (local.get $_1) (local.get $_2)))) + (call $eth.finish (i32.wrap_i64 (call $to_internal_i32ptr (local.get $_1) (local.get $_1) (local.get $_1) (local.get $_1))) (i32.wrap_i64 (call $u256_to_i32 (local.get $_1) (local.get $_1) (local.get $_1) (local.get $_2)))) ) (func $u256_to_i32 @@ -41,6 +47,21 @@ (local.get $v) ) +(func $to_internal_i32ptr + (param $x1 i64) + (param $x2 i64) + (param $x3 i64) + (param $x4 i64) + (result i64) + (local $r i64) + (local $p i64) + (local.set $p (call $u256_to_i32 (local.get $x1) (local.get $x2) (local.get $x3) (local.get $x4))) + (local.set $r (i64.add (local.get $p) (i64.const 64))) + (if (i64.ne (i64.extend_i32_u (i64.lt_u (local.get $r) (local.get $p))) (i64.const 0)) (then + (unreachable))) + (local.get $r) +) + (func $endian_swap_16 (param $x i64) (result i64) diff --git a/test/libyul/ewasmTranslationTests/balance.yul b/test/libyul/ewasmTranslationTests/balance.yul index ed4aad891..f8bb5017a 100644 --- a/test/libyul/ewasmTranslationTests/balance.yul +++ b/test/libyul/ewasmTranslationTests/balance.yul @@ -4,7 +4,9 @@ } // ---- // Trace: -// INVALID() // Memory dump: -// 0: 0000000000000000000000000000000011111111000000000000000000000000 +// 0: 0000000000000000000000000000000000000000000000000000000000000001 +// 20: 0000000000000000000000000000000000000000000000000000000022222222 // Storage dump: +// 0000000000000000000000000000000000000000000000000000000000000000: 0000000000000000000000000000000000000000000000000000000022222222 +// 0000000000000000000000000000000000000000000000000000000000000001: 0000000000000000000000000000000000000000000000000000000022222222 diff --git a/test/libyul/ewasmTranslationTests/blockhash.yul b/test/libyul/ewasmTranslationTests/blockhash.yul index 35d431c60..8b906232f 100644 --- a/test/libyul/ewasmTranslationTests/blockhash.yul +++ b/test/libyul/ewasmTranslationTests/blockhash.yul @@ -1,8 +1,9 @@ { - sstore(0, blockhash(1)) + sstore(0, blockhash(1023)) } // ---- // Trace: -// INVALID() // Memory dump: +// 20: 00000000000000000000000000000000000000000000000000000000aaaaa9a9 // Storage dump: +// 0000000000000000000000000000000000000000000000000000000000000000: 00000000000000000000000000000000000000000000000000000000aaaaa9a9 diff --git a/test/libyul/ewasmTranslationTests/coinbase.yul b/test/libyul/ewasmTranslationTests/coinbase.yul index 023ee3140..ad9eac9cc 100644 --- a/test/libyul/ewasmTranslationTests/coinbase.yul +++ b/test/libyul/ewasmTranslationTests/coinbase.yul @@ -3,6 +3,7 @@ } // ---- // Trace: -// INVALID() // Memory dump: +// 20: 0000000000000000000000000000000077777777000000000000000000000000 // Storage dump: +// 0000000000000000000000000000000000000000000000000000000000000000: 0000000000000000000000000000000077777777000000000000000000000000 diff --git a/test/libyul/ewasmTranslationTests/extcodecopy.yul b/test/libyul/ewasmTranslationTests/extcodecopy.yul index 1c78b5e55..4fd049281 100644 --- a/test/libyul/ewasmTranslationTests/extcodecopy.yul +++ b/test/libyul/ewasmTranslationTests/extcodecopy.yul @@ -4,7 +4,8 @@ } // ---- // Trace: -// INVALID() // Memory dump: -// 0: 0000000000000000000000000000000011111111000000000000000000000000 +// 20: 636f6465636f6465636f6465636f6465636f6465000000000000000000000000 +// 140: 636f6465636f6465636f6465636f6465636f6465000000000000000000000000 // Storage dump: +// 0000000000000000000000000000000000000000000000000000000000000000: 636f6465636f6465636f6465636f6465636f6465000000000000000000000000 diff --git a/test/libyul/ewasmTranslationTests/extcodesize.yul b/test/libyul/ewasmTranslationTests/extcodesize.yul index 7fa810d06..fb12db5ea 100644 --- a/test/libyul/ewasmTranslationTests/extcodesize.yul +++ b/test/libyul/ewasmTranslationTests/extcodesize.yul @@ -3,7 +3,7 @@ } // ---- // Trace: -// INVALID() // Memory dump: -// 0: 0000000000000000000000000000000011111111000000000000000000000000 +// 20: 000000000000000000000000000000000000000000000000000000000000077b // Storage dump: +// 0000000000000000000000000000000000000000000000000000000000000000: 000000000000000000000000000000000000000000000000000000000000077b diff --git a/test/libyul/ewasmTranslationTests/log0.yul b/test/libyul/ewasmTranslationTests/log0.yul index cd10eb28b..6b02e598b 100644 --- a/test/libyul/ewasmTranslationTests/log0.yul +++ b/test/libyul/ewasmTranslationTests/log0.yul @@ -3,6 +3,6 @@ } // ---- // Trace: -// INVALID() +// LOG0() // Memory dump: // Storage dump: diff --git a/test/libyul/ewasmTranslationTests/log1.yul b/test/libyul/ewasmTranslationTests/log1.yul index a985a3f05..296484bd7 100644 --- a/test/libyul/ewasmTranslationTests/log1.yul +++ b/test/libyul/ewasmTranslationTests/log1.yul @@ -3,6 +3,6 @@ } // ---- // Trace: -// INVALID() +// LOG1() // Memory dump: // Storage dump: diff --git a/test/libyul/ewasmTranslationTests/log2.yul b/test/libyul/ewasmTranslationTests/log2.yul index 90c645542..887fef66f 100644 --- a/test/libyul/ewasmTranslationTests/log2.yul +++ b/test/libyul/ewasmTranslationTests/log2.yul @@ -3,6 +3,6 @@ } // ---- // Trace: -// INVALID() +// LOG2() // Memory dump: // Storage dump: diff --git a/test/libyul/ewasmTranslationTests/log3.yul b/test/libyul/ewasmTranslationTests/log3.yul index efff47f08..8ff23e2bd 100644 --- a/test/libyul/ewasmTranslationTests/log3.yul +++ b/test/libyul/ewasmTranslationTests/log3.yul @@ -3,6 +3,6 @@ } // ---- // Trace: -// INVALID() +// LOG3() // Memory dump: // Storage dump: diff --git a/test/libyul/ewasmTranslationTests/log4.yul b/test/libyul/ewasmTranslationTests/log4.yul index 81069baa2..152595e28 100644 --- a/test/libyul/ewasmTranslationTests/log4.yul +++ b/test/libyul/ewasmTranslationTests/log4.yul @@ -3,6 +3,6 @@ } // ---- // Trace: -// INVALID() +// LOG4() // Memory dump: // Storage dump: diff --git a/test/libyul/ewasmTranslationTests/selfdestruct.yul b/test/libyul/ewasmTranslationTests/selfdestruct.yul index 07cf6170e..c000393fb 100644 --- a/test/libyul/ewasmTranslationTests/selfdestruct.yul +++ b/test/libyul/ewasmTranslationTests/selfdestruct.yul @@ -1,10 +1,10 @@ { - selfdestruct(not(0)) + selfdestruct(0xffffffffffffffffffffffffffffffffffffffff) invalid() } // ---- // Trace: // SELFDESTRUCT() // Memory dump: -// 40: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +// 0: 000000000000000000000000ffffffffffffffffffffffffffffffffffffffff // Storage dump: diff --git a/test/libyul/ewasmTranslationTests/smoke_call.yul b/test/libyul/ewasmTranslationTests/smoke_call.yul index 0efe7b38a..6d9377016 100644 --- a/test/libyul/ewasmTranslationTests/smoke_call.yul +++ b/test/libyul/ewasmTranslationTests/smoke_call.yul @@ -3,7 +3,8 @@ } // ---- // Trace: -// INVALID() +// CALL() // Memory dump: -// 0: 0000000000000000000000000000000011111111000000000000000000000000 +// 20: 0000000000000000000000000000000000000000000000000000000000000001 // Storage dump: +// 0000000000000000000000000000000000000000000000000000000000000000: 0000000000000000000000000000000000000000000000000000000000000001 diff --git a/test/libyul/ewasmTranslationTests/smoke_callcode.yul b/test/libyul/ewasmTranslationTests/smoke_callcode.yul index c82f1d376..dd22ef261 100644 --- a/test/libyul/ewasmTranslationTests/smoke_callcode.yul +++ b/test/libyul/ewasmTranslationTests/smoke_callcode.yul @@ -3,7 +3,8 @@ } // ---- // Trace: -// INVALID() +// CALLCODE() // Memory dump: -// 0: 0000000000000000000000000000000011111111000000000000000000000000 +// 20: 0000000000000000000000000000000000000000000000000000000000000001 // Storage dump: +// 0000000000000000000000000000000000000000000000000000000000000000: 0000000000000000000000000000000000000000000000000000000000000001 diff --git a/test/libyul/ewasmTranslationTests/smoke_create.yul b/test/libyul/ewasmTranslationTests/smoke_create.yul index ae6d457c4..7650e9e6c 100644 --- a/test/libyul/ewasmTranslationTests/smoke_create.yul +++ b/test/libyul/ewasmTranslationTests/smoke_create.yul @@ -5,7 +5,7 @@ } // ---- // Trace: -// INVALID() +// CREATE() // Memory dump: // 40: 636f6465636f6465636f6465636f6465636f6465000000000000000000000000 // Storage dump: diff --git a/test/libyul/ewasmTranslationTests/smoke_delegatecall.yul b/test/libyul/ewasmTranslationTests/smoke_delegatecall.yul index c8e5ccb4d..30ad4b96d 100644 --- a/test/libyul/ewasmTranslationTests/smoke_delegatecall.yul +++ b/test/libyul/ewasmTranslationTests/smoke_delegatecall.yul @@ -3,7 +3,8 @@ } // ---- // Trace: -// INVALID() +// DELEGATECALL() // Memory dump: -// 0: 0000000000000000000000000000000011111111000000000000000000000000 +// 20: 0000000000000000000000000000000000000000000000000000000000000001 // Storage dump: +// 0000000000000000000000000000000000000000000000000000000000000000: 0000000000000000000000000000000000000000000000000000000000000001 diff --git a/test/libyul/ewasmTranslationTests/smoke_staticcall.yul b/test/libyul/ewasmTranslationTests/smoke_staticcall.yul index 50669b9fc..25faaa9ee 100644 --- a/test/libyul/ewasmTranslationTests/smoke_staticcall.yul +++ b/test/libyul/ewasmTranslationTests/smoke_staticcall.yul @@ -5,7 +5,8 @@ // EVMVersion: >=byzantium // ---- // Trace: -// INVALID() +// STATICCALL() // Memory dump: -// 0: 0000000000000000000000000000000011111111000000000000000000000000 +// 20: 0000000000000000000000000000000000000000000000000000000000000001 // Storage dump: +// 0000000000000000000000000000000000000000000000000000000000000000: 0000000000000000000000000000000000000000000000000000000000000001