From cc33e756da49ef61f94bbfe0935bfa0236719272 Mon Sep 17 00:00:00 2001 From: Artur Sapek Date: Wed, 14 Aug 2024 16:25:43 -0400 Subject: [PATCH] ETA adjustments (#672) * add 5 sec of padding to ETAs for guardian network * raise Ethereum finality threshold --- connect/src/protocols/cctp/cctpTransfer.ts | 4 ++-- connect/src/protocols/tokenBridge/tokenTransfer.ts | 4 ++-- core/base/src/constants/finality.ts | 2 +- core/base/src/constants/guardians.ts | 4 ++++ 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/connect/src/protocols/cctp/cctpTransfer.ts b/connect/src/protocols/cctp/cctpTransfer.ts index a4a3d103e..63f3d7533 100644 --- a/connect/src/protocols/cctp/cctpTransfer.ts +++ b/connect/src/protocols/cctp/cctpTransfer.ts @@ -1,5 +1,5 @@ import type { Chain, Network } from "@wormhole-foundation/sdk-base"; -import { circle, encoding, finality, toChain } from "@wormhole-foundation/sdk-base"; +import { circle, encoding, finality, guardians, toChain } from "@wormhole-foundation/sdk-base"; import type { Attestation, AttestationId, @@ -592,7 +592,7 @@ export namespace CircleTransfer { // https://developers.circle.com/stablecoins/docs/required-block-confirmations const eta = - srcChain.chain === "Polygon" ? 2_000 * 200 : finality.estimateFinalityTime(srcChain.chain); + (srcChain.chain === "Polygon" ? 2_000 * 200 : finality.estimateFinalityTime(srcChain.chain)) + guardians.guardianAttestationEta; if (!transfer.automatic) { return { sourceToken: { token: srcToken, amount: transfer.amount }, diff --git a/connect/src/protocols/tokenBridge/tokenTransfer.ts b/connect/src/protocols/tokenBridge/tokenTransfer.ts index d9a6f1769..0677dd513 100644 --- a/connect/src/protocols/tokenBridge/tokenTransfer.ts +++ b/connect/src/protocols/tokenBridge/tokenTransfer.ts @@ -1,5 +1,5 @@ import type { Chain, Network } from "@wormhole-foundation/sdk-base"; -import { amount, encoding, finality, toChain as toChainName } from "@wormhole-foundation/sdk-base"; +import { amount, encoding, finality, guardians, toChain as toChainName } from "@wormhole-foundation/sdk-base"; import type { AttestationId, AutomaticTokenBridge, @@ -717,7 +717,7 @@ export namespace TokenTransfer { const dstDecimals = await dstChain.getDecimals(dstToken.address); const dstAmountReceivable = amount.scale(srcAmountTruncated, dstDecimals); - const eta = finality.estimateFinalityTime(srcChain.chain); + const eta = finality.estimateFinalityTime(srcChain.chain) + guardians.guardianAttestationEta; if (!transfer.automatic) { return { sourceToken: { diff --git a/core/base/src/constants/finality.ts b/core/base/src/constants/finality.ts index 8ff6477cf..a3617fda7 100644 --- a/core/base/src/constants/finality.ts +++ b/core/base/src/constants/finality.ts @@ -26,7 +26,7 @@ export const safeThreshold = constMap(safeThresholds); // Number of blocks before a transaction is considered "final" const finalityThresholds = [ ["Solana", 32], - ["Ethereum", 64], + ["Ethereum", 96], ["Bsc", 15], // Checkpointed to L1 after ~512 blocks ["Optimism", 512], diff --git a/core/base/src/constants/guardians.ts b/core/base/src/constants/guardians.ts index 722b6b343..b408077f9 100644 --- a/core/base/src/constants/guardians.ts +++ b/core/base/src/constants/guardians.ts @@ -38,3 +38,7 @@ export const guardianKeyToName = constMap(guardianKeyAndNameEntries, [1, [0, 2]] export const devnetGuardianPrivateKey = "cfb12303a19cde580bb4dd771639b0d26bc68353645571a8cff516ab2ee113a0"; + +// Number of seconds we expect to wait for attestation +// Used for eta calculation in route code +export const guardianAttestationEta = 5;