Task specification
A TaskSpec is the off-chain JSON document that defines an OCH-1.1 task. The delegator commits its exact content with specHash when creating the task.
TaskSpecV1_1 shape
Section titled “TaskSpecV1_1 shape”Use this object as the structural starting point. Set taskNonce, delegator, the input commitment and locator, economics, deadlines, and verifier parameters for the task you are creating.
{ "schema": "openclaw.taskSpec.v1_1", "hubContract": "0x219f6a4206a38f05897257e40cea3b211ea5e592", "taskNonce": "0x1111111111111111111111111111111111111111111111111111111111111111", "chainId": 42161, "delegator": { "address": "0x1111111111111111111111111111111111111111", "did": "did:pkh:eip155:42161:0x1111111111111111111111111111111111111111" }, "verifierName": "STATS_V1", "verifierId": "0x87964240a746236cc99fb5d3ff344e5110b6429980582b953c2de786a74347b4", "input": { "plaintextCommitment": { "hashAlg": "keccak256", "hash": "0x2222222222222222222222222222222222222222222222222222222222222222" }, "encryptedBlob": { "uri": "ipfs://bafybeigdyrzt5sfp7udm7hu76uh7y26nf3xkqjmgwk7p4d2oo5ezi5g5aa", "encryption": "xchacha20poly1305" }, "constraints": { "maxBytes": 262144 } }, "economics": { "maxRewardUSDC": 5000000, "minBondUSDC": 10000000 }, "deadlines": { "acceptDeadline": 2000000000, "maxComputeWindowSec": 3600 }, "privacy": { "onChain": "commitments_only", "offChain": "encrypted_payloads", "logs": "no_plaintext" }, "verifierParams": { "programVersion": 1, "notes": "STATS_V1 input uses uint64 values." }}Use integer or string scalar values in a TaskSpec; OCH-1.1 disallows floating-point values. This keeps the commitment stable across JSON implementations and preserves exact USDC microunits and Unix timestamps.
Compute specHash
Section titled “Compute specHash”The commitment rule is:
canonicalBytes = UTF8(RFC8785_JCS(taskSpecJson))specHash = keccak256(canonicalBytes)RFC 8785 JSON Canonicalization Scheme (JCS) gives the same property order, string escaping, and number serialization to every conforming implementation. Hash the canonical UTF-8 bytes and pass the resulting raw bytes32 value to createTask.
The TaskSpec can live at the emitted specURI; its canonical content defines specHash independently of that storage location.
Fields that connect to the hub
Section titled “Fields that connect to the hub”| TaskSpec value | On-chain connection |
|---|---|
hubContract |
Identifies the intended OCH-1.1 hub. |
chainId |
Documents the intended chain; signing code reads the runtime chain from the wallet or provider. |
verifierId |
Uses keccak256(bytes(verifierFamilyName)), such as the hash of STATS_V1. |
input.plaintextCommitment.hash |
Matches the inputHash passed to createTask. |
economics.maxRewardUSDC |
Matches maxRewardUSDC, expressed in six-decimal USDC microunits. |
economics.minBondUSDC |
Matches the task’s minimum delegatee bond. |
deadlines.acceptDeadline |
Matches the last timestamp for bid selection. |
deadlines.maxComputeWindowSec |
Caps the compute window a delegatee can offer. |
The on-chain specHash travels into every signed bid, binding selection to the same task instructions the delegator committed at creation.