Quellcode durchsuchen

Fix sui js sdk and bump contract (#1071)

* Bump sui version

* Add sui cli package to lerna

* Fix bug in fetching price feed object ids after upgrade
Amin Moghaddam vor 2 Jahren
Ursprung
Commit
061f6a028d

+ 10 - 54
contract_manager/src/contracts/sui.ts

@@ -14,6 +14,7 @@ import { SuiPythClient } from "@pythnetwork/pyth-sui-js";
 
 export class SuiContract extends Contract {
   static type = "SuiContract";
+  private client: SuiPythClient;
 
   /**
    * Given the ids of the pyth state and wormhole state, create a new SuiContract
@@ -29,6 +30,11 @@ export class SuiContract extends Contract {
     public wormholeStateId: string
   ) {
     super();
+    this.client = new SuiPythClient(
+      this.getProvider(),
+      this.stateId,
+      this.wormholeStateId
+    );
   }
 
   static fromJson(
@@ -63,8 +69,7 @@ export class SuiContract extends Contract {
    * @param objectId
    */
   async getPackageId(objectId: ObjectId): Promise<ObjectId> {
-    const client = this.getSdkClient();
-    return client.getPackageId(objectId);
+    return this.client.getPackageId(objectId);
   }
 
   async getPythPackageId(): Promise<ObjectId> {
@@ -79,24 +84,6 @@ export class SuiContract extends Contract {
     return `${this.chain.getId()}_${this.stateId}`;
   }
 
-  /**
-   * Fetches the price table object id for the current state id
-   */
-  async getPriceTableId(): Promise<ObjectId> {
-    const provider = this.getProvider();
-    const result = await provider.getDynamicFieldObject({
-      parentId: this.stateId,
-      name: {
-        type: "vector<u8>",
-        value: "price_info",
-      },
-    });
-    if (!result.data) {
-      throw new Error("Price Table not found, contract may not be initialized");
-    }
-    return result.data.objectId;
-  }
-
   private async parsePrice(priceInfo: {
     type: string;
     fields: {
@@ -125,30 +112,9 @@ export class SuiContract extends Contract {
     };
   }
 
-  async getPriceFeedObjectId(feedId: string): Promise<ObjectId | undefined> {
-    const tableId = await this.getPriceTableId();
-    const provider = this.getProvider();
-    const result = await provider.getDynamicFieldObject({
-      parentId: tableId,
-      name: {
-        type: `${await this.getPythPackageId()}::price_identifier::PriceIdentifier`,
-        value: {
-          bytes: Array.from(Buffer.from(feedId, "hex")),
-        },
-      },
-    });
-    if (!result.data || !result.data.content) {
-      return undefined;
-    }
-    if (result.data.content.dataType !== "moveObject") {
-      throw new Error("Price feed type mismatch");
-    }
-    return result.data.content.fields.value;
-  }
-
   async getPriceFeed(feedId: string) {
     const provider = this.getProvider();
-    const priceInfoObjectId = await this.getPriceFeedObjectId(feedId);
+    const priceInfoObjectId = await this.client.getPriceFeedObjectId(feedId);
     if (!priceInfoObjectId) return undefined;
     const priceInfo = await provider.getObject({
       id: priceInfoObjectId,
@@ -206,22 +172,13 @@ export class SuiContract extends Contract {
     throw new Error("Use executeUpdatePriceFeedWithFeeds instead");
   }
 
-  getSdkClient(): SuiPythClient {
-    return new SuiPythClient(
-      this.getProvider(),
-      this.stateId,
-      this.wormholeStateId
-    );
-  }
-
   async executeUpdatePriceFeedWithFeeds(
     senderPrivateKey: string,
     vaas: Buffer[],
     feedIds: string[]
   ): Promise<TxResult> {
     const tx = new TransactionBlock();
-    const client = this.getSdkClient();
-    await client.updatePriceFeeds(tx, vaas, feedIds);
+    await this.client.updatePriceFeeds(tx, vaas, feedIds);
     const keypair = Ed25519Keypair.fromSecretKey(
       Buffer.from(senderPrivateKey, "hex")
     );
@@ -233,8 +190,7 @@ export class SuiContract extends Contract {
     vaas: Buffer[]
   ): Promise<TxResult> {
     const tx = new TransactionBlock();
-    const client = this.getSdkClient();
-    await client.createPriceFeed(tx, vaas);
+    await this.client.createPriceFeed(tx, vaas);
     const keypair = Ed25519Keypair.fromSecretKey(
       Buffer.from(senderPrivateKey, "hex")
     );

+ 1223 - 79
package-lock.json

@@ -22,6 +22,7 @@
         "target_chains/ethereum/sdk/solidity",
         "target_chains/ethereum/examples/oracle_swap/app",
         "target_chains/sui/sdk/js",
+        "target_chains/sui/cli",
         "third_party/pyth/p2w-relay",
         "wormhole_attester/sdk/js",
         "contract_manager"
@@ -13834,15 +13835,12 @@
       "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg=="
     },
     "node_modules/@scure/base": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz",
-      "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==",
-      "funding": [
-        {
-          "type": "individual",
-          "url": "https://paulmillr.com/funding/"
-        }
-      ]
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.3.tgz",
+      "integrity": "sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==",
+      "funding": {
+        "url": "https://paulmillr.com/funding/"
+      }
     },
     "node_modules/@scure/bip32": {
       "version": "1.1.0",
@@ -39915,9 +39913,9 @@
       }
     },
     "node_modules/node-fetch": {
-      "version": "2.6.8",
-      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.8.tgz",
-      "integrity": "sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg==",
+      "version": "2.7.0",
+      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
+      "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
       "dependencies": {
         "whatwg-url": "^5.0.0"
       },
@@ -43980,6 +43978,10 @@
       "resolved": "third_party/pyth/p2w-relay",
       "link": true
     },
+    "node_modules/pyth-sui-cli": {
+      "resolved": "target_chains/sui/cli",
+      "link": true
+    },
     "node_modules/q": {
       "version": "1.5.1",
       "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
@@ -59676,42 +59678,317 @@
         "node": ">=10.0.0"
       }
     },
-    "target_chains/sui/sdk/js": {
-      "name": "@pythnetwork/pyth-sui-js",
-      "version": "1.2.1",
+    "target_chains/sui/cli": {
+      "name": "pyth-sui-cli",
+      "version": "0.0.1",
       "license": "Apache-2.0",
       "dependencies": {
+        "@certusone/wormhole-sdk": "^0.9.12",
         "@mysten/sui.js": "^0.37.1",
-        "@pythnetwork/price-service-client": "*",
-        "buffer": "^6.0.3"
+        "@pythnetwork/client": "^2.17.0",
+        "@pythnetwork/price-service-client": "^1.4.0",
+        "@pythnetwork/price-service-sdk": "^1.2.0",
+        "prettier": "^2.8.7",
+        "typescript": "^5.0.4"
+      }
+    },
+    "target_chains/sui/cli/node_modules/@certusone/wormhole-sdk": {
+      "version": "0.9.24",
+      "resolved": "https://registry.npmjs.org/@certusone/wormhole-sdk/-/wormhole-sdk-0.9.24.tgz",
+      "integrity": "sha512-O2Ejd2fCP0uhM0ysQyXzuzZMBpMpySQN6fcJlL/Xk1LCVJQLPQtNfRK4oR04tYAnEJBVsAzoNYiX8dPSw+eNJQ==",
+      "dependencies": {
+        "@certusone/wormhole-sdk-proto-web": "0.0.6",
+        "@certusone/wormhole-sdk-wasm": "^0.0.1",
+        "@coral-xyz/borsh": "0.2.6",
+        "@mysten/sui.js": "0.32.2",
+        "@project-serum/anchor": "^0.25.0",
+        "@solana/spl-token": "^0.3.5",
+        "@solana/web3.js": "^1.66.2",
+        "@terra-money/terra.js": "3.1.9",
+        "@xpla/xpla.js": "^0.2.1",
+        "algosdk": "^2.4.0",
+        "aptos": "1.5.0",
+        "axios": "^0.24.0",
+        "bech32": "^2.0.0",
+        "binary-parser": "^2.2.1",
+        "bs58": "^4.0.1",
+        "elliptic": "^6.5.4",
+        "js-base64": "^3.6.1",
+        "near-api-js": "^1.0.0"
       },
-      "devDependencies": {
-        "@truffle/hdwallet-provider": "^2.1.5",
-        "@types/ethereum-protocol": "^1.0.2",
-        "@types/jest": "^29.4.0",
-        "@types/node": "^18.11.18",
-        "@types/web3-provider-engine": "^14.0.1",
-        "@types/yargs": "^17.0.20",
-        "@typescript-eslint/eslint-plugin": "^5.21.0",
-        "@typescript-eslint/parser": "^5.21.0",
-        "eslint": "^8.14.0",
-        "jest": "^29.4.1",
-        "prettier": "^2.6.2",
-        "ts-jest": "^29.0.5",
-        "typescript": "^4.6.3",
-        "web3": "^1.8.2",
-        "yargs": "^17.0.20"
+      "optionalDependencies": {
+        "@injectivelabs/networks": "1.10.12",
+        "@injectivelabs/sdk-ts": "1.10.72",
+        "@injectivelabs/utils": "1.10.12"
       }
     },
-    "target_chains/sui/sdk/js/node_modules/@mysten/bcs": {
-      "version": "0.7.3",
-      "resolved": "https://registry.npmjs.org/@mysten/bcs/-/bcs-0.7.3.tgz",
-      "integrity": "sha512-fbusBfsyc2MpTACi72H5edWJ670T84va+qn9jSPpb5BzZ+pzUM1Q0ApPrF5OT+mB1o5Ng+mxPQpBCZQkfiV2TA==",
+    "target_chains/sui/cli/node_modules/@certusone/wormhole-sdk/node_modules/@mysten/sui.js": {
+      "version": "0.32.2",
+      "resolved": "https://registry.npmjs.org/@mysten/sui.js/-/sui.js-0.32.2.tgz",
+      "integrity": "sha512-/Hm4xkGolJhqj8FvQr7QSHDTlxIvL52mtbOao9f75YjrBh7y1Uh9kbJSY7xiTF1NY9sv6p5hUVlYRJuM0Hvn9A==",
       "dependencies": {
-        "bs58": "^5.0.0"
+        "@mysten/bcs": "0.7.1",
+        "@noble/curves": "^1.0.0",
+        "@noble/hashes": "^1.3.0",
+        "@scure/bip32": "^1.3.0",
+        "@scure/bip39": "^1.2.0",
+        "@suchipi/femver": "^1.0.0",
+        "jayson": "^4.0.0",
+        "rpc-websockets": "^7.5.1",
+        "superstruct": "^1.0.3",
+        "tweetnacl": "^1.0.3"
+      },
+      "engines": {
+        "node": ">=16"
       }
     },
-    "target_chains/sui/sdk/js/node_modules/@mysten/sui.js": {
+    "target_chains/sui/cli/node_modules/@certusone/wormhole-sdk/node_modules/@scure/bip39": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz",
+      "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==",
+      "dependencies": {
+        "@noble/hashes": "~1.3.0",
+        "@scure/base": "~1.1.0"
+      },
+      "funding": {
+        "url": "https://paulmillr.com/funding/"
+      }
+    },
+    "target_chains/sui/cli/node_modules/@cosmjs/amino": {
+      "version": "0.30.1",
+      "resolved": "https://registry.npmjs.org/@cosmjs/amino/-/amino-0.30.1.tgz",
+      "integrity": "sha512-yNHnzmvAlkETDYIpeCTdVqgvrdt1qgkOXwuRVi8s27UKI5hfqyE9fJ/fuunXE6ZZPnKkjIecDznmuUOMrMvw4w==",
+      "optional": true,
+      "dependencies": {
+        "@cosmjs/crypto": "^0.30.1",
+        "@cosmjs/encoding": "^0.30.1",
+        "@cosmjs/math": "^0.30.1",
+        "@cosmjs/utils": "^0.30.1"
+      }
+    },
+    "target_chains/sui/cli/node_modules/@cosmjs/crypto": {
+      "version": "0.30.1",
+      "resolved": "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.30.1.tgz",
+      "integrity": "sha512-rAljUlake3MSXs9xAm87mu34GfBLN0h/1uPPV6jEwClWjNkAMotzjC0ab9MARy5FFAvYHL3lWb57bhkbt2GtzQ==",
+      "optional": true,
+      "dependencies": {
+        "@cosmjs/encoding": "^0.30.1",
+        "@cosmjs/math": "^0.30.1",
+        "@cosmjs/utils": "^0.30.1",
+        "@noble/hashes": "^1",
+        "bn.js": "^5.2.0",
+        "elliptic": "^6.5.4",
+        "libsodium-wrappers": "^0.7.6"
+      }
+    },
+    "target_chains/sui/cli/node_modules/@cosmjs/encoding": {
+      "version": "0.30.1",
+      "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.30.1.tgz",
+      "integrity": "sha512-rXmrTbgqwihORwJ3xYhIgQFfMSrwLu1s43RIK9I8EBudPx3KmnmyAKzMOVsRDo9edLFNuZ9GIvysUCwQfq3WlQ==",
+      "optional": true,
+      "dependencies": {
+        "base64-js": "^1.3.0",
+        "bech32": "^1.1.4",
+        "readonly-date": "^1.0.0"
+      }
+    },
+    "target_chains/sui/cli/node_modules/@cosmjs/encoding/node_modules/bech32": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz",
+      "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==",
+      "optional": true
+    },
+    "target_chains/sui/cli/node_modules/@cosmjs/json-rpc": {
+      "version": "0.30.1",
+      "resolved": "https://registry.npmjs.org/@cosmjs/json-rpc/-/json-rpc-0.30.1.tgz",
+      "integrity": "sha512-pitfC/2YN9t+kXZCbNuyrZ6M8abnCC2n62m+JtU9vQUfaEtVsgy+1Fk4TRQ175+pIWSdBMFi2wT8FWVEE4RhxQ==",
+      "optional": true,
+      "dependencies": {
+        "@cosmjs/stream": "^0.30.1",
+        "xstream": "^11.14.0"
+      }
+    },
+    "target_chains/sui/cli/node_modules/@cosmjs/math": {
+      "version": "0.30.1",
+      "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.30.1.tgz",
+      "integrity": "sha512-yaoeI23pin9ZiPHIisa6qqLngfnBR/25tSaWpkTm8Cy10MX70UF5oN4+/t1heLaM6SSmRrhk3psRkV4+7mH51Q==",
+      "optional": true,
+      "dependencies": {
+        "bn.js": "^5.2.0"
+      }
+    },
+    "target_chains/sui/cli/node_modules/@cosmjs/proto-signing": {
+      "version": "0.30.1",
+      "resolved": "https://registry.npmjs.org/@cosmjs/proto-signing/-/proto-signing-0.30.1.tgz",
+      "integrity": "sha512-tXh8pPYXV4aiJVhTKHGyeZekjj+K9s2KKojMB93Gcob2DxUjfKapFYBMJSgfKPuWUPEmyr8Q9km2hplI38ILgQ==",
+      "optional": true,
+      "dependencies": {
+        "@cosmjs/amino": "^0.30.1",
+        "@cosmjs/crypto": "^0.30.1",
+        "@cosmjs/encoding": "^0.30.1",
+        "@cosmjs/math": "^0.30.1",
+        "@cosmjs/utils": "^0.30.1",
+        "cosmjs-types": "^0.7.1",
+        "long": "^4.0.0"
+      }
+    },
+    "target_chains/sui/cli/node_modules/@cosmjs/socket": {
+      "version": "0.30.1",
+      "resolved": "https://registry.npmjs.org/@cosmjs/socket/-/socket-0.30.1.tgz",
+      "integrity": "sha512-r6MpDL+9N+qOS/D5VaxnPaMJ3flwQ36G+vPvYJsXArj93BjgyFB7BwWwXCQDzZ+23cfChPUfhbINOenr8N2Kow==",
+      "optional": true,
+      "dependencies": {
+        "@cosmjs/stream": "^0.30.1",
+        "isomorphic-ws": "^4.0.1",
+        "ws": "^7",
+        "xstream": "^11.14.0"
+      }
+    },
+    "target_chains/sui/cli/node_modules/@cosmjs/stargate": {
+      "version": "0.30.1",
+      "resolved": "https://registry.npmjs.org/@cosmjs/stargate/-/stargate-0.30.1.tgz",
+      "integrity": "sha512-RdbYKZCGOH8gWebO7r6WvNnQMxHrNXInY/gPHPzMjbQF6UatA6fNM2G2tdgS5j5u7FTqlCI10stNXrknaNdzog==",
+      "optional": true,
+      "dependencies": {
+        "@confio/ics23": "^0.6.8",
+        "@cosmjs/amino": "^0.30.1",
+        "@cosmjs/encoding": "^0.30.1",
+        "@cosmjs/math": "^0.30.1",
+        "@cosmjs/proto-signing": "^0.30.1",
+        "@cosmjs/stream": "^0.30.1",
+        "@cosmjs/tendermint-rpc": "^0.30.1",
+        "@cosmjs/utils": "^0.30.1",
+        "cosmjs-types": "^0.7.1",
+        "long": "^4.0.0",
+        "protobufjs": "~6.11.3",
+        "xstream": "^11.14.0"
+      }
+    },
+    "target_chains/sui/cli/node_modules/@cosmjs/stream": {
+      "version": "0.30.1",
+      "resolved": "https://registry.npmjs.org/@cosmjs/stream/-/stream-0.30.1.tgz",
+      "integrity": "sha512-Fg0pWz1zXQdoxQZpdHRMGvUH5RqS6tPv+j9Eh7Q953UjMlrwZVo0YFLC8OTf/HKVf10E4i0u6aM8D69Q6cNkgQ==",
+      "optional": true,
+      "dependencies": {
+        "xstream": "^11.14.0"
+      }
+    },
+    "target_chains/sui/cli/node_modules/@cosmjs/tendermint-rpc": {
+      "version": "0.30.1",
+      "resolved": "https://registry.npmjs.org/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.30.1.tgz",
+      "integrity": "sha512-Z3nCwhXSbPZJ++v85zHObeUggrEHVfm1u18ZRwXxFE9ZMl5mXTybnwYhczuYOl7KRskgwlB+rID0WYACxj4wdQ==",
+      "optional": true,
+      "dependencies": {
+        "@cosmjs/crypto": "^0.30.1",
+        "@cosmjs/encoding": "^0.30.1",
+        "@cosmjs/json-rpc": "^0.30.1",
+        "@cosmjs/math": "^0.30.1",
+        "@cosmjs/socket": "^0.30.1",
+        "@cosmjs/stream": "^0.30.1",
+        "@cosmjs/utils": "^0.30.1",
+        "axios": "^0.21.2",
+        "readonly-date": "^1.0.0",
+        "xstream": "^11.14.0"
+      }
+    },
+    "target_chains/sui/cli/node_modules/@cosmjs/tendermint-rpc/node_modules/axios": {
+      "version": "0.21.4",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
+      "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
+      "optional": true,
+      "dependencies": {
+        "follow-redirects": "^1.14.0"
+      }
+    },
+    "target_chains/sui/cli/node_modules/@cosmjs/utils": {
+      "version": "0.30.1",
+      "resolved": "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.30.1.tgz",
+      "integrity": "sha512-KvvX58MGMWh7xA+N+deCfunkA/ZNDvFLw4YbOmX3f/XBIkqrVY7qlotfy2aNb1kgp6h4B6Yc8YawJPDTfvWX7g==",
+      "optional": true
+    },
+    "target_chains/sui/cli/node_modules/@injectivelabs/sdk-ts": {
+      "version": "1.10.72",
+      "resolved": "https://registry.npmjs.org/@injectivelabs/sdk-ts/-/sdk-ts-1.10.72.tgz",
+      "integrity": "sha512-A5mHNNBgO4fI1c/7CZ0bGfVXliy8laP+VaYZ++aWh1YyudoZw4CTCEmLetZRy7AUU3XcfbHa8sAImRi7db+v6Q==",
+      "hasInstallScript": true,
+      "optional": true,
+      "dependencies": {
+        "@apollo/client": "^3.5.8",
+        "@cosmjs/amino": "^0.30.1",
+        "@cosmjs/proto-signing": "^0.30.1",
+        "@cosmjs/stargate": "^0.30.1",
+        "@ethersproject/bytes": "^5.7.0",
+        "@injectivelabs/core-proto-ts": "^0.0.14",
+        "@injectivelabs/exceptions": "^1.10.12",
+        "@injectivelabs/grpc-web": "^0.0.1",
+        "@injectivelabs/grpc-web-node-http-transport": "^0.0.2",
+        "@injectivelabs/grpc-web-react-native-transport": "^0.0.2",
+        "@injectivelabs/indexer-proto-ts": "1.10.8-rc.4",
+        "@injectivelabs/mito-proto-ts": "1.0.9",
+        "@injectivelabs/networks": "^1.10.12",
+        "@injectivelabs/test-utils": "^1.10.12",
+        "@injectivelabs/token-metadata": "^1.10.42",
+        "@injectivelabs/ts-types": "^1.10.12",
+        "@injectivelabs/utils": "^1.10.12",
+        "@metamask/eth-sig-util": "^4.0.0",
+        "axios": "^0.27.2",
+        "bech32": "^2.0.0",
+        "bip39": "^3.0.4",
+        "cosmjs-types": "^0.7.1",
+        "eth-crypto": "^2.6.0",
+        "ethereumjs-util": "^7.1.4",
+        "ethers": "^5.7.2",
+        "google-protobuf": "^3.21.0",
+        "graphql": "^16.3.0",
+        "http-status-codes": "^2.2.0",
+        "js-sha3": "^0.8.0",
+        "jscrypto": "^1.0.3",
+        "keccak256": "^1.0.6",
+        "link-module-alias": "^1.2.0",
+        "rxjs": "^7.8.0",
+        "secp256k1": "^4.0.3",
+        "shx": "^0.3.2",
+        "snakecase-keys": "^5.4.1"
+      }
+    },
+    "target_chains/sui/cli/node_modules/@injectivelabs/sdk-ts/node_modules/axios": {
+      "version": "0.27.2",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz",
+      "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
+      "optional": true,
+      "dependencies": {
+        "follow-redirects": "^1.14.9",
+        "form-data": "^4.0.0"
+      }
+    },
+    "target_chains/sui/cli/node_modules/@injectivelabs/utils": {
+      "version": "1.10.12",
+      "resolved": "https://registry.npmjs.org/@injectivelabs/utils/-/utils-1.10.12.tgz",
+      "integrity": "sha512-c8al79nxIJgV1cBAdW2TPDGldj/8gm5k0h5TIN/AJs8/AeIjpTwwVGfLY3QvPOpRsxuQ9CjBkTXrAcSL1wwkcw==",
+      "hasInstallScript": true,
+      "optional": true,
+      "dependencies": {
+        "@injectivelabs/exceptions": "^1.10.12",
+        "@injectivelabs/ts-types": "^1.10.12",
+        "axios": "^0.21.1",
+        "bignumber.js": "^9.0.1",
+        "http-status-codes": "^2.2.0",
+        "link-module-alias": "^1.2.0",
+        "shx": "^0.3.2",
+        "snakecase-keys": "^5.1.2",
+        "store2": "^2.12.0"
+      }
+    },
+    "target_chains/sui/cli/node_modules/@injectivelabs/utils/node_modules/axios": {
+      "version": "0.21.4",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
+      "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
+      "optional": true,
+      "dependencies": {
+        "follow-redirects": "^1.14.0"
+      }
+    },
+    "target_chains/sui/cli/node_modules/@mysten/sui.js": {
       "version": "0.37.1",
       "resolved": "https://registry.npmjs.org/@mysten/sui.js/-/sui.js-0.37.1.tgz",
       "integrity": "sha512-nEOqnjUqb/VJcVk23LgZOX1FmBib/mBCwAWaJhtsCHLwv2jIAfCPY/fpB9lJ62QHrM8UFclpWxsLkqcUkKyPgA==",
@@ -59731,21 +60008,49 @@
         "node": ">=16"
       }
     },
-    "target_chains/sui/sdk/js/node_modules/@noble/curves": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz",
-      "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==",
+    "target_chains/sui/cli/node_modules/@mysten/sui.js/node_modules/@mysten/bcs": {
+      "version": "0.7.3",
+      "resolved": "https://registry.npmjs.org/@mysten/bcs/-/bcs-0.7.3.tgz",
+      "integrity": "sha512-fbusBfsyc2MpTACi72H5edWJ670T84va+qn9jSPpb5BzZ+pzUM1Q0ApPrF5OT+mB1o5Ng+mxPQpBCZQkfiV2TA==",
       "dependencies": {
-        "@noble/hashes": "1.3.1"
+        "bs58": "^5.0.0"
+      }
+    },
+    "target_chains/sui/cli/node_modules/@mysten/sui.js/node_modules/@scure/bip39": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz",
+      "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==",
+      "dependencies": {
+        "@noble/hashes": "~1.3.0",
+        "@scure/base": "~1.1.0"
       },
       "funding": {
         "url": "https://paulmillr.com/funding/"
       }
     },
-    "target_chains/sui/sdk/js/node_modules/@noble/hashes": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz",
-      "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==",
+    "target_chains/sui/cli/node_modules/@mysten/sui.js/node_modules/bs58": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz",
+      "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==",
+      "dependencies": {
+        "base-x": "^4.0.0"
+      }
+    },
+    "target_chains/sui/cli/node_modules/@noble/curves": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz",
+      "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==",
+      "dependencies": {
+        "@noble/hashes": "1.3.2"
+      },
+      "funding": {
+        "url": "https://paulmillr.com/funding/"
+      }
+    },
+    "target_chains/sui/cli/node_modules/@noble/hashes": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz",
+      "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==",
       "engines": {
         "node": ">= 16"
       },
@@ -59753,45 +60058,354 @@
         "url": "https://paulmillr.com/funding/"
       }
     },
-    "target_chains/sui/sdk/js/node_modules/@scure/bip32": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.1.tgz",
-      "integrity": "sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==",
+    "target_chains/sui/cli/node_modules/@scure/bip32": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.2.tgz",
+      "integrity": "sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==",
       "dependencies": {
-        "@noble/curves": "~1.1.0",
-        "@noble/hashes": "~1.3.1",
-        "@scure/base": "~1.1.0"
+        "@noble/curves": "~1.2.0",
+        "@noble/hashes": "~1.3.2",
+        "@scure/base": "~1.1.2"
       },
       "funding": {
         "url": "https://paulmillr.com/funding/"
       }
     },
-    "target_chains/sui/sdk/js/node_modules/@scure/bip39": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz",
-      "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==",
+    "target_chains/sui/cli/node_modules/algosdk": {
+      "version": "2.6.0",
+      "resolved": "https://registry.npmjs.org/algosdk/-/algosdk-2.6.0.tgz",
+      "integrity": "sha512-xYSb2xPG4nLPlJvqjA4ebR0s++YrjZK1+UfaEV84u2HkIwuRhEUmryDPcAuLIfTp3eyY99v/FduOK02K2Hnu8Q==",
       "dependencies": {
-        "@noble/hashes": "~1.3.0",
-        "@scure/base": "~1.1.0"
+        "algo-msgpack-with-bigint": "^2.1.1",
+        "buffer": "^6.0.3",
+        "cross-fetch": "^4.0.0",
+        "hi-base32": "^0.5.1",
+        "js-sha256": "^0.9.0",
+        "js-sha3": "^0.8.0",
+        "js-sha512": "^0.8.0",
+        "json-bigint": "^1.0.0",
+        "tweetnacl": "^1.0.3",
+        "vlq": "^2.0.4"
       },
-      "funding": {
-        "url": "https://paulmillr.com/funding/"
+      "engines": {
+        "node": ">=18.0.0"
       }
     },
-    "target_chains/sui/sdk/js/node_modules/base-x": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz",
-      "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw=="
+    "target_chains/sui/cli/node_modules/aptos": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/aptos/-/aptos-1.5.0.tgz",
+      "integrity": "sha512-N7OuRtU7IYHkDkNx+4QS3g/QQGCp+36KzYn3oXPmT7Kttfuv+UKliQVdjy3cLmwd/DCQSh9ObTovwdxnHjUn0g==",
+      "dependencies": {
+        "@noble/hashes": "1.1.3",
+        "@scure/bip39": "1.1.0",
+        "axios": "0.27.2",
+        "form-data": "4.0.0",
+        "tweetnacl": "1.0.3"
+      },
+      "engines": {
+        "node": ">=11.0.0"
+      }
     },
-    "target_chains/sui/sdk/js/node_modules/bs58": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz",
-      "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==",
+    "target_chains/sui/cli/node_modules/aptos/node_modules/@noble/hashes": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.3.tgz",
+      "integrity": "sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A==",
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://paulmillr.com/funding/"
+        }
+      ]
+    },
+    "target_chains/sui/cli/node_modules/aptos/node_modules/axios": {
+      "version": "0.27.2",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz",
+      "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
       "dependencies": {
-        "base-x": "^4.0.0"
+        "follow-redirects": "^1.14.9",
+        "form-data": "^4.0.0"
       }
     },
-    "target_chains/sui/sdk/js/node_modules/buffer": {
+    "target_chains/sui/cli/node_modules/axios": {
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz",
+      "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==",
+      "dependencies": {
+        "follow-redirects": "^1.14.4"
+      }
+    },
+    "target_chains/sui/cli/node_modules/base-x": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz",
+      "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw=="
+    },
+    "target_chains/sui/cli/node_modules/buffer": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+      "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "dependencies": {
+        "base64-js": "^1.3.1",
+        "ieee754": "^1.2.1"
+      }
+    },
+    "target_chains/sui/cli/node_modules/cosmjs-types": {
+      "version": "0.7.2",
+      "resolved": "https://registry.npmjs.org/cosmjs-types/-/cosmjs-types-0.7.2.tgz",
+      "integrity": "sha512-vf2uLyktjr/XVAgEq0DjMxeAWh1yYREe7AMHDKd7EiHVqxBPCaBS+qEEQUkXbR9ndnckqr1sUG8BQhazh4X5lA==",
+      "optional": true,
+      "dependencies": {
+        "long": "^4.0.0",
+        "protobufjs": "~6.11.2"
+      }
+    },
+    "target_chains/sui/cli/node_modules/cross-fetch": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz",
+      "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==",
+      "dependencies": {
+        "node-fetch": "^2.6.12"
+      }
+    },
+    "target_chains/sui/cli/node_modules/jayson": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/jayson/-/jayson-4.1.0.tgz",
+      "integrity": "sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==",
+      "dependencies": {
+        "@types/connect": "^3.4.33",
+        "@types/node": "^12.12.54",
+        "@types/ws": "^7.4.4",
+        "commander": "^2.20.3",
+        "delay": "^5.0.0",
+        "es6-promisify": "^5.0.0",
+        "eyes": "^0.1.8",
+        "isomorphic-ws": "^4.0.1",
+        "json-stringify-safe": "^5.0.1",
+        "JSONStream": "^1.3.5",
+        "uuid": "^8.3.2",
+        "ws": "^7.4.5"
+      },
+      "bin": {
+        "jayson": "bin/jayson.js"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "target_chains/sui/cli/node_modules/jayson/node_modules/@types/node": {
+      "version": "12.20.55",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz",
+      "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ=="
+    },
+    "target_chains/sui/cli/node_modules/prettier": {
+      "version": "2.8.8",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
+      "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
+      "bin": {
+        "prettier": "bin-prettier.js"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      },
+      "funding": {
+        "url": "https://github.com/prettier/prettier?sponsor=1"
+      }
+    },
+    "target_chains/sui/cli/node_modules/protobufjs": {
+      "version": "6.11.4",
+      "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.4.tgz",
+      "integrity": "sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==",
+      "hasInstallScript": true,
+      "optional": true,
+      "dependencies": {
+        "@protobufjs/aspromise": "^1.1.2",
+        "@protobufjs/base64": "^1.1.2",
+        "@protobufjs/codegen": "^2.0.4",
+        "@protobufjs/eventemitter": "^1.1.0",
+        "@protobufjs/fetch": "^1.1.0",
+        "@protobufjs/float": "^1.0.2",
+        "@protobufjs/inquire": "^1.1.0",
+        "@protobufjs/path": "^1.1.2",
+        "@protobufjs/pool": "^1.1.0",
+        "@protobufjs/utf8": "^1.1.0",
+        "@types/long": "^4.0.1",
+        "@types/node": ">=13.7.0",
+        "long": "^4.0.0"
+      },
+      "bin": {
+        "pbjs": "bin/pbjs",
+        "pbts": "bin/pbts"
+      }
+    },
+    "target_chains/sui/cli/node_modules/superstruct": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-1.0.3.tgz",
+      "integrity": "sha512-8iTn3oSS8nRGn+C2pgXSKPI3jmpm6FExNazNpjvqS6ZUJQCej3PUXEKM8NjHBOs54ExM+LPW/FBRhymrdcCiSg==",
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "target_chains/sui/cli/node_modules/typescript": {
+      "version": "5.2.2",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
+      "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
+      "bin": {
+        "tsc": "bin/tsc",
+        "tsserver": "bin/tsserver"
+      },
+      "engines": {
+        "node": ">=14.17"
+      }
+    },
+    "target_chains/sui/cli/node_modules/ws": {
+      "version": "7.5.9",
+      "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
+      "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
+      "engines": {
+        "node": ">=8.3.0"
+      },
+      "peerDependencies": {
+        "bufferutil": "^4.0.1",
+        "utf-8-validate": "^5.0.2"
+      },
+      "peerDependenciesMeta": {
+        "bufferutil": {
+          "optional": true
+        },
+        "utf-8-validate": {
+          "optional": true
+        }
+      }
+    },
+    "target_chains/sui/sdk/js": {
+      "name": "@pythnetwork/pyth-sui-js",
+      "version": "1.2.2",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@mysten/sui.js": "^0.37.1",
+        "@pythnetwork/price-service-client": "*",
+        "buffer": "^6.0.3"
+      },
+      "devDependencies": {
+        "@truffle/hdwallet-provider": "^2.1.5",
+        "@types/ethereum-protocol": "^1.0.2",
+        "@types/jest": "^29.4.0",
+        "@types/node": "^18.11.18",
+        "@types/web3-provider-engine": "^14.0.1",
+        "@types/yargs": "^17.0.20",
+        "@typescript-eslint/eslint-plugin": "^5.21.0",
+        "@typescript-eslint/parser": "^5.21.0",
+        "eslint": "^8.14.0",
+        "jest": "^29.4.1",
+        "prettier": "^2.6.2",
+        "ts-jest": "^29.0.5",
+        "typescript": "^4.6.3",
+        "web3": "^1.8.2",
+        "yargs": "^17.0.20"
+      }
+    },
+    "target_chains/sui/sdk/js/node_modules/@mysten/bcs": {
+      "version": "0.7.3",
+      "resolved": "https://registry.npmjs.org/@mysten/bcs/-/bcs-0.7.3.tgz",
+      "integrity": "sha512-fbusBfsyc2MpTACi72H5edWJ670T84va+qn9jSPpb5BzZ+pzUM1Q0ApPrF5OT+mB1o5Ng+mxPQpBCZQkfiV2TA==",
+      "dependencies": {
+        "bs58": "^5.0.0"
+      }
+    },
+    "target_chains/sui/sdk/js/node_modules/@mysten/sui.js": {
+      "version": "0.37.1",
+      "resolved": "https://registry.npmjs.org/@mysten/sui.js/-/sui.js-0.37.1.tgz",
+      "integrity": "sha512-nEOqnjUqb/VJcVk23LgZOX1FmBib/mBCwAWaJhtsCHLwv2jIAfCPY/fpB9lJ62QHrM8UFclpWxsLkqcUkKyPgA==",
+      "dependencies": {
+        "@mysten/bcs": "0.7.3",
+        "@noble/curves": "^1.0.0",
+        "@noble/hashes": "^1.3.0",
+        "@open-rpc/client-js": "^1.8.1",
+        "@scure/bip32": "^1.3.0",
+        "@scure/bip39": "^1.2.0",
+        "@suchipi/femver": "^1.0.0",
+        "events": "^3.3.0",
+        "superstruct": "^1.0.3",
+        "tweetnacl": "^1.0.3"
+      },
+      "engines": {
+        "node": ">=16"
+      }
+    },
+    "target_chains/sui/sdk/js/node_modules/@noble/curves": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz",
+      "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==",
+      "dependencies": {
+        "@noble/hashes": "1.3.1"
+      },
+      "funding": {
+        "url": "https://paulmillr.com/funding/"
+      }
+    },
+    "target_chains/sui/sdk/js/node_modules/@noble/hashes": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz",
+      "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==",
+      "engines": {
+        "node": ">= 16"
+      },
+      "funding": {
+        "url": "https://paulmillr.com/funding/"
+      }
+    },
+    "target_chains/sui/sdk/js/node_modules/@scure/bip32": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.1.tgz",
+      "integrity": "sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==",
+      "dependencies": {
+        "@noble/curves": "~1.1.0",
+        "@noble/hashes": "~1.3.1",
+        "@scure/base": "~1.1.0"
+      },
+      "funding": {
+        "url": "https://paulmillr.com/funding/"
+      }
+    },
+    "target_chains/sui/sdk/js/node_modules/@scure/bip39": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz",
+      "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==",
+      "dependencies": {
+        "@noble/hashes": "~1.3.0",
+        "@scure/base": "~1.1.0"
+      },
+      "funding": {
+        "url": "https://paulmillr.com/funding/"
+      }
+    },
+    "target_chains/sui/sdk/js/node_modules/base-x": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz",
+      "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw=="
+    },
+    "target_chains/sui/sdk/js/node_modules/bs58": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz",
+      "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==",
+      "dependencies": {
+        "base-x": "^4.0.0"
+      }
+    },
+    "target_chains/sui/sdk/js/node_modules/buffer": {
       "version": "6.0.3",
       "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
       "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
@@ -73296,9 +73910,9 @@
       "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg=="
     },
     "@scure/base": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz",
-      "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA=="
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.3.tgz",
+      "integrity": "sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q=="
     },
     "@scure/bip32": {
       "version": "1.1.0",
@@ -94824,9 +95438,9 @@
       "integrity": "sha512-3dBuMF/XPy5WFi3XiiXaglafzoycRH5GjmRz1nAt2uI9D+TcBrc+n/AzH8bzLHR85Wsf6vZSZblzw+MiUS/WNQ=="
     },
     "node-fetch": {
-      "version": "2.6.8",
-      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.8.tgz",
-      "integrity": "sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg==",
+      "version": "2.7.0",
+      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
+      "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
       "requires": {
         "whatwg-url": "^5.0.0"
       }
@@ -98832,6 +99446,536 @@
         }
       }
     },
+    "pyth-sui-cli": {
+      "version": "file:target_chains/sui/cli",
+      "requires": {
+        "@certusone/wormhole-sdk": "^0.9.12",
+        "@mysten/sui.js": "^0.37.1",
+        "@pythnetwork/client": "^2.17.0",
+        "@pythnetwork/price-service-client": "^1.4.0",
+        "@pythnetwork/price-service-sdk": "^1.2.0",
+        "prettier": "^2.8.7",
+        "typescript": "^5.0.4"
+      },
+      "dependencies": {
+        "@certusone/wormhole-sdk": {
+          "version": "0.9.24",
+          "resolved": "https://registry.npmjs.org/@certusone/wormhole-sdk/-/wormhole-sdk-0.9.24.tgz",
+          "integrity": "sha512-O2Ejd2fCP0uhM0ysQyXzuzZMBpMpySQN6fcJlL/Xk1LCVJQLPQtNfRK4oR04tYAnEJBVsAzoNYiX8dPSw+eNJQ==",
+          "requires": {
+            "@certusone/wormhole-sdk-proto-web": "0.0.6",
+            "@certusone/wormhole-sdk-wasm": "^0.0.1",
+            "@coral-xyz/borsh": "0.2.6",
+            "@injectivelabs/networks": "1.10.12",
+            "@injectivelabs/sdk-ts": "1.10.72",
+            "@injectivelabs/utils": "1.10.12",
+            "@mysten/sui.js": "0.32.2",
+            "@project-serum/anchor": "^0.25.0",
+            "@solana/spl-token": "^0.3.5",
+            "@solana/web3.js": "^1.66.2",
+            "@terra-money/terra.js": "3.1.9",
+            "@xpla/xpla.js": "^0.2.1",
+            "algosdk": "^2.4.0",
+            "aptos": "1.5.0",
+            "axios": "^0.24.0",
+            "bech32": "^2.0.0",
+            "binary-parser": "^2.2.1",
+            "bs58": "^4.0.1",
+            "elliptic": "^6.5.4",
+            "js-base64": "^3.6.1",
+            "near-api-js": "^1.0.0"
+          },
+          "dependencies": {
+            "@mysten/sui.js": {
+              "version": "0.32.2",
+              "resolved": "https://registry.npmjs.org/@mysten/sui.js/-/sui.js-0.32.2.tgz",
+              "integrity": "sha512-/Hm4xkGolJhqj8FvQr7QSHDTlxIvL52mtbOao9f75YjrBh7y1Uh9kbJSY7xiTF1NY9sv6p5hUVlYRJuM0Hvn9A==",
+              "requires": {
+                "@mysten/bcs": "0.7.1",
+                "@noble/curves": "^1.0.0",
+                "@noble/hashes": "^1.3.0",
+                "@scure/bip32": "^1.3.0",
+                "@scure/bip39": "^1.2.0",
+                "@suchipi/femver": "^1.0.0",
+                "jayson": "^4.0.0",
+                "rpc-websockets": "^7.5.1",
+                "superstruct": "^1.0.3",
+                "tweetnacl": "^1.0.3"
+              }
+            },
+            "@scure/bip39": {
+              "version": "1.2.1",
+              "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz",
+              "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==",
+              "requires": {
+                "@noble/hashes": "~1.3.0",
+                "@scure/base": "~1.1.0"
+              }
+            }
+          }
+        },
+        "@cosmjs/amino": {
+          "version": "0.30.1",
+          "resolved": "https://registry.npmjs.org/@cosmjs/amino/-/amino-0.30.1.tgz",
+          "integrity": "sha512-yNHnzmvAlkETDYIpeCTdVqgvrdt1qgkOXwuRVi8s27UKI5hfqyE9fJ/fuunXE6ZZPnKkjIecDznmuUOMrMvw4w==",
+          "optional": true,
+          "requires": {
+            "@cosmjs/crypto": "^0.30.1",
+            "@cosmjs/encoding": "^0.30.1",
+            "@cosmjs/math": "^0.30.1",
+            "@cosmjs/utils": "^0.30.1"
+          }
+        },
+        "@cosmjs/crypto": {
+          "version": "0.30.1",
+          "resolved": "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.30.1.tgz",
+          "integrity": "sha512-rAljUlake3MSXs9xAm87mu34GfBLN0h/1uPPV6jEwClWjNkAMotzjC0ab9MARy5FFAvYHL3lWb57bhkbt2GtzQ==",
+          "optional": true,
+          "requires": {
+            "@cosmjs/encoding": "^0.30.1",
+            "@cosmjs/math": "^0.30.1",
+            "@cosmjs/utils": "^0.30.1",
+            "@noble/hashes": "^1",
+            "bn.js": "^5.2.0",
+            "elliptic": "^6.5.4",
+            "libsodium-wrappers": "^0.7.6"
+          }
+        },
+        "@cosmjs/encoding": {
+          "version": "0.30.1",
+          "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.30.1.tgz",
+          "integrity": "sha512-rXmrTbgqwihORwJ3xYhIgQFfMSrwLu1s43RIK9I8EBudPx3KmnmyAKzMOVsRDo9edLFNuZ9GIvysUCwQfq3WlQ==",
+          "optional": true,
+          "requires": {
+            "base64-js": "^1.3.0",
+            "bech32": "^1.1.4",
+            "readonly-date": "^1.0.0"
+          },
+          "dependencies": {
+            "bech32": {
+              "version": "1.1.4",
+              "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz",
+              "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==",
+              "optional": true
+            }
+          }
+        },
+        "@cosmjs/json-rpc": {
+          "version": "0.30.1",
+          "resolved": "https://registry.npmjs.org/@cosmjs/json-rpc/-/json-rpc-0.30.1.tgz",
+          "integrity": "sha512-pitfC/2YN9t+kXZCbNuyrZ6M8abnCC2n62m+JtU9vQUfaEtVsgy+1Fk4TRQ175+pIWSdBMFi2wT8FWVEE4RhxQ==",
+          "optional": true,
+          "requires": {
+            "@cosmjs/stream": "^0.30.1",
+            "xstream": "^11.14.0"
+          }
+        },
+        "@cosmjs/math": {
+          "version": "0.30.1",
+          "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.30.1.tgz",
+          "integrity": "sha512-yaoeI23pin9ZiPHIisa6qqLngfnBR/25tSaWpkTm8Cy10MX70UF5oN4+/t1heLaM6SSmRrhk3psRkV4+7mH51Q==",
+          "optional": true,
+          "requires": {
+            "bn.js": "^5.2.0"
+          }
+        },
+        "@cosmjs/proto-signing": {
+          "version": "0.30.1",
+          "resolved": "https://registry.npmjs.org/@cosmjs/proto-signing/-/proto-signing-0.30.1.tgz",
+          "integrity": "sha512-tXh8pPYXV4aiJVhTKHGyeZekjj+K9s2KKojMB93Gcob2DxUjfKapFYBMJSgfKPuWUPEmyr8Q9km2hplI38ILgQ==",
+          "optional": true,
+          "requires": {
+            "@cosmjs/amino": "^0.30.1",
+            "@cosmjs/crypto": "^0.30.1",
+            "@cosmjs/encoding": "^0.30.1",
+            "@cosmjs/math": "^0.30.1",
+            "@cosmjs/utils": "^0.30.1",
+            "cosmjs-types": "^0.7.1",
+            "long": "^4.0.0"
+          }
+        },
+        "@cosmjs/socket": {
+          "version": "0.30.1",
+          "resolved": "https://registry.npmjs.org/@cosmjs/socket/-/socket-0.30.1.tgz",
+          "integrity": "sha512-r6MpDL+9N+qOS/D5VaxnPaMJ3flwQ36G+vPvYJsXArj93BjgyFB7BwWwXCQDzZ+23cfChPUfhbINOenr8N2Kow==",
+          "optional": true,
+          "requires": {
+            "@cosmjs/stream": "^0.30.1",
+            "isomorphic-ws": "^4.0.1",
+            "ws": "^7",
+            "xstream": "^11.14.0"
+          }
+        },
+        "@cosmjs/stargate": {
+          "version": "0.30.1",
+          "resolved": "https://registry.npmjs.org/@cosmjs/stargate/-/stargate-0.30.1.tgz",
+          "integrity": "sha512-RdbYKZCGOH8gWebO7r6WvNnQMxHrNXInY/gPHPzMjbQF6UatA6fNM2G2tdgS5j5u7FTqlCI10stNXrknaNdzog==",
+          "optional": true,
+          "requires": {
+            "@confio/ics23": "^0.6.8",
+            "@cosmjs/amino": "^0.30.1",
+            "@cosmjs/encoding": "^0.30.1",
+            "@cosmjs/math": "^0.30.1",
+            "@cosmjs/proto-signing": "^0.30.1",
+            "@cosmjs/stream": "^0.30.1",
+            "@cosmjs/tendermint-rpc": "^0.30.1",
+            "@cosmjs/utils": "^0.30.1",
+            "cosmjs-types": "^0.7.1",
+            "long": "^4.0.0",
+            "protobufjs": "~6.11.3",
+            "xstream": "^11.14.0"
+          }
+        },
+        "@cosmjs/stream": {
+          "version": "0.30.1",
+          "resolved": "https://registry.npmjs.org/@cosmjs/stream/-/stream-0.30.1.tgz",
+          "integrity": "sha512-Fg0pWz1zXQdoxQZpdHRMGvUH5RqS6tPv+j9Eh7Q953UjMlrwZVo0YFLC8OTf/HKVf10E4i0u6aM8D69Q6cNkgQ==",
+          "optional": true,
+          "requires": {
+            "xstream": "^11.14.0"
+          }
+        },
+        "@cosmjs/tendermint-rpc": {
+          "version": "0.30.1",
+          "resolved": "https://registry.npmjs.org/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.30.1.tgz",
+          "integrity": "sha512-Z3nCwhXSbPZJ++v85zHObeUggrEHVfm1u18ZRwXxFE9ZMl5mXTybnwYhczuYOl7KRskgwlB+rID0WYACxj4wdQ==",
+          "optional": true,
+          "requires": {
+            "@cosmjs/crypto": "^0.30.1",
+            "@cosmjs/encoding": "^0.30.1",
+            "@cosmjs/json-rpc": "^0.30.1",
+            "@cosmjs/math": "^0.30.1",
+            "@cosmjs/socket": "^0.30.1",
+            "@cosmjs/stream": "^0.30.1",
+            "@cosmjs/utils": "^0.30.1",
+            "axios": "^0.21.2",
+            "readonly-date": "^1.0.0",
+            "xstream": "^11.14.0"
+          },
+          "dependencies": {
+            "axios": {
+              "version": "0.21.4",
+              "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
+              "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
+              "optional": true,
+              "requires": {
+                "follow-redirects": "^1.14.0"
+              }
+            }
+          }
+        },
+        "@cosmjs/utils": {
+          "version": "0.30.1",
+          "resolved": "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.30.1.tgz",
+          "integrity": "sha512-KvvX58MGMWh7xA+N+deCfunkA/ZNDvFLw4YbOmX3f/XBIkqrVY7qlotfy2aNb1kgp6h4B6Yc8YawJPDTfvWX7g==",
+          "optional": true
+        },
+        "@injectivelabs/sdk-ts": {
+          "version": "1.10.72",
+          "resolved": "https://registry.npmjs.org/@injectivelabs/sdk-ts/-/sdk-ts-1.10.72.tgz",
+          "integrity": "sha512-A5mHNNBgO4fI1c/7CZ0bGfVXliy8laP+VaYZ++aWh1YyudoZw4CTCEmLetZRy7AUU3XcfbHa8sAImRi7db+v6Q==",
+          "optional": true,
+          "requires": {
+            "@apollo/client": "^3.5.8",
+            "@cosmjs/amino": "^0.30.1",
+            "@cosmjs/proto-signing": "^0.30.1",
+            "@cosmjs/stargate": "^0.30.1",
+            "@ethersproject/bytes": "^5.7.0",
+            "@injectivelabs/core-proto-ts": "^0.0.14",
+            "@injectivelabs/exceptions": "^1.10.12",
+            "@injectivelabs/grpc-web": "^0.0.1",
+            "@injectivelabs/grpc-web-node-http-transport": "^0.0.2",
+            "@injectivelabs/grpc-web-react-native-transport": "^0.0.2",
+            "@injectivelabs/indexer-proto-ts": "1.10.8-rc.4",
+            "@injectivelabs/mito-proto-ts": "1.0.9",
+            "@injectivelabs/networks": "^1.10.12",
+            "@injectivelabs/test-utils": "^1.10.12",
+            "@injectivelabs/token-metadata": "^1.10.42",
+            "@injectivelabs/ts-types": "^1.10.12",
+            "@injectivelabs/utils": "^1.10.12",
+            "@metamask/eth-sig-util": "^4.0.0",
+            "axios": "^0.27.2",
+            "bech32": "^2.0.0",
+            "bip39": "^3.0.4",
+            "cosmjs-types": "^0.7.1",
+            "eth-crypto": "^2.6.0",
+            "ethereumjs-util": "^7.1.4",
+            "ethers": "^5.7.2",
+            "google-protobuf": "^3.21.0",
+            "graphql": "^16.3.0",
+            "http-status-codes": "^2.2.0",
+            "js-sha3": "^0.8.0",
+            "jscrypto": "^1.0.3",
+            "keccak256": "^1.0.6",
+            "link-module-alias": "^1.2.0",
+            "rxjs": "^7.8.0",
+            "secp256k1": "^4.0.3",
+            "shx": "^0.3.2",
+            "snakecase-keys": "^5.4.1"
+          },
+          "dependencies": {
+            "axios": {
+              "version": "0.27.2",
+              "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz",
+              "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
+              "optional": true,
+              "requires": {
+                "follow-redirects": "^1.14.9",
+                "form-data": "^4.0.0"
+              }
+            }
+          }
+        },
+        "@injectivelabs/utils": {
+          "version": "1.10.12",
+          "resolved": "https://registry.npmjs.org/@injectivelabs/utils/-/utils-1.10.12.tgz",
+          "integrity": "sha512-c8al79nxIJgV1cBAdW2TPDGldj/8gm5k0h5TIN/AJs8/AeIjpTwwVGfLY3QvPOpRsxuQ9CjBkTXrAcSL1wwkcw==",
+          "optional": true,
+          "requires": {
+            "@injectivelabs/exceptions": "^1.10.12",
+            "@injectivelabs/ts-types": "^1.10.12",
+            "axios": "^0.21.1",
+            "bignumber.js": "^9.0.1",
+            "http-status-codes": "^2.2.0",
+            "link-module-alias": "^1.2.0",
+            "shx": "^0.3.2",
+            "snakecase-keys": "^5.1.2",
+            "store2": "^2.12.0"
+          },
+          "dependencies": {
+            "axios": {
+              "version": "0.21.4",
+              "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
+              "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
+              "optional": true,
+              "requires": {
+                "follow-redirects": "^1.14.0"
+              }
+            }
+          }
+        },
+        "@mysten/sui.js": {
+          "version": "0.37.1",
+          "resolved": "https://registry.npmjs.org/@mysten/sui.js/-/sui.js-0.37.1.tgz",
+          "integrity": "sha512-nEOqnjUqb/VJcVk23LgZOX1FmBib/mBCwAWaJhtsCHLwv2jIAfCPY/fpB9lJ62QHrM8UFclpWxsLkqcUkKyPgA==",
+          "requires": {
+            "@mysten/bcs": "0.7.3",
+            "@noble/curves": "^1.0.0",
+            "@noble/hashes": "^1.3.0",
+            "@open-rpc/client-js": "^1.8.1",
+            "@scure/bip32": "^1.3.0",
+            "@scure/bip39": "^1.2.0",
+            "@suchipi/femver": "^1.0.0",
+            "events": "^3.3.0",
+            "superstruct": "^1.0.3",
+            "tweetnacl": "^1.0.3"
+          },
+          "dependencies": {
+            "@mysten/bcs": {
+              "version": "0.7.3",
+              "resolved": "https://registry.npmjs.org/@mysten/bcs/-/bcs-0.7.3.tgz",
+              "integrity": "sha512-fbusBfsyc2MpTACi72H5edWJ670T84va+qn9jSPpb5BzZ+pzUM1Q0ApPrF5OT+mB1o5Ng+mxPQpBCZQkfiV2TA==",
+              "requires": {
+                "bs58": "^5.0.0"
+              }
+            },
+            "@scure/bip39": {
+              "version": "1.2.1",
+              "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz",
+              "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==",
+              "requires": {
+                "@noble/hashes": "~1.3.0",
+                "@scure/base": "~1.1.0"
+              }
+            },
+            "bs58": {
+              "version": "5.0.0",
+              "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz",
+              "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==",
+              "requires": {
+                "base-x": "^4.0.0"
+              }
+            }
+          }
+        },
+        "@noble/curves": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz",
+          "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==",
+          "requires": {
+            "@noble/hashes": "1.3.2"
+          }
+        },
+        "@noble/hashes": {
+          "version": "1.3.2",
+          "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz",
+          "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ=="
+        },
+        "@scure/bip32": {
+          "version": "1.3.2",
+          "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.2.tgz",
+          "integrity": "sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==",
+          "requires": {
+            "@noble/curves": "~1.2.0",
+            "@noble/hashes": "~1.3.2",
+            "@scure/base": "~1.1.2"
+          }
+        },
+        "algosdk": {
+          "version": "2.6.0",
+          "resolved": "https://registry.npmjs.org/algosdk/-/algosdk-2.6.0.tgz",
+          "integrity": "sha512-xYSb2xPG4nLPlJvqjA4ebR0s++YrjZK1+UfaEV84u2HkIwuRhEUmryDPcAuLIfTp3eyY99v/FduOK02K2Hnu8Q==",
+          "requires": {
+            "algo-msgpack-with-bigint": "^2.1.1",
+            "buffer": "^6.0.3",
+            "cross-fetch": "^4.0.0",
+            "hi-base32": "^0.5.1",
+            "js-sha256": "^0.9.0",
+            "js-sha3": "^0.8.0",
+            "js-sha512": "^0.8.0",
+            "json-bigint": "^1.0.0",
+            "tweetnacl": "^1.0.3",
+            "vlq": "^2.0.4"
+          }
+        },
+        "aptos": {
+          "version": "1.5.0",
+          "resolved": "https://registry.npmjs.org/aptos/-/aptos-1.5.0.tgz",
+          "integrity": "sha512-N7OuRtU7IYHkDkNx+4QS3g/QQGCp+36KzYn3oXPmT7Kttfuv+UKliQVdjy3cLmwd/DCQSh9ObTovwdxnHjUn0g==",
+          "requires": {
+            "@noble/hashes": "1.1.3",
+            "@scure/bip39": "1.1.0",
+            "axios": "0.27.2",
+            "form-data": "4.0.0",
+            "tweetnacl": "1.0.3"
+          },
+          "dependencies": {
+            "@noble/hashes": {
+              "version": "1.1.3",
+              "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.3.tgz",
+              "integrity": "sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A=="
+            },
+            "axios": {
+              "version": "0.27.2",
+              "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz",
+              "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
+              "requires": {
+                "follow-redirects": "^1.14.9",
+                "form-data": "^4.0.0"
+              }
+            }
+          }
+        },
+        "axios": {
+          "version": "0.24.0",
+          "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz",
+          "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==",
+          "requires": {
+            "follow-redirects": "^1.14.4"
+          }
+        },
+        "base-x": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz",
+          "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw=="
+        },
+        "buffer": {
+          "version": "6.0.3",
+          "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+          "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+          "requires": {
+            "base64-js": "^1.3.1",
+            "ieee754": "^1.2.1"
+          }
+        },
+        "cosmjs-types": {
+          "version": "0.7.2",
+          "resolved": "https://registry.npmjs.org/cosmjs-types/-/cosmjs-types-0.7.2.tgz",
+          "integrity": "sha512-vf2uLyktjr/XVAgEq0DjMxeAWh1yYREe7AMHDKd7EiHVqxBPCaBS+qEEQUkXbR9ndnckqr1sUG8BQhazh4X5lA==",
+          "optional": true,
+          "requires": {
+            "long": "^4.0.0",
+            "protobufjs": "~6.11.2"
+          }
+        },
+        "cross-fetch": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz",
+          "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==",
+          "requires": {
+            "node-fetch": "^2.6.12"
+          }
+        },
+        "jayson": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/jayson/-/jayson-4.1.0.tgz",
+          "integrity": "sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==",
+          "requires": {
+            "@types/connect": "^3.4.33",
+            "@types/node": "^12.12.54",
+            "@types/ws": "^7.4.4",
+            "commander": "^2.20.3",
+            "delay": "^5.0.0",
+            "es6-promisify": "^5.0.0",
+            "eyes": "^0.1.8",
+            "isomorphic-ws": "^4.0.1",
+            "json-stringify-safe": "^5.0.1",
+            "JSONStream": "^1.3.5",
+            "uuid": "^8.3.2",
+            "ws": "^7.4.5"
+          },
+          "dependencies": {
+            "@types/node": {
+              "version": "12.20.55",
+              "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz",
+              "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ=="
+            }
+          }
+        },
+        "prettier": {
+          "version": "2.8.8",
+          "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
+          "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q=="
+        },
+        "protobufjs": {
+          "version": "6.11.4",
+          "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.4.tgz",
+          "integrity": "sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==",
+          "optional": true,
+          "requires": {
+            "@protobufjs/aspromise": "^1.1.2",
+            "@protobufjs/base64": "^1.1.2",
+            "@protobufjs/codegen": "^2.0.4",
+            "@protobufjs/eventemitter": "^1.1.0",
+            "@protobufjs/fetch": "^1.1.0",
+            "@protobufjs/float": "^1.0.2",
+            "@protobufjs/inquire": "^1.1.0",
+            "@protobufjs/path": "^1.1.2",
+            "@protobufjs/pool": "^1.1.0",
+            "@protobufjs/utf8": "^1.1.0",
+            "@types/long": "^4.0.1",
+            "@types/node": ">=13.7.0",
+            "long": "^4.0.0"
+          }
+        },
+        "superstruct": {
+          "version": "1.0.3",
+          "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-1.0.3.tgz",
+          "integrity": "sha512-8iTn3oSS8nRGn+C2pgXSKPI3jmpm6FExNazNpjvqS6ZUJQCej3PUXEKM8NjHBOs54ExM+LPW/FBRhymrdcCiSg=="
+        },
+        "typescript": {
+          "version": "5.2.2",
+          "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
+          "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w=="
+        },
+        "ws": {
+          "version": "7.5.9",
+          "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
+          "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
+          "requires": {}
+        }
+      }
+    },
     "q": {
       "version": "1.5.1",
       "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",

+ 1 - 0
package.json

@@ -17,6 +17,7 @@
     "target_chains/ethereum/sdk/solidity",
     "target_chains/ethereum/examples/oracle_swap/app",
     "target_chains/sui/sdk/js",
+    "target_chains/sui/cli",
     "third_party/pyth/p2w-relay",
     "wormhole_attester/sdk/js",
     "contract_manager"

+ 1 - 1
target_chains/sui/contracts/Move.toml

@@ -1,6 +1,6 @@
 [package]
 name = "Pyth"
-version = "0.0.1"
+version = "0.0.2"
 
 [dependencies.Sui]
 git = "https://github.com/MystenLabs/sui.git"

+ 10 - 5
target_chains/sui/contracts/sources/version_control.move

@@ -18,12 +18,12 @@ module pyth::version_control {
     //
     ////////////////////////////////////////////////////////////////////////////
 
-    public(friend) fun current_version(): V__0_1_1 {
-       V__0_1_1 {}
+    public(friend) fun current_version(): V__0_1_2 {
+       V__0_1_2 {}
     }
 
-    public(friend) fun previous_version(): V__DUMMY {
-        V__DUMMY {}
+    public(friend) fun previous_version(): V__0_1_1 {
+        V__0_1_1 {}
     }
 
     ////////////////////////////////////////////////////////////////////////////
@@ -35,6 +35,11 @@ module pyth::version_control {
     //
     ////////////////////////////////////////////////////////////////////////////
 
+    /// RELEASE NOTES
+    ///
+    /// - Gas optimizations on merkle tree verifications
+    struct V__0_1_2 has store, drop, copy {}
+
     /// RELEASE NOTES
     ///
     /// - Refactor state to use package management via
@@ -70,7 +75,7 @@ module pyth::version_control {
     }
 
     #[test_only]
-    public fun previous_version_test_only(): V__DUMMY {
+    public fun previous_version_test_only(): V__0_1_1 {
         previous_version()
     }
 }

+ 1 - 1
target_chains/sui/sdk/js/package.json

@@ -1,6 +1,6 @@
 {
   "name": "@pythnetwork/pyth-sui-js",
-  "version": "1.2.1",
+  "version": "1.2.2",
   "description": "Pyth Network Sui Utilities",
   "homepage": "https://pyth.network",
   "author": {

+ 13 - 8
target_chains/sui/sdk/js/src/client.ts

@@ -13,7 +13,7 @@ const MAX_ARGUMENT_SIZE = 16 * 1024;
 export class SuiPythClient {
   private pythPackageId: ObjectId | undefined;
   private wormholePackageId: ObjectId | undefined;
-  private priceTableId: ObjectId | undefined;
+  private priceTableInfo: { id: ObjectId; fieldType: ObjectId } | undefined;
   private priceFeedObjectIdCache: Map<HexString, ObjectId> = new Map();
   private baseUpdateFee: number | undefined;
   constructor(
@@ -260,11 +260,11 @@ export class SuiPythClient {
   async getPriceFeedObjectId(feedId: HexString): Promise<ObjectId | undefined> {
     const normalizedFeedId = feedId.replace("0x", "");
     if (!this.priceFeedObjectIdCache.has(normalizedFeedId)) {
-      const tableId = await this.getPriceTableId();
+      const { id: tableId, fieldType } = await this.getPriceTableInfo();
       const result = await this.provider.getDynamicFieldObject({
         parentId: tableId,
         name: {
-          type: `${await this.getPythPackageId()}::price_identifier::PriceIdentifier`,
+          type: `${fieldType}::price_identifier::PriceIdentifier`,
           value: {
             bytes: Array.from(Buffer.from(normalizedFeedId, "hex")),
           },
@@ -288,8 +288,8 @@ export class SuiPythClient {
    * Fetches the price table object id for the current state id if not cached
    * @returns price table object id
    */
-  async getPriceTableId(): Promise<ObjectId> {
-    if (this.priceTableId === undefined) {
+  async getPriceTableInfo(): Promise<{ id: ObjectId; fieldType: ObjectId }> {
+    if (this.priceTableInfo === undefined) {
       const result = await this.provider.getDynamicFieldObject({
         parentId: this.pythStateId,
         name: {
@@ -297,14 +297,19 @@ export class SuiPythClient {
           value: "price_info",
         },
       });
-      if (!result.data) {
+      if (!result.data || !result.data.type) {
         throw new Error(
           "Price Table not found, contract may not be initialized"
         );
       }
-      this.priceTableId = result.data.objectId;
+      let type = result.data.type.replace("0x2::table::Table<", "");
+      type = type.replace(
+        "::price_identifier::PriceIdentifier, 0x2::object::ID>",
+        ""
+      );
+      this.priceTableInfo = { id: result.data.objectId, fieldType: type };
     }
-    return this.priceTableId;
+    return this.priceTableInfo;
   }
 
   /**