@0xobelisk/client 0.0.5 → 0.0.6

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/dist/index.d.ts CHANGED
@@ -4,5 +4,5 @@ export { SuiAccountManager } from './libs/suiAccountManager';
4
4
  export { SuiTxBlock } from './libs/suiTxBuilder';
5
5
  export { SuiRpcProvider } from './libs/suiRpcProvider';
6
6
  export { SuiContractFactory } from './libs/suiContractFactory';
7
- export { initialize } from './metadata';
7
+ export { getMetadata } from './metadata';
8
8
  export type * from './types';
package/dist/index.js CHANGED
@@ -1,9 +1,7 @@
1
1
  "use strict";
2
- var __create = Object.create;
3
2
  var __defProp = Object.defineProperty;
4
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
6
  var __export = (target, all) => {
9
7
  for (var name in all)
@@ -17,14 +15,6 @@ var __copyProps = (to, from, except, desc) => {
17
15
  }
18
16
  return to;
19
17
  };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
19
  var __accessCheck = (obj2, member, msg) => {
30
20
  if (!member.has(obj2))
@@ -51,7 +41,7 @@ __export(src_exports, {
51
41
  SuiRpcProvider: () => SuiRpcProvider,
52
42
  SuiTxBlock: () => SuiTxBlock,
53
43
  TransactionBlock: () => import_sui11.TransactionBlock,
54
- initialize: () => initialize
44
+ getMetadata: () => getMetadata
55
45
  });
56
46
  module.exports = __toCommonJS(src_exports);
57
47
  var import_sui11 = require("@mysten/sui.js");
@@ -759,8 +749,8 @@ function withMeta(meta, creator) {
759
749
  return creator;
760
750
  }
761
751
  function createQuery(meta, fn) {
762
- return withMeta(meta, async (tx, params) => {
763
- const result = await fn(tx, params);
752
+ return withMeta(meta, async (tx, params, isRaw) => {
753
+ const result = await fn(tx, params, isRaw);
764
754
  return result;
765
755
  });
766
756
  }
@@ -806,11 +796,14 @@ var Obelisk = class {
806
796
  }
807
797
  return await this.signAndSendTxn(tx);
808
798
  });
809
- __privateAdd(this, _read, async (meta, tx, params) => {
799
+ __privateAdd(this, _read, async (meta, tx, params, isRaw) => {
810
800
  tx.moveCall({
811
801
  target: `${this.contractFactory.packageId}::${meta.moudleName}::${meta.funcName}`,
812
802
  arguments: params
813
803
  });
804
+ if (isRaw === true) {
805
+ return tx;
806
+ }
814
807
  return await this.inspectTxn(tx);
815
808
  });
816
809
  this.accountManager = new SuiAccountManager({ mnemonics, secretKey });
@@ -834,7 +827,7 @@ var Obelisk = class {
834
827
  __privateGet(this, _query)[moduleName] = {};
835
828
  }
836
829
  if (isUndefined(__privateGet(this, _query)[moduleName][funcName])) {
837
- __privateGet(this, _query)[moduleName][funcName] = createQuery(meta, (tx, p) => __privateGet(this, _read).call(this, meta, tx, p));
830
+ __privateGet(this, _query)[moduleName][funcName] = createQuery(meta, (tx, p, isRaw) => __privateGet(this, _read).call(this, meta, tx, p, isRaw));
838
831
  }
839
832
  if (isUndefined(__privateGet(this, _tx)[moduleName])) {
840
833
  __privateGet(this, _tx)[moduleName] = {};
@@ -1114,44 +1107,15 @@ _exec = new WeakMap();
1114
1107
  _read = new WeakMap();
1115
1108
 
1116
1109
  // src/metadata/index.ts
1117
- var fs = __toESM(require("fs"));
1118
- async function initialize(networkType, packageId) {
1119
- const folderPath = "./metadata";
1120
- fs.access(folderPath, (error) => {
1121
- if (error) {
1122
- fs.mkdir(folderPath, (mkdirError) => {
1123
- if (mkdirError) {
1124
- console.error("Create folder error:", mkdirError);
1125
- } else {
1126
- console.log("This folder already exist.");
1127
- }
1128
- });
1129
- } else {
1130
- console.log("This folder already exist.");
1131
- }
1132
- });
1133
- const jsonFileName = `${folderPath}/${packageId}.json`;
1110
+ async function getMetadata(networkType, packageId) {
1134
1111
  const rpcProvider = new SuiRpcProvider({
1135
1112
  networkType
1136
1113
  });
1137
- try {
1138
- const data = await fs.promises.readFile(jsonFileName, "utf-8");
1139
- const jsonData = JSON.parse(data);
1114
+ if (packageId !== void 0) {
1115
+ const jsonData = await rpcProvider.getNormalizedMoveModulesByPackage(packageId);
1140
1116
  return jsonData;
1141
- } catch (error) {
1142
- if (packageId !== void 0) {
1143
- const jsonData = await rpcProvider.getNormalizedMoveModulesByPackage(packageId);
1144
- fs.writeFile(jsonFileName, JSON.stringify(jsonData, null, 2), (err) => {
1145
- if (err) {
1146
- console.error("write data error:", err);
1147
- } else {
1148
- console.log("Success saved.", jsonFileName);
1149
- }
1150
- });
1151
- return jsonData;
1152
- } else {
1153
- console.error("please set your package id.");
1154
- }
1117
+ } else {
1118
+ console.error("please set your package id.");
1155
1119
  }
1156
1120
  }
1157
1121
  // Annotate the CommonJS export names for ESM import in node:
@@ -1164,6 +1128,6 @@ async function initialize(networkType, packageId) {
1164
1128
  SuiRpcProvider,
1165
1129
  SuiTxBlock,
1166
1130
  TransactionBlock,
1167
- initialize
1131
+ getMetadata
1168
1132
  });
1169
1133
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/obelisk.ts","../src/libs/suiAccountManager/index.ts","../src/libs/suiAccountManager/keypair.ts","../src/libs/suiAccountManager/util.ts","../src/libs/suiAccountManager/crypto.ts","../src/libs/suiRpcProvider/index.ts","../src/libs/suiRpcProvider/faucet.ts","../src/libs/suiRpcProvider/defaultChainConfigs.ts","../src/libs/suiTxBuilder/index.ts","../src/libs/suiTxBuilder/util.ts","../src/libs/suiContractFactory/index.ts","../src/framework/util.ts","../src/metadata/index.ts"],"sourcesContent":["export {\n TransactionBlock,\n SUI_CLOCK_OBJECT_ID,\n SUI_SYSTEM_STATE_OBJECT_ID,\n} from '@mysten/sui.js';\nexport { Obelisk } from './obelisk';\nexport { SuiAccountManager } from './libs/suiAccountManager';\nexport { SuiTxBlock } from './libs/suiTxBuilder';\nexport { SuiRpcProvider } from './libs/suiRpcProvider';\nexport { SuiContractFactory } from './libs/suiContractFactory';\nexport { initialize } from './metadata';\nexport type * from './types';\n","import {\n RawSigner,\n TransactionBlock,\n DevInspectResults,\n SuiTransactionBlockResponse,\n SuiMoveNormalizedModules, DynamicFieldPage, DynamicFieldName,\n} from '@mysten/sui.js';\nimport { SuiAccountManager } from './libs/suiAccountManager';\nimport { SuiRpcProvider } from './libs/suiRpcProvider';\nimport { SuiTxBlock } from './libs/suiTxBuilder';\nimport { SuiContractFactory } from './libs/suiContractFactory';\nimport { SuiMoveMoudleValueType, SuiMoveMoudleFuncType } from './libs/suiContractFactory/types';\nimport {\n ObeliskParams,\n DerivePathParams,\n SuiTxArg, SuiVecTxArg,\n ComponentContentType,\n SuiTxArgument, ContractQuery,\n ContractTx, MapMoudleFuncQuery,\n MapMoudleFuncTx\n} from './types';\nimport {ObjectArg, obj, pure} from \"./framework/util\";\n\n\nexport function isUndefined (value?: unknown): value is undefined {\n return value === undefined;\n}\n\nexport function withMeta<T extends { meta: SuiMoveMoudleFuncType }>(meta: SuiMoveMoudleFuncType,creator: Omit<T, 'meta'>): T {\n (creator as T).meta = meta\n\n return creator as T;\n}\n\nfunction createQuery(\n meta: SuiMoveMoudleFuncType,\n fn: (tx: TransactionBlock, params: SuiTxArgument[]) => Promise<DevInspectResults>\n): ContractQuery {\n return withMeta(meta, async (tx: TransactionBlock, params: SuiTxArgument[]): Promise<DevInspectResults> => {\n const result = await fn(tx, params);\n return result;\n });\n}\n\nfunction createTx(\n meta: SuiMoveMoudleFuncType,\n fn: (tx: TransactionBlock, params: SuiTxArgument[], isRaw?: boolean) => Promise<SuiTransactionBlockResponse | TransactionBlock>\n): ContractTx {\n return withMeta(meta, async (tx: TransactionBlock, params: SuiTxArgument[], isRaw?: boolean): Promise<SuiTransactionBlockResponse | TransactionBlock> => {\n const result = await fn(tx, params, isRaw);\n return result;\n });\n}\n\n/**\n * @class Obelisk\n * @description This class is used to aggregate the tools that used to interact with SUI network.\n */\nexport class Obelisk {\n public accountManager: SuiAccountManager;\n public rpcProvider: SuiRpcProvider;\n public contractFactory: SuiContractFactory;\n public packageId: string | undefined;\n // public needLoad: boolean | undefined;\n public metadata: SuiMoveNormalizedModules;\n public epsId: string;\n public componentsId: string;\n\n readonly #query: MapMoudleFuncQuery = {};\n readonly #tx: MapMoudleFuncTx = {};\n /**\n * Support the following ways to init the SuiToolkit:\n * 1. mnemonics\n * 2. secretKey (base64 or hex)\n * If none of them is provided, will generate a random mnemonics with 24 words.\n *\n * @param mnemonics, 12 or 24 mnemonics words, separated by space\n * @param secretKey, base64 or hex string, when mnemonics is provided, secretKey will be ignored\n * @param networkType, 'testnet' | 'mainnet' | 'devnet' | 'localnet', default is 'devnet'\n * @param fullnodeUrl, the fullnode url, default is the preconfig fullnode url for the given network type\n * @param faucetUrl, the faucet url, default is the preconfig faucet url for the given network type\n * @param packageId\n */\n constructor({\n mnemonics,\n secretKey,\n networkType,\n fullnodeUrl,\n faucetUrl,\n packageId,\n metadata\n }: ObeliskParams = {}) {\n // Init the account manager\n this.accountManager = new SuiAccountManager({ mnemonics, secretKey });\n // Init the rpc provider\n this.rpcProvider = new SuiRpcProvider({\n fullnodeUrl,\n faucetUrl,\n networkType,\n });\n\n this.epsId = \"0xf2196f638c3174e18c0e31aa630a02fd516c2c5deec1ded72c0fea864c9f091a\"\n this.componentsId = \"0x3bc407eb543149e42846ade59ac2a3c901584af4339dc1ecd0affd090529545f\"\n this.packageId = packageId;\n this.metadata = metadata as SuiMoveNormalizedModules;\n Object.values(metadata as SuiMoveNormalizedModules).forEach(value => {\n let data = value as SuiMoveMoudleValueType;\n let moduleName = data.name;\n Object.entries(data.exposedFunctions).forEach(([funcName, value]) => {\n let meta = value as SuiMoveMoudleFuncType;\n meta.moudleName = moduleName;\n meta.funcName = funcName;\n\n if (isUndefined(this.#query[moduleName])) {\n this.#query[moduleName] = {};\n }\n if (isUndefined(this.#query[moduleName][funcName])) {\n this.#query[moduleName][funcName] = createQuery(meta, (tx, p) => this.#read(meta, tx, p))\n }\n\n if (isUndefined(this.#tx[moduleName])) {\n this.#tx[moduleName] = {};\n }\n if (isUndefined(this.#tx[moduleName][funcName])) {\n this.#tx[moduleName][funcName] = createTx(meta, (tx, p, isRaw) => this.#exec(meta, tx, p, isRaw))\n }\n });\n })\n\n this.contractFactory = new SuiContractFactory({\n packageId,\n metadata\n })\n }\n\n // async initialize() {\n // const metadata = await this.loadData();\n // this.metadata = metadata as SuiMoveNormalizedModules;\n // this.contractFactory = new SuiContractFactory({\n // packageId: this.packageId,\n // metadata: this.metadata\n // })\n // return metadata\n // }\n\n public get query (): MapMoudleFuncQuery {\n return this.#query;\n }\n\n public get tx (): MapMoudleFuncTx {\n return this.#tx;\n }\n\n #exec = async (meta: SuiMoveMoudleFuncType, tx: TransactionBlock, params: SuiTxArgument[], isRaw?: boolean) => {\n tx.moveCall({\n target: `${this.contractFactory.packageId}::${meta.moudleName}::${meta.funcName}`,\n arguments: params,\n })\n\n if (isRaw === true) {\n return tx;\n }\n return await this.signAndSendTxn(tx);\n };\n\n\n #read = async (meta: SuiMoveMoudleFuncType, tx: TransactionBlock, params: SuiTxArgument[]) => {\n tx.moveCall({\n target: `${this.contractFactory.packageId}::${meta.moudleName}::${meta.funcName}`,\n arguments: params,\n })\n return await this.inspectTxn(tx);\n };\n /**\n * if derivePathParams is not provided or mnemonics is empty, it will return the currentSigner.\n * else:\n * it will generate signer from the mnemonic with the given derivePathParams.\n * @param derivePathParams, such as { accountIndex: 2, isExternal: false, addressIndex: 10 }, comply with the BIP44 standard\n */\n getSigner(derivePathParams?: DerivePathParams) {\n const keyPair = this.accountManager.getKeyPair(derivePathParams);\n return new RawSigner(keyPair, this.rpcProvider.provider);\n }\n\n /**\n * @description Switch the current account with the given derivePathParams\n * @param derivePathParams, such as { accountIndex: 2, isExternal: false, addressIndex: 10 }, comply with the BIP44 standard\n */\n switchAccount(derivePathParams: DerivePathParams) {\n this.accountManager.switchAccount(derivePathParams);\n }\n\n /**\n * @description Get the address of the account for the given derivePathParams\n * @param derivePathParams, such as { accountIndex: 2, isExternal: false, addressIndex: 10 }, comply with the BIP44 standard\n */\n getAddress(derivePathParams?: DerivePathParams) {\n return this.accountManager.getAddress(derivePathParams);\n }\n currentAddress() {\n return this.accountManager.currentAddress;\n }\n\n provider() {\n return this.rpcProvider.provider;\n }\n\n getPackageId() {\n return this.contractFactory.packageId;\n }\n\n getMetadata() {\n return this.contractFactory.metadata\n }\n /**\n * Request some SUI from faucet\n * @Returns {Promise<boolean>}, true if the request is successful, false otherwise.\n */\n async requestFaucet(derivePathParams?: DerivePathParams) {\n const addr = this.accountManager.getAddress(derivePathParams);\n return this.rpcProvider.requestFaucet(addr);\n }\n\n async getBalance(coinType?: string, derivePathParams?: DerivePathParams) {\n const owner = this.accountManager.getAddress(derivePathParams);\n return this.rpcProvider.getBalance(owner, coinType);\n }\n\n async getObject(objectId: string) {\n return this.rpcProvider.getObject(objectId);\n }\n\n async getObjects(objectIds: string[]) {\n return this.rpcProvider.getObjects(objectIds);\n }\n\n async signTxn(\n tx: Uint8Array | TransactionBlock | SuiTxBlock,\n derivePathParams?: DerivePathParams\n ) {\n tx = tx instanceof SuiTxBlock ? tx.txBlock : tx;\n const signer = this.getSigner(derivePathParams);\n return signer.signTransactionBlock({ transactionBlock: tx });\n }\n\n async signAndSendTxn(\n tx: Uint8Array | TransactionBlock | SuiTxBlock,\n derivePathParams?: DerivePathParams\n ): Promise<SuiTransactionBlockResponse> {\n tx = tx instanceof SuiTxBlock ? tx.txBlock : tx;\n const signer = this.getSigner(derivePathParams);\n return signer.signAndExecuteTransactionBlock({\n transactionBlock: tx,\n options: {\n showEffects: true,\n showEvents: true,\n showObjectChanges: true,\n },\n });\n }\n\n /**\n * Transfer the given amount of SUI to the recipient\n * @param recipient\n * @param amount\n * @param derivePathParams\n */\n async transferSui(\n recipient: string,\n amount: number,\n derivePathParams?: DerivePathParams\n ) {\n const tx = new SuiTxBlock();\n tx.transferSui(recipient, amount);\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n /**\n * Transfer to mutliple recipients\n * @param recipients the recipients addresses\n * @param amounts the amounts of SUI to transfer to each recipient, the length of amounts should be the same as the length of recipients\n * @param derivePathParams\n */\n async transferSuiToMany(\n recipients: string[],\n amounts: number[],\n derivePathParams?: DerivePathParams\n ) {\n const tx = new SuiTxBlock();\n tx.transferSuiToMany(recipients, amounts);\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n /**\n * Transfer the given amounts of coin to multiple recipients\n * @param recipients the list of recipient address\n * @param amounts the amounts to transfer for each recipient\n * @param coinType any custom coin type but not SUI\n * @param derivePathParams the derive path params for the current signer\n */\n async transferCoinToMany(\n recipients: string[],\n amounts: number[],\n coinType: string,\n derivePathParams?: DerivePathParams\n ) {\n const tx = new SuiTxBlock();\n const owner = this.accountManager.getAddress(derivePathParams);\n const totalAmount = amounts.reduce((a, b) => a + b, 0);\n const coins = await this.rpcProvider.selectCoins(\n owner,\n totalAmount,\n coinType\n );\n tx.transferCoinToMany(\n coins.map((c) => c.objectId),\n owner,\n recipients,\n amounts\n );\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n async transferCoin(\n recipient: string,\n amount: number,\n coinType: string,\n derivePathParams?: DerivePathParams\n ) {\n return this.transferCoinToMany(\n [recipient],\n [amount],\n coinType,\n derivePathParams\n );\n }\n\n async transferObjects(\n objects: string[],\n recipient: string,\n derivePathParams?: DerivePathParams\n ) {\n const tx = new SuiTxBlock();\n tx.transferObjects(objects, recipient);\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n async moveCall(callParams: {\n target: string;\n arguments?: (SuiTxArg | SuiVecTxArg)[];\n typeArguments?: string[];\n derivePathParams?: DerivePathParams;\n }) {\n const {\n target,\n arguments: args = [],\n typeArguments = [],\n derivePathParams,\n } = callParams;\n const tx = new SuiTxBlock();\n tx.moveCall(target, args, typeArguments);\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n /**\n * Select coins with the given amount and coin type, the total amount is greater than or equal to the given amount\n * @param amount\n * @param coinType\n * @param owner\n */\n async selectCoinsWithAmount(\n amount: number,\n coinType: string,\n owner?: string\n ) {\n owner = owner || this.accountManager.currentAddress;\n const coins = await this.rpcProvider.selectCoins(owner, amount, coinType);\n return coins.map((c) => c.objectId);\n }\n\n /**\n * stake the given amount of SUI to the validator\n * @param amount the amount of SUI to stake\n * @param validatorAddr the validator address\n * @param derivePathParams the derive path params for the current signer\n */\n async stakeSui(\n amount: number,\n validatorAddr: string,\n derivePathParams?: DerivePathParams\n ) {\n const tx = new SuiTxBlock();\n tx.stakeSui(amount, validatorAddr);\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n /**\n * Execute the transaction with on-chain data but without really submitting. Useful for querying the effects of a transaction.\n * Since the transaction is not submitted, its gas cost is not charged.\n * @param tx the transaction to execute\n * @param derivePathParams the derive path params\n * @returns the effects and events of the transaction, such as object changes, gas cost, event emitted.\n */\n async inspectTxn(\n tx: Uint8Array | TransactionBlock | SuiTxBlock,\n derivePathParams?: DerivePathParams\n ): Promise<DevInspectResults> {\n\n tx = tx instanceof SuiTxBlock ? tx.txBlock : tx;\n return this.rpcProvider.provider.devInspectTransactionBlock({\n transactionBlock: tx,\n sender: this.getAddress(derivePathParams),\n });\n }\n\n async getBirthTime(objectId: string, derivePathParams?: DerivePathParams) {\n const tx = new TransactionBlock();\n\n tx.moveCall({\n // target: `0x12b216923e5454e1f076ccb5fc638b59f8aba2175c34df9899de71124d66badd::status_system::get_pet_state`,\n target: `0x6afbf113a5872b781a2a0068b95c0d9d0ee89428518fdd65f862c841eab45b82::pet_system::get_pet_basic_info`,\n arguments: [\n // tx.pure(\"0x6fa43c68221960f942572905f3c198a5bccaa0700506b3b6bd83dd9b007e6324\"),\n // tx.pure(\"0xbf64721f0961a0426ccde6b8d9343e2cb2c26a105a5c33e57074580fd98b2cb1\"),\n // tx.pure(\"0x6\"),\n\n obj(tx, \"0x26804211486be597a89c46c16b929d7031fb7c701ecf89d4c750e49459b4bea2\"),\n pure(tx, \"0x35ba3bfb8590dbd060f41cd58c7b140d67efd2126648409cd231c74cff2828b8\", `0x2::object::ID`),\n obj(tx, \"0x6\")\n ],\n })\n return await this.inspectTxn(tx, derivePathParams);\n }\n\n async getWorld(worldObjectId: string) {\n return this.rpcProvider.getObject(worldObjectId)\n }\n\n async getAllEntities(worldId: string, cursor?: string, limit?: number) {\n const parentId = (await this.rpcProvider.getObject(worldId)).objectFields.entities.fields.id.id;\n return await this.rpcProvider.getDynamicFields(parentId, cursor, limit) as DynamicFieldPage;\n }\n\n async getEntity(worldId: string, entityId: string) {\n const parentId = (await this.rpcProvider.getObject(worldId)).objectFields.entities.fields.id.id;\n\n const name = {\n type: \"0x2::object::ID\",\n value: entityId\n } as DynamicFieldName\n return await this.rpcProvider.getDynamicFieldObject(parentId, name);\n }\n\n async getEntityComponents(worldId: string, entityId: string, cursor?: string, limit?: number) {\n const parentContent = (await this.getEntity(worldId, entityId)).data!.content as ComponentContentType;\n const parentId = parentContent.fields.value.fields.components.fields.id.id;\n return await this.rpcProvider.getDynamicFields(parentId, cursor, limit) as DynamicFieldPage;\n }\n\n async getEntityComponent(entityId: string, componentId: string) {\n const parentId = (await this.rpcProvider.getObject(entityId)).objectFields.id.id;\n\n const name = {\n type: \"0x2::object::ID\",\n value: componentId\n } as DynamicFieldName\n return await this.rpcProvider.getDynamicFieldObject(parentId, name);\n }\n\n\n // async loadData() {\n // const jsonFileName = `metadata/${this.packageId}.json`;\n\n // try {\n // const data = await fs.promises.readFile(jsonFileName, 'utf-8');\n // const jsonData = JSON.parse(data);\n\n // return jsonData as SuiMoveNormalizedModules;\n // } catch (error) {\n // if (this.packageId !== undefined) {\n // const jsonData = await this.rpcProvider.getNormalizedMoveModulesByPackage(this.packageId);\n\n // fs.writeFile(jsonFileName, JSON.stringify(jsonData, null, 2), (err) => {\n // if (err) {\n // console.error('写入文件时出错:', err);\n // } else {\n // console.log('JSON 数据已保存到文件:', jsonFileName);\n // }\n // });\n // return jsonData as SuiMoveNormalizedModules;\n // } else {\n // console.error('please set your package id.');\n // }\n // }\n // }\n}\n","import { Ed25519Keypair } from '@mysten/sui.js';\nimport { getKeyPair } from './keypair';\nimport { hexOrBase64ToUint8Array, normalizePrivateKey } from './util';\nimport { generateMnemonic } from './crypto';\nimport type { AccountMangerParams, DerivePathParams } from './types';\n\nexport class SuiAccountManager {\n private mnemonics: string;\n private secretKey: string;\n public currentKeyPair: Ed25519Keypair;\n public currentAddress: string;\n\n /**\n * Support the following ways to init the SuiToolkit:\n * 1. mnemonics\n * 2. secretKey (base64 or hex)\n * If none of them is provided, will generate a random mnemonics with 24 words.\n *\n * @param mnemonics, 12 or 24 mnemonics words, separated by space\n * @param secretKey, base64 or hex string, when mnemonics is provided, secretKey will be ignored\n */\n constructor({ mnemonics, secretKey }: AccountMangerParams = {}) {\n // If the mnemonics or secretKey is provided, use it\n // Otherwise, generate a random mnemonics with 24 words\n this.mnemonics = mnemonics || '';\n this.secretKey = secretKey || '';\n if (!this.mnemonics && !this.secretKey) {\n this.mnemonics = generateMnemonic(24);\n }\n\n // Init the current account\n this.currentKeyPair = this.secretKey\n ? Ed25519Keypair.fromSecretKey(\n normalizePrivateKey(hexOrBase64ToUint8Array(this.secretKey))\n )\n : getKeyPair(this.mnemonics);\n this.currentAddress = this.currentKeyPair.getPublicKey().toSuiAddress();\n }\n\n /**\n * if derivePathParams is not provided or mnemonics is empty, it will return the currentKeyPair.\n * else:\n * it will generate keyPair from the mnemonic with the given derivePathParams.\n */\n getKeyPair(derivePathParams?: DerivePathParams) {\n if (!derivePathParams || !this.mnemonics) return this.currentKeyPair;\n return getKeyPair(this.mnemonics, derivePathParams);\n }\n\n /**\n * if derivePathParams is not provided or mnemonics is empty, it will return the currentAddress.\n * else:\n * it will generate address from the mnemonic with the given derivePathParams.\n */\n getAddress(derivePathParams?: DerivePathParams) {\n if (!derivePathParams || !this.mnemonics) return this.currentAddress;\n return getKeyPair(this.mnemonics, derivePathParams)\n .getPublicKey()\n .toSuiAddress();\n }\n\n /**\n * Switch the current account with the given derivePathParams.\n * This is only useful when the mnemonics is provided. For secretKey mode, it will always use the same account.\n */\n switchAccount(derivePathParams: DerivePathParams) {\n if (this.mnemonics) {\n this.currentKeyPair = getKeyPair(this.mnemonics, derivePathParams);\n this.currentAddress = this.currentKeyPair.getPublicKey().toSuiAddress();\n }\n }\n}\n","import { Ed25519Keypair } from '@mysten/sui.js';\nimport type { DerivePathParams } from './types';\n\n/**\n * @description Get ed25519 derive path for SUI\n * @param derivePathParams\n */\nexport const getDerivePathForSUI = (\n derivePathParams: DerivePathParams = {}\n) => {\n const {\n accountIndex = 0,\n isExternal = false,\n addressIndex = 0,\n } = derivePathParams;\n return `m/44'/784'/${accountIndex}'/${isExternal ? 1 : 0}'/${addressIndex}'`;\n};\n\n/**\n * the format is m/44'/784'/accountIndex'/${isExternal ? 1 : 0}'/addressIndex'\n *\n * accountIndex is the index of the account, default is 0.\n *\n * isExternal is the type of the address, default is false. Usually, the external address is used to receive coins. The internal address is used to change coins.\n *\n * addressIndex is the index of the address, default is 0. It's used to generate multiple addresses for one account.\n *\n * @description Get keypair from mnemonics and derive path\n * @param mnemonics\n * @param derivePathParams\n */\nexport const getKeyPair = (\n mnemonics: string,\n derivePathParams: DerivePathParams = {}\n) => {\n const derivePath = getDerivePathForSUI(derivePathParams);\n return Ed25519Keypair.deriveKeypair(mnemonics, derivePath);\n};\n","import { fromB64 } from '@mysten/sui.js';\n\n/**\n * @description This regular expression matches any string that contains only hexadecimal digits (0-9, A-F, a-f).\n * @param str\n */\nexport const isHex = (str: string) =>\n /^0x[0-9a-fA-F]+$|^[0-9a-fA-F]+$/.test(str);\n\n/**\n * @description This regular expression matches any string that contains only base64 digits (0-9, A-Z, a-z, +, /, =).\n * Note that the \"=\" signs at the end are optional padding characters that may be present in some base64 encoded strings.\n * @param str\n */\nexport const isBase64 = (str: string) => /^[a-zA-Z0-9+/]+={0,2}$/g.test(str);\n\n/**\n * Convert a hex string to Uint8Array\n * @param hexStr\n */\nexport const fromHEX = (hexStr: string): Uint8Array => {\n if (!hexStr) {\n throw new Error('cannot parse empty string to Uint8Array');\n }\n const intArr = hexStr\n .replace('0x', '')\n .match(/.{1,2}/g)\n ?.map((byte) => parseInt(byte, 16));\n\n if (!intArr || intArr.length === 0) {\n throw new Error(`Unable to parse HEX: ${hexStr}`);\n }\n return Uint8Array.from(intArr);\n};\n\n/**\n * @description Convert a hex or base64 string to Uint8Array\n */\nexport const hexOrBase64ToUint8Array = (str: string): Uint8Array => {\n if (isHex(str)) {\n return fromHEX(str);\n } else if (isBase64(str)) {\n return fromB64(str);\n } else {\n throw new Error('The string is not a valid hex or base64 string.');\n }\n};\n\nconst PRIVATE_KEY_SIZE = 32;\nconst LEGACY_PRIVATE_KEY_SIZE = 64;\n/**\n * normalize a private key\n * A private key is a 32-byte array.\n * But there are two different formats for private keys:\n * 1. A 32-byte array\n * 2. A 64-byte array with the first 32 bytes being the private key and the last 32 bytes being the public key\n * 3. A 33-byte array with the first byte being 0x00 (sui.keystore key is a Base64 string with scheme flag 0x00 at the beginning)\n */\nexport const normalizePrivateKey = (key: Uint8Array): Uint8Array => {\n if (key.length === LEGACY_PRIVATE_KEY_SIZE) {\n // This is a legacy secret key, we need to strip the public key bytes and only read the first 32 bytes\n key = key.slice(0, PRIVATE_KEY_SIZE);\n } else if (key.length === PRIVATE_KEY_SIZE + 1 && key[0] === 0) {\n // sui.keystore key is a Base64 string with scheme flag 0x00 at the beginning\n return key.slice(1);\n } else if (key.length === PRIVATE_KEY_SIZE) {\n return key;\n }\n throw new Error('invalid secret key');\n};\n","import { generateMnemonic as genMnemonic } from '@scure/bip39';\nimport { wordlist } from '@scure/bip39/wordlists/english';\n\nexport const generateMnemonic = (numberOfWords: 12 | 24 = 24) => {\n const strength = numberOfWords === 12 ? 128 : 256;\n return genMnemonic(wordlist, strength);\n};\n","import {\n Connection,\n JsonRpcProvider,\n getObjectType,\n getObjectId,\n getObjectFields,\n getObjectDisplay,\n getObjectVersion,\n DynamicFieldName\n} from '@mysten/sui.js';\nimport { requestFaucet } from './faucet';\nimport { getDefaultNetworkParams } from './defaultChainConfigs';\nimport type { ObjectData, SuiRpcProviderParams } from './types';\n\nexport class SuiRpcProvider {\n public fullnodeUrl: string;\n public faucetUrl?: string;\n public provider: JsonRpcProvider;\n /**\n *\n * @param networkType, 'testnet' | 'mainnet' | 'devnet' | 'localnet', default is 'devnet'\n * @param fullnodeUrl, the fullnode url, default is the preconfig fullnode url for the given network type\n * @param faucetUrl, the faucet url, default is the preconfig faucet url for the given network type\n */\n constructor({\n fullnodeUrl,\n faucetUrl,\n networkType,\n }: SuiRpcProviderParams = {}) {\n // Get the default fullnode url and faucet url for the given network type, default is 'testnet'\n const defaultNetworkParams = getDefaultNetworkParams(\n networkType || 'devnet'\n );\n // Set fullnodeUrl and faucetUrl, if they are not provided, use the default value.\n this.fullnodeUrl = fullnodeUrl || defaultNetworkParams.fullnode;\n this.faucetUrl = faucetUrl || defaultNetworkParams.faucet;\n\n // Init the provider\n const connection = new Connection({\n fullnode: this.fullnodeUrl,\n faucet: this.faucetUrl,\n });\n this.provider = new JsonRpcProvider(connection);\n }\n\n /**\n * Request some SUI from faucet\n * @Returns {Promise<boolean>}, true if the request is successful, false otherwise.\n */\n async requestFaucet(addr: string) {\n return requestFaucet(addr, this.provider);\n }\n\n async getBalance(addr: string, coinType?: string) {\n return this.provider.getBalance({ owner: addr, coinType });\n }\n\n\n async getDynamicFieldObject(parentId: string, name: string | DynamicFieldName) {\n return this.provider.getDynamicFieldObject({ parentId, name })\n }\n\n async getDynamicFields(parentId: string, cursor?: string, limit?: number) {\n return this.provider.getDynamicFields({ parentId, cursor, limit })\n }\n\n async getObject(id: string) {\n const options = { showContent: true, showDisplay: true, showType: true };\n const object = await this.provider.getObject({ id, options });\n const objectId = getObjectId(object);\n const objectType = getObjectType(object);\n const objectVersion = getObjectVersion(object);\n const objectFields = getObjectFields(object);\n const objectDisplay = getObjectDisplay(object);\n return {\n objectId,\n objectType,\n objectVersion,\n objectFields,\n objectDisplay,\n } as ObjectData;\n }\n\n async getObjects(ids: string[]) {\n const options = { showContent: true, showDisplay: true, showType: true };\n const objects = await this.provider.multiGetObjects({ ids, options });\n const parsedObjects = objects.map((object) => {\n const objectId = getObjectId(object);\n const objectType = getObjectType(object);\n const objectVersion = getObjectVersion(object);\n const objectFields = getObjectFields(object);\n const objectDisplay = getObjectDisplay(object);\n return {\n objectId,\n objectType,\n objectVersion,\n objectFields,\n objectDisplay,\n };\n });\n return parsedObjects as ObjectData[];\n }\n\n async getNormalizedMoveModulesByPackage(packageId: string) {\n return this.provider.getNormalizedMoveModulesByPackage({package: packageId});\n }\n\n /**\n * @description Select coins that add up to the given amount.\n * @param addr the address of the owner\n * @param amount the amount that is needed for the coin\n * @param coinType the coin type, default is '0x2::SUI::SUI'\n */\n async selectCoins(\n addr: string,\n amount: number,\n coinType: string = '0x2::SUI::SUI'\n ) {\n const coins = await this.provider.getCoins({ owner: addr, coinType });\n const selectedCoins: {\n objectId: string;\n digest: string;\n version: string;\n }[] = [];\n let totalAmount = 0;\n // Sort the coins by balance in descending order\n coins.data.sort((a, b) => parseInt(b.balance) - parseInt(a.balance));\n for (const coinData of coins.data) {\n selectedCoins.push({\n objectId: coinData.coinObjectId,\n digest: coinData.digest,\n version: coinData.version,\n });\n totalAmount = totalAmount + parseInt(coinData.balance);\n if (totalAmount >= amount) {\n break;\n }\n }\n\n if (!selectedCoins.length) {\n throw new Error('No valid coins found for the transaction.');\n }\n return selectedCoins;\n }\n}\n","import {\n JsonRpcProvider,\n FaucetRateLimitError,\n assert,\n FaucetResponse,\n} from '@mysten/sui.js';\nimport { retry } from 'ts-retry-promise';\n\n/**\n * Request some SUI from faucet\n * @param address\n * @param provider\n * @returns {Promise<boolean>}, return true if the request is successful\n */\nexport const requestFaucet = async (\n address: string,\n provider: JsonRpcProvider\n) => {\n console.log('\\nRequesting SUI from faucet for address: ', address);\n const headers = {\n authority: 'faucet.testnet.sui.io',\n method: 'POST',\n path: '/gas',\n scheme: 'https',\n accept: '*/*',\n 'accept-encoding': 'gzip, deflate, br',\n 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,ja;q=0.7',\n 'content-length': '105',\n 'content-type': 'application/json',\n origin: 'chrome-extension://opcgpfmipidbgpenhmajoajpbobppdil',\n cookie:\n '_ga=GA1.1.2092533979.1664032306; sui_io_cookie={\"level\":[\"necessary\",\"analytics\"],\"revision\":0,\"data\":null,\"rfc_cookie\":false}; _ga_YKP53WJMB0=GS1.1.1680531285.31.0.1680531334.11.0.0; _ga_0GW4F97GFL=GS1.1.1680826187.125.0.1680826187.60.0.0; __cf_bm=6rPjXUwuzUPy4yDlZuXgDj0v7xLPpUd5z0CFGCoN_YI-1680867579-0-AZMhU7/mKUUbUlOa27LmfW6eIFkBkXsPKqYgWjpjWpj2XzDckgUsRu/pxSRGfvXCspn3w7Df+uO1MR/b+XikJU0=; _cfuvid=zjwCXMmu19KBIVo_L9Qbq4TqFXJpophG3.EvFTxqdf4-1680867579342-0-604800000',\n 'sec-ch-ua':\n '\"Google Chrome\";v=\"111\", \"Not(A:Brand\";v=\"8\", \"Chromium\";v=\"111\"',\n 'sec-ch-ua-mobile': '?0',\n 'sec-ch-ua-platform': 'macOS',\n 'sec-fetch-dest': 'empty',\n 'sec-fetch-mode': 'cors',\n 'sec-fetch-site': 'none',\n 'user-agent':\n 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36',\n };\n // We need to add the following headers to the request, otherwise the request will be rejected by the faucet server\n const resp = await retry<FaucetResponse>(\n () => provider.requestSuiFromFaucet(address, headers),\n {\n backoff: 'EXPONENTIAL',\n // overall timeout in 60 seconds\n timeout: 1000 * 60,\n // skip retry if we hit the rate-limit error\n retryIf: (error: any) => !(error instanceof FaucetRateLimitError),\n logger: (msg) => console.warn(`Retry requesting faucet: ${msg}`),\n }\n );\n assert(resp, FaucetResponse, 'Request faucet failed\\n');\n console.log('Request faucet success\\n');\n};\n","import {\n localnetConnection,\n devnetConnection,\n testnetConnection,\n mainnetConnection,\n} from '@mysten/sui.js';\nimport type { Connection } from '@mysten/sui.js';\nimport type { NetworkType } from './types';\n\n/**\n * @description Get the default fullnode url and faucet url for the given network type\n * @param networkType, 'testnet' | 'mainnet' | 'devnet' | 'localnet', default is 'devnet'\n * @returns { fullNode: string, websocket: string, faucet?: string }\n */\nexport const getDefaultNetworkParams = (\n networkType: NetworkType = 'devnet'\n): Connection => {\n switch (networkType) {\n case 'localnet':\n return localnetConnection;\n case 'devnet':\n return devnetConnection;\n case 'testnet':\n return testnetConnection;\n case 'mainnet':\n return mainnetConnection;\n default:\n return devnetConnection;\n }\n};\n","import {\n TransactionBlock,\n SUI_SYSTEM_STATE_OBJECT_ID,\n TransactionExpiration,\n SuiObjectRef,\n SharedObjectRef,\n JsonRpcProvider,\n TransactionType,\n Transactions,\n ObjectCallArg,\n} from '@mysten/sui.js';\nimport { convertArgs } from './util';\nimport type { SuiTxArg, SuiObjectArg, SuiVecTxArg } from './types';\n\nexport class SuiTxBlock {\n public txBlock: TransactionBlock;\n constructor(transaction?: TransactionBlock) {\n this.txBlock = new TransactionBlock(transaction);\n }\n\n //======== override methods of TransactionBlock ============\n\n address(value: string) {\n return this.txBlock.pure(value, 'address');\n }\n pure(value: unknown, type?: string) {\n return this.txBlock.pure(value, type);\n }\n object(value: string | ObjectCallArg) {\n return this.txBlock.object(value);\n }\n objectRef(ref: SuiObjectRef) {\n return this.txBlock.objectRef(ref);\n }\n sharedObjectRef(ref: SharedObjectRef) {\n return this.txBlock.sharedObjectRef(ref);\n }\n setSender(sender: string) {\n return this.txBlock.setSender(sender);\n }\n setSenderIfNotSet(sender: string) {\n return this.txBlock.setSenderIfNotSet(sender);\n }\n setExpiration(expiration?: TransactionExpiration) {\n return this.txBlock.setExpiration(expiration);\n }\n setGasPrice(price: number | bigint) {\n return this.txBlock.setGasPrice(price);\n }\n setGasBudget(budget: number | bigint) {\n return this.txBlock.setGasBudget(budget);\n }\n setGasOwner(owner: string) {\n return this.txBlock.setGasOwner(owner);\n }\n setGasPayment(payments: SuiObjectRef[]) {\n return this.txBlock.setGasPayment(payments);\n }\n\n add(transaction: TransactionType) {\n return this.txBlock.add(transaction);\n }\n serialize() {\n return this.txBlock.serialize();\n }\n build(\n params: {\n provider?: JsonRpcProvider;\n onlyTransactionKind?: boolean;\n } = {}\n ) {\n return this.txBlock.build(params);\n }\n getDigest({ provider }: { provider?: JsonRpcProvider } = {}) {\n return this.txBlock.getDigest({ provider });\n }\n\n get gas() {\n return this.txBlock.gas;\n }\n get blockData() {\n return this.txBlock.blockData;\n }\n\n transferObjects(objects: SuiObjectArg[], recipient: string) {\n const tx = this.txBlock;\n tx.transferObjects(convertArgs(this.txBlock, objects), tx.pure(recipient));\n return this;\n }\n splitCoins(coin: SuiObjectArg, amounts: number[]) {\n const tx = this.txBlock;\n const coinObject = convertArgs(this.txBlock, [coin])[0];\n const res = tx.splitCoins(\n coinObject,\n amounts.map((m) => tx.pure(m))\n );\n return amounts.map((_, i) => res[i]);\n }\n mergeCoins(destination: SuiObjectArg, sources: SuiObjectArg[]) {\n const destinationObject = convertArgs(this.txBlock, [destination])[0];\n const sourceObjects = convertArgs(this.txBlock, sources);\n return this.txBlock.mergeCoins(destinationObject, sourceObjects);\n }\n publish(...args: Parameters<(typeof Transactions)['Publish']>) {\n return this.txBlock.publish(...args);\n }\n upgrade(...args: Parameters<(typeof Transactions)['Upgrade']>) {\n return this.txBlock.upgrade(...args);\n }\n makeMoveVec(...args: Parameters<(typeof Transactions)['MakeMoveVec']>) {\n return this.txBlock.makeMoveVec(...args);\n }\n\n /**\n * @description Move call\n * @param target `${string}::${string}::${string}`, e.g. `0x3::sui_system::request_add_stake`\n * @param args the arguments of the move call, such as `['0x1', '0x2']`\n * @param typeArgs the type arguments of the move call, such as `['0x2::sui::SUI']`\n */\n moveCall(\n target: string,\n args: (SuiTxArg | SuiVecTxArg)[] = [],\n typeArgs: string[] = []\n ) {\n // a regex for pattern `${string}::${string}::${string}`\n const regex =\n /(?<package>[a-zA-Z0-9]+)::(?<module>[a-zA-Z0-9_]+)::(?<function>[a-zA-Z0-9_]+)/;\n const match = target.match(regex);\n if (match === null)\n throw new Error(\n 'Invalid target format. Expected `${string}::${string}::${string}`'\n );\n const convertedArgs = convertArgs(this.txBlock, args);\n const tx = this.txBlock;\n return tx.moveCall({\n target: target as `${string}::${string}::${string}`,\n arguments: convertedArgs,\n typeArguments: typeArgs,\n });\n }\n\n //======== enhance methods ============\n transferSuiToMany(recipients: string[], amounts: number[]) {\n // require recipients.length === amounts.length\n if (recipients.length !== amounts.length) {\n throw new Error(\n 'transferSuiToMany: recipients.length !== amounts.length'\n );\n }\n\n const tx = this.txBlock;\n const coins = tx.splitCoins(\n tx.gas,\n amounts.map((amount) => tx.pure(amount))\n );\n recipients.forEach((recipient, index) => {\n tx.transferObjects([coins[index]], tx.pure(recipient));\n });\n return this;\n }\n\n transferSui(recipient: string, amount: number) {\n return this.transferSuiToMany([recipient], [amount]);\n }\n\n takeAmountFromCoins(coins: SuiObjectArg[], amount: number) {\n const tx = this.txBlock;\n const coinObjects = convertArgs(this.txBlock, coins);\n const mergedCoin = coinObjects[0];\n if (coins.length > 1) {\n tx.mergeCoins(mergedCoin, coinObjects.slice(1));\n }\n const [sendCoin] = tx.splitCoins(mergedCoin, [tx.pure(amount)]);\n return [sendCoin, mergedCoin];\n }\n\n splitSUIFromGas(amounts: number[]) {\n const tx = this.txBlock;\n return tx.splitCoins(\n tx.gas,\n amounts.map((m) => tx.pure(m))\n );\n }\n\n splitMultiCoins(coins: SuiObjectArg[], amounts: number[]) {\n const tx = this.txBlock;\n const coinObjects = convertArgs(this.txBlock, coins);\n const mergedCoin = coinObjects[0];\n if (coins.length > 1) {\n tx.mergeCoins(mergedCoin, coinObjects.slice(1));\n }\n const splitedCoins = tx.splitCoins(\n mergedCoin,\n amounts.map((m) => tx.pure(m))\n );\n return { splitedCoins, mergedCoin };\n }\n\n transferCoinToMany(\n inputCoins: SuiObjectArg[],\n sender: string,\n recipients: string[],\n amounts: number[]\n ) {\n // require recipients.length === amounts.length\n if (recipients.length !== amounts.length) {\n throw new Error(\n 'transferSuiToMany: recipients.length !== amounts.length'\n );\n }\n const tx = this.txBlock;\n const { splitedCoins, mergedCoin } = this.splitMultiCoins(\n inputCoins,\n amounts\n );\n recipients.forEach((recipient, index) => {\n tx.transferObjects([splitedCoins[index]], tx.pure(recipient));\n });\n tx.transferObjects([mergedCoin], tx.pure(sender));\n return this;\n }\n\n transferCoin(\n inputCoins: SuiObjectArg[],\n sender: string,\n recipient: string,\n amount: number\n ) {\n return this.transferCoinToMany(inputCoins, sender, [recipient], [amount]);\n }\n\n stakeSui(amount: number, validatorAddr: string) {\n const tx = this.txBlock;\n const [stakeCoin] = tx.splitCoins(tx.gas, [tx.pure(amount)]);\n tx.moveCall({\n target: '0x3::sui_system::request_add_stake',\n arguments: [\n tx.object(SUI_SYSTEM_STATE_OBJECT_ID),\n stakeCoin,\n tx.pure(validatorAddr),\n ],\n });\n return tx;\n }\n}\n","import {\n normalizeSuiObjectId,\n TransactionArgument,\n TransactionBlock,\n} from '@mysten/sui.js';\nimport { SuiTxArg, SuiInputTypes } from './types';\n\nexport const getDefaultSuiInputType = (value: any): SuiInputTypes => {\n if (typeof value === 'string' && value.startsWith('0x')) {\n return 'object';\n } else if (typeof value === 'number' || typeof value === 'bigint') {\n return 'u64';\n } else if (typeof value === 'boolean') {\n return 'bool';\n } else {\n return 'object';\n }\n};\n\n/**\n * Since we know the elements in the array are the same type\n * If type is not provided, we will try to infer the type from the first element\n * By default,\n *\n * string starting with `0x` =====> object id\n * number, bigint ====> u64\n * boolean =====> bool\n *\n *\n * If type is provided, we will use the type to convert the array\n * @param args\n * @param type 'address' | 'bool' | 'u8' | 'u16' | 'u32' | 'u64' | 'u128' | 'u256' | 'object'\n */\nexport function makeVecParam(\n txBlock: TransactionBlock,\n args: SuiTxArg[],\n type?: SuiInputTypes\n) {\n if (args.length === 0)\n throw new Error('Transaction builder error: Empty array is not allowed');\n const defaultSuiType = getDefaultSuiInputType(args[0]);\n if (type === 'object' || (!type && defaultSuiType === 'object')) {\n const objects = args.map((arg) =>\n typeof arg === 'string'\n ? txBlock.object(normalizeSuiObjectId(arg))\n : (arg as any)\n );\n return txBlock.makeMoveVec({ objects });\n } else {\n const vecType = type || defaultSuiType;\n return txBlock.pure(args, `vector<${vecType}>`);\n }\n}\n\nexport function isMoveVecArg(arg: any) {\n const isFullMoveVecArg =\n arg && arg.value && Array.isArray(arg.value) && arg.vecType;\n const isSimpleMoveVecArg = Array.isArray(arg);\n return isFullMoveVecArg || isSimpleMoveVecArg;\n}\n\nexport function convertArgs(\n txBlock: TransactionBlock,\n args: any[]\n): TransactionArgument[] {\n return args.map((arg) => {\n if (typeof arg === 'string' && arg.startsWith('0x')) {\n // We always treat string starting with `0x` as object id\n return txBlock.object(normalizeSuiObjectId(arg));\n } else if (isMoveVecArg(arg)) {\n // if it's an array arg, we will convert it to move vec\n const vecType = arg.vecType || undefined;\n return vecType\n ? makeVecParam(txBlock, arg.value, vecType)\n : makeVecParam(txBlock, arg);\n } else if (typeof arg !== 'object') {\n // Other basic types such as string, number, boolean are converted to pure value\n return txBlock.pure(arg);\n } else {\n // We do nothing, because it's most likely already a move value\n return arg;\n }\n });\n}\n","import { SuiMoveNormalizedModules} from '@mysten/sui.js';\nimport type { ContractFactoryParams, SuiMoveMoudleValueType } from './types';\nexport type ApiTypes = 'promise' | 'rxjs';\n\n// export interface ContractQuery {\n// (origin: AccountId | string | Uint8Array, options: ContractOptions, ...params: unknown[]): SuiTransactionBlockResponse<ApiType, ContractCallOutcome>;\n// }\n\n// export type MapMessageQuery<ApiType extends ApiTypes> = Record<string, ContractQuery<ApiType>>;\n\n// // function createQuery <ApiType extends ApiTypes> (meta: AbiMessage, fn: (origin: string | AccountId | Uint8Array, options: ContractOptions, params: unknown[]) => ContractCallResult<ApiType, ContractCallOutcome>): ContractQuery<ApiType> {\n// // return withMeta(meta, (origin: string | AccountId | Uint8Array, options: ContractOptions, ...params: unknown[]): ContractCallResult<ApiType, ContractCallOutcome> =>\n// // fn(origin, options, params)\n// // );\n// // }\n\n// export type MapMessageTx<ApiType extends ApiTypes> = Record<string, ContractTx<ApiType>>;\n\n// export interface ContractOptions {\n// gasLimit?: bigint | string | number | BN | WeightV2;\n// storageDepositLimit?: bigint | string | number | BN | null;\n// value?: bigint | BN | string | number;\n// }\n\n// export interface ContractTx {\n// (options: ContractOptions, ...params: unknown[]): SubmittableExtrinsic<ApiType>;\n// }\nexport class SuiContractFactory {\n public packageId: string;\n public metadata: SuiMoveNormalizedModules | undefined;\n // readonly #query: MapMessageQuery<ApiTypes> = {};\n // readonly #tx: MapMessageTx<ApiTypes> = {};\n /**\n * Support the following ways to init the SuiToolkit:\n * 1. mnemonics\n * 2. secretKey (base64 or hex)\n * If none of them is provided, will generate a random mnemonics with 24 words.\n *\n * @param mnemonics, 12 or 24 mnemonics words, separated by space\n * @param secretKey, base64 or hex string, when mnemonics is provided, secretKey will be ignored\n */\n constructor({ packageId, metadata }: ContractFactoryParams = {}) {\n // If the mnemonics or secretKey is provided, use it\n // Otherwise, generate a random mnemonics with 24 words\n this.packageId = packageId || '';\n this.metadata = metadata || undefined;\n }\n\n getFuncByModuleName(moduleName: string) {\n Object.values(this.metadata as SuiMoveNormalizedModules).forEach(\n (value) => {\n const data = value as SuiMoveMoudleValueType;\n console.log(`moudle name: ${data.name}`);\n // console.log(data.exposedFunctions)\n Object.entries(data.exposedFunctions).forEach(([key, value]) => {\n console.log(`\\tfunc name: ${key}`);\n Object.values(value.parameters).forEach((values) => {\n // console.log(values)\n });\n });\n }\n );\n }\n\n getAllFunc() {\n Object.values(this.metadata as SuiMoveNormalizedModules).forEach(\n (value) => {\n const data = value as SuiMoveMoudleValueType;\n console.log(`moudle name: ${data.name}`);\n // console.log(data.exposedFunctions)\n Object.entries(data.exposedFunctions).forEach(([key, value]) => {\n console.log(`\\tfunc name: ${key}`);\n console.log(`\\t\\t${value.parameters.length}`);\n Object.values(value.parameters).forEach((values) => {\n // console.log(values)\n console.log(`\\t\\targs: ${values}`);\n });\n });\n }\n );\n }\n\n getAllModule() {\n Object.values(this.metadata as SuiMoveNormalizedModules).forEach(\n (value, index) => {\n const data = value as SuiMoveMoudleValueType;\n console.log(`${index}. ${data.name}`);\n }\n );\n }\n async worldCall() {}\n\n // async call(arguments: ({\n // kind: \"Input\";\n // index: number;\n // type?: \"object\" | \"pure\" | undefined;\n // value?: any;\n // } | {\n // kind: \"GasCoin\";\n // } | {\n // kind: \"Result\";\n // index: number;\n // } | {\n // kind: \"NestedResult\";\n // index: number;\n // resultIndex: number;\n // })[], derivePathParams?: DerivePathParams) {\n // const tx = new TransactionBlock();\n // tx.moveCall({\n // target: `${this.packageId}::${}::${}`,\n // arguments,\n // })\n // return ;\n // }\n}\n\n// function createTx <ApiType extends ApiTypes> (meta: AbiMessage, fn: (options: ContractOptions, params: unknown[]) => SubmittableExtrinsic<ApiType>): ContractTx<ApiType> {\n// return withMeta(meta, (options: ContractOptions, ...params: unknown[]): SubmittableExtrinsic<ApiType> =>\n// fn(options, params)\n// );\n// }\n","\nimport {\n is,\n ObjectCallArg,\n ObjectId,\n TransactionArgument,\n TransactionBlock,\n normalizeSuiAddress,\n bcs,\n} from '@mysten/sui.js'\nimport { BCS } from '@mysten/bcs'\n\n/** A Move type, e.g., `address`, `bool`, `u64`, `vector<u64>`, `0x2::sui::SUI`... */\nexport type Type = string\n\nexport interface FieldsWithTypes {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n fields: Record<string, any>\n type: string\n}\n\nexport type ObjectArg = ObjectId | ObjectCallArg | TransactionArgument\nexport type PureArg =\n | bigint\n | string\n | number\n | boolean\n | null\n | TransactionArgument\n | Array<PureArg>\nexport type GenericArg = ObjectArg | PureArg | Array<ObjectArg> | Array<PureArg> | Array<GenericArg>\n\nexport function parseTypeName(name: Type): { typeName: string; typeArgs: Type[] } {\n const parsed = bcs.parseTypeName(name)\n return { typeName: parsed.name, typeArgs: parsed.params as string[] }\n}\n\nexport function obj(txb: TransactionBlock, arg: ObjectArg) {\n return is(arg, TransactionArgument) ? arg : txb.object(arg)\n}\n\nexport function pure(txb: TransactionBlock, arg: PureArg, type: Type) {\n if (is(arg, TransactionArgument)) {\n return obj(txb, arg)\n }\n\n function convertType(type: Type): string {\n const { typeName, typeArgs } = parseTypeName(type)\n switch (typeName) {\n case '0x1::string::String':\n case '0x1::ascii::String':\n return BCS.STRING\n case '0x2::object::ID':\n return BCS.ADDRESS\n case '0x1::option::Option':\n return `vector<${convertType(typeArgs[0])}>`\n case 'vector':\n return `vector<${convertType(typeArgs[0])}>`\n default:\n return type\n }\n }\n\n function isOrHasNestedTransactionArgument(arg: PureArg): boolean {\n if (Array.isArray(arg)) {\n return arg.some(item => isOrHasNestedTransactionArgument(item))\n }\n return is(arg, TransactionArgument)\n }\n\n function convertArg(arg: PureArg, type: Type): PureArg {\n const { typeName, typeArgs } = parseTypeName(type)\n if (typeName === '0x1::option::Option') {\n if (arg === null) {\n return []\n } else {\n return [convertArg(arg, typeArgs[0])]\n }\n } else if (typeName === 'vector' && Array.isArray(arg)) {\n return arg.map(item => convertArg(item, typeArgs[0]))\n } else if (typeName === '0x2::object::ID' || typeName === 'address') {\n return normalizeSuiAddress(arg as string)\n } else {\n return arg\n }\n }\n\n // handle some cases when TransactionArgument is nested within a vector or option\n const { typeName, typeArgs } = parseTypeName(type)\n switch (typeName) {\n case '0x1::option::Option':\n if (arg === null) {\n return txb.pure([], `vector<${convertType(typeArgs[0])}>`)\n }\n if (isOrHasNestedTransactionArgument(arg)) {\n throw new Error('nesting TransactionArgument is not currently supported')\n }\n break\n case 'vector':\n if (!Array.isArray(arg)) {\n throw new Error('expected an array for vector type')\n }\n if (arg.length === 0) {\n return txb.pure([], `vector<${convertType(typeArgs[0])}>`)\n }\n if (arg.some(arg => Array.isArray(arg) && isOrHasNestedTransactionArgument(arg))) {\n throw new Error('nesting TransactionArgument is not currently supported')\n }\n if (\n is(arg[0], TransactionArgument) &&\n arg.filter(arg => !is(arg, TransactionArgument)).length > 0\n ) {\n throw new Error('mixing TransactionArgument with other types is not currently supported')\n }\n if (is(arg[0], TransactionArgument)) {\n return txb.makeMoveVec({\n objects: arg as Array<TransactionArgument>,\n type: typeArgs[0],\n })\n }\n }\n\n return txb.pure(convertArg(arg, type), convertType(type))\n}\n\nexport function option(txb: TransactionBlock, type: Type, arg: GenericArg | null) {\n if (arg === null) {\n return pure(txb, arg, `0x1::option::Option<${type}>`)\n }\n\n if (typeArgIsPure(type)) {\n return pure(txb, arg as PureArg | TransactionArgument, `0x1::option::Option<${type}>`)\n } else if (is(arg, TransactionArgument)) {\n return arg\n } else {\n if (arg === null) {\n return pure(txb, arg, `vector<${type}>`)\n }\n\n // wrap it with some\n const val = generic(txb, type, arg)\n return txb.moveCall({\n target: `0x1::option::some`,\n typeArguments: [type],\n arguments: [val],\n })\n }\n}\n\nexport function generic(txb: TransactionBlock, type: Type, arg: GenericArg) {\n if (typeArgIsPure(type)) {\n return pure(txb, arg as PureArg | TransactionArgument, type)\n } else {\n const { typeName, typeArgs } = parseTypeName(type)\n if (typeName === 'vector' && Array.isArray(arg)) {\n const itemType = typeArgs[0]\n\n return txb.makeMoveVec({\n objects: arg.map(item => obj(txb, item as ObjectArg)),\n type: itemType,\n })\n } else {\n return obj(txb, arg as ObjectArg)\n }\n }\n}\n\nexport function vector(\n txb: TransactionBlock,\n itemType: Type,\n items: Array<GenericArg> | TransactionArgument\n) {\n if (typeArgIsPure(itemType)) {\n return pure(txb, items as PureArg, `vector<${itemType}>`)\n } else if (is(items, TransactionArgument)) {\n return items\n } else {\n const { typeName: itemTypeName, typeArgs: itemTypeArgs } = parseTypeName(itemType)\n if (itemTypeName === '0x1::option::Option') {\n const objects = items.map(item => option(txb, itemTypeArgs[0], item))\n return txb.makeMoveVec({\n objects,\n type: itemType,\n })\n }\n\n return txb.makeMoveVec({\n objects: items as Array<TransactionArgument>,\n type: itemType,\n })\n }\n}\n\nexport function typeArgIsPure(type: Type): boolean {\n const { typeName, typeArgs } = parseTypeName(type)\n switch (typeName) {\n case 'bool':\n case 'u8':\n case 'u16':\n case 'u32':\n case 'u64':\n case 'u128':\n case 'u256':\n case 'address':\n case 'signer':\n return true\n case 'vector':\n return typeArgIsPure(typeArgs[0])\n case '0x1::string::String':\n case '0x1::ascii::String':\n case '0x2::object::ID':\n return true\n case '0x1::option::Option':\n return typeArgIsPure(typeArgs[0])\n default:\n return false\n }\n}\n\n","import {\n RawSigner,\n TransactionBlock,\n DevInspectResults,\n SuiTransactionBlockResponse, JsonRpcProvider, testnetConnection,\n SuiMoveNormalizedModules, DynamicFieldPage, DynamicFieldName,\n} from '@mysten/sui.js';\nimport { SuiAddress } from \"@mysten/sui.js/src/types\";\nimport { SuiRpcProvider } from '../libs/suiRpcProvider';\nimport { NetworkType } from '../libs/suiRpcProvider/types';\nimport * as fs from 'fs';\n\nexport async function initialize(networkType: NetworkType, packageId: string) {\n const folderPath = \"./metadata\"\n fs.access(folderPath, (error) => {\n if (error) {\n fs.mkdir(folderPath, (mkdirError) => {\n if (mkdirError) {\n console.error('Create folder error:', mkdirError);\n } else {\n console.log('This folder already exist.');\n }\n });\n } else {\n console.log('This folder already exist.');\n }\n });\n const jsonFileName = `${folderPath}/${packageId}.json`;\n\n const rpcProvider = new SuiRpcProvider({\n networkType,\n });\n try {\n const data = await fs.promises.readFile(jsonFileName, 'utf-8');\n const jsonData = JSON.parse(data);\n\n return jsonData as SuiMoveNormalizedModules;\n } catch (error) {\n if (packageId !== undefined) {\n const jsonData = await rpcProvider.getNormalizedMoveModulesByPackage(packageId);\n\n fs.writeFile(jsonFileName, JSON.stringify(jsonData, null, 2), (err) => {\n if (err) {\n console.error('write data error:', err);\n } else {\n console.log('Success saved.', jsonFileName);\n }\n });\n return jsonData as SuiMoveNormalizedModules;\n } else {\n console.error('please set your package id.');\n }\n }\n }"],"mappings":"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","names":["import_sui","import_sui","import_sui","import_sui","genMnemonic","import_sui","import_sui","import_sui","import_sui","import_sui","value","import_sui","type","typeName","typeArgs","arg","value"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/obelisk.ts","../src/libs/suiAccountManager/index.ts","../src/libs/suiAccountManager/keypair.ts","../src/libs/suiAccountManager/util.ts","../src/libs/suiAccountManager/crypto.ts","../src/libs/suiRpcProvider/index.ts","../src/libs/suiRpcProvider/faucet.ts","../src/libs/suiRpcProvider/defaultChainConfigs.ts","../src/libs/suiTxBuilder/index.ts","../src/libs/suiTxBuilder/util.ts","../src/libs/suiContractFactory/index.ts","../src/framework/util.ts","../src/metadata/index.ts"],"sourcesContent":["export {\n TransactionBlock,\n SUI_CLOCK_OBJECT_ID,\n SUI_SYSTEM_STATE_OBJECT_ID,\n} from '@mysten/sui.js';\nexport { Obelisk } from './obelisk';\nexport { SuiAccountManager } from './libs/suiAccountManager';\nexport { SuiTxBlock } from './libs/suiTxBuilder';\nexport { SuiRpcProvider } from './libs/suiRpcProvider';\nexport { SuiContractFactory } from './libs/suiContractFactory';\nexport { getMetadata } from './metadata';\nexport type * from './types';\n","import {\n RawSigner,\n TransactionBlock,\n DevInspectResults,\n SuiTransactionBlockResponse,\n SuiMoveNormalizedModules, DynamicFieldPage, DynamicFieldName,\n} from '@mysten/sui.js';\nimport { SuiAccountManager } from './libs/suiAccountManager';\nimport { SuiRpcProvider } from './libs/suiRpcProvider';\nimport { SuiTxBlock } from './libs/suiTxBuilder';\nimport { SuiContractFactory } from './libs/suiContractFactory';\nimport { SuiMoveMoudleValueType, SuiMoveMoudleFuncType } from './libs/suiContractFactory/types';\nimport {\n ObeliskParams,\n DerivePathParams,\n SuiTxArg, SuiVecTxArg,\n ComponentContentType,\n SuiTxArgument, ContractQuery,\n ContractTx, MapMoudleFuncQuery,\n MapMoudleFuncTx\n} from './types';\nimport {ObjectArg, obj, pure} from \"./framework/util\";\n\n\nexport function isUndefined (value?: unknown): value is undefined {\n return value === undefined;\n}\n\nexport function withMeta<T extends { meta: SuiMoveMoudleFuncType }>(meta: SuiMoveMoudleFuncType,creator: Omit<T, 'meta'>): T {\n (creator as T).meta = meta\n\n return creator as T;\n}\n\nfunction createQuery(\n meta: SuiMoveMoudleFuncType,\n fn: (tx: TransactionBlock, params: SuiTxArgument[], isRaw?: boolean) => Promise<DevInspectResults | TransactionBlock>\n): ContractQuery {\n return withMeta(meta, async (tx: TransactionBlock, params: SuiTxArgument[], isRaw?: boolean): Promise<DevInspectResults | TransactionBlock> => {\n const result = await fn(tx, params, isRaw);\n return result;\n });\n}\n\nfunction createTx(\n meta: SuiMoveMoudleFuncType,\n fn: (tx: TransactionBlock, params: SuiTxArgument[], isRaw?: boolean) => Promise<SuiTransactionBlockResponse | TransactionBlock>\n): ContractTx {\n return withMeta(meta, async (tx: TransactionBlock, params: SuiTxArgument[], isRaw?: boolean): Promise<SuiTransactionBlockResponse | TransactionBlock> => {\n const result = await fn(tx, params, isRaw);\n return result;\n });\n}\n\n/**\n * @class Obelisk\n * @description This class is used to aggregate the tools that used to interact with SUI network.\n */\nexport class Obelisk {\n public accountManager: SuiAccountManager;\n public rpcProvider: SuiRpcProvider;\n public contractFactory: SuiContractFactory;\n public packageId: string | undefined;\n // public needLoad: boolean | undefined;\n public metadata: SuiMoveNormalizedModules;\n public epsId: string;\n public componentsId: string;\n\n readonly #query: MapMoudleFuncQuery = {};\n readonly #tx: MapMoudleFuncTx = {};\n /**\n * Support the following ways to init the SuiToolkit:\n * 1. mnemonics\n * 2. secretKey (base64 or hex)\n * If none of them is provided, will generate a random mnemonics with 24 words.\n *\n * @param mnemonics, 12 or 24 mnemonics words, separated by space\n * @param secretKey, base64 or hex string, when mnemonics is provided, secretKey will be ignored\n * @param networkType, 'testnet' | 'mainnet' | 'devnet' | 'localnet', default is 'devnet'\n * @param fullnodeUrl, the fullnode url, default is the preconfig fullnode url for the given network type\n * @param faucetUrl, the faucet url, default is the preconfig faucet url for the given network type\n * @param packageId\n */\n constructor({\n mnemonics,\n secretKey,\n networkType,\n fullnodeUrl,\n faucetUrl,\n packageId,\n metadata\n }: ObeliskParams = {}) {\n // Init the account manager\n this.accountManager = new SuiAccountManager({ mnemonics, secretKey });\n // Init the rpc provider\n this.rpcProvider = new SuiRpcProvider({\n fullnodeUrl,\n faucetUrl,\n networkType,\n });\n\n this.epsId = \"0xf2196f638c3174e18c0e31aa630a02fd516c2c5deec1ded72c0fea864c9f091a\"\n this.componentsId = \"0x3bc407eb543149e42846ade59ac2a3c901584af4339dc1ecd0affd090529545f\"\n this.packageId = packageId;\n this.metadata = metadata as SuiMoveNormalizedModules;\n Object.values(metadata as SuiMoveNormalizedModules).forEach(value => {\n let data = value as SuiMoveMoudleValueType;\n let moduleName = data.name;\n Object.entries(data.exposedFunctions).forEach(([funcName, value]) => {\n let meta = value as SuiMoveMoudleFuncType;\n meta.moudleName = moduleName;\n meta.funcName = funcName;\n\n if (isUndefined(this.#query[moduleName])) {\n this.#query[moduleName] = {};\n }\n if (isUndefined(this.#query[moduleName][funcName])) {\n this.#query[moduleName][funcName] = createQuery(meta, (tx, p, isRaw) => this.#read(meta, tx, p, isRaw))\n }\n\n if (isUndefined(this.#tx[moduleName])) {\n this.#tx[moduleName] = {};\n }\n if (isUndefined(this.#tx[moduleName][funcName])) {\n this.#tx[moduleName][funcName] = createTx(meta, (tx, p, isRaw) => this.#exec(meta, tx, p, isRaw))\n }\n });\n })\n\n this.contractFactory = new SuiContractFactory({\n packageId,\n metadata\n })\n }\n\n // async initialize() {\n // const metadata = await this.loadData();\n // this.metadata = metadata as SuiMoveNormalizedModules;\n // this.contractFactory = new SuiContractFactory({\n // packageId: this.packageId,\n // metadata: this.metadata\n // })\n // return metadata\n // }\n\n public get query (): MapMoudleFuncQuery {\n return this.#query;\n }\n\n public get tx (): MapMoudleFuncTx {\n return this.#tx;\n }\n\n #exec = async (meta: SuiMoveMoudleFuncType, tx: TransactionBlock, params: SuiTxArgument[], isRaw?: boolean) => {\n tx.moveCall({\n target: `${this.contractFactory.packageId}::${meta.moudleName}::${meta.funcName}`,\n arguments: params,\n })\n\n if (isRaw === true) {\n return tx;\n }\n return await this.signAndSendTxn(tx);\n };\n\n\n #read = async (meta: SuiMoveMoudleFuncType, tx: TransactionBlock, params: SuiTxArgument[], isRaw?: boolean) => {\n tx.moveCall({\n target: `${this.contractFactory.packageId}::${meta.moudleName}::${meta.funcName}`,\n arguments: params,\n })\n \n if (isRaw === true) {\n return tx;\n }\n return await this.inspectTxn(tx);\n };\n /**\n * if derivePathParams is not provided or mnemonics is empty, it will return the currentSigner.\n * else:\n * it will generate signer from the mnemonic with the given derivePathParams.\n * @param derivePathParams, such as { accountIndex: 2, isExternal: false, addressIndex: 10 }, comply with the BIP44 standard\n */\n getSigner(derivePathParams?: DerivePathParams) {\n const keyPair = this.accountManager.getKeyPair(derivePathParams);\n return new RawSigner(keyPair, this.rpcProvider.provider);\n }\n\n /**\n * @description Switch the current account with the given derivePathParams\n * @param derivePathParams, such as { accountIndex: 2, isExternal: false, addressIndex: 10 }, comply with the BIP44 standard\n */\n switchAccount(derivePathParams: DerivePathParams) {\n this.accountManager.switchAccount(derivePathParams);\n }\n\n /**\n * @description Get the address of the account for the given derivePathParams\n * @param derivePathParams, such as { accountIndex: 2, isExternal: false, addressIndex: 10 }, comply with the BIP44 standard\n */\n getAddress(derivePathParams?: DerivePathParams) {\n return this.accountManager.getAddress(derivePathParams);\n }\n currentAddress() {\n return this.accountManager.currentAddress;\n }\n\n provider() {\n return this.rpcProvider.provider;\n }\n\n getPackageId() {\n return this.contractFactory.packageId;\n }\n\n getMetadata() {\n return this.contractFactory.metadata\n }\n /**\n * Request some SUI from faucet\n * @Returns {Promise<boolean>}, true if the request is successful, false otherwise.\n */\n async requestFaucet(derivePathParams?: DerivePathParams) {\n const addr = this.accountManager.getAddress(derivePathParams);\n return this.rpcProvider.requestFaucet(addr);\n }\n\n async getBalance(coinType?: string, derivePathParams?: DerivePathParams) {\n const owner = this.accountManager.getAddress(derivePathParams);\n return this.rpcProvider.getBalance(owner, coinType);\n }\n\n async getObject(objectId: string) {\n return this.rpcProvider.getObject(objectId);\n }\n\n async getObjects(objectIds: string[]) {\n return this.rpcProvider.getObjects(objectIds);\n }\n\n async signTxn(\n tx: Uint8Array | TransactionBlock | SuiTxBlock,\n derivePathParams?: DerivePathParams\n ) {\n tx = tx instanceof SuiTxBlock ? tx.txBlock : tx;\n const signer = this.getSigner(derivePathParams);\n return signer.signTransactionBlock({ transactionBlock: tx });\n }\n\n async signAndSendTxn(\n tx: Uint8Array | TransactionBlock | SuiTxBlock,\n derivePathParams?: DerivePathParams\n ): Promise<SuiTransactionBlockResponse> {\n tx = tx instanceof SuiTxBlock ? tx.txBlock : tx;\n const signer = this.getSigner(derivePathParams);\n return signer.signAndExecuteTransactionBlock({\n transactionBlock: tx,\n options: {\n showEffects: true,\n showEvents: true,\n showObjectChanges: true,\n },\n });\n }\n\n /**\n * Transfer the given amount of SUI to the recipient\n * @param recipient\n * @param amount\n * @param derivePathParams\n */\n async transferSui(\n recipient: string,\n amount: number,\n derivePathParams?: DerivePathParams\n ) {\n const tx = new SuiTxBlock();\n tx.transferSui(recipient, amount);\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n /**\n * Transfer to mutliple recipients\n * @param recipients the recipients addresses\n * @param amounts the amounts of SUI to transfer to each recipient, the length of amounts should be the same as the length of recipients\n * @param derivePathParams\n */\n async transferSuiToMany(\n recipients: string[],\n amounts: number[],\n derivePathParams?: DerivePathParams\n ) {\n const tx = new SuiTxBlock();\n tx.transferSuiToMany(recipients, amounts);\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n /**\n * Transfer the given amounts of coin to multiple recipients\n * @param recipients the list of recipient address\n * @param amounts the amounts to transfer for each recipient\n * @param coinType any custom coin type but not SUI\n * @param derivePathParams the derive path params for the current signer\n */\n async transferCoinToMany(\n recipients: string[],\n amounts: number[],\n coinType: string,\n derivePathParams?: DerivePathParams\n ) {\n const tx = new SuiTxBlock();\n const owner = this.accountManager.getAddress(derivePathParams);\n const totalAmount = amounts.reduce((a, b) => a + b, 0);\n const coins = await this.rpcProvider.selectCoins(\n owner,\n totalAmount,\n coinType\n );\n tx.transferCoinToMany(\n coins.map((c) => c.objectId),\n owner,\n recipients,\n amounts\n );\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n async transferCoin(\n recipient: string,\n amount: number,\n coinType: string,\n derivePathParams?: DerivePathParams\n ) {\n return this.transferCoinToMany(\n [recipient],\n [amount],\n coinType,\n derivePathParams\n );\n }\n\n async transferObjects(\n objects: string[],\n recipient: string,\n derivePathParams?: DerivePathParams\n ) {\n const tx = new SuiTxBlock();\n tx.transferObjects(objects, recipient);\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n async moveCall(callParams: {\n target: string;\n arguments?: (SuiTxArg | SuiVecTxArg)[];\n typeArguments?: string[];\n derivePathParams?: DerivePathParams;\n }) {\n const {\n target,\n arguments: args = [],\n typeArguments = [],\n derivePathParams,\n } = callParams;\n const tx = new SuiTxBlock();\n tx.moveCall(target, args, typeArguments);\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n /**\n * Select coins with the given amount and coin type, the total amount is greater than or equal to the given amount\n * @param amount\n * @param coinType\n * @param owner\n */\n async selectCoinsWithAmount(\n amount: number,\n coinType: string,\n owner?: string\n ) {\n owner = owner || this.accountManager.currentAddress;\n const coins = await this.rpcProvider.selectCoins(owner, amount, coinType);\n return coins.map((c) => c.objectId);\n }\n\n /**\n * stake the given amount of SUI to the validator\n * @param amount the amount of SUI to stake\n * @param validatorAddr the validator address\n * @param derivePathParams the derive path params for the current signer\n */\n async stakeSui(\n amount: number,\n validatorAddr: string,\n derivePathParams?: DerivePathParams\n ) {\n const tx = new SuiTxBlock();\n tx.stakeSui(amount, validatorAddr);\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n /**\n * Execute the transaction with on-chain data but without really submitting. Useful for querying the effects of a transaction.\n * Since the transaction is not submitted, its gas cost is not charged.\n * @param tx the transaction to execute\n * @param derivePathParams the derive path params\n * @returns the effects and events of the transaction, such as object changes, gas cost, event emitted.\n */\n async inspectTxn(\n tx: Uint8Array | TransactionBlock | SuiTxBlock,\n derivePathParams?: DerivePathParams\n ): Promise<DevInspectResults> {\n\n tx = tx instanceof SuiTxBlock ? tx.txBlock : tx;\n return this.rpcProvider.provider.devInspectTransactionBlock({\n transactionBlock: tx,\n sender: this.getAddress(derivePathParams),\n });\n }\n\n async getBirthTime(objectId: string, derivePathParams?: DerivePathParams) {\n const tx = new TransactionBlock();\n\n tx.moveCall({\n // target: `0x12b216923e5454e1f076ccb5fc638b59f8aba2175c34df9899de71124d66badd::status_system::get_pet_state`,\n target: `0x6afbf113a5872b781a2a0068b95c0d9d0ee89428518fdd65f862c841eab45b82::pet_system::get_pet_basic_info`,\n arguments: [\n // tx.pure(\"0x6fa43c68221960f942572905f3c198a5bccaa0700506b3b6bd83dd9b007e6324\"),\n // tx.pure(\"0xbf64721f0961a0426ccde6b8d9343e2cb2c26a105a5c33e57074580fd98b2cb1\"),\n // tx.pure(\"0x6\"),\n\n obj(tx, \"0x26804211486be597a89c46c16b929d7031fb7c701ecf89d4c750e49459b4bea2\"),\n pure(tx, \"0x35ba3bfb8590dbd060f41cd58c7b140d67efd2126648409cd231c74cff2828b8\", `0x2::object::ID`),\n obj(tx, \"0x6\")\n ],\n })\n return await this.inspectTxn(tx, derivePathParams);\n }\n\n async getWorld(worldObjectId: string) {\n return this.rpcProvider.getObject(worldObjectId)\n }\n\n async getAllEntities(worldId: string, cursor?: string, limit?: number) {\n const parentId = (await this.rpcProvider.getObject(worldId)).objectFields.entities.fields.id.id;\n return await this.rpcProvider.getDynamicFields(parentId, cursor, limit) as DynamicFieldPage;\n }\n\n async getEntity(worldId: string, entityId: string) {\n const parentId = (await this.rpcProvider.getObject(worldId)).objectFields.entities.fields.id.id;\n\n const name = {\n type: \"0x2::object::ID\",\n value: entityId\n } as DynamicFieldName\n return await this.rpcProvider.getDynamicFieldObject(parentId, name);\n }\n\n async getEntityComponents(worldId: string, entityId: string, cursor?: string, limit?: number) {\n const parentContent = (await this.getEntity(worldId, entityId)).data!.content as ComponentContentType;\n const parentId = parentContent.fields.value.fields.components.fields.id.id;\n return await this.rpcProvider.getDynamicFields(parentId, cursor, limit) as DynamicFieldPage;\n }\n\n async getEntityComponent(entityId: string, componentId: string) {\n const parentId = (await this.rpcProvider.getObject(entityId)).objectFields.id.id;\n\n const name = {\n type: \"0x2::object::ID\",\n value: componentId\n } as DynamicFieldName\n return await this.rpcProvider.getDynamicFieldObject(parentId, name);\n }\n\n\n // async loadData() {\n // const jsonFileName = `metadata/${this.packageId}.json`;\n\n // try {\n // const data = await fs.promises.readFile(jsonFileName, 'utf-8');\n // const jsonData = JSON.parse(data);\n\n // return jsonData as SuiMoveNormalizedModules;\n // } catch (error) {\n // if (this.packageId !== undefined) {\n // const jsonData = await this.rpcProvider.getNormalizedMoveModulesByPackage(this.packageId);\n\n // fs.writeFile(jsonFileName, JSON.stringify(jsonData, null, 2), (err) => {\n // if (err) {\n // console.error('写入文件时出错:', err);\n // } else {\n // console.log('JSON 数据已保存到文件:', jsonFileName);\n // }\n // });\n // return jsonData as SuiMoveNormalizedModules;\n // } else {\n // console.error('please set your package id.');\n // }\n // }\n // }\n}\n","import { Ed25519Keypair } from '@mysten/sui.js';\nimport { getKeyPair } from './keypair';\nimport { hexOrBase64ToUint8Array, normalizePrivateKey } from './util';\nimport { generateMnemonic } from './crypto';\nimport type { AccountMangerParams, DerivePathParams } from './types';\n\nexport class SuiAccountManager {\n private mnemonics: string;\n private secretKey: string;\n public currentKeyPair: Ed25519Keypair;\n public currentAddress: string;\n\n /**\n * Support the following ways to init the SuiToolkit:\n * 1. mnemonics\n * 2. secretKey (base64 or hex)\n * If none of them is provided, will generate a random mnemonics with 24 words.\n *\n * @param mnemonics, 12 or 24 mnemonics words, separated by space\n * @param secretKey, base64 or hex string, when mnemonics is provided, secretKey will be ignored\n */\n constructor({ mnemonics, secretKey }: AccountMangerParams = {}) {\n // If the mnemonics or secretKey is provided, use it\n // Otherwise, generate a random mnemonics with 24 words\n this.mnemonics = mnemonics || '';\n this.secretKey = secretKey || '';\n if (!this.mnemonics && !this.secretKey) {\n this.mnemonics = generateMnemonic(24);\n }\n\n // Init the current account\n this.currentKeyPair = this.secretKey\n ? Ed25519Keypair.fromSecretKey(\n normalizePrivateKey(hexOrBase64ToUint8Array(this.secretKey))\n )\n : getKeyPair(this.mnemonics);\n this.currentAddress = this.currentKeyPair.getPublicKey().toSuiAddress();\n }\n\n /**\n * if derivePathParams is not provided or mnemonics is empty, it will return the currentKeyPair.\n * else:\n * it will generate keyPair from the mnemonic with the given derivePathParams.\n */\n getKeyPair(derivePathParams?: DerivePathParams) {\n if (!derivePathParams || !this.mnemonics) return this.currentKeyPair;\n return getKeyPair(this.mnemonics, derivePathParams);\n }\n\n /**\n * if derivePathParams is not provided or mnemonics is empty, it will return the currentAddress.\n * else:\n * it will generate address from the mnemonic with the given derivePathParams.\n */\n getAddress(derivePathParams?: DerivePathParams) {\n if (!derivePathParams || !this.mnemonics) return this.currentAddress;\n return getKeyPair(this.mnemonics, derivePathParams)\n .getPublicKey()\n .toSuiAddress();\n }\n\n /**\n * Switch the current account with the given derivePathParams.\n * This is only useful when the mnemonics is provided. For secretKey mode, it will always use the same account.\n */\n switchAccount(derivePathParams: DerivePathParams) {\n if (this.mnemonics) {\n this.currentKeyPair = getKeyPair(this.mnemonics, derivePathParams);\n this.currentAddress = this.currentKeyPair.getPublicKey().toSuiAddress();\n }\n }\n}\n","import { Ed25519Keypair } from '@mysten/sui.js';\nimport type { DerivePathParams } from './types';\n\n/**\n * @description Get ed25519 derive path for SUI\n * @param derivePathParams\n */\nexport const getDerivePathForSUI = (\n derivePathParams: DerivePathParams = {}\n) => {\n const {\n accountIndex = 0,\n isExternal = false,\n addressIndex = 0,\n } = derivePathParams;\n return `m/44'/784'/${accountIndex}'/${isExternal ? 1 : 0}'/${addressIndex}'`;\n};\n\n/**\n * the format is m/44'/784'/accountIndex'/${isExternal ? 1 : 0}'/addressIndex'\n *\n * accountIndex is the index of the account, default is 0.\n *\n * isExternal is the type of the address, default is false. Usually, the external address is used to receive coins. The internal address is used to change coins.\n *\n * addressIndex is the index of the address, default is 0. It's used to generate multiple addresses for one account.\n *\n * @description Get keypair from mnemonics and derive path\n * @param mnemonics\n * @param derivePathParams\n */\nexport const getKeyPair = (\n mnemonics: string,\n derivePathParams: DerivePathParams = {}\n) => {\n const derivePath = getDerivePathForSUI(derivePathParams);\n return Ed25519Keypair.deriveKeypair(mnemonics, derivePath);\n};\n","import { fromB64 } from '@mysten/sui.js';\n\n/**\n * @description This regular expression matches any string that contains only hexadecimal digits (0-9, A-F, a-f).\n * @param str\n */\nexport const isHex = (str: string) =>\n /^0x[0-9a-fA-F]+$|^[0-9a-fA-F]+$/.test(str);\n\n/**\n * @description This regular expression matches any string that contains only base64 digits (0-9, A-Z, a-z, +, /, =).\n * Note that the \"=\" signs at the end are optional padding characters that may be present in some base64 encoded strings.\n * @param str\n */\nexport const isBase64 = (str: string) => /^[a-zA-Z0-9+/]+={0,2}$/g.test(str);\n\n/**\n * Convert a hex string to Uint8Array\n * @param hexStr\n */\nexport const fromHEX = (hexStr: string): Uint8Array => {\n if (!hexStr) {\n throw new Error('cannot parse empty string to Uint8Array');\n }\n const intArr = hexStr\n .replace('0x', '')\n .match(/.{1,2}/g)\n ?.map((byte) => parseInt(byte, 16));\n\n if (!intArr || intArr.length === 0) {\n throw new Error(`Unable to parse HEX: ${hexStr}`);\n }\n return Uint8Array.from(intArr);\n};\n\n/**\n * @description Convert a hex or base64 string to Uint8Array\n */\nexport const hexOrBase64ToUint8Array = (str: string): Uint8Array => {\n if (isHex(str)) {\n return fromHEX(str);\n } else if (isBase64(str)) {\n return fromB64(str);\n } else {\n throw new Error('The string is not a valid hex or base64 string.');\n }\n};\n\nconst PRIVATE_KEY_SIZE = 32;\nconst LEGACY_PRIVATE_KEY_SIZE = 64;\n/**\n * normalize a private key\n * A private key is a 32-byte array.\n * But there are two different formats for private keys:\n * 1. A 32-byte array\n * 2. A 64-byte array with the first 32 bytes being the private key and the last 32 bytes being the public key\n * 3. A 33-byte array with the first byte being 0x00 (sui.keystore key is a Base64 string with scheme flag 0x00 at the beginning)\n */\nexport const normalizePrivateKey = (key: Uint8Array): Uint8Array => {\n if (key.length === LEGACY_PRIVATE_KEY_SIZE) {\n // This is a legacy secret key, we need to strip the public key bytes and only read the first 32 bytes\n key = key.slice(0, PRIVATE_KEY_SIZE);\n } else if (key.length === PRIVATE_KEY_SIZE + 1 && key[0] === 0) {\n // sui.keystore key is a Base64 string with scheme flag 0x00 at the beginning\n return key.slice(1);\n } else if (key.length === PRIVATE_KEY_SIZE) {\n return key;\n }\n throw new Error('invalid secret key');\n};\n","import { generateMnemonic as genMnemonic } from '@scure/bip39';\nimport { wordlist } from '@scure/bip39/wordlists/english';\n\nexport const generateMnemonic = (numberOfWords: 12 | 24 = 24) => {\n const strength = numberOfWords === 12 ? 128 : 256;\n return genMnemonic(wordlist, strength);\n};\n","import {\n Connection,\n JsonRpcProvider,\n getObjectType,\n getObjectId,\n getObjectFields,\n getObjectDisplay,\n getObjectVersion,\n DynamicFieldName\n} from '@mysten/sui.js';\nimport { requestFaucet } from './faucet';\nimport { getDefaultNetworkParams } from './defaultChainConfigs';\nimport type { ObjectData, SuiRpcProviderParams } from './types';\n\nexport class SuiRpcProvider {\n public fullnodeUrl: string;\n public faucetUrl?: string;\n public provider: JsonRpcProvider;\n /**\n *\n * @param networkType, 'testnet' | 'mainnet' | 'devnet' | 'localnet', default is 'devnet'\n * @param fullnodeUrl, the fullnode url, default is the preconfig fullnode url for the given network type\n * @param faucetUrl, the faucet url, default is the preconfig faucet url for the given network type\n */\n constructor({\n fullnodeUrl,\n faucetUrl,\n networkType,\n }: SuiRpcProviderParams = {}) {\n // Get the default fullnode url and faucet url for the given network type, default is 'testnet'\n const defaultNetworkParams = getDefaultNetworkParams(\n networkType || 'devnet'\n );\n // Set fullnodeUrl and faucetUrl, if they are not provided, use the default value.\n this.fullnodeUrl = fullnodeUrl || defaultNetworkParams.fullnode;\n this.faucetUrl = faucetUrl || defaultNetworkParams.faucet;\n\n // Init the provider\n const connection = new Connection({\n fullnode: this.fullnodeUrl,\n faucet: this.faucetUrl,\n });\n this.provider = new JsonRpcProvider(connection);\n }\n\n /**\n * Request some SUI from faucet\n * @Returns {Promise<boolean>}, true if the request is successful, false otherwise.\n */\n async requestFaucet(addr: string) {\n return requestFaucet(addr, this.provider);\n }\n\n async getBalance(addr: string, coinType?: string) {\n return this.provider.getBalance({ owner: addr, coinType });\n }\n\n\n async getDynamicFieldObject(parentId: string, name: string | DynamicFieldName) {\n return this.provider.getDynamicFieldObject({ parentId, name })\n }\n\n async getDynamicFields(parentId: string, cursor?: string, limit?: number) {\n return this.provider.getDynamicFields({ parentId, cursor, limit })\n }\n\n async getObject(id: string) {\n const options = { showContent: true, showDisplay: true, showType: true };\n const object = await this.provider.getObject({ id, options });\n const objectId = getObjectId(object);\n const objectType = getObjectType(object);\n const objectVersion = getObjectVersion(object);\n const objectFields = getObjectFields(object);\n const objectDisplay = getObjectDisplay(object);\n return {\n objectId,\n objectType,\n objectVersion,\n objectFields,\n objectDisplay,\n } as ObjectData;\n }\n\n async getObjects(ids: string[]) {\n const options = { showContent: true, showDisplay: true, showType: true };\n const objects = await this.provider.multiGetObjects({ ids, options });\n const parsedObjects = objects.map((object) => {\n const objectId = getObjectId(object);\n const objectType = getObjectType(object);\n const objectVersion = getObjectVersion(object);\n const objectFields = getObjectFields(object);\n const objectDisplay = getObjectDisplay(object);\n return {\n objectId,\n objectType,\n objectVersion,\n objectFields,\n objectDisplay,\n };\n });\n return parsedObjects as ObjectData[];\n }\n\n async getNormalizedMoveModulesByPackage(packageId: string) {\n return this.provider.getNormalizedMoveModulesByPackage({package: packageId});\n }\n\n /**\n * @description Select coins that add up to the given amount.\n * @param addr the address of the owner\n * @param amount the amount that is needed for the coin\n * @param coinType the coin type, default is '0x2::SUI::SUI'\n */\n async selectCoins(\n addr: string,\n amount: number,\n coinType: string = '0x2::SUI::SUI'\n ) {\n const coins = await this.provider.getCoins({ owner: addr, coinType });\n const selectedCoins: {\n objectId: string;\n digest: string;\n version: string;\n }[] = [];\n let totalAmount = 0;\n // Sort the coins by balance in descending order\n coins.data.sort((a, b) => parseInt(b.balance) - parseInt(a.balance));\n for (const coinData of coins.data) {\n selectedCoins.push({\n objectId: coinData.coinObjectId,\n digest: coinData.digest,\n version: coinData.version,\n });\n totalAmount = totalAmount + parseInt(coinData.balance);\n if (totalAmount >= amount) {\n break;\n }\n }\n\n if (!selectedCoins.length) {\n throw new Error('No valid coins found for the transaction.');\n }\n return selectedCoins;\n }\n}\n","import {\n JsonRpcProvider,\n FaucetRateLimitError,\n assert,\n FaucetResponse,\n} from '@mysten/sui.js';\nimport { retry } from 'ts-retry-promise';\n\n/**\n * Request some SUI from faucet\n * @param address\n * @param provider\n * @returns {Promise<boolean>}, return true if the request is successful\n */\nexport const requestFaucet = async (\n address: string,\n provider: JsonRpcProvider\n) => {\n console.log('\\nRequesting SUI from faucet for address: ', address);\n const headers = {\n authority: 'faucet.testnet.sui.io',\n method: 'POST',\n path: '/gas',\n scheme: 'https',\n accept: '*/*',\n 'accept-encoding': 'gzip, deflate, br',\n 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,ja;q=0.7',\n 'content-length': '105',\n 'content-type': 'application/json',\n origin: 'chrome-extension://opcgpfmipidbgpenhmajoajpbobppdil',\n cookie:\n '_ga=GA1.1.2092533979.1664032306; sui_io_cookie={\"level\":[\"necessary\",\"analytics\"],\"revision\":0,\"data\":null,\"rfc_cookie\":false}; _ga_YKP53WJMB0=GS1.1.1680531285.31.0.1680531334.11.0.0; _ga_0GW4F97GFL=GS1.1.1680826187.125.0.1680826187.60.0.0; __cf_bm=6rPjXUwuzUPy4yDlZuXgDj0v7xLPpUd5z0CFGCoN_YI-1680867579-0-AZMhU7/mKUUbUlOa27LmfW6eIFkBkXsPKqYgWjpjWpj2XzDckgUsRu/pxSRGfvXCspn3w7Df+uO1MR/b+XikJU0=; _cfuvid=zjwCXMmu19KBIVo_L9Qbq4TqFXJpophG3.EvFTxqdf4-1680867579342-0-604800000',\n 'sec-ch-ua':\n '\"Google Chrome\";v=\"111\", \"Not(A:Brand\";v=\"8\", \"Chromium\";v=\"111\"',\n 'sec-ch-ua-mobile': '?0',\n 'sec-ch-ua-platform': 'macOS',\n 'sec-fetch-dest': 'empty',\n 'sec-fetch-mode': 'cors',\n 'sec-fetch-site': 'none',\n 'user-agent':\n 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36',\n };\n // We need to add the following headers to the request, otherwise the request will be rejected by the faucet server\n const resp = await retry<FaucetResponse>(\n () => provider.requestSuiFromFaucet(address, headers),\n {\n backoff: 'EXPONENTIAL',\n // overall timeout in 60 seconds\n timeout: 1000 * 60,\n // skip retry if we hit the rate-limit error\n retryIf: (error: any) => !(error instanceof FaucetRateLimitError),\n logger: (msg) => console.warn(`Retry requesting faucet: ${msg}`),\n }\n );\n assert(resp, FaucetResponse, 'Request faucet failed\\n');\n console.log('Request faucet success\\n');\n};\n","import {\n localnetConnection,\n devnetConnection,\n testnetConnection,\n mainnetConnection,\n} from '@mysten/sui.js';\nimport type { Connection } from '@mysten/sui.js';\nimport type { NetworkType } from './types';\n\n/**\n * @description Get the default fullnode url and faucet url for the given network type\n * @param networkType, 'testnet' | 'mainnet' | 'devnet' | 'localnet', default is 'devnet'\n * @returns { fullNode: string, websocket: string, faucet?: string }\n */\nexport const getDefaultNetworkParams = (\n networkType: NetworkType = 'devnet'\n): Connection => {\n switch (networkType) {\n case 'localnet':\n return localnetConnection;\n case 'devnet':\n return devnetConnection;\n case 'testnet':\n return testnetConnection;\n case 'mainnet':\n return mainnetConnection;\n default:\n return devnetConnection;\n }\n};\n","import {\n TransactionBlock,\n SUI_SYSTEM_STATE_OBJECT_ID,\n TransactionExpiration,\n SuiObjectRef,\n SharedObjectRef,\n JsonRpcProvider,\n TransactionType,\n Transactions,\n ObjectCallArg,\n} from '@mysten/sui.js';\nimport { convertArgs } from './util';\nimport type { SuiTxArg, SuiObjectArg, SuiVecTxArg } from './types';\n\nexport class SuiTxBlock {\n public txBlock: TransactionBlock;\n constructor(transaction?: TransactionBlock) {\n this.txBlock = new TransactionBlock(transaction);\n }\n\n //======== override methods of TransactionBlock ============\n\n address(value: string) {\n return this.txBlock.pure(value, 'address');\n }\n pure(value: unknown, type?: string) {\n return this.txBlock.pure(value, type);\n }\n object(value: string | ObjectCallArg) {\n return this.txBlock.object(value);\n }\n objectRef(ref: SuiObjectRef) {\n return this.txBlock.objectRef(ref);\n }\n sharedObjectRef(ref: SharedObjectRef) {\n return this.txBlock.sharedObjectRef(ref);\n }\n setSender(sender: string) {\n return this.txBlock.setSender(sender);\n }\n setSenderIfNotSet(sender: string) {\n return this.txBlock.setSenderIfNotSet(sender);\n }\n setExpiration(expiration?: TransactionExpiration) {\n return this.txBlock.setExpiration(expiration);\n }\n setGasPrice(price: number | bigint) {\n return this.txBlock.setGasPrice(price);\n }\n setGasBudget(budget: number | bigint) {\n return this.txBlock.setGasBudget(budget);\n }\n setGasOwner(owner: string) {\n return this.txBlock.setGasOwner(owner);\n }\n setGasPayment(payments: SuiObjectRef[]) {\n return this.txBlock.setGasPayment(payments);\n }\n\n add(transaction: TransactionType) {\n return this.txBlock.add(transaction);\n }\n serialize() {\n return this.txBlock.serialize();\n }\n build(\n params: {\n provider?: JsonRpcProvider;\n onlyTransactionKind?: boolean;\n } = {}\n ) {\n return this.txBlock.build(params);\n }\n getDigest({ provider }: { provider?: JsonRpcProvider } = {}) {\n return this.txBlock.getDigest({ provider });\n }\n\n get gas() {\n return this.txBlock.gas;\n }\n get blockData() {\n return this.txBlock.blockData;\n }\n\n transferObjects(objects: SuiObjectArg[], recipient: string) {\n const tx = this.txBlock;\n tx.transferObjects(convertArgs(this.txBlock, objects), tx.pure(recipient));\n return this;\n }\n splitCoins(coin: SuiObjectArg, amounts: number[]) {\n const tx = this.txBlock;\n const coinObject = convertArgs(this.txBlock, [coin])[0];\n const res = tx.splitCoins(\n coinObject,\n amounts.map((m) => tx.pure(m))\n );\n return amounts.map((_, i) => res[i]);\n }\n mergeCoins(destination: SuiObjectArg, sources: SuiObjectArg[]) {\n const destinationObject = convertArgs(this.txBlock, [destination])[0];\n const sourceObjects = convertArgs(this.txBlock, sources);\n return this.txBlock.mergeCoins(destinationObject, sourceObjects);\n }\n publish(...args: Parameters<(typeof Transactions)['Publish']>) {\n return this.txBlock.publish(...args);\n }\n upgrade(...args: Parameters<(typeof Transactions)['Upgrade']>) {\n return this.txBlock.upgrade(...args);\n }\n makeMoveVec(...args: Parameters<(typeof Transactions)['MakeMoveVec']>) {\n return this.txBlock.makeMoveVec(...args);\n }\n\n /**\n * @description Move call\n * @param target `${string}::${string}::${string}`, e.g. `0x3::sui_system::request_add_stake`\n * @param args the arguments of the move call, such as `['0x1', '0x2']`\n * @param typeArgs the type arguments of the move call, such as `['0x2::sui::SUI']`\n */\n moveCall(\n target: string,\n args: (SuiTxArg | SuiVecTxArg)[] = [],\n typeArgs: string[] = []\n ) {\n // a regex for pattern `${string}::${string}::${string}`\n const regex =\n /(?<package>[a-zA-Z0-9]+)::(?<module>[a-zA-Z0-9_]+)::(?<function>[a-zA-Z0-9_]+)/;\n const match = target.match(regex);\n if (match === null)\n throw new Error(\n 'Invalid target format. Expected `${string}::${string}::${string}`'\n );\n const convertedArgs = convertArgs(this.txBlock, args);\n const tx = this.txBlock;\n return tx.moveCall({\n target: target as `${string}::${string}::${string}`,\n arguments: convertedArgs,\n typeArguments: typeArgs,\n });\n }\n\n //======== enhance methods ============\n transferSuiToMany(recipients: string[], amounts: number[]) {\n // require recipients.length === amounts.length\n if (recipients.length !== amounts.length) {\n throw new Error(\n 'transferSuiToMany: recipients.length !== amounts.length'\n );\n }\n\n const tx = this.txBlock;\n const coins = tx.splitCoins(\n tx.gas,\n amounts.map((amount) => tx.pure(amount))\n );\n recipients.forEach((recipient, index) => {\n tx.transferObjects([coins[index]], tx.pure(recipient));\n });\n return this;\n }\n\n transferSui(recipient: string, amount: number) {\n return this.transferSuiToMany([recipient], [amount]);\n }\n\n takeAmountFromCoins(coins: SuiObjectArg[], amount: number) {\n const tx = this.txBlock;\n const coinObjects = convertArgs(this.txBlock, coins);\n const mergedCoin = coinObjects[0];\n if (coins.length > 1) {\n tx.mergeCoins(mergedCoin, coinObjects.slice(1));\n }\n const [sendCoin] = tx.splitCoins(mergedCoin, [tx.pure(amount)]);\n return [sendCoin, mergedCoin];\n }\n\n splitSUIFromGas(amounts: number[]) {\n const tx = this.txBlock;\n return tx.splitCoins(\n tx.gas,\n amounts.map((m) => tx.pure(m))\n );\n }\n\n splitMultiCoins(coins: SuiObjectArg[], amounts: number[]) {\n const tx = this.txBlock;\n const coinObjects = convertArgs(this.txBlock, coins);\n const mergedCoin = coinObjects[0];\n if (coins.length > 1) {\n tx.mergeCoins(mergedCoin, coinObjects.slice(1));\n }\n const splitedCoins = tx.splitCoins(\n mergedCoin,\n amounts.map((m) => tx.pure(m))\n );\n return { splitedCoins, mergedCoin };\n }\n\n transferCoinToMany(\n inputCoins: SuiObjectArg[],\n sender: string,\n recipients: string[],\n amounts: number[]\n ) {\n // require recipients.length === amounts.length\n if (recipients.length !== amounts.length) {\n throw new Error(\n 'transferSuiToMany: recipients.length !== amounts.length'\n );\n }\n const tx = this.txBlock;\n const { splitedCoins, mergedCoin } = this.splitMultiCoins(\n inputCoins,\n amounts\n );\n recipients.forEach((recipient, index) => {\n tx.transferObjects([splitedCoins[index]], tx.pure(recipient));\n });\n tx.transferObjects([mergedCoin], tx.pure(sender));\n return this;\n }\n\n transferCoin(\n inputCoins: SuiObjectArg[],\n sender: string,\n recipient: string,\n amount: number\n ) {\n return this.transferCoinToMany(inputCoins, sender, [recipient], [amount]);\n }\n\n stakeSui(amount: number, validatorAddr: string) {\n const tx = this.txBlock;\n const [stakeCoin] = tx.splitCoins(tx.gas, [tx.pure(amount)]);\n tx.moveCall({\n target: '0x3::sui_system::request_add_stake',\n arguments: [\n tx.object(SUI_SYSTEM_STATE_OBJECT_ID),\n stakeCoin,\n tx.pure(validatorAddr),\n ],\n });\n return tx;\n }\n}\n","import {\n normalizeSuiObjectId,\n TransactionArgument,\n TransactionBlock,\n} from '@mysten/sui.js';\nimport { SuiTxArg, SuiInputTypes } from './types';\n\nexport const getDefaultSuiInputType = (value: any): SuiInputTypes => {\n if (typeof value === 'string' && value.startsWith('0x')) {\n return 'object';\n } else if (typeof value === 'number' || typeof value === 'bigint') {\n return 'u64';\n } else if (typeof value === 'boolean') {\n return 'bool';\n } else {\n return 'object';\n }\n};\n\n/**\n * Since we know the elements in the array are the same type\n * If type is not provided, we will try to infer the type from the first element\n * By default,\n *\n * string starting with `0x` =====> object id\n * number, bigint ====> u64\n * boolean =====> bool\n *\n *\n * If type is provided, we will use the type to convert the array\n * @param args\n * @param type 'address' | 'bool' | 'u8' | 'u16' | 'u32' | 'u64' | 'u128' | 'u256' | 'object'\n */\nexport function makeVecParam(\n txBlock: TransactionBlock,\n args: SuiTxArg[],\n type?: SuiInputTypes\n) {\n if (args.length === 0)\n throw new Error('Transaction builder error: Empty array is not allowed');\n const defaultSuiType = getDefaultSuiInputType(args[0]);\n if (type === 'object' || (!type && defaultSuiType === 'object')) {\n const objects = args.map((arg) =>\n typeof arg === 'string'\n ? txBlock.object(normalizeSuiObjectId(arg))\n : (arg as any)\n );\n return txBlock.makeMoveVec({ objects });\n } else {\n const vecType = type || defaultSuiType;\n return txBlock.pure(args, `vector<${vecType}>`);\n }\n}\n\nexport function isMoveVecArg(arg: any) {\n const isFullMoveVecArg =\n arg && arg.value && Array.isArray(arg.value) && arg.vecType;\n const isSimpleMoveVecArg = Array.isArray(arg);\n return isFullMoveVecArg || isSimpleMoveVecArg;\n}\n\nexport function convertArgs(\n txBlock: TransactionBlock,\n args: any[]\n): TransactionArgument[] {\n return args.map((arg) => {\n if (typeof arg === 'string' && arg.startsWith('0x')) {\n // We always treat string starting with `0x` as object id\n return txBlock.object(normalizeSuiObjectId(arg));\n } else if (isMoveVecArg(arg)) {\n // if it's an array arg, we will convert it to move vec\n const vecType = arg.vecType || undefined;\n return vecType\n ? makeVecParam(txBlock, arg.value, vecType)\n : makeVecParam(txBlock, arg);\n } else if (typeof arg !== 'object') {\n // Other basic types such as string, number, boolean are converted to pure value\n return txBlock.pure(arg);\n } else {\n // We do nothing, because it's most likely already a move value\n return arg;\n }\n });\n}\n","import { SuiMoveNormalizedModules} from '@mysten/sui.js';\nimport type { ContractFactoryParams, SuiMoveMoudleValueType } from './types';\nexport type ApiTypes = 'promise' | 'rxjs';\n\n// export interface ContractQuery {\n// (origin: AccountId | string | Uint8Array, options: ContractOptions, ...params: unknown[]): SuiTransactionBlockResponse<ApiType, ContractCallOutcome>;\n// }\n\n// export type MapMessageQuery<ApiType extends ApiTypes> = Record<string, ContractQuery<ApiType>>;\n\n// // function createQuery <ApiType extends ApiTypes> (meta: AbiMessage, fn: (origin: string | AccountId | Uint8Array, options: ContractOptions, params: unknown[]) => ContractCallResult<ApiType, ContractCallOutcome>): ContractQuery<ApiType> {\n// // return withMeta(meta, (origin: string | AccountId | Uint8Array, options: ContractOptions, ...params: unknown[]): ContractCallResult<ApiType, ContractCallOutcome> =>\n// // fn(origin, options, params)\n// // );\n// // }\n\n// export type MapMessageTx<ApiType extends ApiTypes> = Record<string, ContractTx<ApiType>>;\n\n// export interface ContractOptions {\n// gasLimit?: bigint | string | number | BN | WeightV2;\n// storageDepositLimit?: bigint | string | number | BN | null;\n// value?: bigint | BN | string | number;\n// }\n\n// export interface ContractTx {\n// (options: ContractOptions, ...params: unknown[]): SubmittableExtrinsic<ApiType>;\n// }\nexport class SuiContractFactory {\n public packageId: string;\n public metadata: SuiMoveNormalizedModules | undefined;\n // readonly #query: MapMessageQuery<ApiTypes> = {};\n // readonly #tx: MapMessageTx<ApiTypes> = {};\n /**\n * Support the following ways to init the SuiToolkit:\n * 1. mnemonics\n * 2. secretKey (base64 or hex)\n * If none of them is provided, will generate a random mnemonics with 24 words.\n *\n * @param mnemonics, 12 or 24 mnemonics words, separated by space\n * @param secretKey, base64 or hex string, when mnemonics is provided, secretKey will be ignored\n */\n constructor({ packageId, metadata }: ContractFactoryParams = {}) {\n // If the mnemonics or secretKey is provided, use it\n // Otherwise, generate a random mnemonics with 24 words\n this.packageId = packageId || '';\n this.metadata = metadata || undefined;\n }\n\n getFuncByModuleName(moduleName: string) {\n Object.values(this.metadata as SuiMoveNormalizedModules).forEach(\n (value) => {\n const data = value as SuiMoveMoudleValueType;\n console.log(`moudle name: ${data.name}`);\n // console.log(data.exposedFunctions)\n Object.entries(data.exposedFunctions).forEach(([key, value]) => {\n console.log(`\\tfunc name: ${key}`);\n Object.values(value.parameters).forEach((values) => {\n // console.log(values)\n });\n });\n }\n );\n }\n\n getAllFunc() {\n Object.values(this.metadata as SuiMoveNormalizedModules).forEach(\n (value) => {\n const data = value as SuiMoveMoudleValueType;\n console.log(`moudle name: ${data.name}`);\n // console.log(data.exposedFunctions)\n Object.entries(data.exposedFunctions).forEach(([key, value]) => {\n console.log(`\\tfunc name: ${key}`);\n console.log(`\\t\\t${value.parameters.length}`);\n Object.values(value.parameters).forEach((values) => {\n // console.log(values)\n console.log(`\\t\\targs: ${values}`);\n });\n });\n }\n );\n }\n\n getAllModule() {\n Object.values(this.metadata as SuiMoveNormalizedModules).forEach(\n (value, index) => {\n const data = value as SuiMoveMoudleValueType;\n console.log(`${index}. ${data.name}`);\n }\n );\n }\n async worldCall() {}\n\n // async call(arguments: ({\n // kind: \"Input\";\n // index: number;\n // type?: \"object\" | \"pure\" | undefined;\n // value?: any;\n // } | {\n // kind: \"GasCoin\";\n // } | {\n // kind: \"Result\";\n // index: number;\n // } | {\n // kind: \"NestedResult\";\n // index: number;\n // resultIndex: number;\n // })[], derivePathParams?: DerivePathParams) {\n // const tx = new TransactionBlock();\n // tx.moveCall({\n // target: `${this.packageId}::${}::${}`,\n // arguments,\n // })\n // return ;\n // }\n}\n\n// function createTx <ApiType extends ApiTypes> (meta: AbiMessage, fn: (options: ContractOptions, params: unknown[]) => SubmittableExtrinsic<ApiType>): ContractTx<ApiType> {\n// return withMeta(meta, (options: ContractOptions, ...params: unknown[]): SubmittableExtrinsic<ApiType> =>\n// fn(options, params)\n// );\n// }\n","\nimport {\n is,\n ObjectCallArg,\n ObjectId,\n TransactionArgument,\n TransactionBlock,\n normalizeSuiAddress,\n bcs,\n} from '@mysten/sui.js'\nimport { BCS } from '@mysten/bcs'\n\n/** A Move type, e.g., `address`, `bool`, `u64`, `vector<u64>`, `0x2::sui::SUI`... */\nexport type Type = string\n\nexport interface FieldsWithTypes {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n fields: Record<string, any>\n type: string\n}\n\nexport type ObjectArg = ObjectId | ObjectCallArg | TransactionArgument\nexport type PureArg =\n | bigint\n | string\n | number\n | boolean\n | null\n | TransactionArgument\n | Array<PureArg>\nexport type GenericArg = ObjectArg | PureArg | Array<ObjectArg> | Array<PureArg> | Array<GenericArg>\n\nexport function parseTypeName(name: Type): { typeName: string; typeArgs: Type[] } {\n const parsed = bcs.parseTypeName(name)\n return { typeName: parsed.name, typeArgs: parsed.params as string[] }\n}\n\nexport function obj(txb: TransactionBlock, arg: ObjectArg) {\n return is(arg, TransactionArgument) ? arg : txb.object(arg)\n}\n\nexport function pure(txb: TransactionBlock, arg: PureArg, type: Type) {\n if (is(arg, TransactionArgument)) {\n return obj(txb, arg)\n }\n\n function convertType(type: Type): string {\n const { typeName, typeArgs } = parseTypeName(type)\n switch (typeName) {\n case '0x1::string::String':\n case '0x1::ascii::String':\n return BCS.STRING\n case '0x2::object::ID':\n return BCS.ADDRESS\n case '0x1::option::Option':\n return `vector<${convertType(typeArgs[0])}>`\n case 'vector':\n return `vector<${convertType(typeArgs[0])}>`\n default:\n return type\n }\n }\n\n function isOrHasNestedTransactionArgument(arg: PureArg): boolean {\n if (Array.isArray(arg)) {\n return arg.some(item => isOrHasNestedTransactionArgument(item))\n }\n return is(arg, TransactionArgument)\n }\n\n function convertArg(arg: PureArg, type: Type): PureArg {\n const { typeName, typeArgs } = parseTypeName(type)\n if (typeName === '0x1::option::Option') {\n if (arg === null) {\n return []\n } else {\n return [convertArg(arg, typeArgs[0])]\n }\n } else if (typeName === 'vector' && Array.isArray(arg)) {\n return arg.map(item => convertArg(item, typeArgs[0]))\n } else if (typeName === '0x2::object::ID' || typeName === 'address') {\n return normalizeSuiAddress(arg as string)\n } else {\n return arg\n }\n }\n\n // handle some cases when TransactionArgument is nested within a vector or option\n const { typeName, typeArgs } = parseTypeName(type)\n switch (typeName) {\n case '0x1::option::Option':\n if (arg === null) {\n return txb.pure([], `vector<${convertType(typeArgs[0])}>`)\n }\n if (isOrHasNestedTransactionArgument(arg)) {\n throw new Error('nesting TransactionArgument is not currently supported')\n }\n break\n case 'vector':\n if (!Array.isArray(arg)) {\n throw new Error('expected an array for vector type')\n }\n if (arg.length === 0) {\n return txb.pure([], `vector<${convertType(typeArgs[0])}>`)\n }\n if (arg.some(arg => Array.isArray(arg) && isOrHasNestedTransactionArgument(arg))) {\n throw new Error('nesting TransactionArgument is not currently supported')\n }\n if (\n is(arg[0], TransactionArgument) &&\n arg.filter(arg => !is(arg, TransactionArgument)).length > 0\n ) {\n throw new Error('mixing TransactionArgument with other types is not currently supported')\n }\n if (is(arg[0], TransactionArgument)) {\n return txb.makeMoveVec({\n objects: arg as Array<TransactionArgument>,\n type: typeArgs[0],\n })\n }\n }\n\n return txb.pure(convertArg(arg, type), convertType(type))\n}\n\nexport function option(txb: TransactionBlock, type: Type, arg: GenericArg | null) {\n if (arg === null) {\n return pure(txb, arg, `0x1::option::Option<${type}>`)\n }\n\n if (typeArgIsPure(type)) {\n return pure(txb, arg as PureArg | TransactionArgument, `0x1::option::Option<${type}>`)\n } else if (is(arg, TransactionArgument)) {\n return arg\n } else {\n if (arg === null) {\n return pure(txb, arg, `vector<${type}>`)\n }\n\n // wrap it with some\n const val = generic(txb, type, arg)\n return txb.moveCall({\n target: `0x1::option::some`,\n typeArguments: [type],\n arguments: [val],\n })\n }\n}\n\nexport function generic(txb: TransactionBlock, type: Type, arg: GenericArg) {\n if (typeArgIsPure(type)) {\n return pure(txb, arg as PureArg | TransactionArgument, type)\n } else {\n const { typeName, typeArgs } = parseTypeName(type)\n if (typeName === 'vector' && Array.isArray(arg)) {\n const itemType = typeArgs[0]\n\n return txb.makeMoveVec({\n objects: arg.map(item => obj(txb, item as ObjectArg)),\n type: itemType,\n })\n } else {\n return obj(txb, arg as ObjectArg)\n }\n }\n}\n\nexport function vector(\n txb: TransactionBlock,\n itemType: Type,\n items: Array<GenericArg> | TransactionArgument\n) {\n if (typeArgIsPure(itemType)) {\n return pure(txb, items as PureArg, `vector<${itemType}>`)\n } else if (is(items, TransactionArgument)) {\n return items\n } else {\n const { typeName: itemTypeName, typeArgs: itemTypeArgs } = parseTypeName(itemType)\n if (itemTypeName === '0x1::option::Option') {\n const objects = items.map(item => option(txb, itemTypeArgs[0], item))\n return txb.makeMoveVec({\n objects,\n type: itemType,\n })\n }\n\n return txb.makeMoveVec({\n objects: items as Array<TransactionArgument>,\n type: itemType,\n })\n }\n}\n\nexport function typeArgIsPure(type: Type): boolean {\n const { typeName, typeArgs } = parseTypeName(type)\n switch (typeName) {\n case 'bool':\n case 'u8':\n case 'u16':\n case 'u32':\n case 'u64':\n case 'u128':\n case 'u256':\n case 'address':\n case 'signer':\n return true\n case 'vector':\n return typeArgIsPure(typeArgs[0])\n case '0x1::string::String':\n case '0x1::ascii::String':\n case '0x2::object::ID':\n return true\n case '0x1::option::Option':\n return typeArgIsPure(typeArgs[0])\n default:\n return false\n }\n}\n\n","import { SuiMoveNormalizedModules } from '@mysten/sui.js';\nimport { SuiRpcProvider } from '../libs/suiRpcProvider';\nimport { NetworkType } from '../libs/suiRpcProvider/types';\n\nexport async function getMetadata(networkType: NetworkType, packageId: string) {\n const rpcProvider = new SuiRpcProvider({\n networkType,\n });\n\n if (packageId !== undefined) {\n const jsonData = await rpcProvider.getNormalizedMoveModulesByPackage(packageId);\n\n return jsonData as SuiMoveNormalizedModules;\n } else {\n console.error('please set your package id.');\n }\n}\n"],"mappings":"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","names":["import_sui","import_sui","import_sui","import_sui","genMnemonic","import_sui","import_sui","import_sui","import_sui","import_sui","value","import_sui","type","typeName","typeArgs","arg","value"]}
package/dist/index.mjs CHANGED
@@ -752,8 +752,8 @@ function withMeta(meta, creator) {
752
752
  return creator;
753
753
  }
754
754
  function createQuery(meta, fn) {
755
- return withMeta(meta, async (tx, params) => {
756
- const result = await fn(tx, params);
755
+ return withMeta(meta, async (tx, params, isRaw) => {
756
+ const result = await fn(tx, params, isRaw);
757
757
  return result;
758
758
  });
759
759
  }
@@ -799,11 +799,14 @@ var Obelisk = class {
799
799
  }
800
800
  return await this.signAndSendTxn(tx);
801
801
  });
802
- __privateAdd(this, _read, async (meta, tx, params) => {
802
+ __privateAdd(this, _read, async (meta, tx, params, isRaw) => {
803
803
  tx.moveCall({
804
804
  target: `${this.contractFactory.packageId}::${meta.moudleName}::${meta.funcName}`,
805
805
  arguments: params
806
806
  });
807
+ if (isRaw === true) {
808
+ return tx;
809
+ }
807
810
  return await this.inspectTxn(tx);
808
811
  });
809
812
  this.accountManager = new SuiAccountManager({ mnemonics, secretKey });
@@ -827,7 +830,7 @@ var Obelisk = class {
827
830
  __privateGet(this, _query)[moduleName] = {};
828
831
  }
829
832
  if (isUndefined(__privateGet(this, _query)[moduleName][funcName])) {
830
- __privateGet(this, _query)[moduleName][funcName] = createQuery(meta, (tx, p) => __privateGet(this, _read).call(this, meta, tx, p));
833
+ __privateGet(this, _query)[moduleName][funcName] = createQuery(meta, (tx, p, isRaw) => __privateGet(this, _read).call(this, meta, tx, p, isRaw));
831
834
  }
832
835
  if (isUndefined(__privateGet(this, _tx)[moduleName])) {
833
836
  __privateGet(this, _tx)[moduleName] = {};
@@ -1107,44 +1110,15 @@ _exec = new WeakMap();
1107
1110
  _read = new WeakMap();
1108
1111
 
1109
1112
  // src/metadata/index.ts
1110
- import * as fs from "fs";
1111
- async function initialize(networkType, packageId) {
1112
- const folderPath = "./metadata";
1113
- fs.access(folderPath, (error) => {
1114
- if (error) {
1115
- fs.mkdir(folderPath, (mkdirError) => {
1116
- if (mkdirError) {
1117
- console.error("Create folder error:", mkdirError);
1118
- } else {
1119
- console.log("This folder already exist.");
1120
- }
1121
- });
1122
- } else {
1123
- console.log("This folder already exist.");
1124
- }
1125
- });
1126
- const jsonFileName = `${folderPath}/${packageId}.json`;
1113
+ async function getMetadata(networkType, packageId) {
1127
1114
  const rpcProvider = new SuiRpcProvider({
1128
1115
  networkType
1129
1116
  });
1130
- try {
1131
- const data = await fs.promises.readFile(jsonFileName, "utf-8");
1132
- const jsonData = JSON.parse(data);
1117
+ if (packageId !== void 0) {
1118
+ const jsonData = await rpcProvider.getNormalizedMoveModulesByPackage(packageId);
1133
1119
  return jsonData;
1134
- } catch (error) {
1135
- if (packageId !== void 0) {
1136
- const jsonData = await rpcProvider.getNormalizedMoveModulesByPackage(packageId);
1137
- fs.writeFile(jsonFileName, JSON.stringify(jsonData, null, 2), (err) => {
1138
- if (err) {
1139
- console.error("write data error:", err);
1140
- } else {
1141
- console.log("Success saved.", jsonFileName);
1142
- }
1143
- });
1144
- return jsonData;
1145
- } else {
1146
- console.error("please set your package id.");
1147
- }
1120
+ } else {
1121
+ console.error("please set your package id.");
1148
1122
  }
1149
1123
  }
1150
1124
  export {
@@ -1156,6 +1130,6 @@ export {
1156
1130
  SuiRpcProvider,
1157
1131
  SuiTxBlock,
1158
1132
  TransactionBlock5 as TransactionBlock,
1159
- initialize
1133
+ getMetadata
1160
1134
  };
1161
1135
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/obelisk.ts","../src/libs/suiAccountManager/index.ts","../src/libs/suiAccountManager/keypair.ts","../src/libs/suiAccountManager/util.ts","../src/libs/suiAccountManager/crypto.ts","../src/libs/suiRpcProvider/index.ts","../src/libs/suiRpcProvider/faucet.ts","../src/libs/suiRpcProvider/defaultChainConfigs.ts","../src/libs/suiTxBuilder/index.ts","../src/libs/suiTxBuilder/util.ts","../src/libs/suiContractFactory/index.ts","../src/framework/util.ts","../src/metadata/index.ts"],"sourcesContent":["export {\n TransactionBlock,\n SUI_CLOCK_OBJECT_ID,\n SUI_SYSTEM_STATE_OBJECT_ID,\n} from '@mysten/sui.js';\nexport { Obelisk } from './obelisk';\nexport { SuiAccountManager } from './libs/suiAccountManager';\nexport { SuiTxBlock } from './libs/suiTxBuilder';\nexport { SuiRpcProvider } from './libs/suiRpcProvider';\nexport { SuiContractFactory } from './libs/suiContractFactory';\nexport { initialize } from './metadata';\nexport type * from './types';\n","import {\n RawSigner,\n TransactionBlock,\n DevInspectResults,\n SuiTransactionBlockResponse,\n SuiMoveNormalizedModules, DynamicFieldPage, DynamicFieldName,\n} from '@mysten/sui.js';\nimport { SuiAccountManager } from './libs/suiAccountManager';\nimport { SuiRpcProvider } from './libs/suiRpcProvider';\nimport { SuiTxBlock } from './libs/suiTxBuilder';\nimport { SuiContractFactory } from './libs/suiContractFactory';\nimport { SuiMoveMoudleValueType, SuiMoveMoudleFuncType } from './libs/suiContractFactory/types';\nimport {\n ObeliskParams,\n DerivePathParams,\n SuiTxArg, SuiVecTxArg,\n ComponentContentType,\n SuiTxArgument, ContractQuery,\n ContractTx, MapMoudleFuncQuery,\n MapMoudleFuncTx\n} from './types';\nimport {ObjectArg, obj, pure} from \"./framework/util\";\n\n\nexport function isUndefined (value?: unknown): value is undefined {\n return value === undefined;\n}\n\nexport function withMeta<T extends { meta: SuiMoveMoudleFuncType }>(meta: SuiMoveMoudleFuncType,creator: Omit<T, 'meta'>): T {\n (creator as T).meta = meta\n\n return creator as T;\n}\n\nfunction createQuery(\n meta: SuiMoveMoudleFuncType,\n fn: (tx: TransactionBlock, params: SuiTxArgument[]) => Promise<DevInspectResults>\n): ContractQuery {\n return withMeta(meta, async (tx: TransactionBlock, params: SuiTxArgument[]): Promise<DevInspectResults> => {\n const result = await fn(tx, params);\n return result;\n });\n}\n\nfunction createTx(\n meta: SuiMoveMoudleFuncType,\n fn: (tx: TransactionBlock, params: SuiTxArgument[], isRaw?: boolean) => Promise<SuiTransactionBlockResponse | TransactionBlock>\n): ContractTx {\n return withMeta(meta, async (tx: TransactionBlock, params: SuiTxArgument[], isRaw?: boolean): Promise<SuiTransactionBlockResponse | TransactionBlock> => {\n const result = await fn(tx, params, isRaw);\n return result;\n });\n}\n\n/**\n * @class Obelisk\n * @description This class is used to aggregate the tools that used to interact with SUI network.\n */\nexport class Obelisk {\n public accountManager: SuiAccountManager;\n public rpcProvider: SuiRpcProvider;\n public contractFactory: SuiContractFactory;\n public packageId: string | undefined;\n // public needLoad: boolean | undefined;\n public metadata: SuiMoveNormalizedModules;\n public epsId: string;\n public componentsId: string;\n\n readonly #query: MapMoudleFuncQuery = {};\n readonly #tx: MapMoudleFuncTx = {};\n /**\n * Support the following ways to init the SuiToolkit:\n * 1. mnemonics\n * 2. secretKey (base64 or hex)\n * If none of them is provided, will generate a random mnemonics with 24 words.\n *\n * @param mnemonics, 12 or 24 mnemonics words, separated by space\n * @param secretKey, base64 or hex string, when mnemonics is provided, secretKey will be ignored\n * @param networkType, 'testnet' | 'mainnet' | 'devnet' | 'localnet', default is 'devnet'\n * @param fullnodeUrl, the fullnode url, default is the preconfig fullnode url for the given network type\n * @param faucetUrl, the faucet url, default is the preconfig faucet url for the given network type\n * @param packageId\n */\n constructor({\n mnemonics,\n secretKey,\n networkType,\n fullnodeUrl,\n faucetUrl,\n packageId,\n metadata\n }: ObeliskParams = {}) {\n // Init the account manager\n this.accountManager = new SuiAccountManager({ mnemonics, secretKey });\n // Init the rpc provider\n this.rpcProvider = new SuiRpcProvider({\n fullnodeUrl,\n faucetUrl,\n networkType,\n });\n\n this.epsId = \"0xf2196f638c3174e18c0e31aa630a02fd516c2c5deec1ded72c0fea864c9f091a\"\n this.componentsId = \"0x3bc407eb543149e42846ade59ac2a3c901584af4339dc1ecd0affd090529545f\"\n this.packageId = packageId;\n this.metadata = metadata as SuiMoveNormalizedModules;\n Object.values(metadata as SuiMoveNormalizedModules).forEach(value => {\n let data = value as SuiMoveMoudleValueType;\n let moduleName = data.name;\n Object.entries(data.exposedFunctions).forEach(([funcName, value]) => {\n let meta = value as SuiMoveMoudleFuncType;\n meta.moudleName = moduleName;\n meta.funcName = funcName;\n\n if (isUndefined(this.#query[moduleName])) {\n this.#query[moduleName] = {};\n }\n if (isUndefined(this.#query[moduleName][funcName])) {\n this.#query[moduleName][funcName] = createQuery(meta, (tx, p) => this.#read(meta, tx, p))\n }\n\n if (isUndefined(this.#tx[moduleName])) {\n this.#tx[moduleName] = {};\n }\n if (isUndefined(this.#tx[moduleName][funcName])) {\n this.#tx[moduleName][funcName] = createTx(meta, (tx, p, isRaw) => this.#exec(meta, tx, p, isRaw))\n }\n });\n })\n\n this.contractFactory = new SuiContractFactory({\n packageId,\n metadata\n })\n }\n\n // async initialize() {\n // const metadata = await this.loadData();\n // this.metadata = metadata as SuiMoveNormalizedModules;\n // this.contractFactory = new SuiContractFactory({\n // packageId: this.packageId,\n // metadata: this.metadata\n // })\n // return metadata\n // }\n\n public get query (): MapMoudleFuncQuery {\n return this.#query;\n }\n\n public get tx (): MapMoudleFuncTx {\n return this.#tx;\n }\n\n #exec = async (meta: SuiMoveMoudleFuncType, tx: TransactionBlock, params: SuiTxArgument[], isRaw?: boolean) => {\n tx.moveCall({\n target: `${this.contractFactory.packageId}::${meta.moudleName}::${meta.funcName}`,\n arguments: params,\n })\n\n if (isRaw === true) {\n return tx;\n }\n return await this.signAndSendTxn(tx);\n };\n\n\n #read = async (meta: SuiMoveMoudleFuncType, tx: TransactionBlock, params: SuiTxArgument[]) => {\n tx.moveCall({\n target: `${this.contractFactory.packageId}::${meta.moudleName}::${meta.funcName}`,\n arguments: params,\n })\n return await this.inspectTxn(tx);\n };\n /**\n * if derivePathParams is not provided or mnemonics is empty, it will return the currentSigner.\n * else:\n * it will generate signer from the mnemonic with the given derivePathParams.\n * @param derivePathParams, such as { accountIndex: 2, isExternal: false, addressIndex: 10 }, comply with the BIP44 standard\n */\n getSigner(derivePathParams?: DerivePathParams) {\n const keyPair = this.accountManager.getKeyPair(derivePathParams);\n return new RawSigner(keyPair, this.rpcProvider.provider);\n }\n\n /**\n * @description Switch the current account with the given derivePathParams\n * @param derivePathParams, such as { accountIndex: 2, isExternal: false, addressIndex: 10 }, comply with the BIP44 standard\n */\n switchAccount(derivePathParams: DerivePathParams) {\n this.accountManager.switchAccount(derivePathParams);\n }\n\n /**\n * @description Get the address of the account for the given derivePathParams\n * @param derivePathParams, such as { accountIndex: 2, isExternal: false, addressIndex: 10 }, comply with the BIP44 standard\n */\n getAddress(derivePathParams?: DerivePathParams) {\n return this.accountManager.getAddress(derivePathParams);\n }\n currentAddress() {\n return this.accountManager.currentAddress;\n }\n\n provider() {\n return this.rpcProvider.provider;\n }\n\n getPackageId() {\n return this.contractFactory.packageId;\n }\n\n getMetadata() {\n return this.contractFactory.metadata\n }\n /**\n * Request some SUI from faucet\n * @Returns {Promise<boolean>}, true if the request is successful, false otherwise.\n */\n async requestFaucet(derivePathParams?: DerivePathParams) {\n const addr = this.accountManager.getAddress(derivePathParams);\n return this.rpcProvider.requestFaucet(addr);\n }\n\n async getBalance(coinType?: string, derivePathParams?: DerivePathParams) {\n const owner = this.accountManager.getAddress(derivePathParams);\n return this.rpcProvider.getBalance(owner, coinType);\n }\n\n async getObject(objectId: string) {\n return this.rpcProvider.getObject(objectId);\n }\n\n async getObjects(objectIds: string[]) {\n return this.rpcProvider.getObjects(objectIds);\n }\n\n async signTxn(\n tx: Uint8Array | TransactionBlock | SuiTxBlock,\n derivePathParams?: DerivePathParams\n ) {\n tx = tx instanceof SuiTxBlock ? tx.txBlock : tx;\n const signer = this.getSigner(derivePathParams);\n return signer.signTransactionBlock({ transactionBlock: tx });\n }\n\n async signAndSendTxn(\n tx: Uint8Array | TransactionBlock | SuiTxBlock,\n derivePathParams?: DerivePathParams\n ): Promise<SuiTransactionBlockResponse> {\n tx = tx instanceof SuiTxBlock ? tx.txBlock : tx;\n const signer = this.getSigner(derivePathParams);\n return signer.signAndExecuteTransactionBlock({\n transactionBlock: tx,\n options: {\n showEffects: true,\n showEvents: true,\n showObjectChanges: true,\n },\n });\n }\n\n /**\n * Transfer the given amount of SUI to the recipient\n * @param recipient\n * @param amount\n * @param derivePathParams\n */\n async transferSui(\n recipient: string,\n amount: number,\n derivePathParams?: DerivePathParams\n ) {\n const tx = new SuiTxBlock();\n tx.transferSui(recipient, amount);\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n /**\n * Transfer to mutliple recipients\n * @param recipients the recipients addresses\n * @param amounts the amounts of SUI to transfer to each recipient, the length of amounts should be the same as the length of recipients\n * @param derivePathParams\n */\n async transferSuiToMany(\n recipients: string[],\n amounts: number[],\n derivePathParams?: DerivePathParams\n ) {\n const tx = new SuiTxBlock();\n tx.transferSuiToMany(recipients, amounts);\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n /**\n * Transfer the given amounts of coin to multiple recipients\n * @param recipients the list of recipient address\n * @param amounts the amounts to transfer for each recipient\n * @param coinType any custom coin type but not SUI\n * @param derivePathParams the derive path params for the current signer\n */\n async transferCoinToMany(\n recipients: string[],\n amounts: number[],\n coinType: string,\n derivePathParams?: DerivePathParams\n ) {\n const tx = new SuiTxBlock();\n const owner = this.accountManager.getAddress(derivePathParams);\n const totalAmount = amounts.reduce((a, b) => a + b, 0);\n const coins = await this.rpcProvider.selectCoins(\n owner,\n totalAmount,\n coinType\n );\n tx.transferCoinToMany(\n coins.map((c) => c.objectId),\n owner,\n recipients,\n amounts\n );\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n async transferCoin(\n recipient: string,\n amount: number,\n coinType: string,\n derivePathParams?: DerivePathParams\n ) {\n return this.transferCoinToMany(\n [recipient],\n [amount],\n coinType,\n derivePathParams\n );\n }\n\n async transferObjects(\n objects: string[],\n recipient: string,\n derivePathParams?: DerivePathParams\n ) {\n const tx = new SuiTxBlock();\n tx.transferObjects(objects, recipient);\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n async moveCall(callParams: {\n target: string;\n arguments?: (SuiTxArg | SuiVecTxArg)[];\n typeArguments?: string[];\n derivePathParams?: DerivePathParams;\n }) {\n const {\n target,\n arguments: args = [],\n typeArguments = [],\n derivePathParams,\n } = callParams;\n const tx = new SuiTxBlock();\n tx.moveCall(target, args, typeArguments);\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n /**\n * Select coins with the given amount and coin type, the total amount is greater than or equal to the given amount\n * @param amount\n * @param coinType\n * @param owner\n */\n async selectCoinsWithAmount(\n amount: number,\n coinType: string,\n owner?: string\n ) {\n owner = owner || this.accountManager.currentAddress;\n const coins = await this.rpcProvider.selectCoins(owner, amount, coinType);\n return coins.map((c) => c.objectId);\n }\n\n /**\n * stake the given amount of SUI to the validator\n * @param amount the amount of SUI to stake\n * @param validatorAddr the validator address\n * @param derivePathParams the derive path params for the current signer\n */\n async stakeSui(\n amount: number,\n validatorAddr: string,\n derivePathParams?: DerivePathParams\n ) {\n const tx = new SuiTxBlock();\n tx.stakeSui(amount, validatorAddr);\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n /**\n * Execute the transaction with on-chain data but without really submitting. Useful for querying the effects of a transaction.\n * Since the transaction is not submitted, its gas cost is not charged.\n * @param tx the transaction to execute\n * @param derivePathParams the derive path params\n * @returns the effects and events of the transaction, such as object changes, gas cost, event emitted.\n */\n async inspectTxn(\n tx: Uint8Array | TransactionBlock | SuiTxBlock,\n derivePathParams?: DerivePathParams\n ): Promise<DevInspectResults> {\n\n tx = tx instanceof SuiTxBlock ? tx.txBlock : tx;\n return this.rpcProvider.provider.devInspectTransactionBlock({\n transactionBlock: tx,\n sender: this.getAddress(derivePathParams),\n });\n }\n\n async getBirthTime(objectId: string, derivePathParams?: DerivePathParams) {\n const tx = new TransactionBlock();\n\n tx.moveCall({\n // target: `0x12b216923e5454e1f076ccb5fc638b59f8aba2175c34df9899de71124d66badd::status_system::get_pet_state`,\n target: `0x6afbf113a5872b781a2a0068b95c0d9d0ee89428518fdd65f862c841eab45b82::pet_system::get_pet_basic_info`,\n arguments: [\n // tx.pure(\"0x6fa43c68221960f942572905f3c198a5bccaa0700506b3b6bd83dd9b007e6324\"),\n // tx.pure(\"0xbf64721f0961a0426ccde6b8d9343e2cb2c26a105a5c33e57074580fd98b2cb1\"),\n // tx.pure(\"0x6\"),\n\n obj(tx, \"0x26804211486be597a89c46c16b929d7031fb7c701ecf89d4c750e49459b4bea2\"),\n pure(tx, \"0x35ba3bfb8590dbd060f41cd58c7b140d67efd2126648409cd231c74cff2828b8\", `0x2::object::ID`),\n obj(tx, \"0x6\")\n ],\n })\n return await this.inspectTxn(tx, derivePathParams);\n }\n\n async getWorld(worldObjectId: string) {\n return this.rpcProvider.getObject(worldObjectId)\n }\n\n async getAllEntities(worldId: string, cursor?: string, limit?: number) {\n const parentId = (await this.rpcProvider.getObject(worldId)).objectFields.entities.fields.id.id;\n return await this.rpcProvider.getDynamicFields(parentId, cursor, limit) as DynamicFieldPage;\n }\n\n async getEntity(worldId: string, entityId: string) {\n const parentId = (await this.rpcProvider.getObject(worldId)).objectFields.entities.fields.id.id;\n\n const name = {\n type: \"0x2::object::ID\",\n value: entityId\n } as DynamicFieldName\n return await this.rpcProvider.getDynamicFieldObject(parentId, name);\n }\n\n async getEntityComponents(worldId: string, entityId: string, cursor?: string, limit?: number) {\n const parentContent = (await this.getEntity(worldId, entityId)).data!.content as ComponentContentType;\n const parentId = parentContent.fields.value.fields.components.fields.id.id;\n return await this.rpcProvider.getDynamicFields(parentId, cursor, limit) as DynamicFieldPage;\n }\n\n async getEntityComponent(entityId: string, componentId: string) {\n const parentId = (await this.rpcProvider.getObject(entityId)).objectFields.id.id;\n\n const name = {\n type: \"0x2::object::ID\",\n value: componentId\n } as DynamicFieldName\n return await this.rpcProvider.getDynamicFieldObject(parentId, name);\n }\n\n\n // async loadData() {\n // const jsonFileName = `metadata/${this.packageId}.json`;\n\n // try {\n // const data = await fs.promises.readFile(jsonFileName, 'utf-8');\n // const jsonData = JSON.parse(data);\n\n // return jsonData as SuiMoveNormalizedModules;\n // } catch (error) {\n // if (this.packageId !== undefined) {\n // const jsonData = await this.rpcProvider.getNormalizedMoveModulesByPackage(this.packageId);\n\n // fs.writeFile(jsonFileName, JSON.stringify(jsonData, null, 2), (err) => {\n // if (err) {\n // console.error('写入文件时出错:', err);\n // } else {\n // console.log('JSON 数据已保存到文件:', jsonFileName);\n // }\n // });\n // return jsonData as SuiMoveNormalizedModules;\n // } else {\n // console.error('please set your package id.');\n // }\n // }\n // }\n}\n","import { Ed25519Keypair } from '@mysten/sui.js';\nimport { getKeyPair } from './keypair';\nimport { hexOrBase64ToUint8Array, normalizePrivateKey } from './util';\nimport { generateMnemonic } from './crypto';\nimport type { AccountMangerParams, DerivePathParams } from './types';\n\nexport class SuiAccountManager {\n private mnemonics: string;\n private secretKey: string;\n public currentKeyPair: Ed25519Keypair;\n public currentAddress: string;\n\n /**\n * Support the following ways to init the SuiToolkit:\n * 1. mnemonics\n * 2. secretKey (base64 or hex)\n * If none of them is provided, will generate a random mnemonics with 24 words.\n *\n * @param mnemonics, 12 or 24 mnemonics words, separated by space\n * @param secretKey, base64 or hex string, when mnemonics is provided, secretKey will be ignored\n */\n constructor({ mnemonics, secretKey }: AccountMangerParams = {}) {\n // If the mnemonics or secretKey is provided, use it\n // Otherwise, generate a random mnemonics with 24 words\n this.mnemonics = mnemonics || '';\n this.secretKey = secretKey || '';\n if (!this.mnemonics && !this.secretKey) {\n this.mnemonics = generateMnemonic(24);\n }\n\n // Init the current account\n this.currentKeyPair = this.secretKey\n ? Ed25519Keypair.fromSecretKey(\n normalizePrivateKey(hexOrBase64ToUint8Array(this.secretKey))\n )\n : getKeyPair(this.mnemonics);\n this.currentAddress = this.currentKeyPair.getPublicKey().toSuiAddress();\n }\n\n /**\n * if derivePathParams is not provided or mnemonics is empty, it will return the currentKeyPair.\n * else:\n * it will generate keyPair from the mnemonic with the given derivePathParams.\n */\n getKeyPair(derivePathParams?: DerivePathParams) {\n if (!derivePathParams || !this.mnemonics) return this.currentKeyPair;\n return getKeyPair(this.mnemonics, derivePathParams);\n }\n\n /**\n * if derivePathParams is not provided or mnemonics is empty, it will return the currentAddress.\n * else:\n * it will generate address from the mnemonic with the given derivePathParams.\n */\n getAddress(derivePathParams?: DerivePathParams) {\n if (!derivePathParams || !this.mnemonics) return this.currentAddress;\n return getKeyPair(this.mnemonics, derivePathParams)\n .getPublicKey()\n .toSuiAddress();\n }\n\n /**\n * Switch the current account with the given derivePathParams.\n * This is only useful when the mnemonics is provided. For secretKey mode, it will always use the same account.\n */\n switchAccount(derivePathParams: DerivePathParams) {\n if (this.mnemonics) {\n this.currentKeyPair = getKeyPair(this.mnemonics, derivePathParams);\n this.currentAddress = this.currentKeyPair.getPublicKey().toSuiAddress();\n }\n }\n}\n","import { Ed25519Keypair } from '@mysten/sui.js';\nimport type { DerivePathParams } from './types';\n\n/**\n * @description Get ed25519 derive path for SUI\n * @param derivePathParams\n */\nexport const getDerivePathForSUI = (\n derivePathParams: DerivePathParams = {}\n) => {\n const {\n accountIndex = 0,\n isExternal = false,\n addressIndex = 0,\n } = derivePathParams;\n return `m/44'/784'/${accountIndex}'/${isExternal ? 1 : 0}'/${addressIndex}'`;\n};\n\n/**\n * the format is m/44'/784'/accountIndex'/${isExternal ? 1 : 0}'/addressIndex'\n *\n * accountIndex is the index of the account, default is 0.\n *\n * isExternal is the type of the address, default is false. Usually, the external address is used to receive coins. The internal address is used to change coins.\n *\n * addressIndex is the index of the address, default is 0. It's used to generate multiple addresses for one account.\n *\n * @description Get keypair from mnemonics and derive path\n * @param mnemonics\n * @param derivePathParams\n */\nexport const getKeyPair = (\n mnemonics: string,\n derivePathParams: DerivePathParams = {}\n) => {\n const derivePath = getDerivePathForSUI(derivePathParams);\n return Ed25519Keypair.deriveKeypair(mnemonics, derivePath);\n};\n","import { fromB64 } from '@mysten/sui.js';\n\n/**\n * @description This regular expression matches any string that contains only hexadecimal digits (0-9, A-F, a-f).\n * @param str\n */\nexport const isHex = (str: string) =>\n /^0x[0-9a-fA-F]+$|^[0-9a-fA-F]+$/.test(str);\n\n/**\n * @description This regular expression matches any string that contains only base64 digits (0-9, A-Z, a-z, +, /, =).\n * Note that the \"=\" signs at the end are optional padding characters that may be present in some base64 encoded strings.\n * @param str\n */\nexport const isBase64 = (str: string) => /^[a-zA-Z0-9+/]+={0,2}$/g.test(str);\n\n/**\n * Convert a hex string to Uint8Array\n * @param hexStr\n */\nexport const fromHEX = (hexStr: string): Uint8Array => {\n if (!hexStr) {\n throw new Error('cannot parse empty string to Uint8Array');\n }\n const intArr = hexStr\n .replace('0x', '')\n .match(/.{1,2}/g)\n ?.map((byte) => parseInt(byte, 16));\n\n if (!intArr || intArr.length === 0) {\n throw new Error(`Unable to parse HEX: ${hexStr}`);\n }\n return Uint8Array.from(intArr);\n};\n\n/**\n * @description Convert a hex or base64 string to Uint8Array\n */\nexport const hexOrBase64ToUint8Array = (str: string): Uint8Array => {\n if (isHex(str)) {\n return fromHEX(str);\n } else if (isBase64(str)) {\n return fromB64(str);\n } else {\n throw new Error('The string is not a valid hex or base64 string.');\n }\n};\n\nconst PRIVATE_KEY_SIZE = 32;\nconst LEGACY_PRIVATE_KEY_SIZE = 64;\n/**\n * normalize a private key\n * A private key is a 32-byte array.\n * But there are two different formats for private keys:\n * 1. A 32-byte array\n * 2. A 64-byte array with the first 32 bytes being the private key and the last 32 bytes being the public key\n * 3. A 33-byte array with the first byte being 0x00 (sui.keystore key is a Base64 string with scheme flag 0x00 at the beginning)\n */\nexport const normalizePrivateKey = (key: Uint8Array): Uint8Array => {\n if (key.length === LEGACY_PRIVATE_KEY_SIZE) {\n // This is a legacy secret key, we need to strip the public key bytes and only read the first 32 bytes\n key = key.slice(0, PRIVATE_KEY_SIZE);\n } else if (key.length === PRIVATE_KEY_SIZE + 1 && key[0] === 0) {\n // sui.keystore key is a Base64 string with scheme flag 0x00 at the beginning\n return key.slice(1);\n } else if (key.length === PRIVATE_KEY_SIZE) {\n return key;\n }\n throw new Error('invalid secret key');\n};\n","import { generateMnemonic as genMnemonic } from '@scure/bip39';\nimport { wordlist } from '@scure/bip39/wordlists/english';\n\nexport const generateMnemonic = (numberOfWords: 12 | 24 = 24) => {\n const strength = numberOfWords === 12 ? 128 : 256;\n return genMnemonic(wordlist, strength);\n};\n","import {\n Connection,\n JsonRpcProvider,\n getObjectType,\n getObjectId,\n getObjectFields,\n getObjectDisplay,\n getObjectVersion,\n DynamicFieldName\n} from '@mysten/sui.js';\nimport { requestFaucet } from './faucet';\nimport { getDefaultNetworkParams } from './defaultChainConfigs';\nimport type { ObjectData, SuiRpcProviderParams } from './types';\n\nexport class SuiRpcProvider {\n public fullnodeUrl: string;\n public faucetUrl?: string;\n public provider: JsonRpcProvider;\n /**\n *\n * @param networkType, 'testnet' | 'mainnet' | 'devnet' | 'localnet', default is 'devnet'\n * @param fullnodeUrl, the fullnode url, default is the preconfig fullnode url for the given network type\n * @param faucetUrl, the faucet url, default is the preconfig faucet url for the given network type\n */\n constructor({\n fullnodeUrl,\n faucetUrl,\n networkType,\n }: SuiRpcProviderParams = {}) {\n // Get the default fullnode url and faucet url for the given network type, default is 'testnet'\n const defaultNetworkParams = getDefaultNetworkParams(\n networkType || 'devnet'\n );\n // Set fullnodeUrl and faucetUrl, if they are not provided, use the default value.\n this.fullnodeUrl = fullnodeUrl || defaultNetworkParams.fullnode;\n this.faucetUrl = faucetUrl || defaultNetworkParams.faucet;\n\n // Init the provider\n const connection = new Connection({\n fullnode: this.fullnodeUrl,\n faucet: this.faucetUrl,\n });\n this.provider = new JsonRpcProvider(connection);\n }\n\n /**\n * Request some SUI from faucet\n * @Returns {Promise<boolean>}, true if the request is successful, false otherwise.\n */\n async requestFaucet(addr: string) {\n return requestFaucet(addr, this.provider);\n }\n\n async getBalance(addr: string, coinType?: string) {\n return this.provider.getBalance({ owner: addr, coinType });\n }\n\n\n async getDynamicFieldObject(parentId: string, name: string | DynamicFieldName) {\n return this.provider.getDynamicFieldObject({ parentId, name })\n }\n\n async getDynamicFields(parentId: string, cursor?: string, limit?: number) {\n return this.provider.getDynamicFields({ parentId, cursor, limit })\n }\n\n async getObject(id: string) {\n const options = { showContent: true, showDisplay: true, showType: true };\n const object = await this.provider.getObject({ id, options });\n const objectId = getObjectId(object);\n const objectType = getObjectType(object);\n const objectVersion = getObjectVersion(object);\n const objectFields = getObjectFields(object);\n const objectDisplay = getObjectDisplay(object);\n return {\n objectId,\n objectType,\n objectVersion,\n objectFields,\n objectDisplay,\n } as ObjectData;\n }\n\n async getObjects(ids: string[]) {\n const options = { showContent: true, showDisplay: true, showType: true };\n const objects = await this.provider.multiGetObjects({ ids, options });\n const parsedObjects = objects.map((object) => {\n const objectId = getObjectId(object);\n const objectType = getObjectType(object);\n const objectVersion = getObjectVersion(object);\n const objectFields = getObjectFields(object);\n const objectDisplay = getObjectDisplay(object);\n return {\n objectId,\n objectType,\n objectVersion,\n objectFields,\n objectDisplay,\n };\n });\n return parsedObjects as ObjectData[];\n }\n\n async getNormalizedMoveModulesByPackage(packageId: string) {\n return this.provider.getNormalizedMoveModulesByPackage({package: packageId});\n }\n\n /**\n * @description Select coins that add up to the given amount.\n * @param addr the address of the owner\n * @param amount the amount that is needed for the coin\n * @param coinType the coin type, default is '0x2::SUI::SUI'\n */\n async selectCoins(\n addr: string,\n amount: number,\n coinType: string = '0x2::SUI::SUI'\n ) {\n const coins = await this.provider.getCoins({ owner: addr, coinType });\n const selectedCoins: {\n objectId: string;\n digest: string;\n version: string;\n }[] = [];\n let totalAmount = 0;\n // Sort the coins by balance in descending order\n coins.data.sort((a, b) => parseInt(b.balance) - parseInt(a.balance));\n for (const coinData of coins.data) {\n selectedCoins.push({\n objectId: coinData.coinObjectId,\n digest: coinData.digest,\n version: coinData.version,\n });\n totalAmount = totalAmount + parseInt(coinData.balance);\n if (totalAmount >= amount) {\n break;\n }\n }\n\n if (!selectedCoins.length) {\n throw new Error('No valid coins found for the transaction.');\n }\n return selectedCoins;\n }\n}\n","import {\n JsonRpcProvider,\n FaucetRateLimitError,\n assert,\n FaucetResponse,\n} from '@mysten/sui.js';\nimport { retry } from 'ts-retry-promise';\n\n/**\n * Request some SUI from faucet\n * @param address\n * @param provider\n * @returns {Promise<boolean>}, return true if the request is successful\n */\nexport const requestFaucet = async (\n address: string,\n provider: JsonRpcProvider\n) => {\n console.log('\\nRequesting SUI from faucet for address: ', address);\n const headers = {\n authority: 'faucet.testnet.sui.io',\n method: 'POST',\n path: '/gas',\n scheme: 'https',\n accept: '*/*',\n 'accept-encoding': 'gzip, deflate, br',\n 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,ja;q=0.7',\n 'content-length': '105',\n 'content-type': 'application/json',\n origin: 'chrome-extension://opcgpfmipidbgpenhmajoajpbobppdil',\n cookie:\n '_ga=GA1.1.2092533979.1664032306; sui_io_cookie={\"level\":[\"necessary\",\"analytics\"],\"revision\":0,\"data\":null,\"rfc_cookie\":false}; _ga_YKP53WJMB0=GS1.1.1680531285.31.0.1680531334.11.0.0; _ga_0GW4F97GFL=GS1.1.1680826187.125.0.1680826187.60.0.0; __cf_bm=6rPjXUwuzUPy4yDlZuXgDj0v7xLPpUd5z0CFGCoN_YI-1680867579-0-AZMhU7/mKUUbUlOa27LmfW6eIFkBkXsPKqYgWjpjWpj2XzDckgUsRu/pxSRGfvXCspn3w7Df+uO1MR/b+XikJU0=; _cfuvid=zjwCXMmu19KBIVo_L9Qbq4TqFXJpophG3.EvFTxqdf4-1680867579342-0-604800000',\n 'sec-ch-ua':\n '\"Google Chrome\";v=\"111\", \"Not(A:Brand\";v=\"8\", \"Chromium\";v=\"111\"',\n 'sec-ch-ua-mobile': '?0',\n 'sec-ch-ua-platform': 'macOS',\n 'sec-fetch-dest': 'empty',\n 'sec-fetch-mode': 'cors',\n 'sec-fetch-site': 'none',\n 'user-agent':\n 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36',\n };\n // We need to add the following headers to the request, otherwise the request will be rejected by the faucet server\n const resp = await retry<FaucetResponse>(\n () => provider.requestSuiFromFaucet(address, headers),\n {\n backoff: 'EXPONENTIAL',\n // overall timeout in 60 seconds\n timeout: 1000 * 60,\n // skip retry if we hit the rate-limit error\n retryIf: (error: any) => !(error instanceof FaucetRateLimitError),\n logger: (msg) => console.warn(`Retry requesting faucet: ${msg}`),\n }\n );\n assert(resp, FaucetResponse, 'Request faucet failed\\n');\n console.log('Request faucet success\\n');\n};\n","import {\n localnetConnection,\n devnetConnection,\n testnetConnection,\n mainnetConnection,\n} from '@mysten/sui.js';\nimport type { Connection } from '@mysten/sui.js';\nimport type { NetworkType } from './types';\n\n/**\n * @description Get the default fullnode url and faucet url for the given network type\n * @param networkType, 'testnet' | 'mainnet' | 'devnet' | 'localnet', default is 'devnet'\n * @returns { fullNode: string, websocket: string, faucet?: string }\n */\nexport const getDefaultNetworkParams = (\n networkType: NetworkType = 'devnet'\n): Connection => {\n switch (networkType) {\n case 'localnet':\n return localnetConnection;\n case 'devnet':\n return devnetConnection;\n case 'testnet':\n return testnetConnection;\n case 'mainnet':\n return mainnetConnection;\n default:\n return devnetConnection;\n }\n};\n","import {\n TransactionBlock,\n SUI_SYSTEM_STATE_OBJECT_ID,\n TransactionExpiration,\n SuiObjectRef,\n SharedObjectRef,\n JsonRpcProvider,\n TransactionType,\n Transactions,\n ObjectCallArg,\n} from '@mysten/sui.js';\nimport { convertArgs } from './util';\nimport type { SuiTxArg, SuiObjectArg, SuiVecTxArg } from './types';\n\nexport class SuiTxBlock {\n public txBlock: TransactionBlock;\n constructor(transaction?: TransactionBlock) {\n this.txBlock = new TransactionBlock(transaction);\n }\n\n //======== override methods of TransactionBlock ============\n\n address(value: string) {\n return this.txBlock.pure(value, 'address');\n }\n pure(value: unknown, type?: string) {\n return this.txBlock.pure(value, type);\n }\n object(value: string | ObjectCallArg) {\n return this.txBlock.object(value);\n }\n objectRef(ref: SuiObjectRef) {\n return this.txBlock.objectRef(ref);\n }\n sharedObjectRef(ref: SharedObjectRef) {\n return this.txBlock.sharedObjectRef(ref);\n }\n setSender(sender: string) {\n return this.txBlock.setSender(sender);\n }\n setSenderIfNotSet(sender: string) {\n return this.txBlock.setSenderIfNotSet(sender);\n }\n setExpiration(expiration?: TransactionExpiration) {\n return this.txBlock.setExpiration(expiration);\n }\n setGasPrice(price: number | bigint) {\n return this.txBlock.setGasPrice(price);\n }\n setGasBudget(budget: number | bigint) {\n return this.txBlock.setGasBudget(budget);\n }\n setGasOwner(owner: string) {\n return this.txBlock.setGasOwner(owner);\n }\n setGasPayment(payments: SuiObjectRef[]) {\n return this.txBlock.setGasPayment(payments);\n }\n\n add(transaction: TransactionType) {\n return this.txBlock.add(transaction);\n }\n serialize() {\n return this.txBlock.serialize();\n }\n build(\n params: {\n provider?: JsonRpcProvider;\n onlyTransactionKind?: boolean;\n } = {}\n ) {\n return this.txBlock.build(params);\n }\n getDigest({ provider }: { provider?: JsonRpcProvider } = {}) {\n return this.txBlock.getDigest({ provider });\n }\n\n get gas() {\n return this.txBlock.gas;\n }\n get blockData() {\n return this.txBlock.blockData;\n }\n\n transferObjects(objects: SuiObjectArg[], recipient: string) {\n const tx = this.txBlock;\n tx.transferObjects(convertArgs(this.txBlock, objects), tx.pure(recipient));\n return this;\n }\n splitCoins(coin: SuiObjectArg, amounts: number[]) {\n const tx = this.txBlock;\n const coinObject = convertArgs(this.txBlock, [coin])[0];\n const res = tx.splitCoins(\n coinObject,\n amounts.map((m) => tx.pure(m))\n );\n return amounts.map((_, i) => res[i]);\n }\n mergeCoins(destination: SuiObjectArg, sources: SuiObjectArg[]) {\n const destinationObject = convertArgs(this.txBlock, [destination])[0];\n const sourceObjects = convertArgs(this.txBlock, sources);\n return this.txBlock.mergeCoins(destinationObject, sourceObjects);\n }\n publish(...args: Parameters<(typeof Transactions)['Publish']>) {\n return this.txBlock.publish(...args);\n }\n upgrade(...args: Parameters<(typeof Transactions)['Upgrade']>) {\n return this.txBlock.upgrade(...args);\n }\n makeMoveVec(...args: Parameters<(typeof Transactions)['MakeMoveVec']>) {\n return this.txBlock.makeMoveVec(...args);\n }\n\n /**\n * @description Move call\n * @param target `${string}::${string}::${string}`, e.g. `0x3::sui_system::request_add_stake`\n * @param args the arguments of the move call, such as `['0x1', '0x2']`\n * @param typeArgs the type arguments of the move call, such as `['0x2::sui::SUI']`\n */\n moveCall(\n target: string,\n args: (SuiTxArg | SuiVecTxArg)[] = [],\n typeArgs: string[] = []\n ) {\n // a regex for pattern `${string}::${string}::${string}`\n const regex =\n /(?<package>[a-zA-Z0-9]+)::(?<module>[a-zA-Z0-9_]+)::(?<function>[a-zA-Z0-9_]+)/;\n const match = target.match(regex);\n if (match === null)\n throw new Error(\n 'Invalid target format. Expected `${string}::${string}::${string}`'\n );\n const convertedArgs = convertArgs(this.txBlock, args);\n const tx = this.txBlock;\n return tx.moveCall({\n target: target as `${string}::${string}::${string}`,\n arguments: convertedArgs,\n typeArguments: typeArgs,\n });\n }\n\n //======== enhance methods ============\n transferSuiToMany(recipients: string[], amounts: number[]) {\n // require recipients.length === amounts.length\n if (recipients.length !== amounts.length) {\n throw new Error(\n 'transferSuiToMany: recipients.length !== amounts.length'\n );\n }\n\n const tx = this.txBlock;\n const coins = tx.splitCoins(\n tx.gas,\n amounts.map((amount) => tx.pure(amount))\n );\n recipients.forEach((recipient, index) => {\n tx.transferObjects([coins[index]], tx.pure(recipient));\n });\n return this;\n }\n\n transferSui(recipient: string, amount: number) {\n return this.transferSuiToMany([recipient], [amount]);\n }\n\n takeAmountFromCoins(coins: SuiObjectArg[], amount: number) {\n const tx = this.txBlock;\n const coinObjects = convertArgs(this.txBlock, coins);\n const mergedCoin = coinObjects[0];\n if (coins.length > 1) {\n tx.mergeCoins(mergedCoin, coinObjects.slice(1));\n }\n const [sendCoin] = tx.splitCoins(mergedCoin, [tx.pure(amount)]);\n return [sendCoin, mergedCoin];\n }\n\n splitSUIFromGas(amounts: number[]) {\n const tx = this.txBlock;\n return tx.splitCoins(\n tx.gas,\n amounts.map((m) => tx.pure(m))\n );\n }\n\n splitMultiCoins(coins: SuiObjectArg[], amounts: number[]) {\n const tx = this.txBlock;\n const coinObjects = convertArgs(this.txBlock, coins);\n const mergedCoin = coinObjects[0];\n if (coins.length > 1) {\n tx.mergeCoins(mergedCoin, coinObjects.slice(1));\n }\n const splitedCoins = tx.splitCoins(\n mergedCoin,\n amounts.map((m) => tx.pure(m))\n );\n return { splitedCoins, mergedCoin };\n }\n\n transferCoinToMany(\n inputCoins: SuiObjectArg[],\n sender: string,\n recipients: string[],\n amounts: number[]\n ) {\n // require recipients.length === amounts.length\n if (recipients.length !== amounts.length) {\n throw new Error(\n 'transferSuiToMany: recipients.length !== amounts.length'\n );\n }\n const tx = this.txBlock;\n const { splitedCoins, mergedCoin } = this.splitMultiCoins(\n inputCoins,\n amounts\n );\n recipients.forEach((recipient, index) => {\n tx.transferObjects([splitedCoins[index]], tx.pure(recipient));\n });\n tx.transferObjects([mergedCoin], tx.pure(sender));\n return this;\n }\n\n transferCoin(\n inputCoins: SuiObjectArg[],\n sender: string,\n recipient: string,\n amount: number\n ) {\n return this.transferCoinToMany(inputCoins, sender, [recipient], [amount]);\n }\n\n stakeSui(amount: number, validatorAddr: string) {\n const tx = this.txBlock;\n const [stakeCoin] = tx.splitCoins(tx.gas, [tx.pure(amount)]);\n tx.moveCall({\n target: '0x3::sui_system::request_add_stake',\n arguments: [\n tx.object(SUI_SYSTEM_STATE_OBJECT_ID),\n stakeCoin,\n tx.pure(validatorAddr),\n ],\n });\n return tx;\n }\n}\n","import {\n normalizeSuiObjectId,\n TransactionArgument,\n TransactionBlock,\n} from '@mysten/sui.js';\nimport { SuiTxArg, SuiInputTypes } from './types';\n\nexport const getDefaultSuiInputType = (value: any): SuiInputTypes => {\n if (typeof value === 'string' && value.startsWith('0x')) {\n return 'object';\n } else if (typeof value === 'number' || typeof value === 'bigint') {\n return 'u64';\n } else if (typeof value === 'boolean') {\n return 'bool';\n } else {\n return 'object';\n }\n};\n\n/**\n * Since we know the elements in the array are the same type\n * If type is not provided, we will try to infer the type from the first element\n * By default,\n *\n * string starting with `0x` =====> object id\n * number, bigint ====> u64\n * boolean =====> bool\n *\n *\n * If type is provided, we will use the type to convert the array\n * @param args\n * @param type 'address' | 'bool' | 'u8' | 'u16' | 'u32' | 'u64' | 'u128' | 'u256' | 'object'\n */\nexport function makeVecParam(\n txBlock: TransactionBlock,\n args: SuiTxArg[],\n type?: SuiInputTypes\n) {\n if (args.length === 0)\n throw new Error('Transaction builder error: Empty array is not allowed');\n const defaultSuiType = getDefaultSuiInputType(args[0]);\n if (type === 'object' || (!type && defaultSuiType === 'object')) {\n const objects = args.map((arg) =>\n typeof arg === 'string'\n ? txBlock.object(normalizeSuiObjectId(arg))\n : (arg as any)\n );\n return txBlock.makeMoveVec({ objects });\n } else {\n const vecType = type || defaultSuiType;\n return txBlock.pure(args, `vector<${vecType}>`);\n }\n}\n\nexport function isMoveVecArg(arg: any) {\n const isFullMoveVecArg =\n arg && arg.value && Array.isArray(arg.value) && arg.vecType;\n const isSimpleMoveVecArg = Array.isArray(arg);\n return isFullMoveVecArg || isSimpleMoveVecArg;\n}\n\nexport function convertArgs(\n txBlock: TransactionBlock,\n args: any[]\n): TransactionArgument[] {\n return args.map((arg) => {\n if (typeof arg === 'string' && arg.startsWith('0x')) {\n // We always treat string starting with `0x` as object id\n return txBlock.object(normalizeSuiObjectId(arg));\n } else if (isMoveVecArg(arg)) {\n // if it's an array arg, we will convert it to move vec\n const vecType = arg.vecType || undefined;\n return vecType\n ? makeVecParam(txBlock, arg.value, vecType)\n : makeVecParam(txBlock, arg);\n } else if (typeof arg !== 'object') {\n // Other basic types such as string, number, boolean are converted to pure value\n return txBlock.pure(arg);\n } else {\n // We do nothing, because it's most likely already a move value\n return arg;\n }\n });\n}\n","import { SuiMoveNormalizedModules} from '@mysten/sui.js';\nimport type { ContractFactoryParams, SuiMoveMoudleValueType } from './types';\nexport type ApiTypes = 'promise' | 'rxjs';\n\n// export interface ContractQuery {\n// (origin: AccountId | string | Uint8Array, options: ContractOptions, ...params: unknown[]): SuiTransactionBlockResponse<ApiType, ContractCallOutcome>;\n// }\n\n// export type MapMessageQuery<ApiType extends ApiTypes> = Record<string, ContractQuery<ApiType>>;\n\n// // function createQuery <ApiType extends ApiTypes> (meta: AbiMessage, fn: (origin: string | AccountId | Uint8Array, options: ContractOptions, params: unknown[]) => ContractCallResult<ApiType, ContractCallOutcome>): ContractQuery<ApiType> {\n// // return withMeta(meta, (origin: string | AccountId | Uint8Array, options: ContractOptions, ...params: unknown[]): ContractCallResult<ApiType, ContractCallOutcome> =>\n// // fn(origin, options, params)\n// // );\n// // }\n\n// export type MapMessageTx<ApiType extends ApiTypes> = Record<string, ContractTx<ApiType>>;\n\n// export interface ContractOptions {\n// gasLimit?: bigint | string | number | BN | WeightV2;\n// storageDepositLimit?: bigint | string | number | BN | null;\n// value?: bigint | BN | string | number;\n// }\n\n// export interface ContractTx {\n// (options: ContractOptions, ...params: unknown[]): SubmittableExtrinsic<ApiType>;\n// }\nexport class SuiContractFactory {\n public packageId: string;\n public metadata: SuiMoveNormalizedModules | undefined;\n // readonly #query: MapMessageQuery<ApiTypes> = {};\n // readonly #tx: MapMessageTx<ApiTypes> = {};\n /**\n * Support the following ways to init the SuiToolkit:\n * 1. mnemonics\n * 2. secretKey (base64 or hex)\n * If none of them is provided, will generate a random mnemonics with 24 words.\n *\n * @param mnemonics, 12 or 24 mnemonics words, separated by space\n * @param secretKey, base64 or hex string, when mnemonics is provided, secretKey will be ignored\n */\n constructor({ packageId, metadata }: ContractFactoryParams = {}) {\n // If the mnemonics or secretKey is provided, use it\n // Otherwise, generate a random mnemonics with 24 words\n this.packageId = packageId || '';\n this.metadata = metadata || undefined;\n }\n\n getFuncByModuleName(moduleName: string) {\n Object.values(this.metadata as SuiMoveNormalizedModules).forEach(\n (value) => {\n const data = value as SuiMoveMoudleValueType;\n console.log(`moudle name: ${data.name}`);\n // console.log(data.exposedFunctions)\n Object.entries(data.exposedFunctions).forEach(([key, value]) => {\n console.log(`\\tfunc name: ${key}`);\n Object.values(value.parameters).forEach((values) => {\n // console.log(values)\n });\n });\n }\n );\n }\n\n getAllFunc() {\n Object.values(this.metadata as SuiMoveNormalizedModules).forEach(\n (value) => {\n const data = value as SuiMoveMoudleValueType;\n console.log(`moudle name: ${data.name}`);\n // console.log(data.exposedFunctions)\n Object.entries(data.exposedFunctions).forEach(([key, value]) => {\n console.log(`\\tfunc name: ${key}`);\n console.log(`\\t\\t${value.parameters.length}`);\n Object.values(value.parameters).forEach((values) => {\n // console.log(values)\n console.log(`\\t\\targs: ${values}`);\n });\n });\n }\n );\n }\n\n getAllModule() {\n Object.values(this.metadata as SuiMoveNormalizedModules).forEach(\n (value, index) => {\n const data = value as SuiMoveMoudleValueType;\n console.log(`${index}. ${data.name}`);\n }\n );\n }\n async worldCall() {}\n\n // async call(arguments: ({\n // kind: \"Input\";\n // index: number;\n // type?: \"object\" | \"pure\" | undefined;\n // value?: any;\n // } | {\n // kind: \"GasCoin\";\n // } | {\n // kind: \"Result\";\n // index: number;\n // } | {\n // kind: \"NestedResult\";\n // index: number;\n // resultIndex: number;\n // })[], derivePathParams?: DerivePathParams) {\n // const tx = new TransactionBlock();\n // tx.moveCall({\n // target: `${this.packageId}::${}::${}`,\n // arguments,\n // })\n // return ;\n // }\n}\n\n// function createTx <ApiType extends ApiTypes> (meta: AbiMessage, fn: (options: ContractOptions, params: unknown[]) => SubmittableExtrinsic<ApiType>): ContractTx<ApiType> {\n// return withMeta(meta, (options: ContractOptions, ...params: unknown[]): SubmittableExtrinsic<ApiType> =>\n// fn(options, params)\n// );\n// }\n","\nimport {\n is,\n ObjectCallArg,\n ObjectId,\n TransactionArgument,\n TransactionBlock,\n normalizeSuiAddress,\n bcs,\n} from '@mysten/sui.js'\nimport { BCS } from '@mysten/bcs'\n\n/** A Move type, e.g., `address`, `bool`, `u64`, `vector<u64>`, `0x2::sui::SUI`... */\nexport type Type = string\n\nexport interface FieldsWithTypes {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n fields: Record<string, any>\n type: string\n}\n\nexport type ObjectArg = ObjectId | ObjectCallArg | TransactionArgument\nexport type PureArg =\n | bigint\n | string\n | number\n | boolean\n | null\n | TransactionArgument\n | Array<PureArg>\nexport type GenericArg = ObjectArg | PureArg | Array<ObjectArg> | Array<PureArg> | Array<GenericArg>\n\nexport function parseTypeName(name: Type): { typeName: string; typeArgs: Type[] } {\n const parsed = bcs.parseTypeName(name)\n return { typeName: parsed.name, typeArgs: parsed.params as string[] }\n}\n\nexport function obj(txb: TransactionBlock, arg: ObjectArg) {\n return is(arg, TransactionArgument) ? arg : txb.object(arg)\n}\n\nexport function pure(txb: TransactionBlock, arg: PureArg, type: Type) {\n if (is(arg, TransactionArgument)) {\n return obj(txb, arg)\n }\n\n function convertType(type: Type): string {\n const { typeName, typeArgs } = parseTypeName(type)\n switch (typeName) {\n case '0x1::string::String':\n case '0x1::ascii::String':\n return BCS.STRING\n case '0x2::object::ID':\n return BCS.ADDRESS\n case '0x1::option::Option':\n return `vector<${convertType(typeArgs[0])}>`\n case 'vector':\n return `vector<${convertType(typeArgs[0])}>`\n default:\n return type\n }\n }\n\n function isOrHasNestedTransactionArgument(arg: PureArg): boolean {\n if (Array.isArray(arg)) {\n return arg.some(item => isOrHasNestedTransactionArgument(item))\n }\n return is(arg, TransactionArgument)\n }\n\n function convertArg(arg: PureArg, type: Type): PureArg {\n const { typeName, typeArgs } = parseTypeName(type)\n if (typeName === '0x1::option::Option') {\n if (arg === null) {\n return []\n } else {\n return [convertArg(arg, typeArgs[0])]\n }\n } else if (typeName === 'vector' && Array.isArray(arg)) {\n return arg.map(item => convertArg(item, typeArgs[0]))\n } else if (typeName === '0x2::object::ID' || typeName === 'address') {\n return normalizeSuiAddress(arg as string)\n } else {\n return arg\n }\n }\n\n // handle some cases when TransactionArgument is nested within a vector or option\n const { typeName, typeArgs } = parseTypeName(type)\n switch (typeName) {\n case '0x1::option::Option':\n if (arg === null) {\n return txb.pure([], `vector<${convertType(typeArgs[0])}>`)\n }\n if (isOrHasNestedTransactionArgument(arg)) {\n throw new Error('nesting TransactionArgument is not currently supported')\n }\n break\n case 'vector':\n if (!Array.isArray(arg)) {\n throw new Error('expected an array for vector type')\n }\n if (arg.length === 0) {\n return txb.pure([], `vector<${convertType(typeArgs[0])}>`)\n }\n if (arg.some(arg => Array.isArray(arg) && isOrHasNestedTransactionArgument(arg))) {\n throw new Error('nesting TransactionArgument is not currently supported')\n }\n if (\n is(arg[0], TransactionArgument) &&\n arg.filter(arg => !is(arg, TransactionArgument)).length > 0\n ) {\n throw new Error('mixing TransactionArgument with other types is not currently supported')\n }\n if (is(arg[0], TransactionArgument)) {\n return txb.makeMoveVec({\n objects: arg as Array<TransactionArgument>,\n type: typeArgs[0],\n })\n }\n }\n\n return txb.pure(convertArg(arg, type), convertType(type))\n}\n\nexport function option(txb: TransactionBlock, type: Type, arg: GenericArg | null) {\n if (arg === null) {\n return pure(txb, arg, `0x1::option::Option<${type}>`)\n }\n\n if (typeArgIsPure(type)) {\n return pure(txb, arg as PureArg | TransactionArgument, `0x1::option::Option<${type}>`)\n } else if (is(arg, TransactionArgument)) {\n return arg\n } else {\n if (arg === null) {\n return pure(txb, arg, `vector<${type}>`)\n }\n\n // wrap it with some\n const val = generic(txb, type, arg)\n return txb.moveCall({\n target: `0x1::option::some`,\n typeArguments: [type],\n arguments: [val],\n })\n }\n}\n\nexport function generic(txb: TransactionBlock, type: Type, arg: GenericArg) {\n if (typeArgIsPure(type)) {\n return pure(txb, arg as PureArg | TransactionArgument, type)\n } else {\n const { typeName, typeArgs } = parseTypeName(type)\n if (typeName === 'vector' && Array.isArray(arg)) {\n const itemType = typeArgs[0]\n\n return txb.makeMoveVec({\n objects: arg.map(item => obj(txb, item as ObjectArg)),\n type: itemType,\n })\n } else {\n return obj(txb, arg as ObjectArg)\n }\n }\n}\n\nexport function vector(\n txb: TransactionBlock,\n itemType: Type,\n items: Array<GenericArg> | TransactionArgument\n) {\n if (typeArgIsPure(itemType)) {\n return pure(txb, items as PureArg, `vector<${itemType}>`)\n } else if (is(items, TransactionArgument)) {\n return items\n } else {\n const { typeName: itemTypeName, typeArgs: itemTypeArgs } = parseTypeName(itemType)\n if (itemTypeName === '0x1::option::Option') {\n const objects = items.map(item => option(txb, itemTypeArgs[0], item))\n return txb.makeMoveVec({\n objects,\n type: itemType,\n })\n }\n\n return txb.makeMoveVec({\n objects: items as Array<TransactionArgument>,\n type: itemType,\n })\n }\n}\n\nexport function typeArgIsPure(type: Type): boolean {\n const { typeName, typeArgs } = parseTypeName(type)\n switch (typeName) {\n case 'bool':\n case 'u8':\n case 'u16':\n case 'u32':\n case 'u64':\n case 'u128':\n case 'u256':\n case 'address':\n case 'signer':\n return true\n case 'vector':\n return typeArgIsPure(typeArgs[0])\n case '0x1::string::String':\n case '0x1::ascii::String':\n case '0x2::object::ID':\n return true\n case '0x1::option::Option':\n return typeArgIsPure(typeArgs[0])\n default:\n return false\n }\n}\n\n","import {\n RawSigner,\n TransactionBlock,\n DevInspectResults,\n SuiTransactionBlockResponse, JsonRpcProvider, testnetConnection,\n SuiMoveNormalizedModules, DynamicFieldPage, DynamicFieldName,\n} from '@mysten/sui.js';\nimport { SuiAddress } from \"@mysten/sui.js/src/types\";\nimport { SuiRpcProvider } from '../libs/suiRpcProvider';\nimport { NetworkType } from '../libs/suiRpcProvider/types';\nimport * as fs from 'fs';\n\nexport async function initialize(networkType: NetworkType, packageId: string) {\n const folderPath = \"./metadata\"\n fs.access(folderPath, (error) => {\n if (error) {\n fs.mkdir(folderPath, (mkdirError) => {\n if (mkdirError) {\n console.error('Create folder error:', mkdirError);\n } else {\n console.log('This folder already exist.');\n }\n });\n } else {\n console.log('This folder already exist.');\n }\n });\n const jsonFileName = `${folderPath}/${packageId}.json`;\n\n const rpcProvider = new SuiRpcProvider({\n networkType,\n });\n try {\n const data = await fs.promises.readFile(jsonFileName, 'utf-8');\n const jsonData = JSON.parse(data);\n\n return jsonData as SuiMoveNormalizedModules;\n } catch (error) {\n if (packageId !== undefined) {\n const jsonData = await rpcProvider.getNormalizedMoveModulesByPackage(packageId);\n\n fs.writeFile(jsonFileName, JSON.stringify(jsonData, null, 2), (err) => {\n if (err) {\n console.error('write data error:', err);\n } else {\n console.log('Success saved.', jsonFileName);\n }\n });\n return jsonData as SuiMoveNormalizedModules;\n } else {\n console.error('please set your package id.');\n }\n }\n }"],"mappings":"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","names":["TransactionBlock","SUI_SYSTEM_STATE_OBJECT_ID","TransactionBlock","Ed25519Keypair","Ed25519Keypair","JsonRpcProvider","JsonRpcProvider","TransactionBlock","TransactionBlock","value","TransactionArgument","type","typeName","typeArgs","arg","value","TransactionBlock"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/obelisk.ts","../src/libs/suiAccountManager/index.ts","../src/libs/suiAccountManager/keypair.ts","../src/libs/suiAccountManager/util.ts","../src/libs/suiAccountManager/crypto.ts","../src/libs/suiRpcProvider/index.ts","../src/libs/suiRpcProvider/faucet.ts","../src/libs/suiRpcProvider/defaultChainConfigs.ts","../src/libs/suiTxBuilder/index.ts","../src/libs/suiTxBuilder/util.ts","../src/libs/suiContractFactory/index.ts","../src/framework/util.ts","../src/metadata/index.ts"],"sourcesContent":["export {\n TransactionBlock,\n SUI_CLOCK_OBJECT_ID,\n SUI_SYSTEM_STATE_OBJECT_ID,\n} from '@mysten/sui.js';\nexport { Obelisk } from './obelisk';\nexport { SuiAccountManager } from './libs/suiAccountManager';\nexport { SuiTxBlock } from './libs/suiTxBuilder';\nexport { SuiRpcProvider } from './libs/suiRpcProvider';\nexport { SuiContractFactory } from './libs/suiContractFactory';\nexport { getMetadata } from './metadata';\nexport type * from './types';\n","import {\n RawSigner,\n TransactionBlock,\n DevInspectResults,\n SuiTransactionBlockResponse,\n SuiMoveNormalizedModules, DynamicFieldPage, DynamicFieldName,\n} from '@mysten/sui.js';\nimport { SuiAccountManager } from './libs/suiAccountManager';\nimport { SuiRpcProvider } from './libs/suiRpcProvider';\nimport { SuiTxBlock } from './libs/suiTxBuilder';\nimport { SuiContractFactory } from './libs/suiContractFactory';\nimport { SuiMoveMoudleValueType, SuiMoveMoudleFuncType } from './libs/suiContractFactory/types';\nimport {\n ObeliskParams,\n DerivePathParams,\n SuiTxArg, SuiVecTxArg,\n ComponentContentType,\n SuiTxArgument, ContractQuery,\n ContractTx, MapMoudleFuncQuery,\n MapMoudleFuncTx\n} from './types';\nimport {ObjectArg, obj, pure} from \"./framework/util\";\n\n\nexport function isUndefined (value?: unknown): value is undefined {\n return value === undefined;\n}\n\nexport function withMeta<T extends { meta: SuiMoveMoudleFuncType }>(meta: SuiMoveMoudleFuncType,creator: Omit<T, 'meta'>): T {\n (creator as T).meta = meta\n\n return creator as T;\n}\n\nfunction createQuery(\n meta: SuiMoveMoudleFuncType,\n fn: (tx: TransactionBlock, params: SuiTxArgument[], isRaw?: boolean) => Promise<DevInspectResults | TransactionBlock>\n): ContractQuery {\n return withMeta(meta, async (tx: TransactionBlock, params: SuiTxArgument[], isRaw?: boolean): Promise<DevInspectResults | TransactionBlock> => {\n const result = await fn(tx, params, isRaw);\n return result;\n });\n}\n\nfunction createTx(\n meta: SuiMoveMoudleFuncType,\n fn: (tx: TransactionBlock, params: SuiTxArgument[], isRaw?: boolean) => Promise<SuiTransactionBlockResponse | TransactionBlock>\n): ContractTx {\n return withMeta(meta, async (tx: TransactionBlock, params: SuiTxArgument[], isRaw?: boolean): Promise<SuiTransactionBlockResponse | TransactionBlock> => {\n const result = await fn(tx, params, isRaw);\n return result;\n });\n}\n\n/**\n * @class Obelisk\n * @description This class is used to aggregate the tools that used to interact with SUI network.\n */\nexport class Obelisk {\n public accountManager: SuiAccountManager;\n public rpcProvider: SuiRpcProvider;\n public contractFactory: SuiContractFactory;\n public packageId: string | undefined;\n // public needLoad: boolean | undefined;\n public metadata: SuiMoveNormalizedModules;\n public epsId: string;\n public componentsId: string;\n\n readonly #query: MapMoudleFuncQuery = {};\n readonly #tx: MapMoudleFuncTx = {};\n /**\n * Support the following ways to init the SuiToolkit:\n * 1. mnemonics\n * 2. secretKey (base64 or hex)\n * If none of them is provided, will generate a random mnemonics with 24 words.\n *\n * @param mnemonics, 12 or 24 mnemonics words, separated by space\n * @param secretKey, base64 or hex string, when mnemonics is provided, secretKey will be ignored\n * @param networkType, 'testnet' | 'mainnet' | 'devnet' | 'localnet', default is 'devnet'\n * @param fullnodeUrl, the fullnode url, default is the preconfig fullnode url for the given network type\n * @param faucetUrl, the faucet url, default is the preconfig faucet url for the given network type\n * @param packageId\n */\n constructor({\n mnemonics,\n secretKey,\n networkType,\n fullnodeUrl,\n faucetUrl,\n packageId,\n metadata\n }: ObeliskParams = {}) {\n // Init the account manager\n this.accountManager = new SuiAccountManager({ mnemonics, secretKey });\n // Init the rpc provider\n this.rpcProvider = new SuiRpcProvider({\n fullnodeUrl,\n faucetUrl,\n networkType,\n });\n\n this.epsId = \"0xf2196f638c3174e18c0e31aa630a02fd516c2c5deec1ded72c0fea864c9f091a\"\n this.componentsId = \"0x3bc407eb543149e42846ade59ac2a3c901584af4339dc1ecd0affd090529545f\"\n this.packageId = packageId;\n this.metadata = metadata as SuiMoveNormalizedModules;\n Object.values(metadata as SuiMoveNormalizedModules).forEach(value => {\n let data = value as SuiMoveMoudleValueType;\n let moduleName = data.name;\n Object.entries(data.exposedFunctions).forEach(([funcName, value]) => {\n let meta = value as SuiMoveMoudleFuncType;\n meta.moudleName = moduleName;\n meta.funcName = funcName;\n\n if (isUndefined(this.#query[moduleName])) {\n this.#query[moduleName] = {};\n }\n if (isUndefined(this.#query[moduleName][funcName])) {\n this.#query[moduleName][funcName] = createQuery(meta, (tx, p, isRaw) => this.#read(meta, tx, p, isRaw))\n }\n\n if (isUndefined(this.#tx[moduleName])) {\n this.#tx[moduleName] = {};\n }\n if (isUndefined(this.#tx[moduleName][funcName])) {\n this.#tx[moduleName][funcName] = createTx(meta, (tx, p, isRaw) => this.#exec(meta, tx, p, isRaw))\n }\n });\n })\n\n this.contractFactory = new SuiContractFactory({\n packageId,\n metadata\n })\n }\n\n // async initialize() {\n // const metadata = await this.loadData();\n // this.metadata = metadata as SuiMoveNormalizedModules;\n // this.contractFactory = new SuiContractFactory({\n // packageId: this.packageId,\n // metadata: this.metadata\n // })\n // return metadata\n // }\n\n public get query (): MapMoudleFuncQuery {\n return this.#query;\n }\n\n public get tx (): MapMoudleFuncTx {\n return this.#tx;\n }\n\n #exec = async (meta: SuiMoveMoudleFuncType, tx: TransactionBlock, params: SuiTxArgument[], isRaw?: boolean) => {\n tx.moveCall({\n target: `${this.contractFactory.packageId}::${meta.moudleName}::${meta.funcName}`,\n arguments: params,\n })\n\n if (isRaw === true) {\n return tx;\n }\n return await this.signAndSendTxn(tx);\n };\n\n\n #read = async (meta: SuiMoveMoudleFuncType, tx: TransactionBlock, params: SuiTxArgument[], isRaw?: boolean) => {\n tx.moveCall({\n target: `${this.contractFactory.packageId}::${meta.moudleName}::${meta.funcName}`,\n arguments: params,\n })\n \n if (isRaw === true) {\n return tx;\n }\n return await this.inspectTxn(tx);\n };\n /**\n * if derivePathParams is not provided or mnemonics is empty, it will return the currentSigner.\n * else:\n * it will generate signer from the mnemonic with the given derivePathParams.\n * @param derivePathParams, such as { accountIndex: 2, isExternal: false, addressIndex: 10 }, comply with the BIP44 standard\n */\n getSigner(derivePathParams?: DerivePathParams) {\n const keyPair = this.accountManager.getKeyPair(derivePathParams);\n return new RawSigner(keyPair, this.rpcProvider.provider);\n }\n\n /**\n * @description Switch the current account with the given derivePathParams\n * @param derivePathParams, such as { accountIndex: 2, isExternal: false, addressIndex: 10 }, comply with the BIP44 standard\n */\n switchAccount(derivePathParams: DerivePathParams) {\n this.accountManager.switchAccount(derivePathParams);\n }\n\n /**\n * @description Get the address of the account for the given derivePathParams\n * @param derivePathParams, such as { accountIndex: 2, isExternal: false, addressIndex: 10 }, comply with the BIP44 standard\n */\n getAddress(derivePathParams?: DerivePathParams) {\n return this.accountManager.getAddress(derivePathParams);\n }\n currentAddress() {\n return this.accountManager.currentAddress;\n }\n\n provider() {\n return this.rpcProvider.provider;\n }\n\n getPackageId() {\n return this.contractFactory.packageId;\n }\n\n getMetadata() {\n return this.contractFactory.metadata\n }\n /**\n * Request some SUI from faucet\n * @Returns {Promise<boolean>}, true if the request is successful, false otherwise.\n */\n async requestFaucet(derivePathParams?: DerivePathParams) {\n const addr = this.accountManager.getAddress(derivePathParams);\n return this.rpcProvider.requestFaucet(addr);\n }\n\n async getBalance(coinType?: string, derivePathParams?: DerivePathParams) {\n const owner = this.accountManager.getAddress(derivePathParams);\n return this.rpcProvider.getBalance(owner, coinType);\n }\n\n async getObject(objectId: string) {\n return this.rpcProvider.getObject(objectId);\n }\n\n async getObjects(objectIds: string[]) {\n return this.rpcProvider.getObjects(objectIds);\n }\n\n async signTxn(\n tx: Uint8Array | TransactionBlock | SuiTxBlock,\n derivePathParams?: DerivePathParams\n ) {\n tx = tx instanceof SuiTxBlock ? tx.txBlock : tx;\n const signer = this.getSigner(derivePathParams);\n return signer.signTransactionBlock({ transactionBlock: tx });\n }\n\n async signAndSendTxn(\n tx: Uint8Array | TransactionBlock | SuiTxBlock,\n derivePathParams?: DerivePathParams\n ): Promise<SuiTransactionBlockResponse> {\n tx = tx instanceof SuiTxBlock ? tx.txBlock : tx;\n const signer = this.getSigner(derivePathParams);\n return signer.signAndExecuteTransactionBlock({\n transactionBlock: tx,\n options: {\n showEffects: true,\n showEvents: true,\n showObjectChanges: true,\n },\n });\n }\n\n /**\n * Transfer the given amount of SUI to the recipient\n * @param recipient\n * @param amount\n * @param derivePathParams\n */\n async transferSui(\n recipient: string,\n amount: number,\n derivePathParams?: DerivePathParams\n ) {\n const tx = new SuiTxBlock();\n tx.transferSui(recipient, amount);\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n /**\n * Transfer to mutliple recipients\n * @param recipients the recipients addresses\n * @param amounts the amounts of SUI to transfer to each recipient, the length of amounts should be the same as the length of recipients\n * @param derivePathParams\n */\n async transferSuiToMany(\n recipients: string[],\n amounts: number[],\n derivePathParams?: DerivePathParams\n ) {\n const tx = new SuiTxBlock();\n tx.transferSuiToMany(recipients, amounts);\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n /**\n * Transfer the given amounts of coin to multiple recipients\n * @param recipients the list of recipient address\n * @param amounts the amounts to transfer for each recipient\n * @param coinType any custom coin type but not SUI\n * @param derivePathParams the derive path params for the current signer\n */\n async transferCoinToMany(\n recipients: string[],\n amounts: number[],\n coinType: string,\n derivePathParams?: DerivePathParams\n ) {\n const tx = new SuiTxBlock();\n const owner = this.accountManager.getAddress(derivePathParams);\n const totalAmount = amounts.reduce((a, b) => a + b, 0);\n const coins = await this.rpcProvider.selectCoins(\n owner,\n totalAmount,\n coinType\n );\n tx.transferCoinToMany(\n coins.map((c) => c.objectId),\n owner,\n recipients,\n amounts\n );\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n async transferCoin(\n recipient: string,\n amount: number,\n coinType: string,\n derivePathParams?: DerivePathParams\n ) {\n return this.transferCoinToMany(\n [recipient],\n [amount],\n coinType,\n derivePathParams\n );\n }\n\n async transferObjects(\n objects: string[],\n recipient: string,\n derivePathParams?: DerivePathParams\n ) {\n const tx = new SuiTxBlock();\n tx.transferObjects(objects, recipient);\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n async moveCall(callParams: {\n target: string;\n arguments?: (SuiTxArg | SuiVecTxArg)[];\n typeArguments?: string[];\n derivePathParams?: DerivePathParams;\n }) {\n const {\n target,\n arguments: args = [],\n typeArguments = [],\n derivePathParams,\n } = callParams;\n const tx = new SuiTxBlock();\n tx.moveCall(target, args, typeArguments);\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n /**\n * Select coins with the given amount and coin type, the total amount is greater than or equal to the given amount\n * @param amount\n * @param coinType\n * @param owner\n */\n async selectCoinsWithAmount(\n amount: number,\n coinType: string,\n owner?: string\n ) {\n owner = owner || this.accountManager.currentAddress;\n const coins = await this.rpcProvider.selectCoins(owner, amount, coinType);\n return coins.map((c) => c.objectId);\n }\n\n /**\n * stake the given amount of SUI to the validator\n * @param amount the amount of SUI to stake\n * @param validatorAddr the validator address\n * @param derivePathParams the derive path params for the current signer\n */\n async stakeSui(\n amount: number,\n validatorAddr: string,\n derivePathParams?: DerivePathParams\n ) {\n const tx = new SuiTxBlock();\n tx.stakeSui(amount, validatorAddr);\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n /**\n * Execute the transaction with on-chain data but without really submitting. Useful for querying the effects of a transaction.\n * Since the transaction is not submitted, its gas cost is not charged.\n * @param tx the transaction to execute\n * @param derivePathParams the derive path params\n * @returns the effects and events of the transaction, such as object changes, gas cost, event emitted.\n */\n async inspectTxn(\n tx: Uint8Array | TransactionBlock | SuiTxBlock,\n derivePathParams?: DerivePathParams\n ): Promise<DevInspectResults> {\n\n tx = tx instanceof SuiTxBlock ? tx.txBlock : tx;\n return this.rpcProvider.provider.devInspectTransactionBlock({\n transactionBlock: tx,\n sender: this.getAddress(derivePathParams),\n });\n }\n\n async getBirthTime(objectId: string, derivePathParams?: DerivePathParams) {\n const tx = new TransactionBlock();\n\n tx.moveCall({\n // target: `0x12b216923e5454e1f076ccb5fc638b59f8aba2175c34df9899de71124d66badd::status_system::get_pet_state`,\n target: `0x6afbf113a5872b781a2a0068b95c0d9d0ee89428518fdd65f862c841eab45b82::pet_system::get_pet_basic_info`,\n arguments: [\n // tx.pure(\"0x6fa43c68221960f942572905f3c198a5bccaa0700506b3b6bd83dd9b007e6324\"),\n // tx.pure(\"0xbf64721f0961a0426ccde6b8d9343e2cb2c26a105a5c33e57074580fd98b2cb1\"),\n // tx.pure(\"0x6\"),\n\n obj(tx, \"0x26804211486be597a89c46c16b929d7031fb7c701ecf89d4c750e49459b4bea2\"),\n pure(tx, \"0x35ba3bfb8590dbd060f41cd58c7b140d67efd2126648409cd231c74cff2828b8\", `0x2::object::ID`),\n obj(tx, \"0x6\")\n ],\n })\n return await this.inspectTxn(tx, derivePathParams);\n }\n\n async getWorld(worldObjectId: string) {\n return this.rpcProvider.getObject(worldObjectId)\n }\n\n async getAllEntities(worldId: string, cursor?: string, limit?: number) {\n const parentId = (await this.rpcProvider.getObject(worldId)).objectFields.entities.fields.id.id;\n return await this.rpcProvider.getDynamicFields(parentId, cursor, limit) as DynamicFieldPage;\n }\n\n async getEntity(worldId: string, entityId: string) {\n const parentId = (await this.rpcProvider.getObject(worldId)).objectFields.entities.fields.id.id;\n\n const name = {\n type: \"0x2::object::ID\",\n value: entityId\n } as DynamicFieldName\n return await this.rpcProvider.getDynamicFieldObject(parentId, name);\n }\n\n async getEntityComponents(worldId: string, entityId: string, cursor?: string, limit?: number) {\n const parentContent = (await this.getEntity(worldId, entityId)).data!.content as ComponentContentType;\n const parentId = parentContent.fields.value.fields.components.fields.id.id;\n return await this.rpcProvider.getDynamicFields(parentId, cursor, limit) as DynamicFieldPage;\n }\n\n async getEntityComponent(entityId: string, componentId: string) {\n const parentId = (await this.rpcProvider.getObject(entityId)).objectFields.id.id;\n\n const name = {\n type: \"0x2::object::ID\",\n value: componentId\n } as DynamicFieldName\n return await this.rpcProvider.getDynamicFieldObject(parentId, name);\n }\n\n\n // async loadData() {\n // const jsonFileName = `metadata/${this.packageId}.json`;\n\n // try {\n // const data = await fs.promises.readFile(jsonFileName, 'utf-8');\n // const jsonData = JSON.parse(data);\n\n // return jsonData as SuiMoveNormalizedModules;\n // } catch (error) {\n // if (this.packageId !== undefined) {\n // const jsonData = await this.rpcProvider.getNormalizedMoveModulesByPackage(this.packageId);\n\n // fs.writeFile(jsonFileName, JSON.stringify(jsonData, null, 2), (err) => {\n // if (err) {\n // console.error('写入文件时出错:', err);\n // } else {\n // console.log('JSON 数据已保存到文件:', jsonFileName);\n // }\n // });\n // return jsonData as SuiMoveNormalizedModules;\n // } else {\n // console.error('please set your package id.');\n // }\n // }\n // }\n}\n","import { Ed25519Keypair } from '@mysten/sui.js';\nimport { getKeyPair } from './keypair';\nimport { hexOrBase64ToUint8Array, normalizePrivateKey } from './util';\nimport { generateMnemonic } from './crypto';\nimport type { AccountMangerParams, DerivePathParams } from './types';\n\nexport class SuiAccountManager {\n private mnemonics: string;\n private secretKey: string;\n public currentKeyPair: Ed25519Keypair;\n public currentAddress: string;\n\n /**\n * Support the following ways to init the SuiToolkit:\n * 1. mnemonics\n * 2. secretKey (base64 or hex)\n * If none of them is provided, will generate a random mnemonics with 24 words.\n *\n * @param mnemonics, 12 or 24 mnemonics words, separated by space\n * @param secretKey, base64 or hex string, when mnemonics is provided, secretKey will be ignored\n */\n constructor({ mnemonics, secretKey }: AccountMangerParams = {}) {\n // If the mnemonics or secretKey is provided, use it\n // Otherwise, generate a random mnemonics with 24 words\n this.mnemonics = mnemonics || '';\n this.secretKey = secretKey || '';\n if (!this.mnemonics && !this.secretKey) {\n this.mnemonics = generateMnemonic(24);\n }\n\n // Init the current account\n this.currentKeyPair = this.secretKey\n ? Ed25519Keypair.fromSecretKey(\n normalizePrivateKey(hexOrBase64ToUint8Array(this.secretKey))\n )\n : getKeyPair(this.mnemonics);\n this.currentAddress = this.currentKeyPair.getPublicKey().toSuiAddress();\n }\n\n /**\n * if derivePathParams is not provided or mnemonics is empty, it will return the currentKeyPair.\n * else:\n * it will generate keyPair from the mnemonic with the given derivePathParams.\n */\n getKeyPair(derivePathParams?: DerivePathParams) {\n if (!derivePathParams || !this.mnemonics) return this.currentKeyPair;\n return getKeyPair(this.mnemonics, derivePathParams);\n }\n\n /**\n * if derivePathParams is not provided or mnemonics is empty, it will return the currentAddress.\n * else:\n * it will generate address from the mnemonic with the given derivePathParams.\n */\n getAddress(derivePathParams?: DerivePathParams) {\n if (!derivePathParams || !this.mnemonics) return this.currentAddress;\n return getKeyPair(this.mnemonics, derivePathParams)\n .getPublicKey()\n .toSuiAddress();\n }\n\n /**\n * Switch the current account with the given derivePathParams.\n * This is only useful when the mnemonics is provided. For secretKey mode, it will always use the same account.\n */\n switchAccount(derivePathParams: DerivePathParams) {\n if (this.mnemonics) {\n this.currentKeyPair = getKeyPair(this.mnemonics, derivePathParams);\n this.currentAddress = this.currentKeyPair.getPublicKey().toSuiAddress();\n }\n }\n}\n","import { Ed25519Keypair } from '@mysten/sui.js';\nimport type { DerivePathParams } from './types';\n\n/**\n * @description Get ed25519 derive path for SUI\n * @param derivePathParams\n */\nexport const getDerivePathForSUI = (\n derivePathParams: DerivePathParams = {}\n) => {\n const {\n accountIndex = 0,\n isExternal = false,\n addressIndex = 0,\n } = derivePathParams;\n return `m/44'/784'/${accountIndex}'/${isExternal ? 1 : 0}'/${addressIndex}'`;\n};\n\n/**\n * the format is m/44'/784'/accountIndex'/${isExternal ? 1 : 0}'/addressIndex'\n *\n * accountIndex is the index of the account, default is 0.\n *\n * isExternal is the type of the address, default is false. Usually, the external address is used to receive coins. The internal address is used to change coins.\n *\n * addressIndex is the index of the address, default is 0. It's used to generate multiple addresses for one account.\n *\n * @description Get keypair from mnemonics and derive path\n * @param mnemonics\n * @param derivePathParams\n */\nexport const getKeyPair = (\n mnemonics: string,\n derivePathParams: DerivePathParams = {}\n) => {\n const derivePath = getDerivePathForSUI(derivePathParams);\n return Ed25519Keypair.deriveKeypair(mnemonics, derivePath);\n};\n","import { fromB64 } from '@mysten/sui.js';\n\n/**\n * @description This regular expression matches any string that contains only hexadecimal digits (0-9, A-F, a-f).\n * @param str\n */\nexport const isHex = (str: string) =>\n /^0x[0-9a-fA-F]+$|^[0-9a-fA-F]+$/.test(str);\n\n/**\n * @description This regular expression matches any string that contains only base64 digits (0-9, A-Z, a-z, +, /, =).\n * Note that the \"=\" signs at the end are optional padding characters that may be present in some base64 encoded strings.\n * @param str\n */\nexport const isBase64 = (str: string) => /^[a-zA-Z0-9+/]+={0,2}$/g.test(str);\n\n/**\n * Convert a hex string to Uint8Array\n * @param hexStr\n */\nexport const fromHEX = (hexStr: string): Uint8Array => {\n if (!hexStr) {\n throw new Error('cannot parse empty string to Uint8Array');\n }\n const intArr = hexStr\n .replace('0x', '')\n .match(/.{1,2}/g)\n ?.map((byte) => parseInt(byte, 16));\n\n if (!intArr || intArr.length === 0) {\n throw new Error(`Unable to parse HEX: ${hexStr}`);\n }\n return Uint8Array.from(intArr);\n};\n\n/**\n * @description Convert a hex or base64 string to Uint8Array\n */\nexport const hexOrBase64ToUint8Array = (str: string): Uint8Array => {\n if (isHex(str)) {\n return fromHEX(str);\n } else if (isBase64(str)) {\n return fromB64(str);\n } else {\n throw new Error('The string is not a valid hex or base64 string.');\n }\n};\n\nconst PRIVATE_KEY_SIZE = 32;\nconst LEGACY_PRIVATE_KEY_SIZE = 64;\n/**\n * normalize a private key\n * A private key is a 32-byte array.\n * But there are two different formats for private keys:\n * 1. A 32-byte array\n * 2. A 64-byte array with the first 32 bytes being the private key and the last 32 bytes being the public key\n * 3. A 33-byte array with the first byte being 0x00 (sui.keystore key is a Base64 string with scheme flag 0x00 at the beginning)\n */\nexport const normalizePrivateKey = (key: Uint8Array): Uint8Array => {\n if (key.length === LEGACY_PRIVATE_KEY_SIZE) {\n // This is a legacy secret key, we need to strip the public key bytes and only read the first 32 bytes\n key = key.slice(0, PRIVATE_KEY_SIZE);\n } else if (key.length === PRIVATE_KEY_SIZE + 1 && key[0] === 0) {\n // sui.keystore key is a Base64 string with scheme flag 0x00 at the beginning\n return key.slice(1);\n } else if (key.length === PRIVATE_KEY_SIZE) {\n return key;\n }\n throw new Error('invalid secret key');\n};\n","import { generateMnemonic as genMnemonic } from '@scure/bip39';\nimport { wordlist } from '@scure/bip39/wordlists/english';\n\nexport const generateMnemonic = (numberOfWords: 12 | 24 = 24) => {\n const strength = numberOfWords === 12 ? 128 : 256;\n return genMnemonic(wordlist, strength);\n};\n","import {\n Connection,\n JsonRpcProvider,\n getObjectType,\n getObjectId,\n getObjectFields,\n getObjectDisplay,\n getObjectVersion,\n DynamicFieldName\n} from '@mysten/sui.js';\nimport { requestFaucet } from './faucet';\nimport { getDefaultNetworkParams } from './defaultChainConfigs';\nimport type { ObjectData, SuiRpcProviderParams } from './types';\n\nexport class SuiRpcProvider {\n public fullnodeUrl: string;\n public faucetUrl?: string;\n public provider: JsonRpcProvider;\n /**\n *\n * @param networkType, 'testnet' | 'mainnet' | 'devnet' | 'localnet', default is 'devnet'\n * @param fullnodeUrl, the fullnode url, default is the preconfig fullnode url for the given network type\n * @param faucetUrl, the faucet url, default is the preconfig faucet url for the given network type\n */\n constructor({\n fullnodeUrl,\n faucetUrl,\n networkType,\n }: SuiRpcProviderParams = {}) {\n // Get the default fullnode url and faucet url for the given network type, default is 'testnet'\n const defaultNetworkParams = getDefaultNetworkParams(\n networkType || 'devnet'\n );\n // Set fullnodeUrl and faucetUrl, if they are not provided, use the default value.\n this.fullnodeUrl = fullnodeUrl || defaultNetworkParams.fullnode;\n this.faucetUrl = faucetUrl || defaultNetworkParams.faucet;\n\n // Init the provider\n const connection = new Connection({\n fullnode: this.fullnodeUrl,\n faucet: this.faucetUrl,\n });\n this.provider = new JsonRpcProvider(connection);\n }\n\n /**\n * Request some SUI from faucet\n * @Returns {Promise<boolean>}, true if the request is successful, false otherwise.\n */\n async requestFaucet(addr: string) {\n return requestFaucet(addr, this.provider);\n }\n\n async getBalance(addr: string, coinType?: string) {\n return this.provider.getBalance({ owner: addr, coinType });\n }\n\n\n async getDynamicFieldObject(parentId: string, name: string | DynamicFieldName) {\n return this.provider.getDynamicFieldObject({ parentId, name })\n }\n\n async getDynamicFields(parentId: string, cursor?: string, limit?: number) {\n return this.provider.getDynamicFields({ parentId, cursor, limit })\n }\n\n async getObject(id: string) {\n const options = { showContent: true, showDisplay: true, showType: true };\n const object = await this.provider.getObject({ id, options });\n const objectId = getObjectId(object);\n const objectType = getObjectType(object);\n const objectVersion = getObjectVersion(object);\n const objectFields = getObjectFields(object);\n const objectDisplay = getObjectDisplay(object);\n return {\n objectId,\n objectType,\n objectVersion,\n objectFields,\n objectDisplay,\n } as ObjectData;\n }\n\n async getObjects(ids: string[]) {\n const options = { showContent: true, showDisplay: true, showType: true };\n const objects = await this.provider.multiGetObjects({ ids, options });\n const parsedObjects = objects.map((object) => {\n const objectId = getObjectId(object);\n const objectType = getObjectType(object);\n const objectVersion = getObjectVersion(object);\n const objectFields = getObjectFields(object);\n const objectDisplay = getObjectDisplay(object);\n return {\n objectId,\n objectType,\n objectVersion,\n objectFields,\n objectDisplay,\n };\n });\n return parsedObjects as ObjectData[];\n }\n\n async getNormalizedMoveModulesByPackage(packageId: string) {\n return this.provider.getNormalizedMoveModulesByPackage({package: packageId});\n }\n\n /**\n * @description Select coins that add up to the given amount.\n * @param addr the address of the owner\n * @param amount the amount that is needed for the coin\n * @param coinType the coin type, default is '0x2::SUI::SUI'\n */\n async selectCoins(\n addr: string,\n amount: number,\n coinType: string = '0x2::SUI::SUI'\n ) {\n const coins = await this.provider.getCoins({ owner: addr, coinType });\n const selectedCoins: {\n objectId: string;\n digest: string;\n version: string;\n }[] = [];\n let totalAmount = 0;\n // Sort the coins by balance in descending order\n coins.data.sort((a, b) => parseInt(b.balance) - parseInt(a.balance));\n for (const coinData of coins.data) {\n selectedCoins.push({\n objectId: coinData.coinObjectId,\n digest: coinData.digest,\n version: coinData.version,\n });\n totalAmount = totalAmount + parseInt(coinData.balance);\n if (totalAmount >= amount) {\n break;\n }\n }\n\n if (!selectedCoins.length) {\n throw new Error('No valid coins found for the transaction.');\n }\n return selectedCoins;\n }\n}\n","import {\n JsonRpcProvider,\n FaucetRateLimitError,\n assert,\n FaucetResponse,\n} from '@mysten/sui.js';\nimport { retry } from 'ts-retry-promise';\n\n/**\n * Request some SUI from faucet\n * @param address\n * @param provider\n * @returns {Promise<boolean>}, return true if the request is successful\n */\nexport const requestFaucet = async (\n address: string,\n provider: JsonRpcProvider\n) => {\n console.log('\\nRequesting SUI from faucet for address: ', address);\n const headers = {\n authority: 'faucet.testnet.sui.io',\n method: 'POST',\n path: '/gas',\n scheme: 'https',\n accept: '*/*',\n 'accept-encoding': 'gzip, deflate, br',\n 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,ja;q=0.7',\n 'content-length': '105',\n 'content-type': 'application/json',\n origin: 'chrome-extension://opcgpfmipidbgpenhmajoajpbobppdil',\n cookie:\n '_ga=GA1.1.2092533979.1664032306; sui_io_cookie={\"level\":[\"necessary\",\"analytics\"],\"revision\":0,\"data\":null,\"rfc_cookie\":false}; _ga_YKP53WJMB0=GS1.1.1680531285.31.0.1680531334.11.0.0; _ga_0GW4F97GFL=GS1.1.1680826187.125.0.1680826187.60.0.0; __cf_bm=6rPjXUwuzUPy4yDlZuXgDj0v7xLPpUd5z0CFGCoN_YI-1680867579-0-AZMhU7/mKUUbUlOa27LmfW6eIFkBkXsPKqYgWjpjWpj2XzDckgUsRu/pxSRGfvXCspn3w7Df+uO1MR/b+XikJU0=; _cfuvid=zjwCXMmu19KBIVo_L9Qbq4TqFXJpophG3.EvFTxqdf4-1680867579342-0-604800000',\n 'sec-ch-ua':\n '\"Google Chrome\";v=\"111\", \"Not(A:Brand\";v=\"8\", \"Chromium\";v=\"111\"',\n 'sec-ch-ua-mobile': '?0',\n 'sec-ch-ua-platform': 'macOS',\n 'sec-fetch-dest': 'empty',\n 'sec-fetch-mode': 'cors',\n 'sec-fetch-site': 'none',\n 'user-agent':\n 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36',\n };\n // We need to add the following headers to the request, otherwise the request will be rejected by the faucet server\n const resp = await retry<FaucetResponse>(\n () => provider.requestSuiFromFaucet(address, headers),\n {\n backoff: 'EXPONENTIAL',\n // overall timeout in 60 seconds\n timeout: 1000 * 60,\n // skip retry if we hit the rate-limit error\n retryIf: (error: any) => !(error instanceof FaucetRateLimitError),\n logger: (msg) => console.warn(`Retry requesting faucet: ${msg}`),\n }\n );\n assert(resp, FaucetResponse, 'Request faucet failed\\n');\n console.log('Request faucet success\\n');\n};\n","import {\n localnetConnection,\n devnetConnection,\n testnetConnection,\n mainnetConnection,\n} from '@mysten/sui.js';\nimport type { Connection } from '@mysten/sui.js';\nimport type { NetworkType } from './types';\n\n/**\n * @description Get the default fullnode url and faucet url for the given network type\n * @param networkType, 'testnet' | 'mainnet' | 'devnet' | 'localnet', default is 'devnet'\n * @returns { fullNode: string, websocket: string, faucet?: string }\n */\nexport const getDefaultNetworkParams = (\n networkType: NetworkType = 'devnet'\n): Connection => {\n switch (networkType) {\n case 'localnet':\n return localnetConnection;\n case 'devnet':\n return devnetConnection;\n case 'testnet':\n return testnetConnection;\n case 'mainnet':\n return mainnetConnection;\n default:\n return devnetConnection;\n }\n};\n","import {\n TransactionBlock,\n SUI_SYSTEM_STATE_OBJECT_ID,\n TransactionExpiration,\n SuiObjectRef,\n SharedObjectRef,\n JsonRpcProvider,\n TransactionType,\n Transactions,\n ObjectCallArg,\n} from '@mysten/sui.js';\nimport { convertArgs } from './util';\nimport type { SuiTxArg, SuiObjectArg, SuiVecTxArg } from './types';\n\nexport class SuiTxBlock {\n public txBlock: TransactionBlock;\n constructor(transaction?: TransactionBlock) {\n this.txBlock = new TransactionBlock(transaction);\n }\n\n //======== override methods of TransactionBlock ============\n\n address(value: string) {\n return this.txBlock.pure(value, 'address');\n }\n pure(value: unknown, type?: string) {\n return this.txBlock.pure(value, type);\n }\n object(value: string | ObjectCallArg) {\n return this.txBlock.object(value);\n }\n objectRef(ref: SuiObjectRef) {\n return this.txBlock.objectRef(ref);\n }\n sharedObjectRef(ref: SharedObjectRef) {\n return this.txBlock.sharedObjectRef(ref);\n }\n setSender(sender: string) {\n return this.txBlock.setSender(sender);\n }\n setSenderIfNotSet(sender: string) {\n return this.txBlock.setSenderIfNotSet(sender);\n }\n setExpiration(expiration?: TransactionExpiration) {\n return this.txBlock.setExpiration(expiration);\n }\n setGasPrice(price: number | bigint) {\n return this.txBlock.setGasPrice(price);\n }\n setGasBudget(budget: number | bigint) {\n return this.txBlock.setGasBudget(budget);\n }\n setGasOwner(owner: string) {\n return this.txBlock.setGasOwner(owner);\n }\n setGasPayment(payments: SuiObjectRef[]) {\n return this.txBlock.setGasPayment(payments);\n }\n\n add(transaction: TransactionType) {\n return this.txBlock.add(transaction);\n }\n serialize() {\n return this.txBlock.serialize();\n }\n build(\n params: {\n provider?: JsonRpcProvider;\n onlyTransactionKind?: boolean;\n } = {}\n ) {\n return this.txBlock.build(params);\n }\n getDigest({ provider }: { provider?: JsonRpcProvider } = {}) {\n return this.txBlock.getDigest({ provider });\n }\n\n get gas() {\n return this.txBlock.gas;\n }\n get blockData() {\n return this.txBlock.blockData;\n }\n\n transferObjects(objects: SuiObjectArg[], recipient: string) {\n const tx = this.txBlock;\n tx.transferObjects(convertArgs(this.txBlock, objects), tx.pure(recipient));\n return this;\n }\n splitCoins(coin: SuiObjectArg, amounts: number[]) {\n const tx = this.txBlock;\n const coinObject = convertArgs(this.txBlock, [coin])[0];\n const res = tx.splitCoins(\n coinObject,\n amounts.map((m) => tx.pure(m))\n );\n return amounts.map((_, i) => res[i]);\n }\n mergeCoins(destination: SuiObjectArg, sources: SuiObjectArg[]) {\n const destinationObject = convertArgs(this.txBlock, [destination])[0];\n const sourceObjects = convertArgs(this.txBlock, sources);\n return this.txBlock.mergeCoins(destinationObject, sourceObjects);\n }\n publish(...args: Parameters<(typeof Transactions)['Publish']>) {\n return this.txBlock.publish(...args);\n }\n upgrade(...args: Parameters<(typeof Transactions)['Upgrade']>) {\n return this.txBlock.upgrade(...args);\n }\n makeMoveVec(...args: Parameters<(typeof Transactions)['MakeMoveVec']>) {\n return this.txBlock.makeMoveVec(...args);\n }\n\n /**\n * @description Move call\n * @param target `${string}::${string}::${string}`, e.g. `0x3::sui_system::request_add_stake`\n * @param args the arguments of the move call, such as `['0x1', '0x2']`\n * @param typeArgs the type arguments of the move call, such as `['0x2::sui::SUI']`\n */\n moveCall(\n target: string,\n args: (SuiTxArg | SuiVecTxArg)[] = [],\n typeArgs: string[] = []\n ) {\n // a regex for pattern `${string}::${string}::${string}`\n const regex =\n /(?<package>[a-zA-Z0-9]+)::(?<module>[a-zA-Z0-9_]+)::(?<function>[a-zA-Z0-9_]+)/;\n const match = target.match(regex);\n if (match === null)\n throw new Error(\n 'Invalid target format. Expected `${string}::${string}::${string}`'\n );\n const convertedArgs = convertArgs(this.txBlock, args);\n const tx = this.txBlock;\n return tx.moveCall({\n target: target as `${string}::${string}::${string}`,\n arguments: convertedArgs,\n typeArguments: typeArgs,\n });\n }\n\n //======== enhance methods ============\n transferSuiToMany(recipients: string[], amounts: number[]) {\n // require recipients.length === amounts.length\n if (recipients.length !== amounts.length) {\n throw new Error(\n 'transferSuiToMany: recipients.length !== amounts.length'\n );\n }\n\n const tx = this.txBlock;\n const coins = tx.splitCoins(\n tx.gas,\n amounts.map((amount) => tx.pure(amount))\n );\n recipients.forEach((recipient, index) => {\n tx.transferObjects([coins[index]], tx.pure(recipient));\n });\n return this;\n }\n\n transferSui(recipient: string, amount: number) {\n return this.transferSuiToMany([recipient], [amount]);\n }\n\n takeAmountFromCoins(coins: SuiObjectArg[], amount: number) {\n const tx = this.txBlock;\n const coinObjects = convertArgs(this.txBlock, coins);\n const mergedCoin = coinObjects[0];\n if (coins.length > 1) {\n tx.mergeCoins(mergedCoin, coinObjects.slice(1));\n }\n const [sendCoin] = tx.splitCoins(mergedCoin, [tx.pure(amount)]);\n return [sendCoin, mergedCoin];\n }\n\n splitSUIFromGas(amounts: number[]) {\n const tx = this.txBlock;\n return tx.splitCoins(\n tx.gas,\n amounts.map((m) => tx.pure(m))\n );\n }\n\n splitMultiCoins(coins: SuiObjectArg[], amounts: number[]) {\n const tx = this.txBlock;\n const coinObjects = convertArgs(this.txBlock, coins);\n const mergedCoin = coinObjects[0];\n if (coins.length > 1) {\n tx.mergeCoins(mergedCoin, coinObjects.slice(1));\n }\n const splitedCoins = tx.splitCoins(\n mergedCoin,\n amounts.map((m) => tx.pure(m))\n );\n return { splitedCoins, mergedCoin };\n }\n\n transferCoinToMany(\n inputCoins: SuiObjectArg[],\n sender: string,\n recipients: string[],\n amounts: number[]\n ) {\n // require recipients.length === amounts.length\n if (recipients.length !== amounts.length) {\n throw new Error(\n 'transferSuiToMany: recipients.length !== amounts.length'\n );\n }\n const tx = this.txBlock;\n const { splitedCoins, mergedCoin } = this.splitMultiCoins(\n inputCoins,\n amounts\n );\n recipients.forEach((recipient, index) => {\n tx.transferObjects([splitedCoins[index]], tx.pure(recipient));\n });\n tx.transferObjects([mergedCoin], tx.pure(sender));\n return this;\n }\n\n transferCoin(\n inputCoins: SuiObjectArg[],\n sender: string,\n recipient: string,\n amount: number\n ) {\n return this.transferCoinToMany(inputCoins, sender, [recipient], [amount]);\n }\n\n stakeSui(amount: number, validatorAddr: string) {\n const tx = this.txBlock;\n const [stakeCoin] = tx.splitCoins(tx.gas, [tx.pure(amount)]);\n tx.moveCall({\n target: '0x3::sui_system::request_add_stake',\n arguments: [\n tx.object(SUI_SYSTEM_STATE_OBJECT_ID),\n stakeCoin,\n tx.pure(validatorAddr),\n ],\n });\n return tx;\n }\n}\n","import {\n normalizeSuiObjectId,\n TransactionArgument,\n TransactionBlock,\n} from '@mysten/sui.js';\nimport { SuiTxArg, SuiInputTypes } from './types';\n\nexport const getDefaultSuiInputType = (value: any): SuiInputTypes => {\n if (typeof value === 'string' && value.startsWith('0x')) {\n return 'object';\n } else if (typeof value === 'number' || typeof value === 'bigint') {\n return 'u64';\n } else if (typeof value === 'boolean') {\n return 'bool';\n } else {\n return 'object';\n }\n};\n\n/**\n * Since we know the elements in the array are the same type\n * If type is not provided, we will try to infer the type from the first element\n * By default,\n *\n * string starting with `0x` =====> object id\n * number, bigint ====> u64\n * boolean =====> bool\n *\n *\n * If type is provided, we will use the type to convert the array\n * @param args\n * @param type 'address' | 'bool' | 'u8' | 'u16' | 'u32' | 'u64' | 'u128' | 'u256' | 'object'\n */\nexport function makeVecParam(\n txBlock: TransactionBlock,\n args: SuiTxArg[],\n type?: SuiInputTypes\n) {\n if (args.length === 0)\n throw new Error('Transaction builder error: Empty array is not allowed');\n const defaultSuiType = getDefaultSuiInputType(args[0]);\n if (type === 'object' || (!type && defaultSuiType === 'object')) {\n const objects = args.map((arg) =>\n typeof arg === 'string'\n ? txBlock.object(normalizeSuiObjectId(arg))\n : (arg as any)\n );\n return txBlock.makeMoveVec({ objects });\n } else {\n const vecType = type || defaultSuiType;\n return txBlock.pure(args, `vector<${vecType}>`);\n }\n}\n\nexport function isMoveVecArg(arg: any) {\n const isFullMoveVecArg =\n arg && arg.value && Array.isArray(arg.value) && arg.vecType;\n const isSimpleMoveVecArg = Array.isArray(arg);\n return isFullMoveVecArg || isSimpleMoveVecArg;\n}\n\nexport function convertArgs(\n txBlock: TransactionBlock,\n args: any[]\n): TransactionArgument[] {\n return args.map((arg) => {\n if (typeof arg === 'string' && arg.startsWith('0x')) {\n // We always treat string starting with `0x` as object id\n return txBlock.object(normalizeSuiObjectId(arg));\n } else if (isMoveVecArg(arg)) {\n // if it's an array arg, we will convert it to move vec\n const vecType = arg.vecType || undefined;\n return vecType\n ? makeVecParam(txBlock, arg.value, vecType)\n : makeVecParam(txBlock, arg);\n } else if (typeof arg !== 'object') {\n // Other basic types such as string, number, boolean are converted to pure value\n return txBlock.pure(arg);\n } else {\n // We do nothing, because it's most likely already a move value\n return arg;\n }\n });\n}\n","import { SuiMoveNormalizedModules} from '@mysten/sui.js';\nimport type { ContractFactoryParams, SuiMoveMoudleValueType } from './types';\nexport type ApiTypes = 'promise' | 'rxjs';\n\n// export interface ContractQuery {\n// (origin: AccountId | string | Uint8Array, options: ContractOptions, ...params: unknown[]): SuiTransactionBlockResponse<ApiType, ContractCallOutcome>;\n// }\n\n// export type MapMessageQuery<ApiType extends ApiTypes> = Record<string, ContractQuery<ApiType>>;\n\n// // function createQuery <ApiType extends ApiTypes> (meta: AbiMessage, fn: (origin: string | AccountId | Uint8Array, options: ContractOptions, params: unknown[]) => ContractCallResult<ApiType, ContractCallOutcome>): ContractQuery<ApiType> {\n// // return withMeta(meta, (origin: string | AccountId | Uint8Array, options: ContractOptions, ...params: unknown[]): ContractCallResult<ApiType, ContractCallOutcome> =>\n// // fn(origin, options, params)\n// // );\n// // }\n\n// export type MapMessageTx<ApiType extends ApiTypes> = Record<string, ContractTx<ApiType>>;\n\n// export interface ContractOptions {\n// gasLimit?: bigint | string | number | BN | WeightV2;\n// storageDepositLimit?: bigint | string | number | BN | null;\n// value?: bigint | BN | string | number;\n// }\n\n// export interface ContractTx {\n// (options: ContractOptions, ...params: unknown[]): SubmittableExtrinsic<ApiType>;\n// }\nexport class SuiContractFactory {\n public packageId: string;\n public metadata: SuiMoveNormalizedModules | undefined;\n // readonly #query: MapMessageQuery<ApiTypes> = {};\n // readonly #tx: MapMessageTx<ApiTypes> = {};\n /**\n * Support the following ways to init the SuiToolkit:\n * 1. mnemonics\n * 2. secretKey (base64 or hex)\n * If none of them is provided, will generate a random mnemonics with 24 words.\n *\n * @param mnemonics, 12 or 24 mnemonics words, separated by space\n * @param secretKey, base64 or hex string, when mnemonics is provided, secretKey will be ignored\n */\n constructor({ packageId, metadata }: ContractFactoryParams = {}) {\n // If the mnemonics or secretKey is provided, use it\n // Otherwise, generate a random mnemonics with 24 words\n this.packageId = packageId || '';\n this.metadata = metadata || undefined;\n }\n\n getFuncByModuleName(moduleName: string) {\n Object.values(this.metadata as SuiMoveNormalizedModules).forEach(\n (value) => {\n const data = value as SuiMoveMoudleValueType;\n console.log(`moudle name: ${data.name}`);\n // console.log(data.exposedFunctions)\n Object.entries(data.exposedFunctions).forEach(([key, value]) => {\n console.log(`\\tfunc name: ${key}`);\n Object.values(value.parameters).forEach((values) => {\n // console.log(values)\n });\n });\n }\n );\n }\n\n getAllFunc() {\n Object.values(this.metadata as SuiMoveNormalizedModules).forEach(\n (value) => {\n const data = value as SuiMoveMoudleValueType;\n console.log(`moudle name: ${data.name}`);\n // console.log(data.exposedFunctions)\n Object.entries(data.exposedFunctions).forEach(([key, value]) => {\n console.log(`\\tfunc name: ${key}`);\n console.log(`\\t\\t${value.parameters.length}`);\n Object.values(value.parameters).forEach((values) => {\n // console.log(values)\n console.log(`\\t\\targs: ${values}`);\n });\n });\n }\n );\n }\n\n getAllModule() {\n Object.values(this.metadata as SuiMoveNormalizedModules).forEach(\n (value, index) => {\n const data = value as SuiMoveMoudleValueType;\n console.log(`${index}. ${data.name}`);\n }\n );\n }\n async worldCall() {}\n\n // async call(arguments: ({\n // kind: \"Input\";\n // index: number;\n // type?: \"object\" | \"pure\" | undefined;\n // value?: any;\n // } | {\n // kind: \"GasCoin\";\n // } | {\n // kind: \"Result\";\n // index: number;\n // } | {\n // kind: \"NestedResult\";\n // index: number;\n // resultIndex: number;\n // })[], derivePathParams?: DerivePathParams) {\n // const tx = new TransactionBlock();\n // tx.moveCall({\n // target: `${this.packageId}::${}::${}`,\n // arguments,\n // })\n // return ;\n // }\n}\n\n// function createTx <ApiType extends ApiTypes> (meta: AbiMessage, fn: (options: ContractOptions, params: unknown[]) => SubmittableExtrinsic<ApiType>): ContractTx<ApiType> {\n// return withMeta(meta, (options: ContractOptions, ...params: unknown[]): SubmittableExtrinsic<ApiType> =>\n// fn(options, params)\n// );\n// }\n","\nimport {\n is,\n ObjectCallArg,\n ObjectId,\n TransactionArgument,\n TransactionBlock,\n normalizeSuiAddress,\n bcs,\n} from '@mysten/sui.js'\nimport { BCS } from '@mysten/bcs'\n\n/** A Move type, e.g., `address`, `bool`, `u64`, `vector<u64>`, `0x2::sui::SUI`... */\nexport type Type = string\n\nexport interface FieldsWithTypes {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n fields: Record<string, any>\n type: string\n}\n\nexport type ObjectArg = ObjectId | ObjectCallArg | TransactionArgument\nexport type PureArg =\n | bigint\n | string\n | number\n | boolean\n | null\n | TransactionArgument\n | Array<PureArg>\nexport type GenericArg = ObjectArg | PureArg | Array<ObjectArg> | Array<PureArg> | Array<GenericArg>\n\nexport function parseTypeName(name: Type): { typeName: string; typeArgs: Type[] } {\n const parsed = bcs.parseTypeName(name)\n return { typeName: parsed.name, typeArgs: parsed.params as string[] }\n}\n\nexport function obj(txb: TransactionBlock, arg: ObjectArg) {\n return is(arg, TransactionArgument) ? arg : txb.object(arg)\n}\n\nexport function pure(txb: TransactionBlock, arg: PureArg, type: Type) {\n if (is(arg, TransactionArgument)) {\n return obj(txb, arg)\n }\n\n function convertType(type: Type): string {\n const { typeName, typeArgs } = parseTypeName(type)\n switch (typeName) {\n case '0x1::string::String':\n case '0x1::ascii::String':\n return BCS.STRING\n case '0x2::object::ID':\n return BCS.ADDRESS\n case '0x1::option::Option':\n return `vector<${convertType(typeArgs[0])}>`\n case 'vector':\n return `vector<${convertType(typeArgs[0])}>`\n default:\n return type\n }\n }\n\n function isOrHasNestedTransactionArgument(arg: PureArg): boolean {\n if (Array.isArray(arg)) {\n return arg.some(item => isOrHasNestedTransactionArgument(item))\n }\n return is(arg, TransactionArgument)\n }\n\n function convertArg(arg: PureArg, type: Type): PureArg {\n const { typeName, typeArgs } = parseTypeName(type)\n if (typeName === '0x1::option::Option') {\n if (arg === null) {\n return []\n } else {\n return [convertArg(arg, typeArgs[0])]\n }\n } else if (typeName === 'vector' && Array.isArray(arg)) {\n return arg.map(item => convertArg(item, typeArgs[0]))\n } else if (typeName === '0x2::object::ID' || typeName === 'address') {\n return normalizeSuiAddress(arg as string)\n } else {\n return arg\n }\n }\n\n // handle some cases when TransactionArgument is nested within a vector or option\n const { typeName, typeArgs } = parseTypeName(type)\n switch (typeName) {\n case '0x1::option::Option':\n if (arg === null) {\n return txb.pure([], `vector<${convertType(typeArgs[0])}>`)\n }\n if (isOrHasNestedTransactionArgument(arg)) {\n throw new Error('nesting TransactionArgument is not currently supported')\n }\n break\n case 'vector':\n if (!Array.isArray(arg)) {\n throw new Error('expected an array for vector type')\n }\n if (arg.length === 0) {\n return txb.pure([], `vector<${convertType(typeArgs[0])}>`)\n }\n if (arg.some(arg => Array.isArray(arg) && isOrHasNestedTransactionArgument(arg))) {\n throw new Error('nesting TransactionArgument is not currently supported')\n }\n if (\n is(arg[0], TransactionArgument) &&\n arg.filter(arg => !is(arg, TransactionArgument)).length > 0\n ) {\n throw new Error('mixing TransactionArgument with other types is not currently supported')\n }\n if (is(arg[0], TransactionArgument)) {\n return txb.makeMoveVec({\n objects: arg as Array<TransactionArgument>,\n type: typeArgs[0],\n })\n }\n }\n\n return txb.pure(convertArg(arg, type), convertType(type))\n}\n\nexport function option(txb: TransactionBlock, type: Type, arg: GenericArg | null) {\n if (arg === null) {\n return pure(txb, arg, `0x1::option::Option<${type}>`)\n }\n\n if (typeArgIsPure(type)) {\n return pure(txb, arg as PureArg | TransactionArgument, `0x1::option::Option<${type}>`)\n } else if (is(arg, TransactionArgument)) {\n return arg\n } else {\n if (arg === null) {\n return pure(txb, arg, `vector<${type}>`)\n }\n\n // wrap it with some\n const val = generic(txb, type, arg)\n return txb.moveCall({\n target: `0x1::option::some`,\n typeArguments: [type],\n arguments: [val],\n })\n }\n}\n\nexport function generic(txb: TransactionBlock, type: Type, arg: GenericArg) {\n if (typeArgIsPure(type)) {\n return pure(txb, arg as PureArg | TransactionArgument, type)\n } else {\n const { typeName, typeArgs } = parseTypeName(type)\n if (typeName === 'vector' && Array.isArray(arg)) {\n const itemType = typeArgs[0]\n\n return txb.makeMoveVec({\n objects: arg.map(item => obj(txb, item as ObjectArg)),\n type: itemType,\n })\n } else {\n return obj(txb, arg as ObjectArg)\n }\n }\n}\n\nexport function vector(\n txb: TransactionBlock,\n itemType: Type,\n items: Array<GenericArg> | TransactionArgument\n) {\n if (typeArgIsPure(itemType)) {\n return pure(txb, items as PureArg, `vector<${itemType}>`)\n } else if (is(items, TransactionArgument)) {\n return items\n } else {\n const { typeName: itemTypeName, typeArgs: itemTypeArgs } = parseTypeName(itemType)\n if (itemTypeName === '0x1::option::Option') {\n const objects = items.map(item => option(txb, itemTypeArgs[0], item))\n return txb.makeMoveVec({\n objects,\n type: itemType,\n })\n }\n\n return txb.makeMoveVec({\n objects: items as Array<TransactionArgument>,\n type: itemType,\n })\n }\n}\n\nexport function typeArgIsPure(type: Type): boolean {\n const { typeName, typeArgs } = parseTypeName(type)\n switch (typeName) {\n case 'bool':\n case 'u8':\n case 'u16':\n case 'u32':\n case 'u64':\n case 'u128':\n case 'u256':\n case 'address':\n case 'signer':\n return true\n case 'vector':\n return typeArgIsPure(typeArgs[0])\n case '0x1::string::String':\n case '0x1::ascii::String':\n case '0x2::object::ID':\n return true\n case '0x1::option::Option':\n return typeArgIsPure(typeArgs[0])\n default:\n return false\n }\n}\n\n","import { SuiMoveNormalizedModules } from '@mysten/sui.js';\nimport { SuiRpcProvider } from '../libs/suiRpcProvider';\nimport { NetworkType } from '../libs/suiRpcProvider/types';\n\nexport async function getMetadata(networkType: NetworkType, packageId: string) {\n const rpcProvider = new SuiRpcProvider({\n networkType,\n });\n\n if (packageId !== undefined) {\n const jsonData = await rpcProvider.getNormalizedMoveModulesByPackage(packageId);\n\n return jsonData as SuiMoveNormalizedModules;\n } else {\n console.error('please set your package id.');\n }\n}\n"],"mappings":"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","names":["TransactionBlock","SUI_SYSTEM_STATE_OBJECT_ID","TransactionBlock","Ed25519Keypair","Ed25519Keypair","JsonRpcProvider","JsonRpcProvider","TransactionBlock","TransactionBlock","value","TransactionArgument","type","typeName","typeArgs","arg","value","TransactionBlock"]}
@@ -1,5 +1,5 @@
1
1
  import { NetworkType } from '../libs/suiRpcProvider/types';
2
- export declare function initialize(networkType: NetworkType, packageId: string): Promise<Record<string, {
2
+ export declare function getMetadata(networkType: NetworkType, packageId: string): Promise<Record<string, {
3
3
  address: string;
4
4
  name: string;
5
5
  fileFormatVersion: number;
@@ -59,10 +59,10 @@ export interface MessageMeta {
59
59
  readonly meta: SuiMoveMoudleFuncType;
60
60
  }
61
61
  export interface ContractQuery extends MessageMeta {
62
- (tx: TransactionBlock, params: SuiTxArgument[]): Promise<DevInspectResults>;
62
+ (tx: TransactionBlock, params: SuiTxArgument[], isRaw?: boolean): Promise<DevInspectResults | TransactionBlock>;
63
63
  }
64
64
  export interface ContractTx extends MessageMeta {
65
- (tx: TransactionBlock, params: SuiTxArgument[], isRaw: boolean): SuiTransactionBlockResponse | TransactionBlock;
65
+ (tx: TransactionBlock, params: SuiTxArgument[], isRaw?: boolean): SuiTransactionBlockResponse | TransactionBlock;
66
66
  }
67
67
  export type MapMessageTx = Record<string, ContractTx>;
68
68
  export type MapMessageQuery = Record<string, ContractQuery>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@0xobelisk/client",
3
- "version": "0.0.5",
3
+ "version": "0.0.6",
4
4
  "description": "Tookit for interacting with move eps framework",
5
5
  "keywords": [
6
6
  "sui",
@@ -59,7 +59,6 @@
59
59
  "@scure/bip39": "^1.2.1",
60
60
  "assert": "^2.0.0",
61
61
  "colorts": "^0.1.63",
62
- "fs": "^0.0.1-security",
63
62
  "husky": "^8.0.3",
64
63
  "process": "^0.11.10",
65
64
  "superstruct": "^1.0.3",
package/src/index.ts CHANGED
@@ -8,5 +8,5 @@ export { SuiAccountManager } from './libs/suiAccountManager';
8
8
  export { SuiTxBlock } from './libs/suiTxBuilder';
9
9
  export { SuiRpcProvider } from './libs/suiRpcProvider';
10
10
  export { SuiContractFactory } from './libs/suiContractFactory';
11
- export { initialize } from './metadata';
11
+ export { getMetadata } from './metadata';
12
12
  export type * from './types';
@@ -1,54 +1,17 @@
1
- import {
2
- RawSigner,
3
- TransactionBlock,
4
- DevInspectResults,
5
- SuiTransactionBlockResponse, JsonRpcProvider, testnetConnection,
6
- SuiMoveNormalizedModules, DynamicFieldPage, DynamicFieldName,
7
- } from '@mysten/sui.js';
8
- import { SuiAddress } from "@mysten/sui.js/src/types";
1
+ import { SuiMoveNormalizedModules } from '@mysten/sui.js';
9
2
  import { SuiRpcProvider } from '../libs/suiRpcProvider';
10
3
  import { NetworkType } from '../libs/suiRpcProvider/types';
11
- import * as fs from 'fs';
12
4
 
13
- export async function initialize(networkType: NetworkType, packageId: string) {
14
- const folderPath = "./metadata"
15
- fs.access(folderPath, (error) => {
16
- if (error) {
17
- fs.mkdir(folderPath, (mkdirError) => {
18
- if (mkdirError) {
19
- console.error('Create folder error:', mkdirError);
20
- } else {
21
- console.log('This folder already exist.');
22
- }
23
- });
24
- } else {
25
- console.log('This folder already exist.');
26
- }
27
- });
28
- const jsonFileName = `${folderPath}/${packageId}.json`;
5
+ export async function getMetadata(networkType: NetworkType, packageId: string) {
6
+ const rpcProvider = new SuiRpcProvider({
7
+ networkType,
8
+ });
29
9
 
30
- const rpcProvider = new SuiRpcProvider({
31
- networkType,
32
- });
33
- try {
34
- const data = await fs.promises.readFile(jsonFileName, 'utf-8');
35
- const jsonData = JSON.parse(data);
10
+ if (packageId !== undefined) {
11
+ const jsonData = await rpcProvider.getNormalizedMoveModulesByPackage(packageId);
36
12
 
37
- return jsonData as SuiMoveNormalizedModules;
38
- } catch (error) {
39
- if (packageId !== undefined) {
40
- const jsonData = await rpcProvider.getNormalizedMoveModulesByPackage(packageId);
41
-
42
- fs.writeFile(jsonFileName, JSON.stringify(jsonData, null, 2), (err) => {
43
- if (err) {
44
- console.error('write data error:', err);
45
- } else {
46
- console.log('Success saved.', jsonFileName);
47
- }
48
- });
49
- return jsonData as SuiMoveNormalizedModules;
50
- } else {
51
- console.error('please set your package id.');
52
- }
53
- }
54
- }
13
+ return jsonData as SuiMoveNormalizedModules;
14
+ } else {
15
+ console.error('please set your package id.');
16
+ }
17
+ }
package/src/obelisk.ts CHANGED
@@ -34,10 +34,10 @@ export function withMeta<T extends { meta: SuiMoveMoudleFuncType }>(meta: SuiMov
34
34
 
35
35
  function createQuery(
36
36
  meta: SuiMoveMoudleFuncType,
37
- fn: (tx: TransactionBlock, params: SuiTxArgument[]) => Promise<DevInspectResults>
37
+ fn: (tx: TransactionBlock, params: SuiTxArgument[], isRaw?: boolean) => Promise<DevInspectResults | TransactionBlock>
38
38
  ): ContractQuery {
39
- return withMeta(meta, async (tx: TransactionBlock, params: SuiTxArgument[]): Promise<DevInspectResults> => {
40
- const result = await fn(tx, params);
39
+ return withMeta(meta, async (tx: TransactionBlock, params: SuiTxArgument[], isRaw?: boolean): Promise<DevInspectResults | TransactionBlock> => {
40
+ const result = await fn(tx, params, isRaw);
41
41
  return result;
42
42
  });
43
43
  }
@@ -115,7 +115,7 @@ export class Obelisk {
115
115
  this.#query[moduleName] = {};
116
116
  }
117
117
  if (isUndefined(this.#query[moduleName][funcName])) {
118
- this.#query[moduleName][funcName] = createQuery(meta, (tx, p) => this.#read(meta, tx, p))
118
+ this.#query[moduleName][funcName] = createQuery(meta, (tx, p, isRaw) => this.#read(meta, tx, p, isRaw))
119
119
  }
120
120
 
121
121
  if (isUndefined(this.#tx[moduleName])) {
@@ -164,11 +164,15 @@ export class Obelisk {
164
164
  };
165
165
 
166
166
 
167
- #read = async (meta: SuiMoveMoudleFuncType, tx: TransactionBlock, params: SuiTxArgument[]) => {
167
+ #read = async (meta: SuiMoveMoudleFuncType, tx: TransactionBlock, params: SuiTxArgument[], isRaw?: boolean) => {
168
168
  tx.moveCall({
169
169
  target: `${this.contractFactory.packageId}::${meta.moudleName}::${meta.funcName}`,
170
170
  arguments: params,
171
171
  })
172
+
173
+ if (isRaw === true) {
174
+ return tx;
175
+ }
172
176
  return await this.inspectTxn(tx);
173
177
  };
174
178
  /**
@@ -74,11 +74,11 @@ export interface MessageMeta {
74
74
  }
75
75
 
76
76
  export interface ContractQuery extends MessageMeta {
77
- (tx: TransactionBlock, params: SuiTxArgument[]): Promise<DevInspectResults>;
77
+ (tx: TransactionBlock, params: SuiTxArgument[], isRaw?: boolean): Promise<DevInspectResults | TransactionBlock>;
78
78
  }
79
79
 
80
80
  export interface ContractTx extends MessageMeta {
81
- (tx: TransactionBlock, params: SuiTxArgument[], isRaw: boolean): SuiTransactionBlockResponse | TransactionBlock;
81
+ (tx: TransactionBlock, params: SuiTxArgument[], isRaw?: boolean): SuiTransactionBlockResponse | TransactionBlock;
82
82
  }
83
83
 
84
84
  export type MapMessageTx = Record<string, ContractTx>;