Skip to content

Commit 6302544

Browse files
committed
Add experimental mode to metadata
1 parent 7dfba88 commit 6302544

File tree

17 files changed

+130
-13
lines changed

17 files changed

+130
-13
lines changed

libsolidity/interface/CompilerStack.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1822,6 +1822,7 @@ std::string CompilerStack::createMetadata(Contract const& _contract, bool _forIR
18221822
if (_forIR)
18231823
meta["settings"]["viaIR"] = _forIR;
18241824
meta["settings"]["evmVersion"] = m_evmVersion.name();
1825+
meta["settings"]["experimental"] = m_experimental;
18251826
if (m_eofVersion.has_value())
18261827
meta["settings"]["eofVersion"] = *m_eofVersion;
18271828
meta["settings"]["compilationTarget"][_contract.contract->sourceUnitName()] =
@@ -1935,7 +1936,7 @@ bytes CompilerStack::createCBORMetadata(Contract const& _contract, bool _forIR)
19351936

19361937
bool const experimentalMode = !onlySafeExperimentalFeaturesActivated(
19371938
_contract.contract->sourceUnit().annotation().experimentalFeatures
1938-
);
1939+
) || m_experimental;
19391940

19401941
std::string meta = (_forIR == m_viaIR ? metadata(_contract) : createMetadata(_contract, _forIR));
19411942

@@ -1948,7 +1949,7 @@ bytes CompilerStack::createCBORMetadata(Contract const& _contract, bool _forIR)
19481949
else
19491950
solAssert(m_metadataHash == MetadataHash::None, "Invalid metadata hash");
19501951

1951-
if (experimentalMode || m_eofVersion.has_value())
1952+
if (experimentalMode)
19521953
encoder.pushBool("experimental", true);
19531954
if (m_metadataFormat == MetadataFormat::WithReleaseVersionTag)
19541955
encoder.pushBytes("solc", VersionCompactBytes);

test/cmdlineTests/metadata/output

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11

22
======= input.sol:C =======
33
Metadata:
4-
{"compiler":{"version": "<VERSION REMOVED>"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"compilationTarget":{"input.sol":"C"},"evmVersion":"osaka","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":false,"runs":200},"remappings":[]},"sources":{"input.sol":{"keccak256":"0x5cf617b1707a484e3c4bd59643013dec76ab7d75900b46855214729ae3e0ceb0","license":"GPL-3.0","urls":["bzz-raw://ac418a02dfadf87234150d3568f33269e3f49460345cb39300e017a6d755eff2","dweb:/ipfs/QmQq3owBu25x2WV46HB1WyKzJpxiAPecU7eMKqtXCF7eeS"]}},"version":1}
4+
{"compiler":{"version": "<VERSION REMOVED>"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"compilationTarget":{"input.sol":"C"},"evmVersion":"osaka","experimental":false,"libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":false,"runs":200},"remappings":[]},"sources":{"input.sol":{"keccak256":"0x5cf617b1707a484e3c4bd59643013dec76ab7d75900b46855214729ae3e0ceb0","license":"GPL-3.0","urls":["bzz-raw://ac418a02dfadf87234150d3568f33269e3f49460345cb39300e017a6d755eff2","dweb:/ipfs/QmQq3owBu25x2WV46HB1WyKzJpxiAPecU7eMKqtXCF7eeS"]}},"version":1}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
--metadata --experimental --via-ir --ethdebug --no-cbor-metadata
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
// SPDX-License-Identifier: GPL-3.0
2+
pragma solidity *;
3+
4+
contract C {}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
======= Debug Data (ethdebug/format/info/resources) =======
2+
{"compilation":{"compiler":{"name":"solc","version": "<VERSION REMOVED>"},"sources":[{"id":0,"path":"input.sol"}]}}
3+
4+
======= input.sol:C =======
5+
Metadata:
6+
{"compiler":{"version": "<VERSION REMOVED>"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"compilationTarget":{"input.sol":"C"},"evmVersion":"osaka","experimental":true,"libraries":{},"metadata":{"appendCBOR":false,"bytecodeHash":"ipfs"},"optimizer":{"enabled":false,"runs":200},"remappings":[],"viaIR":true},"sources":{"input.sol":{"keccak256":"0x5cf617b1707a484e3c4bd59643013dec76ab7d75900b46855214729ae3e0ceb0","license":"GPL-3.0","urls":["bzz-raw://ac418a02dfadf87234150d3568f33269e3f49460345cb39300e017a6d755eff2","dweb:/ipfs/QmQq3owBu25x2WV46HB1WyKzJpxiAPecU7eMKqtXCF7eeS"]}},"version":1}
7+
Debug Data (ethdebug/format/program):
8+
{"contract":{"definition":{"source":{"id":0}},"name":"C"},"environment":"create","instructions":[{"context":{"code":{"range":{"length":13,"offset":56},"source":{"id":0}}},"offset":0,"operation":{"arguments":["0x80"],"mnemonic":"PUSH1"}},{"context":{"code":{"range":{"length":13,"offset":56},"source":{"id":0}}},"offset":2,"operation":{"arguments":["0x40"],"mnemonic":"PUSH1"}},{"context":{"code":{"range":{"length":13,"offset":56},"source":{"id":0}}},"offset":4,"operation":{"mnemonic":"MSTORE"}},{"context":{"code":{"range":{"length":13,"offset":56},"source":{"id":0}}},"offset":5,"operation":{"mnemonic":"CALLVALUE"}},{"context":{"code":{"range":{"length":13,"offset":56},"source":{"id":0}}},"offset":6,"operation":{"arguments":["0x19"],"mnemonic":"PUSH1"}},{"context":{"code":{"range":{"length":13,"offset":56},"source":{"id":0}}},"offset":8,"operation":{"mnemonic":"JUMPI"}},{"context":{"code":{"range":{"length":13,"offset":56},"source":{"id":0}}},"offset":9,"operation":{"arguments":["0x0e"],"mnemonic":"PUSH1"}},{"context":{"code":{"range":{"length":13,"offset":56},"source":{"id":0}}},"offset":11,"operation":{"arguments":["0x1d"],"mnemonic":"PUSH1"}},{"context":{"code":{"range":{"length":13,"offset":56},"source":{"id":0}}},"offset":13,"operation":{"mnemonic":"JUMP"}},{"context":{"code":{"range":{"length":13,"offset":56},"source":{"id":0}}},"offset":14,"operation":{"mnemonic":"JUMPDEST"}},{"context":{"code":{"range":{"length":13,"offset":56},"source":{"id":0}}},"offset":15,"operation":{"arguments":["0x08"],"mnemonic":"PUSH1"}},{"context":{"code":{"range":{"length":13,"offset":56},"source":{"id":0}}},"offset":17,"operation":{"arguments":["0x28"],"mnemonic":"PUSH1"}},{"context":{"code":{"range":{"length":13,"offset":56},"source":{"id":0}}},"offset":19,"operation":{"mnemonic":"DUP3"}},{"context":{"code":{"range":{"length":13,"offset":56},"source":{"id":0}}},"offset":20,"operation":{"mnemonic":"CODECOPY"}},{"context":{"code":{"range":{"length":13,"offset":56},"source":{"id":0}}},"offset":21,"operation":{"arguments":["0x08"],"mnemonic":"PUSH1"}},{"context":{"code":{"range":{"length":13,"offset":56},"source":{"id":0}}},"offset":23,"operation":{"mnemonic":"SWAP1"}},{"context":{"code":{"range":{"length":13,"offset":56},"source":{"id":0}}},"offset":24,"operation":{"mnemonic":"RETURN"}},{"context":{"code":{"range":{"length":13,"offset":56},"source":{"id":0}}},"offset":25,"operation":{"mnemonic":"JUMPDEST"}},{"context":{"code":{"range":{"length":13,"offset":56},"source":{"id":0}}},"offset":26,"operation":{"arguments":["0x23"],"mnemonic":"PUSH1"}},{"context":{"code":{"range":{"length":13,"offset":56},"source":{"id":0}}},"offset":28,"operation":{"mnemonic":"JUMP"}},{"context":{"code":{"range":{"length":13,"offset":56},"source":{"id":0}}},"offset":29,"operation":{"mnemonic":"JUMPDEST"}},{"context":{"code":{"range":{"length":13,"offset":56},"source":{"id":0}}},"offset":30,"operation":{"arguments":["0x40"],"mnemonic":"PUSH1"}},{"context":{"code":{"range":{"length":13,"offset":56},"source":{"id":0}}},"offset":32,"operation":{"mnemonic":"MLOAD"}},{"context":{"code":{"range":{"length":13,"offset":56},"source":{"id":0}}},"offset":33,"operation":{"mnemonic":"SWAP1"}},{"context":{"code":{"range":{"length":13,"offset":56},"source":{"id":0}}},"offset":34,"operation":{"mnemonic":"JUMP"}},{"context":{"code":{"range":{"length":13,"offset":56},"source":{"id":0}}},"offset":35,"operation":{"mnemonic":"JUMPDEST"}},{"context":{"code":{"range":{"length":13,"offset":56},"source":{"id":0}}},"offset":36,"operation":{"mnemonic":"PUSH0"}},{"context":{"code":{"range":{"length":13,"offset":56},"source":{"id":0}}},"offset":37,"operation":{"mnemonic":"DUP1"}},{"context":{"code":{"range":{"length":13,"offset":56},"source":{"id":0}}},"offset":38,"operation":{"mnemonic":"REVERT"}}]}

test/cmdlineTests/standard_metadata/output.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"contracts": {
33
"C": {
44
"C": {
5-
"metadata": "{\"compiler\":{\"version\":\"<VERSION REMOVED>\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"C\":\"C\"},\"evmVersion\":\"osaka\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"C\":{\"keccak256\":\"0x5cf617b1707a484e3c4bd59643013dec76ab7d75900b46855214729ae3e0ceb0\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://ac418a02dfadf87234150d3568f33269e3f49460345cb39300e017a6d755eff2\",\"dweb:/ipfs/QmQq3owBu25x2WV46HB1WyKzJpxiAPecU7eMKqtXCF7eeS\"]}},\"version\":1}"
5+
"metadata": "{\"compiler\":{\"version\":\"<VERSION REMOVED>\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"C\":\"C\"},\"evmVersion\":\"osaka\",\"experimental\":false,\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"C\":{\"keccak256\":\"0x5cf617b1707a484e3c4bd59643013dec76ab7d75900b46855214729ae3e0ceb0\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://ac418a02dfadf87234150d3568f33269e3f49460345cb39300e017a6d755eff2\",\"dweb:/ipfs/QmQq3owBu25x2WV46HB1WyKzJpxiAPecU7eMKqtXCF7eeS\"]}},\"version\":1}"
66
}
77
}
88
},
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
--allow-paths .
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
// SPDX-License-Identifier: GPL-3.0
2+
pragma solidity *;
3+
4+
contract C {}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"language": "Solidity",
3+
"sources": {
4+
"C": {"urls": ["in.sol"]}
5+
},
6+
"settings": {
7+
"experimental": true,
8+
"viaIR": true,
9+
"debug": {
10+
"debugInfo": [
11+
"ethdebug"
12+
]
13+
},
14+
"outputSelection": {
15+
"*": {"*": ["metadata", "ir"]}
16+
}
17+
}
18+
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
{
2+
"contracts": {
3+
"C": {
4+
"C": {
5+
"ir": "/// ethdebug: enabled
6+
/// @use-src 0:\"C\"
7+
object \"C_2\" {
8+
code {
9+
/// @src 0:56:69
10+
mstore(64, memoryguard(128))
11+
if callvalue() { revert_error_ca66f745a3ce8ff40e2ccaf1ad45db7774001b90d25810abd9040049be7bf4bb() }
12+
13+
constructor_C_2()
14+
15+
let _1 := allocate_unbounded()
16+
codecopy(_1, dataoffset(\"C_2_deployed\"), datasize(\"C_2_deployed\"))
17+
18+
return(_1, datasize(\"C_2_deployed\"))
19+
20+
function allocate_unbounded() -> memPtr {
21+
memPtr := mload(64)
22+
}
23+
24+
function revert_error_ca66f745a3ce8ff40e2ccaf1ad45db7774001b90d25810abd9040049be7bf4bb() {
25+
revert(0, 0)
26+
}
27+
28+
/// @src 0:56:69
29+
function constructor_C_2() {
30+
31+
/// @src 0:56:69
32+
33+
}
34+
/// @src 0:56:69
35+
36+
}
37+
/// @use-src 0:\"C\"
38+
object \"C_2_deployed\" {
39+
code {
40+
/// @src 0:56:69
41+
mstore(64, memoryguard(128))
42+
43+
revert_error_42b3090547df1d2001c96683413b8cf91c1b902ef5e3cb8d9f6f304cf7446f74()
44+
45+
function shift_right_224_unsigned(value) -> newValue {
46+
newValue :=
47+
48+
shr(224, value)
49+
50+
}
51+
52+
function allocate_unbounded() -> memPtr {
53+
memPtr := mload(64)
54+
}
55+
56+
function revert_error_42b3090547df1d2001c96683413b8cf91c1b902ef5e3cb8d9f6f304cf7446f74() {
57+
revert(0, 0)
58+
}
59+
60+
}
61+
62+
data \".metadata\" hex\"<BYTECODE REMOVED>\"
63+
}
64+
65+
}
66+
67+
",
68+
"metadata": "{\"compiler\":{\"version\":\"<VERSION REMOVED>\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"C\":\"C\"},\"evmVersion\":\"osaka\",\"experimental\":true,\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"C\":{\"keccak256\":\"0x5cf617b1707a484e3c4bd59643013dec76ab7d75900b46855214729ae3e0ceb0\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://ac418a02dfadf87234150d3568f33269e3f49460345cb39300e017a6d755eff2\",\"dweb:/ipfs/QmQq3owBu25x2WV46HB1WyKzJpxiAPecU7eMKqtXCF7eeS\"]}},\"version\":1}"
69+
}
70+
}
71+
},
72+
"sources": {
73+
"C": {
74+
"id": 0
75+
}
76+
}
77+
}

0 commit comments

Comments
 (0)