Преглед на файлове

fix(target_chains/sui/cli): update sui js package to make it work (#1386)

Also add build script to the package so we catch the failures on CI.
Ali Behjati преди 1 година
родител
ревизия
93598f8dc4

Файловите разлики са ограничени, защото са твърде много
+ 117 - 638
package-lock.json


+ 1 - 0
target_chains/sui/cli/.gitignore

@@ -0,0 +1 @@
+lib

+ 6 - 3
target_chains/sui/cli/package.json

@@ -5,16 +5,19 @@
   "main": "index.js",
   "license": "Apache-2.0",
   "scripts": {
-    "cli": "ts-node src/cli.ts"
+    "cli": "ts-node src/cli.ts",
+    "build": "tsc"
   },
   "private": "true",
   "dependencies": {
     "@certusone/wormhole-sdk": "^0.9.12",
-    "@mysten/sui.js": "^0.37.1",
+    "@mysten/sui.js": "^0.49.1",
     "@pythnetwork/client": "^2.17.0",
     "@pythnetwork/price-service-client": "^1.4.0",
     "@pythnetwork/price-service-sdk": "^1.2.0",
+    "contract_manager": "*",
     "prettier": "^2.8.7",
-    "typescript": "^5.0.4"
+    "typescript": "^5.0.4",
+    "xc_admin_common": "*"
   }
 }

+ 15 - 19
target_chains/sui/cli/src/cli.ts

@@ -8,13 +8,8 @@ import {
 } from "contract_manager";
 import { PriceServiceConnection } from "@pythnetwork/price-service-client";
 import { execSync } from "child_process";
-import {
-  Connection,
-  Ed25519Keypair,
-  JsonRpcProvider,
-  RawSigner,
-} from "@mysten/sui.js";
 import { initPyth, publishPackage } from "./pyth_deploy";
+import { Ed25519Keypair } from "@mysten/sui.js/keypairs/ed25519";
 import { resolve } from "path";
 import {
   buildForBytecodeAndDigest,
@@ -174,18 +169,19 @@ yargs(hideBin(process.argv))
     async (argv) => {
       const walletPrivateKey = argv["private-key"];
       const chain = DefaultStore.chains[argv.chain] as SuiChain;
-      const provider = new JsonRpcProvider(
-        new Connection({ fullnode: chain.rpcUrl })
+      const keypair = Ed25519Keypair.fromSecretKey(
+        Buffer.from(walletPrivateKey, "hex")
       );
-      const wallet = new RawSigner(
-        Ed25519Keypair.fromSecretKey(Buffer.from(walletPrivateKey, "hex")),
-        provider
+      const result = await publishPackage(
+        keypair,
+        chain.getProvider(),
+        argv.path
       );
-      const result = await publishPackage(wallet, argv.path);
       const deploymentType = chain.isMainnet() ? "stable" : "beta";
       const config = getDefaultDeploymentConfig(deploymentType);
       await initPyth(
-        wallet,
+        keypair,
+        chain.getProvider(),
         result.packageId,
         result.deployerCapId,
         result.upgradeCapId,
@@ -242,10 +238,8 @@ yargs(hideBin(process.argv))
     },
     async (argv) => {
       const contract = getContract(argv.contract);
-
-      const wallet = new RawSigner(
-        Ed25519Keypair.fromSecretKey(Buffer.from(argv["private-key"], "hex")),
-        contract.getProvider()
+      const keypair = Ed25519Keypair.fromSecretKey(
+        Buffer.from(argv["private-key"], "hex")
       );
 
       const pythContractsPath = resolve(`${__dirname}/${argv.path}`);
@@ -259,7 +253,8 @@ yargs(hideBin(process.argv))
       console.log("Old package id:", pythPackageOld);
       const signedVaa = Buffer.from(argv.vaa, "hex");
       const upgradeResults = await upgradePyth(
-        wallet,
+        keypair,
+        contract.chain.getProvider(),
         modules,
         dependencies,
         signedVaa,
@@ -281,7 +276,8 @@ yargs(hideBin(process.argv))
       // on chain at the beginning of the transaction.
 
       const migrateResults = await migratePyth(
-        wallet,
+        keypair,
+        contract.chain.getProvider(),
         signedVaa,
         contract,
         pythPackageOld

+ 28 - 14
target_chains/sui/cli/src/pyth_deploy.ts

@@ -1,16 +1,19 @@
+import { TransactionBlock } from "@mysten/sui.js/transactions";
+
 import {
-  fromB64,
-  getPublishedObjectChanges,
   MIST_PER_SUI,
   normalizeSuiObjectId,
-  RawSigner,
-  TransactionBlock,
-} from "@mysten/sui.js";
+  fromB64,
+} from "@mysten/sui.js/utils";
+
+import { Ed25519Keypair } from "@mysten/sui.js/dist/cjs/keypairs/ed25519";
 import { execSync } from "child_process";
 import { DataSource } from "xc_admin_common";
+import { SuiClient } from "@mysten/sui.js/client";
 
 export async function publishPackage(
-  signer: RawSigner,
+  keypair: Ed25519Keypair,
+  provider: SuiClient,
   packagePath: string
 ): Promise<{ packageId: string; upgradeCapId: string; deployerCapId: string }> {
   // Build contracts
@@ -43,11 +46,12 @@ export async function publishPackage(
   // Transfer upgrade capability to deployer
   transactionBlock.transferObjects(
     [upgradeCap],
-    transactionBlock.pure(await signer.getAddress())
+    transactionBlock.pure(keypair.toSuiAddress())
   );
 
   // Execute transactions
-  const result = await signer.signAndExecuteTransactionBlock({
+  const result = await provider.signAndExecuteTransactionBlock({
+    signer: keypair,
     transactionBlock,
     options: {
       showInput: true,
@@ -55,19 +59,27 @@ export async function publishPackage(
     },
   });
 
-  const publishEvents = getPublishedObjectChanges(result);
-  if (!result.objectChanges || publishEvents.length !== 1) {
+  const publishedChanges = result.objectChanges?.filter(
+    (change) => change.type === "published"
+  );
+
+  if (
+    publishedChanges?.length !== 1 ||
+    publishedChanges[0].type !== "published"
+  ) {
     throw new Error(
       "No publish event found in transaction:" +
         JSON.stringify(result.objectChanges, null, 2)
     );
   }
-  const packageId = publishEvents[0].packageId;
+
+  const packageId = publishedChanges[0].packageId;
+
   console.log("Published with package id: ", packageId);
   console.log("Tx digest", result.digest);
   let upgradeCapId: string | undefined;
   let deployerCapId: string | undefined;
-  for (const objectChange of result.objectChanges) {
+  for (const objectChange of result.objectChanges!) {
     if (objectChange.type === "created") {
       if (objectChange.objectType === "0x2::package::UpgradeCap") {
         upgradeCapId = objectChange.objectId;
@@ -90,7 +102,8 @@ export async function publishPackage(
 }
 
 export async function initPyth(
-  signer: RawSigner,
+  keypair: Ed25519Keypair,
+  provider: SuiClient,
   pythPackageId: string,
   deployerCapId: string,
   upgradeCapId: string,
@@ -133,7 +146,8 @@ export async function initPyth(
 
   tx.setGasBudget(MIST_PER_SUI / 10n); // 0.1 sui
 
-  let result = await signer.signAndExecuteTransactionBlock({
+  let result = await provider.signAndExecuteTransactionBlock({
+    signer: keypair,
     transactionBlock: tx,
     options: {
       showInput: true,

+ 13 - 7
target_chains/sui/cli/src/upgrade_pyth.ts

@@ -1,10 +1,12 @@
+import { TransactionBlock } from "@mysten/sui.js/transactions";
 import {
   fromB64,
   MIST_PER_SUI,
   normalizeSuiObjectId,
-  RawSigner,
-  TransactionBlock,
-} from "@mysten/sui.js";
+} from "@mysten/sui.js/utils";
+import { SuiClient } from "@mysten/sui.js/client";
+import { Ed25519Keypair } from "@mysten/sui.js/keypairs/ed25519";
+
 import { execSync } from "child_process";
 import { SuiPriceFeedContract } from "contract_manager";
 
@@ -29,7 +31,8 @@ export function buildForBytecodeAndDigest(packagePath: string) {
 }
 
 export async function upgradePyth(
-  signer: RawSigner,
+  keypair: Ed25519Keypair,
+  provider: SuiClient,
   modules: number[][],
   dependencies: string[],
   signedVaa: Buffer,
@@ -66,7 +69,8 @@ export async function upgradePyth(
 
   tx.setGasBudget(MIST_PER_SUI / 4n); // 0.25 SUI
 
-  return signer.signAndExecuteTransactionBlock({
+  return provider.signAndExecuteTransactionBlock({
+    signer: keypair,
     transactionBlock: tx,
     options: {
       showEffects: true,
@@ -76,7 +80,8 @@ export async function upgradePyth(
 }
 
 export async function migratePyth(
-  signer: RawSigner,
+  keypair: Ed25519Keypair,
+  provider: SuiClient,
   signedUpgradeVaa: Buffer,
   contract: SuiPriceFeedContract,
   pythPackageOld: string
@@ -98,7 +103,8 @@ export async function migratePyth(
 
   tx.setGasBudget(MIST_PER_SUI / 10n); //0.1 SUI
 
-  return signer.signAndExecuteTransactionBlock({
+  return provider.signAndExecuteTransactionBlock({
+    signer: keypair,
     transactionBlock: tx,
     options: {
       showEffects: true,

Някои файлове не бяха показани, защото твърде много файлове са промени