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

Commit 07ca3ba

Browse files
committed
refactor addresseses
1 parent 13707de commit 07ca3ba

File tree

12 files changed

+183
-207
lines changed

12 files changed

+183
-207
lines changed

solana/ts/src/cctp/messageTransmitter/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { UsedNonses } from "./UsedNonces";
99

1010
export const PROGRAM_IDS = ["CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd"] as const;
1111

12-
export type ProgramId = (typeof PROGRAM_IDS)[number];
12+
export type ProgramId = (typeof PROGRAM_IDS)[number] | string;
1313

1414
export type ReceiveTokenMessengerMinterMessageAccounts = {
1515
authority: PublicKey;

solana/ts/src/cctp/tokenMessengerMinter/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { RemoteTokenMessenger } from "./RemoteTokenMessenger";
66

77
export const PROGRAM_IDS = ["CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3"] as const;
88

9-
export type ProgramId = (typeof PROGRAM_IDS)[number];
9+
export type ProgramId = (typeof PROGRAM_IDS)[number] | string;
1010

1111
export type DepositForBurnWithCallerAccounts = {
1212
senderAuthority: PublicKey;

solana/ts/src/matchingEngine/index.ts

Lines changed: 18 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ import {
5353
ReservedFastFillSequence,
5454
RouterEndpoint,
5555
} from "./state";
56-
import { VAA, keccak256 } from "@wormhole-foundation/sdk-definitions";
56+
import { TokenRouterAddresses } from "../tokenRouter";
5757

5858
export const PROGRAM_IDS = [
5959
"MatchingEngine11111111111111111111111111111",
@@ -64,7 +64,7 @@ export const FEE_PRECISION_MAX = 1_000_000n;
6464

6565
export const CPI_EVENT_IX_SELECTOR = Uint8Array.from([228, 69, 165, 46, 81, 203, 154, 29]);
6666

67-
export type ProgramId = (typeof PROGRAM_IDS)[number];
67+
export type ProgramId = (typeof PROGRAM_IDS)[number] | string;
6868

6969
export type AddCctpRouterEndpointArgs = {
7070
chain: ChainId;
@@ -223,13 +223,17 @@ export class MatchingEngineProgram {
223223

224224
program: Program<MatchingEngine>;
225225

226-
constructor(connection: Connection, programId: ProgramId, mint: PublicKey) {
226+
constructor(
227+
connection: Connection,
228+
programId: ProgramId,
229+
private _addresses: TokenRouterAddresses,
230+
) {
227231
this._programId = programId;
228-
this._mint = mint;
232+
this._mint = new PublicKey(_addresses.usdcMint);
229233
this.pdas = programDerivedAddresses(
230234
new PublicKey(programId),
231-
mint,
232-
this.coreBridgeProgramId(),
235+
this._mint,
236+
this.coreBridgeProgramId,
233237
);
234238
this.program = new Program(
235239
{ ...(IDL as any), address: this._programId },
@@ -247,6 +251,10 @@ export class MatchingEngineProgram {
247251
return this._mint;
248252
}
249253

254+
get coreBridgeProgramId(): PublicKey {
255+
return new PublicKey(this._addresses.coreBridge);
256+
}
257+
250258
onAuctionSettled(callback: (event: AuctionSettled, slot: number, signature: string) => void) {
251259
return this.program.addEventListener("auctionSettled", callback);
252260
}
@@ -2278,7 +2286,7 @@ export class MatchingEngineProgram {
22782286
async publishMessageAccounts(auction: PublicKey): Promise<PublishMessageAccounts> {
22792287
const coreMessage = this.coreMessageAddress(auction);
22802288

2281-
const coreBridgeProgram = this.coreBridgeProgramId();
2289+
const coreBridgeProgram = this.coreBridgeProgramId;
22822290
const custodian = this.custodianAddress();
22832291

22842292
return {
@@ -2365,53 +2373,23 @@ export class MatchingEngineProgram {
23652373
}
23662374

23672375
upgradeManagerProgram(): UpgradeManagerProgram {
2368-
switch (this._programId) {
2369-
case testnet(): {
2370-
return new UpgradeManagerProgram(
2371-
this.program.provider.connection,
2372-
"ucdP9ktgrXgEUnn6roqD2SfdGMR2JSiWHUKv23oXwxt",
2373-
);
2374-
}
2375-
case localnet(): {
2376-
return new UpgradeManagerProgram(
2377-
this.program.provider.connection,
2378-
"UpgradeManager11111111111111111111111111111",
2379-
);
2380-
}
2381-
default: {
2382-
throw new Error("unsupported network");
2383-
}
2384-
}
2376+
return new UpgradeManagerProgram(this.program.provider.connection, this._addresses);
23852377
}
23862378

23872379
tokenMessengerMinterProgram(): TokenMessengerMinterProgram {
23882380
return new TokenMessengerMinterProgram(
23892381
this.program.provider.connection,
2390-
"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",
2382+
this._addresses.tokenMessenger,
23912383
);
23922384
}
23932385

23942386
messageTransmitterProgram(): MessageTransmitterProgram {
23952387
return new MessageTransmitterProgram(
23962388
this.program.provider.connection,
2397-
"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",
2389+
this._addresses.messageTransmitter,
23982390
);
23992391
}
24002392

2401-
coreBridgeProgramId(): PublicKey {
2402-
switch (this._programId) {
2403-
case testnet(): {
2404-
return new PublicKey("3u8hJUVTA4jH1wYAyUur7FFZVQ8H635K3tSHHF4ssjQ5");
2405-
}
2406-
case localnet(): {
2407-
return new PublicKey("worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth");
2408-
}
2409-
default: {
2410-
throw new Error("unsupported network");
2411-
}
2412-
}
2413-
}
2414-
24152393
async computeDepositPenalty(
24162394
auctionInfo: AuctionInfo,
24172395
currentSlot: Uint64,

solana/ts/src/protocol/matchingEngine.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,13 @@ import { AuctionParameters, MatchingEngineProgram, ProgramId } from "../matching
3333
import { SolanaWormholeCore } from "@wormhole-foundation/sdk-solana-core";
3434

3535
export interface SolanaMatchingEngineContracts {
36+
tokenRouter: string;
3637
matchingEngine: string;
3738
usdcMint: string;
39+
coreBridge: string;
40+
messageTransmitter: string;
41+
tokenMessenger: string;
42+
upgradeManager: string;
3843
}
3944

4045
export class SolanaMatchingEngine<N extends Network, C extends SolanaChains>
@@ -53,11 +58,10 @@ export class SolanaMatchingEngine<N extends Network, C extends SolanaChains>
5358
_connection,
5459
// TODO: BEN
5560
_contracts.matchingEngine as ProgramId,
56-
new PublicKey(_contracts.usdcMint),
61+
_contracts,
5762
);
5863

5964
this.coreBridge = new SolanaWormholeCore(_network, _chain, _connection, {
60-
coreBridge: this.coreBridgeProgramId().toBase58(),
6165
...this._contracts,
6266
});
6367
}

solana/ts/src/protocol/tokenRouter.ts

Lines changed: 48 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,15 @@ import {
1010
} from "@solana/web3.js";
1111
import {
1212
FastMarketOrder,
13-
FastTransfer,
14-
Message,
1513
TokenRouter,
1614
} from "@wormhole-foundation/example-liquidity-layer-definitions";
17-
import { Chain, ChainId, Network, Platform, toChainId } from "@wormhole-foundation/sdk-base";
15+
import { ChainId, Network, Platform, toChainId } from "@wormhole-foundation/sdk-base";
1816
import {
19-
AccountAddress,
20-
ChainAddress,
2117
ChainsConfig,
2218
CircleBridge,
2319
Contracts,
24-
UniversalAddress,
2520
UnsignedTransaction,
21+
VAA,
2622
} from "@wormhole-foundation/sdk-definitions";
2723
import {
2824
AnySolanaAddress,
@@ -33,31 +29,36 @@ import {
3329
SolanaUnsignedTransaction,
3430
} from "@wormhole-foundation/sdk-solana";
3531
import { SolanaWormholeCore } from "@wormhole-foundation/sdk-solana-core";
36-
import { ProgramId, TokenRouterProgram } from "../tokenRouter";
32+
import { TokenRouterProgram } from "../tokenRouter";
33+
import { SolanaMatchingEngine } from "./matchingEngine";
3734

3835
export interface SolanaTokenRouterContracts {
3936
tokenRouter: string;
4037
usdcMint: string;
38+
coreBridge: string;
39+
matchingEngine: string;
40+
messageTransmitter: string;
41+
tokenMessenger: string;
42+
upgradeManager: string;
4143
}
4244

4345
export class SolanaTokenRouter<N extends Network, C extends SolanaChains>
4446
extends TokenRouterProgram
4547
implements TokenRouter<N, C>
4648
{
4749
coreBridge: SolanaWormholeCore<N, C>;
50+
matchingEngine: SolanaMatchingEngine<N, C>;
4851

4952
constructor(
5053
readonly _network: N,
5154
readonly _chain: C,
5255
readonly _connection: Connection,
5356
readonly _contracts: Contracts & SolanaTokenRouterContracts,
5457
) {
55-
super(_connection, _contracts.tokenRouter as ProgramId, new PublicKey(_contracts.usdcMint));
58+
super(_connection, _contracts.tokenRouter, _contracts);
5659

57-
this.coreBridge = new SolanaWormholeCore(_network, _chain, _connection, {
58-
coreBridge: this.coreBridgeProgramId().toBase58(),
59-
...this._contracts,
60-
});
60+
this.coreBridge = new SolanaWormholeCore(_network, _chain, _connection, _contracts);
61+
this.matchingEngine = new SolanaMatchingEngine(_network, _chain, _connection, _contracts);
6162
}
6263

6364
static async fromRpc<N extends Network>(
@@ -89,7 +90,7 @@ export class SolanaTokenRouter<N extends Network, C extends SolanaChains>
8990
const ix = await this.initializeIx({
9091
owner: sender,
9192
ownerAssistant: new SolanaAddress(ownerAssistant).unwrap(),
92-
mint: mint ? new SolanaAddress(mint).unwrap() : undefined,
93+
mint: mint ? new SolanaAddress(mint).unwrap() : this.mint,
9394
});
9495

9596
const transaction = this.createTx(sender, [ix]);
@@ -231,23 +232,42 @@ export class SolanaTokenRouter<N extends Network, C extends SolanaChains>
231232
yield this.createUnsignedTx({ transaction, signers }, "TokenRouter.PlaceMarketOrder");
232233
}
233234

234-
placeFastMarketOrder<RC extends Chain>(
235-
amount: bigint,
236-
chain: RC,
237-
redeemer: AccountAddress<RC>,
238-
redeemerMessage: Uint8Array,
239-
maxFee: bigint,
240-
deadline: number,
241-
minAmountOut?: bigint | undefined,
242-
refundAddress?: string | undefined,
243-
): AsyncGenerator<UnsignedTransaction<N, C>, any, unknown> {
244-
throw new Error("Method not implemented.");
245-
}
246-
247-
redeemFill(
248-
vaa: FastTransfer.VAA,
235+
async *redeemFill(
236+
sender: AnySolanaAddress,
237+
vaa: VAA<"FastTransfer:CctpDeposit">,
249238
cctp: CircleBridge.Attestation,
250239
): AsyncGenerator<UnsignedTransaction<N, C>, any, unknown> {
240+
// const payer = new SolanaAddress(sender).unwrap();
241+
242+
// //
243+
// const { payload: fill } = vaa.payload;
244+
// if (!Payload.is(fill, "Fill")) {
245+
// throw new Error("Invalid VAA payload");
246+
// }
247+
248+
// const postedVaaAddress = coreUtils.derivePostedVaaKey(
249+
// this.coreBridge.address,
250+
// Buffer.from(vaa.hash),
251+
// );
252+
253+
// const ix = await this.redeemCctpFillIx(
254+
// {
255+
// payer: payer,
256+
// vaa: postedVaaAddress,
257+
// sourceRouterEndpoint: this.matchingEngine.routerEndpointAddress(
258+
// toChainId(fill.sourceChain),
259+
// ),
260+
// },
261+
// {
262+
// encodedCctpMessage,
263+
// cctpAttestation,
264+
// },
265+
// );
266+
267+
// //const computeIx = ComputeBudgetProgram.setComputeUnitLimit({
268+
// // units: 300_000,
269+
// //});
270+
251271
throw new Error("Method not implemented.");
252272
}
253273

solana/ts/src/testing/consts.ts

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import { PublicKey, Keypair } from "@solana/web3.js";
2-
import { Chain, contracts } from "@wormhole-foundation/sdk-base";
2+
import { Chain, Network, contracts } from "@wormhole-foundation/sdk-base";
33
import { UniversalAddress } from "@wormhole-foundation/sdk-definitions";
44
import { mocks } from "@wormhole-foundation/sdk-definitions/testing";
5+
import { TokenRouterAddresses } from "../tokenRouter";
56

67
export const CORE_BRIDGE_PID = new PublicKey(contracts.coreBridge.get("Mainnet", "Solana")!);
78

@@ -73,3 +74,27 @@ export const REGISTERED_TOKEN_ROUTERS_V2: { [k in Chain]?: UniversalAddress } =
7374
new UniversalAddress(new Uint8Array(v)),
7475
]),
7576
);
77+
78+
export const DEFAULT_ADDRESSES: {
79+
[network in Network]?: TokenRouterAddresses;
80+
} = {
81+
// This is local development network, not Solana's 'devnet'
82+
Devnet: {
83+
coreBridge: "worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth",
84+
matchingEngine: "MatchingEngine11111111111111111111111111111",
85+
tokenRouter: "TokenRouter11111111111111111111111111111111",
86+
tokenMessenger: "CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",
87+
messageTransmitter: "CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",
88+
upgradeManager: "UpgradeManager11111111111111111111111111111",
89+
usdcMint: USDC_MINT_ADDRESS.toBase58(),
90+
},
91+
Testnet: {
92+
coreBridge: "3u8hJUVTA4jH1wYAyUur7FFZVQ8H635K3tSHHF4ssjQ5",
93+
matchingEngine: "mPydpGUWxzERTNpyvTKdvS7v8kvw5sgwfiP8WQFrXVS",
94+
tokenRouter: "tD8RmtdcV7bzBeuFgyrFc8wvayj988ChccEzRQzo6md",
95+
tokenMessenger: "CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",
96+
messageTransmitter: "CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",
97+
upgradeManager: "ucdP9ktgrXgEUnn6roqD2SfdGMR2JSiWHUKv23oXwxt",
98+
usdcMint: "todo",
99+
},
100+
};

0 commit comments

Comments
 (0)