@@ -59,7 +59,7 @@ import { trackAxelar, trackExecutor } from "../tracking.js";
5959
6060export namespace MultiTokenNttExecutorRoute {
6161 export type Config = {
62- ntt : MultiTokenNttRoute . Config ;
62+ contracts : MultiTokenNtt . Contracts [ ] ;
6363 referrerFee ?: ReferrerFeeConfig ;
6464 } ;
6565
@@ -72,8 +72,6 @@ export namespace MultiTokenNttExecutorRoute {
7272
7373 export type NormalizedParams = MultiTokenNttRoute . NormalizedParams & {
7474 referrerFeeDbps : bigint ;
75- gasLimit : bigint ;
76- msgValue : bigint ;
7775 } ;
7876
7977 export interface ValidatedParams
@@ -122,16 +120,19 @@ export class MultiTokenNttExecutorRoute<N extends Network>
122120 readonly staticConfig : MultiTokenNttExecutorRoute . Config =
123121 // @ts -ignore
124122 this . constructor . config ;
125- static config : MultiTokenNttExecutorRoute . Config = { ntt : { contracts : [ ] } } ;
123+ static config : MultiTokenNttExecutorRoute . Config = { contracts : [ ] } ;
126124
127125 static meta = { name : "MultiTokenNttExecutorRoute" } ;
128126
129127 static supportedNetworks ( ) : Network [ ] {
130- return MultiTokenNttRoute . resolveSupportedNetworks ( this . config . ntt ) ;
128+ return MultiTokenNttRoute . resolveSupportedNetworks ( this . config . contracts ) ;
131129 }
132130
133131 static supportedChains ( network : Network ) : Chain [ ] {
134- return MultiTokenNttRoute . resolveSupportedChains ( this . config . ntt , network ) ;
132+ return MultiTokenNttRoute . resolveSupportedChains (
133+ this . config . contracts ,
134+ network
135+ ) ;
135136 }
136137
137138 static async supportedDestinationTokens < N extends Network > (
@@ -143,7 +144,7 @@ export class MultiTokenNttExecutorRoute<N extends Network>
143144 sourceToken ,
144145 fromChain ,
145146 toChain ,
146- this . config . ntt
147+ this . config . contracts
147148 ) ;
148149 return [ destinationTokenId ] ;
149150 }
@@ -164,6 +165,14 @@ export class MultiTokenNttExecutorRoute<N extends Network>
164165 request : routes . RouteTransferRequest < N > ,
165166 params : Tp
166167 ) : Promise < Vr > {
168+ if ( request . fromChain . chain === request . toChain . chain ) {
169+ return {
170+ valid : false ,
171+ error : new Error ( "Source and destination chains must differ" ) ,
172+ params,
173+ } ;
174+ }
175+
167176 const options = params . options ?? this . getDefaultOptions ( ) ;
168177
169178 if (
@@ -185,12 +194,12 @@ export class MultiTokenNttExecutorRoute<N extends Network>
185194 ) ;
186195
187196 const sourceContracts = MultiTokenNttRoute . resolveContracts (
188- this . staticConfig . ntt ,
197+ this . staticConfig . contracts ,
189198 request . fromChain . chain
190199 ) ;
191200
192201 const destinationContracts = MultiTokenNttRoute . resolveContracts (
193- this . staticConfig . ntt ,
202+ this . staticConfig . contracts ,
194203 request . toChain . chain
195204 ) ;
196205
@@ -208,30 +217,9 @@ export class MultiTokenNttExecutorRoute<N extends Network>
208217 request . toChain . chain
209218 ) ;
210219
211- const destinationNttWithExecutor = await request . toChain . getProtocol (
212- "MultiTokenNttWithExecutor" ,
213- {
214- multiTokenNtt : destinationContracts ,
215- }
216- ) ;
217-
218- const destinationNtt = await request . toChain . getProtocol ( "MultiTokenNtt" , {
219- multiTokenNtt : destinationContracts ,
220- } ) ;
221-
222220 const referrerFeeDbps = this . getReferrerFeeDbps ( request ) ;
223221
224- let { msgValue, gasLimit } =
225- await destinationNttWithExecutor . estimateMsgValueAndGasLimit (
226- originalTokenId ,
227- destinationNtt
228- ) ;
229-
230- ( { msgValue, gasLimit } = this . getGasOverrides (
231- request ,
232- msgValue ,
233- gasLimit
234- ) ) ;
222+ const gasLimit = await this . estimateGasLimit ( request , originalTokenId ) ;
235223
236224 const validatedParams : Vp = {
237225 amount : params . amount ,
@@ -244,7 +232,6 @@ export class MultiTokenNttExecutorRoute<N extends Network>
244232 destinationTokenId : request . destination . id ,
245233 originalTokenId,
246234 gasLimit,
247- msgValue,
248235 sendTransceivers,
249236 } ,
250237 options,
@@ -418,25 +405,33 @@ export class MultiTokenNttExecutorRoute<N extends Network>
418405 : 0n ;
419406 }
420407
421- getGasOverrides (
408+ async estimateGasLimit (
422409 request : routes . RouteTransferRequest < N > ,
423- msgValue : bigint ,
424- gasLimit : bigint
425- ) : { msgValue : bigint ; gasLimit : bigint } {
410+ originalTokenId : MultiTokenNtt . OriginalTokenId
411+ ) : Promise < bigint > {
426412 if ( this . staticConfig . referrerFee ?. perTokenOverrides ) {
427413 const destinationTokenAddress = canonicalAddress ( request . destination . id ) ;
428414 const override =
429415 this . staticConfig . referrerFee . perTokenOverrides [
430416 request . destination . id . chain
431417 ] ?. [ destinationTokenAddress ] ;
432418 if ( override ?. gasLimit !== undefined ) {
433- gasLimit = override . gasLimit ;
434- }
435- if ( override ?. msgValue !== undefined ) {
436- msgValue = override . msgValue ;
419+ return override . gasLimit ;
437420 }
438421 }
439- return { msgValue, gasLimit } ;
422+
423+ const destinationContracts = MultiTokenNttRoute . resolveContracts (
424+ this . staticConfig . contracts ,
425+ request . toChain . chain
426+ ) ;
427+
428+ const destinationNtt = await request . toChain . getProtocol ( "MultiTokenNtt" , {
429+ multiTokenNtt : destinationContracts ,
430+ } ) ;
431+
432+ const gasLimit = await destinationNtt . estimateGasLimit ( originalTokenId ) ;
433+
434+ return gasLimit ;
440435 }
441436
442437 async fetchExecutorQuote (
@@ -474,7 +469,7 @@ export class MultiTokenNttExecutorRoute<N extends Network>
474469 request : {
475470 type : "GasInstruction" as const ,
476471 gasLimit : params . normalizedParams . gasLimit ,
477- msgValue : params . normalizedParams . msgValue ,
472+ msgValue : 0n ,
478473 } ,
479474 } ) ;
480475
@@ -647,7 +642,7 @@ export class MultiTokenNttExecutorRoute<N extends Network>
647642 }
648643
649644 if ( ! receipt . attestation ) {
650- throw new Error ( "No attestation found for the transfer" ) ;
645+ throw new Error ( "No attestation found on the transfer receipt " ) ;
651646 }
652647
653648 const toChain = this . wh . getChain ( receipt . to ) ;
@@ -674,15 +669,12 @@ export class MultiTokenNttExecutorRoute<N extends Network>
674669 // already attested by the wormhole transceiver
675670 return receipt ;
676671 }
677- const completeTransfer = ntt . redeem ( receipt . attestation . attestation ) ;
678672
679- const txids = await signSendWait ( toChain , completeTransfer , signer ) ;
680- return {
681- ...receipt ,
682- state : TransferState . DestinationInitiated ,
683- attestation : receipt . attestation ,
684- destinationTxs : txids ,
685- } ;
673+ const completeXfer = ntt . redeem ( receipt . attestation . attestation ) ;
674+
675+ await signSendWait ( toChain , completeXfer , signer ) ;
676+
677+ return receipt ;
686678 }
687679
688680 async resume ( tx : TransactionId ) : Promise < R > {
@@ -696,7 +688,7 @@ export class MultiTokenNttExecutorRoute<N extends Network>
696688 const { payload } = vaa . payload . nttManagerPayload ;
697689
698690 const sourceContracts = MultiTokenNttRoute . resolveContracts (
699- this . staticConfig . ntt ,
691+ this . staticConfig . contracts ,
700692 fromChain . chain
701693 ) ;
702694 if (
@@ -708,7 +700,7 @@ export class MultiTokenNttExecutorRoute<N extends Network>
708700 }
709701
710702 const destinationContracts = MultiTokenNttRoute . resolveContracts (
711- this . staticConfig . ntt ,
703+ this . staticConfig . contracts ,
712704 payload . toChain
713705 ) ;
714706
@@ -738,7 +730,7 @@ export class MultiTokenNttExecutorRoute<N extends Network>
738730 sourceTokenId ,
739731 fromChain ,
740732 this . wh . getChain ( payload . toChain ) ,
741- this . staticConfig . ntt ,
733+ this . staticConfig . contracts ,
742734 originalTokenId
743735 ) ;
744736
@@ -773,7 +765,6 @@ export class MultiTokenNttExecutorRoute<N extends Network>
773765 sendTransceivers,
774766 referrerFeeDbps : 0n ,
775767 gasLimit : 0n ,
776- msgValue : 0n ,
777768 } ,
778769 options : {
779770 nativeGas : undefined ,
0 commit comments