66 ContractFunctionExecutionError ,
77 encodeAbiParameters ,
88 encodePacked ,
9+ extractChain ,
910 Hex ,
1011 InsufficientFundsError ,
1112 isAddress ,
@@ -57,6 +58,7 @@ import {
5758 toHexScriptPubKey ,
5859 viemClient ,
5960} from './utils' ;
61+ import { supportedChainsMapping } from './utils/common' ;
6062
6163bitcoin . initEccLib ( ecc ) ;
6264
@@ -84,13 +86,19 @@ export class LayerZeroClient {
8486 return this . getChainDeploymentsPromiseCache ;
8587 }
8688
87- // Resolve viem chain name to layerzero chain name
88- private resolveViemChainName ( chainKey : string ) : string {
89- switch ( chainKey ) {
89+ // Resolve viem and layerzero chain names
90+ resolveViemChainName ( chainKey : string ) : string {
91+ switch ( chainKey . toLowerCase ( ) ) {
9092 case bsc . name . toLowerCase ( ) :
9193 return 'bsc' ;
9294 case optimism . name . toLowerCase ( ) :
9395 return 'optimism' ;
96+ case sei . name . toLowerCase ( ) :
97+ return 'sei' ;
98+ case soneium . name . toLowerCase ( ) :
99+ return 'soneium' ;
100+ case berachain . name . toLowerCase ( ) :
101+ return 'bera' ;
94102 default :
95103 return chainKey ;
96104 }
@@ -99,7 +107,6 @@ export class LayerZeroClient {
99107 async getEidForChain ( chainKey : string ) {
100108 const data = await this . getChainDeployments ( ) ;
101109 const resolvedChainName = this . resolveViemChainName ( chainKey ) ;
102- console . log ( 'resolvedChainName' , resolvedChainName ) ;
103110 const eid = data [ resolvedChainName ] ?. deployments ?. find ( ( item ) => item . version === 2 ) ?. eid ;
104111 return eid !== undefined && eid !== null ? Number ( eid ) : null ;
105112 }
@@ -139,26 +146,32 @@ export class LayerZeroClient {
139146
140147 async getSupportedChainsInfo ( ) : Promise < Array < LayerZeroChainInfo > > {
141148 const chains = await this . getChainDeployments ( ) ;
142- const chainLookup = Object . fromEntries (
143- Object . entries ( chains ) . map ( ( [ , chainData ] ) => [
144- chainData . chainKey ,
145- {
146- eid : chainData . deployments ?. find ( ( item ) => item . version === 2 ) ?. eid ,
147- nativeChainId : chainData . chainDetails ?. nativeChainId ,
148- } ,
149- ] )
150- ) ;
151-
152149 const deployments = await this . getWbtcDeployments ( ) ;
153- return Object . entries ( deployments ) . map ( ( [ chainKey , deployment ] ) => {
154- const chainInfo = chainLookup [ chainKey ] ;
155- return {
156- name : chainKey ,
157- eid : chainInfo ?. eid ,
158- oftAddress : deployment . address ,
159- nativeChainId : chainInfo ?. nativeChainId ,
160- } ;
150+
151+ const supportedLayerZeroChainKeys = new Set < string > ( ) ;
152+ const layerZeroKeyToViemName : Record < string , string > = { } ;
153+
154+ Object . values ( supportedChainsMapping ) . forEach ( ( chainConfig ) => {
155+ const viemChainName = chainConfig . name . toLowerCase ( ) ;
156+ const layerZeroChainKey = this . resolveViemChainName ( viemChainName ) ;
157+ supportedLayerZeroChainKeys . add ( layerZeroChainKey ) ;
158+ layerZeroKeyToViemName [ layerZeroChainKey ] = viemChainName ;
161159 } ) ;
160+
161+ // Filter layerzero chains that are in supportedChainsMapping
162+ return Object . entries ( chains )
163+ . filter ( ( [ layerZeroChainKey ] ) => supportedLayerZeroChainKeys . has ( layerZeroChainKey ) )
164+ . map ( ( [ layerZeroChainKey , chainData ] ) => {
165+ const viemChainName = layerZeroKeyToViemName [ layerZeroChainKey ] ;
166+ const deployment = deployments [ layerZeroChainKey ] ;
167+
168+ return {
169+ name : viemChainName ,
170+ eid : chainData . deployments ?. find ( ( item ) => item . version === 2 ) ?. eid ,
171+ oftAddress : deployment . address ,
172+ nativeChainId : chainData . chainDetails ?. nativeChainId ,
173+ } ;
174+ } ) ;
162175 }
163176
164177 async getChainId ( eid : number ) : Promise < number | null > {
@@ -185,38 +198,13 @@ export class LayerZeroClient {
185198}
186199
187200// Viem chain names are used to identify chains
201+ function resolveChainId ( chain : number ) : string {
202+ return getChainConfig ( chain ) . name . toLowerCase ( ) ;
203+ }
204+
188205function resolveChainName ( chain : number | string ) : string {
189206 if ( typeof chain === 'number' ) {
190- switch ( chain ) {
191- case bob . id :
192- return bob . name . toLowerCase ( ) ;
193- case base . id :
194- return base . name . toLowerCase ( ) ;
195- case berachain . id :
196- return berachain . name . toLowerCase ( ) ;
197- case bsc . id :
198- return bsc . name . toLowerCase ( ) ;
199- case unichain . id :
200- return unichain . name . toLowerCase ( ) ;
201- case avalanche . id :
202- return avalanche . name . toLowerCase ( ) ;
203- case sonic . id :
204- return sonic . name . toLowerCase ( ) ;
205- case soneium . id :
206- return soneium . name . toLowerCase ( ) ;
207- case telos . id :
208- return telos . name . toLowerCase ( ) ;
209- case swellchain . id :
210- return swellchain . name . toLowerCase ( ) ;
211- case optimism . id :
212- return optimism . name . toLowerCase ( ) ;
213- case sei . id :
214- return sei . name . toLowerCase ( ) ;
215- case mainnet . id :
216- return mainnet . name . toLowerCase ( ) ;
217- default :
218- throw new Error ( `Unsupported chain ID: ${ chain } ` ) ;
219- }
207+ return resolveChainId ( chain ) ;
220208 }
221209 return chain . toLowerCase ( ) ;
222210}
@@ -266,8 +254,8 @@ export class LayerZeroGatewayClient extends GatewayApiClient {
266254 }
267255
268256 async getQuote ( params : GetQuoteParams < LayerZeroQuoteParamsExt > ) : Promise < ExecuteQuoteParams > {
269- const fromChain = resolveChainName ( params . fromChain ) ;
270- const toChain = resolveChainName ( params . toChain ) ;
257+ const fromChain = typeof params . fromChain === 'number' ? resolveChainId ( params . fromChain ) : params . fromChain ;
258+ const toChain = typeof params . toChain === 'number' ? resolveChainId ( params . toChain ) : params . toChain ;
271259
272260 if ( fromChain === 'bitcoin' && toChain === bob . name . toLowerCase ( ) ) {
273261 // Handle bitcoin -> bob: use normal flow
0 commit comments