[libevmasm] Add support to import evm assembly json.

This commit is contained in:
Alexander Arlt
2023-09-20 12:54:17 +02:00
committed by r0qs
parent cc7a14a61d
commit fbec7c5a31
89 changed files with 4181 additions and 136 deletions
+2 -1
View File
@@ -1567,7 +1567,8 @@ EVM assembly:
"name": "JUMP",
"source": 1
}
]
],
"index": 0
}
},
"sourceList":
@@ -0,0 +1 @@
--strict-assembly - --asm-json --pretty-json
@@ -0,0 +1,388 @@
======= <stdin> (EVM) =======
{
".code":
[
{
"begin": 37,
"end": 51,
"name": "PUSHSIZE",
"source": 0
},
{
"begin": 34,
"end": 35,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 27,
"end": 52,
"name": "SSTORE",
"source": 0
},
{
"begin": 67,
"end": 81,
"name": "PUSH #[$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 64,
"end": 65,
"name": "PUSH",
"source": 0,
"value": "1"
},
{
"begin": 57,
"end": 82,
"name": "SSTORE",
"source": 0
},
{
"begin": 97,
"end": 114,
"name": "PUSH #[$]",
"source": 0,
"value": "000000000000000000000000000000000000000000000000ffffffffffffffff"
},
{
"begin": 94,
"end": 95,
"name": "PUSH",
"source": 0,
"value": "2"
},
{
"begin": 87,
"end": 115,
"name": "SSTORE",
"source": 0
},
{
"begin": 130,
"end": 152,
"name": "PUSH #[$]",
"source": 0,
"value": "000000000000000000000000000000000000000000000000fffffffffffffffe"
},
{
"begin": 127,
"end": 128,
"name": "PUSH",
"source": 0,
"value": "3"
},
{
"begin": 120,
"end": 153,
"name": "SSTORE",
"source": 0
},
{
"begin": 168,
"end": 190,
"name": "PUSH #[$]",
"source": 0,
"value": "000000000000000000000000000000000000000000000000fffffffffffffffd"
},
{
"begin": 165,
"end": 166,
"name": "PUSH",
"source": 0,
"value": "4"
},
{
"begin": 158,
"end": 191,
"name": "SSTORE",
"source": 0
},
{
"begin": 206,
"end": 228,
"name": "PUSH #[$]",
"source": 0,
"value": "000000000000000000000000000000000000000000000000fffffffffffffffc"
},
{
"begin": 203,
"end": 204,
"name": "PUSH",
"source": 0,
"value": "5"
},
{
"begin": 196,
"end": 229,
"name": "SSTORE",
"source": 0
},
{
"begin": 21,
"end": 233,
"name": "STOP",
"source": 0
}
],
".data":
{
"0":
{
".code":
[
{
"begin": 278,
"end": 292,
"name": "PUSHSIZE",
"source": 0
},
{
"begin": 275,
"end": 276,
"name": "PUSH",
"source": 0,
"value": "6"
},
{
"begin": 268,
"end": 293,
"name": "SSTORE",
"source": 0
},
{
"begin": 310,
"end": 324,
"name": "PUSH #[$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 307,
"end": 308,
"name": "PUSH",
"source": 0,
"value": "7"
},
{
"begin": 300,
"end": 325,
"name": "SSTORE",
"source": 0
},
{
"begin": 342,
"end": 361,
"name": "PUSH #[$]",
"source": 0,
"value": "000000000000000000000000000000000000000000000000ffffffffffffffff"
},
{
"begin": 339,
"end": 340,
"name": "PUSH",
"source": 0,
"value": "8"
},
{
"begin": 332,
"end": 362,
"name": "SSTORE",
"source": 0
},
{
"begin": 379,
"end": 398,
"name": "PUSH #[$]",
"source": 0,
"value": "000000000000000000000000000000000000000000000000fffffffffffffffe"
},
{
"begin": 376,
"end": 377,
"name": "PUSH",
"source": 0,
"value": "9"
},
{
"begin": 369,
"end": 399,
"name": "SSTORE",
"source": 0
},
{
"begin": 417,
"end": 436,
"name": "PUSH #[$]",
"source": 0,
"value": "000000000000000000000000000000000000000000000000fffffffffffffffd"
},
{
"begin": 413,
"end": 415,
"name": "PUSH",
"source": 0,
"value": "A"
},
{
"begin": 406,
"end": 437,
"name": "SSTORE",
"source": 0
},
{
"begin": 260,
"end": 443,
"name": "STOP",
"source": 0
}
],
".data":
{
"0":
{
".code":
[
{
"begin": 494,
"end": 508,
"name": "PUSHSIZE",
"source": 0
},
{
"begin": 490,
"end": 492,
"name": "PUSH",
"source": 0,
"value": "B"
},
{
"begin": 483,
"end": 509,
"name": "SSTORE",
"source": 0
},
{
"begin": 529,
"end": 545,
"name": "PUSH #[$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 525,
"end": 527,
"name": "PUSH",
"source": 0,
"value": "C"
},
{
"begin": 518,
"end": 546,
"name": "SSTORE",
"source": 0
},
{
"begin": 566,
"end": 582,
"name": "PUSH #[$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
"begin": 562,
"end": 564,
"name": "PUSH",
"source": 0,
"value": "D"
},
{
"begin": 555,
"end": 583,
"name": "SSTORE",
"source": 0
},
{
"begin": 603,
"end": 619,
"name": "PUSH #[$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000002"
},
{
"begin": 599,
"end": 601,
"name": "PUSH",
"source": 0,
"value": "E"
},
{
"begin": 592,
"end": 620,
"name": "SSTORE",
"source": 0
},
{
"begin": 473,
"end": 628,
"name": "STOP",
"source": 0
}
],
".data":
{
"0":
{
".code":
[
{
"begin": 676,
"end": 685,
"name": "INVALID",
"source": 0
}
],
"index": 0
},
"1":
{
".code":
[
{
"begin": 751,
"end": 760,
"name": "INVALID",
"source": 0
}
],
"index": 1
},
"2":
{
".code":
[
{
"begin": 826,
"end": 835,
"name": "INVALID",
"source": 0
}
],
"index": 2
}
},
"index": 0
}
},
"index": 0
}
},
"sourceList":
[
"<stdin>"
]
}
@@ -0,0 +1,43 @@
object "L0" {
code {
sstore(0, datasize("L0"))
sstore(1, datasize("L1"))
sstore(2, datasize("L1.L2"))
sstore(3, datasize("L1.L2.L2_0"))
sstore(4, datasize("L1.L2.L2_1"))
sstore(5, datasize("L1.L2.L2_2"))
}
object "L1" {
code {
sstore(6, datasize("L1"))
sstore(7, datasize("L2"))
sstore(8, datasize("L2.L2_0"))
sstore(9, datasize("L2.L2_1"))
sstore(10, datasize("L2.L2_2"))
}
object "L2" {
code {
sstore(11, datasize("L2"))
sstore(12, datasize("L2_0"))
sstore(13, datasize("L2_1"))
sstore(14, datasize("L2_2"))
}
object "L2_0" {
code {
invalid()
}
}
object "L2_1" {
code {
invalid()
}
}
object "L2_2" {
code {
invalid()
}
}
}
}
}
@@ -0,0 +1 @@
--strict-assembly - --asm-json --pretty-json
@@ -0,0 +1,437 @@
======= <stdin> (EVM) =======
{
".code":
[
{
"begin": 36,
"end": 51,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 33,
"end": 34,
"name": "DUP1",
"source": 0
},
{
"begin": 26,
"end": 52,
"name": "SSTORE",
"source": 0
},
{
"begin": 67,
"end": 80,
"name": "PUSHSIZE",
"source": 0
},
{
"begin": 64,
"end": 65,
"name": "PUSH",
"source": 0,
"value": "1"
},
{
"begin": 57,
"end": 81,
"name": "SSTORE",
"source": 0
},
{
"begin": 96,
"end": 111,
"name": "PUSH [$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 93,
"end": 94,
"name": "PUSH",
"source": 0,
"value": "2"
},
{
"begin": 86,
"end": 112,
"name": "SSTORE",
"source": 0
},
{
"begin": 127,
"end": 140,
"name": "PUSH #[$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 124,
"end": 125,
"name": "PUSH",
"source": 0,
"value": "3"
},
{
"begin": 117,
"end": 141,
"name": "SSTORE",
"source": 0
},
{
"begin": 156,
"end": 173,
"name": "PUSH [$]",
"source": 0,
"value": "000000000000000000000000000000000000000000000000ffffffffffffffff"
},
{
"begin": 153,
"end": 154,
"name": "PUSH",
"source": 0,
"value": "4"
},
{
"begin": 146,
"end": 174,
"name": "SSTORE",
"source": 0
},
{
"begin": 189,
"end": 204,
"name": "PUSH #[$]",
"source": 0,
"value": "000000000000000000000000000000000000000000000000ffffffffffffffff"
},
{
"begin": 186,
"end": 187,
"name": "PUSH",
"source": 0,
"value": "5"
},
{
"begin": 179,
"end": 205,
"name": "SSTORE",
"source": 0
},
{
"begin": 220,
"end": 237,
"name": "PUSH [$]",
"source": 0,
"value": "000000000000000000000000000000000000000000000000fffffffffffffffe"
},
{
"begin": 217,
"end": 218,
"name": "PUSH",
"source": 0,
"value": "6"
},
{
"begin": 210,
"end": 238,
"name": "SSTORE",
"source": 0
},
{
"begin": 253,
"end": 268,
"name": "PUSH #[$]",
"source": 0,
"value": "000000000000000000000000000000000000000000000000fffffffffffffffe"
},
{
"begin": 250,
"end": 251,
"name": "PUSH",
"source": 0,
"value": "7"
},
{
"begin": 243,
"end": 269,
"name": "SSTORE",
"source": 0
},
{
"begin": 284,
"end": 303,
"name": "PUSH [$]",
"source": 0,
"value": "000000000000000000000000000000000000000000000000fffffffffffffffd"
},
{
"begin": 281,
"end": 282,
"name": "PUSH",
"source": 0,
"value": "8"
},
{
"begin": 274,
"end": 304,
"name": "SSTORE",
"source": 0
},
{
"begin": 319,
"end": 336,
"name": "PUSH #[$]",
"source": 0,
"value": "000000000000000000000000000000000000000000000000fffffffffffffffd"
},
{
"begin": 316,
"end": 317,
"name": "PUSH",
"source": 0,
"value": "9"
},
{
"begin": 309,
"end": 337,
"name": "SSTORE",
"source": 0
},
{
"begin": 20,
"end": 341,
"name": "STOP",
"source": 0
}
],
".data":
{
"0":
{
".code":
[
{
"begin": 418,
"end": 433,
"name": "PUSH [$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 414,
"end": 416,
"name": "PUSH",
"source": 0,
"value": "A"
},
{
"begin": 407,
"end": 434,
"name": "SSTORE",
"source": 0
},
{
"begin": 452,
"end": 465,
"name": "PUSH #[$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 448,
"end": 450,
"name": "PUSH",
"source": 0,
"value": "B"
},
{
"begin": 441,
"end": 466,
"name": "SSTORE",
"source": 0
},
{
"begin": 484,
"end": 499,
"name": "PUSH [$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
"begin": 480,
"end": 482,
"name": "PUSH",
"source": 0,
"value": "C"
},
{
"begin": 473,
"end": 500,
"name": "SSTORE",
"source": 0
},
{
"begin": 518,
"end": 531,
"name": "PUSH #[$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
"begin": 514,
"end": 516,
"name": "PUSH",
"source": 0,
"value": "D"
},
{
"begin": 507,
"end": 532,
"name": "SSTORE",
"source": 0
},
{
"begin": 550,
"end": 567,
"name": "PUSH [$]",
"source": 0,
"value": "000000000000000000000000000000000000000000000000ffffffffffffffff"
},
{
"begin": 546,
"end": 548,
"name": "PUSH",
"source": 0,
"value": "E"
},
{
"begin": 539,
"end": 568,
"name": "SSTORE",
"source": 0
},
{
"begin": 586,
"end": 601,
"name": "PUSH #[$]",
"source": 0,
"value": "000000000000000000000000000000000000000000000000ffffffffffffffff"
},
{
"begin": 582,
"end": 584,
"name": "PUSH",
"source": 0,
"value": "F"
},
{
"begin": 575,
"end": 602,
"name": "SSTORE",
"source": 0
},
{
"begin": 399,
"end": 608,
"name": "STOP",
"source": 0
}
],
".data":
{
"0":
{
".code":
[
{
"begin": 658,
"end": 673,
"name": "PUSH [$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 654,
"end": 656,
"name": "PUSH",
"source": 0,
"value": "10"
},
{
"begin": 647,
"end": 674,
"name": "SSTORE",
"source": 0
},
{
"begin": 694,
"end": 707,
"name": "PUSH #[$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 690,
"end": 692,
"name": "PUSH",
"source": 0,
"value": "11"
},
{
"begin": 683,
"end": 708,
"name": "SSTORE",
"source": 0
},
{
"begin": 637,
"end": 716,
"name": "STOP",
"source": 0
}
],
".data":
{
"0":
{
".code":
[
{
"begin": 761,
"end": 770,
"name": "INVALID",
"source": 0
}
],
"index": 0
}
},
"index": 0
},
"1":
{
".code":
[
{
"begin": 833,
"end": 842,
"name": "INVALID",
"source": 0
}
],
"index": 1
}
},
"index": 0
},
"ACAF3289D7B601CBD114FB36C4D29C85BBFD5E133F14CB355C3FD8D99367964F": "48656c6c6f2c20576f726c6421"
},
"sourceList":
[
"<stdin>"
]
}
@@ -0,0 +1,43 @@
object "A" {
code {
sstore(0, dataoffset("A"))
sstore(1, datasize("A"))
sstore(2, dataoffset("B"))
sstore(3, datasize("B"))
sstore(4, dataoffset("B.C"))
sstore(5, datasize("B.C"))
sstore(6, dataoffset("B.E"))
sstore(7, datasize("B.E"))
sstore(8, dataoffset("B.C.D"))
sstore(9, datasize("B.C.D"))
}
data "data1" "Hello, World!"
object "B" {
code {
sstore(10, dataoffset("C"))
sstore(11, datasize("C"))
sstore(12, dataoffset("E"))
sstore(13, datasize("E"))
sstore(14, dataoffset("C.D"))
sstore(15, datasize("C.D"))
}
object "C" {
code {
sstore(16, dataoffset("D"))
sstore(17, datasize("D"))
}
object "D" {
code {
invalid()
}
}
}
object "E" {
code {
invalid()
}
}
}
}
@@ -0,0 +1 @@
--strict-assembly - --asm-json
@@ -0,0 +1,3 @@
======= <stdin> (EVM) =======
{".code":[{"begin":28,"end":29,"name":"PUSH","source":0,"value":"0"},{"begin":15,"end":30,"name":"CALLDATALOAD","source":0},{"begin":44,"end":46,"name":"PUSH","source":0,"value":"14"},{"begin":61,"end":62,"name":"DUP1","source":0},{"begin":58,"end":59,"name":"DUP3","source":0},{"begin":51,"end":63,"name":"SSTORE","source":0},{"begin":84,"end":86,"name":"PUSH","source":0,"value":"20"},{"begin":71,"end":87,"name":"CALLDATALOAD","source":0},{"begin":68,"end":188,"name":"ISZERO","source":0},{"begin":68,"end":188,"name":"PUSH [tag]","source":0,"value":"1"},{"begin":68,"end":188,"name":"JUMPI","source":0},{"begin":108,"end":109,"name":"DUP1","source":0},{"begin":105,"end":106,"name":"DUP3","source":0},{"begin":98,"end":110,"name":"SSTORE","source":0},{"begin":149,"end":150,"name":"PUSH","source":0,"value":"0"},{"begin":146,"end":147,"name":"DUP1","source":0},{"begin":143,"end":144,"name":"PUSH","source":0,"value":"0"},{"begin":140,"end":141,"name":"DUP1","source":0},{"begin":137,"end":138,"name":"PUSH","source":0,"value":"0"},{"begin":134,"end":135,"name":"DUP1","source":0},{"begin":123,"end":151,"name":"STATICCALL","source":0},{"begin":119,"end":152,"name":"POP","source":0},{"begin":161,"end":182,"name":"VERBATIM","source":0,"value":"78797a"},{"begin":68,"end":188,"name":"tag","source":0,"value":"1"},{"begin":68,"end":188,"name":"JUMPDEST","source":0},{"begin":203,"end":204,"name":"DUP1","source":0},{"begin":200,"end":201,"name":"DUP3","source":0},{"begin":193,"end":205,"name":"SSTORE","source":0},{"begin":0,"end":207,"name":"POP","source":0},{"begin":0,"end":207,"name":"POP","source":0}],"sourceList":["<stdin>"]}
@@ -0,0 +1,11 @@
{
let a := calldataload(0)
let b := 20
sstore(a, b)
if calldataload(32) {
sstore(a, b)
pop(staticcall(0, 0, 0, 0, 0, 0))
verbatim_0i_0o("xyz")
}
sstore(a, b)
}
@@ -0,0 +1 @@
--strict-assembly - --asm-json
File diff suppressed because one or more lines are too long
@@ -0,0 +1,50 @@
/// @use-src 0:"state_var_initialization.sol"
object "C_23" {
code {
{
/// @src 0:0:125 "contract C {..."
let _1 := memoryguard(0x80)
mstore(64, _1)
if callvalue() { revert(0, 0) }
sstore(/** @src 0:33:34 "1" */ 0x00, /** @src 0:56:57 "2" */ 0x02)
/// @src 0:0:125 "contract C {..."
sstore(/** @src 0:33:34 "1" */ 0x01, 0x00)
/// @src 0:0:125 "contract C {..."
let _2 := datasize("C_23_deployed")
codecopy(_1, dataoffset("C_23_deployed"), _2)
return(_1, _2)
}
}
/// @use-src 0:"state_var_initialization.sol"
object "C_23_deployed" {
code {
{
/// @src 0:0:125 "contract C {..."
let _1 := memoryguard(0x80)
mstore(64, _1)
if iszero(lt(calldatasize(), 4))
{
let _2 := 0
switch shr(224, calldataload(_2))
case 0xb4f40c61 {
if callvalue() { revert(_2, _2) }
if slt(add(calldatasize(), not(3)), _2) { revert(_2, _2) }
mstore(_1, sload(/** @src 0:40:57 "uint public k = 2" */ 1))
/// @src 0:0:125 "contract C {..."
return(_1, 32)
}
case 0xe5aa3d58 {
if callvalue() { revert(_2, _2) }
if slt(add(calldatasize(), not(3)), _2) { revert(_2, _2) }
let _3 := sload(_2)
let memPos := mload(64)
mstore(memPos, _3)
return(memPos, 32)
}
}
revert(0, 0)
}
}
data ".metadata" hex"a2646970667358221220f04f800086d1bd95dea7e66c53d041963124c118e4dc70bc4b39a50865c2483f64736f6c63430008130033"
}
}
@@ -0,0 +1 @@
--strict-assembly - --asm-json
File diff suppressed because one or more lines are too long
@@ -0,0 +1,43 @@
object "C_23" {
code {
{
let _1 := memoryguard(0x80)
mstore(64, _1)
if callvalue() { revert(0, 0) }
sstore(0x00, 0x02)
sstore(0x01, 0x00)
let _2 := datasize("C_23_deployed")
codecopy(_1, dataoffset("C_23_deployed"), _2)
return(_1, _2)
}
}
object "C_23_deployed" {
code {
{
let _1 := memoryguard(0x80)
mstore(64, _1)
if iszero(lt(calldatasize(), 4))
{
let _2 := 0
switch shr(224, calldataload(_2))
case 0xb4f40c61 {
if callvalue() { revert(_2, _2) }
if slt(add(calldatasize(), not(3)), _2) { revert(_2, _2) }
mstore(_1, sload(/** @src 0:40:57 "uint public k = 2" */ 1))
return(_1, 32)
}
case 0xe5aa3d58 {
if callvalue() { revert(_2, _2) }
if slt(add(calldatasize(), not(3)), _2) { revert(_2, _2) }
let _3 := sload(_2)
let memPos := mload(64)
mstore(memPos, _3)
return(memPos, 32)
}
}
revert(0, 0)
}
}
data ".metadata" hex"a2646970667358221220f04f800086d1bd95dea7e66c53d041963124c118e4dc70bc4b39a50865c2483f64736f6c63430008130033"
}
}
@@ -0,0 +1 @@
--pretty-json --json-indent 4 --combined-json bin,bin-runtime,opcodes,asm,srcmap,srcmap-runtime --asm --bin --bin-runtime --asm-json --import-asm-json -
@@ -0,0 +1,93 @@
{
"contracts":
{
"<stdin>":
{
"asm":
{
".code":
[
{
"begin": 0,
"end": 0,
"name": "PUSH",
"source": -1,
"value": "0"
}
],
".data":
{
"0":
{
".code":
[
{
"begin": 0,
"end": 0,
"name": "PUSH",
"source": -1,
"value": "1"
}
],
"index": 0
}
},
"sourceList":
[
"contract.sol",
"#utility.yul"
]
},
"bin": "5ffe",
"bin-runtime": "6001",
"opcodes": "PUSH0 INVALID ",
"srcmap": "0:0::-:0",
"srcmap-runtime": "0:0::-:0"
}
},
"sourceList":
[
"contract.sol",
"#utility.yul"
],
"version": "<VERSION REMOVED>"
}
Binary:
5ffe
Binary of the runtime part:
6001
EVM assembly:
{
".code":
[
{
"begin": 0,
"end": 0,
"name": "PUSH",
"source": -1,
"value": "0"
}
],
".data":
{
"0":
{
".code":
[
{
"begin": 0,
"end": 0,
"name": "PUSH",
"source": -1,
"value": "1"
}
],
"index": 0
}
},
"sourceList":
[
"contract.sol",
"#utility.yul"
]
}
@@ -0,0 +1,23 @@
{
".code": [
{
"name": "PUSH",
"value": "0"
}
],
".data": {
"0": {
".code": [
{
"name": "PUSH",
"value": "1"
}
],
"index": 0
}
},
"sourceList": [
"contract.sol",
"#utility.yul"
]
}
@@ -0,0 +1 @@
--import-asm-json - --opcodes --asm
@@ -0,0 +1,6 @@
Opcodes:
PREVRANDAO PREVRANDAO
EVM assembly:
/* */
prevrandao
prevrandao
@@ -0,0 +1,6 @@
{
".code": [
{ "name": "DIFFICULTY" },
{ "name": "PREVRANDAO" }
]
}
@@ -0,0 +1 @@
--import-asm-json - --opcodes --asm
@@ -0,0 +1 @@
Assembly Import Error: Member '.data' contains a value for '0' that is not a valid hexadecimal string.
@@ -0,0 +1 @@
1
@@ -0,0 +1,11 @@
{
".code": [
{
"name": "PUSH",
"value": "0"
}
],
".data": {
"0": "no-hex-string"
}
}
@@ -0,0 +1 @@
--import-asm-json - --opcodes --asm
@@ -0,0 +1 @@
Assembly Import Error: Key inside '.data' '0' can only be a valid hex-string or an object.
@@ -0,0 +1 @@
1
@@ -0,0 +1,16 @@
{
".code": [
{
"name": "PUSH",
"value": "0"
}
],
".data": {
"0": [
0,
1,
2,
3
]
}
}
@@ -0,0 +1 @@
--import-asm-json - --opcodes --asm
@@ -0,0 +1 @@
Assembly Import Error: Member 'jumpType' set on instruction different from JUMP or JUMPI (was set on instruction 'PUSH')
@@ -0,0 +1,9 @@
{
".code": [
{
"name": "PUSH",
"value": "0",
"jumpType": "[in]"
}
]
}
@@ -0,0 +1 @@
--import-asm-json - --opcodes --asm
@@ -0,0 +1 @@
Assembly Import Error: Member 'value' defined for instruction 'DIFFICULTY', but the instruction does not need a value.
@@ -0,0 +1 @@
1
@@ -0,0 +1,8 @@
{
".code": [
{
"name": "DIFFICULTY",
"value": "0"
}
]
}
@@ -0,0 +1 @@
--optimize --import-asm-json - --opcodes --asm
@@ -0,0 +1 @@
Option --optimize is not supported with --import-asm-json.
@@ -0,0 +1 @@
1
@@ -0,0 +1,6 @@
{
".code": [
{ "name": "DIFFICULTY" },
{ "name": "PREVRANDAO" }
]
}
@@ -0,0 +1 @@
--import-asm-json - --opcodes --asm
@@ -0,0 +1 @@
Assembly Import Error: Member 'value' was not defined for instruction 'PUSH', but the instruction needs a value.
@@ -0,0 +1 @@
1
@@ -0,0 +1,5 @@
{
".code": [
{ "name": "PUSH" }
]
}
@@ -0,0 +1 @@
--asm-json --import-asm-json -
@@ -0,0 +1 @@
Assembly Import Error: Items in 'sourceList' array are not unique.
@@ -0,0 +1 @@
1
@@ -0,0 +1,23 @@
{
".code": [
{
"name": "PUSH",
"value": "0"
}
],
".data": {
"0": {
".code": [
{
"name": "PUSH",
"value": "1"
}
]
}
},
"sourceList": [
"contract.sol",
"contract.sol",
"#utility.yul"
]
}
@@ -0,0 +1 @@
--import-asm-json - --opcodes --asm
@@ -0,0 +1 @@
Assembly Import Error: Unknown member '_name'. Valid members are begin, end, jumpType, modifierDepth, name, source, value.
@@ -0,0 +1 @@
1
@@ -0,0 +1,5 @@
{
".code": [
{ "_name": "DIFFICULTY" }
]
}
@@ -0,0 +1 @@
--import-asm-json - --opcodes --asm
@@ -0,0 +1 @@
Assembly Import Error: JUMPDEST instruction without a tag
@@ -0,0 +1 @@
1
@@ -0,0 +1,10 @@
{
".code": [
{
"name": "tag",
"value": "0x00"
},
{ "name": "JUMPDEST" },
{ "name": "JUMPDEST" }
]
}
@@ -0,0 +1 @@
--import-asm-json - --opcodes --asm
@@ -0,0 +1,58 @@
Opcodes:
PUSH0 CALLDATALOAD PUSH1 0x14 DUP1 DUP3 SSTORE PUSH1 0x20 CALLDATALOAD ISZERO PUSH1 0x1C JUMPI DUP1 DUP3 SSTORE PUSH0 DUP1 PUSH0 DUP1 PUSH0 DUP1 STATICCALL POP PUSH25 0x797A5B80825550500000000000000000000000000000000000
EVM assembly:
/* "<stdin>":28:29 b */
0x00
/* "<stdin>":15:30 {... */
calldataload
/* "<stdin>":44:46 */
0x14
/* "<stdin>":61:62 */
dup1
/* "<stdin>":58:59 */
dup3
/* "<stdin>":51:63 : 29,... */
sstore
/* "<stdin>":84:86 " */
0x20
/* "<stdin>":71:87 "PUSH",... */
calldataload
/* "<stdin>":68:188 ": "PUSH",... */
iszero
tag_1
jumpi
/* "<stdin>":108:109 u */
dup1
/* "<stdin>":105:106 v */
dup3
/* "<stdin>":98:110 "value */
sstore
/* "<stdin>":149:150 */
0x00
/* "<stdin>":146:147 5 */
dup1
/* "<stdin>":143:144 : */
0x00
/* "<stdin>":140:141 i */
dup1
/* "<stdin>":137:138 b */
0x00
/* "<stdin>":134:135 */
dup1
/* "<stdin>":123:151 ... */
staticcall
/* "<stdin>":119:152 },... */
pop
/* "<stdin>":161:182 30,... */
verbatimbytecode_78797a
/* "<stdin>":68:188 ": "PUSH",... */
tag_1:
/* "<stdin>":203:204 s */
dup1
/* "<stdin>":200:201 */
dup3
/* "<stdin>":193:205 ",... */
sstore
/* "<stdin>":0:207 {... */
pop
pop
@@ -0,0 +1,196 @@
{
".code": [
{
"begin": 28,
"end": 29,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 15,
"end": 30,
"name": "CALLDATALOAD",
"source": 0
},
{
"begin": 44,
"end": 46,
"name": "PUSH",
"source": 0,
"value": "14"
},
{
"begin": 61,
"end": 62,
"name": "DUP1",
"source": 0
},
{
"begin": 58,
"end": 59,
"name": "DUP3",
"source": 0
},
{
"begin": 51,
"end": 63,
"name": "SSTORE",
"source": 0
},
{
"begin": 84,
"end": 86,
"name": "PUSH",
"source": 0,
"value": "20"
},
{
"begin": 71,
"end": 87,
"name": "CALLDATALOAD",
"source": 0
},
{
"begin": 68,
"end": 188,
"name": "ISZERO",
"source": 0
},
{
"begin": 68,
"end": 188,
"name": "PUSH [tag]",
"source": 0,
"value": "1"
},
{
"begin": 68,
"end": 188,
"name": "JUMPI",
"source": 0
},
{
"begin": 108,
"end": 109,
"name": "DUP1",
"source": 0
},
{
"begin": 105,
"end": 106,
"name": "DUP3",
"source": 0
},
{
"begin": 98,
"end": 110,
"name": "SSTORE",
"source": 0
},
{
"begin": 149,
"end": 150,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 146,
"end": 147,
"name": "DUP1",
"source": 0
},
{
"begin": 143,
"end": 144,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 140,
"end": 141,
"name": "DUP1",
"source": 0
},
{
"begin": 137,
"end": 138,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 134,
"end": 135,
"name": "DUP1",
"source": 0
},
{
"begin": 123,
"end": 151,
"name": "STATICCALL",
"source": 0
},
{
"begin": 119,
"end": 152,
"name": "POP",
"source": 0
},
{
"begin": 161,
"end": 182,
"name": "VERBATIM",
"source": 0,
"value": "78797a"
},
{
"begin": 68,
"end": 188,
"name": "tag",
"source": 0,
"value": "1"
},
{
"begin": 68,
"end": 188,
"name": "JUMPDEST",
"source": 0
},
{
"begin": 203,
"end": 204,
"name": "DUP1",
"source": 0
},
{
"begin": 200,
"end": 201,
"name": "DUP3",
"source": 0
},
{
"begin": 193,
"end": 205,
"name": "SSTORE",
"source": 0
},
{
"begin": 0,
"end": 207,
"name": "POP",
"source": 0
},
{
"begin": 0,
"end": 207,
"name": "POP",
"source": 0
}
],
"sourceList": [
"<stdin>"
]
}
@@ -0,0 +1 @@
--import-asm-json - --opcodes
@@ -0,0 +1,2 @@
Opcodes:
PUSH1 0x1E PUSH0 SSTORE PUSH1 0x1A PUSH1 0x1 SSTORE PUSH1 0x15 PUSH1 0x2 SSTORE PUSH1 0x1 PUSH1 0x3 SSTORE PUSH1 0x1 PUSH1 0x4 SSTORE PUSH1 0x1 PUSH1 0x5 SSTORE INVALID
@@ -0,0 +1,368 @@
{
".code":
[
{
"begin": 37,
"end": 51,
"name": "PUSHSIZE",
"source": 0
},
{
"begin": 34,
"end": 35,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 27,
"end": 52,
"name": "SSTORE",
"source": 0
},
{
"begin": 67,
"end": 81,
"name": "PUSH #[$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 64,
"end": 65,
"name": "PUSH",
"source": 0,
"value": "1"
},
{
"begin": 57,
"end": 82,
"name": "SSTORE",
"source": 0
},
{
"begin": 97,
"end": 114,
"name": "PUSH #[$]",
"source": 0,
"value": "000000000000000000000000000000000000000000000000ffffffffffffffff"
},
{
"begin": 94,
"end": 95,
"name": "PUSH",
"source": 0,
"value": "2"
},
{
"begin": 87,
"end": 115,
"name": "SSTORE",
"source": 0
},
{
"begin": 130,
"end": 152,
"name": "PUSH #[$]",
"source": 0,
"value": "000000000000000000000000000000000000000000000000fffffffffffffffe"
},
{
"begin": 127,
"end": 128,
"name": "PUSH",
"source": 0,
"value": "3"
},
{
"begin": 120,
"end": 153,
"name": "SSTORE",
"source": 0
},
{
"begin": 168,
"end": 190,
"name": "PUSH #[$]",
"source": 0,
"value": "000000000000000000000000000000000000000000000000fffffffffffffffd"
},
{
"begin": 165,
"end": 166,
"name": "PUSH",
"source": 0,
"value": "4"
},
{
"begin": 158,
"end": 191,
"name": "SSTORE",
"source": 0
},
{
"begin": 206,
"end": 228,
"name": "PUSH #[$]",
"source": 0,
"value": "000000000000000000000000000000000000000000000000fffffffffffffffc"
},
{
"begin": 203,
"end": 204,
"name": "PUSH",
"source": 0,
"value": "5"
},
{
"begin": 196,
"end": 229,
"name": "SSTORE",
"source": 0
}
],
".data":
{
"0":
{
".code":
[
{
"begin": 278,
"end": 292,
"name": "PUSHSIZE",
"source": 0
},
{
"begin": 275,
"end": 276,
"name": "PUSH",
"source": 0,
"value": "6"
},
{
"begin": 268,
"end": 293,
"name": "SSTORE",
"source": 0
},
{
"begin": 310,
"end": 324,
"name": "PUSH #[$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 307,
"end": 308,
"name": "PUSH",
"source": 0,
"value": "7"
},
{
"begin": 300,
"end": 325,
"name": "SSTORE",
"source": 0
},
{
"begin": 342,
"end": 361,
"name": "PUSH #[$]",
"source": 0,
"value": "000000000000000000000000000000000000000000000000ffffffffffffffff"
},
{
"begin": 339,
"end": 340,
"name": "PUSH",
"source": 0,
"value": "8"
},
{
"begin": 332,
"end": 362,
"name": "SSTORE",
"source": 0
},
{
"begin": 379,
"end": 398,
"name": "PUSH #[$]",
"source": 0,
"value": "000000000000000000000000000000000000000000000000fffffffffffffffe"
},
{
"begin": 376,
"end": 377,
"name": "PUSH",
"source": 0,
"value": "9"
},
{
"begin": 369,
"end": 399,
"name": "SSTORE",
"source": 0
},
{
"begin": 417,
"end": 436,
"name": "PUSH #[$]",
"source": 0,
"value": "000000000000000000000000000000000000000000000000fffffffffffffffd"
},
{
"begin": 413,
"end": 415,
"name": "PUSH",
"source": 0,
"value": "A"
},
{
"begin": 406,
"end": 437,
"name": "SSTORE",
"source": 0
}
],
"index": 0,
".data":
{
"0":
{
".code":
[
{
"begin": 494,
"end": 508,
"name": "PUSHSIZE",
"source": 0
},
{
"begin": 490,
"end": 492,
"name": "PUSH",
"source": 0,
"value": "B"
},
{
"begin": 483,
"end": 509,
"name": "SSTORE",
"source": 0
},
{
"begin": 529,
"end": 545,
"name": "PUSH #[$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 525,
"end": 527,
"name": "PUSH",
"source": 0,
"value": "C"
},
{
"begin": 518,
"end": 546,
"name": "SSTORE",
"source": 0
},
{
"begin": 566,
"end": 582,
"name": "PUSH #[$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
"begin": 562,
"end": 564,
"name": "PUSH",
"source": 0,
"value": "D"
},
{
"begin": 555,
"end": 583,
"name": "SSTORE",
"source": 0
},
{
"begin": 603,
"end": 619,
"name": "PUSH #[$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000002"
},
{
"begin": 599,
"end": 601,
"name": "PUSH",
"source": 0,
"value": "E"
},
{
"begin": 592,
"end": 620,
"name": "SSTORE",
"source": 0
}
],
"index": 0,
".data":
{
"0":
{
".code":
[
{
"begin": 676,
"end": 685,
"name": "INVALID",
"source": 0
}
],
"index": 0
},
"1":
{
".code":
[
{
"begin": 751,
"end": 760,
"name": "INVALID",
"source": 0
}
],
"index": 1
},
"2":
{
".code":
[
{
"begin": 826,
"end": 835,
"name": "INVALID",
"source": 0
}
],
"index": 2
}
}
}
}
}
},
"sourceList":
[
"<stdin>"
]
}
@@ -0,0 +1 @@
--import-asm-json - --opcodes
@@ -0,0 +1,2 @@
Opcodes:
PUSH0 DUP1 SSTORE PUSH1 0x6A PUSH1 0x1 SSTORE PUSH1 0x31 PUSH1 0x2 SSTORE PUSH1 0x2C PUSH1 0x3 SSTORE PUSH1 0x5E PUSH1 0x4 SSTORE PUSH1 0xC PUSH1 0x5 SSTORE PUSH1 0x5D PUSH1 0x6 SSTORE PUSH1 0x1 PUSH1 0x7 SSTORE PUSH1 0x5D PUSH1 0x8 SSTORE PUSH1 0x1 PUSH1 0x9 SSTORE INVALID PUSH1 0x1F PUSH1 0xA SSTORE PUSH1 0xC PUSH1 0xB SSTORE PUSH1 0x2B PUSH1 0xC SSTORE PUSH1 0x1 PUSH1 0xD SSTORE PUSH1 0x2B PUSH1 0xE SSTORE PUSH1 0x1 PUSH1 0xF SSTORE INVALID PUSH1 0xB PUSH1 0x10 SSTORE PUSH1 0x1 PUSH1 0x11 SSTORE INVALID INVALID INVALID INVALID PUSH1 0xB PUSH1 0x10 SSTORE PUSH1 0x1 PUSH1 0x11 SSTORE INVALID INVALID
@@ -0,0 +1,417 @@
{
".code":
[
{
"begin": 36,
"end": 51,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 33,
"end": 34,
"name": "DUP1",
"source": 0
},
{
"begin": 26,
"end": 52,
"name": "SSTORE",
"source": 0
},
{
"begin": 67,
"end": 80,
"name": "PUSHSIZE",
"source": 0
},
{
"begin": 64,
"end": 65,
"name": "PUSH",
"source": 0,
"value": "1"
},
{
"begin": 57,
"end": 81,
"name": "SSTORE",
"source": 0
},
{
"begin": 96,
"end": 111,
"name": "PUSH [$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 93,
"end": 94,
"name": "PUSH",
"source": 0,
"value": "2"
},
{
"begin": 86,
"end": 112,
"name": "SSTORE",
"source": 0
},
{
"begin": 127,
"end": 140,
"name": "PUSH #[$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 124,
"end": 125,
"name": "PUSH",
"source": 0,
"value": "3"
},
{
"begin": 117,
"end": 141,
"name": "SSTORE",
"source": 0
},
{
"begin": 156,
"end": 173,
"name": "PUSH [$]",
"source": 0,
"value": "000000000000000000000000000000000000000000000000ffffffffffffffff"
},
{
"begin": 153,
"end": 154,
"name": "PUSH",
"source": 0,
"value": "4"
},
{
"begin": 146,
"end": 174,
"name": "SSTORE",
"source": 0
},
{
"begin": 189,
"end": 204,
"name": "PUSH #[$]",
"source": 0,
"value": "000000000000000000000000000000000000000000000000ffffffffffffffff"
},
{
"begin": 186,
"end": 187,
"name": "PUSH",
"source": 0,
"value": "5"
},
{
"begin": 179,
"end": 205,
"name": "SSTORE",
"source": 0
},
{
"begin": 220,
"end": 237,
"name": "PUSH [$]",
"source": 0,
"value": "000000000000000000000000000000000000000000000000fffffffffffffffe"
},
{
"begin": 217,
"end": 218,
"name": "PUSH",
"source": 0,
"value": "6"
},
{
"begin": 210,
"end": 238,
"name": "SSTORE",
"source": 0
},
{
"begin": 253,
"end": 268,
"name": "PUSH #[$]",
"source": 0,
"value": "000000000000000000000000000000000000000000000000fffffffffffffffe"
},
{
"begin": 250,
"end": 251,
"name": "PUSH",
"source": 0,
"value": "7"
},
{
"begin": 243,
"end": 269,
"name": "SSTORE",
"source": 0
},
{
"begin": 284,
"end": 303,
"name": "PUSH [$]",
"source": 0,
"value": "000000000000000000000000000000000000000000000000fffffffffffffffd"
},
{
"begin": 281,
"end": 282,
"name": "PUSH",
"source": 0,
"value": "8"
},
{
"begin": 274,
"end": 304,
"name": "SSTORE",
"source": 0
},
{
"begin": 319,
"end": 336,
"name": "PUSH #[$]",
"source": 0,
"value": "000000000000000000000000000000000000000000000000fffffffffffffffd"
},
{
"begin": 316,
"end": 317,
"name": "PUSH",
"source": 0,
"value": "9"
},
{
"begin": 309,
"end": 337,
"name": "SSTORE",
"source": 0
}
],
".data":
{
"0":
{
".code":
[
{
"begin": 418,
"end": 433,
"name": "PUSH [$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 414,
"end": 416,
"name": "PUSH",
"source": 0,
"value": "A"
},
{
"begin": 407,
"end": 434,
"name": "SSTORE",
"source": 0
},
{
"begin": 452,
"end": 465,
"name": "PUSH #[$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 448,
"end": 450,
"name": "PUSH",
"source": 0,
"value": "B"
},
{
"begin": 441,
"end": 466,
"name": "SSTORE",
"source": 0
},
{
"begin": 484,
"end": 499,
"name": "PUSH [$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
"begin": 480,
"end": 482,
"name": "PUSH",
"source": 0,
"value": "C"
},
{
"begin": 473,
"end": 500,
"name": "SSTORE",
"source": 0
},
{
"begin": 518,
"end": 531,
"name": "PUSH #[$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000001"
},
{
"begin": 514,
"end": 516,
"name": "PUSH",
"source": 0,
"value": "D"
},
{
"begin": 507,
"end": 532,
"name": "SSTORE",
"source": 0
},
{
"begin": 550,
"end": 567,
"name": "PUSH [$]",
"source": 0,
"value": "000000000000000000000000000000000000000000000000ffffffffffffffff"
},
{
"begin": 546,
"end": 548,
"name": "PUSH",
"source": 0,
"value": "E"
},
{
"begin": 539,
"end": 568,
"name": "SSTORE",
"source": 0
},
{
"begin": 586,
"end": 601,
"name": "PUSH #[$]",
"source": 0,
"value": "000000000000000000000000000000000000000000000000ffffffffffffffff"
},
{
"begin": 582,
"end": 584,
"name": "PUSH",
"source": 0,
"value": "F"
},
{
"begin": 575,
"end": 602,
"name": "SSTORE",
"source": 0
}
],
"index": 0,
".data":
{
"0":
{
".code":
[
{
"begin": 658,
"end": 673,
"name": "PUSH [$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 654,
"end": 656,
"name": "PUSH",
"source": 0,
"value": "10"
},
{
"begin": 647,
"end": 674,
"name": "SSTORE",
"source": 0
},
{
"begin": 694,
"end": 707,
"name": "PUSH #[$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 690,
"end": 692,
"name": "PUSH",
"source": 0,
"value": "11"
},
{
"begin": 683,
"end": 708,
"name": "SSTORE",
"source": 0
}
],
"index": 0,
".data":
{
"0":
{
".code":
[
{
"begin": 761,
"end": 770,
"name": "INVALID",
"source": 0
}
],
"index": 0
}
}
},
"1":
{
".code":
[
{
"begin": 833,
"end": 842,
"name": "INVALID",
"source": 0
}
],
"index": 1
}
}
},
"ACAF3289D7B601CBD114FB36C4D29C85BBFD5E133F14CB355C3FD8D99367964F": "48656c6c6f2c20576f726c6421"
},
"sourceList":
[
"<stdin>"
]
}
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
The following outputs are not supported in assembler mode: --abi, --asm-json, --bin-runtime, --devdoc, --hashes, --ir, --metadata, --opcodes, --storage-layout, --userdoc.
The following outputs are not supported in assembler mode: --abi, --bin-runtime, --devdoc, --hashes, --ir, --metadata, --opcodes, --storage-layout, --userdoc.
+16
View File
@@ -0,0 +1,16 @@
#!/usr/bin/env bash
set -euo pipefail
# shellcheck source=scripts/common.sh
source "${REPO_ROOT}/scripts/common.sh"
SOLTMPDIR=$(mktemp -d -t "cmdline-test-evmasm-import-export-XXXXXX")
(
cd "$SOLTMPDIR"
if ! "$REPO_ROOT/scripts/ASTImportTest.sh" evm-assembly
then
rm -r "$SOLTMPDIR"
fail
fi
)
rm -r "$SOLTMPDIR"