@@ -165,6 +165,43 @@ export class MultiTokenNttExecutorRoute<N extends Network>
165165 } ;
166166 }
167167
168+ // TODO: these two methods are identical to the ManualRoute version
169+ async isWrappedToken ( token : TokenId ) : Promise < boolean > {
170+ const contracts = MultiTokenNttRoute . resolveContracts (
171+ this . staticConfig . contracts ,
172+ token . chain
173+ ) ;
174+
175+ const chain = this . wh . getChain ( token . chain ) ;
176+ const ntt = await chain . getProtocol ( "MultiTokenNtt" , {
177+ multiTokenNtt : contracts ,
178+ } ) ;
179+
180+ return await ntt . isWrappedToken ( token ) ;
181+ }
182+
183+ async getOriginalToken ( token : TokenId ) : Promise < TokenId > {
184+ const contracts = MultiTokenNttRoute . resolveContracts (
185+ this . staticConfig . contracts ,
186+ token . chain
187+ ) ;
188+
189+ const chain = this . wh . getChain ( token . chain ) ;
190+ const ntt = await chain . getProtocol ( "MultiTokenNtt" , {
191+ multiTokenNtt : contracts ,
192+ } ) ;
193+
194+ const originalToken = await ntt . getOriginalToken ( token ) ;
195+ if ( originalToken === null ) {
196+ throw new Error ( "Original token not found" ) ;
197+ }
198+
199+ return {
200+ chain : originalToken . chain ,
201+ address : originalToken . address . toNative ( originalToken . chain ) ,
202+ } ;
203+ }
204+
168205 async validate (
169206 request : routes . RouteTransferRequest < N > ,
170207 params : Tp
@@ -861,6 +898,9 @@ export class MultiTokenNttExecutorRoute<N extends Network>
861898 ) ;
862899 }
863900 yield receipt ;
901+ // We are breaking here so we only track one transceiver at a time
902+ // until all transceivers have attested. Otherwise the receipt state
903+ // may jump around too much resulting in a glitchy UI.
864904 break ;
865905 }
866906 }
0 commit comments