mirror of
https://github.com/farcasterxyz/hub-monorepo.git
synced 2026-04-18 03:00:22 -04:00
fix: Fix edge case where txIndex is the same as logIndex (#1368)
This commit is contained in:
@@ -31,6 +31,7 @@ import { ok, ResultAsync } from "neverthrow";
|
||||
import { OnChainEventPostfix, RootPrefix } from "../db/types.js";
|
||||
import { getHubState, putHubState } from "../db/hubState.js";
|
||||
import { PageOptions } from "./types.js";
|
||||
import { logger } from "../../utils/logger.js";
|
||||
|
||||
const SUPPORTED_SIGNER_SCHEMES = [1];
|
||||
export const MIGRATION_BLOCK = 108911959;
|
||||
@@ -146,10 +147,12 @@ class OnChainEventStore {
|
||||
() => undefined,
|
||||
);
|
||||
if (_badEvent.isOk()) {
|
||||
const txn = putOnChainEventTransaction(this._db.transaction(), event);
|
||||
const incorrectPrimaryKey = makeOnChainEventPrimaryKey(event.type, event.fid, event.blockNumber, event.txIndex);
|
||||
const correctPrimaryKey = makeOnChainEventPrimaryKey(event.type, event.fid, event.blockNumber, event.logIndex);
|
||||
const txn = this._db.transaction();
|
||||
txn.del(incorrectPrimaryKey);
|
||||
putOnChainEventTransaction(txn, event);
|
||||
|
||||
if (isSignerOnChainEvent(_badEvent.value)) {
|
||||
txn.put(makeSignerOnChainEventBySignerKey(event.fid, _badEvent.value.signerEventBody.key), correctPrimaryKey);
|
||||
} else if (isIdRegisterOnChainEvent(_badEvent.value)) {
|
||||
@@ -245,7 +248,7 @@ class OnChainEventStore {
|
||||
() => undefined,
|
||||
);
|
||||
if (existingEventResult.isErr()) {
|
||||
throw new HubError("unavailable.storage_failure", `secondary index corrupted for ${secondaryKey}`);
|
||||
logger.warn(`secondary index corrupted for ${secondaryKey.toString("hex")}`);
|
||||
} else {
|
||||
return existingEventResult.value;
|
||||
}
|
||||
|
||||
@@ -52,8 +52,9 @@ describe("OnChainEventStore", () => {
|
||||
badSignerEvent.txIndex = txIndex;
|
||||
badSignerEvent.logIndex = logIndex;
|
||||
badRegisterEvent.txIndex = txIndex;
|
||||
badRegisterEvent.logIndex = logIndex;
|
||||
badRegisterEvent.logIndex = txIndex; // Assume log index is the same as tx index
|
||||
|
||||
await expect(set.mergeOnChainEvent(badSignerEvent)).rejects.toThrow("already exists");
|
||||
await expect(set.mergeOnChainEvent(badSignerEvent)).rejects.toThrow("already exists");
|
||||
const signerEvents = await set.getOnChainEvents(OnChainEventType.EVENT_TYPE_SIGNER, badSignerEvent.fid);
|
||||
expect(signerEvents).toHaveLength(1);
|
||||
@@ -63,6 +64,7 @@ describe("OnChainEventStore", () => {
|
||||
const onChainSigner = await set.getActiveSigner(badSignerEvent.fid, badSignerEvent.signerEventBody.key);
|
||||
expect(onChainSigner.signerEventBody.key).toEqual(badSignerEvent.signerEventBody.key);
|
||||
|
||||
await expect(set.mergeOnChainEvent(badRegisterEvent)).rejects.toThrow("already exists");
|
||||
await expect(set.mergeOnChainEvent(badRegisterEvent)).rejects.toThrow("already exists");
|
||||
const registerEvents = await set.getOnChainEvents(
|
||||
OnChainEventType.EVENT_TYPE_ID_REGISTER,
|
||||
@@ -70,7 +72,7 @@ describe("OnChainEventStore", () => {
|
||||
);
|
||||
expect(registerEvents).toHaveLength(1);
|
||||
expect(registerEvents[0]?.txIndex).toEqual(txIndex);
|
||||
expect(registerEvents[0]?.logIndex).toEqual(logIndex);
|
||||
expect(registerEvents[0]?.logIndex).toEqual(txIndex);
|
||||
|
||||
const idRegisterByFid = await set.getIdRegisterEventByFid(badRegisterEvent.fid);
|
||||
expect(idRegisterByFid).toEqual(badRegisterEvent);
|
||||
|
||||
Reference in New Issue
Block a user