From 35b26fd2a0d9227b3a92722e5289a6b71341cf26 Mon Sep 17 00:00:00 2001 From: Huang-Ming Huang Date: Fri, 17 Jul 2026 19:00:55 +0000 Subject: [PATCH] Remove legacy OPP epoch event helper --- .../src/clients/ethereum/EthereumClient.ts | 10 ----- .../clients/ethereum/EthereumClient.test.ts | 38 +++++++++++++++++++ 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/packages/cluster-tool/src/clients/ethereum/EthereumClient.ts b/packages/cluster-tool/src/clients/ethereum/EthereumClient.ts index 81e3b490..36d6e24a 100644 --- a/packages/cluster-tool/src/clients/ethereum/EthereumClient.ts +++ b/packages/cluster-tool/src/clients/ethereum/EthereumClient.ts @@ -79,14 +79,6 @@ export class EthereumClient { return this.queryEvents(opp, EthereumClient.OppEnvelopeEvent, fromBlock) } - /** Query `OPPEpoch` events from a contract. */ - getOPPEpochs( - opp: ethers.Contract, - fromBlock = 0 - ): Promise { - return this.queryEvents(opp, EthereumClient.OppEpochEvent, fromBlock) - } - private async queryEvents( contract: ethers.Contract, eventName: string, @@ -108,6 +100,4 @@ export namespace EthereumClient { "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" /** OPP envelope event name on the outpost contract. */ export const OppEnvelopeEvent = "OPPEnvelope" - /** OPP epoch event name on the outpost contract. */ - export const OppEpochEvent = "OPPEpoch" } diff --git a/packages/cluster-tool/tests/clients/ethereum/EthereumClient.test.ts b/packages/cluster-tool/tests/clients/ethereum/EthereumClient.test.ts index c5001564..2bee1e77 100644 --- a/packages/cluster-tool/tests/clients/ethereum/EthereumClient.test.ts +++ b/packages/cluster-tool/tests/clients/ethereum/EthereumClient.test.ts @@ -39,4 +39,42 @@ describe("EthereumClient", () => { expect(b).not.toBe(a) }) }) + + describe("OPP events", () => { + it("queries and filters the canonical OPPEnvelope event stream", async () => { + const client = new EthereumClient(rpcUrl) + const filter = {} + const envelopeEvent = Object.create( + ethers.EventLog.prototype + ) as ethers.EventLog + const filters = { + [EthereumClient.OppEnvelopeEvent]: jest.fn(() => filter) + } + const queryFilter = jest + .fn() + .mockResolvedValue([envelopeEvent, { eventName: "unparsed" }]) + const opp = { filters, queryFilter } as unknown as ethers.Contract + + await expect(client.getOPPEnvelopes(opp, 7)).resolves.toEqual([ + envelopeEvent + ]) + expect(filters.OPPEnvelope).toHaveBeenCalledTimes(1) + expect(queryFilter).toHaveBeenCalledWith(filter, 7) + }) + + it("propagates query failures and exposes no retired epoch helper", async () => { + const client = new EthereumClient(rpcUrl) + const error = new Error("RPC unavailable") + const opp = { + filters: { + [EthereumClient.OppEnvelopeEvent]: jest.fn(() => ({})) + }, + queryFilter: jest.fn().mockRejectedValue(error) + } as unknown as ethers.Contract + + await expect(client.getOPPEnvelopes(opp)).rejects.toBe(error) + expect("getOPPEpochs" in client).toBe(false) + expect("OppEpochEvent" in EthereumClient).toBe(false) + }) + }) })