{
  "id": 7979,
  "title": "EIP-7979: Call and Return Opcodes for the EVM",
  "status": "Draft",
  "type": "Standards Track",
  "category": "Core",
  "summary": "Introduces instructions to call and return from subroutines, which are missing from the EVM.  This lets compilers generate code with static control flow, which allows for more performant clients and quadradictally more efficient static analysis tools",
  "impacts": [
    "Increased security and more performant smart contract execution.",
    "Better tools.  Especially, better static analysis and formal verification.",
    "No direct impact",
    "Compilers must produce static, validated EVM code.",
    "Some Layer 2 and EVM-compatible chains could benefit from more performant client.",
    "No direct impact, but enables more clients to implement performance gains",
    "No changes required for consensus layer implementations.",
    "Implementation of the instructions and validation is straightforward, and clients can better optimize their execution of validated code.",
    "Makes static EVM control flow possible, which static analysis people have been requesting for many years.",
    "Static control flow can make static analysis and formal verification of EVM code quadratically more efficient.",
    "Static control flow makes linear-time translators of EVM code possible, including one-pass compilers to machine code and RISC-V.",
    "Clients can validate that deployed code cannot execute invalid instructions, jump to invalid locations, or misuse the stack.",
    "Maintains backwards compatibility, enabling a smooth transition.  Tools and developers can take up the new features as they become available."
  ],
  "discussion_url": "https://ethereum-magicians.org/t/eip-7951-call-and-return-opcodes-for-the-evm/24615",
  "source_markdown_url": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-7979.md",
  "canonical_url": "/latest/eips/7979.json",
  "markdown_url": "/latest/eips/7979.md",
  "citations": [
    {
      "recordId": "eip-7979",
      "artifactPath": "normalized/7979.json",
      "url": "/records/proposal/eip-7979/normalized/7979.json",
      "label": "EIP-7979: Call and Return Opcodes for the EVM",
      "snippet": "Introduces instructions to call and return from subroutines, which are missing from the EVM.  This lets compilers generate code with static control flow, which allows for more performant clients and quadradictally more e"
    }
  ]
}
