holosphere 2.0.0-alpha1 → 2.0.0-alpha10
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/CHANGELOG.md +473 -0
- package/FEATURES.md +431 -0
- package/LICENSE +29 -166
- package/LICENSE-AGPL.md +180 -0
- package/README.md +97 -16
- package/dist/2019-D2OG2idw.js +6680 -0
- package/dist/2019-D2OG2idw.js.map +1 -0
- package/dist/2019-EION3wKo.cjs +8 -0
- package/dist/2019-EION3wKo.cjs.map +1 -0
- package/dist/_commonjsHelpers-C37NGDzP.cjs +2 -0
- package/dist/_commonjsHelpers-C37NGDzP.cjs.map +1 -0
- package/dist/_commonjsHelpers-CUmg6egw.js +7 -0
- package/dist/_commonjsHelpers-CUmg6egw.js.map +1 -0
- package/dist/browser-BSniCNqO.js +3058 -0
- package/dist/browser-BSniCNqO.js.map +1 -0
- package/dist/browser-Cq59Ij19.cjs +2 -0
- package/dist/browser-Cq59Ij19.cjs.map +1 -0
- package/dist/cdn/holosphere.min.js +55 -0
- package/dist/cdn/holosphere.min.js.map +1 -0
- package/dist/cjs/holosphere.cjs +2 -0
- package/dist/cjs/holosphere.cjs.map +1 -0
- package/dist/esm/holosphere.js +53 -0
- package/dist/esm/holosphere.js.map +1 -0
- package/dist/index-DDGt_V9o.cjs +12 -0
- package/dist/index-DDGt_V9o.cjs.map +1 -0
- package/dist/index-DJXftyvB.js +39841 -0
- package/dist/index-DJXftyvB.js.map +1 -0
- package/dist/index-DMbdcMtK.cjs +18 -0
- package/dist/index-DMbdcMtK.cjs.map +1 -0
- package/dist/index-DeZ1xz_s.js +15104 -0
- package/dist/index-DeZ1xz_s.js.map +1 -0
- package/dist/indexeddb-storage-BFt6hMeF.js +176 -0
- package/dist/indexeddb-storage-BFt6hMeF.js.map +1 -0
- package/dist/indexeddb-storage-BK5tv4Sh.cjs +2 -0
- package/dist/indexeddb-storage-BK5tv4Sh.cjs.map +1 -0
- package/dist/memory-storage-C9HuoL2E.js +91 -0
- package/dist/memory-storage-C9HuoL2E.js.map +1 -0
- package/dist/memory-storage-Dao7jfYG.cjs +2 -0
- package/dist/memory-storage-Dao7jfYG.cjs.map +1 -0
- package/dist/secp256k1-BbKzbLtD.cjs +12 -0
- package/dist/secp256k1-BbKzbLtD.cjs.map +1 -0
- package/dist/secp256k1-CreY7Pcl.js +1890 -0
- package/dist/secp256k1-CreY7Pcl.js.map +1 -0
- package/docs/CONTRACTS.md +797 -0
- package/docs/FOSDEM_PROPOSAL.md +388 -0
- package/docs/LOCALFIRST.md +266 -0
- package/docs/api/ai_aggregation.js.html +333 -0
- package/docs/api/ai_breakdown.js.html +524 -0
- package/docs/api/ai_classifier.js.html +231 -0
- package/docs/api/ai_council.js.html +246 -0
- package/docs/api/ai_embeddings.js.html +304 -0
- package/docs/api/ai_federation-ai.js.html +338 -0
- package/docs/api/ai_h3-ai.js.html +970 -0
- package/docs/api/ai_index.js.html +124 -0
- package/docs/api/ai_json-ops.js.html +241 -0
- package/docs/api/ai_llm-service.js.html +239 -0
- package/docs/api/ai_nl-query.js.html +236 -0
- package/docs/api/ai_relationships.js.html +367 -0
- package/docs/api/ai_schema-extractor.js.html +235 -0
- package/docs/api/ai_spatial.js.html +307 -0
- package/docs/api/ai_tts.js.html +214 -0
- package/docs/api/content_social-protocols.js.html +180 -0
- package/docs/api/core_holosphere.js.html +757 -0
- package/docs/api/crypto_nostr-utils.js.html +306 -0
- package/docs/api/crypto_secp256k1.js.html +267 -0
- package/docs/api/data/search.json +1 -0
- package/docs/api/federation_discovery.js.html +337 -0
- package/docs/api/federation_handshake.js.html +478 -0
- package/docs/api/federation_hologram.js.html +1053 -0
- package/docs/api/federation_registry.js.html +389 -0
- package/docs/api/fonts/Inconsolata-Regular.ttf +0 -0
- package/docs/api/fonts/OpenSans-Regular.ttf +0 -0
- package/docs/api/fonts/WorkSans-Bold.ttf +0 -0
- package/docs/api/global.html +3 -0
- package/docs/api/hierarchical_upcast.js.html +128 -0
- package/docs/api/index.html +265 -0
- package/docs/api/index.js.html +1868 -0
- package/docs/api/lib_ai-methods.js.html +660 -0
- package/docs/api/lib_contract-methods.js.html +445 -0
- package/docs/api/lib_errors.js.html +56 -0
- package/docs/api/lib_federation-methods.js.html +348 -0
- package/docs/api/lib_index.js.html +33 -0
- package/docs/api/module-ai.html +5 -0
- package/docs/api/module-ai_aggregation-SmartAggregation.html +6 -0
- package/docs/api/module-ai_aggregation.SmartAggregation.html +3 -0
- package/docs/api/module-ai_aggregation.html +3 -0
- package/docs/api/module-ai_breakdown-TaskBreakdown.html +5 -0
- package/docs/api/module-ai_breakdown.TaskBreakdown.html +3 -0
- package/docs/api/module-ai_breakdown.html +3 -0
- package/docs/api/module-ai_classifier-Classifier.html +6 -0
- package/docs/api/module-ai_classifier.Classifier.html +3 -0
- package/docs/api/module-ai_classifier.html +3 -0
- package/docs/api/module-ai_council-Council.html +6 -0
- package/docs/api/module-ai_council.Council.html +3 -0
- package/docs/api/module-ai_council.html +3 -0
- package/docs/api/module-ai_embeddings-Embeddings.html +5 -0
- package/docs/api/module-ai_embeddings.Embeddings.html +3 -0
- package/docs/api/module-ai_embeddings.html +3 -0
- package/docs/api/module-ai_federation-ai-FederationAdvisor.html +6 -0
- package/docs/api/module-ai_federation-ai.FederationAdvisor.html +3 -0
- package/docs/api/module-ai_federation-ai.html +3 -0
- package/docs/api/module-ai_h3-ai-H3AI.html +6 -0
- package/docs/api/module-ai_h3-ai.H3AI.html +3 -0
- package/docs/api/module-ai_h3-ai.html +3 -0
- package/docs/api/module-ai_json-ops-JSONOps.html +5 -0
- package/docs/api/module-ai_json-ops.JSONOps.html +3 -0
- package/docs/api/module-ai_json-ops.html +3 -0
- package/docs/api/module-ai_llm-service-LLMService.html +5 -0
- package/docs/api/module-ai_llm-service.LLMService.html +3 -0
- package/docs/api/module-ai_llm-service.html +3 -0
- package/docs/api/module-ai_nl-query-NLQuery.html +5 -0
- package/docs/api/module-ai_nl-query.NLQuery.html +3 -0
- package/docs/api/module-ai_nl-query.html +3 -0
- package/docs/api/module-ai_relationships-RelationshipDiscovery.html +6 -0
- package/docs/api/module-ai_relationships.RelationshipDiscovery.html +3 -0
- package/docs/api/module-ai_relationships.html +3 -0
- package/docs/api/module-ai_schema-extractor-SchemaExtractor.html +5 -0
- package/docs/api/module-ai_schema-extractor.SchemaExtractor.html +3 -0
- package/docs/api/module-ai_schema-extractor.html +3 -0
- package/docs/api/module-ai_spatial-SpatialAnalysis.html +6 -0
- package/docs/api/module-ai_spatial.SpatialAnalysis.html +3 -0
- package/docs/api/module-ai_spatial.html +3 -0
- package/docs/api/module-ai_tts-TTS.html +5 -0
- package/docs/api/module-ai_tts.TTS.html +3 -0
- package/docs/api/module-ai_tts.html +3 -0
- package/docs/api/module-content_social-protocols.html +3 -0
- package/docs/api/module-core_holosphere-HoloSphere.html +6 -0
- package/docs/api/module-core_holosphere.HoloSphere.html +3 -0
- package/docs/api/module-core_holosphere.html +3 -0
- package/docs/api/module-crypto_nostr-utils.html +3 -0
- package/docs/api/module-crypto_secp256k1.html +3 -0
- package/docs/api/module-federation_hologram.html +3 -0
- package/docs/api/module-hierarchical_upcast.html +3 -0
- package/docs/api/module-holosphere-HoloSphereBase.html +3 -0
- package/docs/api/module-holosphere.html +3 -0
- package/docs/api/module-lib_ai-methods.html +3 -0
- package/docs/api/module-lib_contract-methods.html +3 -0
- package/docs/api/module-lib_errors-AuthorizationError.html +3 -0
- package/docs/api/module-lib_errors-ValidationError.html +3 -0
- package/docs/api/module-lib_errors.AuthorizationError.html +3 -0
- package/docs/api/module-lib_errors.ValidationError.html +3 -0
- package/docs/api/module-lib_errors.html +3 -0
- package/docs/api/module-lib_federation-methods.html +3 -0
- package/docs/api/module-lib_index.html +3 -0
- package/docs/api/module-schema_validator-ValidationError.html +3 -0
- package/docs/api/module-schema_validator.ValidationError.html +3 -0
- package/docs/api/module-schema_validator.html +3 -0
- package/docs/api/module-spatial_h3-operations.html +4 -0
- package/docs/api/module-storage_backend-factory.BackendFactory.html +3 -0
- package/docs/api/module-storage_backend-factory.html +3 -0
- package/docs/api/module-storage_backend-interface-StorageBackend.html +3 -0
- package/docs/api/module-storage_backend-interface.StorageBackend.html +3 -0
- package/docs/api/module-storage_backend-interface.html +3 -0
- package/docs/api/module-storage_backends_activitypub-backend-ActivityPubBackend.html +7 -0
- package/docs/api/module-storage_backends_activitypub-backend.ActivityPubBackend.html +3 -0
- package/docs/api/module-storage_backends_activitypub-backend.html +3 -0
- package/docs/api/module-storage_backends_activitypub_server-ActivityPubServer.html +8 -0
- package/docs/api/module-storage_backends_activitypub_server.ActivityPubServer.html +3 -0
- package/docs/api/module-storage_backends_activitypub_server.html +3 -0
- package/docs/api/module-storage_backends_gundb-backend-GunDBBackend.html +7 -0
- package/docs/api/module-storage_backends_gundb-backend.GunDBBackend.html +3 -0
- package/docs/api/module-storage_backends_gundb-backend.html +3 -0
- package/docs/api/module-storage_backends_nostr-backend-NostrBackend.html +8 -0
- package/docs/api/module-storage_backends_nostr-backend.NostrBackend.html +3 -0
- package/docs/api/module-storage_backends_nostr-backend.html +3 -0
- package/docs/api/module-storage_filesystem-storage-FileSystemStorage.html +5 -0
- package/docs/api/module-storage_filesystem-storage-browser-FileSystemStorage.html +3 -0
- package/docs/api/module-storage_filesystem-storage-browser.FileSystemStorage.html +3 -0
- package/docs/api/module-storage_filesystem-storage-browser.html +3 -0
- package/docs/api/module-storage_filesystem-storage.FileSystemStorage.html +3 -0
- package/docs/api/module-storage_filesystem-storage.html +3 -0
- package/docs/api/module-storage_global-tables.html +3 -0
- package/docs/api/module-storage_gun-async.html +3 -0
- package/docs/api/module-storage_gun-auth-GunAuth.html +5 -0
- package/docs/api/module-storage_gun-auth.GunAuth.html +3 -0
- package/docs/api/module-storage_gun-auth.html +3 -0
- package/docs/api/module-storage_gun-federation.html +3 -0
- package/docs/api/module-storage_gun-references-GunReferenceHandler.html +5 -0
- package/docs/api/module-storage_gun-references.GunReferenceHandler.html +3 -0
- package/docs/api/module-storage_gun-references.html +3 -0
- package/docs/api/module-storage_gun-schema-GunSchemaValidator.html +5 -0
- package/docs/api/module-storage_gun-schema.GunSchemaValidator.html +3 -0
- package/docs/api/module-storage_gun-schema.html +3 -0
- package/docs/api/module-storage_gun-wrapper.html +11 -0
- package/docs/api/module-storage_indexeddb-storage-IndexedDBStorage.html +5 -0
- package/docs/api/module-storage_indexeddb-storage.IndexedDBStorage.html +3 -0
- package/docs/api/module-storage_indexeddb-storage.html +3 -0
- package/docs/api/module-storage_key-storage-simple.html +3 -0
- package/docs/api/module-storage_key-storage.html +4 -0
- package/docs/api/module-storage_memory-storage-MemoryStorage.html +5 -0
- package/docs/api/module-storage_memory-storage.MemoryStorage.html +3 -0
- package/docs/api/module-storage_memory-storage.html +3 -0
- package/docs/api/module-storage_migration-MigrationTool.html +6 -0
- package/docs/api/module-storage_migration.MigrationTool.html +3 -0
- package/docs/api/module-storage_migration.html +3 -0
- package/docs/api/module-storage_nostr-async.html +18 -0
- package/docs/api/module-storage_nostr-client-LRUCache.html +3 -0
- package/docs/api/module-storage_nostr-client-NostrClient.html +7 -0
- package/docs/api/module-storage_nostr-client.NostrClient.html +15 -0
- package/docs/api/module-storage_nostr-client.html +6 -0
- package/docs/api/module-storage_nostr-wrapper.html +3 -0
- package/docs/api/module-storage_outbox-queue-OutboxQueue.html +4 -0
- package/docs/api/module-storage_outbox-queue.OutboxQueue.html +3 -0
- package/docs/api/module-storage_outbox-queue.html +3 -0
- package/docs/api/module-storage_persistent-storage-PersistentStorage.html +3 -0
- package/docs/api/module-storage_persistent-storage.html +4 -0
- package/docs/api/module-storage_sync-service-SyncService.html +5 -0
- package/docs/api/module-storage_sync-service.SyncService.html +3 -0
- package/docs/api/module-storage_sync-service.html +3 -0
- package/docs/api/module-storage_unified-storage.html +3 -0
- package/docs/api/module-subscriptions_manager.SubscriptionRegistry.html +3 -0
- package/docs/api/module-subscriptions_manager.html +3 -0
- package/docs/api/schema_validator.js.html +113 -0
- package/docs/api/scripts/core.js +726 -0
- package/docs/api/scripts/core.min.js +23 -0
- package/docs/api/scripts/resize.js +90 -0
- package/docs/api/scripts/search.js +265 -0
- package/docs/api/scripts/search.min.js +6 -0
- package/docs/api/scripts/third-party/Apache-License-2.0.txt +202 -0
- package/docs/api/scripts/third-party/fuse.js +9 -0
- package/docs/api/scripts/third-party/hljs-line-num-original.js +369 -0
- package/docs/api/scripts/third-party/hljs-line-num.js +1 -0
- package/docs/api/scripts/third-party/hljs-original.js +5171 -0
- package/docs/api/scripts/third-party/hljs.js +1 -0
- package/docs/api/scripts/third-party/popper.js +5 -0
- package/docs/api/scripts/third-party/tippy.js +1 -0
- package/docs/api/scripts/third-party/tocbot.js +672 -0
- package/docs/api/scripts/third-party/tocbot.min.js +1 -0
- package/docs/api/spatial_h3-operations.js.html +129 -0
- package/docs/api/storage_backend-factory.js.html +133 -0
- package/docs/api/storage_backend-interface.js.html +164 -0
- package/docs/api/storage_backends_activitypub-backend.js.html +298 -0
- package/docs/api/storage_backends_activitypub_server.js.html +678 -0
- package/docs/api/storage_backends_gundb-backend.js.html +878 -0
- package/docs/api/storage_backends_nostr-backend.js.html +254 -0
- package/docs/api/storage_filesystem-storage-browser.js.html +83 -0
- package/docs/api/storage_filesystem-storage.js.html +207 -0
- package/docs/api/storage_global-tables.js.html +116 -0
- package/docs/api/storage_gun-async.js.html +344 -0
- package/docs/api/storage_gun-auth.js.html +376 -0
- package/docs/api/storage_gun-federation.js.html +788 -0
- package/docs/api/storage_gun-references.js.html +212 -0
- package/docs/api/storage_gun-schema.js.html +309 -0
- package/docs/api/storage_gun-wrapper.js.html +645 -0
- package/docs/api/storage_indexeddb-storage.js.html +224 -0
- package/docs/api/storage_key-storage-simple.js.html +102 -0
- package/docs/api/storage_key-storage.js.html +171 -0
- package/docs/api/storage_memory-storage.js.html +128 -0
- package/docs/api/storage_migration.js.html +354 -0
- package/docs/api/storage_nostr-async.js.html +1076 -0
- package/docs/api/storage_nostr-client.js.html +1598 -0
- package/docs/api/storage_nostr-wrapper.js.html +218 -0
- package/docs/api/storage_outbox-queue.js.html +248 -0
- package/docs/api/storage_persistent-storage.js.html +160 -0
- package/docs/api/storage_sync-service.js.html +201 -0
- package/docs/api/storage_unified-storage.js.html +157 -0
- package/docs/api/styles/clean-jsdoc-theme-base.css +1159 -0
- package/docs/api/styles/clean-jsdoc-theme-dark.css +412 -0
- package/docs/api/styles/clean-jsdoc-theme-light.css +482 -0
- package/docs/api/styles/clean-jsdoc-theme-scrollbar.css +30 -0
- package/docs/api/styles/clean-jsdoc-theme-without-scrollbar.min.css +1 -0
- package/docs/api/styles/clean-jsdoc-theme.min.css +1 -0
- package/docs/api/subscriptions_manager.js.html +162 -0
- package/docs/contracts/api-interface.md +793 -0
- package/docs/data-model.md +476 -0
- package/docs/gun-async-usage.md +338 -0
- package/docs/plan.md +349 -0
- package/docs/quickstart.md +674 -0
- package/docs/research.md +362 -0
- package/docs/spec.md +244 -0
- package/docs/storage-backends.md +326 -0
- package/docs/tasks.md +947 -0
- package/examples/demo.html +47 -0
- package/examples/holosphere-widget.js +1242 -0
- package/examples/widget-demo.html +274 -0
- package/examples/widget.html +703 -0
- package/jsdoc.json +26 -0
- package/package.json +25 -7
- package/src/ai/aggregation.js +13 -2
- package/src/ai/breakdown.js +12 -2
- package/src/ai/classifier.js +14 -3
- package/src/ai/council.js +22 -7
- package/src/ai/embeddings.js +37 -15
- package/src/ai/federation-ai.js +13 -2
- package/src/ai/h3-ai.js +14 -2
- package/src/ai/index.js +16 -7
- package/src/ai/json-ops.js +18 -5
- package/src/ai/llm-service.js +62 -31
- package/src/ai/nl-query.js +12 -2
- package/src/ai/relationships.js +13 -2
- package/src/ai/schema-extractor.js +24 -10
- package/src/ai/spatial.js +13 -2
- package/src/ai/tts.js +25 -8
- package/src/cdn-entry.js +22 -0
- package/src/content/social-protocols.js +34 -25
- package/src/contracts/abis/Appreciative.json +1280 -0
- package/src/contracts/abis/AppreciativeFactory.json +101 -0
- package/src/contracts/abis/Bundle.json +1438 -0
- package/src/contracts/abis/BundleFactory.json +106 -0
- package/src/contracts/abis/Holon.json +881 -0
- package/src/contracts/abis/Holons.json +330 -0
- package/src/contracts/abis/Managed.json +1262 -0
- package/src/contracts/abis/ManagedFactory.json +149 -0
- package/src/contracts/abis/Membrane.json +261 -0
- package/src/contracts/abis/Splitter.json +1624 -0
- package/src/contracts/abis/SplitterFactory.json +220 -0
- package/src/contracts/abis/TestToken.json +321 -0
- package/src/contracts/abis/Zoned.json +1461 -0
- package/src/contracts/abis/ZonedFactory.json +154 -0
- package/src/contracts/chain-manager.js +403 -0
- package/src/contracts/deployer.js +500 -0
- package/src/contracts/event-listener.js +539 -0
- package/src/contracts/holon-contracts.js +359 -0
- package/src/contracts/index.js +82 -0
- package/src/contracts/networks.js +229 -0
- package/src/contracts/operations.js +687 -0
- package/src/contracts/queries.js +638 -0
- package/src/core/holosphere.js +487 -6
- package/src/crypto/nostr-utils.js +303 -0
- package/src/crypto/secp256k1.js +7 -2
- package/src/federation/handshake.js +475 -0
- package/src/federation/hologram.js +117 -3
- package/src/hierarchical/upcast.js +40 -25
- package/src/index.js +1501 -1909
- package/src/lib/ai-methods.js +657 -0
- package/src/lib/contract-methods.js +442 -0
- package/src/lib/errors.js +53 -0
- package/src/lib/federation-methods.js +345 -0
- package/src/lib/index.js +30 -0
- package/src/schema/validator.js +22 -3
- package/src/spatial/h3-operations.js +19 -3
- package/src/storage/backend-factory.js +7 -2
- package/src/storage/backend-interface.js +21 -2
- package/src/storage/backends/activitypub/server.js +25 -3
- package/src/storage/backends/activitypub-backend.js +25 -2
- package/src/storage/backends/gundb-backend.js +692 -50
- package/src/storage/backends/nostr-backend.js +116 -1
- package/src/storage/filesystem-storage-browser.js +42 -2
- package/src/storage/filesystem-storage.js +72 -5
- package/src/storage/global-tables.js +35 -3
- package/src/storage/gun-async.js +75 -15
- package/src/storage/gun-auth.js +373 -0
- package/src/storage/gun-federation.js +785 -0
- package/src/storage/gun-references.js +209 -0
- package/src/storage/gun-schema.js +306 -0
- package/src/storage/gun-wrapper.js +475 -54
- package/src/storage/indexeddb-storage.js +112 -13
- package/src/storage/key-storage-simple.js +32 -9
- package/src/storage/key-storage.js +45 -13
- package/src/storage/memory-storage.js +68 -2
- package/src/storage/migration.js +20 -7
- package/src/storage/nostr-async.js +412 -122
- package/src/storage/nostr-client.js +749 -76
- package/src/storage/nostr-wrapper.js +6 -2
- package/src/storage/outbox-queue.js +55 -18
- package/src/storage/persistent-storage.js +62 -14
- package/src/storage/sync-service.js +51 -17
- package/src/storage/unified-storage.js +154 -0
- package/src/subscriptions/manager.js +34 -17
- package/types/index.d.ts +133 -0
- package/vite.config.cdn.js +60 -0
- package/tests/unit/ai/aggregation.test.js +0 -295
- package/tests/unit/ai/breakdown.test.js +0 -446
- package/tests/unit/ai/classifier.test.js +0 -294
- package/tests/unit/ai/council.test.js +0 -262
- package/tests/unit/ai/embeddings.test.js +0 -384
- package/tests/unit/ai/federation-ai.test.js +0 -344
- package/tests/unit/ai/h3-ai.test.js +0 -458
- package/tests/unit/ai/index.test.js +0 -304
- package/tests/unit/ai/json-ops.test.js +0 -307
- package/tests/unit/ai/llm-service.test.js +0 -390
- package/tests/unit/ai/nl-query.test.js +0 -383
- package/tests/unit/ai/relationships.test.js +0 -311
- package/tests/unit/ai/schema-extractor.test.js +0 -384
- package/tests/unit/ai/spatial.test.js +0 -279
- package/tests/unit/ai/tts.test.js +0 -279
- package/tests/unit/content.test.js +0 -332
- package/tests/unit/contract/core.test.js +0 -88
- package/tests/unit/contract/crypto.test.js +0 -198
- package/tests/unit/contract/data.test.js +0 -223
- package/tests/unit/contract/federation.test.js +0 -181
- package/tests/unit/contract/hierarchical.test.js +0 -113
- package/tests/unit/contract/schema.test.js +0 -114
- package/tests/unit/contract/social.test.js +0 -217
- package/tests/unit/contract/spatial.test.js +0 -110
- package/tests/unit/contract/subscriptions.test.js +0 -128
- package/tests/unit/contract/utils.test.js +0 -159
- package/tests/unit/core.test.js +0 -152
- package/tests/unit/crypto.test.js +0 -328
- package/tests/unit/federation.test.js +0 -234
- package/tests/unit/gun-async.test.js +0 -252
- package/tests/unit/hierarchical.test.js +0 -399
- package/tests/unit/integration/scenario-01-geographic-storage.test.js +0 -74
- package/tests/unit/integration/scenario-02-federation.test.js +0 -76
- package/tests/unit/integration/scenario-03-subscriptions.test.js +0 -102
- package/tests/unit/integration/scenario-04-validation.test.js +0 -129
- package/tests/unit/integration/scenario-05-hierarchy.test.js +0 -125
- package/tests/unit/integration/scenario-06-social.test.js +0 -135
- package/tests/unit/integration/scenario-07-persistence.test.js +0 -130
- package/tests/unit/integration/scenario-08-authorization.test.js +0 -161
- package/tests/unit/integration/scenario-09-cross-dimensional.test.js +0 -139
- package/tests/unit/integration/scenario-10-cross-holosphere-capabilities.test.js +0 -357
- package/tests/unit/integration/scenario-11-cross-holosphere-federation.test.js +0 -410
- package/tests/unit/integration/scenario-12-capability-federated-read.test.js +0 -719
- package/tests/unit/performance/benchmark.test.js +0 -85
- package/tests/unit/schema.test.js +0 -213
- package/tests/unit/spatial.test.js +0 -158
- package/tests/unit/storage.test.js +0 -195
- package/tests/unit/subscriptions.test.js +0 -328
- package/tests/unit/test-data-permanence-debug.js +0 -197
- package/tests/unit/test-data-permanence.js +0 -340
- package/tests/unit/test-key-persistence-fixed.js +0 -148
- package/tests/unit/test-key-persistence.js +0 -172
- package/tests/unit/test-relay-permanence.js +0 -376
- package/tests/unit/test-second-node.js +0 -95
- package/tests/unit/test-simple-write.js +0 -89
- /package/{cleanup-test-data.js → scripts/cleanup-test-data.js} +0 -0
- /package/{test-ai-real-api.js → scripts/test-ai-real-api.js} +0 -0
|
@@ -0,0 +1,500 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Contract deployment utilities for Holosphere smart contracts.
|
|
3
|
+
* Provides 1-click deployment for all factories, registry, and individual holon contracts.
|
|
4
|
+
* @module contracts/deployer
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
// Import ABIs
|
|
8
|
+
import SplitterABI from './abis/Splitter.json' with { type: 'json' };
|
|
9
|
+
import ManagedABI from './abis/Managed.json' with { type: 'json' };
|
|
10
|
+
import ZonedABI from './abis/Zoned.json' with { type: 'json' };
|
|
11
|
+
import AppreciativeABI from './abis/Appreciative.json' with { type: 'json' };
|
|
12
|
+
import BundleABI from './abis/Bundle.json' with { type: 'json' };
|
|
13
|
+
import HolonsABI from './abis/Holons.json' with { type: 'json' };
|
|
14
|
+
import SplitterFactoryABI from './abis/SplitterFactory.json' with { type: 'json' };
|
|
15
|
+
import ManagedFactoryABI from './abis/ManagedFactory.json' with { type: 'json' };
|
|
16
|
+
import ZonedFactoryABI from './abis/ZonedFactory.json' with { type: 'json' };
|
|
17
|
+
import AppreciativeFactoryABI from './abis/AppreciativeFactory.json' with { type: 'json' };
|
|
18
|
+
import BundleFactoryABI from './abis/BundleFactory.json' with { type: 'json' };
|
|
19
|
+
import TestTokenABI from './abis/TestToken.json' with { type: 'json' };
|
|
20
|
+
|
|
21
|
+
import { getTxUrl, getAddressUrl } from './networks.js';
|
|
22
|
+
|
|
23
|
+
// Export ABIs for external use
|
|
24
|
+
export const ABIs = {
|
|
25
|
+
Splitter: SplitterABI,
|
|
26
|
+
Managed: ManagedABI,
|
|
27
|
+
Zoned: ZonedABI,
|
|
28
|
+
Appreciative: AppreciativeABI,
|
|
29
|
+
Bundle: BundleABI,
|
|
30
|
+
Holons: HolonsABI,
|
|
31
|
+
SplitterFactory: SplitterFactoryABI,
|
|
32
|
+
ManagedFactory: ManagedFactoryABI,
|
|
33
|
+
ZonedFactory: ZonedFactoryABI,
|
|
34
|
+
AppreciativeFactory: AppreciativeFactoryABI,
|
|
35
|
+
BundleFactory: BundleFactoryABI,
|
|
36
|
+
TestToken: TestTokenABI
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Contract deployment manager for Holosphere contracts.
|
|
41
|
+
* Handles deployment of all contract types and factory infrastructure.
|
|
42
|
+
* @class
|
|
43
|
+
*/
|
|
44
|
+
export class ContractDeployer {
|
|
45
|
+
/**
|
|
46
|
+
* Create a new ContractDeployer instance.
|
|
47
|
+
* @param {ChainManager} chainManager - Chain manager instance
|
|
48
|
+
*/
|
|
49
|
+
constructor(chainManager) {
|
|
50
|
+
this.chainManager = chainManager;
|
|
51
|
+
this.deployedContracts = {};
|
|
52
|
+
this.ethers = null;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Load ethers.js library.
|
|
57
|
+
* @private
|
|
58
|
+
* @returns {Promise<Object>} Ethers.js module
|
|
59
|
+
*/
|
|
60
|
+
async _loadEthers() {
|
|
61
|
+
if (!this.ethers) {
|
|
62
|
+
this.ethers = await import('ethers');
|
|
63
|
+
}
|
|
64
|
+
return this.ethers;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* 1-CLICK DEPLOY: Deploy entire Holosphere contract infrastructure.
|
|
69
|
+
* Deploys all factories, Holons registry, and optional TestToken.
|
|
70
|
+
* @param {Object} [options={}] - Deployment options
|
|
71
|
+
* @param {string} [options.botAddress] - Bot address for managed operations (defaults to deployer)
|
|
72
|
+
* @param {string} [options.testTokenSupply='1000000'] - Initial supply for test token (in whole tokens)
|
|
73
|
+
* @param {boolean} [options.deployTestToken=true] - Whether to deploy test token
|
|
74
|
+
* @param {Function} [options.onProgress] - Callback for deployment progress updates
|
|
75
|
+
* @returns {Promise<Object>} Deployment details including contract addresses, explorer URLs, and metadata
|
|
76
|
+
* @throws {Error} If deployment fails
|
|
77
|
+
*/
|
|
78
|
+
async deployAll(options = {}) {
|
|
79
|
+
const ethers = await this._loadEthers();
|
|
80
|
+
const signer = this.chainManager.getSigner();
|
|
81
|
+
const deployerAddress = await signer.getAddress();
|
|
82
|
+
|
|
83
|
+
const botAddress = options.botAddress || deployerAddress;
|
|
84
|
+
const testTokenSupply = options.testTokenSupply || '1000000';
|
|
85
|
+
const deployTestToken = options.deployTestToken !== false;
|
|
86
|
+
const onProgress = options.onProgress || (() => {});
|
|
87
|
+
|
|
88
|
+
const deployment = {
|
|
89
|
+
network: this.chainManager.networkName,
|
|
90
|
+
chainId: this.chainManager.getChainId(),
|
|
91
|
+
deployer: deployerAddress,
|
|
92
|
+
botAddress,
|
|
93
|
+
timestamp: new Date().toISOString(),
|
|
94
|
+
contracts: {}
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
try {
|
|
98
|
+
// Step 1: Deploy ManagedFactory
|
|
99
|
+
onProgress({ step: 1, total: deployTestToken ? 8 : 7, message: 'Deploying ManagedFactory...' });
|
|
100
|
+
const managedFactory = await this._deployContract(
|
|
101
|
+
ManagedFactoryABI.abi,
|
|
102
|
+
ManagedFactoryABI.bytecode,
|
|
103
|
+
[botAddress]
|
|
104
|
+
);
|
|
105
|
+
deployment.contracts.managedFactory = managedFactory.address;
|
|
106
|
+
onProgress({ step: 1, done: true, address: managedFactory.address });
|
|
107
|
+
|
|
108
|
+
// Step 2: Deploy ZonedFactory
|
|
109
|
+
onProgress({ step: 2, total: deployTestToken ? 8 : 7, message: 'Deploying ZonedFactory...' });
|
|
110
|
+
const zonedFactory = await this._deployContract(
|
|
111
|
+
ZonedFactoryABI.abi,
|
|
112
|
+
ZonedFactoryABI.bytecode,
|
|
113
|
+
[botAddress]
|
|
114
|
+
);
|
|
115
|
+
deployment.contracts.zonedFactory = zonedFactory.address;
|
|
116
|
+
onProgress({ step: 2, done: true, address: zonedFactory.address });
|
|
117
|
+
|
|
118
|
+
// Step 3: Deploy SplitterFactory
|
|
119
|
+
onProgress({ step: 3, total: deployTestToken ? 8 : 7, message: 'Deploying SplitterFactory...' });
|
|
120
|
+
const splitterFactory = await this._deployContract(
|
|
121
|
+
SplitterFactoryABI.abi,
|
|
122
|
+
SplitterFactoryABI.bytecode,
|
|
123
|
+
[]
|
|
124
|
+
);
|
|
125
|
+
deployment.contracts.splitterFactory = splitterFactory.address;
|
|
126
|
+
onProgress({ step: 3, done: true, address: splitterFactory.address });
|
|
127
|
+
|
|
128
|
+
// Step 4: Deploy AppreciativeFactory
|
|
129
|
+
onProgress({ step: 4, total: deployTestToken ? 8 : 7, message: 'Deploying AppreciativeFactory...' });
|
|
130
|
+
const appreciativeFactory = await this._deployContract(
|
|
131
|
+
AppreciativeFactoryABI.abi,
|
|
132
|
+
AppreciativeFactoryABI.bytecode,
|
|
133
|
+
[]
|
|
134
|
+
);
|
|
135
|
+
deployment.contracts.appreciativeFactory = appreciativeFactory.address;
|
|
136
|
+
onProgress({ step: 4, done: true, address: appreciativeFactory.address });
|
|
137
|
+
|
|
138
|
+
// Step 5: Deploy BundleFactory
|
|
139
|
+
onProgress({ step: 5, total: deployTestToken ? 8 : 7, message: 'Deploying BundleFactory...' });
|
|
140
|
+
const bundleFactory = await this._deployContract(
|
|
141
|
+
BundleFactoryABI.abi,
|
|
142
|
+
BundleFactoryABI.bytecode,
|
|
143
|
+
[]
|
|
144
|
+
);
|
|
145
|
+
deployment.contracts.bundleFactory = bundleFactory.address;
|
|
146
|
+
onProgress({ step: 5, done: true, address: bundleFactory.address });
|
|
147
|
+
|
|
148
|
+
// Step 6: Deploy Holons (Central Registry)
|
|
149
|
+
onProgress({ step: 6, total: deployTestToken ? 8 : 7, message: 'Deploying Holons Registry...' });
|
|
150
|
+
const holons = await this._deployContract(
|
|
151
|
+
HolonsABI.abi,
|
|
152
|
+
HolonsABI.bytecode,
|
|
153
|
+
[]
|
|
154
|
+
);
|
|
155
|
+
deployment.contracts.holons = holons.address;
|
|
156
|
+
onProgress({ step: 6, done: true, address: holons.address });
|
|
157
|
+
|
|
158
|
+
// Step 7: Configure Holons Registry
|
|
159
|
+
onProgress({ step: 7, total: deployTestToken ? 8 : 7, message: 'Configuring Holons Registry...' });
|
|
160
|
+
|
|
161
|
+
// Set factories
|
|
162
|
+
await holons.contract.setFactories(managedFactory.address, zonedFactory.address);
|
|
163
|
+
|
|
164
|
+
// Register flavors
|
|
165
|
+
await holons.contract.newFlavor('Splitter', splitterFactory.address);
|
|
166
|
+
await holons.contract.newFlavor('Managed', managedFactory.address);
|
|
167
|
+
await holons.contract.newFlavor('Zoned', zonedFactory.address);
|
|
168
|
+
await holons.contract.newFlavor('Appreciative', appreciativeFactory.address);
|
|
169
|
+
await holons.contract.newFlavor('Bundle', bundleFactory.address);
|
|
170
|
+
|
|
171
|
+
onProgress({ step: 7, done: true, message: 'Registry configured' });
|
|
172
|
+
|
|
173
|
+
// Step 8: Deploy TestToken (optional)
|
|
174
|
+
if (deployTestToken) {
|
|
175
|
+
onProgress({ step: 8, total: 8, message: 'Deploying TestToken...' });
|
|
176
|
+
const supply = ethers.parseEther(testTokenSupply);
|
|
177
|
+
const testToken = await this._deployContract(
|
|
178
|
+
TestTokenABI.abi,
|
|
179
|
+
TestTokenABI.bytecode,
|
|
180
|
+
[supply]
|
|
181
|
+
);
|
|
182
|
+
deployment.contracts.testToken = testToken.address;
|
|
183
|
+
onProgress({ step: 8, done: true, address: testToken.address });
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// Store deployed contracts
|
|
187
|
+
this.deployedContracts = deployment.contracts;
|
|
188
|
+
|
|
189
|
+
// Add explorer URLs
|
|
190
|
+
deployment.explorerUrls = {};
|
|
191
|
+
for (const [name, address] of Object.entries(deployment.contracts)) {
|
|
192
|
+
const url = getAddressUrl(deployment.network, address);
|
|
193
|
+
if (url) deployment.explorerUrls[name] = url;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
return deployment;
|
|
197
|
+
|
|
198
|
+
} catch (error) {
|
|
199
|
+
throw new Error(`Deployment failed: ${error.message}`);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Deploy a Splitter contract for fractal ownership distribution.
|
|
205
|
+
* @param {string} holonId - Holon identifier
|
|
206
|
+
* @param {string} name - Contract display name
|
|
207
|
+
* @param {number} [splitPercentage=70] - Internal/External split (e.g., 70 = 70% internal, 30% external)
|
|
208
|
+
* @param {Object} [options={}] - Additional deployment options
|
|
209
|
+
* @param {string} [options.creatorUserId] - Creator user ID (defaults to holonId)
|
|
210
|
+
* @param {string} [options.managedFactory] - Managed factory address
|
|
211
|
+
* @param {string} [options.zonedFactory] - Zoned factory address
|
|
212
|
+
* @returns {Promise<{contract: Object, address: string, txHash: string, holonId: string, type: string, splitPercentage: number}>} Deployment details
|
|
213
|
+
* @throws {Error} If factories not deployed
|
|
214
|
+
*/
|
|
215
|
+
async deploySplitter(holonId, name, splitPercentage = 70, options = {}) {
|
|
216
|
+
const signer = this.chainManager.getSigner();
|
|
217
|
+
const deployerAddress = await signer.getAddress();
|
|
218
|
+
|
|
219
|
+
const creatorUserId = options.creatorUserId || holonId;
|
|
220
|
+
const managedFactory = options.managedFactory || this.deployedContracts.managedFactory;
|
|
221
|
+
const zonedFactory = options.zonedFactory || this.deployedContracts.zonedFactory;
|
|
222
|
+
|
|
223
|
+
if (!managedFactory || !zonedFactory) {
|
|
224
|
+
throw new Error('Factories not deployed. Run deployAll() first or provide factory addresses.');
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
const result = await this._deployContract(
|
|
228
|
+
SplitterABI.abi,
|
|
229
|
+
SplitterABI.bytecode,
|
|
230
|
+
[deployerAddress, creatorUserId, name, splitPercentage, managedFactory, zonedFactory]
|
|
231
|
+
);
|
|
232
|
+
|
|
233
|
+
// Configure the split
|
|
234
|
+
await result.contract.setContractSplit(splitPercentage, 100 - splitPercentage);
|
|
235
|
+
|
|
236
|
+
// Create child contracts
|
|
237
|
+
await result.contract.createManagedContract(creatorUserId, name, 0);
|
|
238
|
+
await result.contract.createZonedContract(creatorUserId, name, 6); // 6 zones default
|
|
239
|
+
|
|
240
|
+
return {
|
|
241
|
+
...result,
|
|
242
|
+
holonId,
|
|
243
|
+
type: 'Splitter',
|
|
244
|
+
splitPercentage
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Deploy a Managed contract for appreciation-based distribution.
|
|
250
|
+
* @param {string} name - Contract name
|
|
251
|
+
* @param {Object} [options={}] - Additional deployment options
|
|
252
|
+
* @param {string} [options.botAddress] - Bot address for managing appreciation (defaults to deployer)
|
|
253
|
+
* @returns {Promise<{contract: Object, address: string, txHash: string, type: string}>} Deployment details
|
|
254
|
+
*/
|
|
255
|
+
async deployManaged(name, options = {}) {
|
|
256
|
+
const signer = this.chainManager.getSigner();
|
|
257
|
+
const deployerAddress = await signer.getAddress();
|
|
258
|
+
const botAddress = options.botAddress || deployerAddress;
|
|
259
|
+
|
|
260
|
+
const result = await this._deployContract(
|
|
261
|
+
ManagedABI.abi,
|
|
262
|
+
ManagedABI.bytecode,
|
|
263
|
+
[deployerAddress, name, botAddress]
|
|
264
|
+
);
|
|
265
|
+
|
|
266
|
+
return {
|
|
267
|
+
...result,
|
|
268
|
+
type: 'Managed'
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Deploy a Zoned contract for tier-based distribution.
|
|
274
|
+
* @param {string} name - Contract name
|
|
275
|
+
* @param {number} [nZones=6] - Number of zones
|
|
276
|
+
* @param {Object} [options={}] - Additional deployment options
|
|
277
|
+
* @param {string} [options.botAddress] - Bot address for managing zones (defaults to deployer)
|
|
278
|
+
* @param {string} [options.creatorUserId] - Creator user ID (defaults to 'creator')
|
|
279
|
+
* @returns {Promise<{contract: Object, address: string, txHash: string, type: string, nZones: number}>} Deployment details
|
|
280
|
+
*/
|
|
281
|
+
async deployZoned(name, nZones = 6, options = {}) {
|
|
282
|
+
const signer = this.chainManager.getSigner();
|
|
283
|
+
const deployerAddress = await signer.getAddress();
|
|
284
|
+
const botAddress = options.botAddress || deployerAddress;
|
|
285
|
+
const creatorUserId = options.creatorUserId || 'creator';
|
|
286
|
+
|
|
287
|
+
const result = await this._deployContract(
|
|
288
|
+
ZonedABI.abi,
|
|
289
|
+
ZonedABI.bytecode,
|
|
290
|
+
[creatorUserId, deployerAddress, name, nZones, botAddress]
|
|
291
|
+
);
|
|
292
|
+
|
|
293
|
+
return {
|
|
294
|
+
...result,
|
|
295
|
+
type: 'Zoned',
|
|
296
|
+
nZones
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* Deploy an Appreciative contract for peer-to-peer appreciation.
|
|
302
|
+
* @param {string} name - Contract name
|
|
303
|
+
* @param {string} creatorUserId - Creator's user ID
|
|
304
|
+
* @param {Object} [options={}] - Additional deployment options
|
|
305
|
+
* @returns {Promise<{contract: Object, address: string, txHash: string, type: string}>} Deployment details
|
|
306
|
+
*/
|
|
307
|
+
async deployAppreciative(name, creatorUserId, options = {}) {
|
|
308
|
+
const signer = this.chainManager.getSigner();
|
|
309
|
+
const deployerAddress = await signer.getAddress();
|
|
310
|
+
|
|
311
|
+
const result = await this._deployContract(
|
|
312
|
+
AppreciativeABI.abi,
|
|
313
|
+
AppreciativeABI.bytecode,
|
|
314
|
+
[name, creatorUserId, deployerAddress]
|
|
315
|
+
);
|
|
316
|
+
|
|
317
|
+
return {
|
|
318
|
+
...result,
|
|
319
|
+
type: 'Appreciative'
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* Deploy a Bundle contract for 2-way split with steepness-based zone decay.
|
|
325
|
+
* This is the simplest way to deploy a holon - no registry needed.
|
|
326
|
+
* @param {string} name - Contract name
|
|
327
|
+
* @param {bigint|string} [steepness] - Steepness factor (e.g., 0.5e18 = 50% decay, defaults to 0.5e18)
|
|
328
|
+
* @param {number} [nZones=6] - Number of zones
|
|
329
|
+
* @param {Object} [options={}] - Additional deployment options
|
|
330
|
+
* @param {string} [options.creatorUserId] - Creator user ID (defaults to 'creator')
|
|
331
|
+
* @returns {Promise<{contract: Object, address: string, txHash: string, type: string, steepness: bigint, nZones: number, creatorUserId: string, name: string}>} Deployment details
|
|
332
|
+
* @throws {Error} If bytecode is not available
|
|
333
|
+
*/
|
|
334
|
+
async deployBundle(name, steepness, nZones = 6, options = {}) {
|
|
335
|
+
const ethers = await this._loadEthers();
|
|
336
|
+
const signer = this.chainManager.getSigner();
|
|
337
|
+
const deployerAddress = await signer.getAddress();
|
|
338
|
+
const creatorUserId = options.creatorUserId || 'creator';
|
|
339
|
+
|
|
340
|
+
// Default steepness: 0.5e18 (50% decay per zone)
|
|
341
|
+
const steepnessValue = steepness || ethers.parseEther('0.5');
|
|
342
|
+
|
|
343
|
+
// BundleABI now has { abi, bytecode } structure
|
|
344
|
+
const abi = BundleABI.abi || BundleABI;
|
|
345
|
+
const bytecode = BundleABI.bytecode;
|
|
346
|
+
|
|
347
|
+
if (!bytecode) {
|
|
348
|
+
throw new Error('Bundle bytecode not available. Please rebuild contracts.');
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
const result = await this._deployContract(
|
|
352
|
+
abi,
|
|
353
|
+
bytecode,
|
|
354
|
+
[deployerAddress, creatorUserId, name, steepnessValue, nZones]
|
|
355
|
+
);
|
|
356
|
+
|
|
357
|
+
return {
|
|
358
|
+
...result,
|
|
359
|
+
type: 'Bundle',
|
|
360
|
+
steepness: steepnessValue,
|
|
361
|
+
nZones,
|
|
362
|
+
creatorUserId,
|
|
363
|
+
name
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
/**
|
|
368
|
+
* Deploy a Bundle contract directly (simplified 1-click deployment).
|
|
369
|
+
* No registry needed - just deploys and returns the address.
|
|
370
|
+
* @param {string} holonId - Unique identifier for the holon
|
|
371
|
+
* @param {string} name - Display name for the holon
|
|
372
|
+
* @param {Object} [options={}] - Deployment options
|
|
373
|
+
* @param {bigint|string} [options.steepness] - Steepness factor
|
|
374
|
+
* @param {number} [options.nZones=6] - Number of zones
|
|
375
|
+
* @returns {Promise<{contract: Object, address: string, txHash: string, type: string, steepness: bigint, nZones: number, creatorUserId: string, name: string}>} Deployment details
|
|
376
|
+
*/
|
|
377
|
+
async deployBundleDirect(holonId, name, options = {}) {
|
|
378
|
+
const steepness = options.steepness;
|
|
379
|
+
const nZones = options.nZones || 6;
|
|
380
|
+
|
|
381
|
+
return this.deployBundle(name, steepness, nZones, {
|
|
382
|
+
creatorUserId: holonId,
|
|
383
|
+
...options
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
/**
|
|
388
|
+
* Deploy a TestToken ERC20 for testing.
|
|
389
|
+
* @param {string} [initialSupply='1000000'] - Initial supply in whole tokens
|
|
390
|
+
* @returns {Promise<{contract: Object, address: string, txHash: string, type: string, initialSupply: string}>} Deployment details
|
|
391
|
+
*/
|
|
392
|
+
async deployTestToken(initialSupply = '1000000') {
|
|
393
|
+
const ethers = await this._loadEthers();
|
|
394
|
+
const supply = ethers.parseEther(initialSupply);
|
|
395
|
+
|
|
396
|
+
const result = await this._deployContract(
|
|
397
|
+
TestTokenABI.abi,
|
|
398
|
+
TestTokenABI.bytecode,
|
|
399
|
+
[supply]
|
|
400
|
+
);
|
|
401
|
+
|
|
402
|
+
return {
|
|
403
|
+
...result,
|
|
404
|
+
type: 'TestToken',
|
|
405
|
+
initialSupply
|
|
406
|
+
};
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
/**
|
|
410
|
+
* Create a holon bundle through the Holons registry.
|
|
411
|
+
* @param {string} creatorUserId - Creator's user ID
|
|
412
|
+
* @param {string} name - Bundle name
|
|
413
|
+
* @param {number} [parameter=70] - Split parameter
|
|
414
|
+
* @returns {Promise<{address: string, txHash: string, name: string, creatorUserId: string}>} Created holon details
|
|
415
|
+
* @throws {Error} If Holons registry not deployed
|
|
416
|
+
*/
|
|
417
|
+
async createHolonBundle(creatorUserId, name, parameter = 70) {
|
|
418
|
+
if (!this.deployedContracts.holons) {
|
|
419
|
+
throw new Error('Holons registry not deployed. Run deployAll() first.');
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
const holons = await this.chainManager.getContract(
|
|
423
|
+
this.deployedContracts.holons,
|
|
424
|
+
HolonsABI.abi
|
|
425
|
+
);
|
|
426
|
+
|
|
427
|
+
const tx = await holons.newHolonBundle(creatorUserId, name, parameter);
|
|
428
|
+
const receipt = await tx.wait();
|
|
429
|
+
|
|
430
|
+
// Get the created address from events
|
|
431
|
+
const event = receipt.logs.find(log => {
|
|
432
|
+
try {
|
|
433
|
+
const parsed = holons.interface.parseLog(log);
|
|
434
|
+
return parsed?.name === 'NewHolon';
|
|
435
|
+
} catch {
|
|
436
|
+
return false;
|
|
437
|
+
}
|
|
438
|
+
});
|
|
439
|
+
|
|
440
|
+
const address = event ? holons.interface.parseLog(event).args.addr : await holons.toAddress(name);
|
|
441
|
+
|
|
442
|
+
return {
|
|
443
|
+
address,
|
|
444
|
+
txHash: receipt.hash,
|
|
445
|
+
name,
|
|
446
|
+
creatorUserId
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
/**
|
|
451
|
+
* Get contract instance by address and type.
|
|
452
|
+
* @param {string} address - Contract address
|
|
453
|
+
* @param {string} type - Contract type (Splitter, Managed, Zoned, Appreciative, Bundle, Holons, TestToken)
|
|
454
|
+
* @returns {Promise<Object>} Ethers.js Contract instance
|
|
455
|
+
* @throws {Error} If unknown contract type
|
|
456
|
+
*/
|
|
457
|
+
async getContract(address, type) {
|
|
458
|
+
const abi = ABIs[type];
|
|
459
|
+
if (!abi) {
|
|
460
|
+
throw new Error(`Unknown contract type: ${type}`);
|
|
461
|
+
}
|
|
462
|
+
return this.chainManager.getContract(address, abi.abi);
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
/**
|
|
466
|
+
* Get deployed contract addresses.
|
|
467
|
+
* @returns {Object} Map of contract names to addresses
|
|
468
|
+
*/
|
|
469
|
+
getDeployedAddresses() {
|
|
470
|
+
return { ...this.deployedContracts };
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
/**
|
|
474
|
+
* Load previously deployed contract addresses.
|
|
475
|
+
* @param {Object} addresses - Map of contract names to addresses
|
|
476
|
+
*/
|
|
477
|
+
loadDeployedAddresses(addresses) {
|
|
478
|
+
this.deployedContracts = { ...addresses };
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
/**
|
|
482
|
+
* Internal helper to deploy a contract.
|
|
483
|
+
* @private
|
|
484
|
+
* @param {Array} abi - Contract ABI
|
|
485
|
+
* @param {string} bytecode - Contract bytecode
|
|
486
|
+
* @param {Array} constructorArgs - Constructor arguments
|
|
487
|
+
* @returns {Promise<{contract: Object, address: string, txHash: string, explorerUrl: string|null}>} Deployment result
|
|
488
|
+
*/
|
|
489
|
+
async _deployContract(abi, bytecode, constructorArgs) {
|
|
490
|
+
const result = await this.chainManager.deployContract(abi, bytecode, constructorArgs);
|
|
491
|
+
return {
|
|
492
|
+
contract: result.contract,
|
|
493
|
+
address: result.address,
|
|
494
|
+
txHash: result.txHash,
|
|
495
|
+
explorerUrl: getAddressUrl(this.chainManager.networkName, result.address)
|
|
496
|
+
};
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
export default ContractDeployer;
|