@@ -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