init.ts 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. /// Initialize Wormhole on Sui testnet
  2. import {
  3. fromB64,
  4. getPublishedObjectChanges,
  5. normalizeSuiObjectId,
  6. RawSigner,
  7. TransactionBlock,
  8. SUI_CLOCK_OBJECT_ID,
  9. JsonRpcProvider,
  10. Ed25519Keypair,
  11. testnetConnection,
  12. Connection,
  13. } from "@mysten/sui.js";
  14. import { execSync } from "child_process";
  15. import fs from "fs";
  16. import { resolve } from "path";
  17. import dotenv from "dotenv";
  18. import { REGISTRY, NETWORK } from "../registry";
  19. dotenv.config({ path: "~/.env" });
  20. // Network dependent settings
  21. let network = NETWORK.TESTNET; // <= NOTE: Update this when changing network
  22. const walletPrivateKey = process.env.SUI_TESTNET; // <= NOTE: Update this when changing network
  23. // Load registry and provider.
  24. const registry = REGISTRY[network];
  25. const provider = new JsonRpcProvider(
  26. new Connection({ fullnode: registry["RPC_URL"] })
  27. );
  28. async function main() {
  29. if (walletPrivateKey === undefined) {
  30. throw new Error("SUI_TESTNET unset in environment");
  31. }
  32. const wallet = new RawSigner(
  33. Ed25519Keypair.fromSecretKey(Buffer.from(walletPrivateKey, "hex")),
  34. provider
  35. );
  36. await init_wormhole(wallet, registry["WORMHOLE_PACKAGE_ID"]);
  37. }
  38. main();
  39. async function init_wormhole(signer: RawSigner, WORMHOLE_PACKAGE_ID: string) {
  40. try {
  41. const tx = new TransactionBlock();
  42. tx.setGasBudget(2500000000);
  43. let DEPLOYER_CAP =
  44. "0x922ff3519eb0e71afaa7c6a7a8a1d074a2269d8ace73e8147bee286dd2d122a1";
  45. let UPGRADE_CAP =
  46. "0x21a346dae01e5f57829f8a2a0bf744b6be4e6d1131faf218b82f0f96708be99f";
  47. let GOVERNANCE_CHAIN = 1;
  48. let GOVERNANCE_CONTRACT = "04";
  49. let GUARDIAN_SET_INDEX = 0; // this should be 3 or higher for mainnet (can check by parsing VAA)
  50. let INITIAL_GUARDIANS = ["13947bd48b18e53fdaeee77f3473391ac727c638"]; // testnet guardian
  51. // Ordered mainnet guardians
  52. // let INITIAL_MAINNET_GUARDIANS =
  53. // [
  54. // "58CC3AE5C097b213cE3c81979e1B9f9570746AA5",
  55. // "fF6CB952589BDE862c25Ef4392132fb9D4A42157",
  56. // "114De8460193bdf3A2fCf81f86a09765F4762fD1",
  57. // "107A0086b32d7A0977926A205131d8731D39cbEB",
  58. // "8C82B2fd82FaeD2711d59AF0F2499D16e726f6b2",
  59. // "11b39756c042441be6d8650b69b54ebe715e2343",
  60. // "54Ce5B4D348fb74B958e8966e2ec3dBd4958a7cd",
  61. // "15e7cAF07C4e3DC8e7C469f92C8Cd88FB8005a20",
  62. // "74a3bf913953D695260D88BC1aA25A4eeE363ef0",
  63. // "000aC0076727b35FBea2dAc28fEE5cCB0fEA768e",
  64. // "AF45Ced136b9D9e24903464AE889F5C8a723FC14",
  65. // "f93124b7c738843CBB89E864c862c38cddCccF95",
  66. // "D2CC37A4dc036a8D232b48f62cDD4731412f4890",
  67. // "DA798F6896A3331F64b48c12D1D57Fd9cbe70811",
  68. // "71AA1BE1D36CaFE3867910F99C09e347899C19C3",
  69. // "8192b6E7387CCd768277c17DAb1b7a5027c0b3Cf",
  70. // "178e21ad2E77AE06711549CFBB1f9c7a9d8096e8",
  71. // "5E1487F35515d02A92753504a8D75471b9f49EdB",
  72. // "6FbEBc898F403E4773E95feB15E80C9A99c8348d"
  73. // ]
  74. let GUARDIAN_SECONDS_TO_LIVE = "1000000000";
  75. let MESSAGE_FEE = 0;
  76. tx.moveCall({
  77. target: `${WORMHOLE_PACKAGE_ID}::setup::complete`,
  78. arguments: [
  79. tx.object(DEPLOYER_CAP),
  80. tx.object(UPGRADE_CAP),
  81. tx.pure(GOVERNANCE_CHAIN),
  82. tx.pure(GOVERNANCE_CONTRACT),
  83. tx.pure(GUARDIAN_SET_INDEX),
  84. tx.pure(INITIAL_GUARDIANS.map((x) => [...Buffer.from(x, "hex")])),
  85. tx.pure(GUARDIAN_SECONDS_TO_LIVE),
  86. tx.pure(MESSAGE_FEE),
  87. ],
  88. });
  89. let res = await signer.signAndExecuteTransactionBlock({
  90. transactionBlock: tx,
  91. options: {
  92. showInput: true,
  93. showEffects: true,
  94. showEvents: true,
  95. showObjectChanges: true,
  96. showBalanceChanges: true,
  97. },
  98. });
  99. console.log(res);
  100. // Return publish transaction info
  101. return res;
  102. } catch (e) {
  103. throw e;
  104. } finally {
  105. }
  106. }