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.
Selects an ABI function, encodes its arguments, and builds one step for ordered, non-atomic PROGRAM execution.
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"}]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.
| Name | Type | Use |
|---|---|---|
sender | ADDRESS Account exposed as the call sender. | requiredpositional |
target | ADDRESS Contract called by the step. | requiredpositional |
value | UINT256 Exact UINT256 native-token value, in Wei, sent by the call. | requiredpositional |
gas_limit | UBIGINT UBIGINT gas limit; values greater than INT64_MAX are rejected. | requiredpositional |
abi | JSON Non-NULL JSON ABI used to select a function and encode calldata. | requiredpositional |
| 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.
Construction fails for malformed ABI, NULL arguments, missing or incompatible functions, ambiguous overloads, argument-count mismatches, or values that cannot be ABI-encoded.
PROGRAM executes steps in list order without atomic rollback and stops after the first unsuccessful step.
execute_contract(ADDRESS, ADDRESS, UINT256, UBIGINT, CALL_CONTEXT, JSON, VARCHAR, ...args) # Selects and ABI-encodes one contract call step with explicit CALL_CONTEXT.
| Name | Type | Use |
|---|---|---|
sender | ADDRESS Account exposed as the call sender. | requiredpositional |
target | ADDRESS Contract called by the step. | requiredpositional |
value | UINT256 Exact UINT256 native-token value, in Wei, sent by the call. | requiredpositional |
gas_limit | UBIGINT UBIGINT gas limit; values greater than INT64_MAX are rejected. | requiredpositional |
context | CALL_CONTEXT Non-NULL CALL_CONTEXT supplying gas price, access list, and blob versioned hashes. | requiredpositional |
| Name | Type |
|---|---|
step | STEP |
Contextual ABI call STEP. Returns an ABI-encoded STEP carrying the supplied CALL_CONTEXT.
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"}]