Skip to content

Commit

Permalink
replace more execute fns
Browse files Browse the repository at this point in the history
  • Loading branch information
barnjamin committed Jun 19, 2024
1 parent 4cf3221 commit ada0970
Show file tree
Hide file tree
Showing 5 changed files with 116 additions and 220 deletions.
22 changes: 7 additions & 15 deletions solana/ts/src/matchingEngine/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,24 +15,23 @@ import {
SystemProgram,
TransactionInstruction,
} from "@solana/web3.js";
import { ChainId, isChainId, toChainId } from "@wormhole-foundation/sdk-base";
import { PreparedTransaction, PreparedTransactionOptions } from "..";
import IDL from "../idl/json/matching_engine.json";
import { MatchingEngine } from "../idl/ts/matching_engine";
import { MessageTransmitterProgram, TokenMessengerMinterProgram } from "../cctp";
import {
LiquidityLayerMessage,
Uint64,
VaaHash,
cctpMessageAddress,
coreMessageAddress,
reclaimCctpMessageIx,
uint64ToBN,
uint64ToBigInt,
writeUint64BE,
} from "../common";
import IDL from "../idl/json/matching_engine.json";
import { MatchingEngine } from "../idl/ts/matching_engine";
import { UpgradeManagerProgram } from "../upgradeManager";
import { BPF_LOADER_UPGRADEABLE_PROGRAM_ID, programDataAddress } from "../utils";
import { VaaAccount } from "../wormhole";
import { programDerivedAddresses } from "./pdas";
import {
Auction,
AuctionConfig,
Expand All @@ -54,9 +53,6 @@ import {
ReservedFastFillSequence,
RouterEndpoint,
} from "./state";
import { ChainId, toChainId, isChainId, Chain } from "@wormhole-foundation/sdk-base";
import { programDerivedAddresses } from "./pdas";
import { FastTransfer } from "@wormhole-foundation/example-liquidity-layer-definitions";

export const PROGRAM_IDS = [
"MatchingEngine11111111111111111111111111111",
Expand Down Expand Up @@ -1860,9 +1856,7 @@ export class MatchingEngineProgram {
initialOfferToken?: PublicKey;
initialParticipant?: PublicKey;
},
opts: {
targetChain?: ChainId;
} = {},
opts: { targetChain?: ChainId } = {},
) {
const connection = this.program.provider.connection;

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

const { fastMarketOrder } = LiquidityLayerMessage.decode(fastVaaAccount.payload());
if (fastMarketOrder === undefined) {
throw new Error("Message not FastMarketOrder");
}
const { payload: fastMarketOrder } = fastVaaAccount.vaa("FastTransfer:FastMarketOrder");

targetChain ??= toChainId(fastMarketOrder.targetChain);
}

Expand Down
44 changes: 36 additions & 8 deletions solana/ts/src/protocol/matchingEngine.ts
Original file line number Diff line number Diff line change
Expand Up @@ -196,18 +196,48 @@ export class SolanaMatchingEngine<N extends Network, C extends SolanaChains>
yield this.createUnsignedTx({ transaction }, "MatchingEngine.improveOffer");
}

async *executeFastOrder(sender: AnySolanaAddress, vaa: FastTransfer.VAA) {
async *executeFastOrder(
sender: AnySolanaAddress,
vaa: FastTransfer.VAA,
participant?: AnySolanaAddress,
) {
if (vaa.payloadLiteral !== "FastTransfer:FastMarketOrder") throw new Error("Invalid VAA");

const payer = new SolanaAddress(sender).unwrap();

const initialParticipant = participant
? new SolanaAddress(participant).unwrap()
: undefined;

const fastVaa = coreUtils.derivePostedVaaKey(
this.coreBridgeProgramId(),
Buffer.from(vaa.hash),
);

const ix = await this.executeFastOrderCctpIx({
payer,
fastVaa,
});
const digest = keccak256(vaa.hash);
const auction = this.auctionAddress(digest);
const reservedSequence = this.reservedFastFillSequenceAddress(digest);

const { targetChain } = vaa.payload;

const ix =
targetChain === "Solana"
? await this.executeFastOrderLocalIx({
payer,
fastVaa,
auction,
reservedSequence,
initialParticipant,
})
: await this.executeFastOrderCctpIx(
{
payer,
fastVaa,
auction,
initialParticipant,
},
{ targetChain: toChainId(targetChain) },
);

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

async *settleAuctionComplete() {
throw new Error("Method not implemented.");
throw "Not implemented";
}

settleAuction(): AsyncGenerator<UnsignedTransaction<N, C>, any, unknown> {
Expand All @@ -234,8 +264,6 @@ export class SolanaMatchingEngine<N extends Network, C extends SolanaChains>
getPenaltyBlocks(): Promise<number> {
throw new Error("Method not implemented.");
}
getInitialPenaltyBps(): Promise<number>;
getInitialPenaltyBps(): Promise<number>;
getInitialPenaltyBps(): Promise<number> {
throw new Error("Method not implemented.");
}
Expand Down
1 change: 0 additions & 1 deletion solana/ts/src/testing/mock.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ export function getSdkSigner<N extends Network>(
return { signer, address };
}

// TODO: return VaaAccount, too
export async function postLiquidityLayerVaav2(
connection: Connection,
payer: Keypair | SignAndSendSigner<Network, "Solana">,
Expand Down
10 changes: 5 additions & 5 deletions solana/ts/src/testing/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,15 @@ import {
TransactionMessage,
VersionedTransaction,
} from "@solana/web3.js";
import { Network } from "@wormhole-foundation/sdk-base";
import { SignAndSendSigner as SdkSigner, signAndSendWait } from "@wormhole-foundation/sdk-connect";
import { UniversalAddress, VAA } from "@wormhole-foundation/sdk-definitions";
import { SolanaSendSigner, SolanaUnsignedTransaction } from "@wormhole-foundation/sdk-solana";
import { SolanaWormholeCore, utils as coreUtils } from "@wormhole-foundation/sdk-solana-core";
import { expect } from "chai";
import { execSync } from "child_process";
import { Err, Ok } from "ts-results";
import { CORE_BRIDGE_PID, USDC_MINT_ADDRESS } from "./consts";
import { SolanaSendSigner, SolanaUnsignedTransaction } from "@wormhole-foundation/sdk-solana";
import { SolanaWormholeCore, utils as coreUtils } from "@wormhole-foundation/sdk-solana-core";
import { SignAndSendSigner as SdkSigner, signAndSendWait } from "@wormhole-foundation/sdk-connect";
import { UniversalAddress, VAA, deserialize } from "@wormhole-foundation/sdk-definitions";
import { Chain, Network } from "@wormhole-foundation/sdk-base";

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

0 comments on commit ada0970

Please sign in to comment.