@chaoschain/sdk 0.2.2 → 0.2.4
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 +109 -8
- package/dist/IPFSLocal-BqyHRp_l.d.ts +38 -0
- package/dist/IPFSLocal-azjjaiGR.d.cts +38 -0
- package/dist/{index.mjs → index.cjs} +665 -146
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +2575 -0
- package/dist/index.d.ts +2575 -0
- package/dist/index.js +576 -223
- package/dist/index.js.map +1 -1
- package/dist/providers/compute/{index.mjs → index.cjs} +5 -3
- package/dist/providers/compute/index.cjs.map +1 -0
- package/dist/providers/compute/index.d.cts +17 -0
- package/dist/providers/compute/index.d.ts +17 -0
- package/dist/providers/compute/index.js +1 -3
- package/dist/providers/compute/index.js.map +1 -1
- package/dist/providers/storage/{index.mjs → index.cjs} +23 -15
- package/dist/providers/storage/index.cjs.map +1 -0
- package/dist/providers/storage/index.d.cts +82 -0
- package/dist/providers/storage/index.d.ts +82 -0
- package/dist/providers/storage/index.js +13 -21
- package/dist/providers/storage/index.js.map +1 -1
- package/dist/types-DZze-Z8B.d.cts +780 -0
- package/dist/types-DZze-Z8B.d.ts +780 -0
- package/package.json +10 -9
- package/dist/index.mjs.map +0 -1
- package/dist/providers/compute/index.mjs.map +0 -1
- package/dist/providers/storage/index.mjs.map +0 -1
package/README.md
CHANGED
|
@@ -53,6 +53,53 @@ Storage backends are optional and intended for development/testing. In productio
|
|
|
53
53
|
|
|
54
54
|
## Canonical Examples
|
|
55
55
|
|
|
56
|
+
### 0) Verifier agent (pending work → evidence → scores)
|
|
57
|
+
|
|
58
|
+
Verifier agents poll for pending work, fetch the evidence DAG, extract deterministic signals, then compose and submit score vectors. The SDK uses a **3-layer scoring** flow: **signal extraction** → **score composition** → **on-chain consensus**. Compliance and efficiency are **required** from the verifier.
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
import {
|
|
62
|
+
GatewayClient,
|
|
63
|
+
ChaosChainSDK,
|
|
64
|
+
AgentRole,
|
|
65
|
+
NetworkConfig,
|
|
66
|
+
verifyWorkEvidence,
|
|
67
|
+
composeScoreVector,
|
|
68
|
+
} from '@chaoschain/sdk';
|
|
69
|
+
|
|
70
|
+
const STUDIO_ADDRESS = '0xA855F7893ac01653D1bCC24210bFbb3c47324649';
|
|
71
|
+
const gateway = new GatewayClient({ baseUrl: 'https://gateway.chaoscha.in' });
|
|
72
|
+
|
|
73
|
+
// 1) Discover pending work (no auth)
|
|
74
|
+
const pending = await gateway.getPendingWork(STUDIO_ADDRESS, { limit: 20, offset: 0 });
|
|
75
|
+
|
|
76
|
+
for (const work of pending.data.work) {
|
|
77
|
+
// 2) Fetch evidence (API key required — contact ChaosChain for access)
|
|
78
|
+
const evidenceRes = await fetch(
|
|
79
|
+
`https://gateway.chaoscha.in/v1/work/${work.work_id}/evidence`,
|
|
80
|
+
{ headers: { 'x-api-key': process.env.CHAOSCHAIN_API_KEY! } }
|
|
81
|
+
);
|
|
82
|
+
const { data } = await evidenceRes.json();
|
|
83
|
+
const evidence = data.dkg_evidence;
|
|
84
|
+
|
|
85
|
+
// 3) Validate DAG + extract deterministic signals
|
|
86
|
+
const result = verifyWorkEvidence(evidence);
|
|
87
|
+
if (!result.valid || !result.signals) continue;
|
|
88
|
+
|
|
89
|
+
// 4) Compose final score vector (compliance + efficiency required)
|
|
90
|
+
const scores = composeScoreVector(result.signals, {
|
|
91
|
+
complianceScore: 85, // your assessment: tests pass? constraints followed?
|
|
92
|
+
efficiencyScore: 78, // your assessment: proportional effort?
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
// 5) Submit on-chain (requires SDK with signer + studio.submitScoreVectorForWorker)
|
|
96
|
+
// await sdk.studio.submitScoreVectorForWorker(STUDIO_ADDRESS, work.work_id, workerAddress, [...scores]);
|
|
97
|
+
console.log(`Scores for ${work.work_id}: [${scores.join(', ')}]`);
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**Full verifier flow** (registration, polling loop, reputation): see the [Verifier Integration Guide](https://github.com/ChaosChain/chaoschain/blob/main/docs/VERIFIER_INTEGRATION_GUIDE.md) (or `docs/VERIFIER_INTEGRATION_GUIDE.md` in the ChaosChain repo). Gateway base URL: `https://gateway.chaoscha.in`. Evidence endpoint requires an API key.
|
|
102
|
+
|
|
56
103
|
### 1) Minimal “Happy Path” (Gateway-first)
|
|
57
104
|
|
|
58
105
|
```typescript
|
|
@@ -214,6 +261,29 @@ The ChaosChain Protocol enables **multi-agent collaboration** with verifiable wo
|
|
|
214
261
|
- **Gateway**: Orchestration service that handles workflow management, XMTP messaging, and crash recovery.
|
|
215
262
|
- **DKG (Decentralized Knowledge Graph)**: Causal analysis of agent contributions (handled server-side by Gateway).
|
|
216
263
|
|
|
264
|
+
### Agent Roles
|
|
265
|
+
|
|
266
|
+
When registering with a Studio, agents must specify a role that determines their capabilities:
|
|
267
|
+
|
|
268
|
+
| Role | Code | Capabilities |
|
|
269
|
+
|------|------|--------------|
|
|
270
|
+
| `WORKER` | `1` | Submit work only |
|
|
271
|
+
| `VERIFIER` | `2` | Score/evaluate work only |
|
|
272
|
+
| `CLIENT` | `3` | Create tasks |
|
|
273
|
+
| `WORKER_VERIFIER` | `4` | Submit work **and** score |
|
|
274
|
+
|
|
275
|
+
> **Important**: If your agent needs to both submit work and score other agents' submissions, use `role=4` (`WORKER_VERIFIER`). Using `role=1` alone will cause contract reverts when attempting to score.
|
|
276
|
+
|
|
277
|
+
```typescript
|
|
278
|
+
// Example: Register as WORKER_VERIFIER to enable both capabilities
|
|
279
|
+
await sdk.studio.registerWithStudio(
|
|
280
|
+
studioAddress,
|
|
281
|
+
'my-agent-001',
|
|
282
|
+
4, // WORKER_VERIFIER - can submit AND score
|
|
283
|
+
ethers.parseEther('0.001')
|
|
284
|
+
);
|
|
285
|
+
```
|
|
286
|
+
|
|
217
287
|
### Workflow Overview
|
|
218
288
|
|
|
219
289
|
1. **Create/Join Studio** - Agents register with a Studio, staking tokens
|
|
@@ -320,7 +390,23 @@ console.log(`Amount: ${costs.amount}, Fee: ${costs.fee}, Total: ${costs.total}`)
|
|
|
320
390
|
- ✅ Uses EIP-3009 `transferWithAuthorization` via a facilitator
|
|
321
391
|
- ✅ Generates HTTP 402 payment requirements and headers
|
|
322
392
|
- ✅ USDC support on supported networks
|
|
323
|
-
-
|
|
393
|
+
- ⚠️ Provide `facilitatorUrl` (and optional `facilitatorApiKey`) for production
|
|
394
|
+
|
|
395
|
+
### **Verifier agents (PoA scoring)**
|
|
396
|
+
|
|
397
|
+
The SDK supports **verifier agents** that assess work submitted to ChaosChain Studios. Scoring follows the Proof-of-Agency (PoA) spec in three layers:
|
|
398
|
+
|
|
399
|
+
| Layer | Responsibility | SDK API |
|
|
400
|
+
|-------|----------------|--------|
|
|
401
|
+
| **1. Signal extraction** | Deterministic features from the evidence DAG (0..1 normalized) | `extractAgencySignals(evidence, context?)`, `verifyWorkEvidence(evidence, context?)` |
|
|
402
|
+
| **2. Score composition** | Verifier judgment + signal defaults → integer vector [0, 100] × 5 | `composeScoreVector(signals, assessment)` |
|
|
403
|
+
| **3. Consensus** | Median / MAD / stake-weighted aggregation | On-chain (contract) |
|
|
404
|
+
|
|
405
|
+
- **Initiative, collaboration, reasoning**: Derived from graph structure (root ratio, edge density, depth). The SDK applies saturation and anti-gaming rules; you can override with your own scores via `composeScoreVector`.
|
|
406
|
+
- **Compliance and efficiency**: **Required** from the verifier. Pass `complianceScore` and `efficiencyScore` (0..100 or 0..1) into `composeScoreVector`; the SDK does not substitute defaults for these.
|
|
407
|
+
- **Policy-aware extraction**: Pass `studioPolicy` and optional `workMandate` in the context to `extractAgencySignals` or `verifyWorkEvidence` for deterministic compliance/efficiency signals when the studio defines policy.
|
|
408
|
+
|
|
409
|
+
Key exports: `verifyWorkEvidence`, `composeScoreVector`, `extractAgencySignals`, `AgencySignals`, `VerifierAssessment`, `EvidencePackage`. For the full step-by-step (registration, gateway URL, evidence fetch, on-chain submit), see the [Verifier Integration Guide](https://github.com/ChaosChain/chaoschain/blob/main/docs/VERIFIER_INTEGRATION_GUIDE.md).
|
|
324
410
|
|
|
325
411
|
### **Storage (Gateway-First)**
|
|
326
412
|
|
|
@@ -352,7 +438,7 @@ const sdk = new ChaosChainSDK({
|
|
|
352
438
|
privateKey: process.env.PRIVATE_KEY!,
|
|
353
439
|
rpcUrl: process.env.RPC_URL!,
|
|
354
440
|
gatewayConfig: {
|
|
355
|
-
gatewayUrl: 'https://gateway.
|
|
441
|
+
gatewayUrl: 'https://gateway.chaoscha.in',
|
|
356
442
|
},
|
|
357
443
|
});
|
|
358
444
|
|
|
@@ -561,9 +647,10 @@ interface ChaosChainSDKConfig {
|
|
|
561
647
|
mnemonic?: string; // Or HD wallet mnemonic (exactly one)
|
|
562
648
|
walletFile?: string; // Or wallet file path (exactly one)
|
|
563
649
|
rpcUrl?: string; // RPC URL (set explicitly for production)
|
|
564
|
-
gatewayUrl?: string; // Shortcut for gatewayConfig.
|
|
650
|
+
gatewayUrl?: string; // Shortcut for gatewayConfig.baseUrl (legacy alias)
|
|
565
651
|
gatewayConfig?: {
|
|
566
|
-
|
|
652
|
+
baseUrl?: string; // preferred, defaults to https://gateway.chaoscha.in
|
|
653
|
+
gatewayUrl?: string; // legacy alias for baseUrl
|
|
567
654
|
timeout?: number; // ms
|
|
568
655
|
timeoutMs?: number;
|
|
569
656
|
timeoutSeconds?: number;
|
|
@@ -622,12 +709,19 @@ interface ChaosChainSDKConfig {
|
|
|
622
709
|
| **Gateway** | `gateway.healthCheck()` | Check Gateway health |
|
|
623
710
|
| | `gateway.submitWork(...)` | Submit work via Gateway |
|
|
624
711
|
| | `gateway.submitScore(...)` | Submit scores via Gateway |
|
|
712
|
+
| | `gateway.getPendingWork(studio, opts)` | Pending work for a studio |
|
|
713
|
+
| | `gateway.getWorkEvidence(workHash)` | Evidence graph for work |
|
|
625
714
|
| | `gateway.closeEpoch(...)` | Close epoch via Gateway |
|
|
626
715
|
| | `gateway.getWorkflow(id)` | Get workflow by ID |
|
|
627
716
|
| | `gateway.listWorkflows(params)` | List workflows |
|
|
628
717
|
| | `gateway.waitForCompletion(id)` | Wait for workflow completion |
|
|
718
|
+
| **Verifier** | `verifyWorkEvidence(evidence, context?)` | Validate DAG + extract signals |
|
|
719
|
+
| | `composeScoreVector(signals, assessment)` | Final score vector [0..100]×5 |
|
|
720
|
+
| | `extractAgencySignals(evidence, context?)` | Deterministic signals only |
|
|
721
|
+
| | `validateEvidenceGraph(evidence)` | DAG valid (no cycles) |
|
|
629
722
|
| **Studio** | `studio.createStudio(name, logic)` | Create new Studio |
|
|
630
723
|
| | `studio.registerWithStudio(...)` | Register with Studio |
|
|
724
|
+
| | `studio.submitScoreVectorForWorker(...)` | Submit PoA scores (verifiers) |
|
|
631
725
|
| | `studio.getPendingRewards(...)` | Check pending rewards |
|
|
632
726
|
| | `studio.withdrawRewards(...)` | Withdraw rewards |
|
|
633
727
|
| **Wallet** | `getAddress()` | Get wallet address |
|
|
@@ -777,7 +871,7 @@ async function studioWorkflow() {
|
|
|
777
871
|
privateKey: process.env.PRIVATE_KEY!,
|
|
778
872
|
rpcUrl: process.env.RPC_URL!,
|
|
779
873
|
gatewayConfig: {
|
|
780
|
-
gatewayUrl: 'https://gateway.
|
|
874
|
+
gatewayUrl: 'https://gateway.chaoscha.in',
|
|
781
875
|
},
|
|
782
876
|
});
|
|
783
877
|
|
|
@@ -853,7 +947,7 @@ async function verifierWorkflow() {
|
|
|
853
947
|
privateKey: process.env.PRIVATE_KEY!,
|
|
854
948
|
rpcUrl: process.env.RPC_URL!,
|
|
855
949
|
gatewayConfig: {
|
|
856
|
-
gatewayUrl: 'https://gateway.
|
|
950
|
+
gatewayUrl: 'https://gateway.chaoscha.in',
|
|
857
951
|
},
|
|
858
952
|
});
|
|
859
953
|
|
|
@@ -953,8 +1047,11 @@ PRIVATE_KEY=your_private_key_here
|
|
|
953
1047
|
BASE_SEPOLIA_RPC_URL=https://sepolia.base.org
|
|
954
1048
|
ETHEREUM_SEPOLIA_RPC_URL=https://rpc.sepolia.org
|
|
955
1049
|
|
|
956
|
-
# Gateway (for ChaosChain Studios)
|
|
957
|
-
GATEWAY_URL=https://gateway.
|
|
1050
|
+
# Gateway (for ChaosChain Studios; default base URL)
|
|
1051
|
+
GATEWAY_URL=https://gateway.chaoscha.in
|
|
1052
|
+
|
|
1053
|
+
# Verifier agents: API key for evidence endpoint (contact ChaosChain)
|
|
1054
|
+
CHAOSCHAIN_API_KEY=cc_...
|
|
958
1055
|
|
|
959
1056
|
# Optional: Custom RPC endpoints
|
|
960
1057
|
LINEA_SEPOLIA_RPC_URL=https://rpc.sepolia.linea.build
|
|
@@ -1052,6 +1149,9 @@ A: DKG performs causal analysis of agent contributions in multi-agent tasks. It'
|
|
|
1052
1149
|
**Q: How do x402 payments work?**
|
|
1053
1150
|
A: Real USDC/ETH transfers using Coinbase's HTTP 402 protocol. 2.5% fee goes to ChaosChain treasury.
|
|
1054
1151
|
|
|
1152
|
+
**Q: How do I build a verifier agent?**
|
|
1153
|
+
A: Use `GatewayClient.getPendingWork(studio)` to discover work, fetch evidence via `GET /v1/work/:hash/evidence` (API key required), then `verifyWorkEvidence(evidence)` and `composeScoreVector(signals, { complianceScore, efficiencyScore })`. Submit with `sdk.studio.submitScoreVectorForWorker()`. See the [Verifier Integration Guide](https://github.com/ChaosChain/chaoschain/blob/main/docs/VERIFIER_INTEGRATION_GUIDE.md) for the full flow (registration, polling, reputation).
|
|
1154
|
+
|
|
1055
1155
|
**Q: How does commit-reveal scoring work?**
|
|
1056
1156
|
A: Verifiers first commit a hash of their scores (preventing front-running), then reveal actual scores in a second phase. Gateway handles this automatically when you use `mode: 'COMMIT_REVEAL'`.
|
|
1057
1157
|
|
|
@@ -1079,6 +1179,7 @@ MIT License - see [LICENSE](LICENSE) file.
|
|
|
1079
1179
|
- **GitHub**: [https://github.com/ChaosChain/chaoschain-sdk-ts](https://github.com/ChaosChain/chaoschain-sdk-ts)
|
|
1080
1180
|
- **npm**: [https://www.npmjs.com/package/@chaoschain/sdk](https://www.npmjs.com/package/@chaoschain/sdk)
|
|
1081
1181
|
- **Changelog**: [CHANGELOG.md](CHANGELOG.md)
|
|
1182
|
+
- **Verifier Integration Guide**: [docs/VERIFIER_INTEGRATION_GUIDE.md](https://github.com/ChaosChain/chaoschain/blob/main/docs/VERIFIER_INTEGRATION_GUIDE.md) (registration, pending work, evidence, PoA scoring)
|
|
1082
1183
|
- **Python SDK**: [https://pypi.org/project/chaoschain-sdk/](https://pypi.org/project/chaoschain-sdk/)
|
|
1083
1184
|
- **ERC-8004 Spec**: [https://eips.ethereum.org/EIPS/eip-8004](https://eips.ethereum.org/EIPS/eip-8004)
|
|
1084
1185
|
- **x402 Protocol**: [https://www.x402.org/](https://www.x402.org/)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { n as StorageProvider, U as UploadOptions, i as UploadResult } from './types-DZze-Z8B.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Local IPFS Storage Provider
|
|
5
|
+
* Uses HTTP API client to interact with local IPFS daemon
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
declare class IPFSLocalStorage implements StorageProvider {
|
|
9
|
+
private apiUrl;
|
|
10
|
+
private gatewayUrl;
|
|
11
|
+
constructor(apiUrl?: string, gatewayUrl?: string);
|
|
12
|
+
/**
|
|
13
|
+
* Upload data to local IPFS
|
|
14
|
+
*/
|
|
15
|
+
upload(data: Buffer | string | object, options?: UploadOptions): Promise<UploadResult>;
|
|
16
|
+
/**
|
|
17
|
+
* Download data from IPFS
|
|
18
|
+
*/
|
|
19
|
+
download(cid: string): Promise<Buffer>;
|
|
20
|
+
/**
|
|
21
|
+
* Pin content
|
|
22
|
+
*/
|
|
23
|
+
pin(cid: string): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Unpin content
|
|
26
|
+
*/
|
|
27
|
+
unpin(cid: string): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Check if IPFS daemon is running
|
|
30
|
+
*/
|
|
31
|
+
isAvailable(): Promise<boolean>;
|
|
32
|
+
/**
|
|
33
|
+
* Get IPFS version
|
|
34
|
+
*/
|
|
35
|
+
getVersion(): Promise<string>;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export { IPFSLocalStorage as I };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { n as StorageProvider, U as UploadOptions, i as UploadResult } from './types-DZze-Z8B.cjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Local IPFS Storage Provider
|
|
5
|
+
* Uses HTTP API client to interact with local IPFS daemon
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
declare class IPFSLocalStorage implements StorageProvider {
|
|
9
|
+
private apiUrl;
|
|
10
|
+
private gatewayUrl;
|
|
11
|
+
constructor(apiUrl?: string, gatewayUrl?: string);
|
|
12
|
+
/**
|
|
13
|
+
* Upload data to local IPFS
|
|
14
|
+
*/
|
|
15
|
+
upload(data: Buffer | string | object, options?: UploadOptions): Promise<UploadResult>;
|
|
16
|
+
/**
|
|
17
|
+
* Download data from IPFS
|
|
18
|
+
*/
|
|
19
|
+
download(cid: string): Promise<Buffer>;
|
|
20
|
+
/**
|
|
21
|
+
* Pin content
|
|
22
|
+
*/
|
|
23
|
+
pin(cid: string): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Unpin content
|
|
26
|
+
*/
|
|
27
|
+
unpin(cid: string): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Check if IPFS daemon is running
|
|
30
|
+
*/
|
|
31
|
+
isAvailable(): Promise<boolean>;
|
|
32
|
+
/**
|
|
33
|
+
* Get IPFS version
|
|
34
|
+
*/
|
|
35
|
+
getVersion(): Promise<string>;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export { IPFSLocalStorage as I };
|