Skip to content
Closed
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
158 changes: 82 additions & 76 deletions bench-report.json
Original file line number Diff line number Diff line change
@@ -1,90 +1,96 @@
{
"accounts": {
"add_solver/add_with_many_existing_solvers": 5,
"add_solver/adds_a_solver": 5,
"create_buffers/happy_path_creates_initialized_buffer_token_account": 6,
"create_buffers/happy_path_creates_multiple_buffers_in_one_instruction": 10,
"create_buffers/max_buffers_in_one_instruction": 64,
"create_order/happy_path_creates_order_pda_with_expected_body": 4,
"add_solver/add::add_with_many_existing_solvers": 5,
"add_solver/add::adds_a_solver": 5,
"create_buffers/create::happy_path_creates_initialized_buffer_token_account": 6,
"create_buffers/create::happy_path_creates_multiple_buffers_in_one_instruction": 10,
"create_buffers/create::max_buffers_in_one_instruction": 64,
"create_order/create::happy_path_creates_order_pda_with_expected_body": 4,
"initialize/happy_path_initializes_state_pda_with_expected_data": 4,
"reclaim_buffer/funded_buffer_is_skipped": 7,
"reclaim_buffer/happy_path_reclaims_empty_buffer_to_the_authority_itself": 7,
"reclaim_buffer/max_buffers_in_one_instruction": 64,
"reclaim_buffer/reclaims_multiple_buffers_skipping_funded": 9,
"reclaim_order/happy_path_expired_returns_lamports_and_closes_pda": 4,
"reclaim_order/happy_path_on_chain_order_cancelled_is_reclaimable_before_expiry": 3,
"reclaim_order/happy_path_on_chain_order_fully_filled_is_reclaimable_before_expiry": 3,
"reclaim_order/off_chain_order_is_reclaimable_only_once_expired": 3,
"reclaim_order/on_chain_order_partially_filled_is_not_reclaimable_before_expiry": 3,
"settle/finalizes_with_no_pushes": 5,
"settle/pulls_from_multiple_orders": 15,
"settle/pulls_funds_to_destination": 10,
"settle/pulls_to_multiple_destinations": 11,
"settle/pushes_a_single_order": 9,
"settle/pushes_several_orders_from_different_buffers": 13,
"settle/pushes_several_orders_from_one_buffer": 12,
"settle/settles_a_single_order": 9,
"settle/settles_multiple_orders": 17,
"reclaim_buffer/reclaim::funded_buffer_is_skipped": 7,
"reclaim_buffer/reclaim::happy_path_reclaims_empty_buffer_to_the_authority_itself": 7,
"reclaim_buffer/reclaim::max_buffers_in_one_instruction": 64,
"reclaim_buffer/reclaim::reclaims_multiple_buffers_skipping_funded": 9,
"reclaim_order/reclaim::happy_path_expired_returns_lamports_and_closes_pda": 4,
"reclaim_order/reclaim::happy_path_on_chain_order_cancelled_is_reclaimable_before_expiry": 3,
"reclaim_order/reclaim::happy_path_on_chain_order_fully_filled_is_reclaimable_before_expiry": 3,
"reclaim_order/reclaim::off_chain_order_is_reclaimable_only_once_expired": 3,
"reclaim_order/reclaim::on_chain_order_partially_filled_is_not_reclaimable_before_expiry": 3,
"remove_solver/remove::remove_with_many_existing_solvers": 5,
"remove_solver/remove::removes_a_solver": 5,
"settle/begin_orders::pulls_from_multiple_orders": 15,
"settle/begin_orders::pulls_funds_to_destination": 10,
"settle/begin_orders::pulls_to_multiple_destinations": 11,
"settle/begin_orders::settles_a_single_order": 9,
"settle/begin_orders::settles_multiple_orders": 17,
"settle/finalize_pushes::finalizes_with_no_pushes": 5,
"settle/finalize_pushes::pushes_a_single_order": 9,
"settle/finalize_pushes::pushes_several_orders_from_different_buffers": 13,
"settle/finalize_pushes::pushes_several_orders_from_one_buffer": 12,
"transfer_authority/manager_can_transfer_manager": 4,
"transfer_authority/manager_can_transfer_reclaim_authority": 4,
"transfer_authority/reclaim_authority_can_transfer_itself": 4
},
"compute_units": {
"add_solver/add_with_many_existing_solvers": 5074,
"add_solver/adds_a_solver": 4622,
"create_buffers/happy_path_creates_initialized_buffer_token_account": 7345,
"create_buffers/happy_path_creates_multiple_buffers_in_one_instruction": 17243,
"create_buffers/max_buffers_in_one_instruction": 169540,
"create_order/happy_path_creates_order_pda_with_expected_body": 4985,
"initialize/happy_path_initializes_state_pda_with_expected_data": 4529,
"reclaim_buffer/funded_buffer_is_skipped": 4835,
"reclaim_buffer/happy_path_reclaims_empty_buffer_to_the_authority_itself": 5983,
"reclaim_buffer/max_buffers_in_one_instruction": 124652,
"reclaim_buffer/reclaims_multiple_buffers_skipping_funded": 7582,
"reclaim_order/happy_path_expired_returns_lamports_and_closes_pda": 2202,
"reclaim_order/happy_path_on_chain_order_cancelled_is_reclaimable_before_expiry": 2071,
"reclaim_order/happy_path_on_chain_order_fully_filled_is_reclaimable_before_expiry": 2079,
"reclaim_order/off_chain_order_is_reclaimable_only_once_expired": null,
"reclaim_order/on_chain_order_partially_filled_is_not_reclaimable_before_expiry": null,
"settle/finalizes_with_no_pushes": 7154,
"settle/pulls_from_multiple_orders": 20059,
"settle/pulls_funds_to_destination": 13640,
"settle/pulls_to_multiple_destinations": 14781,
"settle/pushes_a_single_order": 12495,
"settle/pushes_several_orders_from_different_buffers": 17767,
"settle/pushes_several_orders_from_one_buffer": 17766,
"settle/settles_a_single_order": 12513,
"settle/settles_multiple_orders": 23086,
"transfer_authority/manager_can_transfer_manager": 3174,
"transfer_authority/manager_can_transfer_reclaim_authority": 3176,
"transfer_authority/reclaim_authority_can_transfer_itself": 3180
"add_solver/add::add_with_many_existing_solvers": 5074,
"add_solver/add::adds_a_solver": 4622,
"create_buffers/create::happy_path_creates_initialized_buffer_token_account": 7347,
"create_buffers/create::happy_path_creates_multiple_buffers_in_one_instruction": 17247,
"create_buffers/create::max_buffers_in_one_instruction": 169571,
"create_order/create::happy_path_creates_order_pda_with_expected_body": 4985,
"initialize/happy_path_initializes_state_pda_with_expected_data": 4530,
"reclaim_buffer/reclaim::funded_buffer_is_skipped": 4835,
"reclaim_buffer/reclaim::happy_path_reclaims_empty_buffer_to_the_authority_itself": 5982,
"reclaim_buffer/reclaim::max_buffers_in_one_instruction": 124622,
"reclaim_buffer/reclaim::reclaims_multiple_buffers_skipping_funded": 7581,
"reclaim_order/reclaim::happy_path_expired_returns_lamports_and_closes_pda": 2202,
"reclaim_order/reclaim::happy_path_on_chain_order_cancelled_is_reclaimable_before_expiry": 2071,
"reclaim_order/reclaim::happy_path_on_chain_order_fully_filled_is_reclaimable_before_expiry": 2079,
"reclaim_order/reclaim::off_chain_order_is_reclaimable_only_once_expired": null,
"reclaim_order/reclaim::on_chain_order_partially_filled_is_not_reclaimable_before_expiry": null,
"remove_solver/remove::remove_with_many_existing_solvers": 3757,
"remove_solver/remove::removes_a_solver": 3492,
"settle/begin_orders::pulls_from_multiple_orders": 20059,
"settle/begin_orders::pulls_funds_to_destination": 13640,
"settle/begin_orders::pulls_to_multiple_destinations": 14781,
"settle/begin_orders::settles_a_single_order": 12513,
"settle/begin_orders::settles_multiple_orders": 23086,
"settle/finalize_pushes::finalizes_with_no_pushes": 7154,
"settle/finalize_pushes::pushes_a_single_order": 12495,
"settle/finalize_pushes::pushes_several_orders_from_different_buffers": 17767,
"settle/finalize_pushes::pushes_several_orders_from_one_buffer": 17766,
"transfer_authority/manager_can_transfer_manager": 3173,
"transfer_authority/manager_can_transfer_reclaim_authority": 3175,
"transfer_authority/reclaim_authority_can_transfer_itself": 3179
},
"transaction_bytes": {
"add_solver/add_with_many_existing_solvers": 366,
"add_solver/adds_a_solver": 366,
"create_buffers/happy_path_creates_initialized_buffer_token_account": 303,
"create_buffers/happy_path_creates_multiple_buffers_in_one_instruction": 435,
"create_buffers/max_buffers_in_one_instruction": 331,
"create_order/happy_path_creates_order_pda_with_expected_body": 452,
"add_solver/add::add_with_many_existing_solvers": 366,
"add_solver/add::adds_a_solver": 366,
"create_buffers/create::happy_path_creates_initialized_buffer_token_account": 303,
"create_buffers/create::happy_path_creates_multiple_buffers_in_one_instruction": 435,
"create_buffers/create::max_buffers_in_one_instruction": 331,
"create_order/create::happy_path_creates_order_pda_with_expected_body": 452,
"initialize/happy_path_initializes_state_pda_with_expected_data": 301,
"reclaim_buffer/funded_buffer_is_skipped": 400,
"reclaim_buffer/happy_path_reclaims_empty_buffer_to_the_authority_itself": 400,
"reclaim_buffer/max_buffers_in_one_instruction": 332,
"reclaim_buffer/reclaims_multiple_buffers_skipping_funded": 466,
"reclaim_order/happy_path_expired_returns_lamports_and_closes_pda": 236,
"reclaim_order/happy_path_on_chain_order_cancelled_is_reclaimable_before_expiry": 204,
"reclaim_order/happy_path_on_chain_order_fully_filled_is_reclaimable_before_expiry": 204,
"reclaim_order/off_chain_order_is_reclaimable_only_once_expired": 204,
"reclaim_order/on_chain_order_partially_filled_is_not_reclaimable_before_expiry": 204,
"settle/finalizes_with_no_pushes": 290,
"settle/pulls_from_multiple_orders": 656,
"settle/pulls_funds_to_destination": 473,
"settle/pulls_to_multiple_destinations": 514,
"settle/pushes_a_single_order": 432,
"settle/pushes_several_orders_from_different_buffers": 574,
"settle/pushes_several_orders_from_one_buffer": 542,
"settle/settles_a_single_order": 432,
"settle/settles_multiple_orders": 716,
"reclaim_buffer/reclaim::funded_buffer_is_skipped": 400,
"reclaim_buffer/reclaim::happy_path_reclaims_empty_buffer_to_the_authority_itself": 400,
"reclaim_buffer/reclaim::max_buffers_in_one_instruction": 332,
"reclaim_buffer/reclaim::reclaims_multiple_buffers_skipping_funded": 466,
"reclaim_order/reclaim::happy_path_expired_returns_lamports_and_closes_pda": 236,
"reclaim_order/reclaim::happy_path_on_chain_order_cancelled_is_reclaimable_before_expiry": 204,
"reclaim_order/reclaim::happy_path_on_chain_order_fully_filled_is_reclaimable_before_expiry": 204,
"reclaim_order/reclaim::off_chain_order_is_reclaimable_only_once_expired": 204,
"reclaim_order/reclaim::on_chain_order_partially_filled_is_not_reclaimable_before_expiry": 204,
"remove_solver/remove::remove_with_many_existing_solvers": 365,
"remove_solver/remove::removes_a_solver": 365,
"settle/begin_orders::pulls_from_multiple_orders": 656,
"settle/begin_orders::pulls_funds_to_destination": 473,
"settle/begin_orders::pulls_to_multiple_destinations": 514,
"settle/begin_orders::settles_a_single_order": 432,
"settle/begin_orders::settles_multiple_orders": 716,
"settle/finalize_pushes::finalizes_with_no_pushes": 290,
"settle/finalize_pushes::pushes_a_single_order": 432,
"settle/finalize_pushes::pushes_several_orders_from_different_buffers": 574,
"settle/finalize_pushes::pushes_several_orders_from_one_buffer": 542,
"transfer_authority/manager_can_transfer_manager": 333,
"transfer_authority/manager_can_transfer_reclaim_authority": 333,
"transfer_authority/reclaim_authority_can_transfer_itself": 333
Expand Down
31 changes: 27 additions & 4 deletions client/src/instructions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ impl From<CreateOrder<'_>> for Instruction {
let encoded = EncodedOrderIntent::from(builder.intent);
let (order_pda, _bump) = find_order_pda(&builder.program_id, &encoded.hash());
let intent_bytes: [u8; EncodedOrderIntent::SIZE] = (&encoded).into();
cow_settlement_interface::instruction::create_order::CreateOrder {
cow_settlement_interface::instruction::order::create::CreateOrder {
program_id: builder.program_id,
owner: builder.owner,
created_by: builder.created_by,
Expand All @@ -158,7 +158,7 @@ impl From<CreateBuffers<'_>> for Instruction {
.iter()
.map(|mint| (find_buffer_pda(&builder.program_id, mint).0, *mint))
.collect();
cow_settlement_interface::instruction::create_buffer::CreateBuffers {
cow_settlement_interface::instruction::buffer::create::CreateBuffers {
program_id: builder.program_id,
payer: builder.payer,
buffers: &buffers,
Expand Down Expand Up @@ -213,7 +213,7 @@ impl From<ReclaimBuffer<'_>> for Instruction {
(buffer_pda, *mint)
})
.collect();
cow_settlement_interface::instruction::reclaim_buffer::ReclaimBuffer {
cow_settlement_interface::instruction::buffer::reclaim::ReclaimBuffer {
program_id: builder.program_id,
state_pda,
reclaim_authority: builder.reclaim_authority,
Expand Down Expand Up @@ -260,7 +260,7 @@ pub struct AddSolver {
impl From<AddSolver> for Instruction {
fn from(builder: AddSolver) -> Self {
let (state_pda, _bump) = find_state_pda(&builder.program_id);
cow_settlement_interface::instruction::add_solver::AddSolver {
cow_settlement_interface::instruction::solver_auth::add::AddSolver {
program_id: builder.program_id,
manager: builder.manager,
payer: builder.payer,
Expand All @@ -271,6 +271,29 @@ impl From<AddSolver> for Instruction {
}
}

/// Removes `solver` from the state PDA's solver list. Authorized by `manager`;
/// the freed rent is paid to `rent_recipient`.
pub struct RemoveSolver {
pub program_id: Pubkey,
pub manager: Pubkey,
pub rent_recipient: Pubkey,
pub solver: Pubkey,
}

impl From<RemoveSolver> for Instruction {
fn from(builder: RemoveSolver) -> Self {
let (state_pda, _bump) = find_state_pda(&builder.program_id);
cow_settlement_interface::instruction::solver_auth::remove::RemoveSolver {
program_id: builder.program_id,
manager: builder.manager,
rent_recipient: builder.rent_recipient,
state_pda,
solver: builder.solver,
}
.into()
}
}

#[cfg(test)]
mod tests {
use super::*;
Expand Down
27 changes: 19 additions & 8 deletions client/src/parse.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,11 @@

use cow_settlement_interface::{
instruction::{
add_solver::AddSolverInput,
create_buffer::CreateBufferInput,
create_order::CreateOrderInput,
buffer::{create::CreateBufferInput, reclaim::ReclaimBufferInput},
initialize::InitializeInput,
reclaim_buffer::ReclaimBufferInput,
reclaim_order::ReclaimOrderInput,
order::{create::CreateOrderInput, reclaim::ReclaimOrderInput},
settle::{BeginSettleInput, FinalizeSettleInput},
solver_auth::{add::AddSolverInput, remove::RemoveSolverInput},
transfer_authority::TransferAuthorityInput,
InstructionInputParsing,
},
Expand All @@ -30,6 +28,7 @@ pub enum ParsedInstruction<'a, A> {
ReclaimBuffer(ReclaimBufferInput<'a, A>),
TransferAuthority(TransferAuthorityInput<'a, A>),
AddSolver(AddSolverInput<'a, A>),
RemoveSolver(RemoveSolverInput<'a, A>),
}

/// Parses any settlement instruction by its discriminator.
Expand Down Expand Up @@ -66,6 +65,9 @@ pub fn parse_instruction<'a, A>(
SettlementInstruction::AddSolver => {
ParsedInstruction::AddSolver(AddSolverInput::parse_body(remaining_data, accounts)?)
}
SettlementInstruction::RemoveSolver => ParsedInstruction::RemoveSolver(
RemoveSolverInput::parse_body(remaining_data, accounts)?,
),
})
}

Expand All @@ -74,14 +76,14 @@ mod tests {
use super::*;
use crate::instructions::{
AddSolver, BeginSettle, CreateBuffers, CreateOrder, FinalizeSettle, Initialize,
InitializedIntent,
InitializedIntent, RemoveSolver,
};
use cow_settlement_interface::{
data::intent::fixtures::sample_intent,
fixtures::pubkey_from_seed,
instruction::{
fixtures::fake_account_from_array, reclaim_buffer::ReclaimBuffer,
reclaim_order::ReclaimOrder, transfer_authority::TransferAuthority,
buffer::reclaim::ReclaimBuffer, fixtures::fake_account_from_array,
order::reclaim::ReclaimOrder, transfer_authority::TransferAuthority,
},
Instruction, Role,
};
Expand Down Expand Up @@ -159,6 +161,13 @@ mod tests {
solver: pubkey_from_seed("solver"),
}
.into(),
SettlementInstruction::RemoveSolver => RemoveSolver {
program_id,
manager: payer,
rent_recipient: payer,
solver: pubkey_from_seed("solver"),
}
.into(),
}
}

Expand All @@ -177,6 +186,7 @@ mod tests {
SettlementInstruction::ReclaimBuffer,
SettlementInstruction::TransferAuthority,
SettlementInstruction::AddSolver,
SettlementInstruction::RemoveSolver,
] {
let ix = build(expected);
let accounts: Vec<_> = ix
Expand All @@ -196,6 +206,7 @@ mod tests {
ParsedInstruction::ReclaimBuffer(_) => SettlementInstruction::ReclaimBuffer,
ParsedInstruction::TransferAuthority(_) => SettlementInstruction::TransferAuthority,
ParsedInstruction::AddSolver(_) => SettlementInstruction::AddSolver,
ParsedInstruction::RemoveSolver(_) => SettlementInstruction::RemoveSolver,
};
assert_eq!(actual, expected);
}
Expand Down
3 changes: 1 addition & 2 deletions interface/src/data/order.rs
Original file line number Diff line number Diff line change
Expand Up @@ -548,11 +548,10 @@ mod tests {

mod load_from_pda {
use super::*;
use crate::fixtures::PROGRAM_ID;
use crate::instruction::fixtures::fake_account_with_data;
use crate::pda::order::find_order_pda;

const PROGRAM_ID: Address = Address::new_from_array([0xc0; 32]);

/// [`sample_account`] carrying its own canonical bump, plus the address
/// of the PDA it belongs at.
fn canonical_account(cancelled: bool) -> (OrderAccount, Address) {
Expand Down
Loading