Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[solana] Scripts to update parameters and vesting tests #253

Merged
merged 16 commits into from
Mar 6, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions solana/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,5 @@ snapshots
/artifacts
package-lock.json
yarn.lock
/app/e2e/log/*.json
app/keypairs/deployer.json
4 changes: 2 additions & 2 deletions solana/Anchor.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ seeds = true
members = ["programs/staking"]

[programs.localnet]
staking = "DgCSKsLDXXufYeEkvf21YSX5DMnFK89xans5WdSsUbeY"
staking = "AFuHPdrQGsW8rNQ4oEFF35sm5fg36gwrxyqjkjKvi6ap"

[programs.devnet]
staking = "DgCSKsLDXXufYeEkvf21YSX5DMnFK89xans5WdSsUbeY"
staking = "AFuHPdrQGsW8rNQ4oEFF35sm5fg36gwrxyqjkjKvi6ap"
external_program = "eLUV8cwhgUC2Bcu4UA16uhuMwK8zPkx3XSzt4hd3JJ3"

[registry]
Expand Down
23 changes: 10 additions & 13 deletions solana/app/StakeConnection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import BN from "bn.js";
import { Staking } from "../target/types/staking";
import IDL from "../target/idl/staking.json";
import { WHTokenBalance } from "./whTokenBalance";
import { CORE_BRIDGE_ADDRESS, STAKING_ADDRESS } from "./constants";
import { contracts } from "@wormhole-foundation/sdk-base";
import {
PriorityFeeConfig,
sendTransactions,
Expand Down Expand Up @@ -89,11 +89,7 @@ export class StakeConnection {
connection: Connection,
wallet: Wallet,
): Promise<StakeConnection> {
return await StakeConnection.createStakeConnection(
connection,
wallet,
STAKING_ADDRESS,
);
return await StakeConnection.createStakeConnection(connection, wallet);
}

/** Creates a program connection and loads the staking config
Expand All @@ -102,7 +98,6 @@ export class StakeConnection {
public static async createStakeConnection(
connection: Connection,
wallet: Wallet,
stakingProgramAddress: PublicKey,
addressLookupTable?: PublicKey,
priorityFeeConfig?: PriorityFeeConfig,
): Promise<StakeConnection> {
Expand Down Expand Up @@ -386,7 +381,6 @@ export class StakeConnection {
/** Creates a new stake account and sends the transaction for confirmation. */
public async createStakeAccount(): Promise<void> {
const instructions: TransactionInstruction[] = [];

instructions.push(
await this.program.methods
.createStakeAccount()
Expand All @@ -395,6 +389,7 @@ export class StakeConnection {
})
.instruction(),
);

await this.sendAndConfirmAsVersionedTransaction(instructions);
}

Expand Down Expand Up @@ -754,7 +749,12 @@ export class StakeConnection {
unoptimized?: boolean,
): Promise<void> {
const { proposalAccount } = await this.fetchProposalAccount(proposalId);

const networkType = this.provider.connection.rpcEndpoint.includes("mainnet")
? "Mainnet"
: "Testnet";
const coreBridge = new PublicKey(
contracts.coreBridge.get(networkType, "Solana"), // Testnet - 3u8hJUVTA4jH1wYAyUur7FFZVQ8H635K3tSHHF4ssjQ5
);
const methodsBuilder = this.program.methods
.addProposal(
Buffer.from(ethProposalResponseBytes),
Expand All @@ -764,10 +764,7 @@ export class StakeConnection {
.accountsPartial({
proposal: proposalAccount,
guardianSignatures: guardianSignatures,
guardianSet: deriveGuardianSetKey(
CORE_BRIDGE_ADDRESS,
guardianSetIndex,
),
guardianSet: deriveGuardianSetKey(coreBridge, guardianSetIndex),
});

if (unoptimized) {
Expand Down
28 changes: 0 additions & 28 deletions solana/app/deploy/devnet.ts

This file was deleted.

50 changes: 47 additions & 3 deletions solana/app/constants.ts → solana/app/deploy/devnet/constants.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,21 @@
import { PublicKey } from "@solana/web3.js";
import { homedir } from "os";
import { loadKeypair } from "../../../tests/utils/keys";
import { contracts } from "@wormhole-foundation/sdk-base";

export const RPC_NODE = "https://api.devnet.solana.com";

/// Wormhole Token (W) (devnet solana address)
export const WORMHOLE_TOKEN = new PublicKey(
"Exne2kdeGToBnC2WVSdt1gLy6fjnNftbPtsCPx8AuL7V",
);

export const STAKING_ADDRESS = new PublicKey(
"DgCSKsLDXXufYeEkvf21YSX5DMnFK89xans5WdSsUbeY",
"AFuHPdrQGsW8rNQ4oEFF35sm5fg36gwrxyqjkjKvi6ap",
);

export const CORE_BRIDGE_ADDRESS = new PublicKey(
"3u8hJUVTA4jH1wYAyUur7FFZVQ8H635K3tSHHF4ssjQ5",
export const CORE_BRIDGE_PID = new PublicKey(
contracts.coreBridge.get("Testnet", "Solana")!, // 3u8hJUVTA4jH1wYAyUur7FFZVQ8H635K3tSHHF4ssjQ5
);

/// Wormhole Hub Proposal Metadata Contract (sepolia ethereum address)
Expand All @@ -19,11 +29,13 @@ export const hubProposalMetadataUint8Array = new Uint8Array(
);

/// Wormhole Hub Chain ID
// https://wormhole.com/docs/build/reference/chain-ids/#__tabbed_1_2
export const HUB_CHAIN_ID = 10002; // SEPOLIA

export const CHECKPOINTS_ACCOUNT_LIMIT = 654998;
export const TEST_CHECKPOINTS_ACCOUNT_LIMIT = 15;

/// Wormhole hubSolanaMessageDispatcher Contract (sepolia ethereum address)
export const HUB_SOLANA_MESSAGE_DISPATCHER_ADDRESS =
"0xaeb78fb7ddedbbcab908e91e94f1fb04a23fbce5";
const hubSolanaMessageDispatcherHex20 =
Expand Down Expand Up @@ -53,3 +65,35 @@ export const HUB_SOLANA_SPOKE_VOTE_DECODER_ADDRESS =
/// Wormhole HubVotePool Contract (sepolia ethereum address)
export const HUB_VOTE_POOL_ADDRESS =
"0x1004c781763c70f5f11aa64b0e5b34e1442a3c02";

export const DEPLOYER_AUTHORITY_PATH = "/.config/solana/deployer.json";
export const DEPLOYER_AUTHORITY_KEYPAIR = loadKeypair(
homedir() + DEPLOYER_AUTHORITY_PATH,
);

export const GOVERNANCE_AUTHORITY_PATH =
"/.config/solana/governanceAuthority.json";
export const GOVERNANCE_AUTHORITY_KEYPAIR = loadKeypair(
homedir() + GOVERNANCE_AUTHORITY_PATH,
);

export const VESTING_ADMIN_PATH = "/.config/solana/vestingAdmin.json";
export const VESTING_ADMIN_KEYPAIR = loadKeypair(
homedir() + VESTING_ADMIN_PATH,
);

export const USER_AUTHORITY_PATH = "/.config/solana/user.json";
export const USER_AUTHORITY_KEYPAIR = loadKeypair(
homedir() + USER_AUTHORITY_PATH,
);

export const USER2_AUTHORITY_PATH = "/.config/solana/user2.json";
export const USER2_AUTHORITY_KEYPAIR = loadKeypair(
homedir() + USER2_AUTHORITY_PATH,
);

export const AIRLOCK_PDA_ADDRESS = new PublicKey(
"2ejzW2eFPedskg1KcrjcFs9g1JorRVcMes1TBPpGbhdy",
);

export const VOTE_WEIGHT_WINDOW_LENGTHS = 10 * 60; // 10 minutes
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
// Usage: npx ts-node app/deploy/02_create_account_lookup_table.ts
// Usage: npx ts-node app/deploy/devnet/initialize/initAddressLookupTable.ts

import { Wallet, AnchorProvider } from "@coral-xyz/anchor";
import { Connection } from "@solana/web3.js";
import { DEPLOYER_AUTHORITY_KEYPAIR, WORMHOLE_TOKEN, RPC_NODE } from "./devnet";
import { initAddressLookupTable } from "../../tests/utils/utils";
import {
DEPLOYER_AUTHORITY_KEYPAIR,
RPC_NODE,
STAKING_ADDRESS,
WORMHOLE_TOKEN,
} from "../constants";
import { initAddressLookupTable } from "../../../helpers/utils/lookup_table";

async function main() {
try {
Expand All @@ -17,6 +22,7 @@ async function main() {
const lookupTableAddress = await initAddressLookupTable(
provider,
WORMHOLE_TOKEN,
STAKING_ADDRESS,
);

console.log("Lookup table address: ", lookupTableAddress.toBase58());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
// Usage: npx ts-node app/deploy/01_init_staking.ts
// Usage: npx ts-node app/deploy/devnet/initialize/initConfig.ts

import { Wallet, AnchorProvider, Program } from "@coral-xyz/anchor";
import { Connection } from "@solana/web3.js";
import { DEPLOYER_AUTHORITY_KEYPAIR, WORMHOLE_TOKEN, RPC_NODE } from "./devnet";
import { CHECKPOINTS_ACCOUNT_LIMIT, STAKING_ADDRESS } from "../constants";
import { Staking } from "../../target/types/staking";
import fs from "fs";
import {
CHECKPOINTS_ACCOUNT_LIMIT,
STAKING_ADDRESS,
DEPLOYER_AUTHORITY_KEYPAIR,
WORMHOLE_TOKEN,
RPC_NODE,
} from "../constants";

async function main() {
const client = new Connection(RPC_NODE);
const connection = new Connection(RPC_NODE);
const provider = new AnchorProvider(
client,
connection,
new Wallet(DEPLOYER_AUTHORITY_KEYPAIR),
{},
);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
// Usage: npx ts-node app/deploy/03_create_airlock.ts
// Usage: npx ts-node app/deploy/devnet/initialize/initializeSpokeAirlock.ts

import * as anchor from "@coral-xyz/anchor";
import { AnchorProvider, Program, Wallet } from "@coral-xyz/anchor";
import { Connection, PublicKey, SystemProgram } from "@solana/web3.js";
import { DEPLOYER_AUTHORITY_KEYPAIR, RPC_NODE } from "./devnet";
import { Staking } from "../../target/types/staking";
import { DEPLOYER_AUTHORITY_KEYPAIR, RPC_NODE } from "../constants";
import { Staking } from "../../../../target/types/staking";
import fs from "fs";

async function main() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,19 @@
// Usage: npx ts-node app/deploy/06_create_message_executor.ts
// Usage: npx ts-node app/deploy/devnet/initialize/initializeSpokeMessageExecutor.ts

import * as anchor from "@coral-xyz/anchor";
import { AnchorProvider, Program, Wallet } from "@coral-xyz/anchor";
import { Connection, PublicKey, SystemProgram } from "@solana/web3.js";
import {
DEPLOYER_AUTHORITY_KEYPAIR,
hubSolanaMessageDispatcherPublicKey,
HUB_CHAIN_ID,
RPC_NODE,
} from "../constants";
import { DEPLOYER_AUTHORITY_KEYPAIR, RPC_NODE } from "./devnet";
import { Staking } from "../../target/types/staking";
import { Staking } from "../../../../target/types/staking";
import fs from "fs";
import { wasm } from "../StakeConnection";
import { wasm } from "../../../StakeConnection";

async function main() {
try {
const DEBUG = true;
const connection = new Connection(RPC_NODE);
const provider = new AnchorProvider(
connection,
Expand Down Expand Up @@ -47,7 +46,7 @@ async function main() {
hubDispatcher: hubSolanaMessageDispatcherPublicKey,
systemProgram: SystemProgram.programId,
})
.rpc({ skipPreflight: DEBUG });
.rpc();
} catch (err) {
console.error("Error:", err);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
// Usage: npx ts-node app/deploy/04_create_spoke_metadata_collector.ts
// Usage: npx ts-node app/deploy/devnet/initialize/initializeSpokeMetadataCollector.ts

import * as anchor from "@coral-xyz/anchor";
import { AnchorProvider, Program, Wallet } from "@coral-xyz/anchor";
import { Connection } from "@solana/web3.js";
import { HUB_CHAIN_ID, hubProposalMetadataUint8Array } from "../constants";
import { DEPLOYER_AUTHORITY_KEYPAIR, RPC_NODE } from "./devnet";
import { Staking } from "../../target/types/staking";
import {
DEPLOYER_AUTHORITY_KEYPAIR,
HUB_CHAIN_ID,
hubProposalMetadataUint8Array,
RPC_NODE,
} from "../constants";
import { Staking } from "../../../../target/types/staking";
import fs from "fs";

async function main() {
try {
const DEBUG = true;
const connection = new Connection(RPC_NODE);
const provider = new AnchorProvider(
connection,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
// Usage: npx ts-node app/deploy/05_initializeVoteWeightWindowLengths.ts
// Usage: npx ts-node app/deploy/devnet/initialize/initializeVoteWeightWindowLengths.ts

import * as anchor from "@coral-xyz/anchor";
import { AnchorProvider, Program, Wallet } from "@coral-xyz/anchor";
import { Connection } from "@solana/web3.js";
import { DEPLOYER_AUTHORITY_KEYPAIR, RPC_NODE } from "./devnet";
import { Staking } from "../../target/types/staking";
import {
DEPLOYER_AUTHORITY_KEYPAIR,
RPC_NODE,
VOTE_WEIGHT_WINDOW_LENGTHS,
} from "../constants";
import { Staking } from "../../../../target/types/staking";
import fs from "fs";
import BN from "bn.js";

async function main() {
try {
const DEBUG = true;
const connection = new Connection(RPC_NODE);
const provider = new AnchorProvider(
connection,
Expand All @@ -24,7 +26,9 @@ async function main() {
provider,
);

await program.methods.initializeVoteWeightWindowLengths(new BN(10)).rpc();
await program.methods
.initializeVoteWeightWindowLengths(new BN(VOTE_WEIGHT_WINDOW_LENGTHS))
.rpc();
} catch (err) {
console.error("Error:", err);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,12 @@
// Usage: npx ts-node app/deploy/08_create_stake_account.ts
// Usage: npx ts-node app/deploy/devnet/tests/11_createStakeAccount.ts

import * as anchor from "@coral-xyz/anchor";
import { AnchorProvider, Wallet } from "@coral-xyz/anchor";
import { Connection } from "@solana/web3.js";
import * as wasm from "@wormhole/staking-wasm";
import { StakeConnection } from "../StakeConnection";
import { STAKING_ADDRESS } from "../constants";
import { USER2_AUTHORITY_KEYPAIR, RPC_NODE } from "./devnet";
import { Staking } from "../../target/types/staking";
import { StakeConnection } from "../../../StakeConnection";
import { RPC_NODE, USER2_AUTHORITY_KEYPAIR } from "../constants";

async function main() {
try {
const DEBUG = true;
const connection = new Connection(RPC_NODE);
const provider = new AnchorProvider(
connection,
Expand All @@ -22,7 +17,6 @@ async function main() {
const stakeConnection = await StakeConnection.createStakeConnection(
connection,
provider.wallet as Wallet,
STAKING_ADDRESS,
);

await stakeConnection.createStakeAccount();
Expand Down
Loading