diff --git a/programs/jit-proxy/src/instructions/jit.rs b/programs/jit-proxy/src/instructions/jit.rs index bc66bb9..ca4cf1b 100644 --- a/programs/jit-proxy/src/instructions/jit.rs +++ b/programs/jit-proxy/src/instructions/jit.rs @@ -1,7 +1,7 @@ use anchor_lang::prelude::Pubkey; use anchor_lang::prelude::*; use drift::controller::position::PositionDirection; -use drift::cpi::accounts::{PlaceAndMake, PlaceAndMakeSwift, PlaceSwiftTakerOrder}; +use drift::cpi::accounts::{PlaceAndMake, PlaceAndMakeSwift}; use drift::error::DriftResult; use drift::instructions::optional_accounts::{load_maps, AccountMaps}; use drift::math::casting::Cast; @@ -111,7 +111,6 @@ pub fn jit<'c: 'info, 'info>( pub fn jit_swift<'c: 'info, 'info>( ctx: Context<'_, '_, 'c, 'info, JitSwift<'info>>, - swift_order_params_message_bytes: Vec, params: JitSwiftParams, ) -> Result<()> { let clock = Clock::get()?; @@ -167,12 +166,7 @@ pub fn jit_swift<'c: 'info, 'info>( drop(taker); drop(maker); - place_and_make_swift( - &ctx, - swift_order_params_message_bytes, - order_params, - params.swift_order_uuid, - )?; + place_and_make_swift(&ctx, order_params, params.swift_order_uuid)?; let taker = ctx.accounts.taker.load()?; @@ -430,6 +424,7 @@ pub struct JitSwift<'info> { #[account(mut)] pub taker_stats: AccountLoader<'info, UserStats>, /// CHECK: checked in SwiftUserOrdersZeroCopy checks + #[account(mut)] pub taker_swift_user_orders: AccountInfo<'info>, pub authority: Signer<'info>, pub drift_program: Program<'info, Drift>, @@ -597,36 +592,15 @@ fn place_and_make<'info>( fn place_and_make_swift<'info>( ctx: &Context<'_, '_, '_, 'info, JitSwift<'info>>, - swift_order_params_message_bytes: Vec, order_params: OrderParams, swift_order_uuid: [u8; 8], ) -> Result<()> { let drift_program = ctx.accounts.drift_program.to_account_info(); let state = ctx.accounts.state.to_account_info(); - let authority = ctx.accounts.authority.to_account_info(); let taker = ctx.accounts.taker.to_account_info(); let taker_stats = ctx.accounts.taker_stats.to_account_info(); let taker_swift_user_orders = ctx.accounts.taker_swift_user_orders.to_account_info(); - let cpi_account_place_taker_order = PlaceSwiftTakerOrder { - state: state.clone(), - authority: authority.clone(), - user: taker.clone(), - user_stats: taker_stats.clone(), - swift_user_orders: taker_swift_user_orders.clone(), - ix_sysvar: ctx.accounts.ix_sysvar.clone(), - }; - - let cpi_context_place_taker_order = - CpiContext::new(drift_program.clone(), cpi_account_place_taker_order) - .with_remaining_accounts(ctx.remaining_accounts.into()); - drift::cpi::place_swift_taker_order( - cpi_context_place_taker_order, - swift_order_params_message_bytes, - )?; - - msg!("Made it past first cpi"); - let cpi_accounts_place_and_make = PlaceAndMakeSwift { state, user: ctx.accounts.user.to_account_info().clone(), diff --git a/programs/jit-proxy/src/lib.rs b/programs/jit-proxy/src/lib.rs index c9e39a2..62b742a 100644 --- a/programs/jit-proxy/src/lib.rs +++ b/programs/jit-proxy/src/lib.rs @@ -21,10 +21,9 @@ pub mod jit_proxy { pub fn jit_swift<'c: 'info, 'info>( ctx: Context<'_, '_, 'c, 'info, JitSwift<'info>>, - swift_order_params_message_bytes: Vec, params: JitSwiftParams, ) -> Result<()> { - instructions::jit_swift(ctx, swift_order_params_message_bytes, params) + instructions::jit_swift(ctx, params) } pub fn check_order_constraints<'c: 'info, 'info>( diff --git a/ts/sdk/src/jitProxyClient.ts b/ts/sdk/src/jitProxyClient.ts index 76f3d05..e740cdb 100644 --- a/ts/sdk/src/jitProxyClient.ts +++ b/ts/sdk/src/jitProxyClient.ts @@ -1,6 +1,5 @@ import { BN, - createMinimalEd25519VerifyIx, DriftClient, getSwiftUserAccountPublicKey, isVariant, @@ -84,28 +83,24 @@ export class JitProxyClient { public async jitSwift( params: JitSwiftIxParams, - txParams?: TxParams + txParams?: TxParams, + precedingIxs?: TransactionInstruction[] ): Promise { - const messageLengthBuffer = Buffer.alloc(2); - messageLengthBuffer.writeUInt16LE( - params.signedSwiftOrderParams.orderParams.length + const swiftTakerIxs = await this.driftClient.getPlaceSwiftTakerPerpOrderIxs( + params.signedSwiftOrderParams, + params.marketIndex, + { + taker: params.takerKey, + takerStats: params.takerStatsKey, + takerUserAccount: params.taker, + }, + params.authorityToUse, + precedingIxs ); - const swiftIxData = Buffer.concat([ - params.signedSwiftOrderParams.signature, - params.authorityToUse.toBytes(), - messageLengthBuffer, - params.signedSwiftOrderParams.orderParams, - ]); - const swiftOrderParamsSignatureIx = createMinimalEd25519VerifyIx( - 1, - 12, - swiftIxData, - 0 - ); const ix = await this.getJitSwiftIx(params); const tx = await this.driftClient.buildTransaction( - [swiftOrderParamsSignatureIx, ix], + [...swiftTakerIxs, ix], txParams ); let resp; @@ -115,7 +110,7 @@ export class JitProxyClient { recentBlockhash: ( await this.driftClient.connection.getLatestBlockhash() ).blockhash, - instructions: [swiftOrderParamsSignatureIx, ix], + instructions: [...swiftTakerIxs, ix], }).compileToV0Message([this.driftClient.lookupTableAccount]); const tx = new VersionedTransaction(message); @@ -225,7 +220,6 @@ export class JitProxyClient { subAccountId, uuid, marketIndex, - signedSwiftOrderParams, }: JitSwiftIxParams): Promise { subAccountId = subAccountId !== undefined @@ -261,7 +255,7 @@ export class JitProxyClient { }; return this.program.methods - .jitSwift(signedSwiftOrderParams.orderParams, jitSwiftParams) + .jitSwift(jitSwiftParams) .accounts({ taker: takerKey, takerStats: takerStatsKey, @@ -269,6 +263,7 @@ export class JitProxyClient { this.driftClient.program.programId, takerKey ), + authority: this.driftClient.wallet.payer.publicKey, state: await this.driftClient.getStatePublicKey(), user: await this.driftClient.getUserAccountPublicKey(subAccountId), userStats: this.driftClient.getUserStatsAccountPublicKey(), diff --git a/ts/sdk/src/types/jit_proxy.ts b/ts/sdk/src/types/jit_proxy.ts index ddd3338..f7dc0ce 100644 --- a/ts/sdk/src/types/jit_proxy.ts +++ b/ts/sdk/src/types/jit_proxy.ts @@ -80,7 +80,7 @@ export type JitProxy = { }, { name: 'takerSwiftUserOrders'; - isMut: false; + isMut: true; isSigner: false; }, { @@ -100,10 +100,6 @@ export type JitProxy = { } ]; args: [ - { - name: 'swiftOrderParamsMessageBytes'; - type: 'bytes'; - }, { name: 'params'; type: { @@ -472,7 +468,7 @@ export const IDL: JitProxy = { }, { name: 'takerSwiftUserOrders', - isMut: false, + isMut: true, isSigner: false, }, { @@ -492,10 +488,6 @@ export const IDL: JitProxy = { }, ], args: [ - { - name: 'swiftOrderParamsMessageBytes', - type: 'bytes', - }, { name: 'params', type: {