View this page as Markdown

execute_contract

Selects an ABI function, encodes its arguments, and builds one step for ordered, non-atomic PROGRAM execution.

Example

Local

WITH actors AS (
  SELECT
    '0x1000000000000000000000000000000000000001'::ADDRESS AS sender,
    '0x2000000000000000000000000000000000000002'::ADDRESS AS writer,
    '0x3000000000000000000000000000000000000003'::ADDRESS AS second_target
),
step_values AS (
  SELECT [
    execute_call(
      sender,
      writer,
      '0x000000000000000000000000000000000000000000000000000000000000002a'::BYTES,
      1::UINT256,
      100000::UBIGINT
    ),
    execute_contract(
      sender,
      second_target,
      0::UINT256,
      100000::UBIGINT,
      '[{"type":"function","name":"set","inputs":[{"name":"value","type":"uint256"}],"outputs":[]}]'::JSON,
      'set'::VARCHAR,
      7::UINT256
    )
  ] AS steps
  FROM actors
),
authored AS (
  SELECT steps, program(steps) AS program
  FROM step_values
)
SELECT
  len(steps)::INTEGER AS step_count,
  'raw,abi'::VARCHAR AS step_order,
  program IS NOT NULL AS runnable
FROM authored;
-- => [{"step_count":2,"step_order":"raw,abi","runnable":"true"}]

API reference

Exact signatures with descriptions, requirements, inputs, returns, and examples.

execute_contract(ADDRESS, ADDRESS, UINT256, UBIGINT, JSON, VARCHAR, ...args) #

Selects an ABI function, encodes its arguments, and builds one step for ordered, non-atomic PROGRAM execution.

Inputs

NameTypeUse
senderADDRESS

Account exposed as the call sender.

requiredpositional
targetADDRESS

Contract called by the step.

requiredpositional
valueUINT256

Exact UINT256 native-token value, in Wei, sent by the call.

requiredpositional
gas_limitUBIGINT

UBIGINT gas limit; values greater than INT64_MAX are rejected.

requiredpositional
abiJSON

Non-NULL JSON ABI used to select a function and encode calldata.

requiredpositional
Showing fewer

Returns

Name Type
step STEP

ABI call STEP. Returns a STEP with encoded calldata and zero gas price and empty access-list and blob-hash context.

Guidance

ABI validation

Construction fails for malformed ABI, NULL arguments, missing or incompatible functions, ambiguous overloads, argument-count mismatches, or values that cannot be ABI-encoded.

PROGRAM execution

PROGRAM executes steps in list order without atomic rollback and stops after the first unsuccessful step.

Additional overloads

execute_contract(ADDRESS, ADDRESS, UINT256, UBIGINT, CALL_CONTEXT, JSON, VARCHAR, ...args) #

Selects and ABI-encodes one contract call step with explicit CALL_CONTEXT.

Inputs

NameTypeUse
senderADDRESS

Account exposed as the call sender.

requiredpositional
targetADDRESS

Contract called by the step.

requiredpositional
valueUINT256

Exact UINT256 native-token value, in Wei, sent by the call.

requiredpositional
gas_limitUBIGINT

UBIGINT gas limit; values greater than INT64_MAX are rejected.

requiredpositional
contextCALL_CONTEXT

Non-NULL CALL_CONTEXT supplying gas price, access list, and blob versioned hashes.

requiredpositional
Showing fewer

Returns

Name Type
step STEP

Contextual ABI call STEP. Returns an ABI-encoded STEP carrying the supplied CALL_CONTEXT.

Examples

Local SQL

WITH actors AS (
  SELECT
    '0x1000000000000000000000000000000000000001'::ADDRESS AS sender,
    '0x2000000000000000000000000000000000000002'::ADDRESS AS writer,
    '0x3000000000000000000000000000000000000003'::ADDRESS AS second_target
),
inputs AS (
  SELECT
    *,
    call_context(
      1::UINT256,
      [{
        address: writer,
        storage_keys: [
          '0x0000000000000000000000000000000000000000000000000000000000000000'::BYTES32
        ]
      }],
      []::BYTES32[]
    ) AS context
  FROM actors
),
step_values AS (
  SELECT [
    execute_call(
      sender,
      writer,
      '0x000000000000000000000000000000000000000000000000000000000000002a'::BYTES,
      1::UINT256,
      100000::UBIGINT,
      context
    ),
    execute_contract(
      sender,
      second_target,
      0::UINT256,
      100000::UBIGINT,
      context,
      '[{"type":"function","name":"set","inputs":[{"name":"value","type":"uint256"}],"outputs":[]}]'::JSON,
      'set'::VARCHAR,
      7::UINT256
    )
  ] AS steps
  FROM inputs
),
authored AS (
  SELECT steps, program(steps) AS program
  FROM step_values
)
SELECT
  len(steps)::INTEGER AS step_count,
  'raw,abi'::VARCHAR AS step_order,
  program IS NOT NULL AS runnable
FROM authored;
-- => [{"step_count":2,"step_order":"raw,abi","runnable":"true"}]

Related functions

Category and tags

Category
Simulation
Tag
Simulate