@easysui/sdk 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -7,7 +7,7 @@ import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';
7
7
  declare const DENY_LIST_ID = "0x403";
8
8
  declare const CLOCK_ID = "0x6";
9
9
  type Network = 'mainnet' | 'testnet' | 'devnet' | 'localnet';
10
- interface ConfigVars {
10
+ interface BaseConfigVars {
11
11
  NETWORK: Network;
12
12
  RPC: string;
13
13
  PACKAGE_PATH: string;
@@ -16,13 +16,16 @@ interface ConfigVars {
16
16
  USDC_PACKAGE_ID?: string;
17
17
  USDC_TREASURY_CAP?: string;
18
18
  }
19
+ type ConfigVars = BaseConfigVars;
19
20
  declare const ADMIN_KEYPAIR: Keypair;
20
- declare class Config {
21
+ type ExtraVarsMap = Record<string, string>;
22
+ declare class Config<TConfigVars extends BaseConfigVars = ConfigVars> {
21
23
  private static instance;
22
24
  private static getInstance;
23
25
  get env(): Network;
24
- static get vars(): ConfigVars;
25
- static write(config: ConfigVars): string;
26
+ static get extraVars(): ExtraVarsMap;
27
+ static get vars(): BaseConfigVars;
28
+ static write<T extends BaseConfigVars>(config: T): string;
26
29
  }
27
30
 
28
31
  declare const STATIC_CONFIGS: any;
@@ -44,7 +47,7 @@ declare class USDC extends Coin {
44
47
 
45
48
  declare function analyze_cost(ptb: Transaction, resp: SuiTransactionBlockResponse): void;
46
49
 
47
- declare function deploy(vars?: ConfigVars): Promise<string>;
50
+ declare function deploy<TConfig extends typeof Config = typeof Config, TConfigVars extends BaseConfigVars = BaseConfigVars>(ConfigClass?: TConfig): Promise<string>;
48
51
  declare function getDeployBytes(): Promise<string>;
49
52
 
50
53
  declare function getKeypair(privkey: string): Keypair;
@@ -58,7 +61,7 @@ declare class PublishSingleton {
58
61
  private static getInstance;
59
62
  static publishResponse(): SuiTransactionBlockResponse;
60
63
  static get packageId(): string;
61
- private static findObjectIdByType;
64
+ static findObjectIdByType(type: string, fail?: boolean): string;
62
65
  static get upgradeCapId(): string;
63
66
  static get usdcTreasuryCap(): string;
64
67
  static getPublishTx(packagePath: string, signer: Keypair): Transaction;
@@ -115,4 +118,4 @@ declare function createFundedWallet(usdcAmount?: bigint): Promise<Ed25519Keypair
115
118
  declare function sleep(ms: number): Promise<void>;
116
119
  declare function waitForNextEpoch(timeoutMs?: number, pollIntervalMs?: number): Promise<string>;
117
120
 
118
- export { ADMIN_KEYPAIR, CLOCK_ID, Coin, Config, type ConfigVars, DENY_LIST_ID, MoveType, PublishSingleton, STATIC_CONFIGS, SuiClient, USDC, analyze_cost, createFundedWallet, createWallet, deploy, getDeployBytes, getKeypair, sleep, waitForNextEpoch };
121
+ export { ADMIN_KEYPAIR, type BaseConfigVars, CLOCK_ID, Coin, Config, type ConfigVars, DENY_LIST_ID, type ExtraVarsMap, MoveType, type Network, PublishSingleton, STATIC_CONFIGS, SuiClient, USDC, analyze_cost, createFundedWallet, createWallet, deploy, getDeployBytes, getKeypair, sleep, waitForNextEpoch };
package/dist/index.d.ts CHANGED
@@ -7,7 +7,7 @@ import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';
7
7
  declare const DENY_LIST_ID = "0x403";
8
8
  declare const CLOCK_ID = "0x6";
9
9
  type Network = 'mainnet' | 'testnet' | 'devnet' | 'localnet';
10
- interface ConfigVars {
10
+ interface BaseConfigVars {
11
11
  NETWORK: Network;
12
12
  RPC: string;
13
13
  PACKAGE_PATH: string;
@@ -16,13 +16,16 @@ interface ConfigVars {
16
16
  USDC_PACKAGE_ID?: string;
17
17
  USDC_TREASURY_CAP?: string;
18
18
  }
19
+ type ConfigVars = BaseConfigVars;
19
20
  declare const ADMIN_KEYPAIR: Keypair;
20
- declare class Config {
21
+ type ExtraVarsMap = Record<string, string>;
22
+ declare class Config<TConfigVars extends BaseConfigVars = ConfigVars> {
21
23
  private static instance;
22
24
  private static getInstance;
23
25
  get env(): Network;
24
- static get vars(): ConfigVars;
25
- static write(config: ConfigVars): string;
26
+ static get extraVars(): ExtraVarsMap;
27
+ static get vars(): BaseConfigVars;
28
+ static write<T extends BaseConfigVars>(config: T): string;
26
29
  }
27
30
 
28
31
  declare const STATIC_CONFIGS: any;
@@ -44,7 +47,7 @@ declare class USDC extends Coin {
44
47
 
45
48
  declare function analyze_cost(ptb: Transaction, resp: SuiTransactionBlockResponse): void;
46
49
 
47
- declare function deploy(vars?: ConfigVars): Promise<string>;
50
+ declare function deploy<TConfig extends typeof Config = typeof Config, TConfigVars extends BaseConfigVars = BaseConfigVars>(ConfigClass?: TConfig): Promise<string>;
48
51
  declare function getDeployBytes(): Promise<string>;
49
52
 
50
53
  declare function getKeypair(privkey: string): Keypair;
@@ -58,7 +61,7 @@ declare class PublishSingleton {
58
61
  private static getInstance;
59
62
  static publishResponse(): SuiTransactionBlockResponse;
60
63
  static get packageId(): string;
61
- private static findObjectIdByType;
64
+ static findObjectIdByType(type: string, fail?: boolean): string;
62
65
  static get upgradeCapId(): string;
63
66
  static get usdcTreasuryCap(): string;
64
67
  static getPublishTx(packagePath: string, signer: Keypair): Transaction;
@@ -115,4 +118,4 @@ declare function createFundedWallet(usdcAmount?: bigint): Promise<Ed25519Keypair
115
118
  declare function sleep(ms: number): Promise<void>;
116
119
  declare function waitForNextEpoch(timeoutMs?: number, pollIntervalMs?: number): Promise<string>;
117
120
 
118
- export { ADMIN_KEYPAIR, CLOCK_ID, Coin, Config, type ConfigVars, DENY_LIST_ID, MoveType, PublishSingleton, STATIC_CONFIGS, SuiClient, USDC, analyze_cost, createFundedWallet, createWallet, deploy, getDeployBytes, getKeypair, sleep, waitForNextEpoch };
121
+ export { ADMIN_KEYPAIR, type BaseConfigVars, CLOCK_ID, Coin, Config, type ConfigVars, DENY_LIST_ID, type ExtraVarsMap, MoveType, type Network, PublishSingleton, STATIC_CONFIGS, SuiClient, USDC, analyze_cost, createFundedWallet, createWallet, deploy, getDeployBytes, getKeypair, sleep, waitForNextEpoch };
package/dist/index.js CHANGED
@@ -85,6 +85,13 @@ var Config = class _Config {
85
85
  }
86
86
  return env;
87
87
  }
88
+ /**
89
+ * Override this getter in your custom Config class to define extra variables
90
+ * that should be populated during deployment by finding objects by their Move types
91
+ */
92
+ static get extraVars() {
93
+ return {};
94
+ }
88
95
  static get vars() {
89
96
  const instance = this.getInstance();
90
97
  const NETWORK = instance.env;
@@ -522,8 +529,8 @@ ${JSON.stringify(resp, null, 2)}`);
522
529
  };
523
530
 
524
531
  // src/utils/deploy.ts
525
- async function deploy(vars) {
526
- vars ??= Config.vars;
532
+ async function deploy(ConfigClass = Config) {
533
+ const vars = ConfigClass.vars;
527
534
  await PublishSingleton.publish();
528
535
  const newConfig = {
529
536
  ...vars,
@@ -534,7 +541,14 @@ async function deploy(vars) {
534
541
  newConfig.USDC_PACKAGE_ID = PublishSingleton.packageId;
535
542
  newConfig.USDC_TREASURY_CAP = PublishSingleton.usdcTreasuryCap;
536
543
  }
537
- Config.write(newConfig);
544
+ const extraVars = ConfigClass.extraVars;
545
+ if (extraVars && Object.keys(extraVars).length > 0) {
546
+ for (const [key, typePattern] of Object.entries(extraVars)) {
547
+ const type = typePattern.replace("{packageId}", PublishSingleton.packageId);
548
+ newConfig[key] = PublishSingleton.findObjectIdByType(type, true);
549
+ }
550
+ }
551
+ ConfigClass.write(newConfig);
538
552
  return `Move contracts deployed successfully on ${vars.NETWORK} contract details have been stored in .env.${vars.NETWORK}`;
539
553
  }
540
554
  async function getDeployBytes() {
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/sui_client.ts","../src/tokens/coin.ts","../src/tokens/usdc.ts","../src/utils/publish.ts","../src/utils/deploy.ts","../src/utils/test_utils.ts"],"names":["decodeSuiPrivateKey","Ed25519Keypair","Secp256k1Keypair","Secp256r1Keypair","dotenv","path","getFullnodeUrl","fs","fs2","MoveType","SC","Transaction","bcs","coinWithBalance","execSync","client","SuiClient","requestSuiFromFaucetV2","getFaucetHost"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKO,SAAS,WAAW,OAAA,EAA0B;AACjD,EAAA,MAAM,MAAA,GAASA,iCAAoB,OAAO,CAAA;AAE1C,EAAA,QAAQ,OAAO,MAAA;AAAQ,IACnB,KAAK,SAAA,EAAW;AACZ,MAAA,OAAOC,sBAAA,CAAe,aAAA,CAAc,MAAA,CAAO,SAAS,CAAA;AAAA,IACxD;AAAA,IACA,KAAK,WAAA,EAAa;AACd,MAAA,OAAOC,0BAAA,CAAiB,aAAA,CAAc,MAAA,CAAO,SAAS,CAAA;AAAA,IAC1D;AAAA,IACA,KAAK,WAAA,EAAa;AACd,MAAA,OAAOC,0BAAA,CAAiB,aAAA,CAAc,MAAA,CAAO,SAAS,CAAA;AAAA,IAC1D;AAAA,IACA;AACI,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,WAAA,EAAc,MAAA,CAAO,MAAM,CAAA,cAAA,CAAgB,CAAA;AAAA;AAEvE;;;ACrBO,IAAM,cAAA,GAAsB;AAAA,EAC/B,OAAA,EAAS;AAAA,IACL,eAAA,EAAiB;AAAA,GACrB;AAAA,EACA,OAAA,EAAS;AAAA,IACL,eAAA,EAAiB;AAAA;AAEzB;;;ACAAC,uBAAA,CAAO,MAAA,CAAO,EAAE,IAAA,EAAMC,qBAAA,CAAK,OAAA,CAAQ,QAAQ,GAAA,EAAI,EAAG,MAAM,CAAA,EAAG,CAAA;AAEpD,IAAM,YAAA,GAAe;AACrB,IAAM,QAAA,GAAW;AAcjB,IAAM,aAAA,GAAyB,UAAA,CAAW,OAAA,CAAQ,GAAA,CAAI,iBAAkB;AAExE,IAAM,MAAA,GAAN,MAAM,OAAA,CAAO;AAAA,EAChB,OAAe,QAAA,GAA0B,IAAA;AAAA,EAEzC,OAAe,WAAA,GAAsB;AACjC,IAAA,IAAI,CAAC,QAAO,QAAA,EAAU;AAClB,MAAA,IAAA,CAAK,QAAA,GAAW,IAAI,OAAA,EAAO;AAAA,IAC/B;AACA,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EAChB;AAAA,EAEA,IAAI,GAAA,GAAe;AACf,IAAA,IAAI,GAAA,GAAM,QAAQ,GAAA,CAAI,QAAA;AACtB,IAAA,IAAI,CAAC,CAAC,SAAA,EAAW,SAAA,EAAW,QAAA,EAAU,UAAU,CAAA,CAAE,QAAA,CAAS,GAAA,IAAO,EAAE,CAAA,EAAG;AACnE,MAAA,GAAA,GAAM,UAAA;AAAA,IACV;AACA,IAAA,OAAO,GAAA;AAAA,EACX;AAAA,EAEA,WAAW,IAAA,GAAmB;AAC1B,IAAA,MAAM,QAAA,GAAW,KAAK,WAAA,EAAY;AAClC,IAAA,MAAM,UAAU,QAAA,CAAS,GAAA;AACzB,IAAAD,uBAAA,CAAO,MAAA,CAAO,EAAE,IAAA,EAAMC,qBAAA,CAAK,QAAQ,OAAA,CAAQ,GAAA,EAAI,EAAG,CAAA,KAAA,EAAQ,OAAO,CAAA,CAAE,CAAA,EAAG,QAAA,EAAU,MAAM,CAAA;AAEtF,IAAA,MAAM,OAAA,GAAU;AAAA,MACZ,OAAA;AAAA,MACA,GAAA,EAAKC,sBAAe,OAAO,CAAA;AAAA,MAC3B,YAAA,EAAc,OAAA,CAAQ,GAAA,CAAI,YAAA,IAAgB,EAAA;AAAA,MAC1C,UAAA,EAAY,OAAA,CAAQ,GAAA,CAAI,UAAA,IAAc,EAAA;AAAA,MACtC,cAAA,EAAgB,OAAA,CAAQ,GAAA,CAAI,cAAA,IAAkB,EAAA;AAAA,MAC9C,iBAAA,EAAmB,QAAQ,GAAA,CAAI,iBAAA;AAAA,MAC/B,eAAA,EAAiB,QAAQ,GAAA,CAAI;AAAA,KACjC;AAEA,IAAA,MAAM,UAAA,GAAa,cAAA,CAAe,OAAO,CAAA,IAAK,EAAC;AAE/C,IAAA,OAAO;AAAA,MACH,GAAG,UAAA;AAAA,MACH,GAAG;AAAA,KACP;AAAA,EACJ;AAAA,EAEA,OAAO,MAAM,MAAA,EAA4B;AACrC,IAAA,MAAM,QAAA,GAAW,KAAK,WAAA,EAAY;AAClC,IAAA,MAAM,MAAM,QAAA,CAAS,GAAA;AACrB,IAAA,MAAM,OAAA,GAAUD,qBAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAI,EAAG,CAAA,IAAA,EAAO,GAAA,GAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAEtE,IAAA,MAAM,YAAA,GAAe,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CACrC,MAAA,CAAO,CAAC,CAAC,CAAA,EAAG,KAAK,CAAA,KAAM,KAAK,CAAA,CAC5B,IAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA,CACvC,IAAA,CAAK,IAAI,CAAA;AAEd,IAAAE,sBAAA,CAAG,aAAA,CAAc,OAAA,EAAS,YAAA,EAAc,MAAM,CAAA;AAC9C,IAAA,OAAO,OAAA;AAAA,EACX;AACJ;AC3EA,IAAM,kBAAA,GAAqB,2BAAA;AAC3B,IAAM,OAAA,GAAU;AAAA,EACZ,aAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,iBAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA,yBAAA;AAAA,EACA;AACJ,CAAA;AAEO,SAAS,YAAA,CAAa,KAAkB,IAAA,EAAmC;AAC9E,EAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,qBAAA,EAAuB;AACpC,IAAA;AAAA,EACJ;AACA,EAAA,IAAI,CAAIC,cAAA,CAAA,UAAA,CAAW,kBAAkB,CAAA,EAAG;AACpC,IAAGA,6BAAc,kBAAA,EAAoB,OAAA,CAAQ,IAAA,CAAK,GAAG,IAAI,IAAI,CAAA;AAAA,EACjE;AAEA,EAAA,MAAM,OAAA,GAAe,CAAC,MAAA,CAAO,IAAA,CAAK,SAAS,IAAA,CAAK,GAAA,EAAI,EAAG,IAAA,CAAK,MAAM,CAAA;AAElE,EAAA,MAAM,SAAA,GAAY,IAAI,SAAA,CAAU,YAAA,CAAa,OAAO,CAAC,MAAA,KAAW,MAAA,CAAO,IAAA,KAAS,UAAU,CAAA;AAC1F,EAAA,MAAM,QAAA,GAAW,UAAU,GAAA,EAAI;AAC/B,EAAA,IAAI,CAAC,UAAU,MAAA,EAAQ;AACnB,IAAA;AAAA,EACJ;AACA,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AACzC,EAAA,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,CAAC,CAAC,CAAA;AACtB,EAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,MAAA,CAAO,CAAC,CAAC,CAAA,EAAA,EAAK,MAAA,CAAO,CAAC,CAAC,CAAA,CAAE,CAAA;AAEzC,EAAA,MAAM,OAAA,GAAU,KAAK,OAAA,EAAS,OAAA;AAC9B,EAAA,OAAA,CAAQ,IAAA,CAAK,OAAA,EAAS,eAAA,IAAmB,KAAK,CAAA;AAC9C,EAAA,OAAA,CAAQ,IAAA,CAAK,OAAA,EAAS,WAAA,IAAe,KAAK,CAAA;AAC1C,EAAA,OAAA,CAAQ,IAAA,CAAK,OAAA,EAAS,aAAA,IAAiB,KAAK,CAAA;AAC5C,EAAA,OAAA,CAAQ,IAAA,CAAK,OAAA,EAAS,uBAAA,IAA2B,KAAK,CAAA;AAEtD,EAAA,MAAM,YAAA,GAAe,OAAO,OAAA,EAAS,eAAA,IAAmB,CAAC,CAAA,GAAI,MAAA,CAAO,OAAA,EAAS,WAAA,IAAe,CAAC,CAAA;AAC7F,EAAA,MAAM,QAAA,GAAW,YAAA,GAAe,MAAA,CAAO,OAAA,EAAS,iBAAiB,CAAC,CAAA;AAClE,EAAA,OAAA,CAAQ,KAAK,QAAQ,CAAA;AAErB,EAAGA,8BAAe,kBAAA,EAAoB,OAAA,CAAQ,IAAA,CAAK,GAAG,IAAI,IAAI,CAAA;AAClE;;;AC1CO,IAAK,QAAA,qBAAAC,SAAAA,KAAL;AACH,EAAAA,SAAAA,CAAAA,SAAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAA;AACA,EAAAA,SAAAA,CAAAA,SAAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAA;AACA,EAAAA,SAAAA,CAAAA,SAAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAA;AACA,EAAAA,SAAAA,CAAAA,SAAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAA;AACA,EAAAA,SAAAA,CAAAA,SAAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAA;AACA,EAAAA,SAAAA,CAAAA,SAAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAA;AACA,EAAAA,SAAAA,CAAAA,SAAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAA;AACA,EAAAA,SAAAA,CAAAA,SAAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAA;AACA,EAAAA,SAAAA,CAAAA,SAAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAA;AACA,EAAAA,SAAAA,CAAAA,SAAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAA;AACA,EAAAA,SAAAA,CAAAA,SAAAA,CAAA,aAAA,CAAA,GAAA,EAAA,CAAA,GAAA,aAAA;AACA,EAAAA,SAAAA,CAAAA,SAAAA,CAAA,aAAA,CAAA,GAAA,EAAA,CAAA,GAAA,aAAA;AAZQ,EAAA,OAAAA,SAAAA;AAAA,CAAA,EAAA,QAAA,IAAA,EAAA;AAeL,IAAM,SAAA,GAAN,MAAM,UAAA,CAAU;AAAA,EACnB,OAAe,QAAA,GAA6B,IAAA;AAAA,EACpC,MAAA;AAAA,EAEA,WAAA,GAAc;AAClB,IAAA,IAAA,CAAK,MAAA,GAAS,IAAIC,gBAAA,CAAG,EAAE,KAAK,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAAA,EACjD;AAAA,EAEA,OAAe,WAAA,GAAyB;AACpC,IAAA,IAAI,CAAC,WAAU,QAAA,EAAU;AACrB,MAAA,IAAA,CAAK,QAAA,GAAW,IAAI,UAAA,EAAU;AAAA,IAClC;AACA,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EAChB;AAAA,EAEA,WAAkB,MAAA,GAAa;AAC3B,IAAA,OAAO,IAAA,CAAK,aAAY,CAAE,MAAA;AAAA,EAC9B;AAAA,EAEA,aAAoB,cAAA,CAChB,GAAA,EACA,QACA,YAAA,GAAmC,CAAC,MAAM,CAAA,EAC5C;AACE,IAAA,IAAI;AACA,MAAA,MAAM,IAAA,GAAO,MAAM,UAAA,CAAU,MAAA,CAAO,yBAAA,CAA0B;AAAA,QAC1D,WAAA,EAAa,GAAA;AAAA,QACb,MAAA;AAAA,QACA,OAAA,EAAS;AAAA,UACL,WAAA,EAAa,IAAA;AAAA,UACb,iBAAA,EAAmB,IAAA;AAAA,UACnB,kBAAA,EAAoB;AAAA;AACxB,OACH,CAAA;AACD,MAAA,MAAM,WAAU,MAAA,CAAO,kBAAA,CAAmB,EAAE,MAAA,EAAQ,IAAA,CAAK,QAAQ,CAAA;AACjE,MAAA,IAAI,IAAA,CAAK,OAAA,EAAS,MAAA,CAAO,MAAA,KAAW,SAAA,EAAW;AAC3C,QAAA,MAAM,IAAI,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,MACxC;AACA,MAAA,YAAA,CAAa,KAAK,IAAI,CAAA;AACtB,MAAA,OAAO,IAAA;AAAA,IACX,SAAS,CAAA,EAAG;AACR,MAAA,MAAM,IAAI,KAAA,CAAM,YAAA,CAAa,CAAC,CAAC,CAAA;AAAA,IACnC;AAAA,EACJ;AAAA,EAEA,OAAc,SAAA,CAAU,GAAA,EAAkB,KAAA,EAAY,IAAA,EAAiB;AACnE,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACpD,MAAA,OAAO,KAAA;AAAA,IACX;AAEA,IAAA,IAAI,CAAC,IAAA,EAAM;AACP,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,QAAA,IAAI,KAAA,CAAM,UAAA,CAAW,IAAI,CAAA,EAAG;AACxB,UAAA,IAAA,GAAO,CAAA;AAAA,QACX,CAAA,MAAO;AACH,UAAA,IAAA,GAAO,CAAA;AAAA,QACX;AAAA,MACJ,CAAA,MAAA,IAAW,OAAO,KAAA,KAAU,SAAA,EAAW;AACnC,QAAA,IAAA,GAAO,CAAA;AAAA,MACX,WAAW,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,UAAU,QAAA,EAAU;AAC/D,QAAA,IAAA,GAAO,CAAA;AAAA,MACX;AAAA,IACJ;AAEA,IAAA,MAAM,OAAA,GAAU;AAAA,MACZ,CAAC,aAAc,CAAC,MAAW,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,MACxC,CAAC,cAAe,CAAC,MAAW,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,MAC1C,CAAC,cAAe,CAAC,MAAW,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,MAC1C,CAAC,cAAe,CAAC,MAAW,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,MAC1C,CAAC,eAAgB,CAAC,MAAW,GAAA,CAAI,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,MAC5C,CAAC,eAAgB,CAAC,MAAW,GAAA,CAAI,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,MAC5C,CAAC,eAAgB,CAAC,MAAW,GAAA,CAAI,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,MAC5C,CAAC,iBAAkB,CAAC,MAAW,GAAA,CAAI,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,MAChD,CAAC,CAAA,gBAAkB,CAAC,CAAA,KAAW,GAAA,CAAI,OAAO,CAAC,CAAA;AAAA,MAC3C,CAAC,kBAAmB,CAAC,MAAW,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAC,CAAA;AAAA,MAClD,CAAC,uBAAuB,CAAC,MAAW,GAAA,CAAI,IAAA,CAAK,MAAA,CAAO,SAAA,EAAW,CAAC,CAAA;AAAA,MAChE,CAAC,uBAAuB,CAAC,MAAW,GAAA,CAAI,IAAA,CAAK,MAAA,CAAO,SAAA,EAAW,CAAC;AAAA,KACpE;AAEA,IAAA,OAAO,OAAA,CAAQ,IAAK,CAAA,CAAE,KAAK,CAAA;AAAA,EAC/B;AAAA,EAEA,aAAoB,QAAA,CAAS;AAAA,IACzB,MAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAW,EAAC;AAAA,IACZ,OAAO,EAAC;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,YAAA,GAAe,CAAC,CAAA,KAAM,CAAA;AAAA,IACtB,GAAA;AAAA,IACA,YAAA,GAAe;AAAA,GACnB,EASG;AACC,IAAA,GAAA,GAAM,GAAA,IAAO,IAAIC,wBAAA,EAAY;AAC7B,IAAA,MAAM,GAAA,GAAM,IAAI,QAAA,CAAS;AAAA,MACrB,MAAA;AAAA,MACA,aAAA,EAAe,QAAA;AAAA,MACf,SAAA,EAAW,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,EAAK,CAAA,KAAM,UAAA,CAAU,SAAA,CAAU,GAAA,EAAK,GAAA,EAAK,QAAA,CAAS,CAAC,CAAC,CAAC;AAAA,KAC7E,CAAA;AAED,IAAA,IAAI,YAAA,EAAc;AACd,MAAA,GAAA,CAAI,gBAAgB,CAAC,GAAG,CAAA,EAAG,MAAA,CAAO,cAAc,CAAA;AAAA,IACpD;AAEA,IAAA,OAAO,UAAA,CAAU,cAAA,CAAe,GAAA,EAAK,MAAA,EAAQ,YAAY,CAAA;AAAA,EAC7D;AAAA,EAEA,aAAoB,eAAA,CAAgB,OAAA,EAAmB,IAAA,EAAe,EAAA,EAAY;AAC9E,IAAA,MAAM,EAAA,GAAK,IAAIA,wBAAA,EAAY;AAC3B,IAAA,EAAA,CAAG,eAAA,CAAgB,SAAS,EAAE,CAAA;AAC9B,IAAA,OAAO,MAAM,UAAA,CAAU,cAAA,CAAe,EAAA,EAAI,IAAI,CAAA;AAAA,EAClD;AAAA,EAEA,aAAoB,UAAA,CAAW,GAAA,EAAkB,MAAA,EAAgB;AAC7D,IAAA,OAAO,MAAM,UAAA,CAAU,MAAA,CAAO,0BAAA,CAA2B;AAAA,MACrD,gBAAA,EAAkB,GAAA;AAAA,MAClB;AAAA,KACH,CAAA;AAAA,EACL;AAAA,EAEA,aAAoB,aAAA,CAAc,GAAA,EAAkB,MAAA,EAAgB;AAChE,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,KAAK,MAAM,CAAA;AAChD,IAAA,OAAO,OAAO,OAAA,GAAU,CAAC,EAAE,YAAA,GAAe,CAAC,IAAI,CAAC,CAAA;AAAA,EACpD;AAAA,EAEA,aAAoB,cAAA,CAAe,GAAA,EAAkB,MAAA,EAAgB;AACjE,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,aAAA,CAAc,KAAK,MAAM,CAAA;AACnD,IAAA,OAAO,MAAA,IAAU,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA;AAAA,EACnC;AAAA,EAEA,aAAoB,aAAA,CAAc,GAAA,EAAkB,MAAA,EAAgB;AAChE,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,aAAA,CAAc,KAAK,MAAM,CAAA;AAClD,IAAA,OAAO,MAAA,CAAOC,QAAI,GAAA,EAAI,CAAE,MAAM,IAAI,UAAA,CAAW,KAAM,CAAC,CAAC,CAAA;AAAA,EACzD;AAAA,EAEA,aAAoB,iBAAA,CAAkB,GAAA,EAAkB,MAAA,EAAgB;AACpE,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,aAAA,CAAc,KAAK,MAAM,CAAA;AAClD,IAAA,IAAI,CAAC,KAAA,EAAO;AACR,MAAA,OAAO,MAAA;AAAA,IACX;AACA,IAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,IAAA,CAAK,KAAK,CAAA;AACnC,IAAA,OAAO,OAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,SAAS,KAAK,CAAA;AAAA,EACnD;AAAA,EAEA,aAAoB,UAAU,EAAA,EAAY;AACtC,IAAA,OAAO,UAAA,CAAU,OAAO,SAAA,CAAU;AAAA,MAC9B,EAAA;AAAA,MACA,OAAA,EAAS,EAAE,WAAA,EAAa,IAAA;AAAK,KAChC,CAAA;AAAA,EACL;AAAA,EAEA,aAAoB,gBAAA,CAAiB,KAAA,EAAe,IAAA,EAAc;AAC9D,IAAA,MAAM,GAAA,GAAM,MAAM,UAAA,CAAU,MAAA,CAAO,eAAA,CAAgB;AAAA,MAC/C,KAAA;AAAA,MACA,MAAA,EAAQ;AAAA,QACJ,UAAA,EAAY;AAAA;AAChB,KACH,CAAA;AACD,IAAA,OAAO,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,QAAQ,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,CAAA;AAAA,EAChE;AACJ;AC1LO,IAAM,OAAN,MAAW;AAAA,EACd,WAAkB,QAAA,GAAmB;AACjC,IAAA,MAAM,IAAI,MAAM,yCAAyC,CAAA;AAAA,EAC7D;AAAA,EAEA,aAAoB,WAAW,KAAA,EAAe;AAC1C,IAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,MAAA,CAAO,UAAA,CAAW;AAAA,MAC7C,KAAA;AAAA,MACA,UAAU,IAAA,CAAK;AAAA,KAClB,CAAA;AACD,IAAA,OAAO,MAAA,CAAO,OAAO,YAAY,CAAA;AAAA,EACrC;AAAA,EAEA,aAAoB,OAAA,CAAQ,KAAA,EAAgB,MAAA,EAAkC;AAC1E,IAAA,MAAM,UAAU,MAAA,IAAW,MAAM,KAAK,UAAA,CAAW,KAAA,CAAM,cAAc,CAAA;AACrE,IAAA,MAAM,EAAA,GAAK,IAAID,wBAAAA,EAAY;AAC3B,IAAA,MAAM,YAAYE,4BAAA,CAAgB;AAAA,MAC9B,OAAA;AAAA,MACA,UAAA,EAAY,KAAA;AAAA,MACZ,MAAM,IAAA,CAAK;AAAA,KACd,CAAA;AACD,IAAA,EAAA,CAAG,gBAAgB,CAAC,SAAS,CAAA,EAAG,KAAA,CAAM,cAAc,CAAA;AACpD,IAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,cAAA,CAAe,IAAI,KAAK,CAAA;AAEvD,IAAA,MAAM,IAAA,GAAO,OAAO,aAAA,EAAe,IAAA;AAAA,MAC/B,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,aAAa,CAAA,CAAE,UAAA,KAAe,CAAA,gBAAA,EAAmB,IAAA,CAAK,QAAQ,CAAA,CAAA;AAAA,KACpF;AAEA,IAAA,OAAQ,IAAA,EAAc,QAAA;AAAA,EAC1B;AAAA,EAEA,aAAoB,KAAA,CAAM,UAAA,EAAoB,MAAA,EAAgB,MAAA,EAAiB;AAC3E,IAAA,MAAM,UAAU,QAAA,CAAS;AAAA,MACrB,MAAA,EAAQ,MAAA;AAAA,MACR,MAAA,EAAQ,CAAA,eAAA,CAAA;AAAA,MACR,QAAA,EAAU,CAAC,IAAA,CAAK,QAAQ,CAAA;AAAA,MACxB,IAAA,EAAM,CAAC,UAAA,EAAY,MAAM,CAAA;AAAA,MACzB,UAAU,CAAA,CAAA,eAAA,CAAA,WAA8B;AAAA,MACxC,YAAA,EAAc;AAAA,KACjB,CAAA;AAAA,EACL;AAAA,EAEA,aAAoB,IAAA,CAAK,MAAA,EAAgB,IAAA,EAAe,EAAA,EAAY;AAChE,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,OAAA,CAAQ,MAAM,MAAM,CAAA;AAC5C,IAAA,MAAM,GAAA,GAAM,IAAIF,wBAAAA,EAAY;AAC5B,IAAA,GAAA,CAAI,gBAAgB,CAAC,GAAA,CAAI,OAAO,IAAI,CAAC,GAAG,EAAE,CAAA;AAC1C,IAAA,MAAM,SAAA,CAAU,cAAA,CAAe,GAAA,EAAK,IAAI,CAAA;AAAA,EAC5C;AAAA,EAEA,aAAoB,aAAA,CAAc,MAAA,EAAiB,MAAA,EAAyB;AACxE,IAAA,MAAM,MAAA,CAAO,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,YAAA,EAAc,CAAC,CAAA,CAAE,QAAA,CAAS,IAAA,CAAK,MAAM,CAAA;AAAA,EAC7E;AACJ;;;ACnDO,IAAM,IAAA,GAAN,cAAmB,IAAA,CAAK;AAAA,EAC3B,WAAkB,QAAA,GAAmB;AACjC,IAAA,OAAO,MAAA,CAAO,KAAK,eAAA,GAAkB,cAAA;AAAA,EACzC;AAAA,EAEA,aAAqB,aAAa,KAAA,EAAgB;AAC9C,IAAA,eAAe,mBAAA,GAAsB;AACjC,MAAA,MAAM,UAAA,GAAa,MAAM,SAAA,CAAU,gBAAA;AAAA,QAC/B,MAAM,YAAA,EAAa;AAAA,QACnB,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,eAAe,CAAA,mBAAA;AAAA,OAClC;AACA,MAAA,OAAO,WAAW,GAAA,EAAI;AAAA,IAC1B;AAEA,IAAA,IAAI,SAAA,GAAY,MAAM,mBAAA,EAAoB;AAE1C,IAAA,IAAI,CAAC,SAAA,EAAW;AACZ,MAAA,MAAM,UAAU,QAAA,CAAS;AAAA,QACrB,MAAA,EAAQ,KAAA;AAAA,QACR,MAAA,EAAQ,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,eAAe,CAAA,oCAAA,CAAA;AAAA,QACtC,QAAA,EAAU,CAAC,IAAA,CAAK,QAAQ,CAAA;AAAA,QACxB,IAAA,EAAM,CAAC,MAAA,CAAO,IAAA,CAAK,iBAAA,EAAmB,MAAM,YAAA,EAAa,EAAG,KAAA,CAAM,YAAA,EAAc,CAAA;AAAA,QAChF,UAAU,CAAA,CAAA,eAAA,CAAA,gBAAA,CAAA;AAAoD,OACjE,CAAA;AACD,MAAA,SAAA,GAAY,MAAM,mBAAA,EAAoB;AAAA,IAC1C;AAEA,IAAA,OAAO,SAAA;AAAA,EACX;AAAA,EAEA,aAAoB,MAAA,CAAO,MAAA,EAAgB,QAAA,EAAkB,KAAA,EAAgB;AACzE,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,YAAA,CAAa,KAAK,CAAA;AAE/C,IAAA,MAAM,UAAU,QAAA,CAAS;AAAA,MACrB,MAAA,EAAQ,KAAA;AAAA,MACR,MAAA,EAAQ,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,eAAe,CAAA,4BAAA,CAAA;AAAA,MACtC,QAAA,EAAU,CAAC,IAAA,CAAK,QAAQ,CAAA;AAAA,MACxB,MAAM,CAAC,MAAA,CAAO,IAAA,CAAK,iBAAA,EAAmB,cAAc,MAAM,CAAA;AAAA,MAC1D,UAAU,CAAA,CAAA,eAAA,CAAA,eAAA,CAAA;AAA+C,KAC5D,CAAA;AAED,IAAA,MAAM,UAAU,QAAA,CAAS;AAAA,MACrB,MAAA,EAAQ,KAAA;AAAA,MACR,MAAA,EAAQ,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,eAAe,CAAA,gBAAA,CAAA;AAAA,MACtC,QAAA,EAAU,CAAC,IAAA,CAAK,QAAQ,CAAA;AAAA,MACxB,IAAA,EAAM,CAAC,MAAA,CAAO,IAAA,CAAK,mBAAmB,SAAA,EAAW,YAAA,EAAc,QAAQ,QAAQ,CAAA;AAAA,MAC/E,QAAA,EAAU;AAAA,QAAA,CAAA;AAAA,QAAA,CAAA;AAAA,QAAA,CAAA;AAAA,QAAA,CAAA;AAAA,QAAA,CAAA;AAAA;AAMV,KACH,CAAA;AAAA,EACL;AACJ;AC/CO,IAAM,gBAAA,GAAN,MAAM,iBAAA,CAAiB;AAAA,EAGlB,YAA6B,WAAA,EAA0C;AAA1C,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AAAA,EAA2C;AAAA,EAFhF,OAAe,QAAA,GAAoC,IAAA;AAAA,EAInD,OAAe,aAAA,CAAc,MAAA,EAAkB,WAAA,EAAyC;AACpF,IAAA,MAAA,KAAW,aAAA;AACX,IAAA,WAAA,KAAgB,OAAO,IAAA,CAAK,YAAA;AAE5B,IAAA,IAAI,CAAC,WAAA,EAAa;AACd,MAAA,MAAM,IAAI,KAAA;AAAA,QACN;AAAA,OACJ;AAAA,IACJ;AAEA,IAAA,OAAO,CAAC,QAAQ,WAAW,CAAA;AAAA,EAC/B;AAAA,EAEA,aAAoB,OAAA,CAAQ,MAAA,EAAkB,WAAA,EAAsB;AAChE,IAAA,MAAM,CAAC,OAAA,EAAS,YAAY,IAAI,IAAA,CAAK,aAAA,CAAc,QAAQ,WAAW,CAAA;AAEtE,IAAA,IAAI,CAAC,kBAAiB,QAAA,EAAU;AAC5B,MAAA,MAAM,WAAA,GAAc,MAAM,iBAAA,CAAiB,cAAA,CAAe,SAAS,YAAY,CAAA;AAC/E,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,oBAAA,CAAqB,WAAW,CAAA,EAAG,SAAA;AAC1D,MAAA,IAAI,CAAC,SAAA,EAAW;AACZ,QAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,MACxD;AAEA,MAAA,iBAAA,CAAiB,QAAA,GAAW,IAAI,iBAAA,CAAiB,WAAW,CAAA;AAAA,IAChE;AAAA,EACJ;AAAA,EAEA,OAAe,WAAA,GAAgC;AAC3C,IAAA,IAAI,CAAC,kBAAiB,QAAA,EAAU;AAC5B,MAAA,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAAA,IAClE;AACA,IAAA,OAAO,iBAAA,CAAiB,QAAA;AAAA,EAC5B;AAAA,EAEA,OAAc,eAAA,GAA+C;AACzD,IAAA,OAAO,IAAA,CAAK,aAAY,CAAE,WAAA;AAAA,EAC9B;AAAA,EAEA,WAAkB,SAAA,GAAoB;AAClC,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,oBAAA,CAAqB,IAAA,CAAK,iBAAiB,CAAA;AACpE,IAAA,IAAI,CAAC,WAAA,EAAa;AACd,MAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,IACxD;AACA,IAAA,OAAO,WAAA,CAAY,SAAA;AAAA,EACvB;AAAA,EAEA,OAAe,kBAAA,CAAmB,IAAA,EAAc,IAAA,GAAgB,IAAA,EAAc;AAC1E,IAAA,MAAM,MAAM,IAAA,CAAK,6BAAA,CAA8B,IAAA,CAAK,eAAA,IAAmB,IAAI,CAAA;AAC3E,IAAA,IAAI,IAAA,IAAQ,CAAC,GAAA,EAAK;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iBAAA,EAAoB,IAAI,CAAA,uBAAA,CAAyB,CAAA;AAAA,IACrE;AACA,IAAA,OAAO,KAAK,QAAA,IAAY,EAAA;AAAA,EAC5B;AAAA,EAEA,WAAkB,YAAA,GAAuB;AACrC,IAAA,OAAO,IAAA,CAAK,mBAAmB,CAAA,wBAAA,CAA0B,CAAA;AAAA,EAC7D;AAAA,EAEA,WAAkB,eAAA,GAA0B;AACxC,IAAA,OAAO,IAAA,CAAK,kBAAA;AAAA,MACR,CAAA,EAAG,IAAA,CAAK,SAAS,CAAA,qBAAA,EAAwB,KAAK,SAAS,CAAA,aAAA,CAAA;AAAA,MACvD;AAAA,KACJ;AAAA,EACJ;AAAA,EAEA,OAAO,YAAA,CAAa,WAAA,EAAqB,MAAA,EAAiB;AACtD,IAAA,MAAM,WAAA,GAAc,IAAIA,wBAAAA,EAAY;AAEpC,IAAA,IAAI,CAACJ,sBAAAA,CAAG,UAAA,CAAW,WAAW,CAAA,EAAG;AAC7B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgC,WAAW,CAAA,CAAE,CAAA;AAAA,IACjE;AAEA,IAAA,IAAIA,sBAAAA,CAAG,UAAA,CAAW,CAAA,EAAG,WAAW,YAAY,CAAA,EAAG;AAC3C,MAAAA,sBAAAA,CAAG,UAAA,CAAW,CAAA,EAAG,WAAW,CAAA,UAAA,CAAY,CAAA;AAAA,IAC5C;AACA,IAAAA,sBAAAA,CAAG,MAAA,CAAO,CAAA,EAAG,WAAW,CAAA,MAAA,CAAA,EAAU,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,CAAA;AAElE,IAAA,IAAI,YAAA,GAAe,mDAAmD,WAAW,CAAA,CAAA;AACjF,IAAA,MAAM,OAAA,GAAU,OAAO,IAAA,CAAK,OAAA;AAC5B,IAAA,IAAI,OAAA,KAAY,UAAA,IAAc,OAAA,KAAY,QAAA,EAAU;AAChD,MAAA,YAAA,IAAgB,kCAAA;AAAA,IACpB;AAEA,IAAA,MAAM,EAAE,OAAA,EAAS,YAAA,EAAa,GAAI,IAAA,CAAK,KAAA,CAAMO,sBAAA,CAAS,YAAA,EAAc,EAAE,QAAA,EAAU,OAAA,EAAS,CAAC,CAAA;AAE1F,IAAA,MAAM,UAAA,GAAa,YAAY,OAAA,CAAQ;AAAA,MACnC,OAAA;AAAA,MACA;AAAA,KACH,CAAA;AAED,IAAA,WAAA,CAAY,gBAAgB,CAAC,UAAU,CAAA,EAAG,MAAA,CAAO,cAAc,CAAA;AAC/D,IAAA,OAAO,WAAA;AAAA,EACX;AAAA,EAEA,aAAa,eAAA,CAAgB,MAAA,EAAkB,WAAA,EAAuC;AAClF,IAAA,MAAM,CAAC,OAAA,EAAS,YAAY,IAAI,IAAA,CAAK,aAAA,CAAc,QAAQ,WAAW,CAAA;AACtE,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,YAAA,CAAa,YAAA,EAAc,OAAO,CAAA;AAC3D,IAAA,WAAA,CAAY,SAAA,CAAU,OAAA,CAAQ,YAAA,EAAc,CAAA;AAC5C,IAAA,MAAMC,QAAA,GAAS,IAAIC,gBAAAA,CAAU,EAAE,KAAK,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AACrD,IAAA,MAAM,UAAU,MAAM,WAAA,CAAY,KAAA,CAAM,UAAED,UAAQ,CAAA;AAClD,IAAA,OAAO,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,SAAS,QAAQ,CAAA;AAAA,EACjD;AAAA,EAEA,aAAa,cAAA,CACT,MAAA,EACA,WAAA,EACoC;AACpC,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,YAAA,CAAa,WAAA,EAAa,MAAM,CAAA;AACzD,IAAA,MAAMA,QAAA,GAAS,IAAIC,gBAAAA,CAAU,EAAE,KAAK,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AACrD,IAAA,MAAM,IAAA,GAAO,MAAMD,QAAA,CAAO,yBAAA,CAA0B;AAAA,MAChD,WAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA,EAAS;AAAA,QACL,iBAAA,EAAmB,IAAA;AAAA,QACnB,WAAA,EAAa;AAAA;AACjB,KACH,CAAA;AACD,IAAA,IAAI,IAAA,CAAK,OAAA,EAAS,MAAA,CAAO,MAAA,KAAW,SAAA,EAAW;AAC3C,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA;AAAA,EAAwC,KAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,IAC3F;AACA,IAAA,MAAMA,SAAO,kBAAA,CAAmB,EAAE,MAAA,EAAQ,IAAA,CAAK,QAAQ,CAAA;AACvD,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAEA,OAAO,qBACH,IAAA,EACoC;AACpC,IAAA,OAAO,KAAK,aAAA,EAAe,IAAA;AAAA,MACvB,CAAC,IAAA,KAA2C,IAAA,CAAK,IAAA,KAAS;AAAA,KAC9D;AAAA,EACJ;AAAA,EAEA,OAAO,6BAAA,CACH,IAAA,EACA,IAAA,EACkC;AAClC,IAAA,OAAO,KAAK,aAAA,EAAe,IAAA;AAAA,MACvB,CAAC,IAAA,KACG,IAAA,CAAK,IAAA,KAAS,SAAA,IAAa,KAAK,UAAA,KAAe;AAAA,KACvD;AAAA,EACJ;AACJ;;;AC5JA,eAAsB,OAAO,IAAA,EAAmB;AAC5C,EAAA,IAAA,KAAS,MAAA,CAAO,IAAA;AAChB,EAAA,MAAM,iBAAiB,OAAA,EAAQ;AAE/B,EAAA,MAAM,SAAA,GAAY;AAAA,IACd,GAAG,IAAA;AAAA,IACH,YAAY,gBAAA,CAAiB,SAAA;AAAA,IAC7B,gBAAgB,gBAAA,CAAiB;AAAA,GACrC;AAEA,EAAA,IAAI,iBAAiB,eAAA,EAAiB;AAClC,IAAA,SAAA,CAAU,kBAAkB,gBAAA,CAAiB,SAAA;AAC7C,IAAA,SAAA,CAAU,oBAAoB,gBAAA,CAAiB,eAAA;AAAA,EACnD;AAEA,EAAA,MAAA,CAAO,MAAM,SAAS,CAAA;AAEtB,EAAA,OAAO,CAAA,wCAAA,EAA2C,IAAA,CAAK,OAAO,CAAA,2CAAA,EAA8C,KAAK,OAAO,CAAA,CAAA;AAC5H;AAEA,eAAsB,cAAA,GAAiB;AACnC,EAAA,OAAO,MAAM,iBAAiB,eAAA,EAAgB;AAClD;ACnBO,SAAS,YAAA,GAAe;AAC3B,EAAA,OAAO,IAAId,sBAAAA,EAAe;AAC9B;AAEA,eAAsB,mBAAmB,UAAA,EAAqB;AAC1D,EAAA,MAAM,SAAS,YAAA,EAAa;AAC5B,EAAA,MAAM,MAAA,CAAO,MAAA,CAAO,YAAA,EAAc,CAAA;AAElC,EAAA,IAAI,UAAA,EAAY;AACZ,IAAA,MAAM,KAAK,MAAA,CAAO,UAAA,EAAY,MAAA,CAAO,YAAA,IAAgB,aAAa,CAAA;AAAA,EACtE;AAEA,EAAA,OAAO,MAAA;AACX;AAEA,eAAe,OAAO,OAAA,EAAiB;AACnC,EAAA,MAAMgB,+BAAA,CAAuB;AAAA,IACzB,IAAA,EAAMC,sBAAA,CAAc,MAAA,CAAO,IAAA,CAAK,OAAgC,CAAA;AAAA;AAAA,IAChE,SAAA,EAAW;AAAA,GACd,CAAA;AACL;AAEO,SAAS,MAAM,EAAA,EAA2B;AAC7C,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC,CAAA;AAC3D;AAEA,eAAsB,iBAAiB,SAAA,GAAY,CAAA,GAAI,EAAA,GAAK,GAAA,EAAM,iBAAiB,GAAA,EAAM;AACrF,EAAA,MAAM,UAAA,GAAA,CAAc,MAAM,SAAA,CAAU,MAAA,CAAO,yBAAwB,EAAG,KAAA;AACtE,EAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,EAAA,OAAO,IAAA,EAAM;AACT,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAM,SAAA,CAAU,OAAO,uBAAA,EAAwB;AACjE,IAAA,IAAI,MAAA,CAAO,KAAK,CAAA,GAAI,MAAA,CAAO,UAAU,CAAA,EAAG;AACpC,MAAA,OAAO,KAAA;AAAA,IACX;AAEA,IAAA,IAAI,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA,GAAY,SAAA,EAAW;AACpC,MAAA,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAAA,IACrD;AAEA,IAAA,MAAM,MAAM,cAAc,CAAA;AAAA,EAC9B;AACJ","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 const STATIC_CONFIGS: any = {\n testnet: {\n USDC_PACKAGE_ID: '0xa1ec7fc00a6f40db9693ad1415d0c193ad3906494428cf252621037bd7117e29',\n },\n mainnet: {\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 } from './static'\ndotenv.config({ path: path.resolve(process.cwd(), '.env') })\n\nexport const DENY_LIST_ID = '0x403'\nexport const CLOCK_ID = '0x6'\n\ntype Network = 'mainnet' | 'testnet' | 'devnet' | 'localnet'\n\nexport interface ConfigVars {\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\nexport const ADMIN_KEYPAIR: Keypair = getKeypair(process.env.ADMIN_PRIVATE_KEY!)\n\nexport class Config {\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.NODE_ENV\n if (!['mainnet', 'testnet', 'devnet', 'localnet'].includes(env || '')) {\n env = 'localnet'\n }\n return env as Network\n }\n\n static get vars(): ConfigVars {\n const instance = this.getInstance()\n const NETWORK = instance.env\n dotenv.config({ path: path.resolve(process.cwd(), `.env.${NETWORK}`), override: 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(config: ConfigVars): 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 { SuiClient as SC } from '@mysten/sui/client'\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'\n\nexport enum MoveType {\n u8,\n u16,\n u32,\n u64,\n u128,\n u256,\n bool,\n string,\n object,\n address,\n address_opt,\n vec_address,\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 public static async signAndExecute(\n ptb: Transaction,\n signer: Keypair,\n errorHandler: (e: any) => string = (e) => e\n ) {\n try {\n const resp = await SuiClient.client.signAndExecuteTransaction({\n transaction: ptb,\n signer,\n options: {\n showEffects: true,\n showObjectChanges: true,\n showBalanceChanges: true,\n },\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 } catch (e) {\n throw new Error(errorHandler(e))\n }\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.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 }\n\n return factory[type!](value)\n }\n\n public static async moveCall({\n signer,\n target,\n typeArgs = [],\n args = [],\n argTypes = [],\n errorHandler = (e) => e,\n ptb,\n withTransfer = false,\n }: {\n signer: Keypair\n target: string\n typeArgs?: string[]\n args?: any[]\n argTypes?: MoveType[]\n errorHandler?: (e: any) => string\n ptb?: Transaction\n withTransfer?: boolean\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) {\n ptb.transferObjects([obj], signer.toSuiAddress())\n }\n\n return SuiClient.signAndExecute(ptb, signer, errorHandler)\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 getObject(id: string) {\n return SuiClient.client.getObject({\n id,\n options: { showContent: true },\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'\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 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 getDeployVars(signer?: Keypair, packagePath?: string): [Keypair, string] {\n signer ??= ADMIN_KEYPAIR\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 [signer, packagePath]\n }\n\n public static async publish(signer?: Keypair, packagePath?: string) {\n const [_signer, _packagePath] = this.getDeployVars(signer, 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 private 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, signer: Keypair) {\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\n let buildCommand = `sui move build --dump-bytecode-as-base64 --path ${packagePath}`\n const network = Config.vars.NETWORK\n if (network === 'localnet' || network === 'devnet') {\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], signer.toSuiAddress())\n return transaction\n }\n\n static async getPublishBytes(signer?: Keypair, packagePath?: string): Promise<string> {\n const [_signer, _packagePath] = this.getDeployVars(signer, packagePath)\n const transaction = this.getPublishTx(_packagePath, _signer)\n transaction.setSender(_signer.toSuiAddress())\n const client = new SuiClient({ url: Config.vars.RPC })\n const txBytes = await transaction.build({ client })\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)\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 { Config, ConfigVars } from '../config/config'\nimport { PublishSingleton } from './publish'\n\nexport async function deploy(vars?: ConfigVars) {\n vars ??= Config.vars\n await PublishSingleton.publish()\n\n const newConfig = {\n ...vars,\n PACKAGE_ID: PublishSingleton.packageId,\n UPGRADE_CAP_ID: PublishSingleton.upgradeCapId,\n }\n\n if (PublishSingleton.usdcTreasuryCap) {\n newConfig.USDC_PACKAGE_ID = PublishSingleton.packageId\n newConfig.USDC_TREASURY_CAP = PublishSingleton.usdcTreasuryCap\n }\n\n Config.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"]}
1
+ {"version":3,"sources":["../src/utils/keypair.ts","../src/config/static.ts","../src/config/config.ts","../src/utils/cost_analyzer.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"],"names":["decodeSuiPrivateKey","Ed25519Keypair","Secp256k1Keypair","Secp256r1Keypair","dotenv","path","getFullnodeUrl","fs","fs2","MoveType","SC","Transaction","bcs","coinWithBalance","execSync","client","SuiClient","requestSuiFromFaucetV2","getFaucetHost"],"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 const STATIC_CONFIGS: any = {\n testnet: {\n USDC_PACKAGE_ID: '0xa1ec7fc00a6f40db9693ad1415d0c193ad3906494428cf252621037bd7117e29',\n },\n mainnet: {\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 } from './static'\ndotenv.config({ path: path.resolve(process.cwd(), '.env') })\n\nexport const DENY_LIST_ID = '0x403'\nexport const CLOCK_ID = '0x6'\n\nexport type Network = 'mainnet' | 'testnet' | 'devnet' | 'localnet'\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 = getKeypair(process.env.ADMIN_PRIVATE_KEY!)\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.NODE_ENV\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 })\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 { SuiClient as SC } from '@mysten/sui/client'\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'\n\nexport enum MoveType {\n u8,\n u16,\n u32,\n u64,\n u128,\n u256,\n bool,\n string,\n object,\n address,\n address_opt,\n vec_address,\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 public static async signAndExecute(\n ptb: Transaction,\n signer: Keypair,\n errorHandler: (e: any) => string = (e) => e\n ) {\n try {\n const resp = await SuiClient.client.signAndExecuteTransaction({\n transaction: ptb,\n signer,\n options: {\n showEffects: true,\n showObjectChanges: true,\n showBalanceChanges: true,\n },\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 } catch (e) {\n throw new Error(errorHandler(e))\n }\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.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 }\n\n return factory[type!](value)\n }\n\n public static async moveCall({\n signer,\n target,\n typeArgs = [],\n args = [],\n argTypes = [],\n errorHandler = (e) => e,\n ptb,\n withTransfer = false,\n }: {\n signer: Keypair\n target: string\n typeArgs?: string[]\n args?: any[]\n argTypes?: MoveType[]\n errorHandler?: (e: any) => string\n ptb?: Transaction\n withTransfer?: boolean\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) {\n ptb.transferObjects([obj], signer.toSuiAddress())\n }\n\n return SuiClient.signAndExecute(ptb, signer, errorHandler)\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 getObject(id: string) {\n return SuiClient.client.getObject({\n id,\n options: { showContent: true },\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'\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 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 getDeployVars(signer?: Keypair, packagePath?: string): [Keypair, string] {\n signer ??= ADMIN_KEYPAIR\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 [signer, packagePath]\n }\n\n public static async publish(signer?: Keypair, packagePath?: string) {\n const [_signer, _packagePath] = this.getDeployVars(signer, 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, signer: Keypair) {\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\n let buildCommand = `sui move build --dump-bytecode-as-base64 --path ${packagePath}`\n const network = Config.vars.NETWORK\n if (network === 'localnet' || network === 'devnet') {\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], signer.toSuiAddress())\n return transaction\n }\n\n static async getPublishBytes(signer?: Keypair, packagePath?: string): Promise<string> {\n const [_signer, _packagePath] = this.getDeployVars(signer, packagePath)\n const transaction = this.getPublishTx(_packagePath, _signer)\n transaction.setSender(_signer.toSuiAddress())\n const client = new SuiClient({ url: Config.vars.RPC })\n const txBytes = await transaction.build({ client })\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)\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 {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): Promise<string> {\n const vars = ConfigClass.vars as TConfigVars\n await PublishSingleton.publish()\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"]}
package/dist/index.mjs CHANGED
@@ -60,6 +60,13 @@ var Config = class _Config {
60
60
  }
61
61
  return env;
62
62
  }
63
+ /**
64
+ * Override this getter in your custom Config class to define extra variables
65
+ * that should be populated during deployment by finding objects by their Move types
66
+ */
67
+ static get extraVars() {
68
+ return {};
69
+ }
63
70
  static get vars() {
64
71
  const instance = this.getInstance();
65
72
  const NETWORK = instance.env;
@@ -497,8 +504,8 @@ ${JSON.stringify(resp, null, 2)}`);
497
504
  };
498
505
 
499
506
  // src/utils/deploy.ts
500
- async function deploy(vars) {
501
- vars ??= Config.vars;
507
+ async function deploy(ConfigClass = Config) {
508
+ const vars = ConfigClass.vars;
502
509
  await PublishSingleton.publish();
503
510
  const newConfig = {
504
511
  ...vars,
@@ -509,7 +516,14 @@ async function deploy(vars) {
509
516
  newConfig.USDC_PACKAGE_ID = PublishSingleton.packageId;
510
517
  newConfig.USDC_TREASURY_CAP = PublishSingleton.usdcTreasuryCap;
511
518
  }
512
- Config.write(newConfig);
519
+ const extraVars = ConfigClass.extraVars;
520
+ if (extraVars && Object.keys(extraVars).length > 0) {
521
+ for (const [key, typePattern] of Object.entries(extraVars)) {
522
+ const type = typePattern.replace("{packageId}", PublishSingleton.packageId);
523
+ newConfig[key] = PublishSingleton.findObjectIdByType(type, true);
524
+ }
525
+ }
526
+ ConfigClass.write(newConfig);
513
527
  return `Move contracts deployed successfully on ${vars.NETWORK} contract details have been stored in .env.${vars.NETWORK}`;
514
528
  }
515
529
  async function getDeployBytes() {
@@ -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/sui_client.ts","../src/tokens/coin.ts","../src/tokens/usdc.ts","../src/utils/publish.ts","../src/utils/deploy.ts","../src/utils/test_utils.ts"],"names":["fs","fs2","MoveType","SC","Transaction","SuiClient","Ed25519Keypair"],"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 const STATIC_CONFIGS: any = {\n testnet: {\n USDC_PACKAGE_ID: '0xa1ec7fc00a6f40db9693ad1415d0c193ad3906494428cf252621037bd7117e29',\n },\n mainnet: {\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 } from './static'\ndotenv.config({ path: path.resolve(process.cwd(), '.env') })\n\nexport const DENY_LIST_ID = '0x403'\nexport const CLOCK_ID = '0x6'\n\ntype Network = 'mainnet' | 'testnet' | 'devnet' | 'localnet'\n\nexport interface ConfigVars {\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\nexport const ADMIN_KEYPAIR: Keypair = getKeypair(process.env.ADMIN_PRIVATE_KEY!)\n\nexport class Config {\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.NODE_ENV\n if (!['mainnet', 'testnet', 'devnet', 'localnet'].includes(env || '')) {\n env = 'localnet'\n }\n return env as Network\n }\n\n static get vars(): ConfigVars {\n const instance = this.getInstance()\n const NETWORK = instance.env\n dotenv.config({ path: path.resolve(process.cwd(), `.env.${NETWORK}`), override: 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(config: ConfigVars): 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 { SuiClient as SC } from '@mysten/sui/client'\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'\n\nexport enum MoveType {\n u8,\n u16,\n u32,\n u64,\n u128,\n u256,\n bool,\n string,\n object,\n address,\n address_opt,\n vec_address,\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 public static async signAndExecute(\n ptb: Transaction,\n signer: Keypair,\n errorHandler: (e: any) => string = (e) => e\n ) {\n try {\n const resp = await SuiClient.client.signAndExecuteTransaction({\n transaction: ptb,\n signer,\n options: {\n showEffects: true,\n showObjectChanges: true,\n showBalanceChanges: true,\n },\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 } catch (e) {\n throw new Error(errorHandler(e))\n }\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.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 }\n\n return factory[type!](value)\n }\n\n public static async moveCall({\n signer,\n target,\n typeArgs = [],\n args = [],\n argTypes = [],\n errorHandler = (e) => e,\n ptb,\n withTransfer = false,\n }: {\n signer: Keypair\n target: string\n typeArgs?: string[]\n args?: any[]\n argTypes?: MoveType[]\n errorHandler?: (e: any) => string\n ptb?: Transaction\n withTransfer?: boolean\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) {\n ptb.transferObjects([obj], signer.toSuiAddress())\n }\n\n return SuiClient.signAndExecute(ptb, signer, errorHandler)\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 getObject(id: string) {\n return SuiClient.client.getObject({\n id,\n options: { showContent: true },\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'\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 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 getDeployVars(signer?: Keypair, packagePath?: string): [Keypair, string] {\n signer ??= ADMIN_KEYPAIR\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 [signer, packagePath]\n }\n\n public static async publish(signer?: Keypair, packagePath?: string) {\n const [_signer, _packagePath] = this.getDeployVars(signer, 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 private 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, signer: Keypair) {\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\n let buildCommand = `sui move build --dump-bytecode-as-base64 --path ${packagePath}`\n const network = Config.vars.NETWORK\n if (network === 'localnet' || network === 'devnet') {\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], signer.toSuiAddress())\n return transaction\n }\n\n static async getPublishBytes(signer?: Keypair, packagePath?: string): Promise<string> {\n const [_signer, _packagePath] = this.getDeployVars(signer, packagePath)\n const transaction = this.getPublishTx(_packagePath, _signer)\n transaction.setSender(_signer.toSuiAddress())\n const client = new SuiClient({ url: Config.vars.RPC })\n const txBytes = await transaction.build({ client })\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)\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 { Config, ConfigVars } from '../config/config'\nimport { PublishSingleton } from './publish'\n\nexport async function deploy(vars?: ConfigVars) {\n vars ??= Config.vars\n await PublishSingleton.publish()\n\n const newConfig = {\n ...vars,\n PACKAGE_ID: PublishSingleton.packageId,\n UPGRADE_CAP_ID: PublishSingleton.upgradeCapId,\n }\n\n if (PublishSingleton.usdcTreasuryCap) {\n newConfig.USDC_PACKAGE_ID = PublishSingleton.packageId\n newConfig.USDC_TREASURY_CAP = PublishSingleton.usdcTreasuryCap\n }\n\n Config.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"]}
1
+ {"version":3,"sources":["../src/utils/keypair.ts","../src/config/static.ts","../src/config/config.ts","../src/utils/cost_analyzer.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"],"names":["fs","fs2","MoveType","SC","Transaction","SuiClient","Ed25519Keypair"],"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 const STATIC_CONFIGS: any = {\n testnet: {\n USDC_PACKAGE_ID: '0xa1ec7fc00a6f40db9693ad1415d0c193ad3906494428cf252621037bd7117e29',\n },\n mainnet: {\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 } from './static'\ndotenv.config({ path: path.resolve(process.cwd(), '.env') })\n\nexport const DENY_LIST_ID = '0x403'\nexport const CLOCK_ID = '0x6'\n\nexport type Network = 'mainnet' | 'testnet' | 'devnet' | 'localnet'\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 = getKeypair(process.env.ADMIN_PRIVATE_KEY!)\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.NODE_ENV\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 })\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 { SuiClient as SC } from '@mysten/sui/client'\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'\n\nexport enum MoveType {\n u8,\n u16,\n u32,\n u64,\n u128,\n u256,\n bool,\n string,\n object,\n address,\n address_opt,\n vec_address,\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 public static async signAndExecute(\n ptb: Transaction,\n signer: Keypair,\n errorHandler: (e: any) => string = (e) => e\n ) {\n try {\n const resp = await SuiClient.client.signAndExecuteTransaction({\n transaction: ptb,\n signer,\n options: {\n showEffects: true,\n showObjectChanges: true,\n showBalanceChanges: true,\n },\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 } catch (e) {\n throw new Error(errorHandler(e))\n }\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.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 }\n\n return factory[type!](value)\n }\n\n public static async moveCall({\n signer,\n target,\n typeArgs = [],\n args = [],\n argTypes = [],\n errorHandler = (e) => e,\n ptb,\n withTransfer = false,\n }: {\n signer: Keypair\n target: string\n typeArgs?: string[]\n args?: any[]\n argTypes?: MoveType[]\n errorHandler?: (e: any) => string\n ptb?: Transaction\n withTransfer?: boolean\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) {\n ptb.transferObjects([obj], signer.toSuiAddress())\n }\n\n return SuiClient.signAndExecute(ptb, signer, errorHandler)\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 getObject(id: string) {\n return SuiClient.client.getObject({\n id,\n options: { showContent: true },\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'\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 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 getDeployVars(signer?: Keypair, packagePath?: string): [Keypair, string] {\n signer ??= ADMIN_KEYPAIR\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 [signer, packagePath]\n }\n\n public static async publish(signer?: Keypair, packagePath?: string) {\n const [_signer, _packagePath] = this.getDeployVars(signer, 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, signer: Keypair) {\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\n let buildCommand = `sui move build --dump-bytecode-as-base64 --path ${packagePath}`\n const network = Config.vars.NETWORK\n if (network === 'localnet' || network === 'devnet') {\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], signer.toSuiAddress())\n return transaction\n }\n\n static async getPublishBytes(signer?: Keypair, packagePath?: string): Promise<string> {\n const [_signer, _packagePath] = this.getDeployVars(signer, packagePath)\n const transaction = this.getPublishTx(_packagePath, _signer)\n transaction.setSender(_signer.toSuiAddress())\n const client = new SuiClient({ url: Config.vars.RPC })\n const txBytes = await transaction.build({ client })\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)\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 {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): Promise<string> {\n const vars = ConfigClass.vars as TConfigVars\n await PublishSingleton.publish()\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@easysui/sdk",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "description": "Easy-to-use TypeScript SDK for Sui blockchain development",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",