From 18d7a34f262afcdb70d1ef1ed9b7229ddf5ca78a Mon Sep 17 00:00:00 2001 From: A5 Pickle <5342825+a5-pickle@users.noreply.github.com> Date: Mon, 7 Oct 2024 12:52:48 -0500 Subject: [PATCH] solana: add new IDs (#192) Co-authored-by: A5 Pickle Co-authored-by: Abhishek Rajput --- package-lock.json | 1 + solana/Anchor.toml | 5 + solana/Makefile | 2 + solana/modules/common/Cargo.toml | 1 + solana/modules/common/src/lib.rs | 5 +- solana/package.json | 1 + solana/programs/matching-engine/Cargo.toml | 1 + solana/programs/matching-engine/src/lib.rs | 7 +- .../src/processor/admin/initialize.rs | 4 +- solana/programs/token-router/Cargo.toml | 14 ++- solana/programs/token-router/src/lib.rs | 7 +- solana/programs/upgrade-manager/Cargo.toml | 17 ++- solana/programs/upgrade-manager/src/lib.rs | 4 +- solana/ts/scripts/getMainnetInfo.ts | 103 ++++++++++++++++++ solana/ts/scripts/getTestnetInfo.ts | 2 +- solana/ts/scripts/setUpMatchingEngineLut.ts | 34 +++++- .../ts/src/cctp/messageTransmitter/index.ts | 28 +---- .../ts/src/cctp/tokenMessengerMinter/index.ts | 31 +----- solana/ts/src/matchingEngine/index.ts | 24 ++-- solana/ts/src/tokenRouter/index.ts | 19 +++- solana/ts/src/upgradeManager/index.ts | 5 + 21 files changed, 240 insertions(+), 75 deletions(-) create mode 100644 solana/ts/scripts/getMainnetInfo.ts diff --git a/package-lock.json b/package-lock.json index b72666c3c..c1ce12f20 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4111,6 +4111,7 @@ "@wormhole-foundation/example-liquidity-layer-definitions": "0.0.1", "@wormhole-foundation/sdk-base": "^0.7.0-beta.6", "@wormhole-foundation/sdk-definitions": "^0.7.0-beta.6", + "@wormhole-foundation/sdk-evm": "^0.7.0-beta.6", "@wormhole-foundation/sdk-solana": "^0.7.0-beta.6", "@wormhole-foundation/sdk-solana-core": "^0.7.0-beta.6", "anchor-0.29.0": "npm:@coral-xyz/anchor@^0.29.0", diff --git a/solana/Anchor.toml b/solana/Anchor.toml index 7dac16d59..43884d9b5 100644 --- a/solana/Anchor.toml +++ b/solana/Anchor.toml @@ -23,6 +23,11 @@ token_router = "tD8RmtdcV7bzBeuFgyrFc8wvayj988ChccEzRQzo6md" matching_engine = "mPydpGUWxzERTNpyvTKdvS7v8kvw5sgwfiP8WQFrXVS" upgrade_manager = "ucdP9ktgrXgEUnn6roqD2SfdGMR2JSiWHUKv23oXwxt" +[programs.mainnet] +token_router = "28topqjtJzMnPaGFmmZk68tzGmj9W9aMntaEK3QkgtRe" +matching_engine = "HtkeCDdYY4i9ncAxXKjYTx8Uu3WM8JbtiLRYjtHwaVXb" +upgrade_manager = "4jyJ7EEsYa72REdD8ZMBvHFTXZ4VYGQPUHaJTajsK8SN" + [registry] url = "https://api.apr.dev" diff --git a/solana/Makefile b/solana/Makefile index ae47eaca9..0d72bd4fe 100644 --- a/solana/Makefile +++ b/solana/Makefile @@ -30,6 +30,7 @@ cargo-test: cargo-test-all: NETWORK=localnet $(MAKE) cargo-test NETWORK=testnet $(MAKE) cargo-test + NETWORK=mainnet $(MAKE) cargo-test .PHONY: build build: @@ -79,6 +80,7 @@ lint: cargo fmt --check NETWORK=localnet $(MAKE) clippy NETWORK=testnet $(MAKE) clippy + NETWORK=mainnet $(MAKE) clippy ts/tests/artifacts: mkdir ts/tests/artifacts diff --git a/solana/modules/common/Cargo.toml b/solana/modules/common/Cargo.toml index 38b68be5f..6a3cd733c 100644 --- a/solana/modules/common/Cargo.toml +++ b/solana/modules/common/Cargo.toml @@ -10,6 +10,7 @@ repository.workspace = true # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [features] +mainnet = ["wormhole-solana-consts/mainnet", "wormhole-cctp-solana/mainnet"] testnet = ["wormhole-solana-consts/testnet", "wormhole-cctp-solana/testnet"] localnet = ["wormhole-solana-consts/mainnet", "wormhole-cctp-solana/mainnet"] idl-build = ["localnet", "anchor-lang/idl-build"] diff --git a/solana/modules/common/src/lib.rs b/solana/modules/common/src/lib.rs index 889f0aca5..fe23481de 100644 --- a/solana/modules/common/src/lib.rs +++ b/solana/modules/common/src/lib.rs @@ -17,7 +17,10 @@ pub use wormhole_solana_consts::USDC_MINT; use solana_program::{pubkey, pubkey::Pubkey}; cfg_if::cfg_if! { - if #[cfg(feature = "testnet")] { + if #[cfg(feature = "mainnet")] { + pub const UPGRADE_MANAGER_PROGRAM_ID: Pubkey = pubkey!("4jyJ7EEsYa72REdD8ZMBvHFTXZ4VYGQPUHaJTajsK8SN"); + pub const UPGRADE_MANAGER_AUTHORITY: Pubkey = pubkey!("Ag7BnUJ6C3mFXTaJfL2v9eJM2QbQ7GNLsDyewdCCLY8r"); + } else if #[cfg(feature = "testnet")] { pub const UPGRADE_MANAGER_PROGRAM_ID: Pubkey = pubkey!("ucdP9ktgrXgEUnn6roqD2SfdGMR2JSiWHUKv23oXwxt"); pub const UPGRADE_MANAGER_AUTHORITY: Pubkey = pubkey!("2sxpm9pvWmNWFzhgWtmxkMsdWk2uSNT9MoKvww53po1M"); } else if #[cfg(feature = "localnet")] { diff --git a/solana/package.json b/solana/package.json index 878a61b49..4f195fffd 100644 --- a/solana/package.json +++ b/solana/package.json @@ -39,6 +39,7 @@ "@wormhole-foundation/example-liquidity-layer-definitions": "0.0.1", "@wormhole-foundation/sdk-base": "^0.7.0-beta.6", "@wormhole-foundation/sdk-definitions": "^0.7.0-beta.6", + "@wormhole-foundation/sdk-evm": "^0.7.0-beta.6", "@wormhole-foundation/sdk-solana": "^0.7.0-beta.6", "@wormhole-foundation/sdk-solana-core": "^0.7.0-beta.6", "anchor-0.29.0": "npm:@coral-xyz/anchor@^0.29.0", diff --git a/solana/programs/matching-engine/Cargo.toml b/solana/programs/matching-engine/Cargo.toml index a95471916..0704b5873 100644 --- a/solana/programs/matching-engine/Cargo.toml +++ b/solana/programs/matching-engine/Cargo.toml @@ -17,6 +17,7 @@ no-entrypoint = [] no-idl = [] no-log-ix-name = [] cpi = ["no-entrypoint"] +mainnet = ["common/mainnet"] testnet = ["common/testnet"] localnet = ["common/localnet"] integration-test = ["localnet"] diff --git a/solana/programs/matching-engine/src/lib.rs b/solana/programs/matching-engine/src/lib.rs index 9e52f7823..26a7263b0 100644 --- a/solana/programs/matching-engine/src/lib.rs +++ b/solana/programs/matching-engine/src/lib.rs @@ -18,7 +18,12 @@ pub use utils::admin::AddCctpRouterEndpointArgs; use anchor_lang::{prelude::*, solana_program::pubkey}; cfg_if::cfg_if! { - if #[cfg(feature = "testnet")] { + if #[cfg(feature = "mainnet")] { + declare_id!("HtkeCDdYY4i9ncAxXKjYTx8Uu3WM8JbtiLRYjtHwaVXb"); + + const CUSTODIAN_BUMP: u8 = 254; + const CCTP_MINT_RECIPIENT: Pubkey = pubkey!("HUXc7MBf55vWrrkevVbmJN8HAyfFtjLcPLBt9yWngKzm"); + } else if #[cfg(feature = "testnet")] { declare_id!("mPydpGUWxzERTNpyvTKdvS7v8kvw5sgwfiP8WQFrXVS"); const CUSTODIAN_BUMP: u8 = 254; diff --git a/solana/programs/matching-engine/src/processor/admin/initialize.rs b/solana/programs/matching-engine/src/processor/admin/initialize.rs index adbdcd481..7ae99e18b 100644 --- a/solana/programs/matching-engine/src/processor/admin/initialize.rs +++ b/solana/programs/matching-engine/src/processor/admin/initialize.rs @@ -86,7 +86,7 @@ pub struct Initialize<'info> { program_data.upgrade_authority_address.is_some() } @ MatchingEngineError::ImmutableProgram )] - program_data: Account<'info, ProgramData>, + program_data: Box>, /// CHECK: This program PDA will be the upgrade authority for the Token Router program. #[account(address = common::UPGRADE_MANAGER_AUTHORITY)] @@ -110,7 +110,7 @@ pub struct InitializeArgs { } pub fn initialize(ctx: Context, args: InitializeArgs) -> Result<()> { - let owner: Pubkey = ctx.accounts.owner.key(); + let owner = ctx.accounts.owner.key(); let auction_config_id = 0; // We need to check that the upgrade authority is the owner passed into the account context. diff --git a/solana/programs/token-router/Cargo.toml b/solana/programs/token-router/Cargo.toml index 77a6d11bb..a5377182a 100644 --- a/solana/programs/token-router/Cargo.toml +++ b/solana/programs/token-router/Cargo.toml @@ -17,8 +17,18 @@ no-entrypoint = [] no-idl = [] no-log-ix-name = [] cpi = ["no-entrypoint"] -testnet = ["common/testnet", "matching-engine/testnet"] -localnet = ["common/localnet", "matching-engine/localnet"] +mainnet = [ + "common/mainnet", + "matching-engine/mainnet" +] +testnet = [ + "common/testnet", + "matching-engine/testnet" +] +localnet = [ + "common/localnet", + "matching-engine/localnet" +] integration-test = ["localnet"] idl-build = [ "localnet", diff --git a/solana/programs/token-router/src/lib.rs b/solana/programs/token-router/src/lib.rs index 0d5d6875a..4fbecbe59 100644 --- a/solana/programs/token-router/src/lib.rs +++ b/solana/programs/token-router/src/lib.rs @@ -14,7 +14,12 @@ pub mod state; use anchor_lang::{prelude::*, solana_program::pubkey}; cfg_if::cfg_if! { - if #[cfg(feature = "testnet")] { + if #[cfg(feature = "mainnet")] { + declare_id!("28topqjtJzMnPaGFmmZk68tzGmj9W9aMntaEK3QkgtRe"); + + const CUSTODIAN_BUMP: u8 = 255; + const CCTP_MINT_RECIPIENT: Pubkey = pubkey!("J9jEttqjYkWWaWDvwuo69fLPEA9fHEUQqE62WjBCf55P"); + } else if #[cfg(feature = "testnet")] { declare_id!("tD8RmtdcV7bzBeuFgyrFc8wvayj988ChccEzRQzo6md"); const CUSTODIAN_BUMP: u8 = 255; diff --git a/solana/programs/upgrade-manager/Cargo.toml b/solana/programs/upgrade-manager/Cargo.toml index 405b9771b..910866dc9 100644 --- a/solana/programs/upgrade-manager/Cargo.toml +++ b/solana/programs/upgrade-manager/Cargo.toml @@ -17,8 +17,21 @@ no-entrypoint = [] no-idl = [] no-log-ix-name = [] cpi = ["no-entrypoint"] -testnet = ["common/testnet", "matching-engine/testnet", "token-router/testnet"] -localnet = ["common/localnet", "matching-engine/localnet", "token-router/localnet"] +mainnet = [ + "common/mainnet", + "matching-engine/mainnet", + "token-router/mainnet" +] +testnet = [ + "common/testnet", + "matching-engine/testnet", + "token-router/testnet" +] +localnet = [ + "common/localnet", + "matching-engine/localnet", + "token-router/localnet" +] integration-test = ["localnet"] idl-build = [ "localnet", diff --git a/solana/programs/upgrade-manager/src/lib.rs b/solana/programs/upgrade-manager/src/lib.rs index 0ef7fdf64..86a15354c 100644 --- a/solana/programs/upgrade-manager/src/lib.rs +++ b/solana/programs/upgrade-manager/src/lib.rs @@ -17,7 +17,9 @@ use anchor_lang::prelude::*; declare_id!(common::UPGRADE_MANAGER_PROGRAM_ID); cfg_if::cfg_if! { - if #[cfg(feature = "testnet")] { + if #[cfg(feature = "mainnet")] { + const UPGRADE_AUTHORITY_BUMP: u8 = 255; + } else if #[cfg(feature = "testnet")] { const UPGRADE_AUTHORITY_BUMP: u8 = 255; } else if #[cfg(feature = "localnet")] { const UPGRADE_AUTHORITY_BUMP: u8 = 255; diff --git a/solana/ts/scripts/getMainnetInfo.ts b/solana/ts/scripts/getMainnetInfo.ts new file mode 100644 index 000000000..583a01d62 --- /dev/null +++ b/solana/ts/scripts/getMainnetInfo.ts @@ -0,0 +1,103 @@ +import { Connection, PublicKey } from "@solana/web3.js"; +import { Chain, toChainId } from "@wormhole-foundation/sdk-base"; +import { toUniversal } from "@wormhole-foundation/sdk-definitions"; +import "@wormhole-foundation/sdk-evm/address"; +import * as matchingEngineSdk from "../src/matchingEngine"; +import * as tokenRouterSdk from "../src/tokenRouter"; + +const USDC_MINT = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"); + +const CHAINS: Chain[] = ["Arbitrum", "Base"]; + +// Here we go. +main(); + +// impl + +async function main() { + const connection = new Connection("https://api.mainnet-beta.solana.com", "confirmed"); + + console.log("Collecting Solana Matching Engine and Token Router Info..."); + console.log(); + { + const matchingEngine = new matchingEngineSdk.MatchingEngineProgram( + connection, + matchingEngineSdk.mainnet(), + USDC_MINT, + ); + + const custodian = matchingEngine.custodianAddress(); + console.log("Matching Engine"); + console.log(" Custodian (NOTE: The Custodian's address is the program's emitter):"); + console.log(` Native: ${custodian.toString()}`); + console.log(` Universal: ${custodian.toBuffer().toString("hex")}`); + console.log(); + + const cctpMintRecipient = matchingEngine.cctpMintRecipientAddress(); + console.log(" Mint Recipient:"); + console.log(` Native: ${cctpMintRecipient.toString()}`); + console.log(` Universal: ${cctpMintRecipient.toBuffer().toString("hex")}`); + console.log(); + + const custodianData = await matchingEngine.fetchCustodian(); + console.log("Custodian Data"); + console.log(JSON.stringify(custodianData, null, 2)); + console.log(); + + const auctionConfig = await matchingEngine.fetchAuctionConfig( + custodianData.auctionConfigId, + ); + console.log("Auction Config Data"); + console.log(JSON.stringify(auctionConfig, null, 2)); + console.log(); + + for (const chainName of CHAINS) { + await matchingEngine + .fetchRouterEndpointInfo(toChainId(chainName)) + .then((endpointData) => { + console.log( + `Registered Endpoint (${chainName}): ${stringifyEndpoint( + chainName, + endpointData, + )}`, + ); + }) + .catch((err) => { + console.log(`Not Registered: ${chainName}`); + }); + console.log(); + } + } + + { + const tokenRouter = new tokenRouterSdk.TokenRouterProgram( + connection, + tokenRouterSdk.mainnet(), + USDC_MINT, + ); + + const custodian = tokenRouter.custodianAddress(); + console.log(`Token Router`); + console.log(" Custodian (NOTE: The Custodian's address is the program's emitter):"); + console.log(` Native: ${custodian.toString()}`); + console.log(` Universal: ${custodian.toBuffer().toString("hex")}`); + console.log(); + + const cctpMintRecipient = tokenRouter.cctpMintRecipientAddress(); + console.log(" Mint Recipient:"); + console.log(` Native: ${cctpMintRecipient.toString()}`); + console.log(` Universal: ${cctpMintRecipient.toBuffer().toString("hex")}`); + console.log(); + } +} + +function stringifyEndpoint(chain: Chain, endpoint: matchingEngineSdk.EndpointInfo) { + const out = { + address: toUniversal(chain, Uint8Array.from(endpoint.address)).toNative(chain).toString(), + mintRecipient: toUniversal(chain, Uint8Array.from(endpoint.mintRecipient)) + .toNative(chain) + .toString(), + protocol: endpoint.protocol, + }; + return JSON.stringify(out, null, 2); +} diff --git a/solana/ts/scripts/getTestnetInfo.ts b/solana/ts/scripts/getTestnetInfo.ts index 914918b9b..0e8948e77 100644 --- a/solana/ts/scripts/getTestnetInfo.ts +++ b/solana/ts/scripts/getTestnetInfo.ts @@ -6,7 +6,7 @@ import * as tokenRouterSdk from "../src/tokenRouter"; const USDC_MINT = new PublicKey("4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU"); -const CHAINS: Chain[] = [ +export const CHAINS: Chain[] = [ "Sepolia", "Avalanche", "OptimismSepolia", diff --git a/solana/ts/scripts/setUpMatchingEngineLut.ts b/solana/ts/scripts/setUpMatchingEngineLut.ts index a2aef0072..20b96ecfb 100644 --- a/solana/ts/scripts/setUpMatchingEngineLut.ts +++ b/solana/ts/scripts/setUpMatchingEngineLut.ts @@ -8,6 +8,8 @@ import { } from "@solana/web3.js"; import "dotenv/config"; import { MatchingEngineProgram } from "../src/matchingEngine"; +import { CHAINS } from "./getTestnetInfo"; +import { toChainId } from "@wormhole-foundation/sdk-base"; const PROGRAM_ID = "mPydpGUWxzERTNpyvTKdvS7v8kvw5sgwfiP8WQFrXVS"; const USDC_MINT = new PublicKey("4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU"); @@ -39,16 +41,44 @@ async function main() { // ]); // console.log("createTx", createTx); - const lookupTable = new PublicKey("pGTATFy5xgzdxu6XpiCzCu1uE3Ur473gGUD2pZykahf"); + const lookupTable = new PublicKey("DaZU4eDFxq8hAHf78HLUyhWe8G2tszyaNUJoFgDCqqs8"); const usdcCommonAccounts = await matchingEngine.commonAccounts(); + const addresses = [ + ...Object.values(usdcCommonAccounts).filter((key) => key !== undefined), + payer.publicKey, + ]; + + const uniqueAddresses = new Map(); + + for (const chainName of CHAINS) { + const { protocol } = await matchingEngine.fetchRouterEndpointInfo(toChainId(chainName)); + + if (protocol.cctp?.domain === undefined) { + console.warn(`Couldn't find cctp domain for ${chainName}`); + continue; + } + const { remoteTokenMessenger, tokenMessengerMinterEventAuthority } = await matchingEngine + .tokenMessengerMinterProgram() + .depositForBurnWithCallerAccounts(matchingEngine.mint, protocol.cctp?.domain); + + uniqueAddresses.set(remoteTokenMessenger.toBase58(), remoteTokenMessenger); + // Note: Some of the tokenMessengerMinterEventAuthority addresses are the same across cctp domains. + uniqueAddresses.set( + tokenMessengerMinterEventAuthority.toBase58(), + tokenMessengerMinterEventAuthority, + ); + } + + addresses.push(...Array.from(uniqueAddresses.values())); + // Extend. const extendIx = AddressLookupTableProgram.extendLookupTable({ payer: payer.publicKey, authority: payer.publicKey, lookupTable, - addresses: Object.values(usdcCommonAccounts).filter((key) => key !== undefined), + addresses, }); const extendTx = await sendAndConfirmTransaction( diff --git a/solana/ts/src/cctp/messageTransmitter/index.ts b/solana/ts/src/cctp/messageTransmitter/index.ts index 4366bffd0..cdbf26c7d 100644 --- a/solana/ts/src/cctp/messageTransmitter/index.ts +++ b/solana/ts/src/cctp/messageTransmitter/index.ts @@ -33,7 +33,7 @@ export class MessageTransmitterProgram { program: Program; constructor(connection: Connection, programId?: ProgramId) { - this._programId = programId ?? testnet(); + this._programId = programId ?? PROGRAM_IDS[0]; this.program = new Program(IDL, new PublicKey(this._programId), { connection, }); @@ -71,23 +71,7 @@ export class MessageTransmitterProgram { } tokenMessengerMinterProgram(): TokenMessengerMinterProgram { - switch (this._programId) { - case testnet(): { - return new TokenMessengerMinterProgram( - this.program.provider.connection, - "CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3", - ); - } - case mainnet(): { - return new TokenMessengerMinterProgram( - this.program.provider.connection, - "CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3", - ); - } - default: { - throw new Error("unsupported network"); - } - } + return new TokenMessengerMinterProgram(this.program.provider.connection); } receiveTokenMessengerMinterMessageAccounts( @@ -133,11 +117,3 @@ export class MessageTransmitterProgram { .instruction(); } } - -export function mainnet(): ProgramId { - return "CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd"; -} - -export function testnet(): ProgramId { - return "CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd"; -} diff --git a/solana/ts/src/cctp/tokenMessengerMinter/index.ts b/solana/ts/src/cctp/tokenMessengerMinter/index.ts index 6541cbec6..7b325488b 100644 --- a/solana/ts/src/cctp/tokenMessengerMinter/index.ts +++ b/solana/ts/src/cctp/tokenMessengerMinter/index.ts @@ -26,7 +26,7 @@ export class TokenMessengerMinterProgram { program: Program; constructor(connection: Connection, programId?: ProgramId) { - this._programId = programId ?? testnet(); + this._programId = programId ?? PROGRAM_IDS[0]; this.program = new Program(IDL, new PublicKey(this._programId), { connection, }); @@ -89,23 +89,10 @@ export class TokenMessengerMinterProgram { } messageTransmitterProgram(): MessageTransmitterProgram { - switch (this._programId) { - case testnet(): { - return new MessageTransmitterProgram( - this.program.provider.connection, - "CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd", - ); - } - case mainnet(): { - return new MessageTransmitterProgram( - this.program.provider.connection, - "CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd", - ); - } - default: { - throw new Error("unsupported network"); - } - } + return new MessageTransmitterProgram( + this.program.provider.connection, + "CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd", + ); } depositForBurnWithCallerAccounts( @@ -126,11 +113,3 @@ export class TokenMessengerMinterProgram { }; } } - -export function mainnet(): ProgramId { - return "CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3"; -} - -export function testnet(): ProgramId { - return "CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3"; -} diff --git a/solana/ts/src/matchingEngine/index.ts b/solana/ts/src/matchingEngine/index.ts index 74422e341..c98ce1436 100644 --- a/solana/ts/src/matchingEngine/index.ts +++ b/solana/ts/src/matchingEngine/index.ts @@ -60,6 +60,7 @@ import { decodeIdlAccount } from "anchor-0.29.0/dist/cjs/idl"; export const PROGRAM_IDS = [ "MatchingEngine11111111111111111111111111111", "mPydpGUWxzERTNpyvTKdvS7v8kvw5sgwfiP8WQFrXVS", + "HtkeCDdYY4i9ncAxXKjYTx8Uu3WM8JbtiLRYjtHwaVXb", ] as const; export const FEE_PRECISION_MAX = 1_000_000n; @@ -2468,6 +2469,12 @@ export class MatchingEngineProgram { upgradeManagerProgram(): UpgradeManagerProgram { switch (this._programId) { + case mainnet(): { + return new UpgradeManagerProgram( + this.program.provider.connection, + "4jyJ7EEsYa72REdD8ZMBvHFTXZ4VYGQPUHaJTajsK8SN", + ); + } case testnet(): { return new UpgradeManagerProgram( this.program.provider.connection, @@ -2487,21 +2494,18 @@ export class MatchingEngineProgram { } tokenMessengerMinterProgram(): TokenMessengerMinterProgram { - return new TokenMessengerMinterProgram( - this.program.provider.connection, - "CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3", - ); + return new TokenMessengerMinterProgram(this.program.provider.connection); } messageTransmitterProgram(): MessageTransmitterProgram { - return new MessageTransmitterProgram( - this.program.provider.connection, - "CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd", - ); + return new MessageTransmitterProgram(this.program.provider.connection); } coreBridgeProgramId(): PublicKey { switch (this._programId) { + case mainnet(): { + return new PublicKey("worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth"); + } case testnet(): { return new PublicKey("3u8hJUVTA4jH1wYAyUur7FFZVQ8H635K3tSHHF4ssjQ5"); } @@ -2566,6 +2570,10 @@ export class MatchingEngineProgram { } } +export function mainnet(): ProgramId { + return "HtkeCDdYY4i9ncAxXKjYTx8Uu3WM8JbtiLRYjtHwaVXb"; +} + export function testnet(): ProgramId { return "mPydpGUWxzERTNpyvTKdvS7v8kvw5sgwfiP8WQFrXVS"; } diff --git a/solana/ts/src/tokenRouter/index.ts b/solana/ts/src/tokenRouter/index.ts index c667768dc..b96c7cdaa 100644 --- a/solana/ts/src/tokenRouter/index.ts +++ b/solana/ts/src/tokenRouter/index.ts @@ -33,6 +33,7 @@ import { ChainId, isChainId } from "@wormhole-foundation/sdk-base"; export const PROGRAM_IDS = [ "TokenRouter11111111111111111111111111111111", "tD8RmtdcV7bzBeuFgyrFc8wvayj988ChccEzRQzo6md", + "28topqjtJzMnPaGFmmZk68tzGmj9W9aMntaEK3QkgtRe", ] as const; export type ProgramId = (typeof PROGRAM_IDS)[number]; @@ -938,6 +939,13 @@ export class TokenRouterProgram { matchingEngineProgram(): matchingEngineSdk.MatchingEngineProgram { switch (this._programId) { + case mainnet(): { + return new matchingEngineSdk.MatchingEngineProgram( + this.program.provider.connection, + matchingEngineSdk.mainnet(), + this.mint, + ); + } case testnet(): { return new matchingEngineSdk.MatchingEngineProgram( this.program.provider.connection, @@ -960,6 +968,9 @@ export class TokenRouterProgram { coreBridgeProgramId(): PublicKey { switch (this._programId) { + case mainnet(): { + return new PublicKey("worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth"); + } case testnet(): { return new PublicKey("3u8hJUVTA4jH1wYAyUur7FFZVQ8H635K3tSHHF4ssjQ5"); } @@ -973,10 +984,14 @@ export class TokenRouterProgram { } } -export function localnet(): ProgramId { - return "TokenRouter11111111111111111111111111111111"; +export function mainnet(): ProgramId { + return "28topqjtJzMnPaGFmmZk68tzGmj9W9aMntaEK3QkgtRe"; } export function testnet(): ProgramId { return "tD8RmtdcV7bzBeuFgyrFc8wvayj988ChccEzRQzo6md"; } + +export function localnet(): ProgramId { + return "TokenRouter11111111111111111111111111111111"; +} diff --git a/solana/ts/src/upgradeManager/index.ts b/solana/ts/src/upgradeManager/index.ts index 371e9fe69..4f58b227e 100644 --- a/solana/ts/src/upgradeManager/index.ts +++ b/solana/ts/src/upgradeManager/index.ts @@ -19,6 +19,7 @@ import { UpgradeReceipt } from "./state"; export const PROGRAM_IDS = [ "UpgradeManager11111111111111111111111111111", "ucdP9ktgrXgEUnn6roqD2SfdGMR2JSiWHUKv23oXwxt", + "4jyJ7EEsYa72REdD8ZMBvHFTXZ4VYGQPUHaJTajsK8SN", ] as const; export type ProgramId = (typeof PROGRAM_IDS)[number]; @@ -236,6 +237,10 @@ export class UpgradeManagerProgram { } } +export function mainnet(): ProgramId { + return "4jyJ7EEsYa72REdD8ZMBvHFTXZ4VYGQPUHaJTajsK8SN"; +} + export function testnet(): ProgramId { return "ucdP9ktgrXgEUnn6roqD2SfdGMR2JSiWHUKv23oXwxt"; }