@easysui/sdk 0.2.0 → 0.2.1
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/README.md +2 -3
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +19 -32
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +19 -32
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -94,10 +94,9 @@ This package uses [Changesets](https://github.com/changesets/changesets) for ver
|
|
|
94
94
|
|
|
95
95
|
```bash
|
|
96
96
|
# Add a changeset
|
|
97
|
-
pnpm changeset
|
|
97
|
+
pnpm changeset && pnpm bump
|
|
98
98
|
|
|
99
|
-
|
|
100
|
-
pnpm version
|
|
99
|
+
// commit the bump and git push
|
|
101
100
|
|
|
102
101
|
# Build and publish to npm
|
|
103
102
|
pnpm release
|
package/dist/index.d.mts
CHANGED
|
@@ -70,7 +70,7 @@ declare class PublishSingleton {
|
|
|
70
70
|
static findObjectIdByType(type: string, fail?: boolean): string;
|
|
71
71
|
static get upgradeCapId(): string;
|
|
72
72
|
static get usdcTreasuryCap(): string;
|
|
73
|
-
static
|
|
73
|
+
private static getPublishCmd;
|
|
74
74
|
static getPublishBytes(signer?: string, packagePath?: string): Promise<string>;
|
|
75
75
|
static publishPackage(signer: Keypair, packagePath: string): Promise<SuiTransactionBlockResponse>;
|
|
76
76
|
static findPublishedPackage(resp: SuiTransactionBlockResponse): SuiObjectChangePublished | undefined;
|
package/dist/index.d.ts
CHANGED
|
@@ -70,7 +70,7 @@ declare class PublishSingleton {
|
|
|
70
70
|
static findObjectIdByType(type: string, fail?: boolean): string;
|
|
71
71
|
static get upgradeCapId(): string;
|
|
72
72
|
static get usdcTreasuryCap(): string;
|
|
73
|
-
static
|
|
73
|
+
private static getPublishCmd;
|
|
74
74
|
static getPublishBytes(signer?: string, packagePath?: string): Promise<string>;
|
|
75
75
|
static publishPackage(signer: Keypair, packagePath: string): Promise<SuiTransactionBlockResponse>;
|
|
76
76
|
static findPublishedPackage(resp: SuiTransactionBlockResponse): SuiObjectChangePublished | undefined;
|
package/dist/index.js
CHANGED
|
@@ -575,54 +575,41 @@ var PublishSingleton = class _PublishSingleton {
|
|
|
575
575
|
false
|
|
576
576
|
);
|
|
577
577
|
}
|
|
578
|
-
static
|
|
579
|
-
const
|
|
578
|
+
static getPublishCmd(packagePath, sender, inBytes = false) {
|
|
579
|
+
const network = Config.vars.NETWORK;
|
|
580
580
|
if (!fs3__namespace.default.existsSync(packagePath)) {
|
|
581
581
|
throw new Error(`Package doesn't exist under: ${packagePath}`);
|
|
582
582
|
}
|
|
583
583
|
if (fs3__namespace.default.existsSync(`${packagePath}/Move.lock`)) {
|
|
584
584
|
fs3__namespace.default.unlinkSync(`${packagePath}/Move.lock`);
|
|
585
585
|
}
|
|
586
|
+
if (fs3__namespace.default.existsSync(`Pub.${network}.toml`)) {
|
|
587
|
+
fs3__namespace.default.unlinkSync(`Pub.${network}.toml`);
|
|
588
|
+
}
|
|
586
589
|
fs3__namespace.default.rmSync(`${packagePath}/build`, { recursive: true, force: true });
|
|
587
|
-
const
|
|
588
|
-
const
|
|
589
|
-
let buildCommand = `sui
|
|
590
|
-
if (network === "localnet" || network === "devnet"
|
|
590
|
+
const isEphemeralChain = network !== "mainnet" && network !== "testnet";
|
|
591
|
+
const publishCmd = isEphemeralChain ? `test-publish --build-env testnet` : "publish";
|
|
592
|
+
let buildCommand = `sui client ${publishCmd} ${packagePath}`;
|
|
593
|
+
if (network === "localnet" || network === "devnet") {
|
|
591
594
|
buildCommand += " --with-unpublished-dependencies";
|
|
592
595
|
}
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
modules,
|
|
596
|
-
dependencies
|
|
597
|
-
});
|
|
598
|
-
transaction.transferObjects([upgradeCap], sender);
|
|
599
|
-
return transaction;
|
|
596
|
+
buildCommand += inBytes ? " --serialize-unsigned-transaction" : " --json";
|
|
597
|
+
return buildCommand;
|
|
600
598
|
}
|
|
601
599
|
static async getPublishBytes(signer, packagePath) {
|
|
602
600
|
signer ??= ADMIN_KEYPAIR.toSuiAddress();
|
|
603
601
|
const _packagePath = this.getPackagePath(packagePath);
|
|
604
|
-
const
|
|
605
|
-
|
|
606
|
-
const txBytes = await transaction.build({ client: client$1, onlyTransactionKind: true });
|
|
607
|
-
return Buffer.from(txBytes).toString("base64");
|
|
602
|
+
const cmd = this.getPublishCmd(_packagePath, signer, true);
|
|
603
|
+
return child_process.execSync(cmd, { encoding: "utf-8" }).trim();
|
|
608
604
|
}
|
|
609
605
|
static async publishPackage(signer, packagePath) {
|
|
610
|
-
const
|
|
611
|
-
const
|
|
612
|
-
const
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
options: {
|
|
616
|
-
showObjectChanges: true,
|
|
617
|
-
showEffects: true
|
|
618
|
-
}
|
|
619
|
-
});
|
|
620
|
-
if (resp.effects?.status.status !== "success") {
|
|
621
|
-
throw new Error(`Failure during publish transaction:
|
|
622
|
-
${JSON.stringify(resp, null, 2)}`);
|
|
606
|
+
const cmd = this.getPublishCmd(packagePath, signer.toSuiAddress());
|
|
607
|
+
const res = child_process.execSync(cmd, { encoding: "utf-8" });
|
|
608
|
+
const match = res.match(/\{[\s\S]*\}/);
|
|
609
|
+
if (!match) {
|
|
610
|
+
throw new Error(`No JSON found in the publish command output: ${res}`);
|
|
623
611
|
}
|
|
624
|
-
|
|
625
|
-
return resp;
|
|
612
|
+
return JSON.parse(match[0]);
|
|
626
613
|
}
|
|
627
614
|
static findPublishedPackage(resp) {
|
|
628
615
|
return resp.objectChanges?.find(
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/keypair.ts","../src/config/static.ts","../src/config/config.ts","../src/utils/cost_analyzer.ts","../src/utils/byte_utils.ts","../src/utils/sui_client.ts","../src/tokens/coin.ts","../src/tokens/usdc.ts","../src/utils/publish.ts","../src/utils/deploy.ts","../src/utils/test_utils.ts","../src/utils/derived_objects.ts"],"names":["decodeSuiPrivateKey","Ed25519Keypair","Secp256k1Keypair","Secp256r1Keypair","dotenv","path","SUI_CLOCK_OBJECT_ID","getFullnodeUrl","fs","fs2","toBase64","toHex","fromHex","MoveType","SC","fromBase64","Transaction","bcs","coinWithBalance","execSync","client","SuiClient","requestSuiFromFaucetV2","getFaucetHost","doi"],"mappings":"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","file":"index.js","sourcesContent":["import { decodeSuiPrivateKey, Keypair } from '@mysten/sui/cryptography'\nimport { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519'\nimport { Secp256k1Keypair } from '@mysten/sui/keypairs/secp256k1'\nimport { Secp256r1Keypair } from '@mysten/sui/keypairs/secp256r1'\n\nexport function getKeypair(privkey: string): Keypair {\n const parsed = decodeSuiPrivateKey(privkey)\n\n switch (parsed.scheme) {\n case 'ED25519': {\n return Ed25519Keypair.fromSecretKey(parsed.secretKey)\n }\n case 'Secp256k1': {\n return Secp256k1Keypair.fromSecretKey(parsed.secretKey)\n }\n case 'Secp256r1': {\n return Secp256r1Keypair.fromSecretKey(parsed.secretKey)\n }\n default:\n throw new Error(`Key scheme ${parsed.schema} not supported`)\n }\n}\n","export type Network = 'mainnet' | 'testnet' | 'devnet' | 'localnet'\n\ninterface StaticConfig {\n CHAIN_ID: string\n USDC_PACKAGE_ID?: string\n}\n\nexport const STATIC_CONFIGS: Record<Network, StaticConfig> = {\n localnet: {\n CHAIN_ID: 'd07607dc',\n },\n devnet: {\n CHAIN_ID: '4c78adac',\n },\n testnet: {\n CHAIN_ID: '4c78adac',\n USDC_PACKAGE_ID: '0xa1ec7fc00a6f40db9693ad1415d0c193ad3906494428cf252621037bd7117e29',\n },\n mainnet: {\n CHAIN_ID: '35834a8a',\n USDC_PACKAGE_ID: '0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7',\n },\n}\n","import path from 'path'\nimport fs from 'fs'\nimport dotenv from 'dotenv'\nimport { Keypair } from '@mysten/sui/cryptography'\nimport { getFullnodeUrl } from '@mysten/sui/client'\nimport { getKeypair } from '../utils/keypair'\nimport { STATIC_CONFIGS, Network } from './static'\nimport {SUI_CLOCK_OBJECT_ID} from \"@mysten/sui/utils\";\ndotenv.config({ path: path.resolve(process.cwd(), '.env'), quiet: true })\n\nexport const DENY_LIST_ID = '0x403'\nexport const CLOCK_ID = SUI_CLOCK_OBJECT_ID\nexport const COIN_REGISTRY = '0x000000000000000000000000000000000000000000000000000000000000000c'\n\n// Base configuration that the SDK provides\nexport interface BaseConfigVars {\n NETWORK: Network\n RPC: string\n PACKAGE_PATH: string\n PACKAGE_ID: string\n UPGRADE_CAP_ID: string\n USDC_PACKAGE_ID?: string\n USDC_TREASURY_CAP?: string\n}\n\n// Default ConfigVars is just the base, but projects can extend it\nexport type ConfigVars = BaseConfigVars\n\nexport const ADMIN_KEYPAIR: Keypair | undefined = process.env.ADMIN_PRIVATE_KEY ? getKeypair(process.env.ADMIN_PRIVATE_KEY) : undefined\n\n/**\n * Map of config keys to Move type patterns for finding object IDs during deployment\n * The type pattern can use {packageId} placeholder which will be replaced with the deployed package ID\n *\n * Example: { SETUP_AUTH: \"{packageId}::setup::SetupAuth\" }\n * Example: { TOKEN_TREASURY_CAP: \"{packageId}::treasury::Treasury<{packageId}::token::TOKEN>\" }\n */\nexport type ExtraVarsMap = Record<string, string>\n\n// Generic Config class that can be extended with custom types\nexport class Config<TConfigVars extends BaseConfigVars = ConfigVars> {\n private static instance: Config | null = null\n\n private static getInstance(): Config {\n if (!Config.instance) {\n this.instance = new Config()\n }\n return this.instance!\n }\n\n get env(): Network {\n let env = process.env.NETWORK\n if (!['mainnet', 'testnet', 'devnet', 'localnet'].includes(env || '')) {\n env = 'localnet'\n }\n return env as Network\n }\n\n /**\n * Override this getter in your custom Config class to define extra variables\n * that should be populated during deployment by finding objects by their Move types\n */\n static get extraVars(): ExtraVarsMap {\n return {}\n }\n\n static get vars(): BaseConfigVars {\n const instance = this.getInstance()\n const NETWORK = instance.env\n dotenv.config({ path: path.resolve(process.cwd(), `.env.${NETWORK}`), override: true, quiet: true })\n\n const envVars = {\n NETWORK,\n RPC: getFullnodeUrl(NETWORK),\n PACKAGE_PATH: process.env.PACKAGE_PATH || '',\n PACKAGE_ID: process.env.PACKAGE_ID || '',\n UPGRADE_CAP_ID: process.env.UPGRADE_CAP_ID || '',\n USDC_TREASURY_CAP: process.env.USDC_TREASURY_CAP,\n USDC_PACKAGE_ID: process.env.USDC_PACKAGE_ID,\n }\n\n const staticVars = STATIC_CONFIGS[NETWORK] || {}\n\n return {\n ...staticVars,\n ...envVars,\n }\n }\n\n static write<T extends BaseConfigVars>(config: T): string {\n const instance = this.getInstance()\n const env = instance.env\n const envFile = path.join(process.cwd(), `.env${env ? `.${env}` : ''}`)\n\n const envVariables = Object.entries(config)\n .filter(([_, value]) => value)\n .map(([key, value]) => `${key}=${value}`)\n .join('\\n')\n\n fs.writeFileSync(envFile, envVariables, 'utf8')\n return envFile\n }\n}\n","import * as fs from 'fs'\nimport { Transaction } from '@mysten/sui/transactions'\nimport { SuiTransactionBlockResponse } from '@mysten/sui/client'\nimport { Config } from '../config/config'\n\nconst COST_ANALYSIS_FILE = './gas_cost_estimation.csv'\nconst HEADERS = [\n 'environment',\n 'executedAt',\n 'digest',\n 'packageId',\n 'call',\n 'computationCost',\n 'storageCost',\n 'storageRebate',\n 'nonRefundableStorageFee',\n 'gasSpent',\n]\n\nexport function analyze_cost(ptb: Transaction, resp: SuiTransactionBlockResponse) {\n if (!process.env.COST_ANALYZER_ENABLED) {\n return\n }\n if (!fs.existsSync(COST_ANALYSIS_FILE)) {\n fs.writeFileSync(COST_ANALYSIS_FILE, HEADERS.join(',') + '\\n')\n }\n\n const columns: any = [Config.vars.NETWORK, Date.now(), resp.digest]\n\n const moveCalls = ptb.blockData.transactions.filter((txItem) => txItem.kind === 'MoveCall')\n const moveCall = moveCalls.pop()\n if (!moveCall?.target) {\n return\n }\n const splits = moveCall.target.split('::')\n columns.push(splits[0])\n columns.push(`${splits[1]}::${splits[2]}`)\n\n const gasUsed = resp.effects?.gasUsed\n columns.push(gasUsed?.computationCost || 'N/A')\n columns.push(gasUsed?.storageCost || 'N/A')\n columns.push(gasUsed?.storageRebate || 'N/A')\n columns.push(gasUsed?.nonRefundableStorageFee || 'N/A')\n\n const totalGasCost = BigInt(gasUsed?.computationCost || 0) + BigInt(gasUsed?.storageCost || 0)\n const gasSpent = totalGasCost - BigInt(gasUsed?.storageRebate || 0)\n columns.push(gasSpent)\n\n fs.appendFileSync(COST_ANALYSIS_FILE, columns.join(',') + '\\n')\n}\n","import {\n toBase64,\n toHex,\n fromHex,\n fromBase64\n} from \"@mysten/sui/utils\";\n\nexport enum FORMAT_TYPES {\n hex = 1,\n base64,\n}\n\nexport function toFormatType(type: FORMAT_TYPES, bytes: Uint8Array<ArrayBuffer>) {\n switch (type) {\n case FORMAT_TYPES.base64:\n return toBase64(bytes)\n case FORMAT_TYPES.hex:\n return toHex(bytes)\n default:\n throw \"The FORMAT_TYPES must be one of hex or base64\"\n }\n}\n\nexport function isHex(str: string): boolean {\n // Must be even length and only hex chars\n return /^[0-9a-fA-F]+$/.test(str) && str.length % 2 === 0;\n}\n\nexport function hexToBase64(hex: string) {\n return toBase64(fromHex(hex))\n}\n\nexport function base64toHex(base64: string) {\n return toHex(fromBase64(base64))\n}","import { SuiClient as SC } from '@mysten/sui/client'\nimport { toBase64, fromBase64, fromHex } from '@mysten/sui/utils'\nimport { Config } from '../config/config'\nimport { Transaction } from '@mysten/sui/transactions'\nimport { Keypair } from '@mysten/sui/cryptography'\nimport { bcs } from '@mysten/sui/bcs'\nimport { analyze_cost } from './cost_analyzer'\nimport type {SuiTransactionBlockResponse} from \"@mysten/sui/jsonRpc\";\nimport {FORMAT_TYPES, hexToBase64, isHex, toFormatType} from \"./byte_utils\";\n\nexport enum MoveType {\n u8 = 1,\n u16,\n u32,\n u64,\n u128,\n u256,\n bool,\n string,\n string_opt,\n object,\n address,\n address_opt,\n vec_address,\n vec_u64,\n}\n\nconst txOptions = {\n showEffects: true,\n showObjectChanges: true,\n showBalanceChanges: true,\n}\n\nexport class SuiClient {\n private static instance: SuiClient | null = null\n private client: SC\n\n private constructor() {\n this.client = new SC({ url: Config.vars.RPC })\n }\n\n private static getInstance(): SuiClient {\n if (!SuiClient.instance) {\n this.instance = new SuiClient()\n }\n return this.instance!\n }\n\n public static get client(): SC {\n return this.getInstance().client\n }\n\n private static async waitForTransaction(\n ptb: Transaction,\n resp: SuiTransactionBlockResponse,\n ) {\n await SuiClient.client.waitForTransaction({ digest: resp.digest })\n if (resp.effects?.status.status !== 'success') {\n throw new Error(JSON.stringify(resp))\n }\n analyze_cost(ptb, resp)\n return resp\n }\n\n public static async signAndExecute(\n ptb: Transaction,\n signer: Keypair,\n ) {\n const resp = await SuiClient.client.signAndExecuteTransaction({\n transaction: ptb,\n signer,\n options: txOptions,\n })\n return SuiClient.waitForTransaction(ptb, resp)\n }\n\n public static toMoveArg(ptb: Transaction, value: any, type?: MoveType) {\n if (typeof value === 'object' && !Array.isArray(value)) {\n return value\n }\n\n if (!type) {\n if (typeof value === 'string') {\n if (value.startsWith('0x')) {\n type = MoveType.object\n } else {\n type = MoveType.string\n }\n } else if (typeof value === 'boolean') {\n type = MoveType.bool\n } else if (typeof value === 'number' || typeof value === 'bigint') {\n type = MoveType.u64\n }\n }\n\n const factory = {\n [MoveType.u8]: (v: any) => ptb.pure.u8(v),\n [MoveType.u16]: (v: any) => ptb.pure.u16(v),\n [MoveType.u32]: (v: any) => ptb.pure.u32(v),\n [MoveType.u64]: (v: any) => ptb.pure.u64(v),\n [MoveType.u128]: (v: any) => ptb.pure.u128(v),\n [MoveType.u256]: (v: any) => ptb.pure.u256(v),\n [MoveType.bool]: (v: any) => ptb.pure.bool(v),\n [MoveType.string]: (v: any) => ptb.pure.string(v),\n [MoveType.string_opt]: (v: any) => ptb.pure.option('string', v),\n [MoveType.object]: (v: any) => ptb.object(v),\n [MoveType.address]: (v: any) => ptb.pure.address(v),\n [MoveType.address_opt]: (v: any) => ptb.pure.option('address', v),\n [MoveType.vec_address]: (v: any) => ptb.pure.vector('address', v),\n [MoveType.vec_u64]: (v: any) => ptb.pure.vector('u64', v),\n }\n\n return factory[type!](value)\n }\n\n public static async moveCall({\n signer,\n target,\n typeArgs = [],\n args = [],\n argTypes = [],\n ptb,\n withTransfer = false,\n }: {\n signer: Keypair\n target: string\n typeArgs?: string[]\n args?: any[]\n argTypes?: MoveType[]\n ptb?: Transaction\n withTransfer?: boolean\n }) {\n ptb = this.getPTB(target, typeArgs, args, argTypes, signer.toSuiAddress(), withTransfer, ptb);\n\n return SuiClient.signAndExecute(ptb, signer)\n }\n\n public static async getMoveCallBytes({\n signer,\n target,\n typeArgs = [],\n args = [],\n argTypes = [],\n ptb,\n withTransfer = false,\n gasOwner,\n format = FORMAT_TYPES.hex\n }: {\n signer: string\n target: string\n typeArgs?: string[]\n args?: any[]\n argTypes?: MoveType[]\n ptb?: Transaction\n withTransfer?: boolean\n gasOwner?: string\n format?: FORMAT_TYPES\n }) {\n ptb = this.getPTB(target, typeArgs, args, argTypes, signer, withTransfer, ptb);\n return await this.getMoveCallBytesFromPTB(ptb, signer, gasOwner, format);\n }\n\n public static async getMoveCallBytesFromPTB(ptb: Transaction, signer: string, gasOwner?: string, format: FORMAT_TYPES = FORMAT_TYPES.hex) {\n ptb.setSender(signer)\n gasOwner ??= signer\n ptb.setGasOwner(gasOwner || signer)\n const bytes = await ptb.build({client: SuiClient.client, onlyTransactionKind: false});\n return toFormatType(format, bytes)\n }\n\n public static toBytes(bytes: Uint8Array | string) {\n if (typeof bytes === 'string') {\n return isHex(bytes) ? fromHex(bytes) : fromBase64(bytes)\n }\n return bytes\n }\n\n public static async getSignature(signatureOrKeypair: string | Keypair, bytes: Uint8Array) {\n if (typeof signatureOrKeypair !== 'string') {\n const signature = await signatureOrKeypair.signTransaction(bytes)\n return signature.signature\n }\n\n return isHex(signatureOrKeypair) ? hexToBase64(signatureOrKeypair) : signatureOrKeypair\n }\n\n public static async executeMoveCallBytes(\n bytes: Uint8Array | string,\n senderSignature: string | Keypair,\n gasOwnerSignature?: string | Keypair,\n ) {\n const transactionBlock = this.toBytes(bytes)\n senderSignature = await this.getSignature(senderSignature, transactionBlock)\n\n const signature = [senderSignature]\n if (gasOwnerSignature) {\n gasOwnerSignature = await this.getSignature(gasOwnerSignature, transactionBlock)\n signature.push(gasOwnerSignature)\n }\n const resp = await SuiClient.client.executeTransactionBlock({\n transactionBlock: toBase64(transactionBlock),\n signature,\n options: txOptions\n })\n const ptb = Transaction.from(toBase64(transactionBlock))\n return SuiClient.waitForTransaction(ptb, resp)\n }\n\n public static getPTB(\n target: string,\n typeArgs: string[] = [],\n args: any[] = [],\n argTypes: MoveType[] = [],\n signer?: string,\n withTransfer: boolean = false,\n ptb?: Transaction\n ) {\n ptb = ptb || new Transaction()\n const obj = ptb.moveCall({\n target,\n typeArguments: typeArgs,\n arguments: args.map((arg, i) => SuiClient.toMoveArg(ptb, arg, argTypes[i])),\n })\n\n if (withTransfer && signer) {\n ptb.transferObjects([obj], signer)\n }\n return ptb;\n }\n\n public static async public_transfer(objects: string[], from: Keypair, to: string) {\n const tx = new Transaction()\n tx.transferObjects(objects, to)\n return await SuiClient.signAndExecute(tx, from)\n }\n\n public static async devInspect(ptb: Transaction, sender: string) {\n return await SuiClient.client.devInspectTransactionBlock({\n transactionBlock: ptb,\n sender,\n })\n }\n\n public static async devInspectRaw(ptb: Transaction, sender: string) {\n const result = await this.devInspect(ptb, sender)\n return result.results?.[0].returnValues?.[0]?.[0]\n }\n\n public static async devInspectBool(ptb: Transaction, sender: string) {\n const result = await this.devInspectRaw(ptb, sender)\n return result && result[0] === 1\n }\n\n public static async devInspectU64(ptb: Transaction, sender: string) {\n const value = await this.devInspectRaw(ptb, sender)\n return BigInt(bcs.u64().parse(new Uint8Array(value!)))\n }\n\n public static async devInspectAddress(ptb: Transaction, sender: string) {\n const value = await this.devInspectRaw(ptb, sender)\n if (!value) {\n return undefined\n }\n const bytes = Uint8Array.from(value)\n return '0x' + Buffer.from(bytes).toString('hex')\n }\n\n public static async devInspectString(ptb: Transaction, sender: string) {\n const value = await this.devInspectRaw(ptb, sender)\n if (!value) {\n return ''\n }\n return bcs.string().parse(new Uint8Array(value!))\n }\n\n public static async getObject(id: string) {\n return SuiClient.client.getObject({\n id,\n options: {\n showContent: true,\n showType: true,\n showDisplay: true,\n showBcs: true,\n },\n })\n }\n\n public static async getObjectsByType(owner: string, type: string) {\n const res = await SuiClient.client.getOwnedObjects({\n owner,\n filter: {\n StructType: type,\n },\n })\n return res.data.map((o) => o.data?.objectId).filter((o) => o)\n }\n}\n","import { MoveType, SuiClient } from '../utils/sui_client'\nimport { Keypair } from '@mysten/sui/cryptography'\nimport { coinWithBalance, Transaction } from '@mysten/sui/transactions'\nimport {COIN_REGISTRY} from \"../config/config\";\n\nexport class Coin {\n public static get coinType(): string {\n throw new Error('`coinType` getter must be implemented !')\n }\n\n public static async getBalance(owner: string) {\n const result = await SuiClient.client.getBalance({\n owner,\n coinType: this.coinType,\n })\n return BigInt(result.totalBalance)\n }\n\n public static async getCoin(owner: Keypair, amount?: bigint): Promise<string> {\n const balance = amount || (await this.getBalance(owner.toSuiAddress()))\n const tx = new Transaction()\n const coinSplit = coinWithBalance({\n balance,\n useGasCoin: false,\n type: this.coinType,\n })\n tx.transferObjects([coinSplit], owner.toSuiAddress())\n const result = await SuiClient.signAndExecute(tx, owner)\n\n const coin = result.objectChanges?.find(\n (o) => o.type === 'created' && o.objectType === `0x2::coin::Coin<${this.coinType}>`\n )\n\n return (coin as any)?.objectId\n }\n\n public static async _mint(treasuryId: string, amount: bigint, minter: Keypair) {\n await SuiClient.moveCall({\n signer: minter,\n target: `0x2::coin::mint`,\n typeArgs: [this.coinType],\n args: [treasuryId, amount],\n argTypes: [MoveType.object, MoveType.u64],\n withTransfer: true,\n })\n }\n\n public static async finalizeRegistration(registrar: Keypair) {\n const currencies = await SuiClient.getObjectsByType(COIN_REGISTRY, `0x2::coin_registry::Currency<${this.coinType}>`)\n\n if (currencies.length === 0 || !currencies[0]) {\n throw new Error('The registrar does not own the currency, please pass the currency id.')\n }\n const currencyId = currencies[0]\n\n await SuiClient.moveCall({\n signer: registrar,\n target: `0x2::coin_registry::finalize_registration`,\n typeArgs: [this.coinType],\n args: [COIN_REGISTRY, currencyId],\n argTypes: [MoveType.object, MoveType.object],\n })\n }\n\n public static async send(amount: bigint, from: Keypair, to: string) {\n const coin = await this.getCoin(from, amount)\n const ptb = new Transaction()\n ptb.transferObjects([ptb.object(coin)], to)\n await SuiClient.signAndExecute(ptb, from)\n }\n\n public static async assertBalance(wallet: Keypair, amount: bigint | BigInt) {\n await expect(this.getBalance(wallet.toSuiAddress())).resolves.toBe(amount)\n }\n}\n","import { MoveType, SuiClient } from '../utils/sui_client'\nimport { Keypair } from '@mysten/sui/cryptography'\nimport { DENY_LIST_ID, Config } from '../config/config'\nimport { Coin } from './coin'\n\nexport class USDC extends Coin {\n public static get coinType(): string {\n return Config.vars.USDC_PACKAGE_ID + '::usdc::USDC'\n }\n\n private static async getMintCapId(admin: Keypair) {\n async function getMintCapFromChain() {\n const mintCapIds = await SuiClient.getObjectsByType(\n admin.toSuiAddress(),\n `${Config.vars.USDC_PACKAGE_ID}::treasury::MintCap`\n )\n return mintCapIds.pop()\n }\n\n let mintCapId = await getMintCapFromChain()\n\n if (!mintCapId) {\n await SuiClient.moveCall({\n signer: admin,\n target: `${Config.vars.USDC_PACKAGE_ID}::treasury::configure_new_controller`,\n typeArgs: [this.coinType],\n args: [Config.vars.USDC_TREASURY_CAP, admin.toSuiAddress(), admin.toSuiAddress()],\n argTypes: [MoveType.object, MoveType.address, MoveType.address],\n })\n mintCapId = await getMintCapFromChain()\n }\n\n return mintCapId\n }\n\n public static async faucet(amount: bigint, receiver: string, admin: Keypair) {\n const mintCapId = await this.getMintCapId(admin)\n\n await SuiClient.moveCall({\n signer: admin,\n target: `${Config.vars.USDC_PACKAGE_ID}::treasury::configure_minter`,\n typeArgs: [this.coinType],\n args: [Config.vars.USDC_TREASURY_CAP, DENY_LIST_ID, amount],\n argTypes: [MoveType.object, MoveType.object, MoveType.u64],\n })\n\n await SuiClient.moveCall({\n signer: admin,\n target: `${Config.vars.USDC_PACKAGE_ID}::treasury::mint`,\n typeArgs: [this.coinType],\n args: [Config.vars.USDC_TREASURY_CAP, mintCapId, DENY_LIST_ID, amount, receiver],\n argTypes: [\n MoveType.object,\n MoveType.object,\n MoveType.object,\n MoveType.u64,\n MoveType.address,\n ],\n })\n }\n}\n","import fs from 'fs'\nimport {\n SuiClient,\n SuiObjectChangeCreated,\n SuiObjectChangePublished,\n SuiTransactionBlockResponse,\n} from '@mysten/sui/client'\nimport { Keypair } from '@mysten/sui/cryptography'\nimport { ADMIN_KEYPAIR, Config } from '../config/config'\nimport { Transaction } from '@mysten/sui/transactions'\n\nimport { execSync } from 'child_process'\n\nexport class PublishSingleton {\n private static instance: PublishSingleton | null = null\n\n private constructor(private readonly publishResp: SuiTransactionBlockResponse) {}\n\n private static getPackagePath(packagePath?: string): string {\n packagePath ??= Config.vars.PACKAGE_PATH\n\n if (!packagePath) {\n throw new Error(\n 'You must set the `PACKAGE_PATH` environment variable to your Move.toml path.'\n )\n }\n\n return packagePath\n }\n\n public static async publish(signer?: Keypair, packagePath?: string) {\n signer ??= ADMIN_KEYPAIR!\n const _packagePath = this.getPackagePath(packagePath)\n\n if (!PublishSingleton.instance) {\n const publishResp = await PublishSingleton.publishPackage(signer, _packagePath)\n const packageId = this.findPublishedPackage(publishResp)?.packageId\n if (!packageId) {\n throw new Error('Expected to find package published')\n }\n // suiClientGen(packageId)\n PublishSingleton.instance = new PublishSingleton(publishResp)\n }\n }\n\n private static getInstance(): PublishSingleton {\n if (!PublishSingleton.instance) {\n throw new Error('Use `async PublishSingleton.publish()` first')\n }\n return PublishSingleton.instance\n }\n\n public static publishResponse(): SuiTransactionBlockResponse {\n return this.getInstance().publishResp\n }\n\n public static get packageId(): string {\n const packageChng = this.findPublishedPackage(this.publishResponse())\n if (!packageChng) {\n throw new Error('Expected to find package published')\n }\n return packageChng.packageId\n }\n\n public static findObjectIdByType(type: string, fail: boolean = true): string {\n const obj = this.findObjectChangeCreatedByType(this.publishResponse(), type)\n if (fail && !obj) {\n throw new Error(`Expected to find ${type} shared object created.`)\n }\n return obj?.objectId || ''\n }\n\n public static get upgradeCapId(): string {\n return this.findObjectIdByType(`0x2::package::UpgradeCap`)\n }\n\n public static get usdcTreasuryCap(): string {\n return this.findObjectIdByType(\n `${this.packageId}::treasury::Treasury<${this.packageId}::usdc::USDC>`,\n false\n )\n }\n\n static getPublishTx(packagePath: string, sender: string) {\n const transaction = new Transaction()\n\n if (!fs.existsSync(packagePath)) {\n throw new Error(`Package doesn't exist under: ${packagePath}`)\n }\n\n if (fs.existsSync(`${packagePath}/Move.lock`)) {\n fs.unlinkSync(`${packagePath}/Move.lock`)\n }\n fs.rmSync(`${packagePath}/build`, { recursive: true, force: true })\n const network = Config.vars.NETWORK\n\n const e = network === 'mainnet' ? 'mainnet' : 'testnet'\n let buildCommand = `sui move build -e ${e} --dump-bytecode-as-base64 --path ${packagePath}`\n if (network === 'localnet' || network === 'devnet' || network === 'testnet') { // TODO: remove testnet\n buildCommand += ' --with-unpublished-dependencies'\n }\n\n const { modules, dependencies } = JSON.parse(execSync(buildCommand, { encoding: 'utf-8' }))\n\n const upgradeCap = transaction.publish({\n modules,\n dependencies,\n })\n\n transaction.transferObjects([upgradeCap], sender)\n return transaction\n }\n\n static async getPublishBytes(signer?: string, packagePath?: string): Promise<string> {\n signer ??= ADMIN_KEYPAIR!.toSuiAddress()\n const _packagePath = this.getPackagePath(packagePath)\n const transaction = this.getPublishTx(_packagePath, signer)\n const client = new SuiClient({ url: Config.vars.RPC })\n const txBytes = await transaction.build({ client, onlyTransactionKind: true })\n return Buffer.from(txBytes).toString('base64')\n }\n\n static async publishPackage(\n signer: Keypair,\n packagePath: string\n ): Promise<SuiTransactionBlockResponse> {\n const transaction = this.getPublishTx(packagePath, signer.toSuiAddress())\n const client = new SuiClient({ url: Config.vars.RPC })\n const resp = await client.signAndExecuteTransaction({\n transaction,\n signer,\n options: {\n showObjectChanges: true,\n showEffects: true,\n },\n })\n if (resp.effects?.status.status !== 'success') {\n throw new Error(`Failure during publish transaction:\\n${JSON.stringify(resp, null, 2)}`)\n }\n await client.waitForTransaction({ digest: resp.digest })\n return resp\n }\n\n static findPublishedPackage(\n resp: SuiTransactionBlockResponse\n ): SuiObjectChangePublished | undefined {\n return resp.objectChanges?.find(\n (chng): chng is SuiObjectChangePublished => chng.type === 'published'\n )\n }\n\n static findObjectChangeCreatedByType(\n resp: SuiTransactionBlockResponse,\n type: string\n ): SuiObjectChangeCreated | undefined {\n return resp.objectChanges?.find(\n (chng): chng is SuiObjectChangeCreated =>\n chng.type === 'created' && chng.objectType === type\n )\n }\n}\n","import {ADMIN_KEYPAIR, BaseConfigVars, Config} from '../config/config'\nimport {PublishSingleton} from './publish'\n\nexport async function deploy<\n TConfig extends typeof Config = typeof Config,\n TConfigVars extends BaseConfigVars = BaseConfigVars\n>(\n ConfigClass: TConfig = Config as TConfig,\n packagePath?: string,\n): Promise<string> {\n const vars = ConfigClass.vars as TConfigVars\n await PublishSingleton.publish(ADMIN_KEYPAIR!, packagePath)\n\n const newConfig = {\n ...vars,\n PACKAGE_ID: PublishSingleton.packageId,\n UPGRADE_CAP_ID: PublishSingleton.upgradeCapId,\n } as TConfigVars\n\n if (PublishSingleton.usdcTreasuryCap) {\n newConfig.USDC_PACKAGE_ID = PublishSingleton.packageId\n newConfig.USDC_TREASURY_CAP = PublishSingleton.usdcTreasuryCap\n }\n\n // Process extra vars from Config.extraVars\n const extraVars = ConfigClass.extraVars\n if (extraVars && Object.keys(extraVars).length > 0) {\n for (const [key, typePattern] of Object.entries(extraVars)) {\n const type = typePattern.replace('{packageId}', PublishSingleton.packageId)\n // @ts-ignore - dynamically adding properties to config\n newConfig[key] = PublishSingleton.findObjectIdByType(type, true)\n }\n }\n\n ConfigClass.write(newConfig)\n\n return `Move contracts deployed successfully on ${vars.NETWORK} contract details have been stored in .env.${vars.NETWORK}`\n}\n\nexport async function getDeployBytes() {\n return await PublishSingleton.getPublishBytes()\n}\n","import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519'\nimport { requestSuiFromFaucetV2, getFaucetHost } from '@mysten/sui/faucet'\nimport { ADMIN_KEYPAIR, Config } from '../config/config'\nimport { SuiClient } from './sui_client'\nimport { USDC } from '../tokens/usdc'\n\nexport function createWallet() {\n return new Ed25519Keypair()\n}\n\nexport async function createFundedWallet(usdcAmount?: bigint) {\n const wallet = createWallet()\n await faucet(wallet.toSuiAddress())\n\n if (usdcAmount) {\n await USDC.faucet(usdcAmount, wallet.toSuiAddress(), ADMIN_KEYPAIR!)\n }\n\n return wallet\n}\n\nasync function faucet(address: string) {\n await requestSuiFromFaucetV2({\n host: getFaucetHost(Config.vars.NETWORK as 'localnet' | 'devnet'), // or 'devnet', 'localnet'\n recipient: address,\n })\n}\n\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nexport async function waitForNextEpoch(timeoutMs = 5 * 60 * 1000, pollIntervalMs = 2000) {\n const startEpoch = (await SuiClient.client.getLatestSuiSystemState()).epoch\n const startTime = Date.now()\n\n while (true) {\n const { epoch } = await SuiClient.client.getLatestSuiSystemState()\n if (Number(epoch) > Number(startEpoch)) {\n return epoch\n }\n\n if (Date.now() - startTime > timeoutMs) {\n throw new Error('Timeout waiting for next epoch.')\n }\n\n await sleep(pollIntervalMs)\n }\n}\n","import {bcs} from \"@mysten/sui/bcs\";\nimport {deriveObjectID as doi} from \"@mysten/sui/utils\";\n\nexport function deriveObjectId(\n parentId: string,\n module: string,\n key: string,\n packageId: string,\n type?: string,\n serializedBcs?: any\n) {\n serializedBcs ??= bcs.struct(key, { dummy_value: bcs.bool() }).serialize({ dummy_value: false })\n const keyU8 = serializedBcs.toBytes();\n let typeTag = `${packageId}::${module}::${key}`\n if (type) {\n typeTag += `<${type}>`\n }\n return doi(parentId, typeTag, keyU8)\n}"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/keypair.ts","../src/config/static.ts","../src/config/config.ts","../src/utils/cost_analyzer.ts","../src/utils/byte_utils.ts","../src/utils/sui_client.ts","../src/tokens/coin.ts","../src/tokens/usdc.ts","../src/utils/publish.ts","../src/utils/deploy.ts","../src/utils/test_utils.ts","../src/utils/derived_objects.ts"],"names":["decodeSuiPrivateKey","Ed25519Keypair","Secp256k1Keypair","Secp256r1Keypair","dotenv","path","SUI_CLOCK_OBJECT_ID","getFullnodeUrl","fs","fs2","toBase64","toHex","fromHex","MoveType","SC","fromBase64","Transaction","bcs","coinWithBalance","execSync","requestSuiFromFaucetV2","getFaucetHost","doi"],"mappings":"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","file":"index.js","sourcesContent":["import { decodeSuiPrivateKey, Keypair } from '@mysten/sui/cryptography'\nimport { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519'\nimport { Secp256k1Keypair } from '@mysten/sui/keypairs/secp256k1'\nimport { Secp256r1Keypair } from '@mysten/sui/keypairs/secp256r1'\n\nexport function getKeypair(privkey: string): Keypair {\n const parsed = decodeSuiPrivateKey(privkey)\n\n switch (parsed.scheme) {\n case 'ED25519': {\n return Ed25519Keypair.fromSecretKey(parsed.secretKey)\n }\n case 'Secp256k1': {\n return Secp256k1Keypair.fromSecretKey(parsed.secretKey)\n }\n case 'Secp256r1': {\n return Secp256r1Keypair.fromSecretKey(parsed.secretKey)\n }\n default:\n throw new Error(`Key scheme ${parsed.schema} not supported`)\n }\n}\n","export type Network = 'mainnet' | 'testnet' | 'devnet' | 'localnet'\n\ninterface StaticConfig {\n CHAIN_ID: string\n USDC_PACKAGE_ID?: string\n}\n\nexport const STATIC_CONFIGS: Record<Network, StaticConfig> = {\n localnet: {\n CHAIN_ID: 'd07607dc',\n },\n devnet: {\n CHAIN_ID: '4c78adac',\n },\n testnet: {\n CHAIN_ID: '4c78adac',\n USDC_PACKAGE_ID: '0xa1ec7fc00a6f40db9693ad1415d0c193ad3906494428cf252621037bd7117e29',\n },\n mainnet: {\n CHAIN_ID: '35834a8a',\n USDC_PACKAGE_ID: '0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7',\n },\n}\n","import path from 'path'\nimport fs from 'fs'\nimport dotenv from 'dotenv'\nimport { Keypair } from '@mysten/sui/cryptography'\nimport { getFullnodeUrl } from '@mysten/sui/client'\nimport { getKeypair } from '../utils/keypair'\nimport { STATIC_CONFIGS, Network } from './static'\nimport {SUI_CLOCK_OBJECT_ID} from \"@mysten/sui/utils\";\ndotenv.config({ path: path.resolve(process.cwd(), '.env'), quiet: true })\n\nexport const DENY_LIST_ID = '0x403'\nexport const CLOCK_ID = SUI_CLOCK_OBJECT_ID\nexport const COIN_REGISTRY = '0x000000000000000000000000000000000000000000000000000000000000000c'\n\n// Base configuration that the SDK provides\nexport interface BaseConfigVars {\n NETWORK: Network\n RPC: string\n PACKAGE_PATH: string\n PACKAGE_ID: string\n UPGRADE_CAP_ID: string\n USDC_PACKAGE_ID?: string\n USDC_TREASURY_CAP?: string\n}\n\n// Default ConfigVars is just the base, but projects can extend it\nexport type ConfigVars = BaseConfigVars\n\nexport const ADMIN_KEYPAIR: Keypair | undefined = process.env.ADMIN_PRIVATE_KEY ? getKeypair(process.env.ADMIN_PRIVATE_KEY) : undefined\n\n/**\n * Map of config keys to Move type patterns for finding object IDs during deployment\n * The type pattern can use {packageId} placeholder which will be replaced with the deployed package ID\n *\n * Example: { SETUP_AUTH: \"{packageId}::setup::SetupAuth\" }\n * Example: { TOKEN_TREASURY_CAP: \"{packageId}::treasury::Treasury<{packageId}::token::TOKEN>\" }\n */\nexport type ExtraVarsMap = Record<string, string>\n\n// Generic Config class that can be extended with custom types\nexport class Config<TConfigVars extends BaseConfigVars = ConfigVars> {\n private static instance: Config | null = null\n\n private static getInstance(): Config {\n if (!Config.instance) {\n this.instance = new Config()\n }\n return this.instance!\n }\n\n get env(): Network {\n let env = process.env.NETWORK\n if (!['mainnet', 'testnet', 'devnet', 'localnet'].includes(env || '')) {\n env = 'localnet'\n }\n return env as Network\n }\n\n /**\n * Override this getter in your custom Config class to define extra variables\n * that should be populated during deployment by finding objects by their Move types\n */\n static get extraVars(): ExtraVarsMap {\n return {}\n }\n\n static get vars(): BaseConfigVars {\n const instance = this.getInstance()\n const NETWORK = instance.env\n dotenv.config({ path: path.resolve(process.cwd(), `.env.${NETWORK}`), override: true, quiet: true })\n\n const envVars = {\n NETWORK,\n RPC: getFullnodeUrl(NETWORK),\n PACKAGE_PATH: process.env.PACKAGE_PATH || '',\n PACKAGE_ID: process.env.PACKAGE_ID || '',\n UPGRADE_CAP_ID: process.env.UPGRADE_CAP_ID || '',\n USDC_TREASURY_CAP: process.env.USDC_TREASURY_CAP,\n USDC_PACKAGE_ID: process.env.USDC_PACKAGE_ID,\n }\n\n const staticVars = STATIC_CONFIGS[NETWORK] || {}\n\n return {\n ...staticVars,\n ...envVars,\n }\n }\n\n static write<T extends BaseConfigVars>(config: T): string {\n const instance = this.getInstance()\n const env = instance.env\n const envFile = path.join(process.cwd(), `.env${env ? `.${env}` : ''}`)\n\n const envVariables = Object.entries(config)\n .filter(([_, value]) => value)\n .map(([key, value]) => `${key}=${value}`)\n .join('\\n')\n\n fs.writeFileSync(envFile, envVariables, 'utf8')\n return envFile\n }\n}\n","import * as fs from 'fs'\nimport { Transaction } from '@mysten/sui/transactions'\nimport { SuiTransactionBlockResponse } from '@mysten/sui/client'\nimport { Config } from '../config/config'\n\nconst COST_ANALYSIS_FILE = './gas_cost_estimation.csv'\nconst HEADERS = [\n 'environment',\n 'executedAt',\n 'digest',\n 'packageId',\n 'call',\n 'computationCost',\n 'storageCost',\n 'storageRebate',\n 'nonRefundableStorageFee',\n 'gasSpent',\n]\n\nexport function analyze_cost(ptb: Transaction, resp: SuiTransactionBlockResponse) {\n if (!process.env.COST_ANALYZER_ENABLED) {\n return\n }\n if (!fs.existsSync(COST_ANALYSIS_FILE)) {\n fs.writeFileSync(COST_ANALYSIS_FILE, HEADERS.join(',') + '\\n')\n }\n\n const columns: any = [Config.vars.NETWORK, Date.now(), resp.digest]\n\n const moveCalls = ptb.blockData.transactions.filter((txItem) => txItem.kind === 'MoveCall')\n const moveCall = moveCalls.pop()\n if (!moveCall?.target) {\n return\n }\n const splits = moveCall.target.split('::')\n columns.push(splits[0])\n columns.push(`${splits[1]}::${splits[2]}`)\n\n const gasUsed = resp.effects?.gasUsed\n columns.push(gasUsed?.computationCost || 'N/A')\n columns.push(gasUsed?.storageCost || 'N/A')\n columns.push(gasUsed?.storageRebate || 'N/A')\n columns.push(gasUsed?.nonRefundableStorageFee || 'N/A')\n\n const totalGasCost = BigInt(gasUsed?.computationCost || 0) + BigInt(gasUsed?.storageCost || 0)\n const gasSpent = totalGasCost - BigInt(gasUsed?.storageRebate || 0)\n columns.push(gasSpent)\n\n fs.appendFileSync(COST_ANALYSIS_FILE, columns.join(',') + '\\n')\n}\n","import {\n toBase64,\n toHex,\n fromHex,\n fromBase64\n} from \"@mysten/sui/utils\";\n\nexport enum FORMAT_TYPES {\n hex = 1,\n base64,\n}\n\nexport function toFormatType(type: FORMAT_TYPES, bytes: Uint8Array<ArrayBuffer>) {\n switch (type) {\n case FORMAT_TYPES.base64:\n return toBase64(bytes)\n case FORMAT_TYPES.hex:\n return toHex(bytes)\n default:\n throw \"The FORMAT_TYPES must be one of hex or base64\"\n }\n}\n\nexport function isHex(str: string): boolean {\n // Must be even length and only hex chars\n return /^[0-9a-fA-F]+$/.test(str) && str.length % 2 === 0;\n}\n\nexport function hexToBase64(hex: string) {\n return toBase64(fromHex(hex))\n}\n\nexport function base64toHex(base64: string) {\n return toHex(fromBase64(base64))\n}","import { SuiClient as SC } from '@mysten/sui/client'\nimport { toBase64, fromBase64, fromHex } from '@mysten/sui/utils'\nimport { Config } from '../config/config'\nimport { Transaction } from '@mysten/sui/transactions'\nimport { Keypair } from '@mysten/sui/cryptography'\nimport { bcs } from '@mysten/sui/bcs'\nimport { analyze_cost } from './cost_analyzer'\nimport type {SuiTransactionBlockResponse} from \"@mysten/sui/jsonRpc\";\nimport {FORMAT_TYPES, hexToBase64, isHex, toFormatType} from \"./byte_utils\";\n\nexport enum MoveType {\n u8 = 1,\n u16,\n u32,\n u64,\n u128,\n u256,\n bool,\n string,\n string_opt,\n object,\n address,\n address_opt,\n vec_address,\n vec_u64,\n}\n\nconst txOptions = {\n showEffects: true,\n showObjectChanges: true,\n showBalanceChanges: true,\n}\n\nexport class SuiClient {\n private static instance: SuiClient | null = null\n private client: SC\n\n private constructor() {\n this.client = new SC({ url: Config.vars.RPC })\n }\n\n private static getInstance(): SuiClient {\n if (!SuiClient.instance) {\n this.instance = new SuiClient()\n }\n return this.instance!\n }\n\n public static get client(): SC {\n return this.getInstance().client\n }\n\n private static async waitForTransaction(\n ptb: Transaction,\n resp: SuiTransactionBlockResponse,\n ) {\n await SuiClient.client.waitForTransaction({ digest: resp.digest })\n if (resp.effects?.status.status !== 'success') {\n throw new Error(JSON.stringify(resp))\n }\n analyze_cost(ptb, resp)\n return resp\n }\n\n public static async signAndExecute(\n ptb: Transaction,\n signer: Keypair,\n ) {\n const resp = await SuiClient.client.signAndExecuteTransaction({\n transaction: ptb,\n signer,\n options: txOptions,\n })\n return SuiClient.waitForTransaction(ptb, resp)\n }\n\n public static toMoveArg(ptb: Transaction, value: any, type?: MoveType) {\n if (typeof value === 'object' && !Array.isArray(value)) {\n return value\n }\n\n if (!type) {\n if (typeof value === 'string') {\n if (value.startsWith('0x')) {\n type = MoveType.object\n } else {\n type = MoveType.string\n }\n } else if (typeof value === 'boolean') {\n type = MoveType.bool\n } else if (typeof value === 'number' || typeof value === 'bigint') {\n type = MoveType.u64\n }\n }\n\n const factory = {\n [MoveType.u8]: (v: any) => ptb.pure.u8(v),\n [MoveType.u16]: (v: any) => ptb.pure.u16(v),\n [MoveType.u32]: (v: any) => ptb.pure.u32(v),\n [MoveType.u64]: (v: any) => ptb.pure.u64(v),\n [MoveType.u128]: (v: any) => ptb.pure.u128(v),\n [MoveType.u256]: (v: any) => ptb.pure.u256(v),\n [MoveType.bool]: (v: any) => ptb.pure.bool(v),\n [MoveType.string]: (v: any) => ptb.pure.string(v),\n [MoveType.string_opt]: (v: any) => ptb.pure.option('string', v),\n [MoveType.object]: (v: any) => ptb.object(v),\n [MoveType.address]: (v: any) => ptb.pure.address(v),\n [MoveType.address_opt]: (v: any) => ptb.pure.option('address', v),\n [MoveType.vec_address]: (v: any) => ptb.pure.vector('address', v),\n [MoveType.vec_u64]: (v: any) => ptb.pure.vector('u64', v),\n }\n\n return factory[type!](value)\n }\n\n public static async moveCall({\n signer,\n target,\n typeArgs = [],\n args = [],\n argTypes = [],\n ptb,\n withTransfer = false,\n }: {\n signer: Keypair\n target: string\n typeArgs?: string[]\n args?: any[]\n argTypes?: MoveType[]\n ptb?: Transaction\n withTransfer?: boolean\n }) {\n ptb = this.getPTB(target, typeArgs, args, argTypes, signer.toSuiAddress(), withTransfer, ptb);\n\n return SuiClient.signAndExecute(ptb, signer)\n }\n\n public static async getMoveCallBytes({\n signer,\n target,\n typeArgs = [],\n args = [],\n argTypes = [],\n ptb,\n withTransfer = false,\n gasOwner,\n format = FORMAT_TYPES.hex\n }: {\n signer: string\n target: string\n typeArgs?: string[]\n args?: any[]\n argTypes?: MoveType[]\n ptb?: Transaction\n withTransfer?: boolean\n gasOwner?: string\n format?: FORMAT_TYPES\n }) {\n ptb = this.getPTB(target, typeArgs, args, argTypes, signer, withTransfer, ptb);\n return await this.getMoveCallBytesFromPTB(ptb, signer, gasOwner, format);\n }\n\n public static async getMoveCallBytesFromPTB(ptb: Transaction, signer: string, gasOwner?: string, format: FORMAT_TYPES = FORMAT_TYPES.hex) {\n ptb.setSender(signer)\n gasOwner ??= signer\n ptb.setGasOwner(gasOwner || signer)\n const bytes = await ptb.build({client: SuiClient.client, onlyTransactionKind: false});\n return toFormatType(format, bytes)\n }\n\n public static toBytes(bytes: Uint8Array | string) {\n if (typeof bytes === 'string') {\n return isHex(bytes) ? fromHex(bytes) : fromBase64(bytes)\n }\n return bytes\n }\n\n public static async getSignature(signatureOrKeypair: string | Keypair, bytes: Uint8Array) {\n if (typeof signatureOrKeypair !== 'string') {\n const signature = await signatureOrKeypair.signTransaction(bytes)\n return signature.signature\n }\n\n return isHex(signatureOrKeypair) ? hexToBase64(signatureOrKeypair) : signatureOrKeypair\n }\n\n public static async executeMoveCallBytes(\n bytes: Uint8Array | string,\n senderSignature: string | Keypair,\n gasOwnerSignature?: string | Keypair,\n ) {\n const transactionBlock = this.toBytes(bytes)\n senderSignature = await this.getSignature(senderSignature, transactionBlock)\n\n const signature = [senderSignature]\n if (gasOwnerSignature) {\n gasOwnerSignature = await this.getSignature(gasOwnerSignature, transactionBlock)\n signature.push(gasOwnerSignature)\n }\n const resp = await SuiClient.client.executeTransactionBlock({\n transactionBlock: toBase64(transactionBlock),\n signature,\n options: txOptions\n })\n const ptb = Transaction.from(toBase64(transactionBlock))\n return SuiClient.waitForTransaction(ptb, resp)\n }\n\n public static getPTB(\n target: string,\n typeArgs: string[] = [],\n args: any[] = [],\n argTypes: MoveType[] = [],\n signer?: string,\n withTransfer: boolean = false,\n ptb?: Transaction\n ) {\n ptb = ptb || new Transaction()\n const obj = ptb.moveCall({\n target,\n typeArguments: typeArgs,\n arguments: args.map((arg, i) => SuiClient.toMoveArg(ptb, arg, argTypes[i])),\n })\n\n if (withTransfer && signer) {\n ptb.transferObjects([obj], signer)\n }\n return ptb;\n }\n\n public static async public_transfer(objects: string[], from: Keypair, to: string) {\n const tx = new Transaction()\n tx.transferObjects(objects, to)\n return await SuiClient.signAndExecute(tx, from)\n }\n\n public static async devInspect(ptb: Transaction, sender: string) {\n return await SuiClient.client.devInspectTransactionBlock({\n transactionBlock: ptb,\n sender,\n })\n }\n\n public static async devInspectRaw(ptb: Transaction, sender: string) {\n const result = await this.devInspect(ptb, sender)\n return result.results?.[0].returnValues?.[0]?.[0]\n }\n\n public static async devInspectBool(ptb: Transaction, sender: string) {\n const result = await this.devInspectRaw(ptb, sender)\n return result && result[0] === 1\n }\n\n public static async devInspectU64(ptb: Transaction, sender: string) {\n const value = await this.devInspectRaw(ptb, sender)\n return BigInt(bcs.u64().parse(new Uint8Array(value!)))\n }\n\n public static async devInspectAddress(ptb: Transaction, sender: string) {\n const value = await this.devInspectRaw(ptb, sender)\n if (!value) {\n return undefined\n }\n const bytes = Uint8Array.from(value)\n return '0x' + Buffer.from(bytes).toString('hex')\n }\n\n public static async devInspectString(ptb: Transaction, sender: string) {\n const value = await this.devInspectRaw(ptb, sender)\n if (!value) {\n return ''\n }\n return bcs.string().parse(new Uint8Array(value!))\n }\n\n public static async getObject(id: string) {\n return SuiClient.client.getObject({\n id,\n options: {\n showContent: true,\n showType: true,\n showDisplay: true,\n showBcs: true,\n },\n })\n }\n\n public static async getObjectsByType(owner: string, type: string) {\n const res = await SuiClient.client.getOwnedObjects({\n owner,\n filter: {\n StructType: type,\n },\n })\n return res.data.map((o) => o.data?.objectId).filter((o) => o)\n }\n}\n","import { MoveType, SuiClient } from '../utils/sui_client'\nimport { Keypair } from '@mysten/sui/cryptography'\nimport { coinWithBalance, Transaction } from '@mysten/sui/transactions'\nimport {COIN_REGISTRY} from \"../config/config\";\n\nexport class Coin {\n public static get coinType(): string {\n throw new Error('`coinType` getter must be implemented !')\n }\n\n public static async getBalance(owner: string) {\n const result = await SuiClient.client.getBalance({\n owner,\n coinType: this.coinType,\n })\n return BigInt(result.totalBalance)\n }\n\n public static async getCoin(owner: Keypair, amount?: bigint): Promise<string> {\n const balance = amount || (await this.getBalance(owner.toSuiAddress()))\n const tx = new Transaction()\n const coinSplit = coinWithBalance({\n balance,\n useGasCoin: false,\n type: this.coinType,\n })\n tx.transferObjects([coinSplit], owner.toSuiAddress())\n const result = await SuiClient.signAndExecute(tx, owner)\n\n const coin = result.objectChanges?.find(\n (o) => o.type === 'created' && o.objectType === `0x2::coin::Coin<${this.coinType}>`\n )\n\n return (coin as any)?.objectId\n }\n\n public static async _mint(treasuryId: string, amount: bigint, minter: Keypair) {\n await SuiClient.moveCall({\n signer: minter,\n target: `0x2::coin::mint`,\n typeArgs: [this.coinType],\n args: [treasuryId, amount],\n argTypes: [MoveType.object, MoveType.u64],\n withTransfer: true,\n })\n }\n\n public static async finalizeRegistration(registrar: Keypair) {\n const currencies = await SuiClient.getObjectsByType(COIN_REGISTRY, `0x2::coin_registry::Currency<${this.coinType}>`)\n\n if (currencies.length === 0 || !currencies[0]) {\n throw new Error('The registrar does not own the currency, please pass the currency id.')\n }\n const currencyId = currencies[0]\n\n await SuiClient.moveCall({\n signer: registrar,\n target: `0x2::coin_registry::finalize_registration`,\n typeArgs: [this.coinType],\n args: [COIN_REGISTRY, currencyId],\n argTypes: [MoveType.object, MoveType.object],\n })\n }\n\n public static async send(amount: bigint, from: Keypair, to: string) {\n const coin = await this.getCoin(from, amount)\n const ptb = new Transaction()\n ptb.transferObjects([ptb.object(coin)], to)\n await SuiClient.signAndExecute(ptb, from)\n }\n\n public static async assertBalance(wallet: Keypair, amount: bigint | BigInt) {\n await expect(this.getBalance(wallet.toSuiAddress())).resolves.toBe(amount)\n }\n}\n","import { MoveType, SuiClient } from '../utils/sui_client'\nimport { Keypair } from '@mysten/sui/cryptography'\nimport { DENY_LIST_ID, Config } from '../config/config'\nimport { Coin } from './coin'\n\nexport class USDC extends Coin {\n public static get coinType(): string {\n return Config.vars.USDC_PACKAGE_ID + '::usdc::USDC'\n }\n\n private static async getMintCapId(admin: Keypair) {\n async function getMintCapFromChain() {\n const mintCapIds = await SuiClient.getObjectsByType(\n admin.toSuiAddress(),\n `${Config.vars.USDC_PACKAGE_ID}::treasury::MintCap`\n )\n return mintCapIds.pop()\n }\n\n let mintCapId = await getMintCapFromChain()\n\n if (!mintCapId) {\n await SuiClient.moveCall({\n signer: admin,\n target: `${Config.vars.USDC_PACKAGE_ID}::treasury::configure_new_controller`,\n typeArgs: [this.coinType],\n args: [Config.vars.USDC_TREASURY_CAP, admin.toSuiAddress(), admin.toSuiAddress()],\n argTypes: [MoveType.object, MoveType.address, MoveType.address],\n })\n mintCapId = await getMintCapFromChain()\n }\n\n return mintCapId\n }\n\n public static async faucet(amount: bigint, receiver: string, admin: Keypair) {\n const mintCapId = await this.getMintCapId(admin)\n\n await SuiClient.moveCall({\n signer: admin,\n target: `${Config.vars.USDC_PACKAGE_ID}::treasury::configure_minter`,\n typeArgs: [this.coinType],\n args: [Config.vars.USDC_TREASURY_CAP, DENY_LIST_ID, amount],\n argTypes: [MoveType.object, MoveType.object, MoveType.u64],\n })\n\n await SuiClient.moveCall({\n signer: admin,\n target: `${Config.vars.USDC_PACKAGE_ID}::treasury::mint`,\n typeArgs: [this.coinType],\n args: [Config.vars.USDC_TREASURY_CAP, mintCapId, DENY_LIST_ID, amount, receiver],\n argTypes: [\n MoveType.object,\n MoveType.object,\n MoveType.object,\n MoveType.u64,\n MoveType.address,\n ],\n })\n }\n}\n","import fs from 'fs'\nimport {\n SuiObjectChangeCreated,\n SuiObjectChangePublished,\n SuiTransactionBlockResponse,\n} from '@mysten/sui/client'\nimport { Keypair } from '@mysten/sui/cryptography'\nimport { ADMIN_KEYPAIR, Config } from '../config/config'\n\nimport { execSync } from 'child_process'\n\nexport class PublishSingleton {\n private static instance: PublishSingleton | null = null\n\n private constructor(private readonly publishResp: SuiTransactionBlockResponse) {}\n\n private static getPackagePath(packagePath?: string): string {\n packagePath ??= Config.vars.PACKAGE_PATH\n\n if (!packagePath) {\n throw new Error(\n 'You must set the `PACKAGE_PATH` environment variable to your Move.toml path.'\n )\n }\n\n return packagePath\n }\n\n public static async publish(signer?: Keypair, packagePath?: string) {\n signer ??= ADMIN_KEYPAIR!\n const _packagePath = this.getPackagePath(packagePath)\n\n if (!PublishSingleton.instance) {\n const publishResp = await PublishSingleton.publishPackage(signer, _packagePath)\n const packageId = this.findPublishedPackage(publishResp)?.packageId\n if (!packageId) {\n throw new Error('Expected to find package published')\n }\n // suiClientGen(packageId)\n PublishSingleton.instance = new PublishSingleton(publishResp)\n }\n }\n\n private static getInstance(): PublishSingleton {\n if (!PublishSingleton.instance) {\n throw new Error('Use `async PublishSingleton.publish()` first')\n }\n return PublishSingleton.instance\n }\n\n public static publishResponse(): SuiTransactionBlockResponse {\n return this.getInstance().publishResp\n }\n\n public static get packageId(): string {\n const packageChng = this.findPublishedPackage(this.publishResponse())\n if (!packageChng) {\n throw new Error('Expected to find package published')\n }\n return packageChng.packageId\n }\n\n public static findObjectIdByType(type: string, fail: boolean = true): string {\n const obj = this.findObjectChangeCreatedByType(this.publishResponse(), type)\n if (fail && !obj) {\n throw new Error(`Expected to find ${type} shared object created.`)\n }\n return obj?.objectId || ''\n }\n\n public static get upgradeCapId(): string {\n return this.findObjectIdByType(`0x2::package::UpgradeCap`)\n }\n\n public static get usdcTreasuryCap(): string {\n return this.findObjectIdByType(\n `${this.packageId}::treasury::Treasury<${this.packageId}::usdc::USDC>`,\n false\n )\n }\n\n private static getPublishCmd(packagePath: string, sender: string, inBytes: boolean = false) {\n const network = Config.vars.NETWORK\n\n if (!fs.existsSync(packagePath)) {\n throw new Error(`Package doesn't exist under: ${packagePath}`)\n }\n\n if (fs.existsSync(`${packagePath}/Move.lock`)) {\n fs.unlinkSync(`${packagePath}/Move.lock`)\n }\n\n if (fs.existsSync(`Pub.${network}.toml`)) {\n fs.unlinkSync(`Pub.${network}.toml`)\n }\n fs.rmSync(`${packagePath}/build`, { recursive: true, force: true })\n\n const isEphemeralChain = network !== 'mainnet' && network !== 'testnet'\n const publishCmd = isEphemeralChain ? `test-publish --build-env testnet` : 'publish'\n\n let buildCommand = `sui client ${publishCmd} ${packagePath}`\n\n if (network === 'localnet' || network === 'devnet') {\n buildCommand += ' --with-unpublished-dependencies'\n }\n\n buildCommand += inBytes ? ' --serialize-unsigned-transaction' : ' --json'\n\n return buildCommand\n }\n\n static async getPublishBytes(signer?: string, packagePath?: string): Promise<string> {\n signer ??= ADMIN_KEYPAIR!.toSuiAddress()\n const _packagePath = this.getPackagePath(packagePath)\n const cmd = this.getPublishCmd(_packagePath, signer, true)\n return execSync(cmd, { encoding: 'utf-8' }).trim()\n }\n\n static async publishPackage(\n signer: Keypair,\n packagePath: string\n ): Promise<SuiTransactionBlockResponse> {\n const cmd = this.getPublishCmd(packagePath, signer.toSuiAddress())\n const res = execSync(cmd, { encoding: 'utf-8' })\n const match = res.match(/\\{[\\s\\S]*\\}/);\n if (!match) {\n throw new Error(`No JSON found in the publish command output: ${res}`);\n }\n return JSON.parse(match[0])\n }\n\n static findPublishedPackage(\n resp: SuiTransactionBlockResponse\n ): SuiObjectChangePublished | undefined {\n return resp.objectChanges?.find(\n (chng): chng is SuiObjectChangePublished => chng.type === 'published'\n )\n }\n\n static findObjectChangeCreatedByType(\n resp: SuiTransactionBlockResponse,\n type: string\n ): SuiObjectChangeCreated | undefined {\n return resp.objectChanges?.find(\n (chng): chng is SuiObjectChangeCreated =>\n chng.type === 'created' && chng.objectType === type\n )\n }\n}\n","import {ADMIN_KEYPAIR, BaseConfigVars, Config} from '../config/config'\nimport {PublishSingleton} from './publish'\n\nexport async function deploy<\n TConfig extends typeof Config = typeof Config,\n TConfigVars extends BaseConfigVars = BaseConfigVars\n>(\n ConfigClass: TConfig = Config as TConfig,\n packagePath?: string,\n): Promise<string> {\n const vars = ConfigClass.vars as TConfigVars\n await PublishSingleton.publish(ADMIN_KEYPAIR!, packagePath)\n\n const newConfig = {\n ...vars,\n PACKAGE_ID: PublishSingleton.packageId,\n UPGRADE_CAP_ID: PublishSingleton.upgradeCapId,\n } as TConfigVars\n\n if (PublishSingleton.usdcTreasuryCap) {\n newConfig.USDC_PACKAGE_ID = PublishSingleton.packageId\n newConfig.USDC_TREASURY_CAP = PublishSingleton.usdcTreasuryCap\n }\n\n // Process extra vars from Config.extraVars\n const extraVars = ConfigClass.extraVars\n if (extraVars && Object.keys(extraVars).length > 0) {\n for (const [key, typePattern] of Object.entries(extraVars)) {\n const type = typePattern.replace('{packageId}', PublishSingleton.packageId)\n // @ts-ignore - dynamically adding properties to config\n newConfig[key] = PublishSingleton.findObjectIdByType(type, true)\n }\n }\n\n ConfigClass.write(newConfig)\n\n return `Move contracts deployed successfully on ${vars.NETWORK} contract details have been stored in .env.${vars.NETWORK}`\n}\n\nexport async function getDeployBytes() {\n return await PublishSingleton.getPublishBytes()\n}\n","import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519'\nimport { requestSuiFromFaucetV2, getFaucetHost } from '@mysten/sui/faucet'\nimport { ADMIN_KEYPAIR, Config } from '../config/config'\nimport { SuiClient } from './sui_client'\nimport { USDC } from '../tokens/usdc'\n\nexport function createWallet() {\n return new Ed25519Keypair()\n}\n\nexport async function createFundedWallet(usdcAmount?: bigint) {\n const wallet = createWallet()\n await faucet(wallet.toSuiAddress())\n\n if (usdcAmount) {\n await USDC.faucet(usdcAmount, wallet.toSuiAddress(), ADMIN_KEYPAIR!)\n }\n\n return wallet\n}\n\nasync function faucet(address: string) {\n await requestSuiFromFaucetV2({\n host: getFaucetHost(Config.vars.NETWORK as 'localnet' | 'devnet'), // or 'devnet', 'localnet'\n recipient: address,\n })\n}\n\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nexport async function waitForNextEpoch(timeoutMs = 5 * 60 * 1000, pollIntervalMs = 2000) {\n const startEpoch = (await SuiClient.client.getLatestSuiSystemState()).epoch\n const startTime = Date.now()\n\n while (true) {\n const { epoch } = await SuiClient.client.getLatestSuiSystemState()\n if (Number(epoch) > Number(startEpoch)) {\n return epoch\n }\n\n if (Date.now() - startTime > timeoutMs) {\n throw new Error('Timeout waiting for next epoch.')\n }\n\n await sleep(pollIntervalMs)\n }\n}\n","import {bcs} from \"@mysten/sui/bcs\";\nimport {deriveObjectID as doi} from \"@mysten/sui/utils\";\n\nexport function deriveObjectId(\n parentId: string,\n module: string,\n key: string,\n packageId: string,\n type?: string,\n serializedBcs?: any\n) {\n serializedBcs ??= bcs.struct(key, { dummy_value: bcs.bool() }).serialize({ dummy_value: false })\n const keyU8 = serializedBcs.toBytes();\n let typeTag = `${packageId}::${module}::${key}`\n if (type) {\n typeTag += `<${type}>`\n }\n return doi(parentId, typeTag, keyU8)\n}"]}
|
package/dist/index.mjs
CHANGED
|
@@ -550,54 +550,41 @@ var PublishSingleton = class _PublishSingleton {
|
|
|
550
550
|
false
|
|
551
551
|
);
|
|
552
552
|
}
|
|
553
|
-
static
|
|
554
|
-
const
|
|
553
|
+
static getPublishCmd(packagePath, sender, inBytes = false) {
|
|
554
|
+
const network = Config.vars.NETWORK;
|
|
555
555
|
if (!fs3__default.existsSync(packagePath)) {
|
|
556
556
|
throw new Error(`Package doesn't exist under: ${packagePath}`);
|
|
557
557
|
}
|
|
558
558
|
if (fs3__default.existsSync(`${packagePath}/Move.lock`)) {
|
|
559
559
|
fs3__default.unlinkSync(`${packagePath}/Move.lock`);
|
|
560
560
|
}
|
|
561
|
+
if (fs3__default.existsSync(`Pub.${network}.toml`)) {
|
|
562
|
+
fs3__default.unlinkSync(`Pub.${network}.toml`);
|
|
563
|
+
}
|
|
561
564
|
fs3__default.rmSync(`${packagePath}/build`, { recursive: true, force: true });
|
|
562
|
-
const
|
|
563
|
-
const
|
|
564
|
-
let buildCommand = `sui
|
|
565
|
-
if (network === "localnet" || network === "devnet"
|
|
565
|
+
const isEphemeralChain = network !== "mainnet" && network !== "testnet";
|
|
566
|
+
const publishCmd = isEphemeralChain ? `test-publish --build-env testnet` : "publish";
|
|
567
|
+
let buildCommand = `sui client ${publishCmd} ${packagePath}`;
|
|
568
|
+
if (network === "localnet" || network === "devnet") {
|
|
566
569
|
buildCommand += " --with-unpublished-dependencies";
|
|
567
570
|
}
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
modules,
|
|
571
|
-
dependencies
|
|
572
|
-
});
|
|
573
|
-
transaction.transferObjects([upgradeCap], sender);
|
|
574
|
-
return transaction;
|
|
571
|
+
buildCommand += inBytes ? " --serialize-unsigned-transaction" : " --json";
|
|
572
|
+
return buildCommand;
|
|
575
573
|
}
|
|
576
574
|
static async getPublishBytes(signer, packagePath) {
|
|
577
575
|
signer ??= ADMIN_KEYPAIR.toSuiAddress();
|
|
578
576
|
const _packagePath = this.getPackagePath(packagePath);
|
|
579
|
-
const
|
|
580
|
-
|
|
581
|
-
const txBytes = await transaction.build({ client, onlyTransactionKind: true });
|
|
582
|
-
return Buffer.from(txBytes).toString("base64");
|
|
577
|
+
const cmd = this.getPublishCmd(_packagePath, signer, true);
|
|
578
|
+
return execSync(cmd, { encoding: "utf-8" }).trim();
|
|
583
579
|
}
|
|
584
580
|
static async publishPackage(signer, packagePath) {
|
|
585
|
-
const
|
|
586
|
-
const
|
|
587
|
-
const
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
options: {
|
|
591
|
-
showObjectChanges: true,
|
|
592
|
-
showEffects: true
|
|
593
|
-
}
|
|
594
|
-
});
|
|
595
|
-
if (resp.effects?.status.status !== "success") {
|
|
596
|
-
throw new Error(`Failure during publish transaction:
|
|
597
|
-
${JSON.stringify(resp, null, 2)}`);
|
|
581
|
+
const cmd = this.getPublishCmd(packagePath, signer.toSuiAddress());
|
|
582
|
+
const res = execSync(cmd, { encoding: "utf-8" });
|
|
583
|
+
const match = res.match(/\{[\s\S]*\}/);
|
|
584
|
+
if (!match) {
|
|
585
|
+
throw new Error(`No JSON found in the publish command output: ${res}`);
|
|
598
586
|
}
|
|
599
|
-
|
|
600
|
-
return resp;
|
|
587
|
+
return JSON.parse(match[0]);
|
|
601
588
|
}
|
|
602
589
|
static findPublishedPackage(resp) {
|
|
603
590
|
return resp.objectChanges?.find(
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/keypair.ts","../src/config/static.ts","../src/config/config.ts","../src/utils/cost_analyzer.ts","../src/utils/byte_utils.ts","../src/utils/sui_client.ts","../src/tokens/coin.ts","../src/tokens/usdc.ts","../src/utils/publish.ts","../src/utils/deploy.ts","../src/utils/test_utils.ts","../src/utils/derived_objects.ts"],"names":["fs","fs2","MoveType","SC","fromHex","fromBase64","toBase64","Transaction","SuiClient","Ed25519Keypair","bcs","doi"],"mappings":"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","file":"index.mjs","sourcesContent":["import { decodeSuiPrivateKey, Keypair } from '@mysten/sui/cryptography'\nimport { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519'\nimport { Secp256k1Keypair } from '@mysten/sui/keypairs/secp256k1'\nimport { Secp256r1Keypair } from '@mysten/sui/keypairs/secp256r1'\n\nexport function getKeypair(privkey: string): Keypair {\n const parsed = decodeSuiPrivateKey(privkey)\n\n switch (parsed.scheme) {\n case 'ED25519': {\n return Ed25519Keypair.fromSecretKey(parsed.secretKey)\n }\n case 'Secp256k1': {\n return Secp256k1Keypair.fromSecretKey(parsed.secretKey)\n }\n case 'Secp256r1': {\n return Secp256r1Keypair.fromSecretKey(parsed.secretKey)\n }\n default:\n throw new Error(`Key scheme ${parsed.schema} not supported`)\n }\n}\n","export type Network = 'mainnet' | 'testnet' | 'devnet' | 'localnet'\n\ninterface StaticConfig {\n CHAIN_ID: string\n USDC_PACKAGE_ID?: string\n}\n\nexport const STATIC_CONFIGS: Record<Network, StaticConfig> = {\n localnet: {\n CHAIN_ID: 'd07607dc',\n },\n devnet: {\n CHAIN_ID: '4c78adac',\n },\n testnet: {\n CHAIN_ID: '4c78adac',\n USDC_PACKAGE_ID: '0xa1ec7fc00a6f40db9693ad1415d0c193ad3906494428cf252621037bd7117e29',\n },\n mainnet: {\n CHAIN_ID: '35834a8a',\n USDC_PACKAGE_ID: '0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7',\n },\n}\n","import path from 'path'\nimport fs from 'fs'\nimport dotenv from 'dotenv'\nimport { Keypair } from '@mysten/sui/cryptography'\nimport { getFullnodeUrl } from '@mysten/sui/client'\nimport { getKeypair } from '../utils/keypair'\nimport { STATIC_CONFIGS, Network } from './static'\nimport {SUI_CLOCK_OBJECT_ID} from \"@mysten/sui/utils\";\ndotenv.config({ path: path.resolve(process.cwd(), '.env'), quiet: true })\n\nexport const DENY_LIST_ID = '0x403'\nexport const CLOCK_ID = SUI_CLOCK_OBJECT_ID\nexport const COIN_REGISTRY = '0x000000000000000000000000000000000000000000000000000000000000000c'\n\n// Base configuration that the SDK provides\nexport interface BaseConfigVars {\n NETWORK: Network\n RPC: string\n PACKAGE_PATH: string\n PACKAGE_ID: string\n UPGRADE_CAP_ID: string\n USDC_PACKAGE_ID?: string\n USDC_TREASURY_CAP?: string\n}\n\n// Default ConfigVars is just the base, but projects can extend it\nexport type ConfigVars = BaseConfigVars\n\nexport const ADMIN_KEYPAIR: Keypair | undefined = process.env.ADMIN_PRIVATE_KEY ? getKeypair(process.env.ADMIN_PRIVATE_KEY) : undefined\n\n/**\n * Map of config keys to Move type patterns for finding object IDs during deployment\n * The type pattern can use {packageId} placeholder which will be replaced with the deployed package ID\n *\n * Example: { SETUP_AUTH: \"{packageId}::setup::SetupAuth\" }\n * Example: { TOKEN_TREASURY_CAP: \"{packageId}::treasury::Treasury<{packageId}::token::TOKEN>\" }\n */\nexport type ExtraVarsMap = Record<string, string>\n\n// Generic Config class that can be extended with custom types\nexport class Config<TConfigVars extends BaseConfigVars = ConfigVars> {\n private static instance: Config | null = null\n\n private static getInstance(): Config {\n if (!Config.instance) {\n this.instance = new Config()\n }\n return this.instance!\n }\n\n get env(): Network {\n let env = process.env.NETWORK\n if (!['mainnet', 'testnet', 'devnet', 'localnet'].includes(env || '')) {\n env = 'localnet'\n }\n return env as Network\n }\n\n /**\n * Override this getter in your custom Config class to define extra variables\n * that should be populated during deployment by finding objects by their Move types\n */\n static get extraVars(): ExtraVarsMap {\n return {}\n }\n\n static get vars(): BaseConfigVars {\n const instance = this.getInstance()\n const NETWORK = instance.env\n dotenv.config({ path: path.resolve(process.cwd(), `.env.${NETWORK}`), override: true, quiet: true })\n\n const envVars = {\n NETWORK,\n RPC: getFullnodeUrl(NETWORK),\n PACKAGE_PATH: process.env.PACKAGE_PATH || '',\n PACKAGE_ID: process.env.PACKAGE_ID || '',\n UPGRADE_CAP_ID: process.env.UPGRADE_CAP_ID || '',\n USDC_TREASURY_CAP: process.env.USDC_TREASURY_CAP,\n USDC_PACKAGE_ID: process.env.USDC_PACKAGE_ID,\n }\n\n const staticVars = STATIC_CONFIGS[NETWORK] || {}\n\n return {\n ...staticVars,\n ...envVars,\n }\n }\n\n static write<T extends BaseConfigVars>(config: T): string {\n const instance = this.getInstance()\n const env = instance.env\n const envFile = path.join(process.cwd(), `.env${env ? `.${env}` : ''}`)\n\n const envVariables = Object.entries(config)\n .filter(([_, value]) => value)\n .map(([key, value]) => `${key}=${value}`)\n .join('\\n')\n\n fs.writeFileSync(envFile, envVariables, 'utf8')\n return envFile\n }\n}\n","import * as fs from 'fs'\nimport { Transaction } from '@mysten/sui/transactions'\nimport { SuiTransactionBlockResponse } from '@mysten/sui/client'\nimport { Config } from '../config/config'\n\nconst COST_ANALYSIS_FILE = './gas_cost_estimation.csv'\nconst HEADERS = [\n 'environment',\n 'executedAt',\n 'digest',\n 'packageId',\n 'call',\n 'computationCost',\n 'storageCost',\n 'storageRebate',\n 'nonRefundableStorageFee',\n 'gasSpent',\n]\n\nexport function analyze_cost(ptb: Transaction, resp: SuiTransactionBlockResponse) {\n if (!process.env.COST_ANALYZER_ENABLED) {\n return\n }\n if (!fs.existsSync(COST_ANALYSIS_FILE)) {\n fs.writeFileSync(COST_ANALYSIS_FILE, HEADERS.join(',') + '\\n')\n }\n\n const columns: any = [Config.vars.NETWORK, Date.now(), resp.digest]\n\n const moveCalls = ptb.blockData.transactions.filter((txItem) => txItem.kind === 'MoveCall')\n const moveCall = moveCalls.pop()\n if (!moveCall?.target) {\n return\n }\n const splits = moveCall.target.split('::')\n columns.push(splits[0])\n columns.push(`${splits[1]}::${splits[2]}`)\n\n const gasUsed = resp.effects?.gasUsed\n columns.push(gasUsed?.computationCost || 'N/A')\n columns.push(gasUsed?.storageCost || 'N/A')\n columns.push(gasUsed?.storageRebate || 'N/A')\n columns.push(gasUsed?.nonRefundableStorageFee || 'N/A')\n\n const totalGasCost = BigInt(gasUsed?.computationCost || 0) + BigInt(gasUsed?.storageCost || 0)\n const gasSpent = totalGasCost - BigInt(gasUsed?.storageRebate || 0)\n columns.push(gasSpent)\n\n fs.appendFileSync(COST_ANALYSIS_FILE, columns.join(',') + '\\n')\n}\n","import {\n toBase64,\n toHex,\n fromHex,\n fromBase64\n} from \"@mysten/sui/utils\";\n\nexport enum FORMAT_TYPES {\n hex = 1,\n base64,\n}\n\nexport function toFormatType(type: FORMAT_TYPES, bytes: Uint8Array<ArrayBuffer>) {\n switch (type) {\n case FORMAT_TYPES.base64:\n return toBase64(bytes)\n case FORMAT_TYPES.hex:\n return toHex(bytes)\n default:\n throw \"The FORMAT_TYPES must be one of hex or base64\"\n }\n}\n\nexport function isHex(str: string): boolean {\n // Must be even length and only hex chars\n return /^[0-9a-fA-F]+$/.test(str) && str.length % 2 === 0;\n}\n\nexport function hexToBase64(hex: string) {\n return toBase64(fromHex(hex))\n}\n\nexport function base64toHex(base64: string) {\n return toHex(fromBase64(base64))\n}","import { SuiClient as SC } from '@mysten/sui/client'\nimport { toBase64, fromBase64, fromHex } from '@mysten/sui/utils'\nimport { Config } from '../config/config'\nimport { Transaction } from '@mysten/sui/transactions'\nimport { Keypair } from '@mysten/sui/cryptography'\nimport { bcs } from '@mysten/sui/bcs'\nimport { analyze_cost } from './cost_analyzer'\nimport type {SuiTransactionBlockResponse} from \"@mysten/sui/jsonRpc\";\nimport {FORMAT_TYPES, hexToBase64, isHex, toFormatType} from \"./byte_utils\";\n\nexport enum MoveType {\n u8 = 1,\n u16,\n u32,\n u64,\n u128,\n u256,\n bool,\n string,\n string_opt,\n object,\n address,\n address_opt,\n vec_address,\n vec_u64,\n}\n\nconst txOptions = {\n showEffects: true,\n showObjectChanges: true,\n showBalanceChanges: true,\n}\n\nexport class SuiClient {\n private static instance: SuiClient | null = null\n private client: SC\n\n private constructor() {\n this.client = new SC({ url: Config.vars.RPC })\n }\n\n private static getInstance(): SuiClient {\n if (!SuiClient.instance) {\n this.instance = new SuiClient()\n }\n return this.instance!\n }\n\n public static get client(): SC {\n return this.getInstance().client\n }\n\n private static async waitForTransaction(\n ptb: Transaction,\n resp: SuiTransactionBlockResponse,\n ) {\n await SuiClient.client.waitForTransaction({ digest: resp.digest })\n if (resp.effects?.status.status !== 'success') {\n throw new Error(JSON.stringify(resp))\n }\n analyze_cost(ptb, resp)\n return resp\n }\n\n public static async signAndExecute(\n ptb: Transaction,\n signer: Keypair,\n ) {\n const resp = await SuiClient.client.signAndExecuteTransaction({\n transaction: ptb,\n signer,\n options: txOptions,\n })\n return SuiClient.waitForTransaction(ptb, resp)\n }\n\n public static toMoveArg(ptb: Transaction, value: any, type?: MoveType) {\n if (typeof value === 'object' && !Array.isArray(value)) {\n return value\n }\n\n if (!type) {\n if (typeof value === 'string') {\n if (value.startsWith('0x')) {\n type = MoveType.object\n } else {\n type = MoveType.string\n }\n } else if (typeof value === 'boolean') {\n type = MoveType.bool\n } else if (typeof value === 'number' || typeof value === 'bigint') {\n type = MoveType.u64\n }\n }\n\n const factory = {\n [MoveType.u8]: (v: any) => ptb.pure.u8(v),\n [MoveType.u16]: (v: any) => ptb.pure.u16(v),\n [MoveType.u32]: (v: any) => ptb.pure.u32(v),\n [MoveType.u64]: (v: any) => ptb.pure.u64(v),\n [MoveType.u128]: (v: any) => ptb.pure.u128(v),\n [MoveType.u256]: (v: any) => ptb.pure.u256(v),\n [MoveType.bool]: (v: any) => ptb.pure.bool(v),\n [MoveType.string]: (v: any) => ptb.pure.string(v),\n [MoveType.string_opt]: (v: any) => ptb.pure.option('string', v),\n [MoveType.object]: (v: any) => ptb.object(v),\n [MoveType.address]: (v: any) => ptb.pure.address(v),\n [MoveType.address_opt]: (v: any) => ptb.pure.option('address', v),\n [MoveType.vec_address]: (v: any) => ptb.pure.vector('address', v),\n [MoveType.vec_u64]: (v: any) => ptb.pure.vector('u64', v),\n }\n\n return factory[type!](value)\n }\n\n public static async moveCall({\n signer,\n target,\n typeArgs = [],\n args = [],\n argTypes = [],\n ptb,\n withTransfer = false,\n }: {\n signer: Keypair\n target: string\n typeArgs?: string[]\n args?: any[]\n argTypes?: MoveType[]\n ptb?: Transaction\n withTransfer?: boolean\n }) {\n ptb = this.getPTB(target, typeArgs, args, argTypes, signer.toSuiAddress(), withTransfer, ptb);\n\n return SuiClient.signAndExecute(ptb, signer)\n }\n\n public static async getMoveCallBytes({\n signer,\n target,\n typeArgs = [],\n args = [],\n argTypes = [],\n ptb,\n withTransfer = false,\n gasOwner,\n format = FORMAT_TYPES.hex\n }: {\n signer: string\n target: string\n typeArgs?: string[]\n args?: any[]\n argTypes?: MoveType[]\n ptb?: Transaction\n withTransfer?: boolean\n gasOwner?: string\n format?: FORMAT_TYPES\n }) {\n ptb = this.getPTB(target, typeArgs, args, argTypes, signer, withTransfer, ptb);\n return await this.getMoveCallBytesFromPTB(ptb, signer, gasOwner, format);\n }\n\n public static async getMoveCallBytesFromPTB(ptb: Transaction, signer: string, gasOwner?: string, format: FORMAT_TYPES = FORMAT_TYPES.hex) {\n ptb.setSender(signer)\n gasOwner ??= signer\n ptb.setGasOwner(gasOwner || signer)\n const bytes = await ptb.build({client: SuiClient.client, onlyTransactionKind: false});\n return toFormatType(format, bytes)\n }\n\n public static toBytes(bytes: Uint8Array | string) {\n if (typeof bytes === 'string') {\n return isHex(bytes) ? fromHex(bytes) : fromBase64(bytes)\n }\n return bytes\n }\n\n public static async getSignature(signatureOrKeypair: string | Keypair, bytes: Uint8Array) {\n if (typeof signatureOrKeypair !== 'string') {\n const signature = await signatureOrKeypair.signTransaction(bytes)\n return signature.signature\n }\n\n return isHex(signatureOrKeypair) ? hexToBase64(signatureOrKeypair) : signatureOrKeypair\n }\n\n public static async executeMoveCallBytes(\n bytes: Uint8Array | string,\n senderSignature: string | Keypair,\n gasOwnerSignature?: string | Keypair,\n ) {\n const transactionBlock = this.toBytes(bytes)\n senderSignature = await this.getSignature(senderSignature, transactionBlock)\n\n const signature = [senderSignature]\n if (gasOwnerSignature) {\n gasOwnerSignature = await this.getSignature(gasOwnerSignature, transactionBlock)\n signature.push(gasOwnerSignature)\n }\n const resp = await SuiClient.client.executeTransactionBlock({\n transactionBlock: toBase64(transactionBlock),\n signature,\n options: txOptions\n })\n const ptb = Transaction.from(toBase64(transactionBlock))\n return SuiClient.waitForTransaction(ptb, resp)\n }\n\n public static getPTB(\n target: string,\n typeArgs: string[] = [],\n args: any[] = [],\n argTypes: MoveType[] = [],\n signer?: string,\n withTransfer: boolean = false,\n ptb?: Transaction\n ) {\n ptb = ptb || new Transaction()\n const obj = ptb.moveCall({\n target,\n typeArguments: typeArgs,\n arguments: args.map((arg, i) => SuiClient.toMoveArg(ptb, arg, argTypes[i])),\n })\n\n if (withTransfer && signer) {\n ptb.transferObjects([obj], signer)\n }\n return ptb;\n }\n\n public static async public_transfer(objects: string[], from: Keypair, to: string) {\n const tx = new Transaction()\n tx.transferObjects(objects, to)\n return await SuiClient.signAndExecute(tx, from)\n }\n\n public static async devInspect(ptb: Transaction, sender: string) {\n return await SuiClient.client.devInspectTransactionBlock({\n transactionBlock: ptb,\n sender,\n })\n }\n\n public static async devInspectRaw(ptb: Transaction, sender: string) {\n const result = await this.devInspect(ptb, sender)\n return result.results?.[0].returnValues?.[0]?.[0]\n }\n\n public static async devInspectBool(ptb: Transaction, sender: string) {\n const result = await this.devInspectRaw(ptb, sender)\n return result && result[0] === 1\n }\n\n public static async devInspectU64(ptb: Transaction, sender: string) {\n const value = await this.devInspectRaw(ptb, sender)\n return BigInt(bcs.u64().parse(new Uint8Array(value!)))\n }\n\n public static async devInspectAddress(ptb: Transaction, sender: string) {\n const value = await this.devInspectRaw(ptb, sender)\n if (!value) {\n return undefined\n }\n const bytes = Uint8Array.from(value)\n return '0x' + Buffer.from(bytes).toString('hex')\n }\n\n public static async devInspectString(ptb: Transaction, sender: string) {\n const value = await this.devInspectRaw(ptb, sender)\n if (!value) {\n return ''\n }\n return bcs.string().parse(new Uint8Array(value!))\n }\n\n public static async getObject(id: string) {\n return SuiClient.client.getObject({\n id,\n options: {\n showContent: true,\n showType: true,\n showDisplay: true,\n showBcs: true,\n },\n })\n }\n\n public static async getObjectsByType(owner: string, type: string) {\n const res = await SuiClient.client.getOwnedObjects({\n owner,\n filter: {\n StructType: type,\n },\n })\n return res.data.map((o) => o.data?.objectId).filter((o) => o)\n }\n}\n","import { MoveType, SuiClient } from '../utils/sui_client'\nimport { Keypair } from '@mysten/sui/cryptography'\nimport { coinWithBalance, Transaction } from '@mysten/sui/transactions'\nimport {COIN_REGISTRY} from \"../config/config\";\n\nexport class Coin {\n public static get coinType(): string {\n throw new Error('`coinType` getter must be implemented !')\n }\n\n public static async getBalance(owner: string) {\n const result = await SuiClient.client.getBalance({\n owner,\n coinType: this.coinType,\n })\n return BigInt(result.totalBalance)\n }\n\n public static async getCoin(owner: Keypair, amount?: bigint): Promise<string> {\n const balance = amount || (await this.getBalance(owner.toSuiAddress()))\n const tx = new Transaction()\n const coinSplit = coinWithBalance({\n balance,\n useGasCoin: false,\n type: this.coinType,\n })\n tx.transferObjects([coinSplit], owner.toSuiAddress())\n const result = await SuiClient.signAndExecute(tx, owner)\n\n const coin = result.objectChanges?.find(\n (o) => o.type === 'created' && o.objectType === `0x2::coin::Coin<${this.coinType}>`\n )\n\n return (coin as any)?.objectId\n }\n\n public static async _mint(treasuryId: string, amount: bigint, minter: Keypair) {\n await SuiClient.moveCall({\n signer: minter,\n target: `0x2::coin::mint`,\n typeArgs: [this.coinType],\n args: [treasuryId, amount],\n argTypes: [MoveType.object, MoveType.u64],\n withTransfer: true,\n })\n }\n\n public static async finalizeRegistration(registrar: Keypair) {\n const currencies = await SuiClient.getObjectsByType(COIN_REGISTRY, `0x2::coin_registry::Currency<${this.coinType}>`)\n\n if (currencies.length === 0 || !currencies[0]) {\n throw new Error('The registrar does not own the currency, please pass the currency id.')\n }\n const currencyId = currencies[0]\n\n await SuiClient.moveCall({\n signer: registrar,\n target: `0x2::coin_registry::finalize_registration`,\n typeArgs: [this.coinType],\n args: [COIN_REGISTRY, currencyId],\n argTypes: [MoveType.object, MoveType.object],\n })\n }\n\n public static async send(amount: bigint, from: Keypair, to: string) {\n const coin = await this.getCoin(from, amount)\n const ptb = new Transaction()\n ptb.transferObjects([ptb.object(coin)], to)\n await SuiClient.signAndExecute(ptb, from)\n }\n\n public static async assertBalance(wallet: Keypair, amount: bigint | BigInt) {\n await expect(this.getBalance(wallet.toSuiAddress())).resolves.toBe(amount)\n }\n}\n","import { MoveType, SuiClient } from '../utils/sui_client'\nimport { Keypair } from '@mysten/sui/cryptography'\nimport { DENY_LIST_ID, Config } from '../config/config'\nimport { Coin } from './coin'\n\nexport class USDC extends Coin {\n public static get coinType(): string {\n return Config.vars.USDC_PACKAGE_ID + '::usdc::USDC'\n }\n\n private static async getMintCapId(admin: Keypair) {\n async function getMintCapFromChain() {\n const mintCapIds = await SuiClient.getObjectsByType(\n admin.toSuiAddress(),\n `${Config.vars.USDC_PACKAGE_ID}::treasury::MintCap`\n )\n return mintCapIds.pop()\n }\n\n let mintCapId = await getMintCapFromChain()\n\n if (!mintCapId) {\n await SuiClient.moveCall({\n signer: admin,\n target: `${Config.vars.USDC_PACKAGE_ID}::treasury::configure_new_controller`,\n typeArgs: [this.coinType],\n args: [Config.vars.USDC_TREASURY_CAP, admin.toSuiAddress(), admin.toSuiAddress()],\n argTypes: [MoveType.object, MoveType.address, MoveType.address],\n })\n mintCapId = await getMintCapFromChain()\n }\n\n return mintCapId\n }\n\n public static async faucet(amount: bigint, receiver: string, admin: Keypair) {\n const mintCapId = await this.getMintCapId(admin)\n\n await SuiClient.moveCall({\n signer: admin,\n target: `${Config.vars.USDC_PACKAGE_ID}::treasury::configure_minter`,\n typeArgs: [this.coinType],\n args: [Config.vars.USDC_TREASURY_CAP, DENY_LIST_ID, amount],\n argTypes: [MoveType.object, MoveType.object, MoveType.u64],\n })\n\n await SuiClient.moveCall({\n signer: admin,\n target: `${Config.vars.USDC_PACKAGE_ID}::treasury::mint`,\n typeArgs: [this.coinType],\n args: [Config.vars.USDC_TREASURY_CAP, mintCapId, DENY_LIST_ID, amount, receiver],\n argTypes: [\n MoveType.object,\n MoveType.object,\n MoveType.object,\n MoveType.u64,\n MoveType.address,\n ],\n })\n }\n}\n","import fs from 'fs'\nimport {\n SuiClient,\n SuiObjectChangeCreated,\n SuiObjectChangePublished,\n SuiTransactionBlockResponse,\n} from '@mysten/sui/client'\nimport { Keypair } from '@mysten/sui/cryptography'\nimport { ADMIN_KEYPAIR, Config } from '../config/config'\nimport { Transaction } from '@mysten/sui/transactions'\n\nimport { execSync } from 'child_process'\n\nexport class PublishSingleton {\n private static instance: PublishSingleton | null = null\n\n private constructor(private readonly publishResp: SuiTransactionBlockResponse) {}\n\n private static getPackagePath(packagePath?: string): string {\n packagePath ??= Config.vars.PACKAGE_PATH\n\n if (!packagePath) {\n throw new Error(\n 'You must set the `PACKAGE_PATH` environment variable to your Move.toml path.'\n )\n }\n\n return packagePath\n }\n\n public static async publish(signer?: Keypair, packagePath?: string) {\n signer ??= ADMIN_KEYPAIR!\n const _packagePath = this.getPackagePath(packagePath)\n\n if (!PublishSingleton.instance) {\n const publishResp = await PublishSingleton.publishPackage(signer, _packagePath)\n const packageId = this.findPublishedPackage(publishResp)?.packageId\n if (!packageId) {\n throw new Error('Expected to find package published')\n }\n // suiClientGen(packageId)\n PublishSingleton.instance = new PublishSingleton(publishResp)\n }\n }\n\n private static getInstance(): PublishSingleton {\n if (!PublishSingleton.instance) {\n throw new Error('Use `async PublishSingleton.publish()` first')\n }\n return PublishSingleton.instance\n }\n\n public static publishResponse(): SuiTransactionBlockResponse {\n return this.getInstance().publishResp\n }\n\n public static get packageId(): string {\n const packageChng = this.findPublishedPackage(this.publishResponse())\n if (!packageChng) {\n throw new Error('Expected to find package published')\n }\n return packageChng.packageId\n }\n\n public static findObjectIdByType(type: string, fail: boolean = true): string {\n const obj = this.findObjectChangeCreatedByType(this.publishResponse(), type)\n if (fail && !obj) {\n throw new Error(`Expected to find ${type} shared object created.`)\n }\n return obj?.objectId || ''\n }\n\n public static get upgradeCapId(): string {\n return this.findObjectIdByType(`0x2::package::UpgradeCap`)\n }\n\n public static get usdcTreasuryCap(): string {\n return this.findObjectIdByType(\n `${this.packageId}::treasury::Treasury<${this.packageId}::usdc::USDC>`,\n false\n )\n }\n\n static getPublishTx(packagePath: string, sender: string) {\n const transaction = new Transaction()\n\n if (!fs.existsSync(packagePath)) {\n throw new Error(`Package doesn't exist under: ${packagePath}`)\n }\n\n if (fs.existsSync(`${packagePath}/Move.lock`)) {\n fs.unlinkSync(`${packagePath}/Move.lock`)\n }\n fs.rmSync(`${packagePath}/build`, { recursive: true, force: true })\n const network = Config.vars.NETWORK\n\n const e = network === 'mainnet' ? 'mainnet' : 'testnet'\n let buildCommand = `sui move build -e ${e} --dump-bytecode-as-base64 --path ${packagePath}`\n if (network === 'localnet' || network === 'devnet' || network === 'testnet') { // TODO: remove testnet\n buildCommand += ' --with-unpublished-dependencies'\n }\n\n const { modules, dependencies } = JSON.parse(execSync(buildCommand, { encoding: 'utf-8' }))\n\n const upgradeCap = transaction.publish({\n modules,\n dependencies,\n })\n\n transaction.transferObjects([upgradeCap], sender)\n return transaction\n }\n\n static async getPublishBytes(signer?: string, packagePath?: string): Promise<string> {\n signer ??= ADMIN_KEYPAIR!.toSuiAddress()\n const _packagePath = this.getPackagePath(packagePath)\n const transaction = this.getPublishTx(_packagePath, signer)\n const client = new SuiClient({ url: Config.vars.RPC })\n const txBytes = await transaction.build({ client, onlyTransactionKind: true })\n return Buffer.from(txBytes).toString('base64')\n }\n\n static async publishPackage(\n signer: Keypair,\n packagePath: string\n ): Promise<SuiTransactionBlockResponse> {\n const transaction = this.getPublishTx(packagePath, signer.toSuiAddress())\n const client = new SuiClient({ url: Config.vars.RPC })\n const resp = await client.signAndExecuteTransaction({\n transaction,\n signer,\n options: {\n showObjectChanges: true,\n showEffects: true,\n },\n })\n if (resp.effects?.status.status !== 'success') {\n throw new Error(`Failure during publish transaction:\\n${JSON.stringify(resp, null, 2)}`)\n }\n await client.waitForTransaction({ digest: resp.digest })\n return resp\n }\n\n static findPublishedPackage(\n resp: SuiTransactionBlockResponse\n ): SuiObjectChangePublished | undefined {\n return resp.objectChanges?.find(\n (chng): chng is SuiObjectChangePublished => chng.type === 'published'\n )\n }\n\n static findObjectChangeCreatedByType(\n resp: SuiTransactionBlockResponse,\n type: string\n ): SuiObjectChangeCreated | undefined {\n return resp.objectChanges?.find(\n (chng): chng is SuiObjectChangeCreated =>\n chng.type === 'created' && chng.objectType === type\n )\n }\n}\n","import {ADMIN_KEYPAIR, BaseConfigVars, Config} from '../config/config'\nimport {PublishSingleton} from './publish'\n\nexport async function deploy<\n TConfig extends typeof Config = typeof Config,\n TConfigVars extends BaseConfigVars = BaseConfigVars\n>(\n ConfigClass: TConfig = Config as TConfig,\n packagePath?: string,\n): Promise<string> {\n const vars = ConfigClass.vars as TConfigVars\n await PublishSingleton.publish(ADMIN_KEYPAIR!, packagePath)\n\n const newConfig = {\n ...vars,\n PACKAGE_ID: PublishSingleton.packageId,\n UPGRADE_CAP_ID: PublishSingleton.upgradeCapId,\n } as TConfigVars\n\n if (PublishSingleton.usdcTreasuryCap) {\n newConfig.USDC_PACKAGE_ID = PublishSingleton.packageId\n newConfig.USDC_TREASURY_CAP = PublishSingleton.usdcTreasuryCap\n }\n\n // Process extra vars from Config.extraVars\n const extraVars = ConfigClass.extraVars\n if (extraVars && Object.keys(extraVars).length > 0) {\n for (const [key, typePattern] of Object.entries(extraVars)) {\n const type = typePattern.replace('{packageId}', PublishSingleton.packageId)\n // @ts-ignore - dynamically adding properties to config\n newConfig[key] = PublishSingleton.findObjectIdByType(type, true)\n }\n }\n\n ConfigClass.write(newConfig)\n\n return `Move contracts deployed successfully on ${vars.NETWORK} contract details have been stored in .env.${vars.NETWORK}`\n}\n\nexport async function getDeployBytes() {\n return await PublishSingleton.getPublishBytes()\n}\n","import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519'\nimport { requestSuiFromFaucetV2, getFaucetHost } from '@mysten/sui/faucet'\nimport { ADMIN_KEYPAIR, Config } from '../config/config'\nimport { SuiClient } from './sui_client'\nimport { USDC } from '../tokens/usdc'\n\nexport function createWallet() {\n return new Ed25519Keypair()\n}\n\nexport async function createFundedWallet(usdcAmount?: bigint) {\n const wallet = createWallet()\n await faucet(wallet.toSuiAddress())\n\n if (usdcAmount) {\n await USDC.faucet(usdcAmount, wallet.toSuiAddress(), ADMIN_KEYPAIR!)\n }\n\n return wallet\n}\n\nasync function faucet(address: string) {\n await requestSuiFromFaucetV2({\n host: getFaucetHost(Config.vars.NETWORK as 'localnet' | 'devnet'), // or 'devnet', 'localnet'\n recipient: address,\n })\n}\n\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nexport async function waitForNextEpoch(timeoutMs = 5 * 60 * 1000, pollIntervalMs = 2000) {\n const startEpoch = (await SuiClient.client.getLatestSuiSystemState()).epoch\n const startTime = Date.now()\n\n while (true) {\n const { epoch } = await SuiClient.client.getLatestSuiSystemState()\n if (Number(epoch) > Number(startEpoch)) {\n return epoch\n }\n\n if (Date.now() - startTime > timeoutMs) {\n throw new Error('Timeout waiting for next epoch.')\n }\n\n await sleep(pollIntervalMs)\n }\n}\n","import {bcs} from \"@mysten/sui/bcs\";\nimport {deriveObjectID as doi} from \"@mysten/sui/utils\";\n\nexport function deriveObjectId(\n parentId: string,\n module: string,\n key: string,\n packageId: string,\n type?: string,\n serializedBcs?: any\n) {\n serializedBcs ??= bcs.struct(key, { dummy_value: bcs.bool() }).serialize({ dummy_value: false })\n const keyU8 = serializedBcs.toBytes();\n let typeTag = `${packageId}::${module}::${key}`\n if (type) {\n typeTag += `<${type}>`\n }\n return doi(parentId, typeTag, keyU8)\n}"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/keypair.ts","../src/config/static.ts","../src/config/config.ts","../src/utils/cost_analyzer.ts","../src/utils/byte_utils.ts","../src/utils/sui_client.ts","../src/tokens/coin.ts","../src/tokens/usdc.ts","../src/utils/publish.ts","../src/utils/deploy.ts","../src/utils/test_utils.ts","../src/utils/derived_objects.ts"],"names":["fs","fs2","MoveType","SC","fromHex","fromBase64","toBase64","Transaction","Ed25519Keypair","bcs","doi"],"mappings":"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","file":"index.mjs","sourcesContent":["import { decodeSuiPrivateKey, Keypair } from '@mysten/sui/cryptography'\nimport { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519'\nimport { Secp256k1Keypair } from '@mysten/sui/keypairs/secp256k1'\nimport { Secp256r1Keypair } from '@mysten/sui/keypairs/secp256r1'\n\nexport function getKeypair(privkey: string): Keypair {\n const parsed = decodeSuiPrivateKey(privkey)\n\n switch (parsed.scheme) {\n case 'ED25519': {\n return Ed25519Keypair.fromSecretKey(parsed.secretKey)\n }\n case 'Secp256k1': {\n return Secp256k1Keypair.fromSecretKey(parsed.secretKey)\n }\n case 'Secp256r1': {\n return Secp256r1Keypair.fromSecretKey(parsed.secretKey)\n }\n default:\n throw new Error(`Key scheme ${parsed.schema} not supported`)\n }\n}\n","export type Network = 'mainnet' | 'testnet' | 'devnet' | 'localnet'\n\ninterface StaticConfig {\n CHAIN_ID: string\n USDC_PACKAGE_ID?: string\n}\n\nexport const STATIC_CONFIGS: Record<Network, StaticConfig> = {\n localnet: {\n CHAIN_ID: 'd07607dc',\n },\n devnet: {\n CHAIN_ID: '4c78adac',\n },\n testnet: {\n CHAIN_ID: '4c78adac',\n USDC_PACKAGE_ID: '0xa1ec7fc00a6f40db9693ad1415d0c193ad3906494428cf252621037bd7117e29',\n },\n mainnet: {\n CHAIN_ID: '35834a8a',\n USDC_PACKAGE_ID: '0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7',\n },\n}\n","import path from 'path'\nimport fs from 'fs'\nimport dotenv from 'dotenv'\nimport { Keypair } from '@mysten/sui/cryptography'\nimport { getFullnodeUrl } from '@mysten/sui/client'\nimport { getKeypair } from '../utils/keypair'\nimport { STATIC_CONFIGS, Network } from './static'\nimport {SUI_CLOCK_OBJECT_ID} from \"@mysten/sui/utils\";\ndotenv.config({ path: path.resolve(process.cwd(), '.env'), quiet: true })\n\nexport const DENY_LIST_ID = '0x403'\nexport const CLOCK_ID = SUI_CLOCK_OBJECT_ID\nexport const COIN_REGISTRY = '0x000000000000000000000000000000000000000000000000000000000000000c'\n\n// Base configuration that the SDK provides\nexport interface BaseConfigVars {\n NETWORK: Network\n RPC: string\n PACKAGE_PATH: string\n PACKAGE_ID: string\n UPGRADE_CAP_ID: string\n USDC_PACKAGE_ID?: string\n USDC_TREASURY_CAP?: string\n}\n\n// Default ConfigVars is just the base, but projects can extend it\nexport type ConfigVars = BaseConfigVars\n\nexport const ADMIN_KEYPAIR: Keypair | undefined = process.env.ADMIN_PRIVATE_KEY ? getKeypair(process.env.ADMIN_PRIVATE_KEY) : undefined\n\n/**\n * Map of config keys to Move type patterns for finding object IDs during deployment\n * The type pattern can use {packageId} placeholder which will be replaced with the deployed package ID\n *\n * Example: { SETUP_AUTH: \"{packageId}::setup::SetupAuth\" }\n * Example: { TOKEN_TREASURY_CAP: \"{packageId}::treasury::Treasury<{packageId}::token::TOKEN>\" }\n */\nexport type ExtraVarsMap = Record<string, string>\n\n// Generic Config class that can be extended with custom types\nexport class Config<TConfigVars extends BaseConfigVars = ConfigVars> {\n private static instance: Config | null = null\n\n private static getInstance(): Config {\n if (!Config.instance) {\n this.instance = new Config()\n }\n return this.instance!\n }\n\n get env(): Network {\n let env = process.env.NETWORK\n if (!['mainnet', 'testnet', 'devnet', 'localnet'].includes(env || '')) {\n env = 'localnet'\n }\n return env as Network\n }\n\n /**\n * Override this getter in your custom Config class to define extra variables\n * that should be populated during deployment by finding objects by their Move types\n */\n static get extraVars(): ExtraVarsMap {\n return {}\n }\n\n static get vars(): BaseConfigVars {\n const instance = this.getInstance()\n const NETWORK = instance.env\n dotenv.config({ path: path.resolve(process.cwd(), `.env.${NETWORK}`), override: true, quiet: true })\n\n const envVars = {\n NETWORK,\n RPC: getFullnodeUrl(NETWORK),\n PACKAGE_PATH: process.env.PACKAGE_PATH || '',\n PACKAGE_ID: process.env.PACKAGE_ID || '',\n UPGRADE_CAP_ID: process.env.UPGRADE_CAP_ID || '',\n USDC_TREASURY_CAP: process.env.USDC_TREASURY_CAP,\n USDC_PACKAGE_ID: process.env.USDC_PACKAGE_ID,\n }\n\n const staticVars = STATIC_CONFIGS[NETWORK] || {}\n\n return {\n ...staticVars,\n ...envVars,\n }\n }\n\n static write<T extends BaseConfigVars>(config: T): string {\n const instance = this.getInstance()\n const env = instance.env\n const envFile = path.join(process.cwd(), `.env${env ? `.${env}` : ''}`)\n\n const envVariables = Object.entries(config)\n .filter(([_, value]) => value)\n .map(([key, value]) => `${key}=${value}`)\n .join('\\n')\n\n fs.writeFileSync(envFile, envVariables, 'utf8')\n return envFile\n }\n}\n","import * as fs from 'fs'\nimport { Transaction } from '@mysten/sui/transactions'\nimport { SuiTransactionBlockResponse } from '@mysten/sui/client'\nimport { Config } from '../config/config'\n\nconst COST_ANALYSIS_FILE = './gas_cost_estimation.csv'\nconst HEADERS = [\n 'environment',\n 'executedAt',\n 'digest',\n 'packageId',\n 'call',\n 'computationCost',\n 'storageCost',\n 'storageRebate',\n 'nonRefundableStorageFee',\n 'gasSpent',\n]\n\nexport function analyze_cost(ptb: Transaction, resp: SuiTransactionBlockResponse) {\n if (!process.env.COST_ANALYZER_ENABLED) {\n return\n }\n if (!fs.existsSync(COST_ANALYSIS_FILE)) {\n fs.writeFileSync(COST_ANALYSIS_FILE, HEADERS.join(',') + '\\n')\n }\n\n const columns: any = [Config.vars.NETWORK, Date.now(), resp.digest]\n\n const moveCalls = ptb.blockData.transactions.filter((txItem) => txItem.kind === 'MoveCall')\n const moveCall = moveCalls.pop()\n if (!moveCall?.target) {\n return\n }\n const splits = moveCall.target.split('::')\n columns.push(splits[0])\n columns.push(`${splits[1]}::${splits[2]}`)\n\n const gasUsed = resp.effects?.gasUsed\n columns.push(gasUsed?.computationCost || 'N/A')\n columns.push(gasUsed?.storageCost || 'N/A')\n columns.push(gasUsed?.storageRebate || 'N/A')\n columns.push(gasUsed?.nonRefundableStorageFee || 'N/A')\n\n const totalGasCost = BigInt(gasUsed?.computationCost || 0) + BigInt(gasUsed?.storageCost || 0)\n const gasSpent = totalGasCost - BigInt(gasUsed?.storageRebate || 0)\n columns.push(gasSpent)\n\n fs.appendFileSync(COST_ANALYSIS_FILE, columns.join(',') + '\\n')\n}\n","import {\n toBase64,\n toHex,\n fromHex,\n fromBase64\n} from \"@mysten/sui/utils\";\n\nexport enum FORMAT_TYPES {\n hex = 1,\n base64,\n}\n\nexport function toFormatType(type: FORMAT_TYPES, bytes: Uint8Array<ArrayBuffer>) {\n switch (type) {\n case FORMAT_TYPES.base64:\n return toBase64(bytes)\n case FORMAT_TYPES.hex:\n return toHex(bytes)\n default:\n throw \"The FORMAT_TYPES must be one of hex or base64\"\n }\n}\n\nexport function isHex(str: string): boolean {\n // Must be even length and only hex chars\n return /^[0-9a-fA-F]+$/.test(str) && str.length % 2 === 0;\n}\n\nexport function hexToBase64(hex: string) {\n return toBase64(fromHex(hex))\n}\n\nexport function base64toHex(base64: string) {\n return toHex(fromBase64(base64))\n}","import { SuiClient as SC } from '@mysten/sui/client'\nimport { toBase64, fromBase64, fromHex } from '@mysten/sui/utils'\nimport { Config } from '../config/config'\nimport { Transaction } from '@mysten/sui/transactions'\nimport { Keypair } from '@mysten/sui/cryptography'\nimport { bcs } from '@mysten/sui/bcs'\nimport { analyze_cost } from './cost_analyzer'\nimport type {SuiTransactionBlockResponse} from \"@mysten/sui/jsonRpc\";\nimport {FORMAT_TYPES, hexToBase64, isHex, toFormatType} from \"./byte_utils\";\n\nexport enum MoveType {\n u8 = 1,\n u16,\n u32,\n u64,\n u128,\n u256,\n bool,\n string,\n string_opt,\n object,\n address,\n address_opt,\n vec_address,\n vec_u64,\n}\n\nconst txOptions = {\n showEffects: true,\n showObjectChanges: true,\n showBalanceChanges: true,\n}\n\nexport class SuiClient {\n private static instance: SuiClient | null = null\n private client: SC\n\n private constructor() {\n this.client = new SC({ url: Config.vars.RPC })\n }\n\n private static getInstance(): SuiClient {\n if (!SuiClient.instance) {\n this.instance = new SuiClient()\n }\n return this.instance!\n }\n\n public static get client(): SC {\n return this.getInstance().client\n }\n\n private static async waitForTransaction(\n ptb: Transaction,\n resp: SuiTransactionBlockResponse,\n ) {\n await SuiClient.client.waitForTransaction({ digest: resp.digest })\n if (resp.effects?.status.status !== 'success') {\n throw new Error(JSON.stringify(resp))\n }\n analyze_cost(ptb, resp)\n return resp\n }\n\n public static async signAndExecute(\n ptb: Transaction,\n signer: Keypair,\n ) {\n const resp = await SuiClient.client.signAndExecuteTransaction({\n transaction: ptb,\n signer,\n options: txOptions,\n })\n return SuiClient.waitForTransaction(ptb, resp)\n }\n\n public static toMoveArg(ptb: Transaction, value: any, type?: MoveType) {\n if (typeof value === 'object' && !Array.isArray(value)) {\n return value\n }\n\n if (!type) {\n if (typeof value === 'string') {\n if (value.startsWith('0x')) {\n type = MoveType.object\n } else {\n type = MoveType.string\n }\n } else if (typeof value === 'boolean') {\n type = MoveType.bool\n } else if (typeof value === 'number' || typeof value === 'bigint') {\n type = MoveType.u64\n }\n }\n\n const factory = {\n [MoveType.u8]: (v: any) => ptb.pure.u8(v),\n [MoveType.u16]: (v: any) => ptb.pure.u16(v),\n [MoveType.u32]: (v: any) => ptb.pure.u32(v),\n [MoveType.u64]: (v: any) => ptb.pure.u64(v),\n [MoveType.u128]: (v: any) => ptb.pure.u128(v),\n [MoveType.u256]: (v: any) => ptb.pure.u256(v),\n [MoveType.bool]: (v: any) => ptb.pure.bool(v),\n [MoveType.string]: (v: any) => ptb.pure.string(v),\n [MoveType.string_opt]: (v: any) => ptb.pure.option('string', v),\n [MoveType.object]: (v: any) => ptb.object(v),\n [MoveType.address]: (v: any) => ptb.pure.address(v),\n [MoveType.address_opt]: (v: any) => ptb.pure.option('address', v),\n [MoveType.vec_address]: (v: any) => ptb.pure.vector('address', v),\n [MoveType.vec_u64]: (v: any) => ptb.pure.vector('u64', v),\n }\n\n return factory[type!](value)\n }\n\n public static async moveCall({\n signer,\n target,\n typeArgs = [],\n args = [],\n argTypes = [],\n ptb,\n withTransfer = false,\n }: {\n signer: Keypair\n target: string\n typeArgs?: string[]\n args?: any[]\n argTypes?: MoveType[]\n ptb?: Transaction\n withTransfer?: boolean\n }) {\n ptb = this.getPTB(target, typeArgs, args, argTypes, signer.toSuiAddress(), withTransfer, ptb);\n\n return SuiClient.signAndExecute(ptb, signer)\n }\n\n public static async getMoveCallBytes({\n signer,\n target,\n typeArgs = [],\n args = [],\n argTypes = [],\n ptb,\n withTransfer = false,\n gasOwner,\n format = FORMAT_TYPES.hex\n }: {\n signer: string\n target: string\n typeArgs?: string[]\n args?: any[]\n argTypes?: MoveType[]\n ptb?: Transaction\n withTransfer?: boolean\n gasOwner?: string\n format?: FORMAT_TYPES\n }) {\n ptb = this.getPTB(target, typeArgs, args, argTypes, signer, withTransfer, ptb);\n return await this.getMoveCallBytesFromPTB(ptb, signer, gasOwner, format);\n }\n\n public static async getMoveCallBytesFromPTB(ptb: Transaction, signer: string, gasOwner?: string, format: FORMAT_TYPES = FORMAT_TYPES.hex) {\n ptb.setSender(signer)\n gasOwner ??= signer\n ptb.setGasOwner(gasOwner || signer)\n const bytes = await ptb.build({client: SuiClient.client, onlyTransactionKind: false});\n return toFormatType(format, bytes)\n }\n\n public static toBytes(bytes: Uint8Array | string) {\n if (typeof bytes === 'string') {\n return isHex(bytes) ? fromHex(bytes) : fromBase64(bytes)\n }\n return bytes\n }\n\n public static async getSignature(signatureOrKeypair: string | Keypair, bytes: Uint8Array) {\n if (typeof signatureOrKeypair !== 'string') {\n const signature = await signatureOrKeypair.signTransaction(bytes)\n return signature.signature\n }\n\n return isHex(signatureOrKeypair) ? hexToBase64(signatureOrKeypair) : signatureOrKeypair\n }\n\n public static async executeMoveCallBytes(\n bytes: Uint8Array | string,\n senderSignature: string | Keypair,\n gasOwnerSignature?: string | Keypair,\n ) {\n const transactionBlock = this.toBytes(bytes)\n senderSignature = await this.getSignature(senderSignature, transactionBlock)\n\n const signature = [senderSignature]\n if (gasOwnerSignature) {\n gasOwnerSignature = await this.getSignature(gasOwnerSignature, transactionBlock)\n signature.push(gasOwnerSignature)\n }\n const resp = await SuiClient.client.executeTransactionBlock({\n transactionBlock: toBase64(transactionBlock),\n signature,\n options: txOptions\n })\n const ptb = Transaction.from(toBase64(transactionBlock))\n return SuiClient.waitForTransaction(ptb, resp)\n }\n\n public static getPTB(\n target: string,\n typeArgs: string[] = [],\n args: any[] = [],\n argTypes: MoveType[] = [],\n signer?: string,\n withTransfer: boolean = false,\n ptb?: Transaction\n ) {\n ptb = ptb || new Transaction()\n const obj = ptb.moveCall({\n target,\n typeArguments: typeArgs,\n arguments: args.map((arg, i) => SuiClient.toMoveArg(ptb, arg, argTypes[i])),\n })\n\n if (withTransfer && signer) {\n ptb.transferObjects([obj], signer)\n }\n return ptb;\n }\n\n public static async public_transfer(objects: string[], from: Keypair, to: string) {\n const tx = new Transaction()\n tx.transferObjects(objects, to)\n return await SuiClient.signAndExecute(tx, from)\n }\n\n public static async devInspect(ptb: Transaction, sender: string) {\n return await SuiClient.client.devInspectTransactionBlock({\n transactionBlock: ptb,\n sender,\n })\n }\n\n public static async devInspectRaw(ptb: Transaction, sender: string) {\n const result = await this.devInspect(ptb, sender)\n return result.results?.[0].returnValues?.[0]?.[0]\n }\n\n public static async devInspectBool(ptb: Transaction, sender: string) {\n const result = await this.devInspectRaw(ptb, sender)\n return result && result[0] === 1\n }\n\n public static async devInspectU64(ptb: Transaction, sender: string) {\n const value = await this.devInspectRaw(ptb, sender)\n return BigInt(bcs.u64().parse(new Uint8Array(value!)))\n }\n\n public static async devInspectAddress(ptb: Transaction, sender: string) {\n const value = await this.devInspectRaw(ptb, sender)\n if (!value) {\n return undefined\n }\n const bytes = Uint8Array.from(value)\n return '0x' + Buffer.from(bytes).toString('hex')\n }\n\n public static async devInspectString(ptb: Transaction, sender: string) {\n const value = await this.devInspectRaw(ptb, sender)\n if (!value) {\n return ''\n }\n return bcs.string().parse(new Uint8Array(value!))\n }\n\n public static async getObject(id: string) {\n return SuiClient.client.getObject({\n id,\n options: {\n showContent: true,\n showType: true,\n showDisplay: true,\n showBcs: true,\n },\n })\n }\n\n public static async getObjectsByType(owner: string, type: string) {\n const res = await SuiClient.client.getOwnedObjects({\n owner,\n filter: {\n StructType: type,\n },\n })\n return res.data.map((o) => o.data?.objectId).filter((o) => o)\n }\n}\n","import { MoveType, SuiClient } from '../utils/sui_client'\nimport { Keypair } from '@mysten/sui/cryptography'\nimport { coinWithBalance, Transaction } from '@mysten/sui/transactions'\nimport {COIN_REGISTRY} from \"../config/config\";\n\nexport class Coin {\n public static get coinType(): string {\n throw new Error('`coinType` getter must be implemented !')\n }\n\n public static async getBalance(owner: string) {\n const result = await SuiClient.client.getBalance({\n owner,\n coinType: this.coinType,\n })\n return BigInt(result.totalBalance)\n }\n\n public static async getCoin(owner: Keypair, amount?: bigint): Promise<string> {\n const balance = amount || (await this.getBalance(owner.toSuiAddress()))\n const tx = new Transaction()\n const coinSplit = coinWithBalance({\n balance,\n useGasCoin: false,\n type: this.coinType,\n })\n tx.transferObjects([coinSplit], owner.toSuiAddress())\n const result = await SuiClient.signAndExecute(tx, owner)\n\n const coin = result.objectChanges?.find(\n (o) => o.type === 'created' && o.objectType === `0x2::coin::Coin<${this.coinType}>`\n )\n\n return (coin as any)?.objectId\n }\n\n public static async _mint(treasuryId: string, amount: bigint, minter: Keypair) {\n await SuiClient.moveCall({\n signer: minter,\n target: `0x2::coin::mint`,\n typeArgs: [this.coinType],\n args: [treasuryId, amount],\n argTypes: [MoveType.object, MoveType.u64],\n withTransfer: true,\n })\n }\n\n public static async finalizeRegistration(registrar: Keypair) {\n const currencies = await SuiClient.getObjectsByType(COIN_REGISTRY, `0x2::coin_registry::Currency<${this.coinType}>`)\n\n if (currencies.length === 0 || !currencies[0]) {\n throw new Error('The registrar does not own the currency, please pass the currency id.')\n }\n const currencyId = currencies[0]\n\n await SuiClient.moveCall({\n signer: registrar,\n target: `0x2::coin_registry::finalize_registration`,\n typeArgs: [this.coinType],\n args: [COIN_REGISTRY, currencyId],\n argTypes: [MoveType.object, MoveType.object],\n })\n }\n\n public static async send(amount: bigint, from: Keypair, to: string) {\n const coin = await this.getCoin(from, amount)\n const ptb = new Transaction()\n ptb.transferObjects([ptb.object(coin)], to)\n await SuiClient.signAndExecute(ptb, from)\n }\n\n public static async assertBalance(wallet: Keypair, amount: bigint | BigInt) {\n await expect(this.getBalance(wallet.toSuiAddress())).resolves.toBe(amount)\n }\n}\n","import { MoveType, SuiClient } from '../utils/sui_client'\nimport { Keypair } from '@mysten/sui/cryptography'\nimport { DENY_LIST_ID, Config } from '../config/config'\nimport { Coin } from './coin'\n\nexport class USDC extends Coin {\n public static get coinType(): string {\n return Config.vars.USDC_PACKAGE_ID + '::usdc::USDC'\n }\n\n private static async getMintCapId(admin: Keypair) {\n async function getMintCapFromChain() {\n const mintCapIds = await SuiClient.getObjectsByType(\n admin.toSuiAddress(),\n `${Config.vars.USDC_PACKAGE_ID}::treasury::MintCap`\n )\n return mintCapIds.pop()\n }\n\n let mintCapId = await getMintCapFromChain()\n\n if (!mintCapId) {\n await SuiClient.moveCall({\n signer: admin,\n target: `${Config.vars.USDC_PACKAGE_ID}::treasury::configure_new_controller`,\n typeArgs: [this.coinType],\n args: [Config.vars.USDC_TREASURY_CAP, admin.toSuiAddress(), admin.toSuiAddress()],\n argTypes: [MoveType.object, MoveType.address, MoveType.address],\n })\n mintCapId = await getMintCapFromChain()\n }\n\n return mintCapId\n }\n\n public static async faucet(amount: bigint, receiver: string, admin: Keypair) {\n const mintCapId = await this.getMintCapId(admin)\n\n await SuiClient.moveCall({\n signer: admin,\n target: `${Config.vars.USDC_PACKAGE_ID}::treasury::configure_minter`,\n typeArgs: [this.coinType],\n args: [Config.vars.USDC_TREASURY_CAP, DENY_LIST_ID, amount],\n argTypes: [MoveType.object, MoveType.object, MoveType.u64],\n })\n\n await SuiClient.moveCall({\n signer: admin,\n target: `${Config.vars.USDC_PACKAGE_ID}::treasury::mint`,\n typeArgs: [this.coinType],\n args: [Config.vars.USDC_TREASURY_CAP, mintCapId, DENY_LIST_ID, amount, receiver],\n argTypes: [\n MoveType.object,\n MoveType.object,\n MoveType.object,\n MoveType.u64,\n MoveType.address,\n ],\n })\n }\n}\n","import fs from 'fs'\nimport {\n SuiObjectChangeCreated,\n SuiObjectChangePublished,\n SuiTransactionBlockResponse,\n} from '@mysten/sui/client'\nimport { Keypair } from '@mysten/sui/cryptography'\nimport { ADMIN_KEYPAIR, Config } from '../config/config'\n\nimport { execSync } from 'child_process'\n\nexport class PublishSingleton {\n private static instance: PublishSingleton | null = null\n\n private constructor(private readonly publishResp: SuiTransactionBlockResponse) {}\n\n private static getPackagePath(packagePath?: string): string {\n packagePath ??= Config.vars.PACKAGE_PATH\n\n if (!packagePath) {\n throw new Error(\n 'You must set the `PACKAGE_PATH` environment variable to your Move.toml path.'\n )\n }\n\n return packagePath\n }\n\n public static async publish(signer?: Keypair, packagePath?: string) {\n signer ??= ADMIN_KEYPAIR!\n const _packagePath = this.getPackagePath(packagePath)\n\n if (!PublishSingleton.instance) {\n const publishResp = await PublishSingleton.publishPackage(signer, _packagePath)\n const packageId = this.findPublishedPackage(publishResp)?.packageId\n if (!packageId) {\n throw new Error('Expected to find package published')\n }\n // suiClientGen(packageId)\n PublishSingleton.instance = new PublishSingleton(publishResp)\n }\n }\n\n private static getInstance(): PublishSingleton {\n if (!PublishSingleton.instance) {\n throw new Error('Use `async PublishSingleton.publish()` first')\n }\n return PublishSingleton.instance\n }\n\n public static publishResponse(): SuiTransactionBlockResponse {\n return this.getInstance().publishResp\n }\n\n public static get packageId(): string {\n const packageChng = this.findPublishedPackage(this.publishResponse())\n if (!packageChng) {\n throw new Error('Expected to find package published')\n }\n return packageChng.packageId\n }\n\n public static findObjectIdByType(type: string, fail: boolean = true): string {\n const obj = this.findObjectChangeCreatedByType(this.publishResponse(), type)\n if (fail && !obj) {\n throw new Error(`Expected to find ${type} shared object created.`)\n }\n return obj?.objectId || ''\n }\n\n public static get upgradeCapId(): string {\n return this.findObjectIdByType(`0x2::package::UpgradeCap`)\n }\n\n public static get usdcTreasuryCap(): string {\n return this.findObjectIdByType(\n `${this.packageId}::treasury::Treasury<${this.packageId}::usdc::USDC>`,\n false\n )\n }\n\n private static getPublishCmd(packagePath: string, sender: string, inBytes: boolean = false) {\n const network = Config.vars.NETWORK\n\n if (!fs.existsSync(packagePath)) {\n throw new Error(`Package doesn't exist under: ${packagePath}`)\n }\n\n if (fs.existsSync(`${packagePath}/Move.lock`)) {\n fs.unlinkSync(`${packagePath}/Move.lock`)\n }\n\n if (fs.existsSync(`Pub.${network}.toml`)) {\n fs.unlinkSync(`Pub.${network}.toml`)\n }\n fs.rmSync(`${packagePath}/build`, { recursive: true, force: true })\n\n const isEphemeralChain = network !== 'mainnet' && network !== 'testnet'\n const publishCmd = isEphemeralChain ? `test-publish --build-env testnet` : 'publish'\n\n let buildCommand = `sui client ${publishCmd} ${packagePath}`\n\n if (network === 'localnet' || network === 'devnet') {\n buildCommand += ' --with-unpublished-dependencies'\n }\n\n buildCommand += inBytes ? ' --serialize-unsigned-transaction' : ' --json'\n\n return buildCommand\n }\n\n static async getPublishBytes(signer?: string, packagePath?: string): Promise<string> {\n signer ??= ADMIN_KEYPAIR!.toSuiAddress()\n const _packagePath = this.getPackagePath(packagePath)\n const cmd = this.getPublishCmd(_packagePath, signer, true)\n return execSync(cmd, { encoding: 'utf-8' }).trim()\n }\n\n static async publishPackage(\n signer: Keypair,\n packagePath: string\n ): Promise<SuiTransactionBlockResponse> {\n const cmd = this.getPublishCmd(packagePath, signer.toSuiAddress())\n const res = execSync(cmd, { encoding: 'utf-8' })\n const match = res.match(/\\{[\\s\\S]*\\}/);\n if (!match) {\n throw new Error(`No JSON found in the publish command output: ${res}`);\n }\n return JSON.parse(match[0])\n }\n\n static findPublishedPackage(\n resp: SuiTransactionBlockResponse\n ): SuiObjectChangePublished | undefined {\n return resp.objectChanges?.find(\n (chng): chng is SuiObjectChangePublished => chng.type === 'published'\n )\n }\n\n static findObjectChangeCreatedByType(\n resp: SuiTransactionBlockResponse,\n type: string\n ): SuiObjectChangeCreated | undefined {\n return resp.objectChanges?.find(\n (chng): chng is SuiObjectChangeCreated =>\n chng.type === 'created' && chng.objectType === type\n )\n }\n}\n","import {ADMIN_KEYPAIR, BaseConfigVars, Config} from '../config/config'\nimport {PublishSingleton} from './publish'\n\nexport async function deploy<\n TConfig extends typeof Config = typeof Config,\n TConfigVars extends BaseConfigVars = BaseConfigVars\n>(\n ConfigClass: TConfig = Config as TConfig,\n packagePath?: string,\n): Promise<string> {\n const vars = ConfigClass.vars as TConfigVars\n await PublishSingleton.publish(ADMIN_KEYPAIR!, packagePath)\n\n const newConfig = {\n ...vars,\n PACKAGE_ID: PublishSingleton.packageId,\n UPGRADE_CAP_ID: PublishSingleton.upgradeCapId,\n } as TConfigVars\n\n if (PublishSingleton.usdcTreasuryCap) {\n newConfig.USDC_PACKAGE_ID = PublishSingleton.packageId\n newConfig.USDC_TREASURY_CAP = PublishSingleton.usdcTreasuryCap\n }\n\n // Process extra vars from Config.extraVars\n const extraVars = ConfigClass.extraVars\n if (extraVars && Object.keys(extraVars).length > 0) {\n for (const [key, typePattern] of Object.entries(extraVars)) {\n const type = typePattern.replace('{packageId}', PublishSingleton.packageId)\n // @ts-ignore - dynamically adding properties to config\n newConfig[key] = PublishSingleton.findObjectIdByType(type, true)\n }\n }\n\n ConfigClass.write(newConfig)\n\n return `Move contracts deployed successfully on ${vars.NETWORK} contract details have been stored in .env.${vars.NETWORK}`\n}\n\nexport async function getDeployBytes() {\n return await PublishSingleton.getPublishBytes()\n}\n","import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519'\nimport { requestSuiFromFaucetV2, getFaucetHost } from '@mysten/sui/faucet'\nimport { ADMIN_KEYPAIR, Config } from '../config/config'\nimport { SuiClient } from './sui_client'\nimport { USDC } from '../tokens/usdc'\n\nexport function createWallet() {\n return new Ed25519Keypair()\n}\n\nexport async function createFundedWallet(usdcAmount?: bigint) {\n const wallet = createWallet()\n await faucet(wallet.toSuiAddress())\n\n if (usdcAmount) {\n await USDC.faucet(usdcAmount, wallet.toSuiAddress(), ADMIN_KEYPAIR!)\n }\n\n return wallet\n}\n\nasync function faucet(address: string) {\n await requestSuiFromFaucetV2({\n host: getFaucetHost(Config.vars.NETWORK as 'localnet' | 'devnet'), // or 'devnet', 'localnet'\n recipient: address,\n })\n}\n\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nexport async function waitForNextEpoch(timeoutMs = 5 * 60 * 1000, pollIntervalMs = 2000) {\n const startEpoch = (await SuiClient.client.getLatestSuiSystemState()).epoch\n const startTime = Date.now()\n\n while (true) {\n const { epoch } = await SuiClient.client.getLatestSuiSystemState()\n if (Number(epoch) > Number(startEpoch)) {\n return epoch\n }\n\n if (Date.now() - startTime > timeoutMs) {\n throw new Error('Timeout waiting for next epoch.')\n }\n\n await sleep(pollIntervalMs)\n }\n}\n","import {bcs} from \"@mysten/sui/bcs\";\nimport {deriveObjectID as doi} from \"@mysten/sui/utils\";\n\nexport function deriveObjectId(\n parentId: string,\n module: string,\n key: string,\n packageId: string,\n type?: string,\n serializedBcs?: any\n) {\n serializedBcs ??= bcs.struct(key, { dummy_value: bcs.bool() }).serialize({ dummy_value: false })\n const keyU8 = serializedBcs.toBytes();\n let typeTag = `${packageId}::${module}::${key}`\n if (type) {\n typeTag += `<${type}>`\n }\n return doi(parentId, typeTag, keyU8)\n}"]}
|