diff --git a/governance/remote_executor/cli/src/main.rs b/governance/remote_executor/cli/src/main.rs index 7b96979268..1ce098f50f 100644 --- a/governance/remote_executor/cli/src/main.rs +++ b/governance/remote_executor/cli/src/main.rs @@ -40,7 +40,10 @@ use { EXECUTOR_KEY_SEED, ID, }, - solana_client::rpc_client::RpcClient, + solana_client::{ + rpc_client::RpcClient, + rpc_config::RpcSendTransactionConfig, + }, solana_sdk::{ instruction::{ AccountMeta, @@ -273,10 +276,40 @@ pub fn process_transaction( ) -> Result<()> { let mut transaction = Transaction::new_with_payer(instructions.as_slice(), Some(&signers[0].pubkey())); - transaction.sign(signers, rpc_client.get_latest_blockhash()?); - let transaction_signature = - rpc_client.send_and_confirm_transaction_with_spinner(&transaction)?; - println!("Transaction successful : {transaction_signature:?}"); + let recent_blockhash = rpc_client.get_latest_blockhash()?; + transaction.sign(signers, recent_blockhash); + + // Simulate the transaction + let simulation_result = rpc_client.simulate_transaction(&transaction)?; + + // Check if simulation was successful + if let Some(err) = simulation_result.value.err { + println!("Transaction simulation failed: {:?}", err); + if let Some(logs) = simulation_result.value.logs { + println!("Simulation logs:"); + for (i, log) in logs.iter().enumerate() { + println!(" {}: {}", i, log); + } + } + return Err(anyhow::anyhow!("Transaction simulation failed")); + } + + // If simulation was successful, send the actual transaction + let config = RpcSendTransactionConfig { + skip_preflight: true, + ..RpcSendTransactionConfig::default() + }; + let transaction_signature = rpc_client.send_transaction_with_config(&transaction, config)?; + println!("Transaction sent: {transaction_signature:?}"); + + // Wait for confirmation + rpc_client.confirm_transaction_with_spinner( + &transaction_signature, + &recent_blockhash, + rpc_client.commitment(), + )?; + + println!("Transaction confirmed: {transaction_signature:?}"); Ok(()) } diff --git a/governance/remote_executor/programs/remote-executor/Cargo.toml b/governance/remote_executor/programs/remote-executor/Cargo.toml index 47e1ed462d..08b338a3bf 100644 --- a/governance/remote_executor/programs/remote-executor/Cargo.toml +++ b/governance/remote_executor/programs/remote-executor/Cargo.toml @@ -27,6 +27,7 @@ eclipse_mainnet = [] mantis_testnet = [] sonic_devnet = [] sonic_testnet = [] +atlas_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 65316d2a0b..b784ae2503 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 @@ -23,6 +23,7 @@ pub const CHAIN_ID_ARRAY: &[(&str, u16)] = &[ ("mantis_testnet", 40004), ("sonic_devnet", 40005), ("sonic_testnet", 40006), + ("atlas_testnet", 40007), ]; #[cfg(any(feature = "pythnet", feature = "pythtest"))] @@ -46,6 +47,9 @@ pub const CHAIN_ID: u16 = 40005; #[cfg(feature = "sonic_testnet")] pub const CHAIN_ID: u16 = 40006; +#[cfg(feature = "atlas_testnet")] +pub const CHAIN_ID: u16 = 40007; + #[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 e975527391..e7d3fa7909 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 @@ -27,6 +27,7 @@ impl Owner for AnchorVaa { feature = "mantis_testnet", feature = "sonic_devnet", feature = "sonic_testnet", + feature = "atlas_testnet", ))] fn owner() -> Pubkey { Pubkey::from_str("HDwcJBJXjL9FpJ7UBsYBtaDjsBUhuLCUYoz3zr8SWWaQ").unwrap()