diff --git a/governance/remote_executor/cli/src/main.rs b/governance/remote_executor/cli/src/main.rs index 3f0544bec2..7b96979268 100644 --- a/governance/remote_executor/cli/src/main.rs +++ b/governance/remote_executor/cli/src/main.rs @@ -87,9 +87,11 @@ fn main() -> Result<()> { let wormhole_config_data = Config::try_from_slice(&rpc_client.get_account_data(&wormhole_config)?)?; + let guardian_set_data_offset = if cli.chain == 26 { 0 } else { 8 }; // Pythnet's guardian set account has no discriminator let guardian_set = GuardianSet::key(&wormhole, wormhole_config_data.guardian_set_index); - let guardian_set_data = - GuardianSet::try_from_slice(&rpc_client.get_account_data(&guardian_set)?)?; + let guardian_set_data = GuardianSet::try_from_slice( + &rpc_client.get_account_data(&guardian_set)?[guardian_set_data_offset..], + )?; let signature_set_keypair = Keypair::new(); @@ -167,9 +169,18 @@ fn main() -> Result<()> { let wormhole_config_data = Config::try_from_slice(&rpc_client.get_account_data(&wormhole_config)?)?; + let executor_key = Pubkey::find_program_address( + &[EXECUTOR_KEY_SEED.as_bytes(), &payer.pubkey().to_bytes()], + &ID, + ) + .0; let payload = ExecutorPayload { header: GovernanceHeader::executor_governance_header(cli.chain), - instructions: vec![], + instructions: vec![InstructionData::from(&system_instruction::transfer( + &executor_key, + &payer.pubkey(), + 1, + ))], } .try_to_vec()?; diff --git a/governance/remote_executor/programs/remote-executor/Cargo.toml b/governance/remote_executor/programs/remote-executor/Cargo.toml index db20da538f..9b2fda153b 100644 --- a/governance/remote_executor/programs/remote-executor/Cargo.toml +++ b/governance/remote_executor/programs/remote-executor/Cargo.toml @@ -24,6 +24,7 @@ pythtest = [] eclipse_devnet = [] eclipse_testnet = [] eclipse_mainnet = [] +mantis_testnet = [] [dependencies] anchor-lang = {version = "0.25.0", features = ["init-if-needed"]} diff --git a/governance/remote_executor/programs/remote-executor/src/state/governance_payload.rs b/governance/remote_executor/programs/remote-executor/src/state/governance_payload.rs index 494ab347d0..5ea9dc6056 100644 --- a/governance/remote_executor/programs/remote-executor/src/state/governance_payload.rs +++ b/governance/remote_executor/programs/remote-executor/src/state/governance_payload.rs @@ -20,6 +20,7 @@ pub const CHAIN_ID_ARRAY: &[(&str, u16)] = &[ ("eclipse_devnet", 40001), ("eclipse_testnet", 40002), ("eclipse_mainnet", 40003), + ("mantis_testnet", 40004), ]; #[cfg(any(feature = "pythnet", feature = "pythtest"))] @@ -34,6 +35,9 @@ pub const CHAIN_ID: u16 = 40002; #[cfg(feature = "eclipse_mainnet")] pub const CHAIN_ID: u16 = 40003; +#[cfg(feature = "mantis_testnet")] +pub const CHAIN_ID: u16 = 40004; + #[derive(AnchorDeserialize, AnchorSerialize, Debug, PartialEq, Eq)] pub struct ExecutorPayload { pub header: GovernanceHeader, diff --git a/governance/remote_executor/programs/remote-executor/src/state/posted_vaa.rs b/governance/remote_executor/programs/remote-executor/src/state/posted_vaa.rs index 4e5e769957..0448456083 100644 --- a/governance/remote_executor/programs/remote-executor/src/state/posted_vaa.rs +++ b/governance/remote_executor/programs/remote-executor/src/state/posted_vaa.rs @@ -23,7 +23,8 @@ impl Owner for AnchorVaa { #[cfg(any( feature = "eclipse_devnet", feature = "eclipse_testnet", - feature = "eclipse_mainnet" + feature = "eclipse_mainnet", + feature = "mantis_testnet", ))] fn owner() -> Pubkey { Pubkey::from_str("HDwcJBJXjL9FpJ7UBsYBtaDjsBUhuLCUYoz3zr8SWWaQ").unwrap() diff --git a/target_chains/solana/cli/src/cli.rs b/target_chains/solana/cli/src/cli.rs index a5c413e4f7..fe05eaae4c 100644 --- a/target_chains/solana/cli/src/cli.rs +++ b/target_chains/solana/cli/src/cli.rs @@ -57,10 +57,12 @@ pub enum Action { InitializeWormholeReceiver {}, InitializePythReceiver { #[clap(short = 'f', long, help = "Fee in lmaports")] - fee: u64, + fee: u64, #[clap(short = 'e', long, parse(try_from_str = Pubkey::from_str), help = "Source emitter")] - emitter: Pubkey, + emitter: Pubkey, #[clap(short = 'c', long, help = "Source chain")] - chain: u16, + chain: u16, + #[clap(short = 'a', long, parse(try_from_str = Pubkey::from_str), help = "Governance authority")] + governance_authority: Pubkey, }, } diff --git a/target_chains/solana/cli/src/main.rs b/target_chains/solana/cli/src/main.rs index 3c255faed9..6c626c25be 100644 --- a/target_chains/solana/cli/src/main.rs +++ b/target_chains/solana/cli/src/main.rs @@ -170,6 +170,7 @@ fn main() -> Result<()> { fee, emitter, chain, + governance_authority, } => { let rpc_client = RpcClient::new(url); let payer = @@ -179,7 +180,7 @@ fn main() -> Result<()> { pyth_solana_receiver::instruction::Initialize::populate( &payer.pubkey(), pyth_solana_receiver_sdk::config::Config { - governance_authority: payer.pubkey(), + governance_authority, target_governance_authority: None, wormhole, valid_data_sources: vec![DataSource { chain, emitter }], @@ -480,7 +481,7 @@ pub fn process_transaction( let transaction_signature_res = rpc_client .send_and_confirm_transaction_with_spinner_and_config( &transaction, - CommitmentConfig::finalized(), + CommitmentConfig::confirmed(), RpcSendTransactionConfig { skip_preflight: true, ..Default::default()