From b91f62cf949b446e7b49c66e233fd8355148a40b Mon Sep 17 00:00:00 2001 From: evgeniko <97796468+evgeniko@users.noreply.github.com> Date: Mon, 30 Mar 2026 19:26:19 +0200 Subject: [PATCH 1/2] fix(sdk): deprecate NttAutomaticRoute in favor of NttExecutorRoute MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The EVM on-chain special/standard relayer pricing is no longer maintained since the relay logic was removed from WormholeTransceiver (36570ce4). Older deployed transceivers still have stale pricing enabled, causing quoteDeliveryPrice with automatic: true to return inflated fees (e.g. 0.6 ETH for ETH→Solana). The executor route uses an off-chain quoting service and is the correct path for automatic EVM transfers. - Mark nttAutomaticRoute/NttAutomaticRoute as @deprecated - Add console.warn in EvmNtt.quoteDeliveryPrice when automatic: true - Update example to use nttExecutorRoute --- evm/ts/src/ntt.ts | 9 +++++++++ sdk/examples/src/route.ts | 4 ++-- sdk/route/src/automatic.ts | 12 ++++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/evm/ts/src/ntt.ts b/evm/ts/src/ntt.ts index b9184992b..6f9103aa7 100644 --- a/evm/ts/src/ntt.ts +++ b/evm/ts/src/ntt.ts @@ -524,6 +524,15 @@ export class EvmNtt dstChain: Chain, options: Ntt.TransferOptions ): Promise { + if (options.automatic) { + console.warn( + "EvmNtt.quoteDeliveryPrice with automatic: true queries on-chain " + + "special/standard relayer pricing which is no longer maintained " + + "and may return inflated fees. " + + "For automatic EVM transfers, use nttExecutorRoute and obtain quotes via route.quote() instead." + ); + } + await this.initTransceiverIndices(); // Bypass the manager's quoteDeliveryPrice because it has a bug: it sizes the diff --git a/sdk/examples/src/route.ts b/sdk/examples/src/route.ts index 5940c1e2d..aa051678b 100644 --- a/sdk/examples/src/route.ts +++ b/sdk/examples/src/route.ts @@ -12,7 +12,7 @@ import "@wormhole-foundation/sdk-evm-ntt"; import "@wormhole-foundation/sdk-solana-ntt"; import { - nttAutomaticRoute, + nttExecutorRoute, nttManualRoute, } from "@wormhole-foundation/sdk-route-ntt"; import { NttTokens } from "./consts.js"; @@ -29,7 +29,7 @@ import { getSigner } from "./helpers.js"; const resolver = wh.resolver([ nttManualRoute({ tokens: NttTokens }), - nttAutomaticRoute({ tokens: NttTokens }), + nttExecutorRoute({ ntt: { tokens: NttTokens } }), ]); const { chain, token } = NttTokens.Test[0]!; diff --git a/sdk/route/src/automatic.ts b/sdk/route/src/automatic.ts index 0e1bfa1a4..868c2c2c5 100644 --- a/sdk/route/src/automatic.ts +++ b/sdk/route/src/automatic.ts @@ -40,6 +40,12 @@ type Q = routes.Quote; type R = NttRoute.AutomaticTransferReceipt; +/** + * @deprecated Use {@link nttExecutorRoute} instead. + * When the source chain is EVM, this route relies on on-chain special/standard relayer pricing + * which is no longer maintained. Older EVM transceiver deployments may return stale or inflated + * delivery quotes. + */ export function nttAutomaticRoute(config: NttRoute.Config) { class NttRouteImpl extends NttAutomaticRoute { static override config = config; @@ -47,6 +53,12 @@ export function nttAutomaticRoute(config: NttRoute.Config) { return NttRouteImpl; } +/** + * @deprecated Use {@link NttExecutorRoute} instead. + * When the source chain is EVM, this route relies on on-chain special/standard relayer pricing + * which is no longer maintained. Older EVM transceiver deployments may return stale or inflated + * delivery quotes. + */ export class NttAutomaticRoute extends routes.AutomaticRoute implements routes.StaticRouteMethods From 29572942e620643940cbd32f3f09cd4d125f8bba Mon Sep 17 00:00:00 2001 From: evgeniko <97796468+evgeniko@users.noreply.github.com> Date: Tue, 31 Mar 2026 09:11:17 +0200 Subject: [PATCH 2/2] fix(sdk): add Standard Relayer delivery deadline to deprecation notices --- evm/ts/src/ntt.ts | 1 + sdk/route/src/automatic.ts | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/evm/ts/src/ntt.ts b/evm/ts/src/ntt.ts index 6f9103aa7..aa283eb65 100644 --- a/evm/ts/src/ntt.ts +++ b/evm/ts/src/ntt.ts @@ -529,6 +529,7 @@ export class EvmNtt "EvmNtt.quoteDeliveryPrice with automatic: true queries on-chain " + "special/standard relayer pricing which is no longer maintained " + "and may return inflated fees. " + + "Any messages sent via the Standard Relayer will not be automatically delivered to the destination chain past April 1st, 2026. " + "For automatic EVM transfers, use nttExecutorRoute and obtain quotes via route.quote() instead." ); } diff --git a/sdk/route/src/automatic.ts b/sdk/route/src/automatic.ts index 868c2c2c5..6df29d4d6 100644 --- a/sdk/route/src/automatic.ts +++ b/sdk/route/src/automatic.ts @@ -44,7 +44,8 @@ type R = NttRoute.AutomaticTransferReceipt; * @deprecated Use {@link nttExecutorRoute} instead. * When the source chain is EVM, this route relies on on-chain special/standard relayer pricing * which is no longer maintained. Older EVM transceiver deployments may return stale or inflated - * delivery quotes. + * delivery quotes. Messages sent via the Standard Relayer will not be automatically delivered + * to the destination chain past April 1st, 2026. */ export function nttAutomaticRoute(config: NttRoute.Config) { class NttRouteImpl extends NttAutomaticRoute { @@ -57,7 +58,8 @@ export function nttAutomaticRoute(config: NttRoute.Config) { * @deprecated Use {@link NttExecutorRoute} instead. * When the source chain is EVM, this route relies on on-chain special/standard relayer pricing * which is no longer maintained. Older EVM transceiver deployments may return stale or inflated - * delivery quotes. + * delivery quotes. Messages sent via the Standard Relayer will not be automatically delivered + * to the destination chain past April 1st, 2026. */ export class NttAutomaticRoute extends routes.AutomaticRoute