Skip to content
This repository was archived by the owner on Jun 16, 2025. It is now read-only.

Commit ada0970

Browse files
committed
replace more execute fns
1 parent 4cf3221 commit ada0970

File tree

5 files changed

+116
-220
lines changed

5 files changed

+116
-220
lines changed

solana/ts/src/matchingEngine/index.ts

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,24 +15,23 @@ import {
1515
SystemProgram,
1616
TransactionInstruction,
1717
} from "@solana/web3.js";
18+
import { ChainId, isChainId, toChainId } from "@wormhole-foundation/sdk-base";
1819
import { PreparedTransaction, PreparedTransactionOptions } from "..";
19-
import IDL from "../idl/json/matching_engine.json";
20-
import { MatchingEngine } from "../idl/ts/matching_engine";
2120
import { MessageTransmitterProgram, TokenMessengerMinterProgram } from "../cctp";
2221
import {
2322
LiquidityLayerMessage,
2423
Uint64,
2524
VaaHash,
26-
cctpMessageAddress,
27-
coreMessageAddress,
2825
reclaimCctpMessageIx,
2926
uint64ToBN,
3027
uint64ToBigInt,
31-
writeUint64BE,
3228
} from "../common";
29+
import IDL from "../idl/json/matching_engine.json";
30+
import { MatchingEngine } from "../idl/ts/matching_engine";
3331
import { UpgradeManagerProgram } from "../upgradeManager";
3432
import { BPF_LOADER_UPGRADEABLE_PROGRAM_ID, programDataAddress } from "../utils";
3533
import { VaaAccount } from "../wormhole";
34+
import { programDerivedAddresses } from "./pdas";
3635
import {
3736
Auction,
3837
AuctionConfig,
@@ -54,9 +53,6 @@ import {
5453
ReservedFastFillSequence,
5554
RouterEndpoint,
5655
} from "./state";
57-
import { ChainId, toChainId, isChainId, Chain } from "@wormhole-foundation/sdk-base";
58-
import { programDerivedAddresses } from "./pdas";
59-
import { FastTransfer } from "@wormhole-foundation/example-liquidity-layer-definitions";
6056

6157
export const PROGRAM_IDS = [
6258
"MatchingEngine11111111111111111111111111111",
@@ -1860,9 +1856,7 @@ export class MatchingEngineProgram {
18601856
initialOfferToken?: PublicKey;
18611857
initialParticipant?: PublicKey;
18621858
},
1863-
opts: {
1864-
targetChain?: ChainId;
1865-
} = {},
1859+
opts: { targetChain?: ChainId } = {},
18661860
) {
18671861
const connection = this.program.provider.connection;
18681862

@@ -1882,10 +1876,8 @@ export class MatchingEngineProgram {
18821876
if (targetChain === undefined) {
18831877
fastVaaAccount ??= await VaaAccount.fetch(connection, fastVaa);
18841878

1885-
const { fastMarketOrder } = LiquidityLayerMessage.decode(fastVaaAccount.payload());
1886-
if (fastMarketOrder === undefined) {
1887-
throw new Error("Message not FastMarketOrder");
1888-
}
1879+
const { payload: fastMarketOrder } = fastVaaAccount.vaa("FastTransfer:FastMarketOrder");
1880+
18891881
targetChain ??= toChainId(fastMarketOrder.targetChain);
18901882
}
18911883

solana/ts/src/protocol/matchingEngine.ts

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -196,18 +196,48 @@ export class SolanaMatchingEngine<N extends Network, C extends SolanaChains>
196196
yield this.createUnsignedTx({ transaction }, "MatchingEngine.improveOffer");
197197
}
198198

199-
async *executeFastOrder(sender: AnySolanaAddress, vaa: FastTransfer.VAA) {
199+
async *executeFastOrder(
200+
sender: AnySolanaAddress,
201+
vaa: FastTransfer.VAA,
202+
participant?: AnySolanaAddress,
203+
) {
204+
if (vaa.payloadLiteral !== "FastTransfer:FastMarketOrder") throw new Error("Invalid VAA");
205+
200206
const payer = new SolanaAddress(sender).unwrap();
201207

208+
const initialParticipant = participant
209+
? new SolanaAddress(participant).unwrap()
210+
: undefined;
211+
202212
const fastVaa = coreUtils.derivePostedVaaKey(
203213
this.coreBridgeProgramId(),
204214
Buffer.from(vaa.hash),
205215
);
206216

207-
const ix = await this.executeFastOrderCctpIx({
208-
payer,
209-
fastVaa,
210-
});
217+
const digest = keccak256(vaa.hash);
218+
const auction = this.auctionAddress(digest);
219+
const reservedSequence = this.reservedFastFillSequenceAddress(digest);
220+
221+
const { targetChain } = vaa.payload;
222+
223+
const ix =
224+
targetChain === "Solana"
225+
? await this.executeFastOrderLocalIx({
226+
payer,
227+
fastVaa,
228+
auction,
229+
reservedSequence,
230+
initialParticipant,
231+
})
232+
: await this.executeFastOrderCctpIx(
233+
{
234+
payer,
235+
fastVaa,
236+
auction,
237+
initialParticipant,
238+
},
239+
{ targetChain: toChainId(targetChain) },
240+
);
211241

212242
const computeIx = ComputeBudgetProgram.setComputeUnitLimit({
213243
units: 300_000,
@@ -218,7 +248,7 @@ export class SolanaMatchingEngine<N extends Network, C extends SolanaChains>
218248
}
219249

220250
async *settleAuctionComplete() {
221-
throw new Error("Method not implemented.");
251+
throw "Not implemented";
222252
}
223253

224254
settleAuction(): AsyncGenerator<UnsignedTransaction<N, C>, any, unknown> {
@@ -234,8 +264,6 @@ export class SolanaMatchingEngine<N extends Network, C extends SolanaChains>
234264
getPenaltyBlocks(): Promise<number> {
235265
throw new Error("Method not implemented.");
236266
}
237-
getInitialPenaltyBps(): Promise<number>;
238-
getInitialPenaltyBps(): Promise<number>;
239267
getInitialPenaltyBps(): Promise<number> {
240268
throw new Error("Method not implemented.");
241269
}

solana/ts/src/testing/mock.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ export function getSdkSigner<N extends Network>(
2222
return { signer, address };
2323
}
2424

25-
// TODO: return VaaAccount, too
2625
export async function postLiquidityLayerVaav2(
2726
connection: Connection,
2827
payer: Keypair | SignAndSendSigner<Network, "Solana">,

solana/ts/src/testing/utils.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ import {
1111
TransactionMessage,
1212
VersionedTransaction,
1313
} from "@solana/web3.js";
14+
import { Network } from "@wormhole-foundation/sdk-base";
15+
import { SignAndSendSigner as SdkSigner, signAndSendWait } from "@wormhole-foundation/sdk-connect";
16+
import { UniversalAddress, VAA } from "@wormhole-foundation/sdk-definitions";
17+
import { SolanaSendSigner, SolanaUnsignedTransaction } from "@wormhole-foundation/sdk-solana";
18+
import { SolanaWormholeCore, utils as coreUtils } from "@wormhole-foundation/sdk-solana-core";
1419
import { expect } from "chai";
1520
import { execSync } from "child_process";
1621
import { Err, Ok } from "ts-results";
1722
import { CORE_BRIDGE_PID, USDC_MINT_ADDRESS } from "./consts";
18-
import { SolanaSendSigner, SolanaUnsignedTransaction } from "@wormhole-foundation/sdk-solana";
19-
import { SolanaWormholeCore, utils as coreUtils } from "@wormhole-foundation/sdk-solana-core";
20-
import { SignAndSendSigner as SdkSigner, signAndSendWait } from "@wormhole-foundation/sdk-connect";
21-
import { UniversalAddress, VAA, deserialize } from "@wormhole-foundation/sdk-definitions";
22-
import { Chain, Network } from "@wormhole-foundation/sdk-base";
2323

2424
export function toUniversalAddress(address: number[] | Buffer | Array<number>): UniversalAddress {
2525
return new UniversalAddress(new Uint8Array(address));

0 commit comments

Comments
 (0)