|
|
@@ -1,15 +1,14 @@
|
|
|
import yargs from "yargs";
|
|
|
import { hideBin } from "yargs/helpers";
|
|
|
-import { DefaultStore, loadHotWallet } from "../src";
|
|
|
-import { TonChain } from "../src/chains";
|
|
|
-import { CHAINS, toChainName } from "@pythnetwork/xc-admin-common";
|
|
|
+import { DefaultStore, TonPriceFeedContract, toPrivateKey } from "../src";
|
|
|
import fs from "fs";
|
|
|
import path from "path";
|
|
|
+import { Cell } from "@ton/ton";
|
|
|
|
|
|
const parser = yargs(hideBin(process.argv))
|
|
|
.usage(
|
|
|
"Upgrades the Pyth contract on TON and creates a governance proposal for it.\n" +
|
|
|
- "Usage: $0 --network <mainnet|testnet> --contract-address <address> --ops-key-path <ops_key_path>"
|
|
|
+ "Usage: $0 --network <mainnet|testnet> --contract <contract_name> --private-key <private_key>"
|
|
|
)
|
|
|
.options({
|
|
|
network: {
|
|
|
@@ -18,45 +17,24 @@ const parser = yargs(hideBin(process.argv))
|
|
|
description: "Network to deploy to",
|
|
|
demandOption: true,
|
|
|
},
|
|
|
- "contract-address": {
|
|
|
+ contract: {
|
|
|
type: "string",
|
|
|
- description: "Address of the contract to upgrade",
|
|
|
+ description: "Contract name",
|
|
|
demandOption: true,
|
|
|
},
|
|
|
- "ops-key-path": {
|
|
|
+ "private-key": {
|
|
|
type: "string",
|
|
|
- description: "Path to operations key file",
|
|
|
+ description: "Private key of the sender",
|
|
|
demandOption: true,
|
|
|
},
|
|
|
});
|
|
|
|
|
|
async function main() {
|
|
|
const argv = await parser.argv;
|
|
|
- const isMainnet = argv.network === "mainnet";
|
|
|
|
|
|
- // Get chain ID and name from CHAINS mapping
|
|
|
- const chainId = isMainnet ? CHAINS.ton_mainnet : CHAINS.ton_testnet;
|
|
|
- const wormholeChainName = toChainName(chainId);
|
|
|
-
|
|
|
- // Get the TON chain instance with appropriate RPC URL based on network
|
|
|
- const chain = new TonChain(
|
|
|
- chainId.toString(),
|
|
|
- isMainnet,
|
|
|
- wormholeChainName,
|
|
|
- undefined,
|
|
|
- isMainnet
|
|
|
- ? "https://toncenter.com/api/v2/jsonRPC"
|
|
|
- : "https://testnet.toncenter.com/api/v2/jsonRPC"
|
|
|
- );
|
|
|
-
|
|
|
- const vault =
|
|
|
- DefaultStore.vaults[
|
|
|
- "mainnet-beta_FVQyHcooAtThJ83XFrNnv74BcinbRH3bRmfFamAHBfuj"
|
|
|
- ];
|
|
|
-
|
|
|
- console.log(
|
|
|
- `Upgrading contract on TON ${argv.network} (Chain ID: ${chainId}, Wormhole Chain Name: ${wormholeChainName})`
|
|
|
- );
|
|
|
+ const contract = DefaultStore.contracts[
|
|
|
+ argv.contract
|
|
|
+ ] as TonPriceFeedContract;
|
|
|
|
|
|
// Read the compiled contract from the build directory
|
|
|
// NOTE: Remember to rebuild contract_manager before running this script because it will also build the ton contract
|
|
|
@@ -65,21 +43,14 @@ async function main() {
|
|
|
"../../target_chains/ton/contracts/build/Main.compiled.json"
|
|
|
);
|
|
|
const compiled = JSON.parse(fs.readFileSync(compiledPath, "utf8"));
|
|
|
- const newCodeHash = compiled.hash;
|
|
|
- console.log("New code hash:", newCodeHash);
|
|
|
-
|
|
|
- // Generate governance payload for the upgrade
|
|
|
- const payload = chain.generateGovernanceUpgradePayload(newCodeHash);
|
|
|
- console.log("Generated governance payload");
|
|
|
- console.log("Payload:", payload);
|
|
|
+ const newCode = Cell.fromHex(compiled.hex);
|
|
|
+ console.log(newCode);
|
|
|
|
|
|
- // Create and submit governance proposal
|
|
|
- console.log("Using vault for proposal:", vault.getId());
|
|
|
- const keypair = await loadHotWallet(argv["ops-key-path"] as string);
|
|
|
- console.log("Using wallet:", keypair.publicKey.toBase58());
|
|
|
- vault.connect(keypair);
|
|
|
- const proposal = await vault.proposeWormholeMessage([payload]);
|
|
|
- console.log("Proposal address:", proposal.address.toBase58());
|
|
|
+ const tx = await contract.upgradeContract(
|
|
|
+ toPrivateKey(argv["private-key"]),
|
|
|
+ newCode
|
|
|
+ );
|
|
|
+ console.log("Upgrade transaction:", tx);
|
|
|
}
|
|
|
|
|
|
main().catch((error) => {
|