@jinn-network/client 0.1.0-canary.adfd078d
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/LICENSE +21 -0
- package/README.md +162 -0
- package/deployments/deployment-phase1a-l2-baseSepolia-fast.json +32 -0
- package/deployments/deployment-phase1a-token-baseSepolia-fast.json +27 -0
- package/deployments/deployment-phase1b-mech-baseSepolia-fast.json +26 -0
- package/deployments/deployment-stolas-l2-baseSepolia-fast.json +35 -0
- package/dist/adapters/adapter.d.ts +11 -0
- package/dist/adapters/adapter.js +2 -0
- package/dist/adapters/adapter.js.map +1 -0
- package/dist/adapters/local/adapter.d.ts +20 -0
- package/dist/adapters/local/adapter.js +146 -0
- package/dist/adapters/local/adapter.js.map +1 -0
- package/dist/adapters/mech/adapter.d.ts +29 -0
- package/dist/adapters/mech/adapter.js +332 -0
- package/dist/adapters/mech/adapter.js.map +1 -0
- package/dist/adapters/mech/claim-policy.d.ts +40 -0
- package/dist/adapters/mech/claim-policy.js +104 -0
- package/dist/adapters/mech/claim-policy.js.map +1 -0
- package/dist/adapters/mech/contracts.d.ts +44 -0
- package/dist/adapters/mech/contracts.js +323 -0
- package/dist/adapters/mech/contracts.js.map +1 -0
- package/dist/adapters/mech/ipfs.d.ts +43 -0
- package/dist/adapters/mech/ipfs.js +142 -0
- package/dist/adapters/mech/ipfs.js.map +1 -0
- package/dist/adapters/mech/safe.d.ts +15 -0
- package/dist/adapters/mech/safe.js +113 -0
- package/dist/adapters/mech/safe.js.map +1 -0
- package/dist/adapters/mech/types.d.ts +561 -0
- package/dist/adapters/mech/types.js +340 -0
- package/dist/adapters/mech/types.js.map +1 -0
- package/dist/api/balance-build.d.ts +22 -0
- package/dist/api/balance-build.js +37 -0
- package/dist/api/balance-build.js.map +1 -0
- package/dist/api/fleet-build.d.ts +62 -0
- package/dist/api/fleet-build.js +91 -0
- package/dist/api/fleet-build.js.map +1 -0
- package/dist/api/gather-status.d.ts +20 -0
- package/dist/api/gather-status.js +137 -0
- package/dist/api/gather-status.js.map +1 -0
- package/dist/api/history-build.d.ts +32 -0
- package/dist/api/history-build.js +48 -0
- package/dist/api/history-build.js.map +1 -0
- package/dist/api/peers.d.ts +27 -0
- package/dist/api/peers.js +94 -0
- package/dist/api/peers.js.map +1 -0
- package/dist/api/rewards-build.d.ts +20 -0
- package/dist/api/rewards-build.js +42 -0
- package/dist/api/rewards-build.js.map +1 -0
- package/dist/api/server.d.ts +34 -0
- package/dist/api/server.js +130 -0
- package/dist/api/server.js.map +1 -0
- package/dist/api/status-build.d.ts +92 -0
- package/dist/api/status-build.js +175 -0
- package/dist/api/status-build.js.map +1 -0
- package/dist/api/status-rollup-build.d.ts +36 -0
- package/dist/api/status-rollup-build.js +69 -0
- package/dist/api/status-rollup-build.js.map +1 -0
- package/dist/auth/erc8128.d.ts +43 -0
- package/dist/auth/erc8128.js +88 -0
- package/dist/auth/erc8128.js.map +1 -0
- package/dist/bin/jinn.d.ts +11 -0
- package/dist/bin/jinn.js +20 -0
- package/dist/bin/jinn.js.map +1 -0
- package/dist/build-meta.json +3 -0
- package/dist/chain-read-errors.d.ts +9 -0
- package/dist/chain-read-errors.js +43 -0
- package/dist/chain-read-errors.js.map +1 -0
- package/dist/cli/action.d.ts +26 -0
- package/dist/cli/action.js +56 -0
- package/dist/cli/action.js.map +1 -0
- package/dist/cli/command.d.ts +62 -0
- package/dist/cli/command.js +29 -0
- package/dist/cli/command.js.map +1 -0
- package/dist/cli/commands/balance.d.ts +3 -0
- package/dist/cli/commands/balance.js +46 -0
- package/dist/cli/commands/balance.js.map +1 -0
- package/dist/cli/commands/bootstrap.d.ts +3 -0
- package/dist/cli/commands/bootstrap.js +165 -0
- package/dist/cli/commands/bootstrap.js.map +1 -0
- package/dist/cli/commands/claim-rewards.d.ts +3 -0
- package/dist/cli/commands/claim-rewards.js +121 -0
- package/dist/cli/commands/claim-rewards.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +3 -0
- package/dist/cli/commands/doctor.js +151 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/fleet-scale.d.ts +3 -0
- package/dist/cli/commands/fleet-scale.js +449 -0
- package/dist/cli/commands/fleet-scale.js.map +1 -0
- package/dist/cli/commands/fleet.d.ts +3 -0
- package/dist/cli/commands/fleet.js +45 -0
- package/dist/cli/commands/fleet.js.map +1 -0
- package/dist/cli/commands/fund-requirements.d.ts +3 -0
- package/dist/cli/commands/fund-requirements.js +139 -0
- package/dist/cli/commands/fund-requirements.js.map +1 -0
- package/dist/cli/commands/history.d.ts +3 -0
- package/dist/cli/commands/history.js +61 -0
- package/dist/cli/commands/history.js.map +1 -0
- package/dist/cli/commands/init.d.ts +3 -0
- package/dist/cli/commands/init.js +91 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/keys-backup.d.ts +3 -0
- package/dist/cli/commands/keys-backup.js +107 -0
- package/dist/cli/commands/keys-backup.js.map +1 -0
- package/dist/cli/commands/logs.d.ts +3 -0
- package/dist/cli/commands/logs.js +69 -0
- package/dist/cli/commands/logs.js.map +1 -0
- package/dist/cli/commands/rewards.d.ts +3 -0
- package/dist/cli/commands/rewards.js +54 -0
- package/dist/cli/commands/rewards.js.map +1 -0
- package/dist/cli/commands/run.d.ts +3 -0
- package/dist/cli/commands/run.js +96 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/status.d.ts +3 -0
- package/dist/cli/commands/status.js +54 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/stop.d.ts +3 -0
- package/dist/cli/commands/stop.js +82 -0
- package/dist/cli/commands/stop.js.map +1 -0
- package/dist/cli/commands/submit-intent.d.ts +3 -0
- package/dist/cli/commands/submit-intent.js +169 -0
- package/dist/cli/commands/submit-intent.js.map +1 -0
- package/dist/cli/commands/version.d.ts +3 -0
- package/dist/cli/commands/version.js +114 -0
- package/dist/cli/commands/version.js.map +1 -0
- package/dist/cli/commands/withdraw.d.ts +3 -0
- package/dist/cli/commands/withdraw.js +181 -0
- package/dist/cli/commands/withdraw.js.map +1 -0
- package/dist/cli/deployment-digest.d.ts +10 -0
- package/dist/cli/deployment-digest.js +25 -0
- package/dist/cli/deployment-digest.js.map +1 -0
- package/dist/cli/execution-context.d.ts +50 -0
- package/dist/cli/execution-context.js +154 -0
- package/dist/cli/execution-context.js.map +1 -0
- package/dist/cli/help.d.ts +3 -0
- package/dist/cli/help.js +37 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/index.d.ts +17 -0
- package/dist/cli/index.js +132 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/introspection-context.d.ts +10 -0
- package/dist/cli/introspection-context.js +60 -0
- package/dist/cli/introspection-context.js.map +1 -0
- package/dist/cli/output.d.ts +36 -0
- package/dist/cli/output.js +35 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/cli/password.d.ts +12 -0
- package/dist/cli/password.js +51 -0
- package/dist/cli/password.js.map +1 -0
- package/dist/config.d.ts +174 -0
- package/dist/config.js +252 -0
- package/dist/config.js.map +1 -0
- package/dist/daemon/creator.d.ts +24 -0
- package/dist/daemon/creator.js +80 -0
- package/dist/daemon/creator.js.map +1 -0
- package/dist/daemon/daemon.d.ts +60 -0
- package/dist/daemon/daemon.js +158 -0
- package/dist/daemon/daemon.js.map +1 -0
- package/dist/daemon/delivery-watcher.d.ts +10 -0
- package/dist/daemon/delivery-watcher.js +37 -0
- package/dist/daemon/delivery-watcher.js.map +1 -0
- package/dist/daemon/restorer.d.ts +19 -0
- package/dist/daemon/restorer.js +82 -0
- package/dist/daemon/restorer.js.map +1 -0
- package/dist/daemon/reward-claim-loop.d.ts +38 -0
- package/dist/daemon/reward-claim-loop.js +48 -0
- package/dist/daemon/reward-claim-loop.js.map +1 -0
- package/dist/discovery/registry.d.ts +43 -0
- package/dist/discovery/registry.js +104 -0
- package/dist/discovery/registry.js.map +1 -0
- package/dist/discovery/subgraph.d.ts +37 -0
- package/dist/discovery/subgraph.js +87 -0
- package/dist/discovery/subgraph.js.map +1 -0
- package/dist/earning/bootstrap.d.ts +79 -0
- package/dist/earning/bootstrap.js +989 -0
- package/dist/earning/bootstrap.js.map +1 -0
- package/dist/earning/contracts.d.ts +431 -0
- package/dist/earning/contracts.js +518 -0
- package/dist/earning/contracts.js.map +1 -0
- package/dist/earning/evidence-simhash.d.ts +59 -0
- package/dist/earning/evidence-simhash.js +87 -0
- package/dist/earning/evidence-simhash.js.map +1 -0
- package/dist/earning/fleet-display-index.d.ts +8 -0
- package/dist/earning/fleet-display-index.js +12 -0
- package/dist/earning/fleet-display-index.js.map +1 -0
- package/dist/earning/fleet-retire.d.ts +28 -0
- package/dist/earning/fleet-retire.js +75 -0
- package/dist/earning/fleet-retire.js.map +1 -0
- package/dist/earning/jinn-rewards.d.ts +62 -0
- package/dist/earning/jinn-rewards.js +81 -0
- package/dist/earning/jinn-rewards.js.map +1 -0
- package/dist/earning/next-service-index.d.ts +4 -0
- package/dist/earning/next-service-index.js +7 -0
- package/dist/earning/next-service-index.js.map +1 -0
- package/dist/earning/orphan-sweep.d.ts +33 -0
- package/dist/earning/orphan-sweep.js +157 -0
- package/dist/earning/orphan-sweep.js.map +1 -0
- package/dist/earning/reconcile.d.ts +37 -0
- package/dist/earning/reconcile.js +216 -0
- package/dist/earning/reconcile.js.map +1 -0
- package/dist/earning/safe-adapter.d.ts +70 -0
- package/dist/earning/safe-adapter.js +228 -0
- package/dist/earning/safe-adapter.js.map +1 -0
- package/dist/earning/stolas-claim.d.ts +47 -0
- package/dist/earning/stolas-claim.js +115 -0
- package/dist/earning/stolas-claim.js.map +1 -0
- package/dist/earning/store.d.ts +36 -0
- package/dist/earning/store.js +156 -0
- package/dist/earning/store.js.map +1 -0
- package/dist/earning/types.d.ts +123 -0
- package/dist/earning/types.js +64 -0
- package/dist/earning/types.js.map +1 -0
- package/dist/earning/viem-clients.d.ts +9 -0
- package/dist/earning/viem-clients.js +22 -0
- package/dist/earning/viem-clients.js.map +1 -0
- package/dist/earning/wallet.d.ts +20 -0
- package/dist/earning/wallet.js +103 -0
- package/dist/earning/wallet.js.map +1 -0
- package/dist/errors/envelope.d.ts +41 -0
- package/dist/errors/envelope.js +48 -0
- package/dist/errors/envelope.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +32 -0
- package/dist/main.js +281 -0
- package/dist/main.js.map +1 -0
- package/dist/mcp/server.d.ts +14 -0
- package/dist/mcp/server.js +205 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/operator-errors.d.ts +16 -0
- package/dist/operator-errors.js +88 -0
- package/dist/operator-errors.js.map +1 -0
- package/dist/preflight/claude-binary.d.ts +19 -0
- package/dist/preflight/claude-binary.js +44 -0
- package/dist/preflight/claude-binary.js.map +1 -0
- package/dist/preflight/claude-invocation-envelope.d.ts +11 -0
- package/dist/preflight/claude-invocation-envelope.js +67 -0
- package/dist/preflight/claude-invocation-envelope.js.map +1 -0
- package/dist/runner/claude.d.ts +15 -0
- package/dist/runner/claude.js +193 -0
- package/dist/runner/claude.js.map +1 -0
- package/dist/runner/runner.d.ts +11 -0
- package/dist/runner/runner.js +2 -0
- package/dist/runner/runner.js.map +1 -0
- package/dist/runner/simple.d.ts +8 -0
- package/dist/runner/simple.js +11 -0
- package/dist/runner/simple.js.map +1 -0
- package/dist/store/store.d.ts +74 -0
- package/dist/store/store.js +173 -0
- package/dist/store/store.js.map +1 -0
- package/dist/tx-retry.d.ts +55 -0
- package/dist/tx-retry.js +214 -0
- package/dist/tx-retry.js.map +1 -0
- package/dist/types/desired-state.d.ts +41 -0
- package/dist/types/desired-state.js +16 -0
- package/dist/types/desired-state.js.map +1 -0
- package/dist/types/errors.d.ts +8 -0
- package/dist/types/errors.js +17 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/withdraw/args.d.ts +29 -0
- package/dist/withdraw/args.js +198 -0
- package/dist/withdraw/args.js.map +1 -0
- package/dist/withdraw/run-withdraw-plan.d.ts +21 -0
- package/dist/withdraw/run-withdraw-plan.js +257 -0
- package/dist/withdraw/run-withdraw-plan.js.map +1 -0
- package/dist/x402/acquire.d.ts +6 -0
- package/dist/x402/acquire.js +32 -0
- package/dist/x402/acquire.js.map +1 -0
- package/dist/x402/facilitator.d.ts +11 -0
- package/dist/x402/facilitator.js +52 -0
- package/dist/x402/facilitator.js.map +1 -0
- package/dist/x402/handler.d.ts +15 -0
- package/dist/x402/handler.js +40 -0
- package/dist/x402/handler.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,518 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chain config resolver and ABI fragments for the earning bootstrap.
|
|
3
|
+
*
|
|
4
|
+
* All contract addresses, bond amounts, and chain parameters are encapsulated
|
|
5
|
+
* in ChainConfig. The state machine reads everything from here -- no inline
|
|
6
|
+
* literals in business logic.
|
|
7
|
+
*/
|
|
8
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
9
|
+
import path from 'node:path';
|
|
10
|
+
import { fileURLToPath } from 'node:url';
|
|
11
|
+
import { keccak256, stringToBytes } from 'viem';
|
|
12
|
+
// Package root, resolved from this file's location. Works identically from
|
|
13
|
+
// src/earning/ (tsx) and dist/earning/ (tsc output) — both are 2 dirs below client/.
|
|
14
|
+
const PACKAGE_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', '..');
|
|
15
|
+
const BUNDLED_DEPLOYMENTS_DIR = path.join(PACKAGE_ROOT, 'deployments');
|
|
16
|
+
/**
|
|
17
|
+
* Default Phase 1b deployment artifacts bundled in the client package. These let
|
|
18
|
+
* the client run against Base Sepolia with zero env vars. Callers can still
|
|
19
|
+
* override individual paths via ChainConfigOverrides or JINN_TESTNET_*_DEPLOYMENT
|
|
20
|
+
* env vars.
|
|
21
|
+
*
|
|
22
|
+
* After a contract redeploy, run `scripts/sync-deployments.sh` to refresh these
|
|
23
|
+
* from the contracts/ directory.
|
|
24
|
+
*/
|
|
25
|
+
const DEFAULT_TESTNET_ARTIFACTS = {
|
|
26
|
+
token: path.join(BUNDLED_DEPLOYMENTS_DIR, 'deployment-phase1a-token-baseSepolia-fast.json'),
|
|
27
|
+
l2: path.join(BUNDLED_DEPLOYMENTS_DIR, 'deployment-phase1a-l2-baseSepolia-fast.json'),
|
|
28
|
+
mech: path.join(BUNDLED_DEPLOYMENTS_DIR, 'deployment-phase1b-mech-baseSepolia-fast.json'),
|
|
29
|
+
stolas: path.join(BUNDLED_DEPLOYMENTS_DIR, 'deployment-stolas-l2-baseSepolia-fast.json'),
|
|
30
|
+
};
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
// CID utilities
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
const BASE32_LOWER = 'abcdefghijklmnopqrstuvwxyz234567';
|
|
35
|
+
function base32Decode(input) {
|
|
36
|
+
const lookup = new Map();
|
|
37
|
+
for (let i = 0; i < BASE32_LOWER.length; i++) {
|
|
38
|
+
lookup.set(BASE32_LOWER[i], i);
|
|
39
|
+
}
|
|
40
|
+
let bitBuffer = 0;
|
|
41
|
+
let bitCount = 0;
|
|
42
|
+
const bytes = [];
|
|
43
|
+
for (const ch of input) {
|
|
44
|
+
const val = lookup.get(ch);
|
|
45
|
+
if (val === undefined) {
|
|
46
|
+
throw new Error(`Invalid base32 character: '${ch}'`);
|
|
47
|
+
}
|
|
48
|
+
bitBuffer = (bitBuffer << 5) | val;
|
|
49
|
+
bitCount += 5;
|
|
50
|
+
if (bitCount >= 8) {
|
|
51
|
+
bitCount -= 8;
|
|
52
|
+
bytes.push((bitBuffer >> bitCount) & 0xff);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return new Uint8Array(bytes);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Extract the 32-byte SHA256 digest from a CIDv1 base32-lower IPFS hash.
|
|
59
|
+
*
|
|
60
|
+
* CIDv1 base32 structure: `b` (multibase) + base32(version + codec + multihash)
|
|
61
|
+
* For dag-pb SHA256: version=0x01, codec=0x70, hashFn=0x12, hashLen=0x20, <32 bytes>
|
|
62
|
+
*
|
|
63
|
+
* Returns `0x`-prefixed 64-char hex string suitable for bytes32.
|
|
64
|
+
*/
|
|
65
|
+
export function cidToBytes32(cid) {
|
|
66
|
+
if (!cid.startsWith('b')) {
|
|
67
|
+
throw new Error(`Expected CIDv1 base32-lower (starting with 'b'), got: ${cid.slice(0, 8)}...`);
|
|
68
|
+
}
|
|
69
|
+
const raw = base32Decode(cid.slice(1)); // strip 'b' multibase prefix
|
|
70
|
+
// Validate CIDv1 header: version(0x01) + codec(0x70 dag-pb or 0x55 raw) + hashFn(0x12 sha256) + hashLen(0x20)
|
|
71
|
+
if (raw.length < 36) {
|
|
72
|
+
throw new Error(`CID too short: expected at least 36 bytes, got ${raw.length}`);
|
|
73
|
+
}
|
|
74
|
+
if (raw[0] !== 0x01) {
|
|
75
|
+
throw new Error(`Expected CIDv1 (version 0x01), got 0x${raw[0].toString(16)}`);
|
|
76
|
+
}
|
|
77
|
+
// codec: 0x70 (dag-pb) or 0x55 (raw)
|
|
78
|
+
const codec = raw[1];
|
|
79
|
+
if (codec !== 0x70 && codec !== 0x55) {
|
|
80
|
+
throw new Error(`Unexpected codec 0x${codec.toString(16)}, expected 0x70 (dag-pb) or 0x55 (raw)`);
|
|
81
|
+
}
|
|
82
|
+
if (raw[2] !== 0x12) {
|
|
83
|
+
throw new Error(`Expected SHA256 hash function (0x12), got 0x${raw[2].toString(16)}`);
|
|
84
|
+
}
|
|
85
|
+
if (raw[3] !== 0x20) {
|
|
86
|
+
throw new Error(`Expected 32-byte hash length (0x20), got 0x${raw[3].toString(16)}`);
|
|
87
|
+
}
|
|
88
|
+
const digest = raw.slice(4, 36);
|
|
89
|
+
const hex = Array.from(digest).map(b => b.toString(16).padStart(2, '0')).join('');
|
|
90
|
+
return `0x${hex}`;
|
|
91
|
+
}
|
|
92
|
+
function getArtifactString(config, key) {
|
|
93
|
+
const value = config?.[key];
|
|
94
|
+
return typeof value === 'string' ? value : undefined;
|
|
95
|
+
}
|
|
96
|
+
const BASE_CONFIG = {
|
|
97
|
+
chainId: 8453,
|
|
98
|
+
rpcUrl: 'https://mainnet.base.org',
|
|
99
|
+
// Autonolas protocol contracts (Base L2)
|
|
100
|
+
serviceRegistry: '0x3C1fF68f5aa342D296d4DEe4Bb1cACCA912D95fE',
|
|
101
|
+
serviceRegistryTokenUtility: '0x34C895f302D0b5cf52ec0Edd3945321EB0f83dd5',
|
|
102
|
+
serviceManager: '0x1262136cac6a06A782DC94eb3a3dF0b4d09FF6A6',
|
|
103
|
+
gnosisSafeSameAddressMultisig: '0xFbBEc0C8b13B38a9aC0499694A69a10204c5E2aB',
|
|
104
|
+
// Tokens
|
|
105
|
+
olasToken: '0x54330d28ca3357F294334BDC454a032e7f353416',
|
|
106
|
+
// Mech marketplace
|
|
107
|
+
mechMarketplace: '0xf24eE42edA0fc9b33B7D41B06Ee8ccD2Ef7C5020',
|
|
108
|
+
mechFactory: '0x2E008211f34b25A7d7c102403c6C2C3B665a1abe', // Native payment type
|
|
109
|
+
mechRequestPrice: 99n, // wei — ecosystem standard
|
|
110
|
+
// Jinn staking (JinnRouter activity checker)
|
|
111
|
+
stakingContract: '0x51c5f4982b9b0b3c0482678f5847ea6228cc8e54',
|
|
112
|
+
// stOLAS ExternalStakingDistributor (LemonTree, Base mainnet)
|
|
113
|
+
distributorAddress: '0x40abf47B926181148000DbCC7c8DE76A3a61a66f',
|
|
114
|
+
// Service package
|
|
115
|
+
agentId: 103,
|
|
116
|
+
serviceHash: 'bafybeiawqqwkoeovm453mscwkxvmtnvaanhatlqh52cf5sdqavz6ldybae',
|
|
117
|
+
serviceNft: 'bafybeiaakdeconw7j5z76fgghfdjmsr6tzejotxcwnvmp3nroaw3glgyve',
|
|
118
|
+
// Bond: 5000 OLAS (minStakingDeposit for this staking contract)
|
|
119
|
+
bondAmount: 5000n * 10n ** 18n,
|
|
120
|
+
// Conservative gas estimate for: Safe deploy + ~6 Safe exec txs
|
|
121
|
+
minEoaGasEth: 5000000000000000n, // 0.005 ETH
|
|
122
|
+
minSafeEth: 2000000000000000n, // 0.002 ETH
|
|
123
|
+
routerClaimDeliveryVersion: 'v1',
|
|
124
|
+
};
|
|
125
|
+
const BASE_SEPOLIA_CONFIG = {
|
|
126
|
+
chainId: 84532,
|
|
127
|
+
rpcUrl: 'https://sepolia.base.org',
|
|
128
|
+
// Autonolas protocol contracts (Base Sepolia)
|
|
129
|
+
serviceRegistry: '0x31D3202d8744B16A120117A053459DDFAE93c855',
|
|
130
|
+
serviceRegistryTokenUtility: '0xeB49bE5DF00F74bd240DE4535DDe6Bc89CEfb994',
|
|
131
|
+
serviceManager: '0x5BA58970c2Ae16Cf6218783018100aF2dCcFc915',
|
|
132
|
+
gnosisSafeSameAddressMultisig: '0x10100e74b7F706222F8A7C0be9FC7Ae1717Ad8B2',
|
|
133
|
+
// Phase 1a uses bridged JINN as the staking/bond token on Base Sepolia.
|
|
134
|
+
olasToken: '0x4F177E56bd79c169742a1BF8907dB0A5e54F5524',
|
|
135
|
+
// Mech marketplace is out of scope for the staking-only Phase 1a loop.
|
|
136
|
+
mechMarketplace: '0x0000000000000000000000000000000000000000',
|
|
137
|
+
mechFactory: '0x0000000000000000000000000000000000000000',
|
|
138
|
+
mechRequestPrice: 99n,
|
|
139
|
+
// Phase 1a staking proxy (Base Sepolia)
|
|
140
|
+
stakingContract: '0xe9c8DaBb4062deEc921562e7E286be3cEcb826b0',
|
|
141
|
+
// Reuse the current service package defaults unless testnet-specific overrides are supplied.
|
|
142
|
+
agentId: 103,
|
|
143
|
+
serviceHash: 'bafybeiawqqwkoeovm453mscwkxvmtnvaanhatlqh52cf5sdqavz6ldybae',
|
|
144
|
+
serviceNft: 'bafybeiaakdeconw7j5z76fgghfdjmsr6tzejotxcwnvmp3nroaw3glgyve',
|
|
145
|
+
// Bond: match the live Phase 1a staking minStakingDeposit.
|
|
146
|
+
bondAmount: 10n * 10n ** 18n,
|
|
147
|
+
// Conservative gas estimate
|
|
148
|
+
minEoaGasEth: 5000000000000000n, // 0.005 ETH
|
|
149
|
+
minSafeEth: 2000000000000000n, // 0.002 ETH
|
|
150
|
+
/** Phase 1b routers use V2 claimDelivery(bytes32,bytes32). */
|
|
151
|
+
routerClaimDeliveryVersion: 'v2',
|
|
152
|
+
};
|
|
153
|
+
function loadArtifact(filePath) {
|
|
154
|
+
const resolvedPath = path.resolve(filePath);
|
|
155
|
+
if (!existsSync(resolvedPath)) {
|
|
156
|
+
throw new Error(`Phase 1a artifact not found: ${resolvedPath}`);
|
|
157
|
+
}
|
|
158
|
+
return JSON.parse(readFileSync(resolvedPath, 'utf8'));
|
|
159
|
+
}
|
|
160
|
+
function resolveBaseSepoliaConfig(overrides = {}) {
|
|
161
|
+
const tokenArtifactPath = overrides.testnetL2TokenDeploymentPath
|
|
162
|
+
?? process.env['JINN_TESTNET_TOKEN_DEPLOYMENT']
|
|
163
|
+
?? DEFAULT_TESTNET_ARTIFACTS.token;
|
|
164
|
+
const l2ArtifactPath = overrides.testnetL2DeploymentPath
|
|
165
|
+
?? process.env['JINN_TESTNET_L2_DEPLOYMENT']
|
|
166
|
+
?? DEFAULT_TESTNET_ARTIFACTS.l2;
|
|
167
|
+
const mechArtifactPath = overrides.testnetMechDeploymentPath
|
|
168
|
+
?? process.env['JINN_TESTNET_MECH_DEPLOYMENT']
|
|
169
|
+
?? DEFAULT_TESTNET_ARTIFACTS.mech;
|
|
170
|
+
const resolved = { ...BASE_SEPOLIA_CONFIG };
|
|
171
|
+
if (tokenArtifactPath) {
|
|
172
|
+
const tokenArtifact = loadArtifact(tokenArtifactPath);
|
|
173
|
+
const l2Token = tokenArtifact.contracts?.l2Token;
|
|
174
|
+
if (!l2Token) {
|
|
175
|
+
throw new Error(`Testnet token artifact ${path.resolve(tokenArtifactPath)} is missing contracts.l2Token`);
|
|
176
|
+
}
|
|
177
|
+
resolved.olasToken = l2Token;
|
|
178
|
+
}
|
|
179
|
+
if (l2ArtifactPath) {
|
|
180
|
+
const l2Artifact = loadArtifact(l2ArtifactPath);
|
|
181
|
+
const stakingContract = l2Artifact.contracts?.stakingToken;
|
|
182
|
+
const serviceRegistry = l2Artifact.contracts?.serviceRegistry;
|
|
183
|
+
const serviceRegistryTokenUtility = l2Artifact.contracts?.serviceRegistryTokenUtility;
|
|
184
|
+
const minStakingDeposit = getArtifactString(l2Artifact.config, 'minStakingDeposit');
|
|
185
|
+
if (!stakingContract) {
|
|
186
|
+
throw new Error(`Testnet L2 artifact ${path.resolve(l2ArtifactPath)} is missing contracts.stakingToken`);
|
|
187
|
+
}
|
|
188
|
+
if (!serviceRegistry) {
|
|
189
|
+
throw new Error(`Testnet L2 artifact ${path.resolve(l2ArtifactPath)} is missing contracts.serviceRegistry`);
|
|
190
|
+
}
|
|
191
|
+
if (!serviceRegistryTokenUtility) {
|
|
192
|
+
throw new Error(`Testnet L2 artifact ${path.resolve(l2ArtifactPath)} is missing contracts.serviceRegistryTokenUtility`);
|
|
193
|
+
}
|
|
194
|
+
resolved.stakingContract = stakingContract;
|
|
195
|
+
resolved.serviceRegistry = serviceRegistry;
|
|
196
|
+
resolved.serviceRegistryTokenUtility = serviceRegistryTokenUtility;
|
|
197
|
+
if (minStakingDeposit) {
|
|
198
|
+
resolved.bondAmount = BigInt(minStakingDeposit);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
if (mechArtifactPath) {
|
|
202
|
+
const mechArtifact = loadArtifact(mechArtifactPath);
|
|
203
|
+
const mechMarketplace = mechArtifact.contracts?.mechMarketplace;
|
|
204
|
+
const mechFactory = mechArtifact.contracts?.mechFactory;
|
|
205
|
+
const jinnRouter = mechArtifact.contracts?.jinnRouter;
|
|
206
|
+
if (!mechMarketplace) {
|
|
207
|
+
throw new Error(`Testnet mech artifact ${path.resolve(mechArtifactPath)} is missing contracts.mechMarketplace`);
|
|
208
|
+
}
|
|
209
|
+
if (!mechFactory) {
|
|
210
|
+
throw new Error(`Testnet mech artifact ${path.resolve(mechArtifactPath)} is missing contracts.mechFactory`);
|
|
211
|
+
}
|
|
212
|
+
resolved.mechMarketplace = mechMarketplace;
|
|
213
|
+
resolved.mechFactory = mechFactory;
|
|
214
|
+
if (jinnRouter) {
|
|
215
|
+
resolved.jinnRouter = jinnRouter;
|
|
216
|
+
}
|
|
217
|
+
// Mech artifact can also override the staking contract (e.g., Phase 1b staking proxy
|
|
218
|
+
// with JinnRouterV2 as activity checker)
|
|
219
|
+
const stakingToken = mechArtifact.contracts?.stakingToken;
|
|
220
|
+
if (stakingToken) {
|
|
221
|
+
resolved.stakingContract = stakingToken;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
const stolasArtifactPath = overrides.testnetStolasDeploymentPath
|
|
225
|
+
?? process.env['JINN_TESTNET_STOLAS_DEPLOYMENT']
|
|
226
|
+
?? DEFAULT_TESTNET_ARTIFACTS.stolas;
|
|
227
|
+
if (stolasArtifactPath) {
|
|
228
|
+
const stolasArtifact = loadArtifact(stolasArtifactPath);
|
|
229
|
+
const distributor = stolasArtifact.contracts?.distributor;
|
|
230
|
+
if (!distributor) {
|
|
231
|
+
throw new Error(`stOLAS artifact ${path.resolve(stolasArtifactPath)} is missing contracts.distributor`);
|
|
232
|
+
}
|
|
233
|
+
resolved.distributorAddress = distributor;
|
|
234
|
+
}
|
|
235
|
+
return resolved;
|
|
236
|
+
}
|
|
237
|
+
function applyRouterClaimDeliveryEnvOverride(config) {
|
|
238
|
+
const raw = process.env['JINN_ROUTER_CLAIM_DELIVERY_VERSION']?.trim().toLowerCase();
|
|
239
|
+
if (raw === 'v1' || raw === 'v2') {
|
|
240
|
+
return { ...config, routerClaimDeliveryVersion: raw };
|
|
241
|
+
}
|
|
242
|
+
return config;
|
|
243
|
+
}
|
|
244
|
+
export function getChainConfig(chain, overrides = {}) {
|
|
245
|
+
switch (chain) {
|
|
246
|
+
case 'base':
|
|
247
|
+
return applyRouterClaimDeliveryEnvOverride({ ...BASE_CONFIG });
|
|
248
|
+
case 'base-sepolia':
|
|
249
|
+
return applyRouterClaimDeliveryEnvOverride(resolveBaseSepoliaConfig(overrides));
|
|
250
|
+
default:
|
|
251
|
+
throw new Error(`Unsupported chain: ${chain}. Supported: 'base', 'base-sepolia'.`);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
// ---------------------------------------------------------------------------
|
|
255
|
+
// ABI fragments -- only the functions we call
|
|
256
|
+
// ---------------------------------------------------------------------------
|
|
257
|
+
export const SERVICE_MANAGER_ABI = [
|
|
258
|
+
{
|
|
259
|
+
inputs: [
|
|
260
|
+
{ name: 'serviceOwner', type: 'address' },
|
|
261
|
+
{ name: 'token', type: 'address' },
|
|
262
|
+
{ name: 'configHash', type: 'bytes32' },
|
|
263
|
+
{ name: 'agentIds', type: 'uint32[]' },
|
|
264
|
+
{ name: 'agentParams', type: 'tuple[]', components: [
|
|
265
|
+
{ name: 'slots', type: 'uint32' },
|
|
266
|
+
{ name: 'bond', type: 'uint96' },
|
|
267
|
+
] },
|
|
268
|
+
{ name: 'threshold', type: 'uint32' },
|
|
269
|
+
],
|
|
270
|
+
name: 'create',
|
|
271
|
+
outputs: [{ name: 'serviceId', type: 'uint256' }],
|
|
272
|
+
stateMutability: 'nonpayable',
|
|
273
|
+
type: 'function',
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
inputs: [{ name: 'serviceId', type: 'uint256' }],
|
|
277
|
+
name: 'activateRegistration',
|
|
278
|
+
outputs: [{ name: 'success', type: 'bool' }],
|
|
279
|
+
stateMutability: 'payable',
|
|
280
|
+
type: 'function',
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
inputs: [
|
|
284
|
+
{ name: 'serviceId', type: 'uint256' },
|
|
285
|
+
{ name: 'agentInstances', type: 'address[]' },
|
|
286
|
+
{ name: 'agentIds', type: 'uint32[]' },
|
|
287
|
+
],
|
|
288
|
+
name: 'registerAgents',
|
|
289
|
+
outputs: [{ name: 'success', type: 'bool' }],
|
|
290
|
+
stateMutability: 'payable',
|
|
291
|
+
type: 'function',
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
inputs: [
|
|
295
|
+
{ name: 'serviceId', type: 'uint256' },
|
|
296
|
+
{ name: 'multisigImplementation', type: 'address' },
|
|
297
|
+
{ name: 'data', type: 'bytes' },
|
|
298
|
+
],
|
|
299
|
+
name: 'deploy',
|
|
300
|
+
outputs: [{ name: 'multisig', type: 'address' }],
|
|
301
|
+
stateMutability: 'nonpayable',
|
|
302
|
+
type: 'function',
|
|
303
|
+
},
|
|
304
|
+
];
|
|
305
|
+
export const SERVICE_REGISTRY_L2_ABI = [
|
|
306
|
+
{
|
|
307
|
+
type: 'event',
|
|
308
|
+
name: 'CreateService',
|
|
309
|
+
inputs: [
|
|
310
|
+
{ name: 'serviceId', type: 'uint256', indexed: true },
|
|
311
|
+
{ name: 'configHash', type: 'bytes32', indexed: false },
|
|
312
|
+
],
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
inputs: [{ name: 'serviceId', type: 'uint256' }],
|
|
316
|
+
name: 'getService',
|
|
317
|
+
outputs: [
|
|
318
|
+
{
|
|
319
|
+
name: 'service',
|
|
320
|
+
type: 'tuple',
|
|
321
|
+
components: [
|
|
322
|
+
{ name: 'securityDeposit', type: 'uint96' },
|
|
323
|
+
{ name: 'multisig', type: 'address' },
|
|
324
|
+
{ name: 'configHash', type: 'bytes32' },
|
|
325
|
+
{ name: 'threshold', type: 'uint32' },
|
|
326
|
+
{ name: 'maxNumAgentInstances', type: 'uint32' },
|
|
327
|
+
{ name: 'numAgentInstances', type: 'uint32' },
|
|
328
|
+
{ name: 'state', type: 'uint8' },
|
|
329
|
+
{ name: 'agentIds', type: 'uint32[]' },
|
|
330
|
+
],
|
|
331
|
+
},
|
|
332
|
+
],
|
|
333
|
+
stateMutability: 'view',
|
|
334
|
+
type: 'function',
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
inputs: [
|
|
338
|
+
{ name: 'serviceId', type: 'uint256' },
|
|
339
|
+
{ name: 'agentInstances', type: 'address[]' },
|
|
340
|
+
{ name: 'agentIds', type: 'uint32[]' },
|
|
341
|
+
],
|
|
342
|
+
name: 'registerAgents',
|
|
343
|
+
outputs: [{ name: 'success', type: 'bool' }],
|
|
344
|
+
stateMutability: 'nonpayable',
|
|
345
|
+
type: 'function',
|
|
346
|
+
},
|
|
347
|
+
{
|
|
348
|
+
inputs: [
|
|
349
|
+
{ name: 'serviceId', type: 'uint256' },
|
|
350
|
+
{ name: 'multisigImplementation', type: 'address' },
|
|
351
|
+
{ name: 'data', type: 'bytes' },
|
|
352
|
+
],
|
|
353
|
+
name: 'deploy',
|
|
354
|
+
outputs: [{ name: 'multisig', type: 'address' }],
|
|
355
|
+
stateMutability: 'nonpayable',
|
|
356
|
+
type: 'function',
|
|
357
|
+
},
|
|
358
|
+
];
|
|
359
|
+
export const ERC20_ABI = [
|
|
360
|
+
{
|
|
361
|
+
inputs: [
|
|
362
|
+
{ name: 'spender', type: 'address' },
|
|
363
|
+
{ name: 'amount', type: 'uint256' },
|
|
364
|
+
],
|
|
365
|
+
name: 'approve',
|
|
366
|
+
outputs: [{ name: '', type: 'bool' }],
|
|
367
|
+
stateMutability: 'nonpayable',
|
|
368
|
+
type: 'function',
|
|
369
|
+
},
|
|
370
|
+
{
|
|
371
|
+
inputs: [{ name: 'account', type: 'address' }],
|
|
372
|
+
name: 'balanceOf',
|
|
373
|
+
outputs: [{ name: '', type: 'uint256' }],
|
|
374
|
+
stateMutability: 'view',
|
|
375
|
+
type: 'function',
|
|
376
|
+
},
|
|
377
|
+
];
|
|
378
|
+
export const STAKING_ABI = [
|
|
379
|
+
{
|
|
380
|
+
inputs: [{ name: 'serviceId', type: 'uint256' }],
|
|
381
|
+
name: 'stake',
|
|
382
|
+
outputs: [],
|
|
383
|
+
stateMutability: 'nonpayable',
|
|
384
|
+
type: 'function',
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
inputs: [{ name: 'serviceId', type: 'uint256' }],
|
|
388
|
+
name: 'getServiceInfo',
|
|
389
|
+
outputs: [
|
|
390
|
+
{ name: 'securityDeposit', type: 'uint256' },
|
|
391
|
+
{ name: 'multisig', type: 'address' },
|
|
392
|
+
{ name: 'nonces', type: 'uint256[]' },
|
|
393
|
+
{ name: 'tsStart', type: 'uint256' },
|
|
394
|
+
],
|
|
395
|
+
stateMutability: 'view',
|
|
396
|
+
type: 'function',
|
|
397
|
+
},
|
|
398
|
+
{
|
|
399
|
+
inputs: [{ name: 'serviceId', type: 'uint256' }],
|
|
400
|
+
name: 'getStakingState',
|
|
401
|
+
outputs: [{ name: 'stakingState', type: 'uint8' }],
|
|
402
|
+
stateMutability: 'view',
|
|
403
|
+
type: 'function',
|
|
404
|
+
},
|
|
405
|
+
{
|
|
406
|
+
inputs: [],
|
|
407
|
+
name: 'getServiceIds',
|
|
408
|
+
outputs: [{ name: 'serviceIds', type: 'uint256[]' }],
|
|
409
|
+
stateMutability: 'view',
|
|
410
|
+
type: 'function',
|
|
411
|
+
},
|
|
412
|
+
];
|
|
413
|
+
export const SERVICE_REGISTRY_APPROVE_ABI = [
|
|
414
|
+
{
|
|
415
|
+
inputs: [
|
|
416
|
+
{ name: 'to', type: 'address' },
|
|
417
|
+
{ name: 'tokenId', type: 'uint256' },
|
|
418
|
+
],
|
|
419
|
+
name: 'approve',
|
|
420
|
+
outputs: [],
|
|
421
|
+
stateMutability: 'nonpayable',
|
|
422
|
+
type: 'function',
|
|
423
|
+
},
|
|
424
|
+
];
|
|
425
|
+
export const MECH_MARKETPLACE_CREATE_ABI = [
|
|
426
|
+
{
|
|
427
|
+
inputs: [
|
|
428
|
+
{ name: 'serviceId', type: 'uint256' },
|
|
429
|
+
{ name: 'mechFactory', type: 'address' },
|
|
430
|
+
{ name: 'payload', type: 'bytes' },
|
|
431
|
+
],
|
|
432
|
+
name: 'create',
|
|
433
|
+
outputs: [{ name: 'mech', type: 'address' }],
|
|
434
|
+
stateMutability: 'nonpayable',
|
|
435
|
+
type: 'function',
|
|
436
|
+
},
|
|
437
|
+
];
|
|
438
|
+
// ---------------------------------------------------------------------------
|
|
439
|
+
// Event topics for strict log filtering
|
|
440
|
+
// ---------------------------------------------------------------------------
|
|
441
|
+
export const EVENT_TOPICS = {
|
|
442
|
+
CreateService: keccak256(stringToBytes('CreateService(uint256,bytes32)')),
|
|
443
|
+
CreateMultisigWithAgents: keccak256(stringToBytes('CreateMultisigWithAgents(uint256,address)')),
|
|
444
|
+
};
|
|
445
|
+
// ---------------------------------------------------------------------------
|
|
446
|
+
// stOLAS ExternalStakingDistributor (Base mainnet)
|
|
447
|
+
// ---------------------------------------------------------------------------
|
|
448
|
+
export const STOLAS_DISTRIBUTOR = '0x40abf47B926181148000DbCC7c8DE76A3a61a66f';
|
|
449
|
+
export const STOLAS_DISTRIBUTOR_ABI = [
|
|
450
|
+
{
|
|
451
|
+
inputs: [{ name: 'stakingProxy', type: 'address' }],
|
|
452
|
+
name: 'mapStakingProxyConfigs',
|
|
453
|
+
outputs: [{ name: '', type: 'uint256' }],
|
|
454
|
+
stateMutability: 'view',
|
|
455
|
+
type: 'function',
|
|
456
|
+
},
|
|
457
|
+
{
|
|
458
|
+
inputs: [
|
|
459
|
+
{ name: 'stakingProxy', type: 'address' },
|
|
460
|
+
{ name: 'serviceId', type: 'uint256' },
|
|
461
|
+
{ name: 'agentId', type: 'uint256' },
|
|
462
|
+
{ name: 'configHash', type: 'bytes32' },
|
|
463
|
+
{ name: 'agentInstance', type: 'address' },
|
|
464
|
+
],
|
|
465
|
+
name: 'stake',
|
|
466
|
+
outputs: [],
|
|
467
|
+
stateMutability: 'nonpayable',
|
|
468
|
+
type: 'function',
|
|
469
|
+
},
|
|
470
|
+
{
|
|
471
|
+
inputs: [
|
|
472
|
+
{ name: 'stakingProxy', type: 'address' },
|
|
473
|
+
{ name: 'serviceId', type: 'uint256' },
|
|
474
|
+
{ name: 'operation', type: 'bytes32' },
|
|
475
|
+
],
|
|
476
|
+
name: 'unstakeAndWithdraw',
|
|
477
|
+
outputs: [],
|
|
478
|
+
stateMutability: 'nonpayable',
|
|
479
|
+
type: 'function',
|
|
480
|
+
},
|
|
481
|
+
{
|
|
482
|
+
inputs: [
|
|
483
|
+
{ name: 'stakingProxy', type: 'address' },
|
|
484
|
+
{ name: 'serviceId', type: 'uint256' },
|
|
485
|
+
],
|
|
486
|
+
name: 'reStake',
|
|
487
|
+
outputs: [],
|
|
488
|
+
stateMutability: 'nonpayable',
|
|
489
|
+
type: 'function',
|
|
490
|
+
},
|
|
491
|
+
{
|
|
492
|
+
inputs: [
|
|
493
|
+
{ name: 'stakingProxies', type: 'address[]' },
|
|
494
|
+
{ name: 'serviceIds', type: 'uint256[]' },
|
|
495
|
+
],
|
|
496
|
+
name: 'claim',
|
|
497
|
+
outputs: [{ name: 'rewards', type: 'uint256[]' }],
|
|
498
|
+
stateMutability: 'nonpayable',
|
|
499
|
+
type: 'function',
|
|
500
|
+
},
|
|
501
|
+
];
|
|
502
|
+
export const STOLAS_STAKING_SLOTS_ABI = [
|
|
503
|
+
{
|
|
504
|
+
inputs: [],
|
|
505
|
+
name: 'getServiceIds',
|
|
506
|
+
outputs: [{ name: 'serviceIds', type: 'uint256[]' }],
|
|
507
|
+
stateMutability: 'view',
|
|
508
|
+
type: 'function',
|
|
509
|
+
},
|
|
510
|
+
{
|
|
511
|
+
inputs: [],
|
|
512
|
+
name: 'maxNumServices',
|
|
513
|
+
outputs: [{ name: '', type: 'uint256' }],
|
|
514
|
+
stateMutability: 'view',
|
|
515
|
+
type: 'function',
|
|
516
|
+
},
|
|
517
|
+
];
|
|
518
|
+
//# sourceMappingURL=contracts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/earning/contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* evidence-simhash.ts — Compute SimHash of evidence checkpoints for anti-farming.
|
|
3
|
+
*
|
|
4
|
+
* SimHash produces a 256-bit fingerprint where similar inputs produce similar hashes
|
|
5
|
+
* (low Hamming distance). The on-chain activity checker (RestorationActivityCheckerV2)
|
|
6
|
+
* compares these hashes to detect farming — repeated submission of similar evidence.
|
|
7
|
+
*
|
|
8
|
+
* The algorithm:
|
|
9
|
+
* 1. Extract string features from the evidence checkpoint
|
|
10
|
+
* 2. Hash each feature to 256 bits via keccak256
|
|
11
|
+
* 3. For each bit position, tally +1 (bit set) or -1 (bit unset) across all features
|
|
12
|
+
* 4. The SimHash bit is 1 if the tally is non-negative, 0 otherwise
|
|
13
|
+
*/
|
|
14
|
+
import { type Hex } from 'viem';
|
|
15
|
+
/** Structured evidence checkpoint captured during restoration. */
|
|
16
|
+
export interface EvidenceCheckpointV1 {
|
|
17
|
+
version: 1;
|
|
18
|
+
/** keccak256 of the desired state description text. */
|
|
19
|
+
desiredStateHash: string;
|
|
20
|
+
/** Tool calls made during restoration. */
|
|
21
|
+
toolCalls: {
|
|
22
|
+
/** Normalized tool name (lowercase, trimmed). */
|
|
23
|
+
name: string;
|
|
24
|
+
/** keccak256 of JSON-stringified sorted args. */
|
|
25
|
+
argsHash: string;
|
|
26
|
+
}[];
|
|
27
|
+
/** External interactions (API calls, file reads, etc.). */
|
|
28
|
+
externalInteractions: {
|
|
29
|
+
/** Normalized URL or path. */
|
|
30
|
+
endpoint: string;
|
|
31
|
+
/** HTTP method or interaction type. */
|
|
32
|
+
method: string;
|
|
33
|
+
}[];
|
|
34
|
+
/** Restoration outcome. */
|
|
35
|
+
outcome: 'success' | 'failure' | 'partial';
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Extract string features from an evidence checkpoint.
|
|
39
|
+
* Each feature becomes one "vote" in the SimHash computation.
|
|
40
|
+
*/
|
|
41
|
+
export declare function extractFeatures(checkpoint: EvidenceCheckpointV1): string[];
|
|
42
|
+
/**
|
|
43
|
+
* Compute a 256-bit SimHash from an array of string features.
|
|
44
|
+
*
|
|
45
|
+
* Each feature is hashed to 256 bits via keccak256. For each bit position,
|
|
46
|
+
* we tally +1 if the bit is set, -1 if not. The output bit is 1 if the
|
|
47
|
+
* tally is non-negative.
|
|
48
|
+
*/
|
|
49
|
+
export declare function simhashFromFeatures(features: string[]): Hex;
|
|
50
|
+
/**
|
|
51
|
+
* Compute the SimHash of an evidence checkpoint.
|
|
52
|
+
* Returns a bytes32 hex string suitable for submission to the on-chain activity checker.
|
|
53
|
+
*/
|
|
54
|
+
export declare function computeEvidenceSimHash(checkpoint: EvidenceCheckpointV1): Hex;
|
|
55
|
+
/**
|
|
56
|
+
* Compute the Hamming distance between two bytes32 hex strings.
|
|
57
|
+
* Useful for client-side similarity checking before submitting on-chain.
|
|
58
|
+
*/
|
|
59
|
+
export declare function hammingDistance(a: Hex, b: Hex): number;
|