@0xobelisk/client 0.1.2 → 0.2.3
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 +1 -2
- package/dist/index.js +58 -54
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +57 -53
- package/dist/index.mjs.map +1 -1
- package/dist/obelisk.d.ts +3 -3
- package/package.json +2 -2
- package/src/index.ts +1 -6
- package/src/obelisk.ts +129 -75
- package/LICENSE +0 -202
package/dist/index.mjs
CHANGED
|
@@ -13,13 +13,8 @@ var __privateAdd = (obj, member, value) => {
|
|
|
13
13
|
};
|
|
14
14
|
|
|
15
15
|
// src/index.ts
|
|
16
|
-
|
|
17
|
-
TransactionBlock as TransactionBlock4,
|
|
18
|
-
SUI_CLOCK_OBJECT_ID,
|
|
19
|
-
SUI_SYSTEM_STATE_OBJECT_ID as SUI_SYSTEM_STATE_OBJECT_ID2
|
|
20
|
-
} from "@mysten/sui.js";
|
|
16
|
+
export * from "@mysten/sui.js";
|
|
21
17
|
import { Ed25519Keypair as Ed25519Keypair3 } from "@mysten/sui.js/keypairs/ed25519";
|
|
22
|
-
import { fromB64 as fromB643, toB64 } from "@mysten/sui.js";
|
|
23
18
|
export * from "@mysten/sui.js/bcs";
|
|
24
19
|
|
|
25
20
|
// src/obelisk.ts
|
|
@@ -778,11 +773,6 @@ var SuiContractFactory = class {
|
|
|
778
773
|
// }
|
|
779
774
|
};
|
|
780
775
|
|
|
781
|
-
// src/utils/index.ts
|
|
782
|
-
function capitalizeFirstLetter(input) {
|
|
783
|
-
return input.charAt(0).toUpperCase() + input.slice(1);
|
|
784
|
-
}
|
|
785
|
-
|
|
786
776
|
// src/obelisk.ts
|
|
787
777
|
import keccak256 from "keccak256";
|
|
788
778
|
function isUndefined(value) {
|
|
@@ -793,16 +783,22 @@ function withMeta(meta, creator) {
|
|
|
793
783
|
return creator;
|
|
794
784
|
}
|
|
795
785
|
function createQuery(meta, fn) {
|
|
796
|
-
return withMeta(
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
786
|
+
return withMeta(
|
|
787
|
+
meta,
|
|
788
|
+
async (tx, params, isRaw) => {
|
|
789
|
+
const result = await fn(tx, params, isRaw);
|
|
790
|
+
return result;
|
|
791
|
+
}
|
|
792
|
+
);
|
|
800
793
|
}
|
|
801
794
|
function createTx(meta, fn) {
|
|
802
|
-
return withMeta(
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
795
|
+
return withMeta(
|
|
796
|
+
meta,
|
|
797
|
+
async (tx, params, isRaw) => {
|
|
798
|
+
const result = await fn(tx, params, isRaw);
|
|
799
|
+
return result;
|
|
800
|
+
}
|
|
801
|
+
);
|
|
806
802
|
}
|
|
807
803
|
var _query, _tx, _exec, _read;
|
|
808
804
|
var Obelisk = class {
|
|
@@ -852,28 +848,36 @@ var Obelisk = class {
|
|
|
852
848
|
fullnodeUrls = fullnodeUrls || [getDefaultConnection(networkType).fullnode];
|
|
853
849
|
this.suiInteractor = new SuiInteractor(fullnodeUrls, networkType);
|
|
854
850
|
this.packageId = packageId;
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
__privateGet(this, _query)[moduleName]
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
__privateGet(this, _query)[moduleName][funcName]
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
__privateGet(this, _tx)[moduleName]
|
|
874
|
-
|
|
851
|
+
if (metadata !== void 0) {
|
|
852
|
+
this.metadata = metadata;
|
|
853
|
+
Object.values(metadata).forEach((value) => {
|
|
854
|
+
let data = value;
|
|
855
|
+
let moduleName = data.name;
|
|
856
|
+
Object.entries(data.exposedFunctions).forEach(([funcName, value2]) => {
|
|
857
|
+
let meta = value2;
|
|
858
|
+
meta.moudleName = moduleName;
|
|
859
|
+
meta.funcName = funcName;
|
|
860
|
+
if (isUndefined(__privateGet(this, _query)[moduleName])) {
|
|
861
|
+
__privateGet(this, _query)[moduleName] = {};
|
|
862
|
+
}
|
|
863
|
+
if (isUndefined(__privateGet(this, _query)[moduleName][funcName])) {
|
|
864
|
+
__privateGet(this, _query)[moduleName][funcName] = createQuery(
|
|
865
|
+
meta,
|
|
866
|
+
(tx, p, isRaw) => __privateGet(this, _read).call(this, meta, tx, p, isRaw)
|
|
867
|
+
);
|
|
868
|
+
}
|
|
869
|
+
if (isUndefined(__privateGet(this, _tx)[moduleName])) {
|
|
870
|
+
__privateGet(this, _tx)[moduleName] = {};
|
|
871
|
+
}
|
|
872
|
+
if (isUndefined(__privateGet(this, _tx)[moduleName][funcName])) {
|
|
873
|
+
__privateGet(this, _tx)[moduleName][funcName] = createTx(
|
|
874
|
+
meta,
|
|
875
|
+
(tx, p, isRaw) => __privateGet(this, _exec).call(this, meta, tx, p, isRaw)
|
|
876
|
+
);
|
|
877
|
+
}
|
|
878
|
+
});
|
|
875
879
|
});
|
|
876
|
-
}
|
|
880
|
+
}
|
|
877
881
|
this.contractFactory = new SuiContractFactory({
|
|
878
882
|
packageId,
|
|
879
883
|
metadata
|
|
@@ -1059,26 +1063,31 @@ var Obelisk = class {
|
|
|
1059
1063
|
async getWorld(worldObjectId) {
|
|
1060
1064
|
return this.suiInteractor.getObject(worldObjectId);
|
|
1061
1065
|
}
|
|
1062
|
-
async getComponents(worldId) {
|
|
1063
|
-
const parentId = (await this.suiInteractor.getObject(worldId)).objectFields.
|
|
1064
|
-
return await this.suiInteractor.getDynamicFields(parentId);
|
|
1066
|
+
async getComponents(worldId, cursor, limit) {
|
|
1067
|
+
const parentId = (await this.suiInteractor.getObject(worldId)).objectFields.comps.fields.id.id;
|
|
1068
|
+
return await this.suiInteractor.getDynamicFields(parentId, cursor, limit);
|
|
1065
1069
|
}
|
|
1066
1070
|
async getComponentByName(worldId, componentName) {
|
|
1067
|
-
const
|
|
1071
|
+
const componentNameId = `${componentName}`;
|
|
1072
|
+
const componentId = keccak256(componentNameId);
|
|
1068
1073
|
return await this.getComponent(worldId, componentId);
|
|
1069
1074
|
}
|
|
1070
1075
|
async getComponent(worldId, componentId) {
|
|
1071
1076
|
const componentIdValue = Array.from(componentId);
|
|
1072
|
-
const parentId = (await this.suiInteractor.getObject(worldId)).objectFields.
|
|
1077
|
+
const parentId = (await this.suiInteractor.getObject(worldId)).objectFields.comps.fields.id.id;
|
|
1073
1078
|
const name = {
|
|
1074
|
-
type: "
|
|
1079
|
+
type: "address",
|
|
1075
1080
|
value: componentIdValue
|
|
1076
1081
|
// value: [250,208,186,160,39,171,62,206,98,224,138,41,11,217,63,100,248,104,207,64,78,126,43,109,129,68,64,127,236,113,152,132]
|
|
1077
1082
|
};
|
|
1078
1083
|
return await this.suiInteractor.getDynamicFieldObject(parentId, name);
|
|
1079
1084
|
}
|
|
1080
1085
|
async getOwnedEntities(owner, cursor, limit) {
|
|
1081
|
-
const ownedObjects = await this.suiInteractor.getOwnedObjects(
|
|
1086
|
+
const ownedObjects = await this.suiInteractor.getOwnedObjects(
|
|
1087
|
+
owner,
|
|
1088
|
+
cursor,
|
|
1089
|
+
limit
|
|
1090
|
+
);
|
|
1082
1091
|
let ownedEntities = [];
|
|
1083
1092
|
for (const object of ownedObjects.data) {
|
|
1084
1093
|
let objectDetail = await this.getObject(object.data.objectId);
|
|
@@ -1108,14 +1117,9 @@ async function getMetadata(networkType, packageId) {
|
|
|
1108
1117
|
export {
|
|
1109
1118
|
Ed25519Keypair3 as Ed25519Keypair,
|
|
1110
1119
|
Obelisk,
|
|
1111
|
-
SUI_CLOCK_OBJECT_ID,
|
|
1112
|
-
SUI_SYSTEM_STATE_OBJECT_ID2 as SUI_SYSTEM_STATE_OBJECT_ID,
|
|
1113
1120
|
SuiAccountManager,
|
|
1114
1121
|
SuiContractFactory,
|
|
1115
1122
|
SuiTxBlock,
|
|
1116
|
-
|
|
1117
|
-
fromB643 as fromB64,
|
|
1118
|
-
getMetadata,
|
|
1119
|
-
toB64
|
|
1123
|
+
getMetadata
|
|
1120
1124
|
};
|
|
1121
1125
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.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/suiTxBuilder/index.ts","../src/libs/suiTxBuilder/util.ts","../src/libs/suiInteractor/suiInteractor.ts","../src/libs/suiModel/suiOwnedObject.ts","../src/libs/suiModel/suiSharedObject.ts","../src/libs/suiInteractor/util.ts","../src/libs/suiInteractor/defaultConfig.ts","../src/libs/suiContractFactory/index.ts","../src/utils/index.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 { Ed25519Keypair } from '@mysten/sui.js/keypairs/ed25519';\nexport { fromB64, toB64 } from '@mysten/sui.js';\nexport * from '@mysten/sui.js/bcs';\nexport { Obelisk } from './obelisk';\nexport { SuiAccountManager } from './libs/suiAccountManager';\nexport { SuiTxBlock } from './libs/suiTxBuilder';\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,\n DynamicFieldName,\n SuiAddress\n} from '@mysten/sui.js';\nimport { SuiAccountManager } from './libs/suiAccountManager';\nimport { SuiTxBlock } from './libs/suiTxBuilder';\nimport { SuiInteractor, getDefaultConnection } from './libs/suiInteractor';\nimport { SuiSharedObject, SuiOwnedObject } from './libs/suiModel';\n\nimport { ObeliskObjectData } from 'src/types';\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, FaucetNetworkType\n} from './types';\nimport {capitalizeFirstLetter} from \"./utils\"\nimport keccak256 from \"keccak256\";\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 suiInteractor: SuiInteractor;\n public contractFactory: SuiContractFactory;\n public packageId: string | undefined;\n public metadata: SuiMoveNormalizedModules;\n\n readonly #query: MapMoudleFuncQuery = {};\n readonly #tx: MapMoudleFuncTx = {};\n /**\n * Support the following ways to init the ObeliskClient:\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 packageId\n */\n constructor({\n mnemonics,\n secretKey,\n networkType,\n fullnodeUrls,\n packageId,\n metadata\n }: ObeliskParams = {}) {\n // Init the account manager\n this.accountManager = new SuiAccountManager({ mnemonics, secretKey });\n // Init the rpc provider\n fullnodeUrls = fullnodeUrls || [getDefaultConnection(networkType).fullnode];\n this.suiInteractor = new SuiInteractor(fullnodeUrls, networkType);\n\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 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.suiInteractor.currentProvider);\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.suiInteractor.currentProvider;\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(address: SuiAddress, network: FaucetNetworkType) {\n // const addr = this.accountManager.getAddress(derivePathParams);\n return this.suiInteractor.requestFaucet(address, network);\n }\n\n async getBalance(coinType?: string, derivePathParams?: DerivePathParams) {\n const owner = this.accountManager.getAddress(derivePathParams);\n return this.suiInteractor.currentProvider.getBalance({ owner, coinType });\n }\n\n async getObject(objectId: string) {\n return this.suiInteractor.getObject(objectId);\n }\n\n async getObjects(objectIds: string[]) {\n return this.suiInteractor.getObjects(objectIds);\n }\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 const { transactionBlockBytes, signature } = await this.signTxn(\n tx,\n derivePathParams\n );\n return this.suiInteractor.sendTx(transactionBlockBytes, signature);\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.suiInteractor.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.suiInteractor.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 tx = tx instanceof SuiTxBlock ? tx.txBlock : tx;\n return this.suiInteractor.currentProvider.devInspectTransactionBlock({\n transactionBlock: tx,\n sender: this.getAddress(derivePathParams),\n });\n }\n\n async getWorld(worldObjectId: string) {\n return this.suiInteractor.getObject(worldObjectId)\n }\n\n async getComponents(worldId: string) {\n const parentId = (await this.suiInteractor.getObject(worldId)).objectFields.components.fields.id.id;\n\n return await this.suiInteractor.getDynamicFields(parentId);\n }\n\n\n async getComponentByName(worldId: string, componentName: string) {\n const componentId = keccak256(`${capitalizeFirstLetter(componentName)} Component`);\n return await this.getComponent(worldId, componentId);\n }\n\n async getComponent(worldId: string, componentId: Buffer) {\n const componentIdValue: number[] = Array.from(componentId);\n const parentId = (await this.suiInteractor.getObject(worldId)).objectFields.components.fields.id.id;\n\n const name = {\n type: \"vector<u8>\",\n value: componentIdValue\n // value: [250,208,186,160,39,171,62,206,98,224,138,41,11,217,63,100,248,104,207,64,78,126,43,109,129,68,64,127,236,113,152,132]\n } as DynamicFieldName\n return await this.suiInteractor.getDynamicFieldObject(parentId, name);\n }\n\n async getOwnedEntities(owner: SuiAddress, cursor?: string, limit?: number) {\n const ownedObjects = await this.suiInteractor.getOwnedObjects(owner, cursor, limit)\n let ownedEntities: ObeliskObjectData[] = [];\n \n for (const object of ownedObjects.data) {\n let objectDetail = await this.getObject(object.data!.objectId);\n \n if (objectDetail.objectType.split(\"::\")[0] === this.contractFactory.packageId) {\n ownedEntities.push(objectDetail);\n }\n }\n \n return ownedEntities;\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 'src/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, fromB64 } from '@mysten/sui.js';\nimport type { DerivePathParams } from 'src/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 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 'src/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 'src/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 {\n SuiTransactionBlockResponse,\n SuiTransactionBlockResponseOptions,\n JsonRpcProvider,\n Connection,\n getObjectDisplay,\n getObjectFields,\n getObjectId,\n getObjectType,\n getObjectVersion,\n getSharedObjectInitialVersion,\n DynamicFieldName,\n SuiAddress\n} from '@mysten/sui.js';\nimport { requestSuiFromFaucetV0, getFaucetHost } from '@mysten/sui.js/faucet';\nimport { SuiClient, getFullnodeUrl, GetBalanceParams } from '@mysten/sui.js/client';\nimport { FaucetNetworkType, NetworkType, ObjectData } from 'src/types';\nimport { SuiOwnedObject, SuiSharedObject } from '../suiModel';\nimport { delay } from './util';\n\n/**\n * `SuiTransactionSender` is used to send transaction with a given gas coin.\n * It always uses the gas coin to pay for the gas,\n * and update the gas coin after the transaction.\n */\nexport class SuiInteractor {\n public readonly providers: JsonRpcProvider[];\n public currentProvider: JsonRpcProvider;\n public network?: NetworkType;\n\n constructor(fullNodeUrls: string[], network?: NetworkType) {\n if (fullNodeUrls.length === 0)\n throw new Error('fullNodeUrls must not be empty');\n this.providers = fullNodeUrls.map(\n (url) => new JsonRpcProvider(new Connection({ fullnode: url }))\n );\n this.currentProvider = this.providers[0];\n this.network = network;\n }\n\n switchToNextProvider() {\n const currentProviderIdx = this.providers.indexOf(this.currentProvider);\n this.currentProvider =\n this.providers[(currentProviderIdx + 1) % this.providers.length];\n }\n\n async sendTx(\n transactionBlock: Uint8Array | string,\n signature: string | string[]\n ): Promise<SuiTransactionBlockResponse> {\n const txResOptions: SuiTransactionBlockResponseOptions = {\n showEvents: true,\n showEffects: true,\n showObjectChanges: true,\n showBalanceChanges: true,\n };\n\n // const currentProviderIdx = this.providers.indexOf(this.currentProvider);\n // const providers = [\n // ...this.providers.slice(currentProviderIdx, this.providers.length),\n // ...this.providers.slice(0, currentProviderIdx),\n // ]\n\n for (const provider of this.providers) {\n try {\n const res = await provider.executeTransactionBlock({\n transactionBlock,\n signature,\n options: txResOptions,\n });\n return res;\n } catch (err) {\n console.warn(\n `Failed to send transaction with fullnode ${provider.connection.fullnode}: ${err}`\n );\n await delay(2000);\n }\n }\n throw new Error('Failed to send transaction with all fullnodes');\n }\n async getObjects(ids: string[]) {\n const options = {\n showContent: true,\n showDisplay: true,\n showType: true,\n showOwner: true,\n };\n\n // const currentProviderIdx = this.providers.indexOf(this.currentProvider);\n // const providers = [\n // ...this.providers.slice(currentProviderIdx, this.providers.length),\n // ...this.providers.slice(0, currentProviderIdx),\n // ]\n\n for (const provider of this.providers) {\n try {\n const objects = await 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 objectDigest = object.data ? object.data.digest : undefined;\n const initialSharedVersion = getSharedObjectInitialVersion(object);\n const objectFields = getObjectFields(object);\n const objectDisplay = getObjectDisplay(object);\n return {\n objectId,\n objectType,\n objectVersion,\n objectDigest,\n objectFields,\n objectDisplay,\n initialSharedVersion,\n };\n });\n return parsedObjects as ObjectData[];\n } catch (err) {\n await delay(2000);\n console.warn(\n `Failed to get objects with fullnode ${provider.connection.fullnode}: ${err}`\n );\n }\n }\n throw new Error('Failed to get objects with all fullnodes');\n }\n\n async getObject(id: string) {\n const objects = await this.getObjects([id]);\n return objects[0];\n }\n\n\n async getDynamicFieldObject(parentId: string, name: string | DynamicFieldName) {\n for (const provider of this.providers) {\n try {\n return provider.getDynamicFieldObject({ parentId, name })\n } catch (err) {\n await delay(2000);\n console.warn(\n `Failed to get objects with fullnode ${provider.connection.fullnode}: ${err}`\n );\n }\n }\n throw new Error('Failed to get objects with all fullnodes');\n }\n\n async getDynamicFields(parentId: string, cursor?: string, limit?: number) {\n for (const provider of this.providers) {\n try {\n return provider.getDynamicFields({ parentId, cursor, limit })\n } catch (err) {\n await delay(2000);\n console.warn(\n `Failed to get objects with fullnode ${provider.connection.fullnode}: ${err}`\n );\n }\n }\n throw new Error('Failed to get objects with all fullnodes');\n }\n\n async getOwnedObjects(owner: SuiAddress, cursor?: string, limit?: number) {\n for (const provider of this.providers) {\n try {\n return await provider.getOwnedObjects({ owner, cursor, limit });\n } catch (err) {\n await delay(2000);\n console.warn(\n `Failed to get objects with fullnode ${provider.connection.fullnode}: ${err}`\n );\n }\n }\n throw new Error('Failed to get objects with all fullnodes');\n }\n\n\n async getNormalizedMoveModulesByPackage(packageId: string) {\n for (const provider of this.providers) {\n try {\n return provider.getNormalizedMoveModulesByPackage({package: packageId});\n\n } catch (err) {\n await delay(2000);\n console.warn(\n `Failed to get objects with fullnode ${provider.connection.fullnode}: ${err}`\n );\n }\n }\n throw new Error('Failed to get objects with all fullnodes');\n }\n\n /**\n * @description Update objects in a batch\n * @param suiObjects\n */\n async updateObjects(suiObjects: (SuiOwnedObject | SuiSharedObject)[]) {\n const objectIds = suiObjects.map((obj) => obj.objectId);\n const objects = await this.getObjects(objectIds);\n for (const object of objects) {\n const suiObject = suiObjects.find(\n (obj) => obj.objectId === object.objectId\n );\n if (suiObject instanceof SuiSharedObject) {\n suiObject.initialSharedVersion = object.initialSharedVersion;\n } else if (suiObject instanceof SuiOwnedObject) {\n suiObject.version = object.objectVersion;\n suiObject.digest = object.objectDigest;\n }\n }\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 selectedCoins: {\n objectId: string;\n digest: string;\n version: string;\n }[] = [];\n let totalAmount = 0;\n let hasNext = true,\n nextCursor: string | null = null;\n while (hasNext && totalAmount < amount) {\n const coins = await this.currentProvider.getCoins({\n owner: addr,\n coinType: coinType,\n cursor: nextCursor,\n });\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 nextCursor = coins.nextCursor;\n hasNext = coins.hasNextPage;\n }\n\n if (!selectedCoins.length) {\n throw new Error('No valid coins found for the transaction.');\n }\n return selectedCoins;\n }\n\n async requestFaucet(address: SuiAddress, network: FaucetNetworkType) {\n await requestSuiFromFaucetV0({\n host: getFaucetHost(network),\n recipient: address,\n });\n // let params = {\n // owner: address\n // } as GetBalanceParams;\n }\n}\n","import { Infer } from 'superstruct';\nimport {\n getObjectChanges,\n SuiTransactionBlockResponse,\n ObjectCallArg,\n ObjectId,\n} from '@mysten/sui.js';\n\nexport class SuiOwnedObject {\n public readonly objectId: string;\n public version?: number | string;\n public digest?: string;\n\n constructor(param: { objectId: string; version?: string; digest?: string }) {\n this.objectId = param.objectId;\n this.version = param.version;\n this.digest = param.digest;\n }\n\n /**\n * Check if the object is fully initialized.\n * So that when it's used as an input, it won't be necessary to fetch from fullnode again.\n * Which can save time when sending transactions.\n */\n isFullObject(): boolean {\n return !!this.version && !!this.digest;\n }\n\n asCallArg(): Infer<typeof ObjectCallArg> | Infer<typeof ObjectId> {\n if (!this.version || !this.digest) {\n return this.objectId;\n }\n return {\n Object: {\n ImmOrOwned: {\n objectId: this.objectId,\n version: this.version,\n digest: this.digest,\n },\n },\n };\n }\n\n /**\n * Update object version & digest based on the transaction response.\n * @param txResponse\n */\n updateFromTxResponse(txResponse: SuiTransactionBlockResponse) {\n const changes = getObjectChanges(txResponse);\n if (!changes) {\n throw new Error('Bad transaction response!');\n }\n for (const change of changes) {\n if (change.type === 'mutated' && change.objectId === this.objectId) {\n this.digest = change.digest;\n this.version = change.version;\n return;\n }\n }\n throw new Error('Could not find object in transaction response!');\n }\n}\n","import { Infer } from 'superstruct';\nimport { ObjectCallArg, ObjectId } from '@mysten/sui.js';\n\nexport class SuiSharedObject {\n public readonly objectId: string;\n public initialSharedVersion?: number | string;\n\n constructor(param: {\n objectId: string;\n initialSharedVersion?: number;\n mutable?: boolean;\n }) {\n this.objectId = param.objectId;\n this.initialSharedVersion = param.initialSharedVersion;\n }\n\n asCallArg(\n mutable: boolean = false\n ): Infer<typeof ObjectCallArg> | Infer<typeof ObjectId> {\n if (!this.initialSharedVersion) {\n return this.objectId;\n }\n return {\n Object: {\n Shared: {\n objectId: this.objectId,\n initialSharedVersion: this.initialSharedVersion,\n mutable,\n },\n },\n };\n }\n}\n","export const delay = (ms: number) =>\n new Promise((resolve) => setTimeout(resolve, ms));\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 'src/types';\nexport const defaultGasBudget = 10 ** 8; // 0.1 SUI, should be enough for most of the transactions\nexport const defaultGasPrice = 1000; // 1000 MIST\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 getDefaultConnection = (\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 { 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\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","export function capitalizeFirstLetter(input: string): string {\n return input.charAt(0).toUpperCase() + input.slice(1);\n}\n","import { SuiMoveNormalizedModules } from '@mysten/sui.js';\nimport { SuiInteractor, getDefaultConnection } from '../libs/suiInteractor';\n\nimport { NetworkType } from 'src/types';\n\nexport async function getMetadata(networkType: NetworkType, packageId: string) {\n // Init the rpc provider\n const fullnodeUrls = [getDefaultConnection(networkType).fullnode];\n const suiInteractor = new SuiInteractor(fullnodeUrls);\n if (packageId !== undefined) {\n const jsonData = await suiInteractor.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","Ed25519Keypair","fromB64","Ed25519Keypair","fromB64","Ed25519Keypair","TransactionBlock","TransactionBlock","JsonRpcProvider","JsonRpcProvider","value","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/suiTxBuilder/index.ts","../src/libs/suiTxBuilder/util.ts","../src/libs/suiInteractor/suiInteractor.ts","../src/libs/suiModel/suiOwnedObject.ts","../src/libs/suiModel/suiSharedObject.ts","../src/libs/suiInteractor/util.ts","../src/libs/suiInteractor/defaultConfig.ts","../src/libs/suiContractFactory/index.ts","../src/metadata/index.ts"],"sourcesContent":["export * from '@mysten/sui.js';\nexport { Ed25519Keypair } from '@mysten/sui.js/keypairs/ed25519';\nexport * from '@mysten/sui.js/bcs';\nexport { Obelisk } from './obelisk';\nexport { SuiAccountManager } from './libs/suiAccountManager';\nexport { SuiTxBlock } from './libs/suiTxBuilder';\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,\n DynamicFieldName,\n SuiAddress,\n} from '@mysten/sui.js';\nimport { SuiAccountManager } from './libs/suiAccountManager';\nimport { SuiTxBlock } from './libs/suiTxBuilder';\nimport { SuiInteractor, getDefaultConnection } from './libs/suiInteractor';\nimport { SuiSharedObject, SuiOwnedObject } from './libs/suiModel';\n\nimport { ObeliskObjectData } from 'src/types';\nimport { SuiContractFactory } from './libs/suiContractFactory';\nimport {\n SuiMoveMoudleValueType,\n SuiMoveMoudleFuncType,\n} from './libs/suiContractFactory/types';\nimport {\n ObeliskParams,\n DerivePathParams,\n SuiTxArg,\n SuiVecTxArg,\n ComponentContentType,\n SuiTxArgument,\n ContractQuery,\n ContractTx,\n MapMoudleFuncQuery,\n MapMoudleFuncTx,\n FaucetNetworkType,\n} from './types';\nimport { capitalizeFirstLetter } from './utils';\nimport keccak256 from 'keccak256';\n\nexport function isUndefined(value?: unknown): value is undefined {\n return value === undefined;\n}\n\nexport function withMeta<T extends { meta: SuiMoveMoudleFuncType }>(\n meta: SuiMoveMoudleFuncType,\n creator: Omit<T, 'meta'>\n): T {\n (creator as T).meta = meta;\n\n return creator as T;\n}\n\nfunction createQuery(\n meta: SuiMoveMoudleFuncType,\n fn: (\n tx: TransactionBlock,\n params: SuiTxArgument[],\n isRaw?: boolean\n ) => Promise<DevInspectResults | TransactionBlock>\n): ContractQuery {\n return withMeta(\n meta,\n async (\n tx: TransactionBlock,\n params: SuiTxArgument[],\n isRaw?: boolean\n ): Promise<DevInspectResults | TransactionBlock> => {\n const result = await fn(tx, params, isRaw);\n return result;\n }\n );\n}\n\nfunction createTx(\n meta: SuiMoveMoudleFuncType,\n fn: (\n tx: TransactionBlock,\n params: SuiTxArgument[],\n isRaw?: boolean\n ) => Promise<SuiTransactionBlockResponse | TransactionBlock>\n): ContractTx {\n return withMeta(\n meta,\n async (\n tx: TransactionBlock,\n params: SuiTxArgument[],\n isRaw?: boolean\n ): Promise<SuiTransactionBlockResponse | TransactionBlock> => {\n const result = await fn(tx, params, isRaw);\n return result;\n }\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 suiInteractor: SuiInteractor;\n public contractFactory: SuiContractFactory;\n public packageId: string | undefined;\n public metadata: SuiMoveNormalizedModules | undefined;\n\n readonly #query: MapMoudleFuncQuery = {};\n readonly #tx: MapMoudleFuncTx = {};\n /**\n * Support the following ways to init the ObeliskClient:\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 packageId\n */\n constructor({\n mnemonics,\n secretKey,\n networkType,\n fullnodeUrls,\n packageId,\n metadata,\n }: ObeliskParams = {}) {\n // Init the account manager\n this.accountManager = new SuiAccountManager({ mnemonics, secretKey });\n // Init the rpc provider\n fullnodeUrls = fullnodeUrls || [getDefaultConnection(networkType).fullnode];\n this.suiInteractor = new SuiInteractor(fullnodeUrls, networkType);\n\n this.packageId = packageId;\n if (metadata !== undefined) {\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(\n meta,\n (tx, p, isRaw) => this.#read(meta, tx, p, isRaw)\n );\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) =>\n this.#exec(meta, tx, p, isRaw)\n );\n }\n });\n });\n }\n this.contractFactory = new SuiContractFactory({\n packageId,\n metadata,\n });\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 (\n meta: SuiMoveMoudleFuncType,\n tx: TransactionBlock,\n params: SuiTxArgument[],\n isRaw?: boolean\n ) => {\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 #read = async (\n meta: SuiMoveMoudleFuncType,\n tx: TransactionBlock,\n params: SuiTxArgument[],\n isRaw?: boolean\n ) => {\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.suiInteractor.currentProvider);\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.suiInteractor.currentProvider;\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(address: SuiAddress, network: FaucetNetworkType) {\n // const addr = this.accountManager.getAddress(derivePathParams);\n return this.suiInteractor.requestFaucet(address, network);\n }\n\n async getBalance(coinType?: string, derivePathParams?: DerivePathParams) {\n const owner = this.accountManager.getAddress(derivePathParams);\n return this.suiInteractor.currentProvider.getBalance({ owner, coinType });\n }\n\n async getObject(objectId: string) {\n return this.suiInteractor.getObject(objectId);\n }\n\n async getObjects(objectIds: string[]) {\n return this.suiInteractor.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 const { transactionBlockBytes, signature } = await this.signTxn(\n tx,\n derivePathParams\n );\n return this.suiInteractor.sendTx(transactionBlockBytes, signature);\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.suiInteractor.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.suiInteractor.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 tx = tx instanceof SuiTxBlock ? tx.txBlock : tx;\n return this.suiInteractor.currentProvider.devInspectTransactionBlock({\n transactionBlock: tx,\n sender: this.getAddress(derivePathParams),\n });\n }\n\n async getWorld(worldObjectId: string) {\n return this.suiInteractor.getObject(worldObjectId);\n }\n\n async getComponents(worldId: string, cursor?: string, limit?: number) {\n const parentId = (await this.suiInteractor.getObject(worldId)).objectFields\n .comps.fields.id.id;\n\n return await this.suiInteractor.getDynamicFields(parentId, cursor, limit);\n }\n\n async getComponentByName(worldId: string, componentName: string) {\n const componentNameId = `${componentName}`;\n const componentId = keccak256(componentNameId);\n return await this.getComponent(worldId, componentId);\n }\n\n async getComponent(worldId: string, componentId: Buffer) {\n const componentIdValue: number[] = Array.from(componentId);\n const parentId = (await this.suiInteractor.getObject(worldId)).objectFields\n .comps.fields.id.id;\n const name = {\n type: 'address',\n value: componentIdValue,\n // value: [250,208,186,160,39,171,62,206,98,224,138,41,11,217,63,100,248,104,207,64,78,126,43,109,129,68,64,127,236,113,152,132]\n } as DynamicFieldName;\n return await this.suiInteractor.getDynamicFieldObject(parentId, name);\n }\n\n async getOwnedEntities(owner: SuiAddress, cursor?: string, limit?: number) {\n const ownedObjects = await this.suiInteractor.getOwnedObjects(\n owner,\n cursor,\n limit\n );\n let ownedEntities: ObeliskObjectData[] = [];\n\n for (const object of ownedObjects.data) {\n let objectDetail = await this.getObject(object.data!.objectId);\n\n if (\n objectDetail.objectType.split('::')[0] ===\n this.contractFactory.packageId\n ) {\n ownedEntities.push(objectDetail);\n }\n }\n\n return ownedEntities;\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 'src/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, fromB64 } from '@mysten/sui.js';\nimport type { DerivePathParams } from 'src/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 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 'src/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 'src/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 {\n SuiTransactionBlockResponse,\n SuiTransactionBlockResponseOptions,\n JsonRpcProvider,\n Connection,\n getObjectDisplay,\n getObjectFields,\n getObjectId,\n getObjectType,\n getObjectVersion,\n getSharedObjectInitialVersion,\n DynamicFieldName,\n SuiAddress\n} from '@mysten/sui.js';\nimport { requestSuiFromFaucetV0, getFaucetHost } from '@mysten/sui.js/faucet';\nimport { SuiClient, getFullnodeUrl, GetBalanceParams } from '@mysten/sui.js/client';\nimport { FaucetNetworkType, NetworkType, ObjectData } from 'src/types';\nimport { SuiOwnedObject, SuiSharedObject } from '../suiModel';\nimport { delay } from './util';\n\n/**\n * `SuiTransactionSender` is used to send transaction with a given gas coin.\n * It always uses the gas coin to pay for the gas,\n * and update the gas coin after the transaction.\n */\nexport class SuiInteractor {\n public readonly providers: JsonRpcProvider[];\n public currentProvider: JsonRpcProvider;\n public network?: NetworkType;\n\n constructor(fullNodeUrls: string[], network?: NetworkType) {\n if (fullNodeUrls.length === 0)\n throw new Error('fullNodeUrls must not be empty');\n this.providers = fullNodeUrls.map(\n (url) => new JsonRpcProvider(new Connection({ fullnode: url }))\n );\n this.currentProvider = this.providers[0];\n this.network = network;\n }\n\n switchToNextProvider() {\n const currentProviderIdx = this.providers.indexOf(this.currentProvider);\n this.currentProvider =\n this.providers[(currentProviderIdx + 1) % this.providers.length];\n }\n\n async sendTx(\n transactionBlock: Uint8Array | string,\n signature: string | string[]\n ): Promise<SuiTransactionBlockResponse> {\n const txResOptions: SuiTransactionBlockResponseOptions = {\n showEvents: true,\n showEffects: true,\n showObjectChanges: true,\n showBalanceChanges: true,\n };\n\n // const currentProviderIdx = this.providers.indexOf(this.currentProvider);\n // const providers = [\n // ...this.providers.slice(currentProviderIdx, this.providers.length),\n // ...this.providers.slice(0, currentProviderIdx),\n // ]\n\n for (const provider of this.providers) {\n try {\n const res = await provider.executeTransactionBlock({\n transactionBlock,\n signature,\n options: txResOptions,\n });\n return res;\n } catch (err) {\n console.warn(\n `Failed to send transaction with fullnode ${provider.connection.fullnode}: ${err}`\n );\n await delay(2000);\n }\n }\n throw new Error('Failed to send transaction with all fullnodes');\n }\n async getObjects(ids: string[]) {\n const options = {\n showContent: true,\n showDisplay: true,\n showType: true,\n showOwner: true,\n };\n\n // const currentProviderIdx = this.providers.indexOf(this.currentProvider);\n // const providers = [\n // ...this.providers.slice(currentProviderIdx, this.providers.length),\n // ...this.providers.slice(0, currentProviderIdx),\n // ]\n\n for (const provider of this.providers) {\n try {\n const objects = await 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 objectDigest = object.data ? object.data.digest : undefined;\n const initialSharedVersion = getSharedObjectInitialVersion(object);\n const objectFields = getObjectFields(object);\n const objectDisplay = getObjectDisplay(object);\n return {\n objectId,\n objectType,\n objectVersion,\n objectDigest,\n objectFields,\n objectDisplay,\n initialSharedVersion,\n };\n });\n return parsedObjects as ObjectData[];\n } catch (err) {\n await delay(2000);\n console.warn(\n `Failed to get objects with fullnode ${provider.connection.fullnode}: ${err}`\n );\n }\n }\n throw new Error('Failed to get objects with all fullnodes');\n }\n\n async getObject(id: string) {\n const objects = await this.getObjects([id]);\n return objects[0];\n }\n\n\n async getDynamicFieldObject(parentId: string, name: string | DynamicFieldName) {\n for (const provider of this.providers) {\n try {\n return provider.getDynamicFieldObject({ parentId, name })\n } catch (err) {\n await delay(2000);\n console.warn(\n `Failed to get objects with fullnode ${provider.connection.fullnode}: ${err}`\n );\n }\n }\n throw new Error('Failed to get objects with all fullnodes');\n }\n\n async getDynamicFields(parentId: string, cursor?: string, limit?: number) {\n for (const provider of this.providers) {\n try {\n return provider.getDynamicFields({ parentId, cursor, limit })\n } catch (err) {\n await delay(2000);\n console.warn(\n `Failed to get objects with fullnode ${provider.connection.fullnode}: ${err}`\n );\n }\n }\n throw new Error('Failed to get objects with all fullnodes');\n }\n\n async getOwnedObjects(owner: SuiAddress, cursor?: string, limit?: number) {\n for (const provider of this.providers) {\n try {\n return await provider.getOwnedObjects({ owner, cursor, limit });\n } catch (err) {\n await delay(2000);\n console.warn(\n `Failed to get objects with fullnode ${provider.connection.fullnode}: ${err}`\n );\n }\n }\n throw new Error('Failed to get objects with all fullnodes');\n }\n\n\n async getNormalizedMoveModulesByPackage(packageId: string) {\n for (const provider of this.providers) {\n try {\n return provider.getNormalizedMoveModulesByPackage({package: packageId});\n\n } catch (err) {\n await delay(2000);\n console.warn(\n `Failed to get objects with fullnode ${provider.connection.fullnode}: ${err}`\n );\n }\n }\n throw new Error('Failed to get objects with all fullnodes');\n }\n\n /**\n * @description Update objects in a batch\n * @param suiObjects\n */\n async updateObjects(suiObjects: (SuiOwnedObject | SuiSharedObject)[]) {\n const objectIds = suiObjects.map((obj) => obj.objectId);\n const objects = await this.getObjects(objectIds);\n for (const object of objects) {\n const suiObject = suiObjects.find(\n (obj) => obj.objectId === object.objectId\n );\n if (suiObject instanceof SuiSharedObject) {\n suiObject.initialSharedVersion = object.initialSharedVersion;\n } else if (suiObject instanceof SuiOwnedObject) {\n suiObject.version = object.objectVersion;\n suiObject.digest = object.objectDigest;\n }\n }\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 selectedCoins: {\n objectId: string;\n digest: string;\n version: string;\n }[] = [];\n let totalAmount = 0;\n let hasNext = true,\n nextCursor: string | null = null;\n while (hasNext && totalAmount < amount) {\n const coins = await this.currentProvider.getCoins({\n owner: addr,\n coinType: coinType,\n cursor: nextCursor,\n });\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 nextCursor = coins.nextCursor;\n hasNext = coins.hasNextPage;\n }\n\n if (!selectedCoins.length) {\n throw new Error('No valid coins found for the transaction.');\n }\n return selectedCoins;\n }\n\n async requestFaucet(address: SuiAddress, network: FaucetNetworkType) {\n await requestSuiFromFaucetV0({\n host: getFaucetHost(network),\n recipient: address,\n });\n // let params = {\n // owner: address\n // } as GetBalanceParams;\n }\n}\n","import { Infer } from 'superstruct';\nimport {\n getObjectChanges,\n SuiTransactionBlockResponse,\n ObjectCallArg,\n ObjectId,\n} from '@mysten/sui.js';\n\nexport class SuiOwnedObject {\n public readonly objectId: string;\n public version?: number | string;\n public digest?: string;\n\n constructor(param: { objectId: string; version?: string; digest?: string }) {\n this.objectId = param.objectId;\n this.version = param.version;\n this.digest = param.digest;\n }\n\n /**\n * Check if the object is fully initialized.\n * So that when it's used as an input, it won't be necessary to fetch from fullnode again.\n * Which can save time when sending transactions.\n */\n isFullObject(): boolean {\n return !!this.version && !!this.digest;\n }\n\n asCallArg(): Infer<typeof ObjectCallArg> | Infer<typeof ObjectId> {\n if (!this.version || !this.digest) {\n return this.objectId;\n }\n return {\n Object: {\n ImmOrOwned: {\n objectId: this.objectId,\n version: this.version,\n digest: this.digest,\n },\n },\n };\n }\n\n /**\n * Update object version & digest based on the transaction response.\n * @param txResponse\n */\n updateFromTxResponse(txResponse: SuiTransactionBlockResponse) {\n const changes = getObjectChanges(txResponse);\n if (!changes) {\n throw new Error('Bad transaction response!');\n }\n for (const change of changes) {\n if (change.type === 'mutated' && change.objectId === this.objectId) {\n this.digest = change.digest;\n this.version = change.version;\n return;\n }\n }\n throw new Error('Could not find object in transaction response!');\n }\n}\n","import { Infer } from 'superstruct';\nimport { ObjectCallArg, ObjectId } from '@mysten/sui.js';\n\nexport class SuiSharedObject {\n public readonly objectId: string;\n public initialSharedVersion?: number | string;\n\n constructor(param: {\n objectId: string;\n initialSharedVersion?: number;\n mutable?: boolean;\n }) {\n this.objectId = param.objectId;\n this.initialSharedVersion = param.initialSharedVersion;\n }\n\n asCallArg(\n mutable: boolean = false\n ): Infer<typeof ObjectCallArg> | Infer<typeof ObjectId> {\n if (!this.initialSharedVersion) {\n return this.objectId;\n }\n return {\n Object: {\n Shared: {\n objectId: this.objectId,\n initialSharedVersion: this.initialSharedVersion,\n mutable,\n },\n },\n };\n }\n}\n","export const delay = (ms: number) =>\n new Promise((resolve) => setTimeout(resolve, ms));\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 'src/types';\nexport const defaultGasBudget = 10 ** 8; // 0.1 SUI, should be enough for most of the transactions\nexport const defaultGasPrice = 1000; // 1000 MIST\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 getDefaultConnection = (\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 { 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\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","import { SuiMoveNormalizedModules } from '@mysten/sui.js';\nimport { SuiInteractor, getDefaultConnection } from '../libs/suiInteractor';\n\nimport { NetworkType } from 'src/types';\n\nexport async function getMetadata(networkType: NetworkType, packageId: string) {\n // Init the rpc provider\n const fullnodeUrls = [getDefaultConnection(networkType).fullnode];\n const suiInteractor = new SuiInteractor(fullnodeUrls);\n if (packageId !== undefined) {\n const jsonData = await suiInteractor.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":["Ed25519Keypair","Ed25519Keypair","fromB64","Ed25519Keypair","TransactionBlock","TransactionBlock","JsonRpcProvider","JsonRpcProvider","value","value"]}
|
package/dist/obelisk.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ export declare class Obelisk {
|
|
|
21
21
|
suiInteractor: SuiInteractor;
|
|
22
22
|
contractFactory: SuiContractFactory;
|
|
23
23
|
packageId: string | undefined;
|
|
24
|
-
metadata: SuiMoveNormalizedModules;
|
|
24
|
+
metadata: SuiMoveNormalizedModules | undefined;
|
|
25
25
|
/**
|
|
26
26
|
* Support the following ways to init the ObeliskClient:
|
|
27
27
|
* 1. mnemonics
|
|
@@ -34,7 +34,7 @@ export declare class Obelisk {
|
|
|
34
34
|
* @param fullnodeUrl, the fullnode url, default is the preconfig fullnode url for the given network type
|
|
35
35
|
* @param packageId
|
|
36
36
|
*/
|
|
37
|
-
constructor({ mnemonics, secretKey, networkType, fullnodeUrls, packageId, metadata }?: ObeliskParams);
|
|
37
|
+
constructor({ mnemonics, secretKey, networkType, fullnodeUrls, packageId, metadata, }?: ObeliskParams);
|
|
38
38
|
get query(): MapMoudleFuncQuery;
|
|
39
39
|
get tx(): MapMoudleFuncTx;
|
|
40
40
|
/**
|
|
@@ -2555,7 +2555,7 @@ export declare class Obelisk {
|
|
|
2555
2555
|
*/
|
|
2556
2556
|
inspectTxn(tx: Uint8Array | TransactionBlock | SuiTxBlock, derivePathParams?: DerivePathParams): Promise<DevInspectResults>;
|
|
2557
2557
|
getWorld(worldObjectId: string): Promise<import("src/types").ObjectData>;
|
|
2558
|
-
getComponents(worldId: string): Promise<{
|
|
2558
|
+
getComponents(worldId: string, cursor?: string, limit?: number): Promise<{
|
|
2559
2559
|
data: {
|
|
2560
2560
|
type: "DynamicField" | "DynamicObject";
|
|
2561
2561
|
objectType: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@0xobelisk/client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.3",
|
|
4
4
|
"description": "Tookit for interacting with move eps framework",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sui",
|
|
@@ -57,9 +57,9 @@
|
|
|
57
57
|
"prettier-plugin-rust": "^0.1.9"
|
|
58
58
|
},
|
|
59
59
|
"dependencies": {
|
|
60
|
+
"@0xobelisk/common": "workspace:*",
|
|
60
61
|
"@mysten/bcs": "^0.7.3",
|
|
61
62
|
"@mysten/sui.js": "^0.41.0",
|
|
62
|
-
"@obelisk/common": "link:../common",
|
|
63
63
|
"@scure/bip39": "^1.2.1",
|
|
64
64
|
"assert": "^2.0.0",
|
|
65
65
|
"colorts": "^0.1.63",
|
package/src/index.ts
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
export
|
|
2
|
-
TransactionBlock,
|
|
3
|
-
SUI_CLOCK_OBJECT_ID,
|
|
4
|
-
SUI_SYSTEM_STATE_OBJECT_ID,
|
|
5
|
-
} from '@mysten/sui.js';
|
|
1
|
+
export * from '@mysten/sui.js';
|
|
6
2
|
export { Ed25519Keypair } from '@mysten/sui.js/keypairs/ed25519';
|
|
7
|
-
export { fromB64, toB64 } from '@mysten/sui.js';
|
|
8
3
|
export * from '@mysten/sui.js/bcs';
|
|
9
4
|
export { Obelisk } from './obelisk';
|
|
10
5
|
export { SuiAccountManager } from './libs/suiAccountManager';
|