Invocation contexts
An invoke context marks an instruction that enters a function. The schema distinguishes three kinds of invocation — internal calls (via JUMP), external message calls (CALL/DELEGATECALL/ STATICCALL), and contract creations (CREATE/CREATE2) — each with fields appropriate to the call mechanism.
All variants extend the function identity schema and may include pointers to the call target, arguments, gas, value, and input data as applicable. See Tracing execution for worked examples showing how debuggers use invoke and return contexts to reconstruct call stacks.
Pointer evaluation and instruction placement
An instruction's context describes what is known following that instruction's execution: the fact that a function was invoked holds from that point forward. Pointers within the context reference the machine state at the instruction's trace step — the state a debugger observes when it encounters the instruction.
For internal calls, this context is typically placed on the callee's entry JUMPDEST rather than the caller's JUMP. JUMP consumes its destination operand from the stack; at the entry JUMPDEST, the remaining stack (return address followed by arguments) is stable and directly addressable.
For external calls and contract creations, this context marks the CALL/DELEGATECALL/STATICCALL/CREATE/CREATE2 instruction itself, where the call parameters are visible on the stack.
- Explore
- View source
- Playground
- YAML
- JSON
$schema: "https://json-schema.org/draft/2020-12/schema"
$id: "schema:ethdebug/format/program/context/function/invoke"
title: ethdebug/format/program/context/function/invoke
description: |
This context indicates that the marked instruction is
associated with a function invocation. The invocation is one
of three kinds: an internal call via JUMP, an external message
call (CALL / DELEGATECALL / STATICCALL), or a contract
creation (CREATE / CREATE2).
Extends the function identity schema with kind-specific fields
such as call targets, gas, value, and input data.
Per the **ethdebug/format/program/instruction** schema, an
instruction's context describes what is known following that
instruction's execution: the context's semantic facts (e.g.,
"a function was invoked") hold from that point forward.
Pointers within the context reference the machine state at
the instruction's trace step, which is the state a debugger
observes when it encounters the instruction.
For internal calls, this context is typically placed on the
callee's entry JUMPDEST rather than the caller's JUMP, because
JUMP consumes its destination operand from the stack. At the
entry JUMPDEST the remaining stack (return address, arguments)
is stable and directly addressable.
For external calls and contract creations, this context marks
the CALL/DELEGATECALL/STATICCALL/CREATE/CREATE2 instruction
itself, where the call parameters are visible on the stack.
type: object
properties:
invoke:
type: object
title: Function invocation
description: |
Describes the function invocation associated with this
context. Must indicate exactly one invocation kind: `jump`
for an internal call, `message` for an external call, or
`create` for a contract creation.
$ref: "schema:ethdebug/format/program/context/function"
allOf:
- oneOf:
- required: [jump]
- required: [message]
- required: [create]
- if:
required: [jump]
then:
$ref: "#/$defs/InternalCall"
- if:
required: [message]
then:
$ref: "#/$defs/ExternalCall"
- if:
required: [create]
then:
$ref: "#/$defs/ContractCreation"
unevaluatedProperties: false
required:
- invoke
$defs:
InternalCall:
title: Internal call
description: |
An internal function call within the same contract. This
context is typically placed on the callee's entry JUMPDEST;
the caller's JUMP has already consumed the destination from
the stack, so pointer slot values reflect the post-JUMP
layout.
type: object
properties:
jump:
description: |
Indicates this is an internal function call (JUMP/JUMPI).
const: true
target:
type: object
title: Invocation target
description: |
Pointer to the target of the invocation. For internal
calls, this typically points to a code location.
Optional: may be omitted when there is no meaningful
target pointer to record, e.g., at the first
instruction of an inlined function body where the
inlining pass has elided the JUMP that would normally
carry this pointer. The callee identity
(`identifier`, `declaration`, `type`) is still
meaningful in this case.
properties:
pointer:
$ref: "schema:ethdebug/format/pointer"
required:
- pointer
additionalProperties: false
arguments:
type: object
title: Function arguments
description: |
Pointer to the arguments for an internal function call.
properties:
pointer:
$ref: "schema:ethdebug/format/pointer"
required:
- pointer
additionalProperties: false
required: [jump]
ExternalCall:
title: External call
description: |
An external message call to another contract via CALL,
DELEGATECALL, or STATICCALL. Set `delegate` or `static` to
`true` to indicate the call variant; if neither is present
the call is a regular CALL.
type: object
properties:
message:
description: |
Indicates this is an external message call (CALL,
DELEGATECALL, or STATICCALL).
const: true
target:
type: object
title: Invocation target
description: |
Pointer to the target of the invocation. For external
calls, this points to the address and/or selector
being called.
properties:
pointer:
$ref: "schema:ethdebug/format/pointer"
required:
- pointer
additionalProperties: false
gas:
type: object
title: Gas allocation
description: |
Pointer to the gas allocated for the external call.
properties:
pointer:
$ref: "schema:ethdebug/format/pointer"
required:
- pointer
additionalProperties: false
value:
type: object
title: ETH value
description: |
Pointer to the amount of ETH being sent with the call.
properties:
pointer:
$ref: "schema:ethdebug/format/pointer"
required:
- pointer
additionalProperties: false
input:
type: object
title: Call input data
description: |
Pointer to the input data for the external call.
properties:
pointer:
$ref: "schema:ethdebug/format/pointer"
required:
- pointer
additionalProperties: false
delegate:
description: |
Indicates this external call is a DELEGATECALL.
const: true
static:
description: |
Indicates this external call is a STATICCALL.
const: true
not:
description: Only one of `delegate` and `static` can be set at a time.
required: [delegate, static]
required: [message, target]
ContractCreation:
title: Contract creation
description: |
A contract creation via CREATE or CREATE2. The presence
of `salt` distinguishes CREATE2 from CREATE.
type: object
properties:
create:
description: |
Indicates this is a contract creation operation
(CREATE or CREATE2).
const: true
value:
type: object
title: ETH value
description: |
Pointer to the amount of ETH being sent with the
creation.
properties:
pointer:
$ref: "schema:ethdebug/format/pointer"
required:
- pointer
additionalProperties: false
salt:
type: object
title: CREATE2 salt
description: |
Pointer to the salt value for CREATE2. Its presence
implies this is a CREATE2 operation.
properties:
pointer:
$ref: "schema:ethdebug/format/pointer"
required:
- pointer
additionalProperties: false
input:
type: object
title: Creation bytecode
description: |
Pointer to the creation bytecode for the new contract.
properties:
pointer:
$ref: "schema:ethdebug/format/pointer"
required:
- pointer
additionalProperties: false
required: [create]
examples:
# -----------------------------------------------------------
# Internal call: transfer(address, uint256)
# -----------------------------------------------------------
# This context would mark the JUMPDEST at the entry of the
# `transfer` function. The caller's JUMP has consumed the
# destination from the stack, leaving (top first):
#
# slot 0: return label
# slot 1: first argument (`to`)
# slot 2: second argument (`amount`)
#
# The `target` pointer identifies the function's entry point
# in the bytecode; `arguments` uses a group to name each
# argument's stack position.
- invoke:
identifier: "transfer"
declaration:
source:
id: 0
range:
offset: 128
length: 95
type:
id: 7
jump: true
target:
pointer:
location: code
offset: "0x100"
length: 1
arguments:
pointer:
group:
- name: "to"
location: stack
slot: 1
- name: "amount"
location: stack
slot: 2
# -----------------------------------------------------------
# Inlined internal call: no target pointer
# -----------------------------------------------------------
# When the compiler inlines a function, the JUMP that would
# normally carry the invoke context has been elided — there
# is no physical call instruction and no code target to
# point at. The invoke context still records the callee's
# identity so the debugger can maintain a source-level call
# stack, and a `transform: ["inline"]` context (typically
# via `gather`) annotates the inlining.
- invoke:
identifier: "transfer"
declaration:
source:
id: 0
range:
offset: 128
length: 95
jump: true
# -----------------------------------------------------------
# External CALL: token.balanceOf(account)
# -----------------------------------------------------------
# This context marks the CALL instruction. Stack-based
# pointers reference the pre-execution state visible in
# the trace step (CALL consumes all stack operands):
#
# slot 0: gas to forward
# slot 1: target contract address
# slot 2: value (0 — balanceOf is non-payable)
#
# The ABI-encoded calldata has already been written to
# memory at 0x80:
#
# 0x80..0x83: function selector (4 bytes)
# 0x84..0xa3: abi-encoded `account` (32 bytes)
- invoke:
identifier: "balanceOf"
message: true
target:
pointer:
location: stack
slot: 1
gas:
pointer:
location: stack
slot: 0
value:
pointer:
location: stack
slot: 2
input:
pointer:
group:
- name: "selector"
location: memory
offset: "0x80"
length: 4
- name: "arguments"
location: memory
offset: "0x84"
length: "0x20"
# -----------------------------------------------------------
# DELEGATECALL: proxy forwarding calldata
# -----------------------------------------------------------
# This context marks a DELEGATECALL instruction in a proxy
# contract. The call executes the implementation's code
# within the proxy's storage context. Stack-based pointers
# reference the pre-execution state (DELEGATECALL consumes
# all stack operands):
#
# slot 0: gas
# slot 1: implementation address
#
# The original calldata has been copied into memory:
#
# 0x80..0xe3: forwarded calldata (100 bytes)
- invoke:
message: true
delegate: true
target:
pointer:
location: stack
slot: 1
gas:
pointer:
location: stack
slot: 0
input:
pointer:
location: memory
offset: "0x80"
length: "0x64"
# -----------------------------------------------------------
# CREATE2: deploying a child contract
# -----------------------------------------------------------
# This context marks the CREATE2 instruction. Stack-based
# pointers reference the pre-execution state (CREATE2
# consumes all stack operands). The EVM stack layout for
# CREATE2 (top first):
#
# slot 0: value (ETH to send to the new contract)
# slot 1: offset (memory offset of init code)
# slot 2: length (byte length of init code)
# slot 3: salt (for deterministic address derivation)
#
# The init code has been placed in memory:
#
# 0x80..0x027f: creation bytecode (512 bytes)
- invoke:
create: true
value:
pointer:
location: stack
slot: 0
salt:
pointer:
location: stack
slot: 3
input:
pointer:
location: memory
offset: "0x80"
length: "0x200"
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "schema:ethdebug/format/program/context/function/invoke",
"title": "ethdebug/format/program/context/function/invoke",
"description": "This context indicates that the marked instruction is\nassociated with a function invocation. The invocation is one\nof three kinds: an internal call via JUMP, an external message\ncall (CALL / DELEGATECALL / STATICCALL), or a contract\ncreation (CREATE / CREATE2).\n\nExtends the function identity schema with kind-specific fields\nsuch as call targets, gas, value, and input data.\n\nPer the **ethdebug/format/program/instruction** schema, an\ninstruction's context describes what is known following that\ninstruction's execution: the context's semantic facts (e.g.,\n\"a function was invoked\") hold from that point forward.\nPointers within the context reference the machine state at\nthe instruction's trace step, which is the state a debugger\nobserves when it encounters the instruction.\n\nFor internal calls, this context is typically placed on the\ncallee's entry JUMPDEST rather than the caller's JUMP, because\nJUMP consumes its destination operand from the stack. At the\nentry JUMPDEST the remaining stack (return address, arguments)\nis stable and directly addressable.\n\nFor external calls and contract creations, this context marks\nthe CALL/DELEGATECALL/STATICCALL/CREATE/CREATE2 instruction\nitself, where the call parameters are visible on the stack.\n",
"type": "object",
"properties": {
"invoke": {
"type": "object",
"title": "Function invocation",
"description": "Describes the function invocation associated with this\ncontext. Must indicate exactly one invocation kind: `jump`\nfor an internal call, `message` for an external call, or\n`create` for a contract creation.\n",
"$ref": "schema:ethdebug/format/program/context/function",
"allOf": [
{
"oneOf": [
{
"required": [
"jump"
]
},
{
"required": [
"message"
]
},
{
"required": [
"create"
]
}
]
},
{
"if": {
"required": [
"jump"
]
},
"then": {
"$ref": "#/$defs/InternalCall"
}
},
{
"if": {
"required": [
"message"
]
},
"then": {
"$ref": "#/$defs/ExternalCall"
}
},
{
"if": {
"required": [
"create"
]
},
"then": {
"$ref": "#/$defs/ContractCreation"
}
}
],
"unevaluatedProperties": false
}
},
"required": [
"invoke"
],
"$defs": {
"InternalCall": {
"title": "Internal call",
"description": "An internal function call within the same contract. This\ncontext is typically placed on the callee's entry JUMPDEST;\nthe caller's JUMP has already consumed the destination from\nthe stack, so pointer slot values reflect the post-JUMP\nlayout.\n",
"type": "object",
"properties": {
"jump": {
"description": "Indicates this is an internal function call (JUMP/JUMPI).\n",
"const": true
},
"target": {
"type": "object",
"title": "Invocation target",
"description": "Pointer to the target of the invocation. For internal\ncalls, this typically points to a code location.\nOptional: may be omitted when there is no meaningful\ntarget pointer to record, e.g., at the first\ninstruction of an inlined function body where the\ninlining pass has elided the JUMP that would normally\ncarry this pointer. The callee identity\n(`identifier`, `declaration`, `type`) is still\nmeaningful in this case.\n",
"properties": {
"pointer": {
"$ref": "schema:ethdebug/format/pointer"
}
},
"required": [
"pointer"
],
"additionalProperties": false
},
"arguments": {
"type": "object",
"title": "Function arguments",
"description": "Pointer to the arguments for an internal function call.\n",
"properties": {
"pointer": {
"$ref": "schema:ethdebug/format/pointer"
}
},
"required": [
"pointer"
],
"additionalProperties": false
}
},
"required": [
"jump"
]
},
"ExternalCall": {
"title": "External call",
"description": "An external message call to another contract via CALL,\nDELEGATECALL, or STATICCALL. Set `delegate` or `static` to\n`true` to indicate the call variant; if neither is present\nthe call is a regular CALL.\n",
"type": "object",
"properties": {
"message": {
"description": "Indicates this is an external message call (CALL,\nDELEGATECALL, or STATICCALL).\n",
"const": true
},
"target": {
"type": "object",
"title": "Invocation target",
"description": "Pointer to the target of the invocation. For external\ncalls, this points to the address and/or selector\nbeing called.\n",
"properties": {
"pointer": {
"$ref": "schema:ethdebug/format/pointer"
}
},
"required": [
"pointer"
],
"additionalProperties": false
},
"gas": {
"type": "object",
"title": "Gas allocation",
"description": "Pointer to the gas allocated for the external call.\n",
"properties": {
"pointer": {
"$ref": "schema:ethdebug/format/pointer"
}
},
"required": [
"pointer"
],
"additionalProperties": false
},
"value": {
"type": "object",
"title": "ETH value",
"description": "Pointer to the amount of ETH being sent with the call.\n",
"properties": {
"pointer": {
"$ref": "schema:ethdebug/format/pointer"
}
},
"required": [
"pointer"
],
"additionalProperties": false
},
"input": {
"type": "object",
"title": "Call input data",
"description": "Pointer to the input data for the external call.\n",
"properties": {
"pointer": {
"$ref": "schema:ethdebug/format/pointer"
}
},
"required": [
"pointer"
],
"additionalProperties": false
},
"delegate": {
"description": "Indicates this external call is a DELEGATECALL.\n",
"const": true
},
"static": {
"description": "Indicates this external call is a STATICCALL.\n",
"const": true
}
},
"not": {
"description": "Only one of `delegate` and `static` can be set at a time.",
"required": [
"delegate",
"static"
]
},
"required": [
"message",
"target"
]
},
"ContractCreation": {
"title": "Contract creation",
"description": "A contract creation via CREATE or CREATE2. The presence\nof `salt` distinguishes CREATE2 from CREATE.\n",
"type": "object",
"properties": {
"create": {
"description": "Indicates this is a contract creation operation\n(CREATE or CREATE2).\n",
"const": true
},
"value": {
"type": "object",
"title": "ETH value",
"description": "Pointer to the amount of ETH being sent with the\ncreation.\n",
"properties": {
"pointer": {
"$ref": "schema:ethdebug/format/pointer"
}
},
"required": [
"pointer"
],
"additionalProperties": false
},
"salt": {
"type": "object",
"title": "CREATE2 salt",
"description": "Pointer to the salt value for CREATE2. Its presence\nimplies this is a CREATE2 operation.\n",
"properties": {
"pointer": {
"$ref": "schema:ethdebug/format/pointer"
}
},
"required": [
"pointer"
],
"additionalProperties": false
},
"input": {
"type": "object",
"title": "Creation bytecode",
"description": "Pointer to the creation bytecode for the new contract.\n",
"properties": {
"pointer": {
"$ref": "schema:ethdebug/format/pointer"
}
},
"required": [
"pointer"
],
"additionalProperties": false
}
},
"required": [
"create"
]
}
},
"examples": [
{
"invoke": {
"identifier": "transfer",
"declaration": {
"source": {
"id": 0
},
"range": {
"offset": 128,
"length": 95
}
},
"type": {
"id": 7
},
"jump": true,
"target": {
"pointer": {
"location": "code",
"offset": "0x100",
"length": 1
}
},
"arguments": {
"pointer": {
"group": [
{
"name": "to",
"location": "stack",
"slot": 1
},
{
"name": "amount",
"location": "stack",
"slot": 2
}
]
}
}
}
},
{
"invoke": {
"identifier": "transfer",
"declaration": {
"source": {
"id": 0
},
"range": {
"offset": 128,
"length": 95
}
},
"jump": true
}
},
{
"invoke": {
"identifier": "balanceOf",
"message": true,
"target": {
"pointer": {
"location": "stack",
"slot": 1
}
},
"gas": {
"pointer": {
"location": "stack",
"slot": 0
}
},
"value": {
"pointer": {
"location": "stack",
"slot": 2
}
},
"input": {
"pointer": {
"group": [
{
"name": "selector",
"location": "memory",
"offset": "0x80",
"length": 4
},
{
"name": "arguments",
"location": "memory",
"offset": "0x84",
"length": "0x20"
}
]
}
}
}
},
{
"invoke": {
"message": true,
"delegate": true,
"target": {
"pointer": {
"location": "stack",
"slot": 1
}
},
"gas": {
"pointer": {
"location": "stack",
"slot": 0
}
},
"input": {
"pointer": {
"location": "memory",
"offset": "0x80",
"length": "0x64"
}
}
}
},
{
"invoke": {
"create": true,
"value": {
"pointer": {
"location": "stack",
"slot": 0
}
},
"salt": {
"pointer": {
"location": "stack",
"slot": 3
}
},
"input": {
"pointer": {
"location": "memory",
"offset": "0x80",
"length": "0x200"
}
}
}
}
]
}
Internal call
An internal call represents a function call within the same contract. This context is typically placed on the callee's entry JUMPDEST; the caller's JUMP has already consumed the destination from the stack, so pointer slot values reflect the post-JUMP layout. The target points to a code location and arguments are passed on the stack.
The target field is optional. It may be omitted when there is no
meaningful code pointer to record — most notably at the first
instruction of an inlined function body, where the inlining pass
has elided the JUMP that would normally carry the target. The
callee identity (identifier, declaration, type) remains
meaningful in this case; a sibling transform: ["inline"] key
on the same context indicates that the call was inlined rather
than physically invoked.
- Explore
- View source
- Playground
- YAML
- JSON
title: Internal call
description: |
An internal function call within the same contract. This
context is typically placed on the callee's entry JUMPDEST;
the caller's JUMP has already consumed the destination from
the stack, so pointer slot values reflect the post-JUMP
layout.
type: object
properties:
jump:
description: |
Indicates this is an internal function call (JUMP/JUMPI).
const: true
target:
type: object
title: Invocation target
description: |
Pointer to the target of the invocation. For internal
calls, this typically points to a code location.
Optional: may be omitted when there is no meaningful
target pointer to record, e.g., at the first
instruction of an inlined function body where the
inlining pass has elided the JUMP that would normally
carry this pointer. The callee identity
(`identifier`, `declaration`, `type`) is still
meaningful in this case.
properties:
pointer:
$ref: "schema:ethdebug/format/pointer"
required:
- pointer
additionalProperties: false
arguments:
type: object
title: Function arguments
description: |
Pointer to the arguments for an internal function call.
properties:
pointer:
$ref: "schema:ethdebug/format/pointer"
required:
- pointer
additionalProperties: false
required: [ jump ]
{
"title": "Internal call",
"description": "An internal function call within the same contract. This\ncontext is typically placed on the callee's entry JUMPDEST;\nthe caller's JUMP has already consumed the destination from\nthe stack, so pointer slot values reflect the post-JUMP\nlayout.\n",
"type": "object",
"properties": {
"jump": {
"description": "Indicates this is an internal function call (JUMP/JUMPI).\n",
"const": true
},
"target": {
"type": "object",
"title": "Invocation target",
"description": "Pointer to the target of the invocation. For internal\ncalls, this typically points to a code location.\nOptional: may be omitted when there is no meaningful\ntarget pointer to record, e.g., at the first\ninstruction of an inlined function body where the\ninlining pass has elided the JUMP that would normally\ncarry this pointer. The callee identity\n(`identifier`, `declaration`, `type`) is still\nmeaningful in this case.\n",
"properties": {
"pointer": {
"$ref": "schema:ethdebug/format/pointer"
}
},
"required": [
"pointer"
],
"additionalProperties": false
},
"arguments": {
"type": "object",
"title": "Function arguments",
"description": "Pointer to the arguments for an internal function call.\n",
"properties": {
"pointer": {
"$ref": "schema:ethdebug/format/pointer"
}
},
"required": [
"pointer"
],
"additionalProperties": false
}
},
"required": [
"jump"
]
}
External call
An external call represents a call to another contract via CALL,
DELEGATECALL, or STATICCALL. The type of call may be indicated by
setting delegate or static to true. If neither flag is present,
the invocation represents a regular CALL.
- Explore
- View source
- Playground
- YAML
- JSON
title: External call
description: |
An external message call to another contract via CALL,
DELEGATECALL, or STATICCALL. Set `delegate` or `static` to
`true` to indicate the call variant; if neither is present
the call is a regular CALL.
type: object
properties:
message:
description: |
Indicates this is an external message call (CALL,
DELEGATECALL, or STATICCALL).
const: true
target:
type: object
title: Invocation target
description: |
Pointer to the target of the invocation. For external
calls, this points to the address and/or selector
being called.
properties:
pointer:
$ref: "schema:ethdebug/format/pointer"
required:
- pointer
additionalProperties: false
gas:
type: object
title: Gas allocation
description: |
Pointer to the gas allocated for the external call.
properties:
pointer:
$ref: "schema:ethdebug/format/pointer"
required:
- pointer
additionalProperties: false
value:
type: object
title: ETH value
description: |
Pointer to the amount of ETH being sent with the call.
properties:
pointer:
$ref: "schema:ethdebug/format/pointer"
required:
- pointer
additionalProperties: false
input:
type: object
title: Call input data
description: |
Pointer to the input data for the external call.
properties:
pointer:
$ref: "schema:ethdebug/format/pointer"
required:
- pointer
additionalProperties: false
delegate:
description: |
Indicates this external call is a DELEGATECALL.
const: true
static:
description: |
Indicates this external call is a STATICCALL.
const: true
not:
description: Only one of `delegate` and `static` can be set at a time.
required: [ delegate, static ]
required: [ message, target ]
{
"title": "External call",
"description": "An external message call to another contract via CALL,\nDELEGATECALL, or STATICCALL. Set `delegate` or `static` to\n`true` to indicate the call variant; if neither is present\nthe call is a regular CALL.\n",
"type": "object",
"properties": {
"message": {
"description": "Indicates this is an external message call (CALL,\nDELEGATECALL, or STATICCALL).\n",
"const": true
},
"target": {
"type": "object",
"title": "Invocation target",
"description": "Pointer to the target of the invocation. For external\ncalls, this points to the address and/or selector\nbeing called.\n",
"properties": {
"pointer": {
"$ref": "schema:ethdebug/format/pointer"
}
},
"required": [
"pointer"
],
"additionalProperties": false
},
"gas": {
"type": "object",
"title": "Gas allocation",
"description": "Pointer to the gas allocated for the external call.\n",
"properties": {
"pointer": {
"$ref": "schema:ethdebug/format/pointer"
}
},
"required": [
"pointer"
],
"additionalProperties": false
},
"value": {
"type": "object",
"title": "ETH value",
"description": "Pointer to the amount of ETH being sent with the call.\n",
"properties": {
"pointer": {
"$ref": "schema:ethdebug/format/pointer"
}
},
"required": [
"pointer"
],
"additionalProperties": false
},
"input": {
"type": "object",
"title": "Call input data",
"description": "Pointer to the input data for the external call.\n",
"properties": {
"pointer": {
"$ref": "schema:ethdebug/format/pointer"
}
},
"required": [
"pointer"
],
"additionalProperties": false
},
"delegate": {
"description": "Indicates this external call is a DELEGATECALL.\n",
"const": true
},
"static": {
"description": "Indicates this external call is a STATICCALL.\n",
"const": true
}
},
"not": {
"description": "Only one of `delegate` and `static` can be set at a time.",
"required": [
"delegate",
"static"
]
},
"required": [
"message",
"target"
]
}
Contract creation
A contract creation represents a CREATE or CREATE2 operation. The
presence of salt implies CREATE2.
- Explore
- View source
- Playground
- YAML
- JSON
title: Contract creation
description: |
A contract creation via CREATE or CREATE2. The presence
of `salt` distinguishes CREATE2 from CREATE.
type: object
properties:
create:
description: |
Indicates this is a contract creation operation
(CREATE or CREATE2).
const: true
value:
type: object
title: ETH value
description: |
Pointer to the amount of ETH being sent with the
creation.
properties:
pointer:
$ref: "schema:ethdebug/format/pointer"
required:
- pointer
additionalProperties: false
salt:
type: object
title: CREATE2 salt
description: |
Pointer to the salt value for CREATE2. Its presence
implies this is a CREATE2 operation.
properties:
pointer:
$ref: "schema:ethdebug/format/pointer"
required:
- pointer
additionalProperties: false
input:
type: object
title: Creation bytecode
description: |
Pointer to the creation bytecode for the new contract.
properties:
pointer:
$ref: "schema:ethdebug/format/pointer"
required:
- pointer
additionalProperties: false
required: [ create ]
{
"title": "Contract creation",
"description": "A contract creation via CREATE or CREATE2. The presence\nof `salt` distinguishes CREATE2 from CREATE.\n",
"type": "object",
"properties": {
"create": {
"description": "Indicates this is a contract creation operation\n(CREATE or CREATE2).\n",
"const": true
},
"value": {
"type": "object",
"title": "ETH value",
"description": "Pointer to the amount of ETH being sent with the\ncreation.\n",
"properties": {
"pointer": {
"$ref": "schema:ethdebug/format/pointer"
}
},
"required": [
"pointer"
],
"additionalProperties": false
},
"salt": {
"type": "object",
"title": "CREATE2 salt",
"description": "Pointer to the salt value for CREATE2. Its presence\nimplies this is a CREATE2 operation.\n",
"properties": {
"pointer": {
"$ref": "schema:ethdebug/format/pointer"
}
},
"required": [
"pointer"
],
"additionalProperties": false
},
"input": {
"type": "object",
"title": "Creation bytecode",
"description": "Pointer to the creation bytecode for the new contract.\n",
"properties": {
"pointer": {
"$ref": "schema:ethdebug/format/pointer"
}
},
"required": [
"pointer"
],
"additionalProperties": false
}
},
"required": [
"create"
]
}