Fix: get rx retry and overlapping block ranges (#120)

* Fix: get rx retry and overlapping block ranges

* ScopedLogger => Logger
This commit is contained in:
Joe Howarth 2023-03-15 15:36:13 -07:00 committed by GitHub
parent 2ea98eaa8d
commit 48e206168b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 9 deletions

View File

@ -13,7 +13,7 @@ import {
Workflow,
} from "@wormhole-foundation/relayer-engine"
import * as wh from "@certusone/wormhole-sdk"
import {SignedVaa} from "@certusone/wormhole-sdk"
import { SignedVaa } from "@certusone/wormhole-sdk"
import { Logger } from "winston"
import { PluginError } from "./utils"
import {
@ -167,7 +167,8 @@ export class GenericRelayerPlugin implements Plugin<WorkflowPayload> {
coreRelayerVaa.sequence,
chainId,
providers.evm[chainId],
this.pluginConfig.supportedChains.get(chainId)!
this.pluginConfig.supportedChains.get(chainId)!,
this.logger
)
const chainConfig = this.pluginConfig.supportedChains.get(chainId)!
@ -407,4 +408,3 @@ export class GenericRelayerPlugin implements Plugin<WorkflowPayload> {
}
}
}

View File

@ -5,15 +5,16 @@ import * as ethers from "ethers"
import { Implementation__factory } from "@certusone/wormhole-sdk/lib/cjs/ethers-contracts"
import { retryAsyncUntilDefined } from "ts-retry/lib/cjs/retry"
import { ChainInfo } from "./plugin"
import { ScopedLogger } from "@wormhole-foundation/relayer-engine/relayer-engine/lib/helpers/logHelper"
import { tryNativeToHexString } from "@certusone/wormhole-sdk"
import { Logger } from "winston"
// fetch the contract transaction receipt for the given sequence number emitted by the core relayer contract
export async function fetchReceipt(
sequence: BigInt,
chainId: wh.EVMChainId,
provider: ethers.providers.Provider,
chainConfig: ChainInfo
chainConfig: ChainInfo,
logger: Logger
): Promise<ethers.ContractReceipt> {
const coreWHContract = IWormhole__factory.connect(chainConfig.coreContract!, provider)
const filter = coreWHContract.filters.LogMessagePublished(chainConfig.relayerAddress)
@ -25,7 +26,7 @@ export async function fetchReceipt(
} else {
paginatedLogs = await coreWHContract.queryFilter(
filter,
blockNumber - (i + 1) * 20,
blockNumber - (i + 2) * 20,
blockNumber - i * 20
)
}
@ -33,13 +34,23 @@ export async function fetchReceipt(
(log) => log.args.sequence.toString() === sequence.toString()
)
if (log) {
return await log.getTransactionReceipt()
const rx = await log.getTransactionReceipt()
if (rx) {
return rx
} else {
logger.error("Returned transaction receipt was not defined", {
rx,
sequence,
chainId,
})
}
}
}
logger.info("Did not fetch receipt in initial scan, trying latest 500 blocks...")
try {
return await retryAsyncUntilDefined(
async () => {
const paginatedLogs = await coreWHContract.queryFilter(filter, -50)
const paginatedLogs = await coreWHContract.queryFilter(filter, -500)
const log = paginatedLogs.find(
(log) => log.args.sequence.toString() === sequence.toString()
)
@ -59,7 +70,7 @@ export function filterLogs(
rx: ethers.ContractReceipt,
nonce: number,
chainConfig: ChainInfo,
logger: ScopedLogger
logger: Logger
): {
vaas: {
sequence: string