74 lines
1.8 KiB
TypeScript
74 lines
1.8 KiB
TypeScript
import {
|
|
RawSigner,
|
|
SUI_CLOCK_OBJECT_ID,
|
|
TransactionBlock,
|
|
} from "@mysten/sui.js";
|
|
import { buildForBytecode } from "./build";
|
|
import { getPackageId } from "./utils";
|
|
|
|
export async function buildAndUpgradeWormhole(
|
|
signer: RawSigner,
|
|
signedVaa: Buffer,
|
|
wormholePath: string,
|
|
wormholeStateId: string
|
|
) {
|
|
const wormholePackage = await getPackageId(signer.provider, wormholeStateId);
|
|
|
|
const tx = new TransactionBlock();
|
|
|
|
// Authorize upgrade.
|
|
const [upgradeTicket] = tx.moveCall({
|
|
target: `${wormholePackage}::upgrade_contract::authorize_upgrade`,
|
|
arguments: [
|
|
tx.object(wormholeStateId),
|
|
tx.pure(Array.from(signedVaa)),
|
|
tx.object(SUI_CLOCK_OBJECT_ID),
|
|
],
|
|
});
|
|
|
|
// Build and generate modules and dependencies for upgrade.
|
|
const { modules, dependencies } = buildForBytecode(wormholePath);
|
|
const [upgradeReceipt] = tx.upgrade({
|
|
modules,
|
|
dependencies,
|
|
packageId: wormholePackage,
|
|
ticket: upgradeTicket,
|
|
});
|
|
|
|
// Commit upgrade.
|
|
tx.moveCall({
|
|
target: `${wormholePackage}::upgrade_contract::commit_upgrade`,
|
|
arguments: [tx.object(wormholeStateId), upgradeReceipt],
|
|
});
|
|
|
|
// Cannot auto compute gas budget, so we need to configure it manually.
|
|
// Gas ~215m.
|
|
tx.setGasBudget(215_000_000n);
|
|
|
|
return signer.signAndExecuteTransactionBlock({
|
|
transactionBlock: tx,
|
|
options: {
|
|
showEffects: true,
|
|
showEvents: true,
|
|
},
|
|
});
|
|
}
|
|
|
|
export async function migrate(signer: RawSigner, stateId: string) {
|
|
const contractPackage = await getPackageId(signer.provider, stateId);
|
|
|
|
const tx = new TransactionBlock();
|
|
tx.moveCall({
|
|
target: `${contractPackage}::migrate::migrate`,
|
|
arguments: [tx.object(stateId)],
|
|
});
|
|
|
|
return signer.signAndExecuteTransactionBlock({
|
|
transactionBlock: tx,
|
|
options: {
|
|
showEffects: true,
|
|
showEvents: true,
|
|
},
|
|
});
|
|
}
|