holosphere 2.0.0-alpha1 → 2.0.0-alpha4

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 (154) hide show
  1. package/dist/2019-D2OG2idw.js +6680 -0
  2. package/dist/2019-D2OG2idw.js.map +1 -0
  3. package/dist/2019-EION3wKo.cjs +8 -0
  4. package/dist/2019-EION3wKo.cjs.map +1 -0
  5. package/dist/_commonjsHelpers-C37NGDzP.cjs +2 -0
  6. package/dist/_commonjsHelpers-C37NGDzP.cjs.map +1 -0
  7. package/dist/_commonjsHelpers-CUmg6egw.js +7 -0
  8. package/dist/_commonjsHelpers-CUmg6egw.js.map +1 -0
  9. package/dist/browser-BSniCNqO.js +3058 -0
  10. package/dist/browser-BSniCNqO.js.map +1 -0
  11. package/dist/browser-Cq59Ij19.cjs +2 -0
  12. package/dist/browser-Cq59Ij19.cjs.map +1 -0
  13. package/dist/cjs/holosphere.cjs +2 -0
  14. package/dist/cjs/holosphere.cjs.map +1 -0
  15. package/dist/esm/holosphere.js +53 -0
  16. package/dist/esm/holosphere.js.map +1 -0
  17. package/dist/index-BB_vVJgv.cjs +5 -0
  18. package/dist/index-BB_vVJgv.cjs.map +1 -0
  19. package/dist/index-CBitK71M.cjs +12 -0
  20. package/dist/index-CBitK71M.cjs.map +1 -0
  21. package/dist/index-CV0eOogK.js +37423 -0
  22. package/dist/index-CV0eOogK.js.map +1 -0
  23. package/dist/index-Cz-PLCUR.js +15104 -0
  24. package/dist/index-Cz-PLCUR.js.map +1 -0
  25. package/dist/indexeddb-storage-CRsZyB2f.cjs +2 -0
  26. package/dist/indexeddb-storage-CRsZyB2f.cjs.map +1 -0
  27. package/dist/indexeddb-storage-DZaGlY_a.js +132 -0
  28. package/dist/indexeddb-storage-DZaGlY_a.js.map +1 -0
  29. package/dist/memory-storage-BkUi6sZG.js +51 -0
  30. package/dist/memory-storage-BkUi6sZG.js.map +1 -0
  31. package/dist/memory-storage-C0DuUsdY.cjs +2 -0
  32. package/dist/memory-storage-C0DuUsdY.cjs.map +1 -0
  33. package/dist/secp256k1-0kPdAVkK.cjs +12 -0
  34. package/dist/secp256k1-0kPdAVkK.cjs.map +1 -0
  35. package/dist/secp256k1-DN4FVXcv.js +1890 -0
  36. package/dist/secp256k1-DN4FVXcv.js.map +1 -0
  37. package/docs/CONTRACTS.md +797 -0
  38. package/docs/FOSDEM_PROPOSAL.md +388 -0
  39. package/docs/LOCALFIRST.md +266 -0
  40. package/docs/contracts/api-interface.md +793 -0
  41. package/docs/data-model.md +476 -0
  42. package/docs/gun-async-usage.md +338 -0
  43. package/docs/plan.md +349 -0
  44. package/docs/quickstart.md +674 -0
  45. package/docs/research.md +362 -0
  46. package/docs/spec.md +244 -0
  47. package/docs/storage-backends.md +326 -0
  48. package/docs/tasks.md +947 -0
  49. package/examples/demo.html +47 -0
  50. package/package.json +10 -5
  51. package/src/contracts/abis/Appreciative.json +1280 -0
  52. package/src/contracts/abis/AppreciativeFactory.json +101 -0
  53. package/src/contracts/abis/Bundle.json +1435 -0
  54. package/src/contracts/abis/BundleFactory.json +106 -0
  55. package/src/contracts/abis/Holon.json +881 -0
  56. package/src/contracts/abis/Holons.json +330 -0
  57. package/src/contracts/abis/Managed.json +1262 -0
  58. package/src/contracts/abis/ManagedFactory.json +149 -0
  59. package/src/contracts/abis/Membrane.json +261 -0
  60. package/src/contracts/abis/Splitter.json +1624 -0
  61. package/src/contracts/abis/SplitterFactory.json +220 -0
  62. package/src/contracts/abis/TestToken.json +321 -0
  63. package/src/contracts/abis/Zoned.json +1461 -0
  64. package/src/contracts/abis/ZonedFactory.json +154 -0
  65. package/src/contracts/chain-manager.js +375 -0
  66. package/src/contracts/deployer.js +443 -0
  67. package/src/contracts/event-listener.js +507 -0
  68. package/src/contracts/holon-contracts.js +344 -0
  69. package/src/contracts/index.js +83 -0
  70. package/src/contracts/networks.js +224 -0
  71. package/src/contracts/operations.js +670 -0
  72. package/src/contracts/queries.js +589 -0
  73. package/src/core/holosphere.js +453 -1
  74. package/src/crypto/nostr-utils.js +263 -0
  75. package/src/federation/handshake.js +455 -0
  76. package/src/federation/hologram.js +1 -1
  77. package/src/hierarchical/upcast.js +6 -5
  78. package/src/index.js +463 -1939
  79. package/src/lib/ai-methods.js +308 -0
  80. package/src/lib/contract-methods.js +293 -0
  81. package/src/lib/errors.js +23 -0
  82. package/src/lib/federation-methods.js +238 -0
  83. package/src/lib/index.js +26 -0
  84. package/src/spatial/h3-operations.js +2 -2
  85. package/src/storage/backends/gundb-backend.js +377 -46
  86. package/src/storage/global-tables.js +28 -1
  87. package/src/storage/gun-auth.js +303 -0
  88. package/src/storage/gun-federation.js +776 -0
  89. package/src/storage/gun-references.js +198 -0
  90. package/src/storage/gun-schema.js +291 -0
  91. package/src/storage/gun-wrapper.js +347 -31
  92. package/src/storage/indexeddb-storage.js +49 -11
  93. package/src/storage/memory-storage.js +5 -0
  94. package/src/storage/nostr-async.js +45 -23
  95. package/src/storage/nostr-client.js +11 -5
  96. package/src/storage/persistent-storage.js +6 -1
  97. package/src/storage/unified-storage.js +119 -0
  98. package/src/subscriptions/manager.js +1 -1
  99. package/types/index.d.ts +133 -0
  100. package/tests/unit/ai/aggregation.test.js +0 -295
  101. package/tests/unit/ai/breakdown.test.js +0 -446
  102. package/tests/unit/ai/classifier.test.js +0 -294
  103. package/tests/unit/ai/council.test.js +0 -262
  104. package/tests/unit/ai/embeddings.test.js +0 -384
  105. package/tests/unit/ai/federation-ai.test.js +0 -344
  106. package/tests/unit/ai/h3-ai.test.js +0 -458
  107. package/tests/unit/ai/index.test.js +0 -304
  108. package/tests/unit/ai/json-ops.test.js +0 -307
  109. package/tests/unit/ai/llm-service.test.js +0 -390
  110. package/tests/unit/ai/nl-query.test.js +0 -383
  111. package/tests/unit/ai/relationships.test.js +0 -311
  112. package/tests/unit/ai/schema-extractor.test.js +0 -384
  113. package/tests/unit/ai/spatial.test.js +0 -279
  114. package/tests/unit/ai/tts.test.js +0 -279
  115. package/tests/unit/content.test.js +0 -332
  116. package/tests/unit/contract/core.test.js +0 -88
  117. package/tests/unit/contract/crypto.test.js +0 -198
  118. package/tests/unit/contract/data.test.js +0 -223
  119. package/tests/unit/contract/federation.test.js +0 -181
  120. package/tests/unit/contract/hierarchical.test.js +0 -113
  121. package/tests/unit/contract/schema.test.js +0 -114
  122. package/tests/unit/contract/social.test.js +0 -217
  123. package/tests/unit/contract/spatial.test.js +0 -110
  124. package/tests/unit/contract/subscriptions.test.js +0 -128
  125. package/tests/unit/contract/utils.test.js +0 -159
  126. package/tests/unit/core.test.js +0 -152
  127. package/tests/unit/crypto.test.js +0 -328
  128. package/tests/unit/federation.test.js +0 -234
  129. package/tests/unit/gun-async.test.js +0 -252
  130. package/tests/unit/hierarchical.test.js +0 -399
  131. package/tests/unit/integration/scenario-01-geographic-storage.test.js +0 -74
  132. package/tests/unit/integration/scenario-02-federation.test.js +0 -76
  133. package/tests/unit/integration/scenario-03-subscriptions.test.js +0 -102
  134. package/tests/unit/integration/scenario-04-validation.test.js +0 -129
  135. package/tests/unit/integration/scenario-05-hierarchy.test.js +0 -125
  136. package/tests/unit/integration/scenario-06-social.test.js +0 -135
  137. package/tests/unit/integration/scenario-07-persistence.test.js +0 -130
  138. package/tests/unit/integration/scenario-08-authorization.test.js +0 -161
  139. package/tests/unit/integration/scenario-09-cross-dimensional.test.js +0 -139
  140. package/tests/unit/integration/scenario-10-cross-holosphere-capabilities.test.js +0 -357
  141. package/tests/unit/integration/scenario-11-cross-holosphere-federation.test.js +0 -410
  142. package/tests/unit/integration/scenario-12-capability-federated-read.test.js +0 -719
  143. package/tests/unit/performance/benchmark.test.js +0 -85
  144. package/tests/unit/schema.test.js +0 -213
  145. package/tests/unit/spatial.test.js +0 -158
  146. package/tests/unit/storage.test.js +0 -195
  147. package/tests/unit/subscriptions.test.js +0 -328
  148. package/tests/unit/test-data-permanence-debug.js +0 -197
  149. package/tests/unit/test-data-permanence.js +0 -340
  150. package/tests/unit/test-key-persistence-fixed.js +0 -148
  151. package/tests/unit/test-key-persistence.js +0 -172
  152. package/tests/unit/test-relay-permanence.js +0 -376
  153. package/tests/unit/test-second-node.js +0 -95
  154. package/tests/unit/test-simple-write.js +0 -89
@@ -0,0 +1,797 @@
1
+ # Holosphere Smart Contracts Integration
2
+
3
+ This guide covers the smart contracts module in Holosphere, enabling fractal fund distribution where every holon can become a recipient of ETH/ERC20 tokens.
4
+
5
+ ## Table of Contents
6
+
7
+ 1. [Overview](#overview)
8
+ 2. [Quick Start](#quick-start)
9
+ 3. [Contract Types](#contract-types)
10
+ 4. [1-Click Deployment](#1-click-deployment)
11
+ 5. [Per-Holon Contracts](#per-holon-contracts)
12
+ 6. [All Contract Operations](#all-contract-operations)
13
+ 7. [Multi-Chain Support](#multi-chain-support)
14
+ 8. [Examples](#examples)
15
+
16
+ ---
17
+
18
+ ## Overview
19
+
20
+ The contracts module integrates a hierarchical fund distribution system into Holosphere:
21
+
22
+ ```
23
+ ┌─────────────────────┐
24
+ │ Funds Received │
25
+ │ (ETH or ERC20) │
26
+ └──────────┬──────────┘
27
+
28
+ ┌──────────▼──────────┐
29
+ │ Splitter │
30
+ │ (70% / 30% split) │
31
+ └──────────┬──────────┘
32
+
33
+ ┌────────────────┴────────────────┐
34
+ │ │
35
+ ┌─────────▼─────────┐ ┌─────────▼─────────┐
36
+ │ Managed │ │ Zoned │
37
+ │ (Appreciation) │ │ (Tier-based) │
38
+ └─────────┬─────────┘ └─────────┬─────────┘
39
+ │ │
40
+ ┌─────────┴─────────┐ ┌─────────┴─────────┐
41
+ │ │ │ │
42
+ Alice(60%) Bob(40%) Zone3(high) Zone1(low)
43
+ ```
44
+
45
+ ### Key Concepts
46
+
47
+ - **Fractal Ownership**: Each holon can have its own smart contract
48
+ - **String-based User IDs**: Members identified by strings (e.g., 'alice', 'telegram_12345')
49
+ - **Accumulated Rewards**: Funds stored until claimed (users pay claim gas)
50
+ - **Multiple Distribution Models**: Splitter, Managed, Zoned, Appreciative, Bundle
51
+
52
+ ---
53
+
54
+ ## Quick Start
55
+
56
+ ### Initialize Contracts
57
+
58
+ ```javascript
59
+ import HoloSphere from 'holosphere';
60
+
61
+ const hs = new HoloSphere({ appName: 'myapp' });
62
+
63
+ // Connect to network with private key
64
+ await hs.initContracts({
65
+ network: 'sepolia', // or 'polygon', 'base', etc.
66
+ privateKey: process.env.PRIVATE_KEY
67
+ });
68
+
69
+ // Or connect with browser wallet (MetaMask)
70
+ await hs.initContractsBrowser('polygon');
71
+ ```
72
+
73
+ ### Deploy Everything (1-Click)
74
+
75
+ ```javascript
76
+ const deployment = await hs.deployContracts({
77
+ testTokenSupply: '1000000' // Optional: deploy test ERC20
78
+ });
79
+
80
+ console.log(deployment);
81
+ // {
82
+ // network: 'sepolia',
83
+ // chainId: 11155111,
84
+ // contracts: {
85
+ // holons: '0x...', // Main registry
86
+ // managedFactory: '0x...',
87
+ // zonedFactory: '0x...',
88
+ // splitterFactory: '0x...',
89
+ // appreciativeFactory: '0x...',
90
+ // bundleFactory: '0x...',
91
+ // testToken: '0x...'
92
+ // }
93
+ // }
94
+ ```
95
+
96
+ ### Create Holon with Contract
97
+
98
+ ```javascript
99
+ // Deploy contract for a holon
100
+ await hs.deployHolonContract('my_organization', 'Splitter', {
101
+ name: 'MyOrg',
102
+ splitPercentage: 70 // 70% internal, 30% external
103
+ });
104
+
105
+ // Add members
106
+ await hs.contractAddMembers('my_organization', ['alice', 'bob', 'charlie']);
107
+
108
+ // Send funds (they're distributed automatically!)
109
+ await hs.contractSendEth('my_organization', '1.0');
110
+
111
+ // Members claim their rewards
112
+ await hs.contractClaim('my_organization', 'alice', '0xAliceWallet...');
113
+ ```
114
+
115
+ ---
116
+
117
+ ## Contract Types
118
+
119
+ ### 1. Splitter
120
+
121
+ **Purpose**: Split incoming funds between internal and external distribution
122
+
123
+ **Use Case**: Organizations with core team + external contributors
124
+
125
+ ```javascript
126
+ await hs.deployHolonContract('org', 'Splitter', { splitPercentage: 70 });
127
+
128
+ // Set split: 70% to internal (Managed), 30% to external (Zoned)
129
+ await hs.contractSetSplit('org', 70, 30);
130
+
131
+ // Create child contracts automatically
132
+ // Splitter creates: org_managed and org_zoned
133
+ ```
134
+
135
+ **How Rewards Flow**:
136
+ 1. Funds sent to Splitter
137
+ 2. 70% forwarded to Managed contract
138
+ 3. 30% forwarded to Zoned contract
139
+ 4. Each child distributes to its members
140
+
141
+ ### 2. Managed (Appreciation-Based)
142
+
143
+ **Purpose**: Distribute funds based on admin-set appreciation weights
144
+
145
+ **Use Case**: Core teams where leadership decides contribution weights
146
+
147
+ ```javascript
148
+ await hs.deployHolonContract('team', 'Managed');
149
+
150
+ // Add members
151
+ await hs.contractAddMembers('team', ['alice', 'bob', 'charlie']);
152
+
153
+ // Set appreciation weights (determines reward %)
154
+ await hs.contractSetAppreciation('team',
155
+ ['alice', 'bob', 'charlie'],
156
+ [300, 200, 100] // Alice:50%, Bob:33%, Charlie:17%
157
+ );
158
+
159
+ // When 1 ETH is received:
160
+ // - Alice gets 0.5 ETH
161
+ // - Bob gets 0.33 ETH
162
+ // - Charlie gets 0.17 ETH
163
+ ```
164
+
165
+ **Key Points**:
166
+ - Only owner/bot can set appreciation
167
+ - Appreciation is relative (300:200:100 = 3:2:1 ratio)
168
+ - If no appreciation set, rewards split equally
169
+
170
+ ### 3. Zoned (Tier-Based)
171
+
172
+ **Purpose**: Distribute funds based on contribution zones/tiers
173
+
174
+ **Use Case**: Communities with different contribution levels
175
+
176
+ ```javascript
177
+ await hs.deployHolonContract('community', 'Zoned', { nZones: 5 });
178
+
179
+ // Add members and assign to zones
180
+ await hs.contractAddMember('community', 'alice');
181
+ await hs.contractAddToZone('community', 'admin', 'alice', 4); // High tier
182
+
183
+ await hs.contractAddMember('community', 'bob');
184
+ await hs.contractAddToZone('community', 'admin', 'bob', 2); // Medium tier
185
+
186
+ await hs.contractAddMember('community', 'charlie');
187
+ await hs.contractAddToZone('community', 'admin', 'charlie', 1); // Low tier
188
+ ```
189
+
190
+ **Zone Reward Formula**:
191
+ ```
192
+ reward_units = a × zone² + b × zone + c
193
+ ```
194
+
195
+ Default: `a=0, b=0, c=1` (equal distribution)
196
+ Quadratic: `a=1, b=1, c=0` (higher zones get exponentially more)
197
+
198
+ ```javascript
199
+ // Set quadratic rewards (zone 4 gets much more than zone 1)
200
+ await hs.contractSetZoneParams('community', 'admin', 1, 1, 0);
201
+ ```
202
+
203
+ ### 4. Appreciative (Peer-to-Peer)
204
+
205
+ **Purpose**: Members give appreciation to each other; rewards based on received appreciation
206
+
207
+ **Use Case**: DAOs, cooperatives, peer-evaluated teams
208
+
209
+ ```javascript
210
+ await hs.deployHolonContract('dao', 'Appreciative');
211
+
212
+ await hs.contractAddMembers('dao', ['alice', 'bob', 'charlie']);
213
+
214
+ // Each member has 100 points to give
215
+ // Alice appreciates Bob's work
216
+ await hs.contractAppreciate('dao', 'alice', 'bob', 30);
217
+
218
+ // Bob appreciates Charlie
219
+ await hs.contractAppreciate('dao', 'bob', 'charlie', 50);
220
+
221
+ // Charlie appreciates Alice
222
+ await hs.contractAppreciate('dao', 'charlie', 'alice', 25);
223
+
224
+ // Check appreciation stats
225
+ const received = await hs.contractGetAppreciationReceived('dao', 'bob'); // 30
226
+ const given = await hs.contractGetAppreciationGiven('dao', 'alice'); // 30
227
+ const remaining = await hs.contractGetAppreciationRemaining('dao', 'alice'); // 70
228
+ ```
229
+
230
+ ### 5. Bundle (2-Way Split with Governance)
231
+
232
+ **Purpose**: Advanced splitting with interior/exterior + election mechanism
233
+
234
+ **Use Case**: Complex organizations needing governance rotation
235
+
236
+ ```javascript
237
+ await hs.deployHolonContract('project', 'Bundle', {
238
+ steepness: '0.5', // 50% decay per zone
239
+ nZones: 6
240
+ });
241
+
242
+ // Interior split (explicit percentages)
243
+ await hs.contractSetInteriorSplit('project',
244
+ ['founder', 'cto'],
245
+ [60, 40]
246
+ );
247
+
248
+ // Exterior uses zone-based with steepness decay
249
+ await hs.contractSetSteepness('project', '0.7'); // 70% decay
250
+
251
+ // Governance: Run election for new owner
252
+ await hs.contractStartElection('project');
253
+ await hs.contractNominate('project'); // Caller nominates self
254
+ await hs.contractVote('project', '0xNomineeAddress');
255
+ await hs.contractFinalizeElection('project');
256
+ ```
257
+
258
+ ---
259
+
260
+ ## 1-Click Deployment
261
+
262
+ Deploy the entire contract infrastructure with a single call:
263
+
264
+ ```javascript
265
+ const deployment = await hs.deployContracts({
266
+ // Optional: bot address for member management (defaults to deployer)
267
+ botAddress: '0xBotAddress',
268
+
269
+ // Optional: deploy test ERC20 token
270
+ deployTestToken: true,
271
+ testTokenSupply: '1000000',
272
+
273
+ // Optional: progress callback
274
+ onProgress: ({ step, total, message, done, address }) => {
275
+ console.log(`[${step}/${total}] ${message}`);
276
+ if (done) console.log(` -> ${address}`);
277
+ }
278
+ });
279
+ ```
280
+
281
+ **What Gets Deployed**:
282
+ 1. `ManagedFactory` - Creates Managed contracts
283
+ 2. `ZonedFactory` - Creates Zoned contracts
284
+ 3. `SplitterFactory` - Creates Splitter contracts
285
+ 4. `AppreciativeFactory` - Creates Appreciative contracts
286
+ 5. `BundleFactory` - Creates Bundle contracts
287
+ 6. `Holons` - Central registry
288
+ 7. `TestToken` (optional) - ERC20 for testing
289
+
290
+ **Save Addresses for Later**:
291
+ ```javascript
292
+ // Save deployment
293
+ localStorage.setItem('deployment', JSON.stringify(deployment.contracts));
294
+
295
+ // Load later
296
+ const saved = JSON.parse(localStorage.getItem('deployment'));
297
+ hs.loadDeployedContracts(saved);
298
+ ```
299
+
300
+ ---
301
+
302
+ ## Per-Holon Contracts
303
+
304
+ Each holon can have its own smart contract (1:1 fractal mapping):
305
+
306
+ ### Deploy Contract for Holon
307
+
308
+ ```javascript
309
+ // Deploy new contract
310
+ const result = await hs.deployHolonContract(holonId, type, options);
311
+
312
+ // Types: 'Splitter', 'Managed', 'Zoned', 'Appreciative', 'Bundle'
313
+
314
+ // Examples:
315
+ await hs.deployHolonContract('team_alpha', 'Managed');
316
+ await hs.deployHolonContract('community', 'Zoned', { nZones: 6 });
317
+ await hs.deployHolonContract('dao', 'Appreciative');
318
+ await hs.deployHolonContract('org', 'Splitter', { splitPercentage: 70 });
319
+ await hs.deployHolonContract('project', 'Bundle', { steepness: '0.5' });
320
+ ```
321
+
322
+ ### Link Existing Contract
323
+
324
+ ```javascript
325
+ // Link holon to existing contract
326
+ await hs.linkHolonContract('my_holon', '0xExistingContract', 'Splitter');
327
+
328
+ // Check if linked
329
+ const hasContract = hs.hasHolonContract('my_holon'); // true
330
+
331
+ // Get address
332
+ const address = hs.getHolonContractAddress('my_holon');
333
+ ```
334
+
335
+ ### Unlink Contract
336
+
337
+ ```javascript
338
+ await hs.unlinkHolonContract('my_holon');
339
+ ```
340
+
341
+ ### List All Mappings
342
+
343
+ ```javascript
344
+ const mappings = hs.listHolonContracts();
345
+ // [
346
+ // { holonId: 'team_alpha', address: '0x...', type: 'Managed' },
347
+ // { holonId: 'community', address: '0x...', type: 'Zoned' }
348
+ // ]
349
+ ```
350
+
351
+ ---
352
+
353
+ ## All Contract Operations
354
+
355
+ ### Member Management
356
+
357
+ ```javascript
358
+ // Add single member
359
+ await hs.contractAddMember(holonId, 'alice');
360
+
361
+ // Add multiple members
362
+ await hs.contractAddMembers(holonId, ['alice', 'bob', 'charlie']);
363
+
364
+ // Check membership
365
+ const isMember = await hs.contractIsMember(holonId, 'alice'); // true
366
+ ```
367
+
368
+ ### Fund Distribution
369
+
370
+ ```javascript
371
+ // Send ETH (triggers distribution)
372
+ await hs.contractSendEth(holonId, '1.0'); // 1 ETH
373
+
374
+ // Trigger ERC20 reward distribution
375
+ await hs.contractReward(holonId, tokenAddress, amount);
376
+
377
+ // Check balances
378
+ const ethBalance = await hs.contractGetEthBalance(holonId, 'alice');
379
+ const tokenBalance = await hs.contractGetTokenBalance(holonId, 'alice', tokenAddress);
380
+
381
+ // Claim rewards
382
+ await hs.contractClaim(holonId, 'alice', '0xAliceWallet');
383
+ ```
384
+
385
+ ### Splitter Operations
386
+
387
+ ```javascript
388
+ // Set split percentages
389
+ await hs.contractSetSplit(holonId, 70, 30); // 70% internal, 30% external
390
+
391
+ // Get current split
392
+ const { internal, external } = await hs.contractGetSplit(holonId);
393
+
394
+ // Create child contracts
395
+ await hs.contractCreateManaged(holonId, 'creator', 'ChildName');
396
+ await hs.contractCreateZoned(holonId, 'creator', 'ChildName', 6);
397
+
398
+ // List children
399
+ const { keys, addresses } = await hs.contractGetChildContracts(holonId);
400
+ ```
401
+
402
+ ### Managed Operations
403
+
404
+ ```javascript
405
+ // Set appreciation weights
406
+ await hs.contractSetAppreciation(holonId,
407
+ ['alice', 'bob'],
408
+ [300, 200] // Alice: 60%, Bob: 40%
409
+ );
410
+
411
+ // Get appreciation
412
+ const appreciation = await hs.contractGetAppreciation(holonId, 'alice');
413
+ const total = await hs.contractGetTotalAppreciation(holonId);
414
+ ```
415
+
416
+ ### Zoned Operations
417
+
418
+ ```javascript
419
+ // Add to zone
420
+ await hs.contractAddToZone(holonId, 'admin', 'alice', 3);
421
+
422
+ // Remove from zone
423
+ await hs.contractRemoveFromZone(holonId, 'admin', 'alice');
424
+
425
+ // Get zone
426
+ const zone = await hs.contractGetZone(holonId, 'alice');
427
+
428
+ // Set reward formula: reward = a*zone² + b*zone + c
429
+ await hs.contractSetZoneParams(holonId, 'admin', 1, 1, 0);
430
+ ```
431
+
432
+ ### Appreciative Operations
433
+
434
+ ```javascript
435
+ // Give appreciation
436
+ await hs.contractAppreciate(holonId, 'alice', 'bob', 25);
437
+
438
+ // Check stats
439
+ const given = await hs.contractGetAppreciationGiven(holonId, 'alice');
440
+ const received = await hs.contractGetAppreciationReceived(holonId, 'bob');
441
+ ```
442
+
443
+ ### Bundle Operations
444
+
445
+ ```javascript
446
+ // Set steepness (0.5 = 50% decay per zone)
447
+ await hs.contractSetSteepness(holonId, '0.5');
448
+ const steepness = await hs.contractGetSteepness(holonId);
449
+
450
+ // Set interior split
451
+ await hs.contractSetInteriorSplit(holonId, ['a', 'b'], [60, 40]);
452
+
453
+ // Governance
454
+ await hs.contractStartElection(holonId);
455
+ await hs.contractNominate(holonId);
456
+ await hs.contractVote(holonId, nomineeAddress);
457
+ await hs.contractFinalizeElection(holonId);
458
+ ```
459
+
460
+ ### Read-Only Queries
461
+
462
+ ```javascript
463
+ const name = await hs.contractGetName(holonId);
464
+ const owner = await hs.contractGetOwner(holonId);
465
+ const bot = await hs.contractGetBotAddress(holonId);
466
+ const total = await hs.contractGetTotalDeposited(holonId, tokenAddress);
467
+ ```
468
+
469
+ ---
470
+
471
+ ## Multi-Chain Support
472
+
473
+ ### Supported Networks
474
+
475
+ | Network | Chain ID | Type | Usage |
476
+ |---------|----------|------|-------|
477
+ | `ethereum` | 1 | Mainnet | Production |
478
+ | `polygon` | 137 | Mainnet | Low fees |
479
+ | `arbitrum` | 42161 | Mainnet | L2 |
480
+ | `base` | 8453 | Mainnet | L2 |
481
+ | `optimism` | 10 | Mainnet | L2 |
482
+ | `sepolia` | 11155111 | Testnet | Testing |
483
+ | `mumbai` | 80001 | Testnet | Testing |
484
+ | `hardhat` | 31337 | Local | Development |
485
+ | `anvil` | 31337 | Local | Development |
486
+
487
+ ### Connect to Different Networks
488
+
489
+ ```javascript
490
+ // Testnet (recommended for testing)
491
+ await hs.initContracts({
492
+ network: 'sepolia',
493
+ privateKey: process.env.PRIVATE_KEY
494
+ });
495
+
496
+ // Polygon (low fees)
497
+ await hs.initContracts({
498
+ network: 'polygon',
499
+ privateKey: process.env.PRIVATE_KEY
500
+ });
501
+
502
+ // Custom RPC
503
+ await hs.initContracts({
504
+ network: 'ethereum',
505
+ privateKey: process.env.PRIVATE_KEY,
506
+ rpcUrl: 'https://my-custom-rpc.com'
507
+ });
508
+
509
+ // Local development
510
+ await hs.initContracts({
511
+ network: 'hardhat',
512
+ privateKey: '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80'
513
+ });
514
+ ```
515
+
516
+ ### Network Utilities
517
+
518
+ ```javascript
519
+ import {
520
+ NETWORKS,
521
+ getNetwork,
522
+ getTxUrl,
523
+ getAddressUrl,
524
+ isNetworkSupported
525
+ } from 'holosphere';
526
+
527
+ // Get network config
528
+ const config = getNetwork('polygon');
529
+ // { name: 'Polygon Mainnet', chainId: 137, rpc: '...', ... }
530
+
531
+ // Get explorer URLs
532
+ const txUrl = getTxUrl('ethereum', '0xTxHash...');
533
+ // https://etherscan.io/tx/0xTxHash...
534
+
535
+ const addrUrl = getAddressUrl('polygon', '0xAddress...');
536
+ // https://polygonscan.com/address/0xAddress...
537
+
538
+ // Check support
539
+ isNetworkSupported('polygon'); // true
540
+ isNetworkSupported('solana'); // false
541
+ ```
542
+
543
+ ---
544
+
545
+ ## Examples
546
+
547
+ ### Example 1: Simple Team Distribution
548
+
549
+ ```javascript
550
+ import HoloSphere from 'holosphere';
551
+
552
+ async function setupTeam() {
553
+ const hs = new HoloSphere({ appName: 'myteam' });
554
+
555
+ // Connect to Sepolia testnet
556
+ await hs.initContracts({
557
+ network: 'sepolia',
558
+ privateKey: process.env.PRIVATE_KEY
559
+ });
560
+
561
+ // Deploy infrastructure
562
+ await hs.deployContracts();
563
+
564
+ // Create team contract
565
+ await hs.deployHolonContract('dev_team', 'Managed');
566
+
567
+ // Add team members
568
+ await hs.contractAddMembers('dev_team', ['alice', 'bob', 'charlie']);
569
+
570
+ // Set contributions (alice: 50%, bob: 30%, charlie: 20%)
571
+ await hs.contractSetAppreciation('dev_team',
572
+ ['alice', 'bob', 'charlie'],
573
+ [500, 300, 200]
574
+ );
575
+
576
+ // When client pays 1 ETH...
577
+ await hs.contractSendEth('dev_team', '1.0');
578
+
579
+ // Check balances
580
+ const aliceBalance = await hs.contractGetEthBalance('dev_team', 'alice');
581
+ console.log(`Alice can claim: ${aliceBalance} ETH`); // ~0.5 ETH
582
+
583
+ // Alice claims her rewards
584
+ await hs.contractClaim('dev_team', 'alice', '0xAliceWallet');
585
+ }
586
+ ```
587
+
588
+ ### Example 2: Organization with Departments
589
+
590
+ ```javascript
591
+ async function setupOrganization() {
592
+ const hs = new HoloSphere({ appName: 'myorg' });
593
+ await hs.initContracts({ network: 'polygon', privateKey: KEY });
594
+ await hs.deployContracts();
595
+
596
+ // Main organization (Splitter)
597
+ await hs.deployHolonContract('organization', 'Splitter', {
598
+ name: 'Acme Corp',
599
+ splitPercentage: 60 // 60% internal, 40% external
600
+ });
601
+
602
+ // Get child contract addresses
603
+ const children = await hs.contractGetChildContracts('organization');
604
+ console.log('Managed:', children.addresses[0]);
605
+ console.log('Zoned:', children.addresses[1]);
606
+
607
+ // Now funds sent to organization automatically split:
608
+ // - 60% -> Managed (for core team)
609
+ // - 40% -> Zoned (for contributors)
610
+
611
+ // Configure the Managed child for core team
612
+ const managedHolon = 'organization_managed';
613
+ await hs.linkHolonContract(managedHolon, children.addresses[0], 'Managed');
614
+ await hs.contractAddMembers(managedHolon, ['ceo', 'cto', 'cfo']);
615
+ await hs.contractSetAppreciation(managedHolon,
616
+ ['ceo', 'cto', 'cfo'],
617
+ [400, 350, 250]
618
+ );
619
+
620
+ // Configure the Zoned child for contributors
621
+ const zonedHolon = 'organization_zoned';
622
+ await hs.linkHolonContract(zonedHolon, children.addresses[1], 'Zoned');
623
+ await hs.contractAddMembers(zonedHolon, ['dev1', 'dev2', 'designer']);
624
+ await hs.contractAddToZone(zonedHolon, 'admin', 'dev1', 3);
625
+ await hs.contractAddToZone(zonedHolon, 'admin', 'dev2', 2);
626
+ await hs.contractAddToZone(zonedHolon, 'admin', 'designer', 2);
627
+ }
628
+ ```
629
+
630
+ ### Example 3: DAO with Peer Appreciation
631
+
632
+ ```javascript
633
+ async function setupDAO() {
634
+ const hs = new HoloSphere({ appName: 'mydao' });
635
+ await hs.initContracts({ network: 'base', privateKey: KEY });
636
+ await hs.deployContracts();
637
+
638
+ // Create DAO with peer appreciation
639
+ await hs.deployHolonContract('dao', 'Appreciative');
640
+
641
+ // Add members
642
+ const members = ['alice', 'bob', 'charlie', 'david'];
643
+ await hs.contractAddMembers('dao', members);
644
+
645
+ // Members appreciate each other's contributions
646
+ // (Each has 100 points to distribute)
647
+
648
+ // Alice appreciates Bob and Charlie
649
+ await hs.contractAppreciate('dao', 'alice', 'bob', 40);
650
+ await hs.contractAppreciate('dao', 'alice', 'charlie', 30);
651
+
652
+ // Bob appreciates Alice and David
653
+ await hs.contractAppreciate('dao', 'bob', 'alice', 50);
654
+ await hs.contractAppreciate('dao', 'bob', 'david', 25);
655
+
656
+ // Check how much appreciation everyone received
657
+ for (const member of members) {
658
+ const received = await hs.contractGetAppreciationReceived('dao', member);
659
+ console.log(`${member} received ${received} appreciation`);
660
+ }
661
+
662
+ // Rewards distributed based on appreciation received!
663
+ }
664
+ ```
665
+
666
+ ### Example 4: Browser Integration (MetaMask)
667
+
668
+ ```javascript
669
+ async function connectWallet() {
670
+ const hs = new HoloSphere({ appName: 'dapp' });
671
+
672
+ // Connect with MetaMask
673
+ const { address, network } = await hs.initContractsBrowser('polygon');
674
+ console.log(`Connected: ${address} on ${network.name}`);
675
+
676
+ // Load existing deployment
677
+ const saved = localStorage.getItem('deployment');
678
+ if (saved) {
679
+ hs.loadDeployedContracts(JSON.parse(saved));
680
+ }
681
+
682
+ // User can now interact with contracts
683
+ // (MetaMask will prompt for each transaction)
684
+ }
685
+ ```
686
+
687
+ ### Example 5: Progress Tracking for Deployment
688
+
689
+ ```javascript
690
+ async function deployWithProgress() {
691
+ const hs = new HoloSphere({ appName: 'myapp' });
692
+ await hs.initContracts({ network: 'sepolia', privateKey: KEY });
693
+
694
+ const deployment = await hs.deployContracts({
695
+ testTokenSupply: '1000000',
696
+ onProgress: ({ step, total, message, done, address }) => {
697
+ const progress = Math.round((step / total) * 100);
698
+ console.log(`[${progress}%] ${message}`);
699
+
700
+ if (done && address) {
701
+ console.log(` Contract deployed at: ${address}`);
702
+ }
703
+ }
704
+ });
705
+
706
+ // Output:
707
+ // [12%] Deploying ManagedFactory...
708
+ // Contract deployed at: 0x...
709
+ // [25%] Deploying ZonedFactory...
710
+ // Contract deployed at: 0x...
711
+ // ...
712
+
713
+ return deployment;
714
+ }
715
+ ```
716
+
717
+ ---
718
+
719
+ ## API Reference
720
+
721
+ ### HoloSphere Contract Methods
722
+
723
+ | Method | Description |
724
+ |--------|-------------|
725
+ | `initContracts(config)` | Initialize with private key |
726
+ | `initContractsBrowser(network?)` | Initialize with browser wallet |
727
+ | `deployContracts(options?)` | 1-click deploy all contracts |
728
+ | `loadDeployedContracts(addresses)` | Load existing deployment |
729
+ | `getDeployedContracts()` | Get deployed addresses |
730
+ | `deployHolonContract(holonId, type, options?)` | Deploy contract for holon |
731
+ | `linkHolonContract(holonId, address, type)` | Link existing contract |
732
+ | `unlinkHolonContract(holonId)` | Remove contract link |
733
+ | `hasHolonContract(holonId)` | Check if holon has contract |
734
+ | `getHolonContractAddress(holonId)` | Get contract address |
735
+ | `listHolonContracts()` | List all holon-contract mappings |
736
+ | `contractAddMember(holonId, userId)` | Add member |
737
+ | `contractAddMembers(holonId, userIds)` | Add multiple members |
738
+ | `contractIsMember(holonId, userId)` | Check membership |
739
+ | `contractSendEth(holonId, amount)` | Send ETH to contract |
740
+ | `contractReward(holonId, token, amount)` | Trigger ERC20 distribution |
741
+ | `contractClaim(holonId, userId, beneficiary)` | Claim rewards |
742
+ | `contractGetEthBalance(holonId, userId)` | Get ETH balance |
743
+ | `contractGetTokenBalance(holonId, userId, token)` | Get token balance |
744
+ | `contractSetSplit(holonId, internal, external)` | Set Splitter percentages |
745
+ | `contractGetSplit(holonId)` | Get Splitter percentages |
746
+ | `contractSetAppreciation(holonId, users, amounts)` | Set Managed weights |
747
+ | `contractGetAppreciation(holonId, userId)` | Get user appreciation |
748
+ | `contractAddToZone(holonId, sender, user, zone)` | Add to Zoned tier |
749
+ | `contractRemoveFromZone(holonId, sender, user)` | Remove from zone |
750
+ | `contractGetZone(holonId, userId)` | Get user's zone |
751
+ | `contractAppreciate(holonId, from, to, amount)` | Give peer appreciation |
752
+ | `contractSetSteepness(holonId, steepness)` | Set Bundle decay |
753
+ | `contractStartElection(holonId)` | Start Bundle election |
754
+ | `contractVote(holonId, nominee)` | Vote in election |
755
+
756
+ ---
757
+
758
+ ## Troubleshooting
759
+
760
+ ### Common Issues
761
+
762
+ **"Contracts not initialized"**
763
+ ```javascript
764
+ // Make sure to call initContracts first
765
+ await hs.initContracts({ network: 'sepolia', privateKey: KEY });
766
+ ```
767
+
768
+ **"Holon has no linked contract"**
769
+ ```javascript
770
+ // Deploy or link a contract first
771
+ await hs.deployHolonContract('myholon', 'Managed');
772
+ // or
773
+ await hs.linkHolonContract('myholon', '0xExisting...', 'Managed');
774
+ ```
775
+
776
+ **"Operation only available for X contracts"**
777
+ ```javascript
778
+ // Make sure you're using the right contract type
779
+ // Splitter: setContractSplit, createManagedContract, etc.
780
+ // Managed: setAppreciation, getAppreciation, etc.
781
+ // Zoned: addToZone, removeFromZone, etc.
782
+ // Appreciative: appreciate, getAppreciationGiven, etc.
783
+ // Bundle: setSteepness, startElection, etc.
784
+ ```
785
+
786
+ **"Insufficient funds"**
787
+ ```javascript
788
+ // Check balance before transactions
789
+ const balance = await hs.getChainManager().getBalance();
790
+ console.log(`Balance: ${balance} ETH`);
791
+ ```
792
+
793
+ ---
794
+
795
+ ## License
796
+
797
+ MIT License - See LICENSE file for details.