Skip to content

EthDebug program instructions and environment are mandatory #15999

Open
@RaoulSchaffranek

Description

@RaoulSchaffranek

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
    }
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions