solidity
solidity copied to clipboard
EthDebug program instructions and environment are mandatory
Description
According to EthDebug spec the environment and instructions fields are required, but solc omits them for interfaces and abstract contracts. See: https://ethdebug.github.io/format/spec/program/
Environment
- Compiler version: Version: 0.8.29+commit.ab55807c.Linux.g++
- Compilation pipeline (legacy, IR, EOF): IR
- Target EVM version (as per compiler settings): osaca
- Framework/IDE (e.g. Foundry, Hardhat, Remix): No
- EVM execution environment / backend / blockchain client: No
- Operating system: WSL
Steps to Reproduce
solc --standard-json input.json --pretty-json > ouput.json
input.json
{
"language": "Solidity",
"sources": {
"contract.sol": {
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.29;\n\nabstract contract GreeterBase {\n function greet() public view virtual returns (string memory);\n}"
},
"interface.sol": {
"content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.29;\n\ninterface IGreeter {\n function greet() external view returns (string memory);\n}"
}
},
"settings": {
"viaIR": true,
"debug": {
"debugInfo": [
"ethdebug"
]
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode.ethdebug",
"evm.deployedBytecode.ethdebug",
"ir",
"irOptimized"
]
}
}
}
}
output.json
{
"contracts": {
"contract.sol": {
"GreeterBase": {
"evm": {
"bytecode": {
"ethdebug": {
"contract": {
"definition": {
"source": {
"id": 0
}
},
"name": "GreeterBase"
}
// "environment": "create" <- missing
// "instructions": [] <- missing
}
},
"deployedBytecode": {
"ethdebug": {
"contract": {
"definition": {
"source": {
"id": 0
}
},
"name": "GreeterBase"
}
// "environment": "call" <- missing
// "instructions": [] <- missing
}
}
},
"ir": "",
"irOptimized": ""
}
},
"interface.sol": {
"IGreeter": {
"evm": {
"bytecode": {
"ethdebug": {
"contract": {
"definition": {
"source": {
"id": 1
}
},
"name": "IGreeter"
}
// "environment": "create" <- missing
// "instructions": [] <- missing
}
},
"deployedBytecode": {
"ethdebug": {
"contract": {
"definition": {
"source": {
"id": 1
}
},
"name": "IGreeter"
}
// "environment": "call" <- missing
// "instructions": [] <- missing
}
}
},
"ir": "",
"irOptimized": ""
}
}
},
"ethdebug": {
"compilation": {
"compiler": {
"name": "solc",
"version": "0.8.29+commit.ab55807c.Linux.g++"
},
"sources": [
{
"id": 0,
"path": "contract.sol"
},
{
"id": 1,
"path": "interface.sol"
}
]
}
},
"sources": {
"contract.sol": {
"id": 0
},
"interface.sol": {
"id": 1
}
}
}