@@ -47,14 +47,15 @@ import {
4747import { ada } from './ada' ;
4848import { avaxp } from './avaxp' ;
4949import { BaseCoin , BaseUnit , CoinFeature , KeyCurve , UnderlyingAsset } from './base' ;
50- import { AmsTokenConfig } from './tokenConfig' ;
50+ import { AmsTokenConfig , TrimmedAmsTokenConfig } from './tokenConfig' ;
5151import { erc20Coins } from './coins/erc20Coins' ;
5252import { avaxTokens } from './coins/avaxTokens' ;
5353import { bscTokens } from './coins/bscTokens' ;
5454import { polygonTokens } from './coins/polygonTokens' ;
5555import { solTokens } from './coins/solTokens' ;
5656import { CoinMap } from './map' ;
5757import { Networks } from './networks' ;
58+ import { networkFeatureMapForTokens } from './networkFeatureMapForTokens' ;
5859import { utxoCoins } from './utxo' ;
5960import { lightningCoins } from './lightning' ;
6061import { ofcErc20Coins , tOfcErc20Coins } from './coins/ofcErc20Coins' ;
@@ -3266,6 +3267,25 @@ function getAptTokenInitializer(token: AmsTokenConfig) {
32663267 } ;
32673268}
32683269
3270+ export function isCoinPresentInCoinMap ( {
3271+ name,
3272+ id,
3273+ contractAddress,
3274+ alias,
3275+ } : {
3276+ name : string ;
3277+ id ?: string ;
3278+ contractAddress ?: string ;
3279+ alias ?: string ;
3280+ } ) : boolean {
3281+ return Boolean (
3282+ coins . has ( name ) ||
3283+ ( id && coins . has ( id ) ) ||
3284+ ( contractAddress && coins . has ( contractAddress ) ) ||
3285+ ( alias && coins . has ( alias ) )
3286+ ) ;
3287+ }
3288+
32693289export function createTokenMapUsingConfigDetails ( tokenConfigMap : Record < string , AmsTokenConfig [ ] > ) : CoinMap {
32703290 const BaseCoins : Map < string , Readonly < BaseCoin > > = new Map ( ) ;
32713291 const initializerMap : Record < string , unknown > = {
@@ -3318,9 +3338,12 @@ export function createTokenMapUsingConfigDetails(tokenConfigMap: Record<string,
33183338 for ( const tokenConfigs of Object . values ( tokenConfigMap ) ) {
33193339 const tokenConfig = tokenConfigs [ 0 ] ;
33203340 const family = tokenConfig . family ;
3321- const name = tokenConfig . name ;
33223341
3323- if ( ! coins . has ( name ) && tokenConfig . isToken && ! nftAndOtherTokens . has ( tokenConfig . name ) ) {
3342+ if (
3343+ ! isCoinPresentInCoinMap ( { ...tokenConfig } ) &&
3344+ tokenConfig . isToken &&
3345+ ! nftAndOtherTokens . has ( tokenConfig . name )
3346+ ) {
33243347 const token = createToken ( family , tokenConfig , initializerMap ) ;
33253348 if ( token ) {
33263349 BaseCoins . set ( token . name , token ) ;
@@ -3330,3 +3353,34 @@ export function createTokenMapUsingConfigDetails(tokenConfigMap: Record<string,
33303353
33313354 return CoinMap . fromCoins ( Array . from ( BaseCoins . values ( ) ) ) ;
33323355}
3356+
3357+ export function createTokenMapUsingTrimmedConfigDetails (
3358+ reducedTokenConfigMap : Record < string , TrimmedAmsTokenConfig [ ] >
3359+ ) : CoinMap {
3360+ const amsTokenConfigMap : Record < string , AmsTokenConfig [ ] > = { } ;
3361+ const networkNameMap = new Map (
3362+ Object . values ( Networks ) . flatMap ( ( networkType ) =>
3363+ Object . values ( networkType ) . map ( ( network ) => [ network . name , network ] )
3364+ )
3365+ ) ;
3366+
3367+ for ( const tokenConfigs of Object . values ( reducedTokenConfigMap ) ) {
3368+ const tokenConfig = tokenConfigs [ 0 ] ;
3369+ const network = networkNameMap . get ( tokenConfig . network . name ) ;
3370+ if (
3371+ ! isCoinPresentInCoinMap ( { ...tokenConfig } ) &&
3372+ network &&
3373+ tokenConfig . isToken &&
3374+ networkFeatureMapForTokens [ network . family ]
3375+ ) {
3376+ const features = new Set ( [
3377+ ...( networkFeatureMapForTokens [ network . family ] || [ ] ) ,
3378+ ...( tokenConfig . additionalFeatures || [ ] ) ,
3379+ ] ) ;
3380+ tokenConfig . excludedFeatures ?. forEach ( ( feature ) => features . delete ( feature ) ) ;
3381+ amsTokenConfigMap [ tokenConfig . name ] = [ { ...tokenConfig , features : Array . from ( features ) , network } ] ;
3382+ }
3383+ }
3384+
3385+ return createTokenMapUsingConfigDetails ( amsTokenConfigMap ) ;
3386+ }
0 commit comments