Skip to content

Commit de17b0d

Browse files
cburgdorfsbillig
authored andcommitted
Make assert() emit Panic(0x01) instead of empty revert
`assert(false)` now calls `revert_error(Panic { code: 0x01 })` producing a Solidity-compatible Panic(uint256) revert payload, making assertion failures identifiable by off-chain tooling.
1 parent 880abfe commit de17b0d

9 files changed

Lines changed: 544 additions & 9 deletions

File tree

crates/codegen/tests/fixtures/erc20.snap

Lines changed: 178 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ object "CoolCoin" {
104104
function $assert($b) {
105105
let v0 := iszero($b)
106106
if v0 {
107-
revert(0, 0)
107+
$revert_error__Panic_ha52de99593162ef0__5b08f6f9d7badccd(1)
108108
}
109109
leave
110110
}
@@ -171,6 +171,73 @@ object "CoolCoin" {
171171
$transferevent_h1c9ba82714a4a1f0_event_hd33e4481d4a34b05_emit_arg1_root_stor__Evm_hef0af3106e109414__3af54274b2985741($event)
172172
leave
173173
}
174+
function $encode_calldata__Panic_ha52de99593162ef0__5b08f6f9d7badccd($selector, $message) -> ret {
175+
let v0 := 4
176+
let v1 := shl(224, $selector)
177+
let v2 := iszero(0)
178+
if v2 {
179+
let v3 := $checked_add_u256(v0, 32)
180+
let v4 := v3
181+
let v5 := mload(64)
182+
if iszero(v5) {
183+
v5 := 0x80
184+
}
185+
mstore(64, add(v5, v4))
186+
mstore(v5, v1)
187+
let v6 := $checked_add_u256(v5, v0)
188+
$panic_ha52de99593162ef0_encode_hf98aaef2e32b4927_encode_to_ptr($message, v6)
189+
let v7 := mload(0x40)
190+
if iszero(v7) {
191+
v7 := 0x80
192+
}
193+
mstore(0x40, add(v7, 64))
194+
mstore(v7, v5)
195+
mstore(add(v7, 32), v4)
196+
ret := v7
197+
leave
198+
}
199+
if iszero(v2) {
200+
let v8 := $checked_add_u256(v0, 32)
201+
let v9 := v8
202+
let v10 := $solencoder_h1b9228b90dad6928_new()
203+
let v11 := $solencoder_h1b9228b90dad6928_abiencoder_hffd58d20d4321024_reserve_head(v10, v9)
204+
mstore(v11, v1)
205+
let v12 := $checked_add_u256(v11, v0)
206+
mstore(add(v10, 32), v12)
207+
let v13 := $checked_add_u256(v11, v0)
208+
$solencoder_h1b9228b90dad6928_abiencoder_hffd58d20d4321024_set_pos(v10, v13)
209+
$panic_ha52de99593162ef0_encode_hf98aaef2e32b4927_encode__SolEncoder_h1b9228b90dad6928__d11112905deefcdd($message, v10)
210+
let v14 := $solencoder_h1b9228b90dad6928_abiencoder_hffd58d20d4321024_finish(v10)
211+
ret := v14
212+
leave
213+
}
214+
}
215+
function $encode_field__Sol_hfd482bb803ad8c5f_u256_SolEncoder_h1b9228b90dad6928__636972f1f7e9ec11($value, $e) {
216+
let v0 := mload(0x40)
217+
if iszero(v0) {
218+
v0 := 0x80
219+
}
220+
mstore(0x40, add(v0, 32))
221+
mstore(v0, $e)
222+
let v1 := 0
223+
if v1 {
224+
let v2 := $solencoder_h1b9228b90dad6928_abiencoder_hffd58d20d4321024_base($e)
225+
let v3 := $solencoder_h1b9228b90dad6928_abiencoder_hffd58d20d4321024_append_tail($e, 32)
226+
let v4 := $checked_sub_u256(v3, v2)
227+
$solencoder_h1b9228b90dad6928_abiencoder_hffd58d20d4321024_write_word($e, v4)
228+
let v5 := $solencoder_h1b9228b90dad6928_abiencoder_hffd58d20d4321024_pos($e)
229+
$solencoder_h1b9228b90dad6928_abiencoder_hffd58d20d4321024_set_base($e, v3)
230+
$solencoder_h1b9228b90dad6928_abiencoder_hffd58d20d4321024_set_pos($e, v3)
231+
$u256_h3271ca15373d4483_encode_hab7243eccf2714fb_encode__Sol_hfd482bb803ad8c5f_SolEncoder_h1b9228b90dad6928__1a070c3866d16383($value, mload(v0))
232+
$solencoder_h1b9228b90dad6928_abiencoder_hffd58d20d4321024_set_base($e, v2)
233+
$solencoder_h1b9228b90dad6928_abiencoder_hffd58d20d4321024_set_pos($e, v5)
234+
leave
235+
}
236+
if iszero(v1) {
237+
$u256_h3271ca15373d4483_encode_hab7243eccf2714fb_encode__Sol_hfd482bb803ad8c5f_SolEncoder_h1b9228b90dad6928__1a070c3866d16383($value, mload(v0))
238+
leave
239+
}
240+
}
174241
function $evm_hef0af3106e109414_contracthost_h57111e7eb283a125_abort() {
175242
revert(0, 0)
176243
}
@@ -237,11 +304,31 @@ object "CoolCoin" {
237304
ret := iszero(v0)
238305
leave
239306
}
307+
function $panic_ha52de99593162ef0_encode_hf98aaef2e32b4927_encode__SolEncoder_h1b9228b90dad6928__d11112905deefcdd($self, $e) {
308+
$encode_field__Sol_hfd482bb803ad8c5f_u256_SolEncoder_h1b9228b90dad6928__636972f1f7e9ec11($self, $e)
309+
leave
310+
}
311+
function $panic_ha52de99593162ef0_encode_hf98aaef2e32b4927_encode_to_ptr($self, $ptr) {
312+
$u256_h3271ca15373d4483_encode_hab7243eccf2714fb_encode_to_ptr__Sol_hfd482bb803ad8c5f__5bf6337811c3ce95($self, $ptr)
313+
leave
314+
}
315+
function $revert_error__Panic_ha52de99593162ef0__5b08f6f9d7badccd($error) {
316+
let v0 := $encode_calldata__Panic_ha52de99593162ef0__5b08f6f9d7badccd(1313373041, $error)
317+
let v1 := mload(v0)
318+
let v2 := v1
319+
let v3 := mload(add(v0, 32))
320+
let v4 := v3
321+
revert(v2, v4)
322+
}
240323
function $sol_hfd482bb803ad8c5f_abi_h2da9a2d0b1ddaeb7_decoder_new__MemoryBytes_h1e381015a9b0111b__59e0d528d54cca1b($input) -> ret {
241324
let v0 := $soldecoder_i__ha12a03fcb5ba844b_new__MemoryBytes_h1e381015a9b0111b__59e0d528d54cca1b($input)
242325
ret := v0
243326
leave
244327
}
328+
function $sol_hfd482bb803ad8c5f_abi_h2da9a2d0b1ddaeb7_store_word($ptr, $value) {
329+
mstore($ptr, $value)
330+
leave
331+
}
245332
function $soldecoder_i__ha12a03fcb5ba844b_abidecoder_h638151350e80a086_read_word__MemoryBytes_h1e381015a9b0111b__59e0d528d54cca1b($self) -> ret {
246333
let v0 := $self
247334
let v1 := $memorybytes_h1e381015a9b0111b_byteinput_hc4c2cb44299530ae_len(v0)
@@ -281,6 +368,21 @@ object "CoolCoin" {
281368
ret := v1
282369
leave
283370
}
371+
function $solencoder_h1b9228b90dad6928_abiencoder_hffd58d20d4321024_append_tail($self, $bytes) -> ret {
372+
let v0 := mload(64)
373+
if iszero(v0) {
374+
v0 := 0x80
375+
}
376+
mstore(64, add(v0, $bytes))
377+
mstore(add($self, 96), add(v0, $bytes))
378+
ret := v0
379+
leave
380+
}
381+
function $solencoder_h1b9228b90dad6928_abiencoder_hffd58d20d4321024_base($self) -> ret {
382+
let v0 := mload(add($self, 32))
383+
ret := v0
384+
leave
385+
}
284386
function $solencoder_h1b9228b90dad6928_abiencoder_hffd58d20d4321024_finish($self) -> ret {
285387
let v0 := mload($self)
286388
let v1 := v0
@@ -296,6 +398,11 @@ object "CoolCoin" {
296398
ret := v4
297399
leave
298400
}
401+
function $solencoder_h1b9228b90dad6928_abiencoder_hffd58d20d4321024_pos($self) -> ret {
402+
let v0 := mload(add($self, 64))
403+
ret := v0
404+
leave
405+
}
299406
function $solencoder_h1b9228b90dad6928_abiencoder_hffd58d20d4321024_reserve_head($self, $bytes) -> ret {
300407
let v0 := mload($self)
301408
let v1 := $u256_h3271ca15373d4483_eq_he50383edd273619f_eq(v0, 0)
@@ -315,6 +422,14 @@ object "CoolCoin" {
315422
ret := v4
316423
leave
317424
}
425+
function $solencoder_h1b9228b90dad6928_abiencoder_hffd58d20d4321024_set_base($self, $new_base) {
426+
mstore(add($self, 32), $new_base)
427+
leave
428+
}
429+
function $solencoder_h1b9228b90dad6928_abiencoder_hffd58d20d4321024_set_pos($self, $new_pos) {
430+
mstore(add($self, 64), $new_pos)
431+
leave
432+
}
318433
function $solencoder_h1b9228b90dad6928_abiencoder_hffd58d20d4321024_write_word($self, $v) {
319434
let v0 := mload(add($self, 64))
320435
let v1 := v0
@@ -440,6 +555,10 @@ object "CoolCoin" {
440555
$solencoder_h1b9228b90dad6928_abiencoder_hffd58d20d4321024_write_word($e, $self)
441556
leave
442557
}
558+
function $u256_h3271ca15373d4483_encode_hab7243eccf2714fb_encode_to_ptr__Sol_hfd482bb803ad8c5f__5bf6337811c3ce95($self, $ptr) {
559+
$sol_hfd482bb803ad8c5f_abi_h2da9a2d0b1ddaeb7_store_word($ptr, $self)
560+
leave
561+
}
443562
function $u256_h3271ca15373d4483_eq_he50383edd273619f_eq($self, $other) -> ret {
444563
let v0 := eq($self, $other)
445564
ret := v0
@@ -1012,7 +1131,7 @@ object "CoolCoin" {
10121131
function $assert($b) {
10131132
let v0 := iszero($b)
10141133
if v0 {
1015-
revert(0, 0)
1134+
$revert_error__Panic_ha52de99593162ef0__5b08f6f9d7badccd(1)
10161135
}
10171136
leave
10181137
}
@@ -1285,6 +1404,47 @@ object "CoolCoin" {
12851404
$transferevent_h1c9ba82714a4a1f0_event_hd33e4481d4a34b05_emit_arg1_root_stor__Evm_hef0af3106e109414__3af54274b2985741($event)
12861405
leave
12871406
}
1407+
function $encode_calldata__Panic_ha52de99593162ef0__5b08f6f9d7badccd($selector, $message) -> ret {
1408+
let v0 := 4
1409+
let v1 := shl(224, $selector)
1410+
let v2 := iszero(0)
1411+
if v2 {
1412+
let v3 := $checked_add_u256(v0, 32)
1413+
let v4 := v3
1414+
let v5 := mload(64)
1415+
if iszero(v5) {
1416+
v5 := 0x80
1417+
}
1418+
mstore(64, add(v5, v4))
1419+
mstore(v5, v1)
1420+
let v6 := $checked_add_u256(v5, v0)
1421+
$panic_ha52de99593162ef0_encode_hf98aaef2e32b4927_encode_to_ptr($message, v6)
1422+
let v7 := mload(0x40)
1423+
if iszero(v7) {
1424+
v7 := 0x80
1425+
}
1426+
mstore(0x40, add(v7, 64))
1427+
mstore(v7, v5)
1428+
mstore(add(v7, 32), v4)
1429+
ret := v7
1430+
leave
1431+
}
1432+
if iszero(v2) {
1433+
let v8 := $checked_add_u256(v0, 32)
1434+
let v9 := v8
1435+
let v10 := $solencoder_h1b9228b90dad6928_new()
1436+
let v11 := $solencoder_h1b9228b90dad6928_abiencoder_hffd58d20d4321024_reserve_head(v10, v9)
1437+
mstore(v11, v1)
1438+
let v12 := $checked_add_u256(v11, v0)
1439+
mstore(add(v10, 32), v12)
1440+
let v13 := $checked_add_u256(v11, v0)
1441+
$solencoder_h1b9228b90dad6928_abiencoder_hffd58d20d4321024_set_pos(v10, v13)
1442+
$panic_ha52de99593162ef0_encode_hf98aaef2e32b4927_encode__SolEncoder_h1b9228b90dad6928__d11112905deefcdd($message, v10)
1443+
let v14 := $solencoder_h1b9228b90dad6928_abiencoder_hffd58d20d4321024_finish(v10)
1444+
ret := v14
1445+
leave
1446+
}
1447+
}
12881448
function $encode_field__Sol_hfd482bb803ad8c5f_String_32__SolEncoder_h1b9228b90dad6928__68b3570335d45d1c($value, $e) {
12891449
let v0 := mload(0x40)
12901450
if iszero(v0) {
@@ -1742,6 +1902,22 @@ object "CoolCoin" {
17421902
ret := v0
17431903
leave
17441904
}
1905+
function $panic_ha52de99593162ef0_encode_hf98aaef2e32b4927_encode__SolEncoder_h1b9228b90dad6928__d11112905deefcdd($self, $e) {
1906+
$encode_field__Sol_hfd482bb803ad8c5f_u256_SolEncoder_h1b9228b90dad6928__636972f1f7e9ec11($self, $e)
1907+
leave
1908+
}
1909+
function $panic_ha52de99593162ef0_encode_hf98aaef2e32b4927_encode_to_ptr($self, $ptr) {
1910+
$u256_h3271ca15373d4483_encode_hab7243eccf2714fb_encode_to_ptr__Sol_hfd482bb803ad8c5f__5bf6337811c3ce95($self, $ptr)
1911+
leave
1912+
}
1913+
function $revert_error__Panic_ha52de99593162ef0__5b08f6f9d7badccd($error) {
1914+
let v0 := $encode_calldata__Panic_ha52de99593162ef0__5b08f6f9d7badccd(1313373041, $error)
1915+
let v1 := mload(v0)
1916+
let v2 := v1
1917+
let v3 := mload(add(v0, 32))
1918+
let v4 := v3
1919+
revert(v2, v4)
1920+
}
17451921
function $round_up_words($len) -> ret {
17461922
let v0 := $u256_h3271ca15373d4483_eq_he50383edd273619f_eq($len, 0)
17471923
let v1 := v0

0 commit comments

Comments
 (0)