@jinn-network/client 0.1.0

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.
Files changed (278) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +162 -0
  3. package/deployments/deployment-phase1a-l2-baseSepolia-fast.json +32 -0
  4. package/deployments/deployment-phase1a-token-baseSepolia-fast.json +27 -0
  5. package/deployments/deployment-phase1b-mech-baseSepolia-fast.json +26 -0
  6. package/deployments/deployment-stolas-l2-baseSepolia-fast.json +35 -0
  7. package/dist/adapters/adapter.d.ts +11 -0
  8. package/dist/adapters/adapter.js +2 -0
  9. package/dist/adapters/adapter.js.map +1 -0
  10. package/dist/adapters/local/adapter.d.ts +20 -0
  11. package/dist/adapters/local/adapter.js +146 -0
  12. package/dist/adapters/local/adapter.js.map +1 -0
  13. package/dist/adapters/mech/adapter.d.ts +29 -0
  14. package/dist/adapters/mech/adapter.js +332 -0
  15. package/dist/adapters/mech/adapter.js.map +1 -0
  16. package/dist/adapters/mech/claim-policy.d.ts +40 -0
  17. package/dist/adapters/mech/claim-policy.js +104 -0
  18. package/dist/adapters/mech/claim-policy.js.map +1 -0
  19. package/dist/adapters/mech/contracts.d.ts +44 -0
  20. package/dist/adapters/mech/contracts.js +323 -0
  21. package/dist/adapters/mech/contracts.js.map +1 -0
  22. package/dist/adapters/mech/ipfs.d.ts +43 -0
  23. package/dist/adapters/mech/ipfs.js +142 -0
  24. package/dist/adapters/mech/ipfs.js.map +1 -0
  25. package/dist/adapters/mech/safe.d.ts +15 -0
  26. package/dist/adapters/mech/safe.js +113 -0
  27. package/dist/adapters/mech/safe.js.map +1 -0
  28. package/dist/adapters/mech/types.d.ts +561 -0
  29. package/dist/adapters/mech/types.js +340 -0
  30. package/dist/adapters/mech/types.js.map +1 -0
  31. package/dist/api/balance-build.d.ts +22 -0
  32. package/dist/api/balance-build.js +37 -0
  33. package/dist/api/balance-build.js.map +1 -0
  34. package/dist/api/fleet-build.d.ts +62 -0
  35. package/dist/api/fleet-build.js +91 -0
  36. package/dist/api/fleet-build.js.map +1 -0
  37. package/dist/api/gather-status.d.ts +20 -0
  38. package/dist/api/gather-status.js +137 -0
  39. package/dist/api/gather-status.js.map +1 -0
  40. package/dist/api/history-build.d.ts +32 -0
  41. package/dist/api/history-build.js +48 -0
  42. package/dist/api/history-build.js.map +1 -0
  43. package/dist/api/peers.d.ts +27 -0
  44. package/dist/api/peers.js +94 -0
  45. package/dist/api/peers.js.map +1 -0
  46. package/dist/api/rewards-build.d.ts +20 -0
  47. package/dist/api/rewards-build.js +42 -0
  48. package/dist/api/rewards-build.js.map +1 -0
  49. package/dist/api/server.d.ts +34 -0
  50. package/dist/api/server.js +130 -0
  51. package/dist/api/server.js.map +1 -0
  52. package/dist/api/status-build.d.ts +92 -0
  53. package/dist/api/status-build.js +175 -0
  54. package/dist/api/status-build.js.map +1 -0
  55. package/dist/api/status-rollup-build.d.ts +36 -0
  56. package/dist/api/status-rollup-build.js +69 -0
  57. package/dist/api/status-rollup-build.js.map +1 -0
  58. package/dist/auth/erc8128.d.ts +43 -0
  59. package/dist/auth/erc8128.js +88 -0
  60. package/dist/auth/erc8128.js.map +1 -0
  61. package/dist/bin/jinn.d.ts +11 -0
  62. package/dist/bin/jinn.js +20 -0
  63. package/dist/bin/jinn.js.map +1 -0
  64. package/dist/build-meta.json +3 -0
  65. package/dist/chain-read-errors.d.ts +9 -0
  66. package/dist/chain-read-errors.js +43 -0
  67. package/dist/chain-read-errors.js.map +1 -0
  68. package/dist/cli/action.d.ts +26 -0
  69. package/dist/cli/action.js +56 -0
  70. package/dist/cli/action.js.map +1 -0
  71. package/dist/cli/command.d.ts +62 -0
  72. package/dist/cli/command.js +29 -0
  73. package/dist/cli/command.js.map +1 -0
  74. package/dist/cli/commands/balance.d.ts +3 -0
  75. package/dist/cli/commands/balance.js +46 -0
  76. package/dist/cli/commands/balance.js.map +1 -0
  77. package/dist/cli/commands/bootstrap.d.ts +3 -0
  78. package/dist/cli/commands/bootstrap.js +165 -0
  79. package/dist/cli/commands/bootstrap.js.map +1 -0
  80. package/dist/cli/commands/claim-rewards.d.ts +3 -0
  81. package/dist/cli/commands/claim-rewards.js +121 -0
  82. package/dist/cli/commands/claim-rewards.js.map +1 -0
  83. package/dist/cli/commands/doctor.d.ts +3 -0
  84. package/dist/cli/commands/doctor.js +151 -0
  85. package/dist/cli/commands/doctor.js.map +1 -0
  86. package/dist/cli/commands/fleet-scale.d.ts +3 -0
  87. package/dist/cli/commands/fleet-scale.js +449 -0
  88. package/dist/cli/commands/fleet-scale.js.map +1 -0
  89. package/dist/cli/commands/fleet.d.ts +3 -0
  90. package/dist/cli/commands/fleet.js +45 -0
  91. package/dist/cli/commands/fleet.js.map +1 -0
  92. package/dist/cli/commands/fund-requirements.d.ts +3 -0
  93. package/dist/cli/commands/fund-requirements.js +139 -0
  94. package/dist/cli/commands/fund-requirements.js.map +1 -0
  95. package/dist/cli/commands/history.d.ts +3 -0
  96. package/dist/cli/commands/history.js +61 -0
  97. package/dist/cli/commands/history.js.map +1 -0
  98. package/dist/cli/commands/init.d.ts +3 -0
  99. package/dist/cli/commands/init.js +91 -0
  100. package/dist/cli/commands/init.js.map +1 -0
  101. package/dist/cli/commands/keys-backup.d.ts +3 -0
  102. package/dist/cli/commands/keys-backup.js +107 -0
  103. package/dist/cli/commands/keys-backup.js.map +1 -0
  104. package/dist/cli/commands/logs.d.ts +3 -0
  105. package/dist/cli/commands/logs.js +69 -0
  106. package/dist/cli/commands/logs.js.map +1 -0
  107. package/dist/cli/commands/rewards.d.ts +3 -0
  108. package/dist/cli/commands/rewards.js +54 -0
  109. package/dist/cli/commands/rewards.js.map +1 -0
  110. package/dist/cli/commands/run.d.ts +3 -0
  111. package/dist/cli/commands/run.js +96 -0
  112. package/dist/cli/commands/run.js.map +1 -0
  113. package/dist/cli/commands/status.d.ts +3 -0
  114. package/dist/cli/commands/status.js +54 -0
  115. package/dist/cli/commands/status.js.map +1 -0
  116. package/dist/cli/commands/stop.d.ts +3 -0
  117. package/dist/cli/commands/stop.js +82 -0
  118. package/dist/cli/commands/stop.js.map +1 -0
  119. package/dist/cli/commands/submit-intent.d.ts +3 -0
  120. package/dist/cli/commands/submit-intent.js +169 -0
  121. package/dist/cli/commands/submit-intent.js.map +1 -0
  122. package/dist/cli/commands/version.d.ts +3 -0
  123. package/dist/cli/commands/version.js +114 -0
  124. package/dist/cli/commands/version.js.map +1 -0
  125. package/dist/cli/commands/withdraw.d.ts +3 -0
  126. package/dist/cli/commands/withdraw.js +181 -0
  127. package/dist/cli/commands/withdraw.js.map +1 -0
  128. package/dist/cli/deployment-digest.d.ts +10 -0
  129. package/dist/cli/deployment-digest.js +25 -0
  130. package/dist/cli/deployment-digest.js.map +1 -0
  131. package/dist/cli/execution-context.d.ts +50 -0
  132. package/dist/cli/execution-context.js +154 -0
  133. package/dist/cli/execution-context.js.map +1 -0
  134. package/dist/cli/help.d.ts +3 -0
  135. package/dist/cli/help.js +37 -0
  136. package/dist/cli/help.js.map +1 -0
  137. package/dist/cli/index.d.ts +17 -0
  138. package/dist/cli/index.js +132 -0
  139. package/dist/cli/index.js.map +1 -0
  140. package/dist/cli/introspection-context.d.ts +10 -0
  141. package/dist/cli/introspection-context.js +60 -0
  142. package/dist/cli/introspection-context.js.map +1 -0
  143. package/dist/cli/output.d.ts +36 -0
  144. package/dist/cli/output.js +35 -0
  145. package/dist/cli/output.js.map +1 -0
  146. package/dist/cli/password.d.ts +12 -0
  147. package/dist/cli/password.js +51 -0
  148. package/dist/cli/password.js.map +1 -0
  149. package/dist/config.d.ts +174 -0
  150. package/dist/config.js +252 -0
  151. package/dist/config.js.map +1 -0
  152. package/dist/daemon/creator.d.ts +24 -0
  153. package/dist/daemon/creator.js +80 -0
  154. package/dist/daemon/creator.js.map +1 -0
  155. package/dist/daemon/daemon.d.ts +60 -0
  156. package/dist/daemon/daemon.js +158 -0
  157. package/dist/daemon/daemon.js.map +1 -0
  158. package/dist/daemon/delivery-watcher.d.ts +10 -0
  159. package/dist/daemon/delivery-watcher.js +37 -0
  160. package/dist/daemon/delivery-watcher.js.map +1 -0
  161. package/dist/daemon/restorer.d.ts +19 -0
  162. package/dist/daemon/restorer.js +82 -0
  163. package/dist/daemon/restorer.js.map +1 -0
  164. package/dist/daemon/reward-claim-loop.d.ts +38 -0
  165. package/dist/daemon/reward-claim-loop.js +48 -0
  166. package/dist/daemon/reward-claim-loop.js.map +1 -0
  167. package/dist/discovery/registry.d.ts +43 -0
  168. package/dist/discovery/registry.js +104 -0
  169. package/dist/discovery/registry.js.map +1 -0
  170. package/dist/discovery/subgraph.d.ts +37 -0
  171. package/dist/discovery/subgraph.js +87 -0
  172. package/dist/discovery/subgraph.js.map +1 -0
  173. package/dist/earning/bootstrap.d.ts +79 -0
  174. package/dist/earning/bootstrap.js +989 -0
  175. package/dist/earning/bootstrap.js.map +1 -0
  176. package/dist/earning/contracts.d.ts +431 -0
  177. package/dist/earning/contracts.js +518 -0
  178. package/dist/earning/contracts.js.map +1 -0
  179. package/dist/earning/evidence-simhash.d.ts +59 -0
  180. package/dist/earning/evidence-simhash.js +87 -0
  181. package/dist/earning/evidence-simhash.js.map +1 -0
  182. package/dist/earning/fleet-display-index.d.ts +8 -0
  183. package/dist/earning/fleet-display-index.js +12 -0
  184. package/dist/earning/fleet-display-index.js.map +1 -0
  185. package/dist/earning/fleet-retire.d.ts +28 -0
  186. package/dist/earning/fleet-retire.js +75 -0
  187. package/dist/earning/fleet-retire.js.map +1 -0
  188. package/dist/earning/jinn-rewards.d.ts +62 -0
  189. package/dist/earning/jinn-rewards.js +81 -0
  190. package/dist/earning/jinn-rewards.js.map +1 -0
  191. package/dist/earning/next-service-index.d.ts +4 -0
  192. package/dist/earning/next-service-index.js +7 -0
  193. package/dist/earning/next-service-index.js.map +1 -0
  194. package/dist/earning/orphan-sweep.d.ts +33 -0
  195. package/dist/earning/orphan-sweep.js +157 -0
  196. package/dist/earning/orphan-sweep.js.map +1 -0
  197. package/dist/earning/reconcile.d.ts +37 -0
  198. package/dist/earning/reconcile.js +216 -0
  199. package/dist/earning/reconcile.js.map +1 -0
  200. package/dist/earning/safe-adapter.d.ts +70 -0
  201. package/dist/earning/safe-adapter.js +228 -0
  202. package/dist/earning/safe-adapter.js.map +1 -0
  203. package/dist/earning/stolas-claim.d.ts +47 -0
  204. package/dist/earning/stolas-claim.js +115 -0
  205. package/dist/earning/stolas-claim.js.map +1 -0
  206. package/dist/earning/store.d.ts +36 -0
  207. package/dist/earning/store.js +156 -0
  208. package/dist/earning/store.js.map +1 -0
  209. package/dist/earning/types.d.ts +123 -0
  210. package/dist/earning/types.js +64 -0
  211. package/dist/earning/types.js.map +1 -0
  212. package/dist/earning/viem-clients.d.ts +9 -0
  213. package/dist/earning/viem-clients.js +22 -0
  214. package/dist/earning/viem-clients.js.map +1 -0
  215. package/dist/earning/wallet.d.ts +20 -0
  216. package/dist/earning/wallet.js +103 -0
  217. package/dist/earning/wallet.js.map +1 -0
  218. package/dist/errors/envelope.d.ts +41 -0
  219. package/dist/errors/envelope.js +48 -0
  220. package/dist/errors/envelope.js.map +1 -0
  221. package/dist/index.d.ts +14 -0
  222. package/dist/index.js +17 -0
  223. package/dist/index.js.map +1 -0
  224. package/dist/main.d.ts +32 -0
  225. package/dist/main.js +281 -0
  226. package/dist/main.js.map +1 -0
  227. package/dist/mcp/server.d.ts +14 -0
  228. package/dist/mcp/server.js +205 -0
  229. package/dist/mcp/server.js.map +1 -0
  230. package/dist/operator-errors.d.ts +16 -0
  231. package/dist/operator-errors.js +88 -0
  232. package/dist/operator-errors.js.map +1 -0
  233. package/dist/preflight/claude-binary.d.ts +19 -0
  234. package/dist/preflight/claude-binary.js +44 -0
  235. package/dist/preflight/claude-binary.js.map +1 -0
  236. package/dist/preflight/claude-invocation-envelope.d.ts +11 -0
  237. package/dist/preflight/claude-invocation-envelope.js +67 -0
  238. package/dist/preflight/claude-invocation-envelope.js.map +1 -0
  239. package/dist/runner/claude.d.ts +15 -0
  240. package/dist/runner/claude.js +193 -0
  241. package/dist/runner/claude.js.map +1 -0
  242. package/dist/runner/runner.d.ts +11 -0
  243. package/dist/runner/runner.js +2 -0
  244. package/dist/runner/runner.js.map +1 -0
  245. package/dist/runner/simple.d.ts +8 -0
  246. package/dist/runner/simple.js +11 -0
  247. package/dist/runner/simple.js.map +1 -0
  248. package/dist/store/store.d.ts +74 -0
  249. package/dist/store/store.js +168 -0
  250. package/dist/store/store.js.map +1 -0
  251. package/dist/tx-retry.d.ts +55 -0
  252. package/dist/tx-retry.js +214 -0
  253. package/dist/tx-retry.js.map +1 -0
  254. package/dist/types/desired-state.d.ts +41 -0
  255. package/dist/types/desired-state.js +16 -0
  256. package/dist/types/desired-state.js.map +1 -0
  257. package/dist/types/errors.d.ts +8 -0
  258. package/dist/types/errors.js +17 -0
  259. package/dist/types/errors.js.map +1 -0
  260. package/dist/types/index.d.ts +2 -0
  261. package/dist/types/index.js +3 -0
  262. package/dist/types/index.js.map +1 -0
  263. package/dist/withdraw/args.d.ts +29 -0
  264. package/dist/withdraw/args.js +198 -0
  265. package/dist/withdraw/args.js.map +1 -0
  266. package/dist/withdraw/run-withdraw-plan.d.ts +21 -0
  267. package/dist/withdraw/run-withdraw-plan.js +257 -0
  268. package/dist/withdraw/run-withdraw-plan.js.map +1 -0
  269. package/dist/x402/acquire.d.ts +6 -0
  270. package/dist/x402/acquire.js +32 -0
  271. package/dist/x402/acquire.js.map +1 -0
  272. package/dist/x402/facilitator.d.ts +11 -0
  273. package/dist/x402/facilitator.js +52 -0
  274. package/dist/x402/facilitator.js.map +1 -0
  275. package/dist/x402/handler.d.ts +15 -0
  276. package/dist/x402/handler.js +40 -0
  277. package/dist/x402/handler.js.map +1 -0
  278. 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;