Skip to content

chore: Drop legacy V3 support #906

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 21 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/clients/SpokePoolClient/EVMSpokePoolClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ export class EVMSpokePoolClient extends SpokePoolClient {

this.logger.debug({
at: "SpokePoolClient#findDeposit",
message: "Located V3 deposit outside of SpokePoolClient's search range",
message: "Located deposit outside of SpokePoolClient's search range",
deposit,
elapsedMs: tStop - tStart,
});
Expand Down
24 changes: 8 additions & 16 deletions src/clients/SpokePoolClient/SpokePoolClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -300,9 +300,10 @@ export abstract class SpokePoolClient extends BaseAbstractClient {
* @param relayData RelayData field for the SlowFill request.
* @returns The corresponding SlowFillRequest event if found, otherwise undefined.
*/
public getSlowFillRequest(relayData: RelayData): SlowFillRequestWithBlock | undefined {
const messageHash = getMessageHash(relayData.message);
const hash = getRelayEventKey({ ...relayData, messageHash, destinationChainId: this.chainId });
public getSlowFillRequest(
relayData: Omit<RelayData, "message"> & { messageHash: string }
): SlowFillRequestWithBlock | undefined {
const hash = getRelayEventKey({ ...relayData, destinationChainId: this.chainId });
return this.slowFillRequests[hash];
}

Expand Down Expand Up @@ -553,7 +554,7 @@ export abstract class SpokePoolClient extends BaseAbstractClient {
}
};

for (const event of ["V3FundsDeposited", "FundsDeposited"]) {
for (const event of ["FundsDeposited"]) {
if (eventsToQuery.includes(event)) {
await queryDepositEvents(event);
}
Expand Down Expand Up @@ -581,7 +582,7 @@ export abstract class SpokePoolClient extends BaseAbstractClient {
};

// Update deposits with speed up requests from depositor.
["RequestedSpeedUpV3Deposit", "RequestedSpeedUpDeposit"].forEach((event) => {
["RequestedSpeedUpDeposit"].forEach((event) => {
if (eventsToQuery.includes(event)) {
querySpeedUpDepositEvents(event);
}
Expand All @@ -596,10 +597,6 @@ export abstract class SpokePoolClient extends BaseAbstractClient {
destinationChainId: this.chainId,
};

if (eventName === "RequestedV3SlowFill") {
slowFillRequest.messageHash = getMessageHash(slowFillRequest.message);
}

const depositHash = getRelayEventKey({ ...slowFillRequest, destinationChainId: this.chainId });

// Sanity check that this event is not a duplicate.
Expand All @@ -612,7 +609,7 @@ export abstract class SpokePoolClient extends BaseAbstractClient {
}
};

["RequestedV3SlowFill", "RequestedSlowFill"].forEach((event) => {
["RequestedSlowFill"].forEach((event) => {
if (eventsToQuery.includes(event)) {
queryRequestedSlowFillEvents(event);
}
Expand All @@ -636,11 +633,6 @@ export abstract class SpokePoolClient extends BaseAbstractClient {
destinationChainId: this.chainId,
};

if (eventName === "FilledV3Relay") {
fill.messageHash = getMessageHash((event as unknown as { message: string }).message);
fill.relayExecutionInfo.updatedMessageHash = getMessageHash(event.relayExecutionInfo.updatedMessage!);
}

// Sanity check that this event is not a duplicate.
const duplicateFill = this.fills[fill.originChainId]?.find((f) => duplicateEvent(fill, f));
if (duplicateFill) {
Expand All @@ -654,7 +646,7 @@ export abstract class SpokePoolClient extends BaseAbstractClient {
};

// Update observed fills with ingested event data.
["FilledV3Relay", "FilledRelay"].forEach((event) => {
["FilledRelay"].forEach((event) => {
if (eventsToQuery.includes(event)) {
queryFilledRelayEvents(event);
}
Expand Down
102 changes: 36 additions & 66 deletions src/clients/mocks/MockSpokePoolClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ import {
BigNumber,
bnZero,
bnOne,
toAddress,
toBytes32,
spreadEventWithBlockNumber,
} from "../../utils";
Expand Down Expand Up @@ -85,6 +84,7 @@ export class MockSpokePoolClient extends EVMSpokePoolClient {
lastDepositId = _depositIds[i];
}
}

_getDepositIdAtBlock(blockTag: number): Promise<BigNumber> {
return Promise.resolve(this.depositIdAtBlock[blockTag]);
}
Expand Down Expand Up @@ -129,23 +129,18 @@ export class MockSpokePoolClient extends EVMSpokePoolClient {
return this._deposit("FundsDeposited", deposit);
}

depositV3(deposit: Omit<Deposit, "messageHash"> & Partial<SortableEvent>): Log {
return this._deposit("V3FundsDeposited", deposit);
}

protected _deposit(event: string, deposit: Omit<Deposit, "messageHash"> & Partial<SortableEvent>): Log {
const { blockNumber, txnIndex } = deposit;
let { depositId, destinationChainId, inputAmount, outputAmount } = deposit;
depositId ??= this.numberOfDeposits;
this.numberOfDeposits = depositId.add(bnOne);

destinationChainId ??= random(1, 42161, false);
const addressModifier = event === "FundsDeposited" ? toBytes32 : toAddress;
const depositor = addressModifier(deposit.depositor ?? randomAddress());
const recipient = addressModifier(deposit.recipient ?? depositor);
const inputToken = addressModifier(deposit.inputToken ?? randomAddress());
const outputToken = addressModifier(deposit.outputToken ?? inputToken);
const exclusiveRelayer = addressModifier(deposit.exclusiveRelayer ?? ZERO_ADDRESS);
const depositor = toBytes32(deposit.depositor ?? randomAddress());
const recipient = toBytes32(deposit.recipient ?? depositor);
const inputToken = toBytes32(deposit.inputToken ?? randomAddress());
const outputToken = toBytes32(deposit.outputToken ?? inputToken);
const exclusiveRelayer = toBytes32(deposit.exclusiveRelayer ?? ZERO_ADDRESS);

inputAmount ??= toBNWei(random(1, 1000, false));
outputAmount ??= inputAmount.mul(toBN("0.95"));
Expand Down Expand Up @@ -180,17 +175,13 @@ export class MockSpokePoolClient extends EVMSpokePoolClient {
});
}

fillV3Relay(fill: Omit<Fill, "messageHash"> & { message: string } & Partial<SortableEvent>): Log {
return this._fillRelay("FilledV3Relay", fill);
}

fillRelay(fill: Omit<Fill, "messageHash"> & { message: string } & Partial<SortableEvent>): Log {
fillRelay(fill: Omit<Fill, "messageHash"> & { message?: string } & Partial<SortableEvent>): Log {
return this._fillRelay("FilledRelay", fill);
}

protected _fillRelay(
event: string,
fill: Omit<Fill, "messageHash"> & { message: string } & Partial<SortableEvent>
fill: Omit<Fill, "messageHash"> & { message?: string } & Partial<SortableEvent>
): Log {
const { blockNumber, txnIndex } = fill;
let { originChainId, depositId, inputAmount, outputAmount, fillDeadline } = fill;
Expand All @@ -200,15 +191,14 @@ export class MockSpokePoolClient extends EVMSpokePoolClient {
outputAmount ??= inputAmount;
fillDeadline ??= getCurrentTime() + 60;

const addressModifier = event === "FilledRelay" ? toBytes32 : toAddress;
const depositor = addressModifier(fill.depositor ?? randomAddress());
const recipient = addressModifier(fill.recipient ?? depositor);
const inputToken = addressModifier(fill.inputToken ?? randomAddress());
const outputToken = addressModifier(fill.outputToken ?? ZERO_ADDRESS);
const exclusiveRelayer = addressModifier(fill.exclusiveRelayer ?? ZERO_ADDRESS);
const relayer = addressModifier(fill.relayer ?? randomAddress());
const depositor = toBytes32(fill.depositor ?? randomAddress());
const recipient = toBytes32(fill.recipient ?? depositor);
const inputToken = toBytes32(fill.inputToken ?? randomAddress());
const outputToken = toBytes32(fill.outputToken ?? ZERO_ADDRESS);
const exclusiveRelayer = toBytes32(fill.exclusiveRelayer ?? ZERO_ADDRESS);
const relayer = toBytes32(fill.relayer ?? randomAddress());

const topics = [originChainId, depositId, relayer]; // @todo verify
const topics = [originChainId, depositId, relayer];
const message = fill.message ?? EMPTY_MESSAGE;
const updatedMessage = fill.relayExecutionInfo?.updatedMessage ?? message;

Expand Down Expand Up @@ -239,25 +229,14 @@ export class MockSpokePoolClient extends EVMSpokePoolClient {
},
};

const args =
event === "FilledRelay"
? {
..._args,
messageHash: getMessageHash(message),
relayExecutionInfo: {
...relayExecutionInfo,
updatedMessageHash: getMessageHash(updatedMessage),
},
}
: {
// FilledV3Relay
..._args,
message,
relayExecutionInfo: {
...relayExecutionInfo,
updatedMessage,
},
};
const args = {
..._args,
messageHash: getMessageHash(message),
relayExecutionInfo: {
...relayExecutionInfo,
updatedMessageHash: getMessageHash(updatedMessage),
},
};

return this.eventManager.generateEvent({
event,
Expand All @@ -269,17 +248,12 @@ export class MockSpokePoolClient extends EVMSpokePoolClient {
});
}

speedUpV3Deposit(speedUp: SpeedUp): Log {
return this._speedUpDeposit("RequestedSpeedUpV3Deposit", speedUp);
}

speedUpDeposit(speedUp: SpeedUp): Log {
return this._speedUpDeposit("RequestedSpeedUpDeposit", speedUp);
}

protected _speedUpDeposit(event: string, speedUp: SpeedUp): Log {
const addressModifier = event === "RequestedSpeedUpDeposit" ? toBytes32 : toAddress;
const depositor = addressModifier(speedUp.depositor);
const depositor = toBytes32(speedUp.depositor);
const topics = [speedUp.depositId, depositor];
const args = { ...speedUp };

Expand All @@ -290,7 +264,7 @@ export class MockSpokePoolClient extends EVMSpokePoolClient {
args: {
...args,
depositor,
updatedRecipient: addressModifier(speedUp.updatedRecipient),
updatedRecipient: toBytes32(speedUp.updatedRecipient),
},
});
}
Expand All @@ -308,45 +282,41 @@ export class MockSpokePoolClient extends EVMSpokePoolClient {
});
}

requestV3SlowFill(request: Omit<SlowFillRequest, "messageHash"> & Partial<SortableEvent>): Log {
return this._requestSlowFill("RequestedV3SlowFill", request);
}

requestSlowFill(request: Omit<SlowFillRequest, "messageHash"> & Partial<SortableEvent>): Log {
requestSlowFill(request: Omit<SlowFillRequest, "destinationChainId"> & Partial<SortableEvent>): Log {
return this._requestSlowFill("RequestedSlowFill", request);
}

protected _requestSlowFill(
event: string,
request: Omit<SlowFillRequest, "messageHash"> & Partial<SortableEvent>
request: Omit<SlowFillRequest, "destinationChainId"> & Partial<SortableEvent>
): Log {
const { originChainId, depositId } = request;
const topics = [originChainId, depositId];
const args = { ...request };

const addressModifier = event === "RequestedSlowFill" ? toBytes32 : toAddress;
const depositor = addressModifier(args.depositor ?? randomAddress());
const depositor = toBytes32(args.depositor ?? randomAddress());

return this.eventManager.generateEvent({
event,
address: this.spokePool.address,
topics: topics.map((topic) => topic.toString()),
args: {
...args,
destinationChainId: this.chainId,
depositor,
recipient: addressModifier(args.recipient ?? depositor),
inputToken: addressModifier(args.inputToken ?? randomAddress()),
outputToken: addressModifier(args.outputToken ?? ZERO_ADDRESS),
exclusiveRelayer: addressModifier(args.exclusiveRelayer ?? ZERO_ADDRESS),
recipient: toBytes32(args.recipient ?? depositor),
inputToken: toBytes32(args.inputToken ?? randomAddress()),
outputToken: toBytes32(args.outputToken ?? ZERO_ADDRESS),
exclusiveRelayer: toBytes32(args.exclusiveRelayer ?? ZERO_ADDRESS),
},
blockNumber: request.blockNumber,
transactionIndex: request.txnIndex,
});
}

// This is a simple wrapper around fillV3Relay().
// This is a simple wrapper around fillRelay().
// rootBundleId and proof are discarded here - we have no interest in verifying that.
executeV3SlowRelayLeaf(leaf: Omit<SlowFillLeaf, "messageHash">): Log {
executeSlowRelayLeaf(leaf: Omit<SlowFillLeaf, "messageHash">): Log {
const fill = {
...leaf.relayData,
destinationChainId: this.chainId,
Expand All @@ -361,7 +331,7 @@ export class MockSpokePoolClient extends EVMSpokePoolClient {
},
};

return this.fillV3Relay(fill);
return this.fillRelay(fill);
}

executeRelayerRefundLeaf(refund: RelayerRefundExecution & Partial<SortableEvent>): Log {
Expand Down
5 changes: 1 addition & 4 deletions src/interfaces/SpokePool.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
import { SortableEvent } from "./Common";
import { FilledV3RelayEvent, V3FundsDepositedEvent } from "../typechain";
import { SpokePoolClient } from "../clients";
import { BigNumber } from "../utils";
import { RelayerRefundLeaf } from "./HubPool";

export type { FilledV3RelayEvent, V3FundsDepositedEvent };

export interface RelayData {
originChainId: number;
depositor: string;
Expand Down Expand Up @@ -93,7 +90,7 @@ export interface SpeedUp {

export interface SpeedUpWithBlock extends SpeedUp, SortableEvent {}

export interface SlowFillRequest extends RelayData {
export interface SlowFillRequest extends Omit<RelayData, "message"> {
messageHash: string;
destinationChainId: number;
}
Expand Down
Loading