pyth-crosschain/target_chains/sui/cli
Amin Moghaddam 940c2035f3
[sui-sdk] Sui sdk improvements (#1065)
* Split all coins in 1 transaction

* Use buffer library instead of built-in Buffer
2023-09-25 10:39:14 +02:00
..
src [sui-sdk] Sui sdk improvements (#1065) 2023-09-25 10:39:14 +02:00
README.md [sui] Sui dx improvement (#1011) 2023-08-15 17:56:43 +02:00
package.json [sui] Use manual serialization for vaas (#1016) 2023-08-22 12:44:43 +02:00
tsconfig.json [sui] Use manual serialization for vaas (#1016) 2023-08-22 12:44:43 +02:00

README.md

Pre-requisites

Install move cli according to this doc

Deploying from scratch

Configure the Move.toml file accordingly. The wormhole address should be specified based on the target chain in the Move.toml and the pyth address should be 0x0. We can deploy the pyth oracle and initialize it with the following command:

npm run cli -- deploy --private-key <private-key> --chain [sui_mainnet|sui_testnet]

You can then add your sui contract configs to the contract manager store.

You can also manually create all the price feeds available at the moment to make it easier for devs to test the oracle.

npm run cli -- create-all --private-key <private-key> --contract <contract-id>

Updating price feeds:

You can use the create and update-feeds commands to create and update price feeds respectively.

npm run cli -- create --feed-id <feed-id> --private-key <private-key> --contract <contract-id>
npm run cli -- update-feeds --feed-id <feed-id> --private-key <private-key> --contract <contract-id>

Upgrade process:

The following steps are needed to upgrade our sui contracts:

  • Contract changes:
    • Create a new struct for the new version and update current_version and previous_version functions in version_control module
    • Implement any custom logic needed to migrate the data from the old struct to the new one in the migrate module
    • Update dependency (e.g. wormhole) addresses if needed
  • Generate the digest for the new contract build
  • Create a governance proposal, proposing the sui package to be upgraded to this specific digest
  • Approve and execute the governance proposal
  • Run the upgrade transaction and publish the new package

Generating the new contract hash:

Run the following command to generate the new hash, make sure the contract addresses are idential to the deployed ones:

npm run cli -- generate-digest

Upgrading the contract

To upgrade the contract after the governance vaa was executed run:

npm run cli -- upgrade --private-key <private-key> --contract <contract-id> --vaa <upgrade-vaa>

The upgrade procedure consists of 2 transactions. The first one is to upgrade the contract (sui level) and the second one is to run the migrate function and upgrade the version (package level). Since clients try to fetch the latest version of the package automatically, it's important to run the second transaction as soon as possible after the first one.

FAQ:

  • I'm seeting the error Transaction has non recoverable errors from at least 1/3 of validators. What should I do? Make sure you have enough funding in the wallet and try again. Usually a more descriptive error message is available in the returned value of the transaction.