Skip to content
Draft
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
10 changes: 0 additions & 10 deletions solana/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion solana/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ bytemuck = "1.13.0"
wormhole-svm-shim = { git = "https://github.com/wormhole-foundation/wormhole.git", rev = "33dd6a56541c2d15d3e20faa1330ba542a5fa727" }
wormhole-svm-definitions = { git = "https://github.com/wormhole-foundation/wormhole.git", rev = "33dd6a56541c2d15d3e20faa1330ba542a5fa727", features = ["borsh"] }

[patch."https://github.com/wormholelabs-xyz/wormhole.git"]
[patch."https://github.com/wormhole-foundation/wormhole.git"]
wormhole-svm-shim = { path = "lib/wormhole/svm/wormhole-core-shims/crates/shim" }
wormhole-svm-definitions = { path = "lib/wormhole/svm/wormhole-core-shims/crates/definitions" }

Expand Down
2 changes: 1 addition & 1 deletion solana/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ test-sbf:
cargo build-sbf --features mainnet
### Unfortunately we cannot saturate all CPUs to perform tests due to nondeterministic `RpcError`
### reverts. We constrain the number of threads when we run these tests.
cd modules/matching-engine-testing && cargo test-sbf --features mainnet -- --test-threads 1
cd modules/matching-engine-testing && cargo test-sbf --features mainnet -- --test-threads 5

.PHONY: anchor-test
anchor-test: anchor-test-setup
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,16 +51,17 @@ pub async fn initialize_fast_market_order_shimful(
let program_id = &testing_context.get_matching_engine_program_id();
let test_vaa_pair = current_state.get_test_vaa_pair(config.vaa_index);
let fast_transfer_vaa = test_vaa_pair.fast_transfer_vaa.clone();
let fast_market_order = create_fast_market_order_state_from_vaa_data(
let fast_market_order_params = create_fast_market_order_params_from_vaa_data(
&fast_transfer_vaa.vaa_data,
config
.close_account_refund_recipient
.unwrap_or_else(|| testing_context.testing_actors.solvers[0].pubkey()),
);
let fast_market_order = FastMarketOrderState::new(&fast_market_order_params);
let payer_signer = config
.payer_signer
.clone()
.unwrap_or_else(|| testing_context.testing_actors.payer_signer.clone());
.unwrap_or_else(|| testing_context.testing_actors.solvers[0].keypair().clone());
let guardian_signature_info = create_guardian_signatures(
testing_context,
test_context,
Expand All @@ -75,8 +76,8 @@ pub async fn initialize_fast_market_order_shimful(
let (fast_market_order_account, fast_market_order_bump) = Pubkey::find_program_address(
&[
FastMarketOrderState::SEED_PREFIX,
&fast_market_order.digest(),
&fast_market_order.close_account_refund_recipient.as_ref(),
&fast_market_order.digest().as_ref(),
&payer_signer.pubkey().as_ref(),
],
program_id,
);
Expand All @@ -89,7 +90,7 @@ pub async fn initialize_fast_market_order_shimful(
let initialize_fast_market_order_ix = initialize_fast_market_order_shimful_instruction(
&payer_signer,
program_id,
fast_market_order,
&fast_market_order_params,
&guardian_signature_info,
&from_endpoint,
);
Expand Down Expand Up @@ -138,7 +139,7 @@ pub async fn initialize_fast_market_order_shimful(
///
/// * `payer_signer` - The payer signer keypair
/// * `program_id` - The program id
/// * `fast_market_order` - The fast market order state
/// * `fast_market_order_params` - The fast market order params
/// * `guardian_signature_info` - Information about guardian signatures
///
/// # Returns
Expand All @@ -147,35 +148,35 @@ pub async fn initialize_fast_market_order_shimful(
pub fn initialize_fast_market_order_shimful_instruction(
payer_signer: &Rc<Keypair>,
program_id: &Pubkey,
fast_market_order: FastMarketOrderState,
fast_market_order_params: &FastMarketOrderParams,
guardian_signature_info: &GuardianSignatureInfo,
from_endpoint: &Pubkey,
) -> solana_program::instruction::Instruction {
let fast_market_order = FastMarketOrderState::new(fast_market_order_params);
let fast_market_order_account = Pubkey::find_program_address(
&[
FastMarketOrderState::SEED_PREFIX,
&fast_market_order.digest(),
&fast_market_order.close_account_refund_recipient.as_ref(),
&fast_market_order.digest().as_ref(),
&payer_signer.pubkey().as_ref(),
],
program_id,
)
.0;

let create_fast_market_order_accounts = InitializeFastMarketOrderFallbackAccounts {
signer: &payer_signer.pubkey(),
fast_market_order_account: &fast_market_order_account,
guardian_set: &guardian_signature_info.guardian_set_pubkey,
guardian_set_signatures: &guardian_signature_info.guardian_signatures_pubkey,
payer: &payer_signer.pubkey(),
new_fast_market_order: &fast_market_order_account,
wormhole_guardian_set: &guardian_signature_info.guardian_set_pubkey,
shim_guardian_signatures: &guardian_signature_info.guardian_signatures_pubkey,
from_endpoint,
verify_vaa_shim_program: &WORMHOLE_VERIFY_VAA_SHIM_PID,
system_program: &solana_program::system_program::ID,
};

InitializeFastMarketOrderFallback {
program_id,
accounts: create_fast_market_order_accounts,
data: InitializeFastMarketOrderFallbackData::new(
fast_market_order,
fast_market_order_params,
guardian_signature_info.guardian_set_bump,
),
}
Expand Down Expand Up @@ -229,9 +230,9 @@ pub async fn close_fast_market_order_fallback(
.await;
}

/// Create the fast market order state from the vaa data
/// Create the fast market order params from the vaa data
///
/// This function creates the fast market order state from the vaa data
/// This function creates the fast market order params from the vaa data
///
/// # Arguments
///
Expand All @@ -240,11 +241,11 @@ pub async fn close_fast_market_order_fallback(
///
/// # Returns
///
/// * `fast_market_order_state` - The fast market order state
pub fn create_fast_market_order_state_from_vaa_data(
/// * `fast_market_order_params` - The fast market order params
pub fn create_fast_market_order_params_from_vaa_data(
vaa_data: &utils::vaa::PostedVaaData,
close_account_refund_recipient: Pubkey,
) -> FastMarketOrderState {
) -> FastMarketOrderParams {
let vaa_message = matching_engine::fallback::place_initial_offer::VaaMessageBodyHeader::new(
vaa_data.consistency_level,
vaa_data.vaa_time,
Expand All @@ -268,7 +269,7 @@ pub fn create_fast_market_order_state_from_vaa_data(

fixed_array
};
let fast_market_order = FastMarketOrderState::new(FastMarketOrderParams {
let fast_market_order_params = FastMarketOrderParams {
amount_in: order.amount_in,
min_amount_out: order.min_amount_out,
deadline: order.deadline,
Expand All @@ -286,13 +287,15 @@ pub fn create_fast_market_order_state_from_vaa_data(
vaa_emitter_chain: vaa_data.emitter_chain,
vaa_consistency_level: vaa_data.consistency_level,
vaa_emitter_address: vaa_data.emitter_address,
});
};

assert_eq!(fast_market_order.redeemer, order.redeemer);
assert_eq!(fast_market_order_params.redeemer, order.redeemer);
assert_eq!(
vaa_message.digest(&fast_market_order).as_ref(),
vaa_message
.digest(&FastMarketOrderState::new(&fast_market_order_params))
.as_ref(),
vaa_data.digest().as_ref()
);

fast_market_order
fast_market_order_params
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ use matching_engine::fallback::place_initial_offer::{
PlaceInitialOfferCctpShimAccounts as PlaceInitialOfferCctpShimFallbackAccounts,
PlaceInitialOfferCctpShimData as PlaceInitialOfferCctpShimFallbackData,
};
use matching_engine::state::Auction;
use matching_engine::state::{Auction, FastMarketOrder};
use solana_program_test::ProgramTestContext;

use super::fast_market_order_shim::create_fast_market_order_state_from_vaa_data;
use super::fast_market_order_shim::create_fast_market_order_params_from_vaa_data;
use solana_sdk::{pubkey::Pubkey, signer::Signer};

/// Places an initial offer using the fallback program. The vaa is constructed from a passed in PostedVaaData struct. The nonce is forced to 0.
Expand Down Expand Up @@ -295,7 +295,10 @@ impl PlaceInitialOfferShimfulAccounts {
.fast_transfer_vaa;
let vaa_data = fast_transfer_vaa.get_vaa_data();
let fast_market_order_state =
create_fast_market_order_state_from_vaa_data(vaa_data, close_account_refund_recipient);
FastMarketOrder::new(&create_fast_market_order_params_from_vaa_data(
vaa_data,
close_account_refund_recipient,
));
let offer_actor = config.actor.get_actor(&testing_context.testing_actors);
let offer_token = match &config.custom_accounts {
Some(custom_accounts) => match custom_accounts.offer_token_address {
Expand All @@ -309,7 +312,10 @@ impl PlaceInitialOfferShimfulAccounts {
.unwrap(),
};
let auction = Pubkey::find_program_address(
&[Auction::SEED_PREFIX, &fast_market_order_state.digest()],
&[
Auction::SEED_PREFIX,
&fast_market_order_state.digest().as_ref(),
],
&program_id,
)
.0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -384,7 +384,7 @@ impl PrepareOrderResponseShimAccountsHelper {
let fast_market_order_digest = data.fast_market_order.digest();
let prepared_order_response_seeds = [
PreparedOrderResponse::SEED_PREFIX,
&fast_market_order_digest,
&fast_market_order_digest.as_ref(),
];

let (prepared_order_response_pda, _prepared_order_response_bump) =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,47 +114,6 @@ pub async fn test_close_fast_market_order_fallback() {
.await;
}

/// Test that the close fast market order account works correctly for the fallback instruction
#[tokio::test]
pub async fn test_close_fast_market_order_fallback_with_custom_refund_recipient() {
let vaa_args = vec![VaaArgs {
post_vaa: false,
..VaaArgs::default()
}];
let (testing_context, mut test_context) = setup_environment(
ShimMode::VerifyAndPostSignature,
TransferDirection::FromArbitrumToEthereum,
Some(vaa_args),
)
.await;
let solver_1 = &testing_context.testing_actors.solvers[1].clone();
let solver_1_balance_before = solver_1.get_lamport_balance(&mut test_context).await;
let testing_engine = TestingEngine::new(testing_context).await;
let instruction_triggers = vec![
InstructionTrigger::InitializeProgram(InitializeInstructionConfig::default()),
InstructionTrigger::CreateCctpRouterEndpoints(
CreateCctpRouterEndpointsInstructionConfig::default(),
),
InstructionTrigger::InitializeFastMarketOrderShim(
InitializeFastMarketOrderShimInstructionConfig {
close_account_refund_recipient: Some(solver_1.pubkey()),
..InitializeFastMarketOrderShimInstructionConfig::default()
},
),
InstructionTrigger::CloseFastMarketOrderShim(CloseFastMarketOrderShimInstructionConfig {
close_account_refund_recipient_keypair: Some(solver_1.keypair()),
..CloseFastMarketOrderShimInstructionConfig::default()
}),
];
testing_engine
.execute(&mut test_context, instruction_triggers, None)
.await;
let solver_1_balance_after = solver_1.get_lamport_balance(&mut test_context).await;
assert!(
solver_1_balance_after > solver_1_balance_before,
"Solver 1 balance after is not greater than balance before"
);
}

/*
Sad path tests Section
Expand Down Expand Up @@ -332,7 +291,6 @@ pub async fn test_multiple_fast_market_orders_can_be_opened_and_closed_by_differ
)
.await;
let solver_1 = testing_context.testing_actors.solvers[1].clone();
let solver_2 = testing_context.testing_actors.solvers[2].clone();
let testing_engine = TestingEngine::new(testing_context).await;
let instruction_triggers = vec![
InstructionTrigger::InitializeProgram(InitializeInstructionConfig::default()),
Expand All @@ -357,6 +315,7 @@ pub async fn test_multiple_fast_market_orders_can_be_opened_and_closed_by_differ
let instruction_triggers_1 = vec![InstructionTrigger::InitializeFastMarketOrderShim(
InitializeFastMarketOrderShimInstructionConfig {
fast_market_order_id: 1,
payer_signer: Some(solver_1.keypair()),
close_account_refund_recipient: Some(solver_1.pubkey()),
..InitializeFastMarketOrderShimInstructionConfig::default()
},
Expand All @@ -377,13 +336,6 @@ pub async fn test_multiple_fast_market_orders_can_be_opened_and_closed_by_differ
fast_market_order_address: Some(fast_market_order_0_pubkey),
..CloseFastMarketOrderShimInstructionConfig::default()
}),
InstructionTrigger::InitializeFastMarketOrderShim(
InitializeFastMarketOrderShimInstructionConfig {
fast_market_order_id: 2,
close_account_refund_recipient: Some(solver_2.pubkey()),
..InitializeFastMarketOrderShimInstructionConfig::default()
},
),
];
let current_state = testing_engine
.execute(
Expand All @@ -398,12 +350,6 @@ pub async fn test_multiple_fast_market_orders_can_be_opened_and_closed_by_differ
.fast_market_order_address;
let instruction_triggers_3 = vec![
InstructionTrigger::CloseFastMarketOrderShim(CloseFastMarketOrderShimInstructionConfig {
close_account_refund_recipient_keypair: Some(solver_2.keypair()),
fast_market_order_address: Some(fast_market_order_2_pubkey),
..CloseFastMarketOrderShimInstructionConfig::default()
}),
InstructionTrigger::CloseFastMarketOrderShim(CloseFastMarketOrderShimInstructionConfig {
close_account_refund_recipient_keypair: Some(solver_1.keypair()),
fast_market_order_address: Some(fast_market_order_1_pubkey),
..CloseFastMarketOrderShimInstructionConfig::default()
}),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,8 @@ pub async fn test_place_initial_offer_shimful() {
.fast_market_order()
.unwrap()
.fast_market_order
.digest(),
.digest()
.as_ref(),
final_state
.base()
.vaas
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ use std::{
};

use crate::{
shimful::fast_market_order_shim::create_fast_market_order_state_from_vaa_data,
shimful::fast_market_order_shim::create_fast_market_order_params_from_vaa_data,
shimless::initialize::AuctionParametersConfig,
utils::{
auction::{ActiveAuctionState, AuctionAccounts},
Expand Down Expand Up @@ -657,14 +657,15 @@ impl CombinedInstructionConfig {
) -> Self {
let test_vaa_pair = current_state.get_test_vaa_pair(0);
let fast_transfer_vaa = test_vaa_pair.fast_transfer_vaa.clone();
let fast_market_order = create_fast_market_order_state_from_vaa_data(
let fast_market_order_params = create_fast_market_order_params_from_vaa_data(
&fast_transfer_vaa.vaa_data,
testing_actors.solvers[0].pubkey(),
);
let fast_market_order = FastMarketOrderState::new(&fast_market_order_params);
let (fast_market_order_address, _fast_market_order_bump) = Pubkey::find_program_address(
&[
FastMarketOrderState::SEED_PREFIX,
&fast_market_order.digest(),
&fast_market_order.digest().as_ref(),
&fast_market_order.close_account_refund_recipient.as_ref(),
],
program_id,
Expand Down
Loading
Loading