From 92f8c64554b2366ec931c6ac6a5e87bd61275080 Mon Sep 17 00:00:00 2001 From: Paul <108695806+pxrl@users.noreply.github.com> Date: Sat, 8 Feb 2025 11:38:56 +0000 Subject: [PATCH 01/12] fix(Relayer): Protect against undefined fill amount --- src/relayer/Relayer.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/relayer/Relayer.ts b/src/relayer/Relayer.ts index ec20f6e87..d0e9ff584 100644 --- a/src/relayer/Relayer.ts +++ b/src/relayer/Relayer.ts @@ -477,6 +477,10 @@ export class Relayer { } const fillAmount = profitClient.getFillAmountInUsd(deposit); + if (!isDefined(fillAmount)) { + return acc; + } + return acc.add(fillAmount); }, bnZero); From 66fd061d54ba5fb435348a8c4df1e230a8c1337e Mon Sep 17 00:00:00 2001 From: Paul <108695806+pxrl@users.noreply.github.com> Date: Sat, 8 Feb 2025 11:45:43 +0000 Subject: [PATCH 02/12] Extra --- src/relayer/Relayer.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/relayer/Relayer.ts b/src/relayer/Relayer.ts index d0e9ff584..d0accecd8 100644 --- a/src/relayer/Relayer.ts +++ b/src/relayer/Relayer.ts @@ -574,7 +574,9 @@ export class Relayer { .filter((deposit) => tokenClient.hasBalanceForFill(deposit)) .reduce((agg, deposit) => { const unfilledAmountUsd = profitClient.getFillAmountInUsd(deposit); - agg[deposit.originChainId] = (agg[deposit.originChainId] ?? bnZero).add(unfilledAmountUsd); + if (isDefined(unfilledAmountUsd)) { + agg[deposit.originChainId] = (agg[deposit.originChainId] ?? bnZero).add(unfilledAmountUsd); + } return agg; }, {}); @@ -698,6 +700,9 @@ export class Relayer { } else { const { blockNumber, outputToken, outputAmount } = deposit; const fillAmountUsd = profitClient.getFillAmountInUsd(deposit); + if (!isDefined(fillAmountUsd)) { + return; + } const limitIdx = this.findOriginChainLimitIdx(originChainId, blockNumber); // Ensure that a limit was identified, and that no upper thresholds would be breached by filling this deposit. From e135dc06e5df0accfb6b2fa21e7703038dcb6b37 Mon Sep 17 00:00:00 2001 From: Paul <108695806+pxrl@users.noreply.github.com> Date: Sat, 8 Feb 2025 11:52:50 +0000 Subject: [PATCH 03/12] Filter out bad addresses --- src/relayer/Relayer.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/relayer/Relayer.ts b/src/relayer/Relayer.ts index d0accecd8..160198519 100644 --- a/src/relayer/Relayer.ts +++ b/src/relayer/Relayer.ts @@ -271,6 +271,19 @@ export class Relayer { return false; } + [deposit.depositor, deposit.recipient, deposit.exclusiveRelayer].forEach((address) => { + try { + sdkUtils.toAddress(address); + } catch (err) { + this.logger.debug({ + at: "Relayer::filterDeposit", + message: `Skipping ${srcChain} deposit due to invalid address.`, + deposit, + }); + return false; + } + }); + if (ignoredAddresses?.includes(getAddress(depositor)) || ignoredAddresses?.includes(getAddress(recipient))) { this.logger.debug({ at: "Relayer::filterDeposit", From 4528653953a94864e821ac4e9638f39a65625a4c Mon Sep 17 00:00:00 2001 From: Paul <108695806+pxrl@users.noreply.github.com> Date: Sat, 8 Feb 2025 11:54:50 +0000 Subject: [PATCH 04/12] update --- src/relayer/Relayer.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/relayer/Relayer.ts b/src/relayer/Relayer.ts index 160198519..c4af575f2 100644 --- a/src/relayer/Relayer.ts +++ b/src/relayer/Relayer.ts @@ -272,9 +272,7 @@ export class Relayer { } [deposit.depositor, deposit.recipient, deposit.exclusiveRelayer].forEach((address) => { - try { - sdkUtils.toAddress(address); - } catch (err) { + if (!sdkUtils.isValidEvmAddress(address)) { this.logger.debug({ at: "Relayer::filterDeposit", message: `Skipping ${srcChain} deposit due to invalid address.`, From 08eb3ce48ce9ec7538352d5176ea299d1a3a3b3a Mon Sep 17 00:00:00 2001 From: Paul <108695806+pxrl@users.noreply.github.com> Date: Sat, 8 Feb 2025 12:09:41 +0000 Subject: [PATCH 05/12] relocate --- src/relayer/Relayer.ts | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/relayer/Relayer.ts b/src/relayer/Relayer.ts index c4af575f2..726d815f1 100644 --- a/src/relayer/Relayer.ts +++ b/src/relayer/Relayer.ts @@ -228,6 +228,18 @@ export class Relayer { return false; } + [deposit.depositor, deposit.recipient, deposit.exclusiveRelayer, deposit.inputToken, deposit.outputToken].forEach((address) => { + if (!sdkUtils.isValidEvmAddress(address)) { + this.logger.debug({ + at: "Relayer::filterDeposit", + message: `Skipping ${srcChain} deposit due to invalid address.`, + address, + deposit, + }); + return false; + } + }); + // Ensure that the individual deposit meets the minimum deposit confirmation requirements for its value. const fillAmountUsd = profitClient.getFillAmountInUsd(deposit); if (!isDefined(fillAmountUsd)) { @@ -271,17 +283,6 @@ export class Relayer { return false; } - [deposit.depositor, deposit.recipient, deposit.exclusiveRelayer].forEach((address) => { - if (!sdkUtils.isValidEvmAddress(address)) { - this.logger.debug({ - at: "Relayer::filterDeposit", - message: `Skipping ${srcChain} deposit due to invalid address.`, - deposit, - }); - return false; - } - }); - if (ignoredAddresses?.includes(getAddress(depositor)) || ignoredAddresses?.includes(getAddress(recipient))) { this.logger.debug({ at: "Relayer::filterDeposit", From 65025b140f1de5695107a124a7229009e82ff224 Mon Sep 17 00:00:00 2001 From: Paul <108695806+pxrl@users.noreply.github.com> Date: Sat, 8 Feb 2025 12:22:33 +0000 Subject: [PATCH 06/12] fix --- src/relayer/Relayer.ts | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/relayer/Relayer.ts b/src/relayer/Relayer.ts index 726d815f1..473709c8d 100644 --- a/src/relayer/Relayer.ts +++ b/src/relayer/Relayer.ts @@ -228,18 +228,23 @@ export class Relayer { return false; } - [deposit.depositor, deposit.recipient, deposit.exclusiveRelayer, deposit.inputToken, deposit.outputToken].forEach((address) => { - if (!sdkUtils.isValidEvmAddress(address)) { - this.logger.debug({ - at: "Relayer::filterDeposit", - message: `Skipping ${srcChain} deposit due to invalid address.`, - address, - deposit, - }); - return false; + const badAddress = [deposit.depositor, deposit.recipient, deposit.exclusiveRelayer, deposit.inputToken, deposit.outputToken].some((address) => { + try { + console.log(`xxx checking address: ${address}.`); + ethersUtils.getAddress(address); + } catch { + return true; } }); + if (badAddress) { + this.logger.debug({ + at: "Relayer::filterDeposit", + message: `Skipping ${srcChain} deposit due to invalid address.`, + deposit, + }); + } + // Ensure that the individual deposit meets the minimum deposit confirmation requirements for its value. const fillAmountUsd = profitClient.getFillAmountInUsd(deposit); if (!isDefined(fillAmountUsd)) { From 5a14d006f6e97c8b9aae308dcfe5f72858d1394a Mon Sep 17 00:00:00 2001 From: Paul <108695806+pxrl@users.noreply.github.com> Date: Sat, 8 Feb 2025 12:23:54 +0000 Subject: [PATCH 07/12] drop --- src/relayer/Relayer.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/relayer/Relayer.ts b/src/relayer/Relayer.ts index 473709c8d..e34d599c4 100644 --- a/src/relayer/Relayer.ts +++ b/src/relayer/Relayer.ts @@ -230,7 +230,6 @@ export class Relayer { const badAddress = [deposit.depositor, deposit.recipient, deposit.exclusiveRelayer, deposit.inputToken, deposit.outputToken].some((address) => { try { - console.log(`xxx checking address: ${address}.`); ethersUtils.getAddress(address); } catch { return true; From 286deeed35dac6d60deefa1cd4b31f67e7304215 Mon Sep 17 00:00:00 2001 From: Paul <108695806+pxrl@users.noreply.github.com> Date: Sat, 8 Feb 2025 12:27:03 +0000 Subject: [PATCH 08/12] drop --- src/relayer/Relayer.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/relayer/Relayer.ts b/src/relayer/Relayer.ts index e34d599c4..0fc681b59 100644 --- a/src/relayer/Relayer.ts +++ b/src/relayer/Relayer.ts @@ -242,6 +242,7 @@ export class Relayer { message: `Skipping ${srcChain} deposit due to invalid address.`, deposit, }); + return false; } // Ensure that the individual deposit meets the minimum deposit confirmation requirements for its value. From 1b60fdd9236f613b43300d0b0df00240baf33e31 Mon Sep 17 00:00:00 2001 From: Paul <108695806+pxrl@users.noreply.github.com> Date: Sat, 8 Feb 2025 12:32:26 +0000 Subject: [PATCH 09/12] lint --- src/relayer/Relayer.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/relayer/Relayer.ts b/src/relayer/Relayer.ts index 0fc681b59..583a2be39 100644 --- a/src/relayer/Relayer.ts +++ b/src/relayer/Relayer.ts @@ -228,7 +228,13 @@ export class Relayer { return false; } - const badAddress = [deposit.depositor, deposit.recipient, deposit.exclusiveRelayer, deposit.inputToken, deposit.outputToken].some((address) => { + const badAddress = [ + deposit.depositor, + deposit.recipient, + deposit.exclusiveRelayer, + deposit.inputToken, + deposit.outputToken, + ].some((address) => { try { ethersUtils.getAddress(address); } catch { From c946f07a2088e9b562ae6986d5c51ae9f1798e0b Mon Sep 17 00:00:00 2001 From: Paul <108695806+pxrl@users.noreply.github.com> Date: Sat, 8 Feb 2025 12:33:36 +0000 Subject: [PATCH 10/12] simplify --- src/relayer/Relayer.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/relayer/Relayer.ts b/src/relayer/Relayer.ts index 583a2be39..8302b3623 100644 --- a/src/relayer/Relayer.ts +++ b/src/relayer/Relayer.ts @@ -500,11 +500,7 @@ export class Relayer { } const fillAmount = profitClient.getFillAmountInUsd(deposit); - if (!isDefined(fillAmount)) { - return acc; - } - - return acc.add(fillAmount); + return acc.add(fillAmount ?? bnZero) }, bnZero); return commitment; From b4d05853d20d0dab557524e84950c8d4b3de7d54 Mon Sep 17 00:00:00 2001 From: Paul <108695806+pxrl@users.noreply.github.com> Date: Sat, 8 Feb 2025 12:34:03 +0000 Subject: [PATCH 11/12] simplify --- src/relayer/Relayer.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/relayer/Relayer.ts b/src/relayer/Relayer.ts index 8302b3623..8c0e5243a 100644 --- a/src/relayer/Relayer.ts +++ b/src/relayer/Relayer.ts @@ -593,9 +593,7 @@ export class Relayer { .filter((deposit) => tokenClient.hasBalanceForFill(deposit)) .reduce((agg, deposit) => { const unfilledAmountUsd = profitClient.getFillAmountInUsd(deposit); - if (isDefined(unfilledAmountUsd)) { - agg[deposit.originChainId] = (agg[deposit.originChainId] ?? bnZero).add(unfilledAmountUsd); - } + agg[deposit.originChainId] = (agg[deposit.originChainId] ?? bnZero).add(unfilledAmountUsd ?? bnZero); return agg; }, {}); From 2e99da9ffc43931f7f0ec2c99b6383bd632dd210 Mon Sep 17 00:00:00 2001 From: Paul <108695806+pxrl@users.noreply.github.com> Date: Sat, 8 Feb 2025 12:34:53 +0000 Subject: [PATCH 12/12] lint --- src/relayer/Relayer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/relayer/Relayer.ts b/src/relayer/Relayer.ts index 8c0e5243a..1495c68dd 100644 --- a/src/relayer/Relayer.ts +++ b/src/relayer/Relayer.ts @@ -500,7 +500,7 @@ export class Relayer { } const fillAmount = profitClient.getFillAmountInUsd(deposit); - return acc.add(fillAmount ?? bnZero) + return acc.add(fillAmount ?? bnZero); }, bnZero); return commitment;