Skip to content

Commit e8ddf75

Browse files
committed
Update handler spec to reflect response restructuring and new semantics
1 parent 5c90dfe commit e8ddf75

File tree

1 file changed

+36
-38
lines changed

1 file changed

+36
-38
lines changed

docs/handler-spec.md

Lines changed: 36 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -24,40 +24,32 @@ Handlers communicate with the test runner via **stdin/stdout**:
2424
**Fields:**
2525
- `id` (string, required): Unique identifier for this request
2626
- `method` (string, required): The operation to perform. Each unique method must be implemented by the handler to exercise the corresponding binding API operation.
27-
- `params` (object, required): Method-specific parameters (can be `null` or `{}`)
27+
- `params` (object, optional): Method-specific parameters
2828

2929
### Response
3030

3131
```json
3232
{
3333
"id": "unique-request-id",
34-
"success": { /* method-specific result */ }
35-
}
36-
```
37-
38-
**Success response fields:**
39-
- `id` (string, required): Must match the request ID
40-
- `success` (any, required): Method-specific result data. Must be present on success (can be empty `{}`)
41-
- `error` (null or omitted): Must not be present on success
42-
43-
### Error Response
44-
45-
```json
46-
{
47-
"id": "unique-request-id",
34+
"result": null,
4835
"error": {
49-
"type": "error_category",
50-
"variant": "specific_error"
36+
"code": {
37+
"type": "error_type",
38+
"member": "ERROR_MEMBER_NAME"
39+
}
5140
}
5241
}
5342
```
5443

55-
**Error response fields:**
44+
**Fields:**
5645
- `id` (string, required): Must match the request ID
57-
- `success` (null or omitted): Must not be present on error
58-
- `error` (object, required): Error details
59-
- `type` (string, required): Error category/type
60-
- `variant` (string, optional): Specific error variant within the type. Whether the runner expects this field depends on the specific test case
46+
- `result` (any, optional): The return value, or `null` for void/nullptr operations. Must be `null` on error
47+
- `error` (object, optional): Error details. Must be `null` on success. An empty object `{}` is used to indicate an error is raised without further details, it is NOT equivalent to `null`
48+
- `code` (object, optional): Error code details
49+
- `type` (string, required): Error type (e.g., "btck_ScriptVerifyStatus")
50+
- `member` (string, required): Specific error member (e.g., "ERROR_INVALID_FLAGS_COMBINATION")
51+
52+
**Note:** Throughout this protocol, an omitted field is semantically equivalent to `null`.
6153

6254
## Handler Requirements
6355

@@ -74,43 +66,49 @@ The conformance tests are organized into suites, each testing a specific aspect
7466
### Script Verification Success Cases
7567
**File:** [`script_verify_success.json`](../testdata/script_verify_success.json)
7668

77-
Tests valid Bitcoin script verification scenarios across different transaction types.
69+
Test cases where the script verification operation executes successfully and returns a boolean result (true for valid scripts, false for invalid scripts).
7870

79-
**Method:** `script_pubkey.verify`
71+
**Method:** `btck_script_pubkey_verify`
8072

8173
**Expected Response Format:**
8274
```json
8375
{
8476
"id": "test-id",
85-
"success": {}
77+
"result": true
78+
}
79+
```
80+
or
81+
```json
82+
{
83+
"id": "test-id",
84+
"result": false
8685
}
8786
```
8887

8988
### Script Verification Error Cases
9089
**File:** [`script_verify_errors.json`](../testdata/script_verify_errors.json)
9190

92-
Tests error handling for invalid script verification scenarios.
91+
Test cases where the verification operation fails to determine validity of the script due to bad user input.
9392

94-
**Method:** `script_pubkey.verify`
93+
**Method:** `btck_script_pubkey_verify`
9594

9695
**Expected Response Format:**
9796
```json
9897
{
9998
"id": "test-id",
99+
"result": null,
100100
"error": {
101-
"type": "ScriptVerify",
102-
"variant": "ErrorVariant"
101+
"code": {
102+
"type": "btck_ScriptVerifyStatus",
103+
"member": "ERROR_MEMBER_NAME"
104+
}
103105
}
104106
}
105107
```
106108

107-
**Error Variants:**
109+
**Error Members:**
108110

109-
| Variant | Description |
110-
|---------|-------------|
111-
| `TxInputIndex` | The specified input index is out of bounds. The `input_index` parameter is greater than or equal to the number of inputs in the transaction. |
112-
| `InvalidFlags` | Invalid verification flags were provided. The flags parameter contains bits that don't correspond to any defined verification flag. |
113-
| `InvalidFlagsCombination` | Invalid or inconsistent verification flags were provided. This occurs when the supplied `script_verify_flags` combination violates internal consistency rules. |
114-
| `SpentOutputsMismatch` | The spent_outputs array length doesn't match the input count. When spent_outputs is non-empty, it must contain exactly one output for each input in the transaction. |
115-
| `SpentOutputsRequired` | Spent outputs are required but were not provided. |
116-
| `Invalid` | Script verification failed. |
111+
| Member | Description |
112+
|--------|-------------|
113+
| `ERROR_INVALID_FLAGS_COMBINATION` | Invalid or inconsistent verification flags were provided. This occurs when the supplied `script_verify_flags` combination violates internal consistency rules. |
114+
| `ERROR_SPENT_OUTPUTS_REQUIRED` | Spent outputs are required but were not provided (e.g., for Taproot verification). |

0 commit comments

Comments
 (0)