holosphere 2.0.0-alpha8 → 2.0.0-alpha9
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 +446 -0
- package/FEATURES.md +431 -0
- package/LICENSE +29 -166
- package/LICENSE-AGPL.md +180 -0
- package/dist/cdn/holosphere.min.js +55 -0
- package/dist/cdn/holosphere.min.js.map +1 -0
- package/dist/cjs/holosphere.cjs +1 -1
- package/dist/esm/holosphere.js +1 -1
- package/dist/{index-CKffQDmQ.cjs → index-DDGt_V9o.cjs} +2 -2
- package/dist/{index-CKffQDmQ.cjs.map → index-DDGt_V9o.cjs.map} +1 -1
- package/dist/{index-4XHHKe6S.js → index-DJXftyvB.js} +1905 -337
- package/dist/index-DJXftyvB.js.map +1 -0
- package/dist/{index-Dz5kOZMI.cjs → index-DMbdcMtK.cjs} +17 -4
- package/dist/index-DMbdcMtK.cjs.map +1 -0
- package/dist/{index-BjP1TXGz.js → index-DeZ1xz_s.js} +2 -2
- package/dist/{index-BjP1TXGz.js.map → index-DeZ1xz_s.js.map} +1 -1
- package/dist/{indexeddb-storage-lExjjFlV.js → indexeddb-storage-BFt6hMeF.js} +48 -4
- package/dist/indexeddb-storage-BFt6hMeF.js.map +1 -0
- package/dist/{indexeddb-storage-DD7EFBVc.cjs → indexeddb-storage-BK5tv4Sh.cjs} +2 -2
- package/dist/indexeddb-storage-BK5tv4Sh.cjs.map +1 -0
- package/dist/{memory-storage-C68adso2.js → memory-storage-C9HuoL2E.js} +44 -4
- package/dist/memory-storage-C9HuoL2E.js.map +1 -0
- package/dist/{memory-storage-DD_6yyXT.cjs → memory-storage-Dao7jfYG.cjs} +2 -2
- package/dist/memory-storage-Dao7jfYG.cjs.map +1 -0
- package/dist/{secp256k1-DYELiqgx.cjs → secp256k1-BbKzbLtD.cjs} +2 -2
- package/dist/{secp256k1-DYELiqgx.cjs.map → secp256k1-BbKzbLtD.cjs.map} +1 -1
- package/dist/{secp256k1-OM8siPyy.js → secp256k1-CreY7Pcl.js} +2 -2
- package/dist/{secp256k1-OM8siPyy.js.map → secp256k1-CreY7Pcl.js.map} +1 -1
- 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/jsdoc.json +26 -0
- package/package.json +14 -3
- 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/content/social-protocols.js +34 -25
- package/src/contracts/chain-manager.js +68 -40
- package/src/contracts/deployer.js +70 -42
- package/src/contracts/event-listener.js +61 -29
- package/src/contracts/holon-contracts.js +46 -31
- package/src/contracts/index.js +5 -6
- package/src/contracts/networks.js +19 -14
- package/src/contracts/operations.js +58 -41
- package/src/contracts/queries.js +54 -20
- package/src/core/holosphere.js +35 -6
- package/src/crypto/nostr-utils.js +82 -76
- package/src/crypto/secp256k1.js +7 -2
- package/src/federation/handshake.js +7 -7
- package/src/federation/hologram.js +9 -1
- package/src/hierarchical/upcast.js +34 -20
- package/src/index.js +655 -5
- package/src/lib/ai-methods.js +352 -3
- package/src/lib/contract-methods.js +152 -3
- package/src/lib/errors.js +31 -1
- package/src/lib/federation-methods.js +110 -3
- package/src/lib/index.js +9 -5
- package/src/schema/validator.js +22 -3
- package/src/spatial/h3-operations.js +17 -1
- 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 +29 -2
- 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 +7 -2
- package/src/storage/gun-async.js +20 -11
- package/src/storage/gun-auth.js +15 -4
- package/src/storage/gun-federation.js +14 -5
- package/src/storage/gun-references.js +16 -5
- package/src/storage/gun-schema.js +25 -10
- package/src/storage/gun-wrapper.js +99 -36
- package/src/storage/indexeddb-storage.js +65 -4
- package/src/storage/key-storage-simple.js +32 -9
- package/src/storage/key-storage.js +45 -13
- package/src/storage/memory-storage.js +65 -4
- package/src/storage/migration.js +20 -7
- package/src/storage/nostr-async.js +157 -67
- package/src/storage/nostr-client.js +173 -49
- package/src/storage/nostr-wrapper.js +6 -2
- package/src/storage/outbox-queue.js +55 -18
- package/src/storage/persistent-storage.js +56 -13
- package/src/storage/sync-service.js +51 -17
- package/src/storage/unified-storage.js +7 -2
- package/src/subscriptions/manager.js +33 -16
- package/dist/index-4XHHKe6S.js.map +0 -1
- package/dist/index-Dz5kOZMI.cjs.map +0 -1
- package/dist/indexeddb-storage-DD7EFBVc.cjs.map +0 -1
- package/dist/indexeddb-storage-lExjjFlV.js.map +0 -1
- package/dist/memory-storage-C68adso2.js.map +0 -1
- package/dist/memory-storage-DD_6yyXT.cjs.map +0 -1
- /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
|
@@ -1,11 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* Handles provider/signer setup, network switching, and wallet management
|
|
2
|
+
* @fileoverview Multi-chain connection manager for Holosphere smart contracts.
|
|
3
|
+
* Handles provider/signer setup, network switching, and wallet management across EVM chains.
|
|
4
|
+
* @module contracts/chain-manager
|
|
4
5
|
*/
|
|
5
6
|
|
|
6
7
|
import { NETWORKS, getNetwork, isNetworkSupported } from './networks.js';
|
|
7
8
|
|
|
9
|
+
/**
|
|
10
|
+
* Multi-chain connection manager for Holosphere contracts.
|
|
11
|
+
* Supports both RPC providers and browser wallets (MetaMask, etc.).
|
|
12
|
+
* @class
|
|
13
|
+
*/
|
|
8
14
|
export class ChainManager {
|
|
15
|
+
/**
|
|
16
|
+
* Create a new ChainManager instance.
|
|
17
|
+
* @param {Object} [config={}] - Configuration options
|
|
18
|
+
*/
|
|
9
19
|
constructor(config = {}) {
|
|
10
20
|
this.config = config;
|
|
11
21
|
this.provider = null;
|
|
@@ -17,8 +27,9 @@ export class ChainManager {
|
|
|
17
27
|
}
|
|
18
28
|
|
|
19
29
|
/**
|
|
20
|
-
* Initialize ethers.js (lazy load)
|
|
30
|
+
* Initialize ethers.js library (lazy load).
|
|
21
31
|
* @private
|
|
32
|
+
* @returns {Promise<Object>} Ethers.js module
|
|
22
33
|
*/
|
|
23
34
|
async _loadEthers() {
|
|
24
35
|
if (!this.ethers) {
|
|
@@ -30,11 +41,12 @@ export class ChainManager {
|
|
|
30
41
|
}
|
|
31
42
|
|
|
32
43
|
/**
|
|
33
|
-
* Connect to a network
|
|
44
|
+
* Connect to a network using RPC provider.
|
|
34
45
|
* @param {string} networkName - Network name (e.g., 'sepolia', 'polygon')
|
|
35
46
|
* @param {string} [privateKey] - Private key for signing transactions
|
|
36
47
|
* @param {string} [rpcUrl] - Custom RPC URL (overrides default)
|
|
37
|
-
* @returns {Promise<{provider, signer, network}>}
|
|
48
|
+
* @returns {Promise<{provider: Object, signer: Object|null, network: Object, networkName: string, config: Object}>} Connection details
|
|
49
|
+
* @throws {Error} If network is unsupported and no custom RPC URL provided
|
|
38
50
|
*/
|
|
39
51
|
async connect(networkName, privateKey, rpcUrl) {
|
|
40
52
|
const ethers = await this._loadEthers();
|
|
@@ -78,9 +90,10 @@ export class ChainManager {
|
|
|
78
90
|
}
|
|
79
91
|
|
|
80
92
|
/**
|
|
81
|
-
* Connect using browser wallet (MetaMask, etc.)
|
|
93
|
+
* Connect using browser wallet (MetaMask, etc.).
|
|
82
94
|
* @param {string} [networkName] - Optionally switch to this network
|
|
83
|
-
* @returns {Promise<{provider, signer, network, address}>}
|
|
95
|
+
* @returns {Promise<{provider: Object, signer: Object, network: Object, address: string}>} Connection details including user address
|
|
96
|
+
* @throws {Error} If no browser wallet is detected
|
|
84
97
|
*/
|
|
85
98
|
async connectBrowser(networkName) {
|
|
86
99
|
const ethers = await this._loadEthers();
|
|
@@ -117,8 +130,11 @@ export class ChainManager {
|
|
|
117
130
|
}
|
|
118
131
|
|
|
119
132
|
/**
|
|
120
|
-
* Switch to a different network (browser wallet only)
|
|
133
|
+
* Switch to a different network (browser wallet only).
|
|
134
|
+
* Adds the network to the wallet if it doesn't exist.
|
|
121
135
|
* @param {string} networkName - Target network name
|
|
136
|
+
* @returns {Promise<void>}
|
|
137
|
+
* @throws {Error} If not using a browser wallet or network is unknown
|
|
122
138
|
*/
|
|
123
139
|
async switchNetwork(networkName) {
|
|
124
140
|
if (typeof window === 'undefined' || !window.ethereum) {
|
|
@@ -165,8 +181,9 @@ export class ChainManager {
|
|
|
165
181
|
}
|
|
166
182
|
|
|
167
183
|
/**
|
|
168
|
-
* Get the current provider
|
|
169
|
-
* @returns {
|
|
184
|
+
* Get the current provider.
|
|
185
|
+
* @returns {Object} Ethers.js provider instance
|
|
186
|
+
* @throws {Error} If not initialized
|
|
170
187
|
*/
|
|
171
188
|
getProvider() {
|
|
172
189
|
this._requireInitialized();
|
|
@@ -174,8 +191,9 @@ export class ChainManager {
|
|
|
174
191
|
}
|
|
175
192
|
|
|
176
193
|
/**
|
|
177
|
-
* Get the current signer
|
|
178
|
-
* @returns {
|
|
194
|
+
* Get the current signer.
|
|
195
|
+
* @returns {Object} Ethers.js signer instance
|
|
196
|
+
* @throws {Error} If not initialized or no signer available
|
|
179
197
|
*/
|
|
180
198
|
getSigner() {
|
|
181
199
|
this._requireInitialized();
|
|
@@ -186,8 +204,9 @@ export class ChainManager {
|
|
|
186
204
|
}
|
|
187
205
|
|
|
188
206
|
/**
|
|
189
|
-
* Get the connected address
|
|
190
|
-
* @returns {Promise<string>}
|
|
207
|
+
* Get the connected wallet address.
|
|
208
|
+
* @returns {Promise<string>} Ethereum address
|
|
209
|
+
* @throws {Error} If no signer available
|
|
191
210
|
*/
|
|
192
211
|
async getAddress() {
|
|
193
212
|
const signer = this.getSigner();
|
|
@@ -195,9 +214,10 @@ export class ChainManager {
|
|
|
195
214
|
}
|
|
196
215
|
|
|
197
216
|
/**
|
|
198
|
-
* Get ETH balance of an address
|
|
217
|
+
* Get ETH balance of an address.
|
|
199
218
|
* @param {string} [address] - Address to check (defaults to signer)
|
|
200
|
-
* @returns {Promise<string>} Balance in ETH
|
|
219
|
+
* @returns {Promise<string>} Balance in ETH as decimal string
|
|
220
|
+
* @throws {Error} If not initialized or no address/signer available
|
|
201
221
|
*/
|
|
202
222
|
async getBalance(address) {
|
|
203
223
|
this._requireInitialized();
|
|
@@ -211,8 +231,9 @@ export class ChainManager {
|
|
|
211
231
|
}
|
|
212
232
|
|
|
213
233
|
/**
|
|
214
|
-
* Get current network configuration
|
|
215
|
-
* @returns {Object}
|
|
234
|
+
* Get current network configuration.
|
|
235
|
+
* @returns {Object} Network configuration object
|
|
236
|
+
* @throws {Error} If not initialized
|
|
216
237
|
*/
|
|
217
238
|
getNetworkConfig() {
|
|
218
239
|
this._requireInitialized();
|
|
@@ -220,8 +241,9 @@ export class ChainManager {
|
|
|
220
241
|
}
|
|
221
242
|
|
|
222
243
|
/**
|
|
223
|
-
* Get current chain ID
|
|
224
|
-
* @returns {number}
|
|
244
|
+
* Get current chain ID.
|
|
245
|
+
* @returns {number} Chain ID as number
|
|
246
|
+
* @throws {Error} If not initialized
|
|
225
247
|
*/
|
|
226
248
|
getChainId() {
|
|
227
249
|
this._requireInitialized();
|
|
@@ -229,9 +251,9 @@ export class ChainManager {
|
|
|
229
251
|
}
|
|
230
252
|
|
|
231
253
|
/**
|
|
232
|
-
* Check if connected to the expected network
|
|
254
|
+
* Check if connected to the expected network.
|
|
233
255
|
* @param {string} expectedNetwork - Expected network name
|
|
234
|
-
* @returns {boolean}
|
|
256
|
+
* @returns {boolean} True if on expected network
|
|
235
257
|
*/
|
|
236
258
|
isOnNetwork(expectedNetwork) {
|
|
237
259
|
if (!this._initialized) return false;
|
|
@@ -241,11 +263,12 @@ export class ChainManager {
|
|
|
241
263
|
}
|
|
242
264
|
|
|
243
265
|
/**
|
|
244
|
-
* Create a contract instance
|
|
266
|
+
* Create a contract instance.
|
|
245
267
|
* @param {string} address - Contract address
|
|
246
268
|
* @param {Array} abi - Contract ABI
|
|
247
269
|
* @param {boolean} [useSigner=true] - Use signer for write operations
|
|
248
|
-
* @returns {Contract
|
|
270
|
+
* @returns {Promise<Object>} Ethers.js Contract instance
|
|
271
|
+
* @throws {Error} If not initialized
|
|
249
272
|
*/
|
|
250
273
|
async getContract(address, abi, useSigner = true) {
|
|
251
274
|
this._requireInitialized();
|
|
@@ -255,11 +278,12 @@ export class ChainManager {
|
|
|
255
278
|
}
|
|
256
279
|
|
|
257
280
|
/**
|
|
258
|
-
* Deploy a contract
|
|
281
|
+
* Deploy a contract.
|
|
259
282
|
* @param {Array} abi - Contract ABI
|
|
260
283
|
* @param {string} bytecode - Contract bytecode
|
|
261
284
|
* @param {Array} [constructorArgs=[]] - Constructor arguments
|
|
262
|
-
* @returns {Promise<{contract, address, deployTx}>}
|
|
285
|
+
* @returns {Promise<{contract: Object, address: string, deployTx: Object, txHash: string}>} Deployment details
|
|
286
|
+
* @throws {Error} If not initialized or no signer available
|
|
263
287
|
*/
|
|
264
288
|
async deployContract(abi, bytecode, constructorArgs = []) {
|
|
265
289
|
this._requireInitialized();
|
|
@@ -285,10 +309,11 @@ export class ChainManager {
|
|
|
285
309
|
}
|
|
286
310
|
|
|
287
311
|
/**
|
|
288
|
-
* Wait for a transaction to be mined
|
|
312
|
+
* Wait for a transaction to be mined.
|
|
289
313
|
* @param {string} txHash - Transaction hash
|
|
290
314
|
* @param {number} [confirmations=1] - Number of confirmations to wait for
|
|
291
|
-
* @returns {Promise<
|
|
315
|
+
* @returns {Promise<Object>} Transaction receipt
|
|
316
|
+
* @throws {Error} If not initialized
|
|
292
317
|
*/
|
|
293
318
|
async waitForTransaction(txHash, confirmations = 1) {
|
|
294
319
|
this._requireInitialized();
|
|
@@ -296,9 +321,10 @@ export class ChainManager {
|
|
|
296
321
|
}
|
|
297
322
|
|
|
298
323
|
/**
|
|
299
|
-
* Estimate gas for a transaction
|
|
324
|
+
* Estimate gas for a transaction.
|
|
300
325
|
* @param {Object} tx - Transaction object
|
|
301
|
-
* @returns {Promise<bigint>}
|
|
326
|
+
* @returns {Promise<bigint>} Estimated gas amount
|
|
327
|
+
* @throws {Error} If not initialized
|
|
302
328
|
*/
|
|
303
329
|
async estimateGas(tx) {
|
|
304
330
|
this._requireInitialized();
|
|
@@ -306,8 +332,9 @@ export class ChainManager {
|
|
|
306
332
|
}
|
|
307
333
|
|
|
308
334
|
/**
|
|
309
|
-
* Get current gas price
|
|
310
|
-
* @returns {Promise<{gasPrice: string, maxFeePerGas: string, maxPriorityFeePerGas: string}>}
|
|
335
|
+
* Get current gas price and fee data.
|
|
336
|
+
* @returns {Promise<{gasPrice: string|null, maxFeePerGas: string|null, maxPriorityFeePerGas: string|null}>} Fee data in gwei
|
|
337
|
+
* @throws {Error} If not initialized
|
|
311
338
|
*/
|
|
312
339
|
async getGasPrice() {
|
|
313
340
|
this._requireInitialized();
|
|
@@ -321,10 +348,10 @@ export class ChainManager {
|
|
|
321
348
|
}
|
|
322
349
|
|
|
323
350
|
/**
|
|
324
|
-
* Parse units (e.g., ETH to wei)
|
|
351
|
+
* Parse units (e.g., ETH to wei).
|
|
325
352
|
* @param {string|number} value - Value to parse
|
|
326
353
|
* @param {string|number} [unit='ether'] - Unit name or decimals
|
|
327
|
-
* @returns {bigint}
|
|
354
|
+
* @returns {Promise<bigint>} Parsed value as bigint
|
|
328
355
|
*/
|
|
329
356
|
async parseUnits(value, unit = 'ether') {
|
|
330
357
|
const ethers = await this._loadEthers();
|
|
@@ -332,10 +359,10 @@ export class ChainManager {
|
|
|
332
359
|
}
|
|
333
360
|
|
|
334
361
|
/**
|
|
335
|
-
* Format units (e.g., wei to ETH)
|
|
362
|
+
* Format units (e.g., wei to ETH).
|
|
336
363
|
* @param {bigint|string} value - Value to format
|
|
337
364
|
* @param {string|number} [unit='ether'] - Unit name or decimals
|
|
338
|
-
* @returns {string}
|
|
365
|
+
* @returns {Promise<string>} Formatted value as decimal string
|
|
339
366
|
*/
|
|
340
367
|
async formatUnits(value, unit = 'ether') {
|
|
341
368
|
const ethers = await this._loadEthers();
|
|
@@ -343,8 +370,9 @@ export class ChainManager {
|
|
|
343
370
|
}
|
|
344
371
|
|
|
345
372
|
/**
|
|
346
|
-
* Check if manager is initialized
|
|
373
|
+
* Check if manager is initialized.
|
|
347
374
|
* @private
|
|
375
|
+
* @throws {Error} If not initialized
|
|
348
376
|
*/
|
|
349
377
|
_requireInitialized() {
|
|
350
378
|
if (!this._initialized) {
|
|
@@ -353,15 +381,15 @@ export class ChainManager {
|
|
|
353
381
|
}
|
|
354
382
|
|
|
355
383
|
/**
|
|
356
|
-
* Check if connected
|
|
357
|
-
* @returns {boolean}
|
|
384
|
+
* Check if connected to a network.
|
|
385
|
+
* @returns {boolean} True if connected
|
|
358
386
|
*/
|
|
359
387
|
isConnected() {
|
|
360
388
|
return this._initialized && this.provider !== null;
|
|
361
389
|
}
|
|
362
390
|
|
|
363
391
|
/**
|
|
364
|
-
* Disconnect and clean up
|
|
392
|
+
* Disconnect and clean up resources.
|
|
365
393
|
*/
|
|
366
394
|
disconnect() {
|
|
367
395
|
this.provider = null;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
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
|
|
4
5
|
*/
|
|
5
6
|
|
|
6
7
|
// Import ABIs
|
|
@@ -35,7 +36,16 @@ export const ABIs = {
|
|
|
35
36
|
TestToken: TestTokenABI
|
|
36
37
|
};
|
|
37
38
|
|
|
39
|
+
/**
|
|
40
|
+
* Contract deployment manager for Holosphere contracts.
|
|
41
|
+
* Handles deployment of all contract types and factory infrastructure.
|
|
42
|
+
* @class
|
|
43
|
+
*/
|
|
38
44
|
export class ContractDeployer {
|
|
45
|
+
/**
|
|
46
|
+
* Create a new ContractDeployer instance.
|
|
47
|
+
* @param {ChainManager} chainManager - Chain manager instance
|
|
48
|
+
*/
|
|
39
49
|
constructor(chainManager) {
|
|
40
50
|
this.chainManager = chainManager;
|
|
41
51
|
this.deployedContracts = {};
|
|
@@ -43,8 +53,9 @@ export class ContractDeployer {
|
|
|
43
53
|
}
|
|
44
54
|
|
|
45
55
|
/**
|
|
46
|
-
* Load ethers
|
|
56
|
+
* Load ethers.js library.
|
|
47
57
|
* @private
|
|
58
|
+
* @returns {Promise<Object>} Ethers.js module
|
|
48
59
|
*/
|
|
49
60
|
async _loadEthers() {
|
|
50
61
|
if (!this.ethers) {
|
|
@@ -54,15 +65,15 @@ export class ContractDeployer {
|
|
|
54
65
|
}
|
|
55
66
|
|
|
56
67
|
/**
|
|
57
|
-
* 1-CLICK DEPLOY: Deploy entire Holosphere contract infrastructure
|
|
58
|
-
* Deploys
|
|
59
|
-
*
|
|
60
|
-
* @param {Object} options - Deployment options
|
|
68
|
+
* 1-CLICK DEPLOY: Deploy entire Holosphere contract infrastructure.
|
|
69
|
+
* Deploys all factories, Holons registry, and optional TestToken.
|
|
70
|
+
* @param {Object} [options={}] - Deployment options
|
|
61
71
|
* @param {string} [options.botAddress] - Bot address for managed operations (defaults to deployer)
|
|
62
72
|
* @param {string} [options.testTokenSupply='1000000'] - Initial supply for test token (in whole tokens)
|
|
63
73
|
* @param {boolean} [options.deployTestToken=true] - Whether to deploy test token
|
|
64
|
-
* @param {Function} [options.onProgress] - Callback for deployment progress
|
|
65
|
-
* @returns {Promise<Object>}
|
|
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
|
|
66
77
|
*/
|
|
67
78
|
async deployAll(options = {}) {
|
|
68
79
|
const ethers = await this._loadEthers();
|
|
@@ -190,12 +201,16 @@ export class ContractDeployer {
|
|
|
190
201
|
}
|
|
191
202
|
|
|
192
203
|
/**
|
|
193
|
-
* Deploy a Splitter contract for
|
|
204
|
+
* Deploy a Splitter contract for fractal ownership distribution.
|
|
194
205
|
* @param {string} holonId - Holon identifier
|
|
195
206
|
* @param {string} name - Contract display name
|
|
196
207
|
* @param {number} [splitPercentage=70] - Internal/External split (e.g., 70 = 70% internal, 30% external)
|
|
197
|
-
* @param {Object} [options] - Additional options
|
|
198
|
-
* @
|
|
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
|
|
199
214
|
*/
|
|
200
215
|
async deploySplitter(holonId, name, splitPercentage = 70, options = {}) {
|
|
201
216
|
const signer = this.chainManager.getSigner();
|
|
@@ -231,10 +246,11 @@ export class ContractDeployer {
|
|
|
231
246
|
}
|
|
232
247
|
|
|
233
248
|
/**
|
|
234
|
-
* Deploy a Managed contract
|
|
249
|
+
* Deploy a Managed contract for appreciation-based distribution.
|
|
235
250
|
* @param {string} name - Contract name
|
|
236
|
-
* @param {Object} [options] - Additional options
|
|
237
|
-
* @
|
|
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
|
|
238
254
|
*/
|
|
239
255
|
async deployManaged(name, options = {}) {
|
|
240
256
|
const signer = this.chainManager.getSigner();
|
|
@@ -254,11 +270,13 @@ export class ContractDeployer {
|
|
|
254
270
|
}
|
|
255
271
|
|
|
256
272
|
/**
|
|
257
|
-
* Deploy a Zoned contract
|
|
273
|
+
* Deploy a Zoned contract for tier-based distribution.
|
|
258
274
|
* @param {string} name - Contract name
|
|
259
275
|
* @param {number} [nZones=6] - Number of zones
|
|
260
|
-
* @param {Object} [options] - Additional options
|
|
261
|
-
* @
|
|
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
|
|
262
280
|
*/
|
|
263
281
|
async deployZoned(name, nZones = 6, options = {}) {
|
|
264
282
|
const signer = this.chainManager.getSigner();
|
|
@@ -280,11 +298,11 @@ export class ContractDeployer {
|
|
|
280
298
|
}
|
|
281
299
|
|
|
282
300
|
/**
|
|
283
|
-
* Deploy an Appreciative contract
|
|
301
|
+
* Deploy an Appreciative contract for peer-to-peer appreciation.
|
|
284
302
|
* @param {string} name - Contract name
|
|
285
303
|
* @param {string} creatorUserId - Creator's user ID
|
|
286
|
-
* @param {Object} [options] - Additional options
|
|
287
|
-
* @returns {Promise<{contract, address, txHash}>}
|
|
304
|
+
* @param {Object} [options={}] - Additional deployment options
|
|
305
|
+
* @returns {Promise<{contract: Object, address: string, txHash: string, type: string}>} Deployment details
|
|
288
306
|
*/
|
|
289
307
|
async deployAppreciative(name, creatorUserId, options = {}) {
|
|
290
308
|
const signer = this.chainManager.getSigner();
|
|
@@ -303,13 +321,15 @@ export class ContractDeployer {
|
|
|
303
321
|
}
|
|
304
322
|
|
|
305
323
|
/**
|
|
306
|
-
* Deploy a Bundle contract
|
|
307
|
-
* This is the simplest way to deploy a holon - no registry needed
|
|
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.
|
|
308
326
|
* @param {string} name - Contract name
|
|
309
|
-
* @param {
|
|
327
|
+
* @param {bigint|string} [steepness] - Steepness factor (e.g., 0.5e18 = 50% decay, defaults to 0.5e18)
|
|
310
328
|
* @param {number} [nZones=6] - Number of zones
|
|
311
|
-
* @param {Object} [options] - Additional options
|
|
312
|
-
* @
|
|
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
|
|
313
333
|
*/
|
|
314
334
|
async deployBundle(name, steepness, nZones = 6, options = {}) {
|
|
315
335
|
const ethers = await this._loadEthers();
|
|
@@ -345,12 +365,14 @@ export class ContractDeployer {
|
|
|
345
365
|
}
|
|
346
366
|
|
|
347
367
|
/**
|
|
348
|
-
* Deploy a Bundle contract directly (simplified 1-click deployment)
|
|
349
|
-
* No registry needed - just deploys and returns the address
|
|
368
|
+
* Deploy a Bundle contract directly (simplified 1-click deployment).
|
|
369
|
+
* No registry needed - just deploys and returns the address.
|
|
350
370
|
* @param {string} holonId - Unique identifier for the holon
|
|
351
371
|
* @param {string} name - Display name for the holon
|
|
352
|
-
* @param {Object} [options] -
|
|
353
|
-
* @
|
|
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
|
|
354
376
|
*/
|
|
355
377
|
async deployBundleDirect(holonId, name, options = {}) {
|
|
356
378
|
const steepness = options.steepness;
|
|
@@ -363,9 +385,9 @@ export class ContractDeployer {
|
|
|
363
385
|
}
|
|
364
386
|
|
|
365
387
|
/**
|
|
366
|
-
* Deploy a TestToken
|
|
388
|
+
* Deploy a TestToken ERC20 for testing.
|
|
367
389
|
* @param {string} [initialSupply='1000000'] - Initial supply in whole tokens
|
|
368
|
-
* @returns {Promise<{contract, address, txHash}>}
|
|
390
|
+
* @returns {Promise<{contract: Object, address: string, txHash: string, type: string, initialSupply: string}>} Deployment details
|
|
369
391
|
*/
|
|
370
392
|
async deployTestToken(initialSupply = '1000000') {
|
|
371
393
|
const ethers = await this._loadEthers();
|
|
@@ -385,11 +407,12 @@ export class ContractDeployer {
|
|
|
385
407
|
}
|
|
386
408
|
|
|
387
409
|
/**
|
|
388
|
-
* Create a holon bundle through the Holons registry
|
|
410
|
+
* Create a holon bundle through the Holons registry.
|
|
389
411
|
* @param {string} creatorUserId - Creator's user ID
|
|
390
412
|
* @param {string} name - Bundle name
|
|
391
413
|
* @param {number} [parameter=70] - Split parameter
|
|
392
|
-
* @returns {Promise<{address, txHash}>}
|
|
414
|
+
* @returns {Promise<{address: string, txHash: string, name: string, creatorUserId: string}>} Created holon details
|
|
415
|
+
* @throws {Error} If Holons registry not deployed
|
|
393
416
|
*/
|
|
394
417
|
async createHolonBundle(creatorUserId, name, parameter = 70) {
|
|
395
418
|
if (!this.deployedContracts.holons) {
|
|
@@ -425,10 +448,11 @@ export class ContractDeployer {
|
|
|
425
448
|
}
|
|
426
449
|
|
|
427
450
|
/**
|
|
428
|
-
* Get contract instance by address
|
|
451
|
+
* Get contract instance by address and type.
|
|
429
452
|
* @param {string} address - Contract address
|
|
430
|
-
* @param {string} type - Contract type (Splitter, Managed, Zoned,
|
|
431
|
-
* @returns {Promise<
|
|
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
|
|
432
456
|
*/
|
|
433
457
|
async getContract(address, type) {
|
|
434
458
|
const abi = ABIs[type];
|
|
@@ -439,24 +463,28 @@ export class ContractDeployer {
|
|
|
439
463
|
}
|
|
440
464
|
|
|
441
465
|
/**
|
|
442
|
-
* Get deployed contract addresses
|
|
443
|
-
* @returns {Object}
|
|
466
|
+
* Get deployed contract addresses.
|
|
467
|
+
* @returns {Object} Map of contract names to addresses
|
|
444
468
|
*/
|
|
445
469
|
getDeployedAddresses() {
|
|
446
470
|
return { ...this.deployedContracts };
|
|
447
471
|
}
|
|
448
472
|
|
|
449
473
|
/**
|
|
450
|
-
* Load previously deployed
|
|
451
|
-
* @param {Object} addresses -
|
|
474
|
+
* Load previously deployed contract addresses.
|
|
475
|
+
* @param {Object} addresses - Map of contract names to addresses
|
|
452
476
|
*/
|
|
453
477
|
loadDeployedAddresses(addresses) {
|
|
454
478
|
this.deployedContracts = { ...addresses };
|
|
455
479
|
}
|
|
456
480
|
|
|
457
481
|
/**
|
|
458
|
-
* Internal
|
|
482
|
+
* Internal helper to deploy a contract.
|
|
459
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
|
|
460
488
|
*/
|
|
461
489
|
async _deployContract(abi, bytecode, constructorArgs) {
|
|
462
490
|
const result = await this.chainManager.deployContract(abi, bytecode, constructorArgs);
|