Skip to content

Commit a2bfe89

Browse files
douglasgalicoevan-gray
authored andcommitted
changes
1 parent 82dcecd commit a2bfe89

File tree

7 files changed

+22
-93
lines changed

7 files changed

+22
-93
lines changed

.prettierignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/evm

src/layouts/request.ts

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,6 @@ import { fromHex, toHex } from "viem";
88
import { RequestPrefix } from "../types";
99
import { hexConversion } from "./conversions";
1010

11-
export const modularMessageRequestLayout = [
12-
{ name: "chain", binary: "uint", size: 2 },
13-
{ name: "address", binary: "bytes", size: 32, custom: hexConversion },
14-
{ name: "sequence", binary: "uint", size: 8 },
15-
{
16-
name: "payload",
17-
binary: "bytes",
18-
lengthSize: 4,
19-
custom: hexConversion,
20-
},
21-
] as const satisfies Layout;
22-
23-
export type ModularMessageRequest = DeriveType<
24-
typeof modularMessageRequestLayout
25-
>;
26-
2711
export const vaaV1RequestLayout = [
2812
{ name: "chain", binary: "uint", size: 2 },
2913
{ name: "address", binary: "bytes", size: 32, custom: hexConversion },
@@ -76,7 +60,6 @@ export const requestLayout = [
7660
idSize: 4,
7761
idTag: "prefix",
7862
layouts: [
79-
[[0x45524d31, RequestPrefix.ERM1], modularMessageRequestLayout],
8063
[[0x45525631, RequestPrefix.ERV1], vaaV1RequestLayout],
8164
[[0x45524e31, RequestPrefix.ERN1], nttV1RequestLayout],
8265
[[0x45524331, RequestPrefix.ERC1], cctpV1RequestLayout],

src/mockGuardian.ts

Lines changed: 17 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ import { EVM_PRIVATE_KEY } from "./consts";
2222
import type { ChainConfig } from "./chains";
2323

2424
async function getWormholeMessage(
25-
chainConfig: ChainConfig,
25+
rpc: string,
2626
txHash: Hex,
2727
coreContractAddress: Hex,
28-
): Promise<Record<string, VAA<"Uint8Array">> | undefined> {
29-
console.log(`Mocking guardian signatures for ${chainConfig.rpc} ${txHash}`);
30-
const transport = http(chainConfig.rpc);
28+
): Promise<VAA<"Uint8Array"> | undefined> {
29+
console.log(`Mocking guardian signatures for ${rpc} ${txHash}`);
30+
const transport = http(rpc);
3131
const client = createPublicClient({
3232
chain: anvil,
3333
transport,
@@ -47,15 +47,14 @@ async function getWormholeMessage(
4747
abi: CORE_ABI,
4848
logs: transaction.logs,
4949
});
50-
const transactionVAAs: Record<string, VAA<"Uint8Array">> = {};
5150

52-
// @TODO - Emitter + Sequence
5351
for (const topic of topics) {
5452
if (
5553
topic.removed === false &&
5654
isAddressEqual(topic.address, coreContractAddress)
5755
) {
5856
const emitter = topic.args.sender;
57+
const paddedEmitter = padHex(emitter, { dir: "left", size: 32 });
5958
const vaa = createVAA("Uint8Array", {
6059
guardianSet: guardianSetIndex,
6160
timestamp: Number(
@@ -78,44 +77,35 @@ async function getWormholeMessage(
7877
payload: toBytes(topic.args.payload),
7978
});
8079

81-
const vaaId = `${chainConfig.wormholeChainId}/${padHex(emitter, { dir: "left", size: 32 }).substring(2)}/${topic.args.sequence.toString()}`;
82-
83-
transactionVAAs[vaaId] = vaa;
80+
const vaaId = `${chainId}/${padHex(emitter, { dir: "left", size: 32 }).substring(2)}/${topic.args.sequence.toString()}`;
81+
if (
82+
vaaId ===
83+
`${chainId}/${paddedEmitter.substring(2)}/${vaa.sequence.toString()}`
84+
) {
85+
return vaa;
86+
}
8487
}
8588
}
86-
87-
return transactionVAAs;
8889
}
8990

9091
/**
9192
* returns a base64 string like a guardian /v1/signed_vaa/
9293
*/
9394
export async function mockWormhole(
94-
chainConfig: ChainConfig,
95+
rpc: string,
9596
txHash: Hex,
9697
coreContractAddress: Hex,
9798
vaaId: string,
9899
): Promise<string> {
99-
const vaas = await getWormholeMessage(
100-
chainConfig,
101-
txHash,
102-
coreContractAddress,
103-
);
104-
if (!vaas) {
105-
throw new Error(`Vaa not found for txHash: ${txHash}.`);
106-
}
107-
108-
console.log(Object.keys(vaas));
109-
110-
const expectedVaa = vaas[vaaId];
100+
const vaa = await getWormholeMessage(rpc, txHash, coreContractAddress);
111101

112-
if (!expectedVaa) {
113-
throw new Error(`Vaa not found for vaa ID: ${vaaId}.`);
102+
if (!vaa) {
103+
throw new Error(`Vaa not found for txHash: ${txHash} and Vaa ID ${vaaId}`);
114104
}
115105

116106
const guardianSet = new mocks.MockGuardians(0, [
117107
EVM_PRIVATE_KEY.substring(2),
118108
]);
119-
const signedVaa = guardianSet.addSignatures(expectedVaa);
109+
const signedVaa = guardianSet.addSignatures(vaa);
120110
return Buffer.from(serialize(signedVaa)).toString("base64");
121111
}

src/relay/evm/index.ts

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -125,44 +125,6 @@ export const evmHandler: IProtocolHandler = {
125125
return results;
126126
},
127127

128-
getWormholeVaaIds: async (
129-
chainConfig: ChainConfig,
130-
txHash: Hex,
131-
): Promise<string[]> => {
132-
if (!isHex(chainConfig.coreContractAddress)) {
133-
throw new Error("Wormhole core contract address invalid, not a Hex");
134-
}
135-
136-
const transport = http(chainConfig.rpc);
137-
const client = createPublicClient({
138-
chain: anvil,
139-
transport,
140-
});
141-
const transaction = await client.getTransactionReceipt({
142-
hash: txHash,
143-
});
144-
145-
const topics = parseEventLogs({
146-
eventName: "LogMessagePublished",
147-
abi: CORE_ABI,
148-
logs: transaction.logs,
149-
});
150-
const vaaIds: string[] = [];
151-
152-
for (const topic of topics) {
153-
if (
154-
topic.removed === false &&
155-
isAddressEqual(topic.address, chainConfig.coreContractAddress)
156-
) {
157-
const emitter = topic.args.sender;
158-
const vaaId = `${chainConfig.wormholeChainId}/${padHex(emitter, { dir: "left", size: 32 }).substring(2)}/${topic.args.sequence.toString()}`;
159-
vaaIds.push(vaaId);
160-
}
161-
}
162-
163-
return vaaIds;
164-
},
165-
166128
relayVAAv1: relayVAAv1,
167129
relayNTTv1: relayNTTv1,
168130
getNttTransferMessages: getNttTransferMessages,

src/relay/handler.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ export interface IProtocolHandler {
1818
chainConfig: ChainConfig,
1919
): Promise<Array<RequestForExecutionWithId>>;
2020

21-
getWormholeVaaIds(chainConfig: ChainConfig, txHash: Hex): Promise<string[]>;
22-
2321
relayVAAv1(
2422
chainConfig: ChainConfig,
2523
relayRequest: RelayRequestData,

src/relay/relayer.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -64,16 +64,13 @@ export const processRelayRequests = async (
6464

6565
switch (prefix) {
6666
case RequestPrefix.ERV1:
67-
const vaaIds = await evmHandler.getWormholeVaaIds(
68-
srcChainConfig,
69-
relayRequest.txHash,
70-
);
67+
const vaaId = `${request.chain}/${request.address.substring(2)}/${request.sequence.toString()}`;
7168

7269
const payload = await mockWormhole(
73-
srcChainConfig,
70+
srcChainConfig.rpc,
7471
relayRequest.txHash,
7572
srcChainConfig.coreContractAddress,
76-
vaaIds[0]!,
73+
vaaId,
7774
);
7875
if (!payload) {
7976
throw new Error("No Vaa found for the transaction.");
@@ -97,7 +94,7 @@ export const processRelayRequests = async (
9794
for (const message of messages) {
9895
if (message.type === "wormhole") {
9996
const payload = await mockWormhole(
100-
srcChainConfig,
97+
srcChainConfig.rpc,
10198
relayRequest.txHash,
10299
srcChainConfig.coreContractAddress,
103100
message.id,
@@ -119,7 +116,6 @@ export const processRelayRequests = async (
119116
break;
120117
case RequestPrefix.ERC2:
121118
case RequestPrefix.ERC1:
122-
case RequestPrefix.ERM1:
123119
default:
124120
throw new UnsupportedRelayRequestError(
125121
`Request of type ${prefix} not supported.`,

src/types.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import type { RequestLayout } from "./layouts/request";
33
import type { RequestId } from "./layouts/requestId";
44

55
export enum RequestPrefix {
6-
ERM1 = "ERM1", // MM
76
ERV1 = "ERV1", // VAA_V1
87
ERN1 = "ERN1", // NTT_V1
98
ERC1 = "ERC1", // CCTP_V1

0 commit comments

Comments
 (0)