wormhole/sdk/js/src/solana/wormhole/instructions/initialize.ts

64 lines
1.7 KiB
TypeScript

import {
PublicKey,
PublicKeyInitData,
SystemProgram,
SYSVAR_CLOCK_PUBKEY,
SYSVAR_RENT_PUBKEY,
TransactionInstruction,
} from "@solana/web3.js";
import { createReadOnlyWormholeProgramInterface } from "../program";
import {
deriveFeeCollectorKey,
deriveGuardianSetKey,
deriveWormholeBridgeDataKey,
} from "../accounts";
import BN from "bn.js";
export function createInitializeInstruction(
wormholeProgramId: PublicKeyInitData,
payer: PublicKeyInitData,
guardianSetExpirationTime: number,
fee: bigint,
initialGuardians: Buffer[]
): TransactionInstruction {
const methods = createReadOnlyWormholeProgramInterface(
wormholeProgramId
).methods.initialize(guardianSetExpirationTime, new BN(fee.toString()), [
...initialGuardians,
]);
// @ts-ignore
return methods._ixFn(...methods._args, {
accounts: getInitializeAccounts(wormholeProgramId, payer) as any,
signers: undefined,
remainingAccounts: undefined,
preInstructions: undefined,
postInstructions: undefined,
});
}
export interface InitializeAccounts {
bridge: PublicKey;
guardianSet: PublicKey;
feeCollector: PublicKey;
payer: PublicKey;
clock: PublicKey;
rent: PublicKey;
systemProgram: PublicKey;
}
export function getInitializeAccounts(
wormholeProgramId: PublicKeyInitData,
payer: PublicKeyInitData
): InitializeAccounts {
return {
bridge: deriveWormholeBridgeDataKey(wormholeProgramId),
guardianSet: deriveGuardianSetKey(wormholeProgramId, 0),
feeCollector: deriveFeeCollectorKey(wormholeProgramId),
payer: new PublicKey(payer),
clock: SYSVAR_CLOCK_PUBKEY,
rent: SYSVAR_RENT_PUBKEY,
systemProgram: SystemProgram.programId,
};
}