Fix: get rx retry and overlapping block ranges (#120)
* Fix: get rx retry and overlapping block ranges * ScopedLogger => Logger
This commit is contained in:
parent
2ea98eaa8d
commit
48e206168b
|
@ -13,7 +13,7 @@ import {
|
||||||
Workflow,
|
Workflow,
|
||||||
} from "@wormhole-foundation/relayer-engine"
|
} from "@wormhole-foundation/relayer-engine"
|
||||||
import * as wh from "@certusone/wormhole-sdk"
|
import * as wh from "@certusone/wormhole-sdk"
|
||||||
import {SignedVaa} from "@certusone/wormhole-sdk"
|
import { SignedVaa } from "@certusone/wormhole-sdk"
|
||||||
import { Logger } from "winston"
|
import { Logger } from "winston"
|
||||||
import { PluginError } from "./utils"
|
import { PluginError } from "./utils"
|
||||||
import {
|
import {
|
||||||
|
@ -167,7 +167,8 @@ export class GenericRelayerPlugin implements Plugin<WorkflowPayload> {
|
||||||
coreRelayerVaa.sequence,
|
coreRelayerVaa.sequence,
|
||||||
chainId,
|
chainId,
|
||||||
providers.evm[chainId],
|
providers.evm[chainId],
|
||||||
this.pluginConfig.supportedChains.get(chainId)!
|
this.pluginConfig.supportedChains.get(chainId)!,
|
||||||
|
this.logger
|
||||||
)
|
)
|
||||||
|
|
||||||
const chainConfig = this.pluginConfig.supportedChains.get(chainId)!
|
const chainConfig = this.pluginConfig.supportedChains.get(chainId)!
|
||||||
|
@ -407,4 +408,3 @@ export class GenericRelayerPlugin implements Plugin<WorkflowPayload> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,15 +5,16 @@ import * as ethers from "ethers"
|
||||||
import { Implementation__factory } from "@certusone/wormhole-sdk/lib/cjs/ethers-contracts"
|
import { Implementation__factory } from "@certusone/wormhole-sdk/lib/cjs/ethers-contracts"
|
||||||
import { retryAsyncUntilDefined } from "ts-retry/lib/cjs/retry"
|
import { retryAsyncUntilDefined } from "ts-retry/lib/cjs/retry"
|
||||||
import { ChainInfo } from "./plugin"
|
import { ChainInfo } from "./plugin"
|
||||||
import { ScopedLogger } from "@wormhole-foundation/relayer-engine/relayer-engine/lib/helpers/logHelper"
|
|
||||||
import { tryNativeToHexString } from "@certusone/wormhole-sdk"
|
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
|
// fetch the contract transaction receipt for the given sequence number emitted by the core relayer contract
|
||||||
export async function fetchReceipt(
|
export async function fetchReceipt(
|
||||||
sequence: BigInt,
|
sequence: BigInt,
|
||||||
chainId: wh.EVMChainId,
|
chainId: wh.EVMChainId,
|
||||||
provider: ethers.providers.Provider,
|
provider: ethers.providers.Provider,
|
||||||
chainConfig: ChainInfo
|
chainConfig: ChainInfo,
|
||||||
|
logger: Logger
|
||||||
): Promise<ethers.ContractReceipt> {
|
): Promise<ethers.ContractReceipt> {
|
||||||
const coreWHContract = IWormhole__factory.connect(chainConfig.coreContract!, provider)
|
const coreWHContract = IWormhole__factory.connect(chainConfig.coreContract!, provider)
|
||||||
const filter = coreWHContract.filters.LogMessagePublished(chainConfig.relayerAddress)
|
const filter = coreWHContract.filters.LogMessagePublished(chainConfig.relayerAddress)
|
||||||
|
@ -25,7 +26,7 @@ export async function fetchReceipt(
|
||||||
} else {
|
} else {
|
||||||
paginatedLogs = await coreWHContract.queryFilter(
|
paginatedLogs = await coreWHContract.queryFilter(
|
||||||
filter,
|
filter,
|
||||||
blockNumber - (i + 1) * 20,
|
blockNumber - (i + 2) * 20,
|
||||||
blockNumber - i * 20
|
blockNumber - i * 20
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -33,13 +34,23 @@ export async function fetchReceipt(
|
||||||
(log) => log.args.sequence.toString() === sequence.toString()
|
(log) => log.args.sequence.toString() === sequence.toString()
|
||||||
)
|
)
|
||||||
if (log) {
|
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 {
|
try {
|
||||||
return await retryAsyncUntilDefined(
|
return await retryAsyncUntilDefined(
|
||||||
async () => {
|
async () => {
|
||||||
const paginatedLogs = await coreWHContract.queryFilter(filter, -50)
|
const paginatedLogs = await coreWHContract.queryFilter(filter, -500)
|
||||||
const log = paginatedLogs.find(
|
const log = paginatedLogs.find(
|
||||||
(log) => log.args.sequence.toString() === sequence.toString()
|
(log) => log.args.sequence.toString() === sequence.toString()
|
||||||
)
|
)
|
||||||
|
@ -59,7 +70,7 @@ export function filterLogs(
|
||||||
rx: ethers.ContractReceipt,
|
rx: ethers.ContractReceipt,
|
||||||
nonce: number,
|
nonce: number,
|
||||||
chainConfig: ChainInfo,
|
chainConfig: ChainInfo,
|
||||||
logger: ScopedLogger
|
logger: Logger
|
||||||
): {
|
): {
|
||||||
vaas: {
|
vaas: {
|
||||||
sequence: string
|
sequence: string
|
||||||
|
|
Loading…
Reference in New Issue