@layerzerolabs/lz-iotal1-sdk-v2 3.0.143
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 +32 -0
- package/README.md +19 -0
- package/deployments/iotal1-mainnet/blocked_message_lib.json +58 -0
- package/deployments/iotal1-mainnet/blocked_msglib_ptb_builder.json +58 -0
- package/deployments/iotal1-mainnet/call.json +46 -0
- package/deployments/iotal1-mainnet/counter.json +85 -0
- package/deployments/iotal1-mainnet/dvn.json +49 -0
- package/deployments/iotal1-mainnet/dvn_call_type.json +45 -0
- package/deployments/iotal1-mainnet/dvn_fee_lib.json +59 -0
- package/deployments/iotal1-mainnet/dvn_layerzero.json +56 -0
- package/deployments/iotal1-mainnet/dvn_ptb_builder.json +45 -0
- package/deployments/iotal1-mainnet/endpoint_ptb_builder.json +70 -0
- package/deployments/iotal1-mainnet/endpoint_v2.json +86 -0
- package/deployments/iotal1-mainnet/executor.json +49 -0
- package/deployments/iotal1-mainnet/executor_call_type.json +45 -0
- package/deployments/iotal1-mainnet/executor_fee_lib.json +60 -0
- package/deployments/iotal1-mainnet/executor_layerzero.json +56 -0
- package/deployments/iotal1-mainnet/executor_ptb_builder.json +45 -0
- package/deployments/iotal1-mainnet/layerzero_views.json +46 -0
- package/deployments/iotal1-mainnet/message_lib_common.json +47 -0
- package/deployments/iotal1-mainnet/msglib_ptb_builder_call_types.json +45 -0
- package/deployments/iotal1-mainnet/multi_call.json +45 -0
- package/deployments/iotal1-mainnet/oapp.json +50 -0
- package/deployments/iotal1-mainnet/object-BlockedMessageLib.json +9 -0
- package/deployments/iotal1-mainnet/object-BlockedMsglibPtbBuilder.json +9 -0
- package/deployments/iotal1-mainnet/object-Counter.json +9 -0
- package/deployments/iotal1-mainnet/object-CounterAdminCap.json +9 -0
- package/deployments/iotal1-mainnet/object-CounterOApp.json +9 -0
- package/deployments/iotal1-mainnet/object-DVN.json +5 -0
- package/deployments/iotal1-mainnet/object-DVNCap.json +9 -0
- package/deployments/iotal1-mainnet/object-DVNFeeLib.json +9 -0
- package/deployments/iotal1-mainnet/object-EndpointPtbBuilder.json +9 -0
- package/deployments/iotal1-mainnet/object-EndpointPtbBuilderAdminCap.json +9 -0
- package/deployments/iotal1-mainnet/object-EndpointV2.json +9 -0
- package/deployments/iotal1-mainnet/object-EndpointV2AdminCap.json +9 -0
- package/deployments/iotal1-mainnet/object-Executor.json +5 -0
- package/deployments/iotal1-mainnet/object-ExecutorCap.json +9 -0
- package/deployments/iotal1-mainnet/object-ExecutorFeeLib.json +9 -0
- package/deployments/iotal1-mainnet/object-ExecutorOwnerCap.json +5 -0
- package/deployments/iotal1-mainnet/object-OFTComposerManager.json +9 -0
- package/deployments/iotal1-mainnet/object-PackageWhitelistValidator.json +9 -0
- package/deployments/iotal1-mainnet/object-PriceFeed.json +9 -0
- package/deployments/iotal1-mainnet/object-PriceFeedOwnerCap.json +9 -0
- package/deployments/iotal1-mainnet/object-SimpleMessageLib.json +9 -0
- package/deployments/iotal1-mainnet/object-SimpleMessageLibAdminCap.json +9 -0
- package/deployments/iotal1-mainnet/object-SmlPtbBuilder.json +9 -0
- package/deployments/iotal1-mainnet/object-Treasury.json +9 -0
- package/deployments/iotal1-mainnet/object-TreasuryAdminCap.json +9 -0
- package/deployments/iotal1-mainnet/object-ULN302.json +9 -0
- package/deployments/iotal1-mainnet/object-ULN302AdminCap.json +9 -0
- package/deployments/iotal1-mainnet/object-Uln302PtbBuilder.json +9 -0
- package/deployments/iotal1-mainnet/object-Uln302Verification.json +9 -0
- package/deployments/iotal1-mainnet/object-WorkerRegistry.json +9 -0
- package/deployments/iotal1-mainnet/object-ZroCoinMetadata.json +9 -0
- package/deployments/iotal1-mainnet/object-ZroTreasuryCap.json +9 -0
- package/deployments/iotal1-mainnet/oft_common.json +61 -0
- package/deployments/iotal1-mainnet/package_whitelist_validator.json +113 -0
- package/deployments/iotal1-mainnet/price_feed.json +70 -0
- package/deployments/iotal1-mainnet/price_feed_call_types.json +45 -0
- package/deployments/iotal1-mainnet/ptb_move_call.json +48 -0
- package/deployments/iotal1-mainnet/simple_message_lib.json +69 -0
- package/deployments/iotal1-mainnet/simple_msglib_ptb_builder.json +58 -0
- package/deployments/iotal1-mainnet/treasury.json +69 -0
- package/deployments/iotal1-mainnet/uln_302.json +87 -0
- package/deployments/iotal1-mainnet/uln_302_ptb_builder.json +58 -0
- package/deployments/iotal1-mainnet/uln_common.json +49 -0
- package/deployments/iotal1-mainnet/utils.json +57 -0
- package/deployments/iotal1-mainnet/worker_common.json +46 -0
- package/deployments/iotal1-mainnet/worker_registry.json +58 -0
- package/deployments/iotal1-mainnet/zro.json +67 -0
- package/deployments/iotal1-sandbox-local/blocked_message_lib.json +58 -0
- package/deployments/iotal1-sandbox-local/blocked_msglib_ptb_builder.json +58 -0
- package/deployments/iotal1-sandbox-local/call.json +46 -0
- package/deployments/iotal1-sandbox-local/counter.json +148 -0
- package/deployments/iotal1-sandbox-local/dvn.json +49 -0
- package/deployments/iotal1-sandbox-local/dvn_call_type.json +73 -0
- package/deployments/iotal1-sandbox-local/dvn_fee_lib.json +59 -0
- package/deployments/iotal1-sandbox-local/dvn_layerzero.json +56 -0
- package/deployments/iotal1-sandbox-local/dvn_ptb_builder.json +45 -0
- package/deployments/iotal1-sandbox-local/endpoint_ptb_builder.json +70 -0
- package/deployments/iotal1-sandbox-local/endpoint_v2.json +86 -0
- package/deployments/iotal1-sandbox-local/executor.json +49 -0
- package/deployments/iotal1-sandbox-local/executor_call_type.json +73 -0
- package/deployments/iotal1-sandbox-local/executor_fee_lib.json +60 -0
- package/deployments/iotal1-sandbox-local/executor_layerzero.json +56 -0
- package/deployments/iotal1-sandbox-local/executor_ptb_builder.json +45 -0
- package/deployments/iotal1-sandbox-local/layerzero_views.json +46 -0
- package/deployments/iotal1-sandbox-local/message_lib_common.json +47 -0
- package/deployments/iotal1-sandbox-local/msglib_ptb_builder_call_types.json +45 -0
- package/deployments/iotal1-sandbox-local/multi_call.json +45 -0
- package/deployments/iotal1-sandbox-local/oapp.json +50 -0
- package/deployments/iotal1-sandbox-local/object-BlockedMessageLib.json +9 -0
- package/deployments/iotal1-sandbox-local/object-BlockedMsglibPtbBuilder.json +9 -0
- package/deployments/iotal1-sandbox-local/object-Counter.json +9 -0
- package/deployments/iotal1-sandbox-local/object-CounterAdminCap.json +9 -0
- package/deployments/iotal1-sandbox-local/object-CounterOApp.json +9 -0
- package/deployments/iotal1-sandbox-local/object-DVN.json +5 -0
- package/deployments/iotal1-sandbox-local/object-DVNCap.json +9 -0
- package/deployments/iotal1-sandbox-local/object-DVNFeeLib.json +9 -0
- package/deployments/iotal1-sandbox-local/object-EndpointPtbBuilder.json +9 -0
- package/deployments/iotal1-sandbox-local/object-EndpointPtbBuilderAdminCap.json +9 -0
- package/deployments/iotal1-sandbox-local/object-EndpointV2.json +9 -0
- package/deployments/iotal1-sandbox-local/object-EndpointV2AdminCap.json +9 -0
- package/deployments/iotal1-sandbox-local/object-Executor.json +5 -0
- package/deployments/iotal1-sandbox-local/object-ExecutorCap.json +9 -0
- package/deployments/iotal1-sandbox-local/object-ExecutorFeeLib.json +9 -0
- package/deployments/iotal1-sandbox-local/object-ExecutorOwnerCap.json +5 -0
- package/deployments/iotal1-sandbox-local/object-PackageWhitelistValidator.json +9 -0
- package/deployments/iotal1-sandbox-local/object-PriceFeed.json +9 -0
- package/deployments/iotal1-sandbox-local/object-PriceFeedOwnerCap.json +9 -0
- package/deployments/iotal1-sandbox-local/object-SimpleMessageLib.json +9 -0
- package/deployments/iotal1-sandbox-local/object-SimpleMessageLibAdminCap.json +9 -0
- package/deployments/iotal1-sandbox-local/object-SmlPtbBuilder.json +9 -0
- package/deployments/iotal1-sandbox-local/object-Treasury.json +9 -0
- package/deployments/iotal1-sandbox-local/object-TreasuryAdminCap.json +9 -0
- package/deployments/iotal1-sandbox-local/object-ULN302.json +9 -0
- package/deployments/iotal1-sandbox-local/object-ULN302AdminCap.json +9 -0
- package/deployments/iotal1-sandbox-local/object-Uln302PtbBuilder.json +9 -0
- package/deployments/iotal1-sandbox-local/object-Uln302Verification.json +9 -0
- package/deployments/iotal1-sandbox-local/object-WorkerRegistry.json +9 -0
- package/deployments/iotal1-sandbox-local/object-ZroCoinMetadata.json +9 -0
- package/deployments/iotal1-sandbox-local/object-ZroTreasuryCap.json +9 -0
- package/deployments/iotal1-sandbox-local/package_whitelist_validator.json +113 -0
- package/deployments/iotal1-sandbox-local/price_feed.json +98 -0
- package/deployments/iotal1-sandbox-local/price_feed_call_types.json +45 -0
- package/deployments/iotal1-sandbox-local/ptb_move_call.json +48 -0
- package/deployments/iotal1-sandbox-local/simple_message_lib.json +69 -0
- package/deployments/iotal1-sandbox-local/simple_msglib_ptb_builder.json +58 -0
- package/deployments/iotal1-sandbox-local/treasury.json +97 -0
- package/deployments/iotal1-sandbox-local/uln_302.json +87 -0
- package/deployments/iotal1-sandbox-local/uln_302_ptb_builder.json +58 -0
- package/deployments/iotal1-sandbox-local/uln_common.json +49 -0
- package/deployments/iotal1-sandbox-local/utils.json +78 -0
- package/deployments/iotal1-sandbox-local/worker_common.json +46 -0
- package/deployments/iotal1-sandbox-local/worker_registry.json +58 -0
- package/deployments/iotal1-sandbox-local/zro.json +67 -0
- package/deployments/iotal1-testnet/blocked_message_lib.json +58 -0
- package/deployments/iotal1-testnet/blocked_msglib_ptb_builder.json +58 -0
- package/deployments/iotal1-testnet/call.json +46 -0
- package/deployments/iotal1-testnet/counter.json +85 -0
- package/deployments/iotal1-testnet/dvn.json +49 -0
- package/deployments/iotal1-testnet/dvn_call_type.json +45 -0
- package/deployments/iotal1-testnet/dvn_fee_lib.json +59 -0
- package/deployments/iotal1-testnet/dvn_layerzero.json +56 -0
- package/deployments/iotal1-testnet/dvn_ptb_builder.json +45 -0
- package/deployments/iotal1-testnet/endpoint_ptb_builder.json +70 -0
- package/deployments/iotal1-testnet/endpoint_v2.json +86 -0
- package/deployments/iotal1-testnet/executor.json +49 -0
- package/deployments/iotal1-testnet/executor_call_type.json +45 -0
- package/deployments/iotal1-testnet/executor_fee_lib.json +60 -0
- package/deployments/iotal1-testnet/executor_layerzero.json +56 -0
- package/deployments/iotal1-testnet/executor_ptb_builder.json +45 -0
- package/deployments/iotal1-testnet/layerzero_views.json +46 -0
- package/deployments/iotal1-testnet/message_lib_common.json +47 -0
- package/deployments/iotal1-testnet/msglib_ptb_builder_call_types.json +45 -0
- package/deployments/iotal1-testnet/multi_call.json +45 -0
- package/deployments/iotal1-testnet/oapp.json +50 -0
- package/deployments/iotal1-testnet/object-BlockedMessageLib.json +9 -0
- package/deployments/iotal1-testnet/object-BlockedMsglibPtbBuilder.json +9 -0
- package/deployments/iotal1-testnet/object-Counter.json +9 -0
- package/deployments/iotal1-testnet/object-CounterAdminCap.json +9 -0
- package/deployments/iotal1-testnet/object-CounterOApp.json +9 -0
- package/deployments/iotal1-testnet/object-DVN.json +5 -0
- package/deployments/iotal1-testnet/object-DVNCap.json +9 -0
- package/deployments/iotal1-testnet/object-DVNFeeLib.json +9 -0
- package/deployments/iotal1-testnet/object-EndpointPtbBuilder.json +9 -0
- package/deployments/iotal1-testnet/object-EndpointPtbBuilderAdminCap.json +9 -0
- package/deployments/iotal1-testnet/object-EndpointV2.json +9 -0
- package/deployments/iotal1-testnet/object-EndpointV2AdminCap.json +9 -0
- package/deployments/iotal1-testnet/object-Executor.json +5 -0
- package/deployments/iotal1-testnet/object-ExecutorCap.json +9 -0
- package/deployments/iotal1-testnet/object-ExecutorFeeLib.json +9 -0
- package/deployments/iotal1-testnet/object-ExecutorOwnerCap.json +5 -0
- package/deployments/iotal1-testnet/object-PackageWhitelistValidator.json +9 -0
- package/deployments/iotal1-testnet/object-PriceFeed.json +9 -0
- package/deployments/iotal1-testnet/object-PriceFeedOwnerCap.json +9 -0
- package/deployments/iotal1-testnet/object-SimpleMessageLib.json +9 -0
- package/deployments/iotal1-testnet/object-SimpleMessageLibAdminCap.json +9 -0
- package/deployments/iotal1-testnet/object-SmlPtbBuilder.json +9 -0
- package/deployments/iotal1-testnet/object-Treasury.json +9 -0
- package/deployments/iotal1-testnet/object-TreasuryAdminCap.json +9 -0
- package/deployments/iotal1-testnet/object-ULN302.json +9 -0
- package/deployments/iotal1-testnet/object-ULN302AdminCap.json +9 -0
- package/deployments/iotal1-testnet/object-Uln302PtbBuilder.json +9 -0
- package/deployments/iotal1-testnet/object-Uln302Verification.json +9 -0
- package/deployments/iotal1-testnet/object-WorkerRegistry.json +9 -0
- package/deployments/iotal1-testnet/object-ZroCoinMetadata.json +9 -0
- package/deployments/iotal1-testnet/object-ZroTreasuryCap.json +9 -0
- package/deployments/iotal1-testnet/package_whitelist_validator.json +113 -0
- package/deployments/iotal1-testnet/price_feed.json +70 -0
- package/deployments/iotal1-testnet/price_feed_call_types.json +45 -0
- package/deployments/iotal1-testnet/ptb_move_call.json +48 -0
- package/deployments/iotal1-testnet/simple_message_lib.json +69 -0
- package/deployments/iotal1-testnet/simple_msglib_ptb_builder.json +58 -0
- package/deployments/iotal1-testnet/treasury.json +69 -0
- package/deployments/iotal1-testnet/uln_302.json +87 -0
- package/deployments/iotal1-testnet/uln_302_ptb_builder.json +58 -0
- package/deployments/iotal1-testnet/uln_common.json +49 -0
- package/deployments/iotal1-testnet/utils.json +57 -0
- package/deployments/iotal1-testnet/worker_common.json +46 -0
- package/deployments/iotal1-testnet/worker_registry.json +58 -0
- package/deployments/iotal1-testnet/zro.json +67 -0
- package/dist/index.cjs +11279 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.mts +5824 -0
- package/dist/index.d.ts +5824 -0
- package/dist/index.mjs +11107 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +68 -0
- package/src/bcs/dvn.ts +7 -0
- package/src/bcs/endpoint.ts +7 -0
- package/src/bcs/executor.ts +27 -0
- package/src/bcs/index.ts +8 -0
- package/src/bcs/messaging-fee.ts +6 -0
- package/src/bcs/move-call.ts +28 -0
- package/src/bcs/oapp.ts +14 -0
- package/src/bcs/price-feed.ts +21 -0
- package/src/bcs/uln.ts +15 -0
- package/src/generated/addresses.ts +344 -0
- package/src/index.ts +5 -0
- package/src/module-manager.ts +360 -0
- package/src/modules/call.ts +245 -0
- package/src/modules/endpoint.ts +2417 -0
- package/src/modules/index.ts +10 -0
- package/src/modules/layerzero-views.ts +205 -0
- package/src/modules/message-libs/blocked-message-lib.ts +112 -0
- package/src/modules/message-libs/index.ts +4 -0
- package/src/modules/message-libs/simple-message-lib.ts +270 -0
- package/src/modules/message-libs/uln302.ts +827 -0
- package/src/modules/oapps/counter.ts +458 -0
- package/src/modules/oapps/index.ts +3 -0
- package/src/modules/oapps/oapp.ts +744 -0
- package/src/modules/ptb-builders/blocked-message-lib-ptb-builder.ts +49 -0
- package/src/modules/ptb-builders/dvn-ptb-builder.ts +58 -0
- package/src/modules/ptb-builders/endpoint-ptb-builder.ts +520 -0
- package/src/modules/ptb-builders/executor-ptb-builder.ts +58 -0
- package/src/modules/ptb-builders/index.ts +9 -0
- package/src/modules/ptb-builders/package-whitelist-validator.ts +142 -0
- package/src/modules/ptb-builders/ptb-builder.ts +357 -0
- package/src/modules/ptb-builders/simple-message-lib-ptb-builder.ts +53 -0
- package/src/modules/ptb-builders/uln302-ptb-builder.ts +222 -0
- package/src/modules/utils.ts +902 -0
- package/src/modules/workers/dvn-fee-lib.ts +89 -0
- package/src/modules/workers/dvn-layerzero.ts +85 -0
- package/src/modules/workers/dvn.ts +1727 -0
- package/src/modules/workers/executor-fee-lib.ts +94 -0
- package/src/modules/workers/executor-layerzero.ts +79 -0
- package/src/modules/workers/executor.ts +1170 -0
- package/src/modules/workers/index.ts +10 -0
- package/src/modules/workers/price-feed.ts +575 -0
- package/src/modules/workers/treasury.ts +295 -0
- package/src/modules/workers/worker-registry.ts +110 -0
- package/src/modules/zro.ts +94 -0
- package/src/resource.ts +104 -0
- package/src/sdk.ts +183 -0
- package/src/types/dvn.ts +20 -0
- package/src/types/endpoint.ts +16 -0
- package/src/types/errors.ts +10 -0
- package/src/types/executor.ts +23 -0
- package/src/types/index.ts +13 -0
- package/src/types/layerzero-views.ts +59 -0
- package/src/types/message-lib.ts +38 -0
- package/src/types/modules.ts +36 -0
- package/src/types/move-types.ts +24 -0
- package/src/types/oapp.ts +6 -0
- package/src/types/options.ts +333 -0
- package/src/types/price-feed.ts +21 -0
- package/src/types/ptb-builder.ts +29 -0
- package/src/types/simulation.ts +8 -0
- package/src/utils/argument.ts +198 -0
- package/src/utils/index.ts +8 -0
- package/src/utils/move-call-object-fetcher.ts +105 -0
- package/src/utils/non-sender-object-validator.ts +102 -0
- package/src/utils/package-allowlist-validator.ts +134 -0
- package/src/utils/ptb-validator.ts +14 -0
- package/src/utils/share-object-validator.ts +37 -0
- package/src/utils/transaction.ts +157 -0
- package/src/utils/type-name.ts +99 -0
- package/src/utils/validate-with-details.ts +50 -0
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
import { createHash } from 'crypto'
|
|
2
|
+
|
|
3
|
+
import { IotaClient } from '@iota/iota-sdk/client'
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
BlockedMessageLib,
|
|
7
|
+
BlockedMessageLibPtbBuilder,
|
|
8
|
+
Call,
|
|
9
|
+
Counter,
|
|
10
|
+
DVN,
|
|
11
|
+
DVNFeeLib,
|
|
12
|
+
DvnLayerZero,
|
|
13
|
+
DvnPtbBuilder,
|
|
14
|
+
Endpoint,
|
|
15
|
+
EndpointPtbBuilder,
|
|
16
|
+
Executor,
|
|
17
|
+
ExecutorFeeLib,
|
|
18
|
+
ExecutorLayerZero,
|
|
19
|
+
ExecutorPtbBuilder,
|
|
20
|
+
LayerZeroViews,
|
|
21
|
+
OApp,
|
|
22
|
+
PackageWhitelistValidator,
|
|
23
|
+
PriceFeed,
|
|
24
|
+
PtbBuilder,
|
|
25
|
+
SimpleMessageLib,
|
|
26
|
+
SimpleMessageLibPtbBuilder,
|
|
27
|
+
Treasury,
|
|
28
|
+
Uln302,
|
|
29
|
+
Uln302PtbBuilder,
|
|
30
|
+
Utils,
|
|
31
|
+
WorkerRegistry,
|
|
32
|
+
Zro,
|
|
33
|
+
} from './modules'
|
|
34
|
+
import { ModuleOptions, ObjectOptions, PackageOptions } from './types'
|
|
35
|
+
import { Modules } from './types/modules'
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Module Manager - Centralized management for all SDK modules
|
|
39
|
+
* Uses unified storage for both core modules and cached modules with options
|
|
40
|
+
*/
|
|
41
|
+
export class ModuleManager {
|
|
42
|
+
public packages: PackageOptions
|
|
43
|
+
public objects: ObjectOptions
|
|
44
|
+
|
|
45
|
+
private storage = new Map<string, unknown>()
|
|
46
|
+
|
|
47
|
+
constructor(packages: PackageOptions, objects: ObjectOptions) {
|
|
48
|
+
this.packages = packages
|
|
49
|
+
this.objects = objects
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Generate a cache key using hash for modules with options
|
|
54
|
+
*/
|
|
55
|
+
private generateCacheKey(moduleName: string, options?: ModuleOptions): string {
|
|
56
|
+
if (!options) {
|
|
57
|
+
return `${moduleName}:default`
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Create hash from JSON string
|
|
61
|
+
const jsonStr = JSON.stringify(options, Object.keys(options).sort())
|
|
62
|
+
const hash = createHash('sha256').update(jsonStr).digest('hex').substring(0, 16)
|
|
63
|
+
|
|
64
|
+
return `${moduleName}:${hash}`
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
private setCoreModules(modules: { [key: string]: unknown }): void {
|
|
68
|
+
Object.entries(modules).forEach(([name, instance]) => {
|
|
69
|
+
this.setModule(name, undefined, instance)
|
|
70
|
+
})
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Get module instance (with options), throws error if not found
|
|
75
|
+
*/
|
|
76
|
+
getModule<T>(moduleName: string, options?: ModuleOptions): T {
|
|
77
|
+
const key = this.generateCacheKey(moduleName, options)
|
|
78
|
+
const module = this.storage.get(key) as T | undefined
|
|
79
|
+
if (module === undefined) {
|
|
80
|
+
const optionsStr = options ? ` with options ${JSON.stringify(options)}` : ''
|
|
81
|
+
throw new Error(`Module '${moduleName}'${optionsStr} not found`)
|
|
82
|
+
}
|
|
83
|
+
return module
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Store module instance (with options)
|
|
88
|
+
*/
|
|
89
|
+
setModule<T>(moduleName: string, options: ModuleOptions | undefined, instance: T): void {
|
|
90
|
+
const key = this.generateCacheKey(moduleName, options)
|
|
91
|
+
this.storage.set(key, instance)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Check if module (with options) exists
|
|
96
|
+
*/
|
|
97
|
+
hasModule(moduleName: string, options?: ModuleOptions): boolean {
|
|
98
|
+
const key = this.generateCacheKey(moduleName, options)
|
|
99
|
+
return this.storage.has(key)
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Get module instance or create new one using factory function
|
|
104
|
+
*/
|
|
105
|
+
getOrCreateModule<T>(moduleName: string, options: ModuleOptions | undefined, factory: () => T): T {
|
|
106
|
+
// Check if module exists first
|
|
107
|
+
if (this.hasModule(moduleName, options)) {
|
|
108
|
+
return this.getModule<T>(moduleName, options)
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Create new instance and store it
|
|
112
|
+
const instance = factory()
|
|
113
|
+
this.setModule(moduleName, options, instance)
|
|
114
|
+
return instance
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Get all core modules as an object
|
|
119
|
+
*/
|
|
120
|
+
getAllCoreModules(): { [key: string]: unknown } {
|
|
121
|
+
const result: { [key: string]: unknown } = {}
|
|
122
|
+
const coreModuleKeys = Array.from(this.storage.keys()).filter((key) => key.endsWith(':default'))
|
|
123
|
+
|
|
124
|
+
for (const key of coreModuleKeys) {
|
|
125
|
+
const moduleName = key.replace(':default', '')
|
|
126
|
+
result[moduleName] = this.storage.get(key)
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return result
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Clear all modules and cache
|
|
134
|
+
*/
|
|
135
|
+
clear(): void {
|
|
136
|
+
this.storage.clear()
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Remove a module with specific options
|
|
141
|
+
*/
|
|
142
|
+
removeModule(moduleName: string, options?: ModuleOptions): boolean {
|
|
143
|
+
const key = this.generateCacheKey(moduleName, options)
|
|
144
|
+
return this.storage.delete(key)
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Initialize all standard LayerZero modules
|
|
149
|
+
* @param packages - Package addresses configuration
|
|
150
|
+
* @param objects - Object addresses configuration
|
|
151
|
+
* @param client - Iota client instance
|
|
152
|
+
* @param context - Context object to be populated with module references
|
|
153
|
+
*/
|
|
154
|
+
initializeCoreModules(packages: PackageOptions, objects: ObjectOptions, client: IotaClient): void {
|
|
155
|
+
this.setCoreModules({
|
|
156
|
+
[Modules.Endpoint]: new Endpoint(packages.endpointV2, client, objects, this),
|
|
157
|
+
[Modules.SimpleMessageLib]: new SimpleMessageLib(packages.simpleMessageLib, client, objects, this),
|
|
158
|
+
[Modules.BlockedMessageLib]: new BlockedMessageLib(packages.blockedMessageLib, client, objects, this),
|
|
159
|
+
[Modules.Uln302]: new Uln302(packages.uln302, client, objects, this),
|
|
160
|
+
[Modules.Utils]: new Utils(packages.utils, client),
|
|
161
|
+
[Modules.Zro]: new Zro(packages.zro, client, this),
|
|
162
|
+
[Modules.Call]: new Call(packages.call, client),
|
|
163
|
+
[Modules.Treasury]: new Treasury(packages.treasury, client, objects, this),
|
|
164
|
+
[Modules.LayerZeroViews]: new LayerZeroViews(packages.layerzeroViews, client, objects, this),
|
|
165
|
+
[Modules.PtbBuilder]: new PtbBuilder(packages.ptbMoveCall, client),
|
|
166
|
+
})
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// === Core Module Getters ===
|
|
170
|
+
|
|
171
|
+
getEndpoint(): Endpoint {
|
|
172
|
+
return this.getModule(Modules.Endpoint)
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
getSimpleMessageLib(): SimpleMessageLib {
|
|
176
|
+
return this.getModule(Modules.SimpleMessageLib)
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
getBlockedMessageLib(): BlockedMessageLib {
|
|
180
|
+
return this.getModule(Modules.BlockedMessageLib)
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
getUln302(): Uln302 {
|
|
184
|
+
return this.getModule(Modules.Uln302)
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
getUtils(): Utils {
|
|
188
|
+
return this.getModule(Modules.Utils)
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
getZro(): Zro {
|
|
192
|
+
return this.getModule(Modules.Zro)
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
getCall(): Call {
|
|
196
|
+
return this.getModule(Modules.Call)
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
getTreasury(): Treasury {
|
|
200
|
+
return this.getModule(Modules.Treasury)
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
getLayerZeroViews(): LayerZeroViews {
|
|
204
|
+
return this.getModule(Modules.LayerZeroViews)
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
getPtbBuilder(): PtbBuilder {
|
|
208
|
+
return this.getModule(Modules.PtbBuilder)
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
getOApp(client: IotaClient, callCapId: string, options?: ModuleOptions): OApp {
|
|
212
|
+
return this.getOrCreateModule(Modules.Oapp + callCapId, options, () => {
|
|
213
|
+
const packageId = options?.packageId ?? this.packages.oapp
|
|
214
|
+
const objects = this.mergeObjectsOptions(options)
|
|
215
|
+
return new OApp(packageId, callCapId, client, objects, this)
|
|
216
|
+
})
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// === Non-core Module Getters (created on-demand with caching) ===
|
|
220
|
+
|
|
221
|
+
getCounter(client: IotaClient, options?: ModuleOptions): Counter {
|
|
222
|
+
return this.getOrCreateModule(Modules.Counter, options, () => {
|
|
223
|
+
const packageId = options?.packageId ?? this.packages.counterV2
|
|
224
|
+
const objects = this.mergeObjectsOptions(options)
|
|
225
|
+
return new Counter(packageId, client, objects, this)
|
|
226
|
+
})
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
getExecutor(client: IotaClient, options?: ModuleOptions): Executor {
|
|
230
|
+
return this.getOrCreateModule(Modules.Executor, options, () => {
|
|
231
|
+
const packageId = options?.packageId ?? this.packages.executor
|
|
232
|
+
const objects = this.mergeObjectsOptions(options)
|
|
233
|
+
return new Executor(packageId, client, objects, this)
|
|
234
|
+
})
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
getDvn(client: IotaClient, options?: ModuleOptions): DVN {
|
|
238
|
+
return this.getOrCreateModule(Modules.Dvn, options, () => {
|
|
239
|
+
const packageId = options?.packageId ?? this.packages.dvn
|
|
240
|
+
const objects = this.mergeObjectsOptions(options)
|
|
241
|
+
return new DVN(packageId, client, objects, this)
|
|
242
|
+
})
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
getDvnFeeLib(client: IotaClient, options?: ModuleOptions): DVNFeeLib {
|
|
246
|
+
return this.getOrCreateModule(Modules.DvnFeeLib, options, () => {
|
|
247
|
+
const packageId = options?.packageId ?? this.packages.dvnFeeLib
|
|
248
|
+
const objects = this.mergeObjectsOptions(options)
|
|
249
|
+
return new DVNFeeLib(packageId, client, objects, this)
|
|
250
|
+
})
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
getExecutorFeeLib(client: IotaClient, options?: ModuleOptions): ExecutorFeeLib {
|
|
254
|
+
return this.getOrCreateModule(Modules.ExecutorFeeLib, options, () => {
|
|
255
|
+
const packageId = options?.packageId ?? this.packages.executorFeeLib
|
|
256
|
+
const objects = this.mergeObjectsOptions(options)
|
|
257
|
+
return new ExecutorFeeLib(packageId, client, objects, this)
|
|
258
|
+
})
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
getPriceFeed(client: IotaClient, options?: ModuleOptions): PriceFeed {
|
|
262
|
+
return this.getOrCreateModule(Modules.PriceFeed, options, () => {
|
|
263
|
+
const packageId = options?.packageId ?? this.packages.priceFeed
|
|
264
|
+
const objects = this.mergeObjectsOptions(options)
|
|
265
|
+
return new PriceFeed(packageId, client, objects, this)
|
|
266
|
+
})
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
getDvnLayerZero(client: IotaClient, options?: ModuleOptions): DvnLayerZero {
|
|
270
|
+
return this.getOrCreateModule(Modules.DvnLayerZero, options, () => {
|
|
271
|
+
const packageId = options?.packageId ?? this.packages.dvnLayerzero
|
|
272
|
+
return new DvnLayerZero(packageId, client, this)
|
|
273
|
+
})
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
getExecutorLayerZero(client: IotaClient, options?: ModuleOptions): ExecutorLayerZero {
|
|
277
|
+
return this.getOrCreateModule(Modules.ExecutorLayerZero, options, () => {
|
|
278
|
+
const packageId = options?.packageId ?? this.packages.executorLayerzero
|
|
279
|
+
return new ExecutorLayerZero(packageId, client, this)
|
|
280
|
+
})
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
getDvnPtbBuilder(client: IotaClient, options?: ModuleOptions): DvnPtbBuilder {
|
|
284
|
+
return this.getOrCreateModule(Modules.DvnPtbBuilder, options, () => {
|
|
285
|
+
const packageId = options?.packageId ?? this.packages.dvnPtbBuilder
|
|
286
|
+
const objects = this.mergeObjectsOptions(options)
|
|
287
|
+
return new DvnPtbBuilder(packageId, client, objects, this)
|
|
288
|
+
})
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
getExecutorPtbBuilder(client: IotaClient, options?: ModuleOptions): ExecutorPtbBuilder {
|
|
292
|
+
return this.getOrCreateModule(Modules.ExecutorPtbBuilder, options, () => {
|
|
293
|
+
const packageId = options?.packageId ?? this.packages.executorPtbBuilder
|
|
294
|
+
const objects = this.mergeObjectsOptions(options)
|
|
295
|
+
return new ExecutorPtbBuilder(packageId, client, objects, this)
|
|
296
|
+
})
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
getPackageWhitelistValidator(client: IotaClient, options?: ModuleOptions): PackageWhitelistValidator {
|
|
300
|
+
return this.getOrCreateModule(Modules.PackageWhitelistValidator, options, () => {
|
|
301
|
+
const packageId = options?.packageId ?? this.packages.packageWhitelistValidator
|
|
302
|
+
const objects = this.mergeObjectsOptions(options)
|
|
303
|
+
return new PackageWhitelistValidator(packageId, client, objects, this)
|
|
304
|
+
})
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
getUln302PtbBuilder(client: IotaClient, options?: ModuleOptions): Uln302PtbBuilder {
|
|
308
|
+
return this.getOrCreateModule(Modules.Uln302PtbBuilder, options, () => {
|
|
309
|
+
const packageId = options?.packageId ?? this.packages.uln302PtbBuilder
|
|
310
|
+
const objects = this.mergeObjectsOptions(options)
|
|
311
|
+
return new Uln302PtbBuilder(packageId, client, objects, this)
|
|
312
|
+
})
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
getEndpointPtbBuilder(client: IotaClient, options?: ModuleOptions): EndpointPtbBuilder {
|
|
316
|
+
return this.getOrCreateModule(Modules.EndpointPtbBuilder, options, () => {
|
|
317
|
+
const packageId = options?.packageId ?? this.packages.endpointPtbBuilder
|
|
318
|
+
const objects = this.mergeObjectsOptions(options)
|
|
319
|
+
return new EndpointPtbBuilder(packageId, client, objects, this)
|
|
320
|
+
})
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
getSimpleMessageLibPtbBuilder(client: IotaClient, options?: ModuleOptions): SimpleMessageLibPtbBuilder {
|
|
324
|
+
return this.getOrCreateModule(Modules.SimpleMessageLibPtbBuilder, options, () => {
|
|
325
|
+
const packageId = options?.packageId ?? this.packages.simpleMessageLibPtbBuilder
|
|
326
|
+
const objects = this.mergeObjectsOptions(options)
|
|
327
|
+
return new SimpleMessageLibPtbBuilder(packageId, client, objects, this)
|
|
328
|
+
})
|
|
329
|
+
}
|
|
330
|
+
getBlockedMessageLibPtbBuilder(client: IotaClient, options?: ModuleOptions): BlockedMessageLibPtbBuilder {
|
|
331
|
+
return this.getOrCreateModule(Modules.BlockedMessageLibPtbBuilder, options, () => {
|
|
332
|
+
const packageId = options?.packageId ?? this.packages.blockedMessageLibPtbBuilder
|
|
333
|
+
const objects = this.mergeObjectsOptions(options)
|
|
334
|
+
return new BlockedMessageLibPtbBuilder(packageId, client, objects, this)
|
|
335
|
+
})
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
getWorkerRegistry(client: IotaClient, options?: ModuleOptions): WorkerRegistry {
|
|
339
|
+
return this.getOrCreateModule(Modules.WorkerRegistry, options, () => {
|
|
340
|
+
const packageId = options?.packageId ?? this.packages.workerRegistry
|
|
341
|
+
const objects = this.mergeObjectsOptions(options)
|
|
342
|
+
return new WorkerRegistry(packageId, client, objects, this)
|
|
343
|
+
})
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
// === Private Utility Methods ===
|
|
347
|
+
|
|
348
|
+
/**
|
|
349
|
+
* Merge objects configuration with options, avoiding unnecessary object spreading
|
|
350
|
+
*/
|
|
351
|
+
private mergeObjectsOptions(options?: ModuleOptions): ObjectOptions {
|
|
352
|
+
// If no options or options.objects is empty, return original objects
|
|
353
|
+
if (!options?.objects || Object.keys(options.objects).length === 0) {
|
|
354
|
+
return this.objects
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
// Only perform object spreading when there are actual properties to merge
|
|
358
|
+
return { ...this.objects, ...options.objects }
|
|
359
|
+
}
|
|
360
|
+
}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import { bcs } from '@iota/iota-sdk/bcs'
|
|
2
|
+
import { IotaClient } from '@iota/iota-sdk/client'
|
|
3
|
+
import { Transaction, TransactionArgument, TransactionResult } from '@iota/iota-sdk/transactions'
|
|
4
|
+
|
|
5
|
+
import { asObject, executeSimulate } from '../utils'
|
|
6
|
+
|
|
7
|
+
const DEFAULT_MODULE_NAME = 'call'
|
|
8
|
+
|
|
9
|
+
export const CallErrorCode = {
|
|
10
|
+
// Call related errors (matching call.move)
|
|
11
|
+
Call_ECallNotActive: 1,
|
|
12
|
+
Call_ECallNotCompleted: 2,
|
|
13
|
+
Call_ECallNotCreating: 3,
|
|
14
|
+
Call_ECallNotRoot: 4,
|
|
15
|
+
Call_ECallNotWaiting: 5,
|
|
16
|
+
Call_EInvalidChild: 6,
|
|
17
|
+
Call_EInvalidNonce: 7,
|
|
18
|
+
Call_EInvalidParent: 8,
|
|
19
|
+
Call_EParameterNotMutable: 9,
|
|
20
|
+
Call_EUnauthorized: 10,
|
|
21
|
+
|
|
22
|
+
// CallCap related errors (matching call_cap.move)
|
|
23
|
+
CallCap_EBadWitness: 1,
|
|
24
|
+
|
|
25
|
+
// MultiCall related errors (matching dynamic-call/multi-call/multi_call.move)
|
|
26
|
+
MultiCall_ENoMoreCalls: 1,
|
|
27
|
+
MultiCall_EUnauthorized: 2,
|
|
28
|
+
} as const
|
|
29
|
+
|
|
30
|
+
export class Call {
|
|
31
|
+
public packageId: string
|
|
32
|
+
public readonly client: IotaClient
|
|
33
|
+
|
|
34
|
+
constructor(packageId: string, client: IotaClient) {
|
|
35
|
+
this.packageId = packageId
|
|
36
|
+
this.client = client
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// === Set function ===
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Create a new CallCap for a user (direct interaction)
|
|
43
|
+
* Creates a user-based CallCap that uses its own UID as the identifier
|
|
44
|
+
* @param tx - The transaction to add the move call to
|
|
45
|
+
* @returns Transaction result containing the new individual CallCap
|
|
46
|
+
*/
|
|
47
|
+
newIndividualCapMoveCall(tx: Transaction): TransactionResult {
|
|
48
|
+
return tx.moveCall({
|
|
49
|
+
target: this.#target('new_individual_cap', 'call_cap'),
|
|
50
|
+
arguments: [],
|
|
51
|
+
})
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Create a void result for calls with no meaningful return value
|
|
56
|
+
* @param tx - The transaction to add the move call to
|
|
57
|
+
* @returns Transaction result containing a void result
|
|
58
|
+
*/
|
|
59
|
+
voidMoveCall(tx: Transaction): TransactionResult {
|
|
60
|
+
return tx.moveCall({
|
|
61
|
+
target: this.#target('void'),
|
|
62
|
+
arguments: [],
|
|
63
|
+
})
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// === View function ===
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Get the result from a call
|
|
70
|
+
* @param tx - The transaction to add the move call to
|
|
71
|
+
* @param paramType - The parameter type for the call
|
|
72
|
+
* @param resultType - The result type for the call
|
|
73
|
+
* @param call - The call transaction result or transaction argument
|
|
74
|
+
* @returns Transaction result containing the call result
|
|
75
|
+
*/
|
|
76
|
+
resultMoveCall(
|
|
77
|
+
tx: Transaction,
|
|
78
|
+
paramType: string,
|
|
79
|
+
resultType: string,
|
|
80
|
+
call: TransactionArgument
|
|
81
|
+
): TransactionResult {
|
|
82
|
+
return tx.moveCall({
|
|
83
|
+
target: this.#target('result'),
|
|
84
|
+
typeArguments: [paramType, resultType],
|
|
85
|
+
arguments: [call],
|
|
86
|
+
})
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Get the recipient from a call
|
|
91
|
+
* @param tx - The transaction to add the move call to
|
|
92
|
+
* @param paramType - The parameter type for the call
|
|
93
|
+
* @param resultType - The result type for the call
|
|
94
|
+
* @param call - The call transaction result or transaction argument
|
|
95
|
+
* @returns Transaction result containing the call recipient
|
|
96
|
+
*/
|
|
97
|
+
recipientMoveCall(
|
|
98
|
+
tx: Transaction,
|
|
99
|
+
paramType: string,
|
|
100
|
+
resultType: string,
|
|
101
|
+
call: TransactionArgument
|
|
102
|
+
): TransactionResult {
|
|
103
|
+
return tx.moveCall({
|
|
104
|
+
target: this.#target('recipient'),
|
|
105
|
+
typeArguments: [paramType, resultType],
|
|
106
|
+
arguments: [call],
|
|
107
|
+
})
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Get the unique identifier for a CallCap
|
|
112
|
+
* Returns the appropriate identifier based on the source type
|
|
113
|
+
* @param tx - The transaction to add the move call to
|
|
114
|
+
* @param callCap - The CallCap object ID or transaction argument
|
|
115
|
+
* @returns Transaction result containing the CallCap identifier
|
|
116
|
+
*/
|
|
117
|
+
callCapIdMoveCall(tx: Transaction, callCap: string | TransactionArgument): TransactionResult {
|
|
118
|
+
return tx.moveCall({
|
|
119
|
+
target: this.#target('id', 'call_cap'),
|
|
120
|
+
arguments: [asObject(tx, callCap)],
|
|
121
|
+
})
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Get the unique identifier for a CallCap
|
|
126
|
+
* Returns the appropriate identifier based on the source type
|
|
127
|
+
* @param callCap - The CallCap object ID
|
|
128
|
+
* @returns Promise resolving to the CallCap identifier as a string
|
|
129
|
+
*/
|
|
130
|
+
async getCallCapId(callCap: string): Promise<string> {
|
|
131
|
+
return executeSimulate(
|
|
132
|
+
this.client,
|
|
133
|
+
(tx) => {
|
|
134
|
+
this.callCapIdMoveCall(tx, callCap)
|
|
135
|
+
},
|
|
136
|
+
(result) => bcs.Address.parse(result[0].value)
|
|
137
|
+
)
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Check if this is an Individual CallCap
|
|
142
|
+
* @param tx - The transaction to add the move call to
|
|
143
|
+
* @param callCap - The CallCap object ID or transaction argument
|
|
144
|
+
* @returns Transaction result containing a boolean indicating if it's an Individual CallCap
|
|
145
|
+
*/
|
|
146
|
+
isIndividualCapMoveCall(tx: Transaction, callCap: string | TransactionArgument): TransactionResult {
|
|
147
|
+
return tx.moveCall({
|
|
148
|
+
target: this.#target('is_individual', 'call_cap'),
|
|
149
|
+
arguments: [asObject(tx, callCap)],
|
|
150
|
+
})
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Check if this is an Individual CallCap
|
|
155
|
+
* @param callCap - The CallCap object ID
|
|
156
|
+
* @returns Promise resolving to true if it's an Individual CallCap
|
|
157
|
+
*/
|
|
158
|
+
async isIndividualCap(callCap: string): Promise<boolean> {
|
|
159
|
+
return executeSimulate(
|
|
160
|
+
this.client,
|
|
161
|
+
(tx) => {
|
|
162
|
+
this.isIndividualCapMoveCall(tx, callCap)
|
|
163
|
+
},
|
|
164
|
+
(result) => bcs.Bool.parse(result[0].value)
|
|
165
|
+
)
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Check if this is a Package CallCap
|
|
170
|
+
* @param tx - The transaction to add the move call to
|
|
171
|
+
* @param callCap - The CallCap object ID or transaction argument
|
|
172
|
+
* @returns Transaction result containing a boolean indicating if it's a Package CallCap
|
|
173
|
+
*/
|
|
174
|
+
isPackageCapMoveCall(tx: Transaction, callCap: string | TransactionArgument): TransactionResult {
|
|
175
|
+
return tx.moveCall({
|
|
176
|
+
target: this.#target('is_package', 'call_cap'),
|
|
177
|
+
arguments: [asObject(tx, callCap)],
|
|
178
|
+
})
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Check if this is a Package CallCap
|
|
183
|
+
* @param callCap - The CallCap object ID
|
|
184
|
+
* @returns Promise resolving to true if it's a Package CallCap
|
|
185
|
+
*/
|
|
186
|
+
async isPackageCap(callCap: string): Promise<boolean> {
|
|
187
|
+
return executeSimulate(
|
|
188
|
+
this.client,
|
|
189
|
+
(tx) => {
|
|
190
|
+
this.isPackageCapMoveCall(tx, callCap)
|
|
191
|
+
},
|
|
192
|
+
(result) => bcs.Bool.parse(result[0].value)
|
|
193
|
+
)
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Get the package address for a Package CallCap
|
|
198
|
+
* Returns None if this is a User CallCap
|
|
199
|
+
* @param tx - The transaction to add the move call to
|
|
200
|
+
* @param callCap - The CallCap object ID or transaction argument
|
|
201
|
+
* @returns Transaction result containing the package address option
|
|
202
|
+
*/
|
|
203
|
+
packageAddressMoveCall(tx: Transaction, callCap: string | TransactionArgument): TransactionResult {
|
|
204
|
+
return tx.moveCall({
|
|
205
|
+
target: this.#target('package_address', 'call_cap'),
|
|
206
|
+
arguments: [asObject(tx, callCap)],
|
|
207
|
+
})
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Get the package address for a Package CallCap
|
|
212
|
+
* Returns null if this is an Individual CallCap
|
|
213
|
+
* @param callCap - The CallCap object ID
|
|
214
|
+
* @returns Promise resolving to the package address or null if Individual CallCap
|
|
215
|
+
*/
|
|
216
|
+
async getPackageAddress(callCap: string): Promise<string | null> {
|
|
217
|
+
return executeSimulate(
|
|
218
|
+
this.client,
|
|
219
|
+
(tx) => {
|
|
220
|
+
this.packageAddressMoveCall(tx, callCap)
|
|
221
|
+
},
|
|
222
|
+
(result) => {
|
|
223
|
+
try {
|
|
224
|
+
// Try to parse as Option<address>
|
|
225
|
+
const option = bcs.option(bcs.Address).parse(result[0].value)
|
|
226
|
+
return option ?? null
|
|
227
|
+
} catch {
|
|
228
|
+
// If parsing fails, it might be None
|
|
229
|
+
return null
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
)
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Generate the full target path for move calls
|
|
237
|
+
* @param name - The function name to call
|
|
238
|
+
* @param module_name - The module name (defaults to DEFAULT_MODULE_NAME)
|
|
239
|
+
* @returns The full module path for the move call
|
|
240
|
+
* @private
|
|
241
|
+
*/
|
|
242
|
+
#target(name: string, module_name = DEFAULT_MODULE_NAME): string {
|
|
243
|
+
return `${this.packageId}::${module_name}::${name}`
|
|
244
|
+
}
|
|
245
|
+
}
|