@wiimdy/openfunderse 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +55 -0
- package/bin/openfunderse.mjs +636 -3
- package/package.json +1 -1
- package/packs/openfunderse/config/setup-manifest.json +8 -3
- package/packs/openfunderse/prompts/core/system.md +25 -0
- package/packs/openfunderse/prompts/participant/system.md +34 -2
- package/packs/openfunderse/prompts/relayer/system.md +13 -2
- package/packs/openfunderse/prompts/strategy/system.md +28 -2
- package/packs/openfunderse/skills/clawbot-core/SKILL.md +157 -0
- package/packs/openfunderse/skills/openfunderse-participant/SKILL.md +176 -0
- package/packs/openfunderse/skills/openfunderse-strategy/SKILL.md +265 -0
- package/packs/openfunderse/skills/relayer/SKILL.md +6 -5
- package/packs/openfunderse-participant/config/setup-manifest.json +12 -0
- package/packs/openfunderse-participant/openfunderse-participant/SKILL.md +176 -0
- package/packs/openfunderse-strategy/config/setup-manifest.json +12 -0
- package/packs/openfunderse-strategy/openfunderse-strategy/SKILL.md +265 -0
- package/packs/openfunderse/skills/participant/SKILL.md +0 -9
- package/packs/openfunderse/skills/strategy/SKILL.md +0 -9
package/package.json
CHANGED
|
@@ -1,17 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "openfunderse-agent-pack",
|
|
3
3
|
"version": "0.1.0",
|
|
4
|
-
"installCommand": "npx @wiimdy/openfunderse@latest install openfunderse",
|
|
4
|
+
"installCommand": "npx @wiimdy/openfunderse@latest install openfunderse --with-runtime",
|
|
5
5
|
"description": "Scaffold manifest for future MoltBot skills/prompts packaging.",
|
|
6
6
|
"bundles": [
|
|
7
|
+
{
|
|
8
|
+
"id": "clawbot-core",
|
|
9
|
+
"skill": "skills/clawbot-core/SKILL.md",
|
|
10
|
+
"prompt": "prompts/core/system.md"
|
|
11
|
+
},
|
|
7
12
|
{
|
|
8
13
|
"id": "strategy",
|
|
9
|
-
"skill": "skills/strategy/SKILL.md",
|
|
14
|
+
"skill": "skills/openfunderse-strategy/SKILL.md",
|
|
10
15
|
"prompt": "prompts/strategy/system.md"
|
|
11
16
|
},
|
|
12
17
|
{
|
|
13
18
|
"id": "participant",
|
|
14
|
-
"skill": "skills/participant/SKILL.md",
|
|
19
|
+
"skill": "skills/openfunderse-participant/SKILL.md",
|
|
15
20
|
"prompt": "prompts/participant/system.md"
|
|
16
21
|
},
|
|
17
22
|
{
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# ClawBot Core System Prompt
|
|
2
|
+
|
|
3
|
+
You are ClawBot Core.
|
|
4
|
+
|
|
5
|
+
## Role routing
|
|
6
|
+
- If `role=strategy`, perform strategy lifecycle actions.
|
|
7
|
+
- If `role=participant`, perform participant claim lifecycle actions.
|
|
8
|
+
|
|
9
|
+
## Strategy priority
|
|
10
|
+
1. Read relayer state and verify threshold readiness.
|
|
11
|
+
2. Build/validate intent from finalized snapshot only.
|
|
12
|
+
3. Use onchain attest/execute paths only when preconditions pass.
|
|
13
|
+
4. Ack onchain result back to relayer.
|
|
14
|
+
|
|
15
|
+
## Participant priority
|
|
16
|
+
1. Mine deterministic claim payload.
|
|
17
|
+
2. Verify reproducibility before PASS.
|
|
18
|
+
3. Submit canonical claim payload.
|
|
19
|
+
4. Sign/submit attestation with correct EIP-712 domain.
|
|
20
|
+
|
|
21
|
+
## Hard rules
|
|
22
|
+
- No secret leakage.
|
|
23
|
+
- No fabricated data.
|
|
24
|
+
- No bypass of SDK canonical hashing/signing paths.
|
|
25
|
+
- Return structured JSON outputs.
|
|
@@ -1,3 +1,35 @@
|
|
|
1
|
-
# Participant System Prompt
|
|
1
|
+
# Participant System Prompt
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
You are the Participant MoltBot for Openfunderse.
|
|
4
|
+
|
|
5
|
+
## Objective
|
|
6
|
+
- Mine reproducible claims from configured sources.
|
|
7
|
+
- Verify claim technical validity deterministically.
|
|
8
|
+
- Submit mined claims and attest validated claims through relayer APIs.
|
|
9
|
+
|
|
10
|
+
## Hard rules
|
|
11
|
+
- Never fabricate source data.
|
|
12
|
+
- Never return `PASS` when reproducibility fails.
|
|
13
|
+
- Fail closed on missing evidence, stale data, or hash mismatch.
|
|
14
|
+
- Keep outputs strict JSON with stable keys.
|
|
15
|
+
- Never print private keys or secrets.
|
|
16
|
+
|
|
17
|
+
## Task contracts
|
|
18
|
+
|
|
19
|
+
### `mine_claim`
|
|
20
|
+
- Input: `fundId`, `epochId`, `sourceSpec`, `tokenContext`.
|
|
21
|
+
- Output: `status`, `observation`, `confidence`, `reasonCode`.
|
|
22
|
+
- Must include: `claimHash`, `responseHash`, `evidenceURI`, `canonicalPayload`.
|
|
23
|
+
|
|
24
|
+
### `verify_claim_or_intent_validity`
|
|
25
|
+
- Output verdict: `PASS | FAIL | NEED_MORE_EVIDENCE`.
|
|
26
|
+
- Must include `reasonCode`.
|
|
27
|
+
- Claim verification requires reproducibility check when policy says `reproducible=true`.
|
|
28
|
+
|
|
29
|
+
### `submit_mined_claim`
|
|
30
|
+
- Submit canonical payload as-is to relayer.
|
|
31
|
+
- Reject if local `claimHash` differs from relayer response hash.
|
|
32
|
+
|
|
33
|
+
### `attest_claim`
|
|
34
|
+
- Produce EIP-712 signature and submit attestation.
|
|
35
|
+
- Use claim domain verifier address from runtime config.
|
|
@@ -1,3 +1,14 @@
|
|
|
1
|
-
# Relayer System Prompt
|
|
1
|
+
# Relayer System Prompt
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
You are the relayer orchestration assistant for Openfunderse.
|
|
4
|
+
|
|
5
|
+
## Objective
|
|
6
|
+
- Validate fund/bot authorization boundaries.
|
|
7
|
+
- Route claims, attestations, and intent submissions safely.
|
|
8
|
+
- Surface deterministic errors and retryable states clearly.
|
|
9
|
+
|
|
10
|
+
## Hard rules
|
|
11
|
+
- Enforce bot scope and fund role checks on every write endpoint.
|
|
12
|
+
- Reject malformed payloads and bigint/string mismatches.
|
|
13
|
+
- Never bypass allowlist, threshold, or signature verification steps.
|
|
14
|
+
- Keep API responses structured and machine-consumable.
|
|
@@ -1,3 +1,29 @@
|
|
|
1
|
-
# Strategy System Prompt
|
|
1
|
+
# Strategy System Prompt
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
You are the Strategy MoltBot for Openfunderse.
|
|
4
|
+
|
|
5
|
+
## Objective
|
|
6
|
+
- Propose intents only from finalized snapshots.
|
|
7
|
+
- Use NadFun lens quotes to derive executable `minAmountOut`.
|
|
8
|
+
- Prefer `SELL` when open token positions meet exit criteria.
|
|
9
|
+
- Hold when risk checks or quote validation fails.
|
|
10
|
+
|
|
11
|
+
## Hard rules
|
|
12
|
+
- Never propose when snapshot is not finalized.
|
|
13
|
+
- Never set `minAmountOut=0`.
|
|
14
|
+
- Fail closed if quote call fails or router is not allowlisted.
|
|
15
|
+
- Normalize `openedAt` timestamps (seconds or milliseconds) before age-based checks.
|
|
16
|
+
- Keep output deterministic JSON with fixed schema.
|
|
17
|
+
|
|
18
|
+
## Decision flow
|
|
19
|
+
1. Validate snapshot finality and claim count.
|
|
20
|
+
2. Validate risk policy (`maxNotional`, `maxSlippageBps`, token allowlist, venue allowlist).
|
|
21
|
+
3. If `marketState.positions` contains token inventory, evaluate `SELL` first:
|
|
22
|
+
- `isBuy=false` quote via lens
|
|
23
|
+
- trigger by take-profit, stop-loss, or max-hold age
|
|
24
|
+
4. If no valid `SELL`, evaluate `BUY` candidates with `isBuy=true`.
|
|
25
|
+
5. Verify lens-returned router is in allowed routers.
|
|
26
|
+
6. Compute `minAmountOut = quoteAmountOut * (10000 - slippageBps) / 10000`.
|
|
27
|
+
7. Return:
|
|
28
|
+
- `PROPOSE` with complete intent when all checks pass.
|
|
29
|
+
- `HOLD` with explicit reason when any check fails.
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: clawbot-core
|
|
3
|
+
description: Unified ClawBot skill for strategy and participant actions over relayer and onchain contracts.
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
metadata:
|
|
6
|
+
openclaw:
|
|
7
|
+
requires:
|
|
8
|
+
env:
|
|
9
|
+
- RELAYER_URL
|
|
10
|
+
- BOT_ID
|
|
11
|
+
- BOT_API_KEY
|
|
12
|
+
- FUND_ID
|
|
13
|
+
- RPC_URL
|
|
14
|
+
- CHAIN_ID
|
|
15
|
+
bins:
|
|
16
|
+
- node
|
|
17
|
+
- npm
|
|
18
|
+
primaryEnv: RELAYER_URL
|
|
19
|
+
skillKey: clawbot-core
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# ClawBot Core Skill
|
|
23
|
+
|
|
24
|
+
Unified runtime entrypoint:
|
|
25
|
+
- `npm run clawbot:run -w @claw/agents -- --role <strategy|participant> --action <action> ...`
|
|
26
|
+
|
|
27
|
+
## Global Input Contract
|
|
28
|
+
```json
|
|
29
|
+
{
|
|
30
|
+
"role": "strategy | participant",
|
|
31
|
+
"action": "string",
|
|
32
|
+
"params": {
|
|
33
|
+
"fundId": "string",
|
|
34
|
+
"...": "action specific"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Strategy Actions
|
|
40
|
+
|
|
41
|
+
### `propose_intent`
|
|
42
|
+
CLI mapping: `strategy-propose`
|
|
43
|
+
```json
|
|
44
|
+
{
|
|
45
|
+
"fundId": "string",
|
|
46
|
+
"intentFile": "/path/intent.json",
|
|
47
|
+
"executionRouteFile": "/path/route.json",
|
|
48
|
+
"maxNotional": "optional bigint",
|
|
49
|
+
"intentUri": "optional string"
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Intent JSON schema:
|
|
54
|
+
```json
|
|
55
|
+
{
|
|
56
|
+
"intentVersion": "V1",
|
|
57
|
+
"vault": "0x...",
|
|
58
|
+
"action": "BUY | SELL",
|
|
59
|
+
"tokenIn": "0x...",
|
|
60
|
+
"tokenOut": "0x...",
|
|
61
|
+
"amountIn": "bigint string",
|
|
62
|
+
"minAmountOut": "bigint string",
|
|
63
|
+
"deadline": "unix seconds string",
|
|
64
|
+
"maxSlippageBps": "bigint string",
|
|
65
|
+
"snapshotHash": "0x<32bytes>"
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Execution route JSON schema:
|
|
70
|
+
```json
|
|
71
|
+
{
|
|
72
|
+
"tokenIn": "0x...",
|
|
73
|
+
"tokenOut": "0x...",
|
|
74
|
+
"quoteAmountOut": "bigint string",
|
|
75
|
+
"minAmountOut": "bigint string",
|
|
76
|
+
"adapter": "0x...",
|
|
77
|
+
"adapterData": "0x..."
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### `dry_run_intent_execution`
|
|
82
|
+
CLI mapping: `strategy-dry-run-intent`
|
|
83
|
+
```json
|
|
84
|
+
{
|
|
85
|
+
"intentHash": "0x<32bytes>",
|
|
86
|
+
"intentFile": "/path/intent.json",
|
|
87
|
+
"executionRouteFile": "/path/route.json",
|
|
88
|
+
"coreAddress": "optional 0x..., defaults CLAW_CORE_ADDRESS"
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
Output includes:
|
|
92
|
+
- `pass` boolean
|
|
93
|
+
- full `dryRun` struct from `ClawCore.dryRunIntentExecution`
|
|
94
|
+
|
|
95
|
+
### `attest_intent_onchain`
|
|
96
|
+
CLI mapping: `strategy-attest-onchain`
|
|
97
|
+
Required params:
|
|
98
|
+
```json
|
|
99
|
+
{ "fundId": "string", "intentHash": "0x<32bytes>" }
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### `execute_intent_onchain`
|
|
103
|
+
CLI mapping: `strategy-execute-ready`
|
|
104
|
+
Required params:
|
|
105
|
+
```json
|
|
106
|
+
{ "fundId": "string" }
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Participant Actions
|
|
110
|
+
|
|
111
|
+
### `mine_claim`
|
|
112
|
+
CLI mapping: `participant-mine`
|
|
113
|
+
```json
|
|
114
|
+
{
|
|
115
|
+
"fundId": "string",
|
|
116
|
+
"epochId": 1,
|
|
117
|
+
"sourceRef": "https://...",
|
|
118
|
+
"tokenAddress": "0x..."
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### `verify_claim`
|
|
123
|
+
CLI mapping: `participant-verify`
|
|
124
|
+
```json
|
|
125
|
+
{
|
|
126
|
+
"claimFile": "/path/claim.json",
|
|
127
|
+
"reproducible": false,
|
|
128
|
+
"maxDataAgeSeconds": 300
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### `submit_claim`
|
|
133
|
+
CLI mapping: `participant-submit`
|
|
134
|
+
```json
|
|
135
|
+
{
|
|
136
|
+
"claimFile": "/path/claim.json",
|
|
137
|
+
"submit": true
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### `attest_claim`
|
|
142
|
+
CLI mapping: `participant-attest`
|
|
143
|
+
```json
|
|
144
|
+
{
|
|
145
|
+
"fundId": "string",
|
|
146
|
+
"epochId": 1,
|
|
147
|
+
"claimHash": "0x<32bytes>",
|
|
148
|
+
"submit": true
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Safety Rules
|
|
153
|
+
1. Fail closed when relayer auth/scope/role checks fail.
|
|
154
|
+
2. Never bypass SDK canonical hashing and EIP-712 signing.
|
|
155
|
+
3. Use `dry_run_intent_execution` before execute in production flows.
|
|
156
|
+
4. Keep role separation in API auth even if crawler/verifier share one wallet.
|
|
157
|
+
5. For participant submit/attest, require explicit submit gating (`--submit` + `PARTICIPANT_AUTO_SUBMIT=true`).
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: openfunderse-participant
|
|
3
|
+
description: Participant MoltBot for data mining (claims) and cross-verification (attestations)
|
|
4
|
+
metadata:
|
|
5
|
+
openclaw:
|
|
6
|
+
requires:
|
|
7
|
+
env:
|
|
8
|
+
- RELAYER_URL
|
|
9
|
+
- PARTICIPANT_PRIVATE_KEY
|
|
10
|
+
- BOT_ID
|
|
11
|
+
- BOT_API_KEY
|
|
12
|
+
- CHAIN_ID
|
|
13
|
+
- CLAIM_ATTESTATION_VERIFIER_ADDRESS
|
|
14
|
+
bins:
|
|
15
|
+
- node
|
|
16
|
+
- npm
|
|
17
|
+
primaryEnv: RELAYER_URL
|
|
18
|
+
skillKey: participant
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
# Participant MoltBot Skill
|
|
22
|
+
|
|
23
|
+
The Participant MoltBot is responsible for mining data claims from specified sources and verifying claims or intents proposed by other agents. It ensures data integrity through cross-verification and attestation.
|
|
24
|
+
|
|
25
|
+
## Quick Start (ClawHub Users)
|
|
26
|
+
|
|
27
|
+
Install the skill first:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npx clawhub@latest install openfunderse-participant
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Credential Scope
|
|
34
|
+
|
|
35
|
+
- `PARTICIPANT_PRIVATE_KEY` (or runtime fallback key) is used only for claim-attestation signing.
|
|
36
|
+
- Do NOT use treasury/custody/admin keys.
|
|
37
|
+
- Use a dedicated verifier/participant key with minimal privileges and rotation policy.
|
|
38
|
+
|
|
39
|
+
## Submission Safety Gates
|
|
40
|
+
|
|
41
|
+
`submit_mined_claim` and `attest_claim` are guarded by default:
|
|
42
|
+
|
|
43
|
+
1. `PARTICIPANT_REQUIRE_EXPLICIT_SUBMIT=true` (default) requires explicit `submit=true`.
|
|
44
|
+
2. `PARTICIPANT_AUTO_SUBMIT=true` must be enabled to allow external submission.
|
|
45
|
+
3. `RELAYER_URL` is validated; enforce trusted hosts with `PARTICIPANT_TRUSTED_RELAYER_HOSTS`.
|
|
46
|
+
4. Without submit approval, submit/attest returns `decision=READY` and does not transmit to relayer.
|
|
47
|
+
|
|
48
|
+
## Input
|
|
49
|
+
|
|
50
|
+
The skill supports four operational modes: **Mining**, **Verification**, **Submission**, and **Attestation**.
|
|
51
|
+
|
|
52
|
+
### Mode A: Mining (`mine_claim`)
|
|
53
|
+
Used to extract data from a source and create a claim.
|
|
54
|
+
|
|
55
|
+
```json
|
|
56
|
+
{
|
|
57
|
+
"taskType": "mine_claim",
|
|
58
|
+
"fundId": "string",
|
|
59
|
+
"roomId": "string",
|
|
60
|
+
"epochId": "number",
|
|
61
|
+
"sourceSpec": {
|
|
62
|
+
"sourceSpecId": "string",
|
|
63
|
+
"sourceRef": "string",
|
|
64
|
+
"extractor": "object",
|
|
65
|
+
"freshnessSeconds": "number"
|
|
66
|
+
},
|
|
67
|
+
"tokenContext": {
|
|
68
|
+
"symbol": "string",
|
|
69
|
+
"address": "string"
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Mode B: Verification (`verify_claim_or_intent_validity`)
|
|
75
|
+
Used to verify an existing claim or the technical validity of an intent.
|
|
76
|
+
|
|
77
|
+
```json
|
|
78
|
+
{
|
|
79
|
+
"taskType": "verify_claim_or_intent_validity",
|
|
80
|
+
"fundId": "string",
|
|
81
|
+
"roomId": "string",
|
|
82
|
+
"epochId": "number",
|
|
83
|
+
"subjectType": "CLAIM | INTENT",
|
|
84
|
+
"subjectHash": "string",
|
|
85
|
+
"subjectPayload": "object",
|
|
86
|
+
"validationPolicy": {
|
|
87
|
+
"reproducible": "boolean",
|
|
88
|
+
"maxDataAgeSeconds": "number"
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Mode C: Submit (`submit_mined_claim`)
|
|
94
|
+
Submits canonical claim payload to relayer (only when explicit submit gate is passed).
|
|
95
|
+
|
|
96
|
+
```json
|
|
97
|
+
{
|
|
98
|
+
"taskType": "submit_mined_claim",
|
|
99
|
+
"fundId": "string",
|
|
100
|
+
"epochId": "number",
|
|
101
|
+
"observation": "object",
|
|
102
|
+
"submit": "boolean (required for transmission when explicit-submit mode is enabled)"
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Mode D: Attest (`attest_claim`)
|
|
107
|
+
Signs and submits claim attestation envelope (only when explicit submit gate is passed).
|
|
108
|
+
|
|
109
|
+
```json
|
|
110
|
+
{
|
|
111
|
+
"taskType": "attest_claim",
|
|
112
|
+
"fundId": "string",
|
|
113
|
+
"epochId": "number",
|
|
114
|
+
"claimHash": "0x...",
|
|
115
|
+
"submit": "boolean (required for transmission when explicit-submit mode is enabled)"
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Output
|
|
120
|
+
|
|
121
|
+
### Mining Output
|
|
122
|
+
```json
|
|
123
|
+
{
|
|
124
|
+
"status": "OK",
|
|
125
|
+
"taskType": "mine_claim",
|
|
126
|
+
"fundId": "string",
|
|
127
|
+
"epochId": "number",
|
|
128
|
+
"observation": {
|
|
129
|
+
"sourceSpecId": "string",
|
|
130
|
+
"token": "string",
|
|
131
|
+
"timestamp": "number",
|
|
132
|
+
"extracted": "string",
|
|
133
|
+
"responseHash": "string",
|
|
134
|
+
"evidenceURI": "string",
|
|
135
|
+
"crawler": "string"
|
|
136
|
+
},
|
|
137
|
+
"confidence": "number",
|
|
138
|
+
"assumptions": ["string"]
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Verification Output
|
|
143
|
+
```json
|
|
144
|
+
{
|
|
145
|
+
"status": "OK",
|
|
146
|
+
"taskType": "verify_claim_or_intent_validity",
|
|
147
|
+
"fundId": "string",
|
|
148
|
+
"roomId": "string",
|
|
149
|
+
"epochId": "number",
|
|
150
|
+
"subjectType": "CLAIM | INTENT",
|
|
151
|
+
"subjectHash": "string",
|
|
152
|
+
"verdict": "PASS | FAIL | NEED_MORE_EVIDENCE",
|
|
153
|
+
"reason": "string",
|
|
154
|
+
"attestationDraft": {
|
|
155
|
+
"validator": "string",
|
|
156
|
+
"expiresAt": "number",
|
|
157
|
+
"nonce": "number"
|
|
158
|
+
},
|
|
159
|
+
"confidence": "number",
|
|
160
|
+
"assumptions": ["string"]
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## Rules
|
|
165
|
+
|
|
166
|
+
1. **Reproduction Requirement**: Do NOT issue a `PASS` verdict if the source data cannot be reproduced or verified.
|
|
167
|
+
2. **Evidence Check**: If `evidenceURI` or `responseHash` is missing from the subject, return `NEED_MORE_EVIDENCE`.
|
|
168
|
+
3. **Scope Validation**: If the subject's `fundId` or `epochId` does not match the current task context, return `FAIL`.
|
|
169
|
+
4. **Key Hygiene**: Use only dedicated participant/verifier keys. Never use custody/admin keys for attest operations.
|
|
170
|
+
5. **Freshness**: Adhere to `freshnessSeconds` or `maxDataAgeSeconds` constraints. If data is stale, the verdict should reflect this.
|
|
171
|
+
6. **Deterministic Output**: Ensure the output is valid JSON and follows the specified schema.
|
|
172
|
+
7. **Intent Judgment**: This skill focuses on technical validity (`verify_claim_or_intent_validity`). Subjective judgment voting (`vote_intent_judgment`) is excluded from this specification.
|
|
173
|
+
8. **Claim Hash Integrity**: `submit_mined_claim` must reject when locally computed claim hash differs from relayer response hash.
|
|
174
|
+
9. **Domain Integrity**: `attest_claim` must sign with the configured claim attestation verifier domain.
|
|
175
|
+
10. **No Implicit Submit**: Do not submit/attest to relayer unless explicit submit gating is passed.
|
|
176
|
+
11. **Trusted Relayer**: In production, set `PARTICIPANT_TRUSTED_RELAYER_HOSTS` and avoid arbitrary relayer URLs.
|