11import { BaseCoin } from './base' ;
22import { DuplicateCoinDefinitionError , CoinNotDefinedError , DuplicateCoinIdDefinitionError } from './errors' ;
3- import { ContractAddressDefinedToken } from './account' ;
3+ import { ContractAddressDefinedToken , NFTCollectionIdDefinedToken } from './account' ;
44
55export class CoinMap {
66 private readonly _map = new Map < string , Readonly < BaseCoin > > ( ) ;
@@ -10,6 +10,8 @@ export class CoinMap {
1010 // map of coin by address -> the key is the family:contractAddress
1111 // the family is the where the coin is e.g l1 chains like eth, bsc etc. or l2 like arbeth, celo etc.
1212 private readonly _coinByContractAddress = new Map < string , Readonly < BaseCoin > > ( ) ;
13+ // map of coin by NFT collection ID -> the key is the (t)family:nftCollectionID
14+ private readonly _coinByNftCollectionID = new Map < string , Readonly < BaseCoin > > ( ) ;
1315
1416 private constructor ( ) {
1517 // Do not instantiate
@@ -34,8 +36,12 @@ export class CoinMap {
3436 }
3537 coinMap . _coinByAliases . set ( alias , coin ) ;
3638 }
37- if ( coin . isToken && coin instanceof ContractAddressDefinedToken ) {
38- coinMap . _coinByContractAddress . set ( `${ coin . family } :${ coin . contractAddress } ` , coin ) ;
39+ if ( coin . isToken ) {
40+ if ( coin instanceof ContractAddressDefinedToken ) {
41+ coinMap . _coinByContractAddress . set ( `${ coin . family } :${ coin . contractAddress } ` , coin ) ;
42+ } else if ( coin instanceof NFTCollectionIdDefinedToken ) {
43+ coinMap . _coinByNftCollectionID . set ( `${ coin . prefix } ${ coin . family } :${ coin . nftCollectionId } ` , coin ) ;
44+ }
3945 }
4046 return coinMap ;
4147 } , new CoinMap ( ) ) ;
@@ -96,7 +102,8 @@ export class CoinMap {
96102 this . _map . get ( key ) ||
97103 this . _coinByIds . get ( key ) ||
98104 this . _coinByAliases . get ( key ) ||
99- this . _coinByContractAddress . get ( key ) ;
105+ this . _coinByContractAddress . get ( key ) ||
106+ this . _coinByNftCollectionID . get ( key ) ;
100107
101108 if ( coin ) {
102109 return coin ;
@@ -110,7 +117,8 @@ export class CoinMap {
110117 this . _map . has ( key ) ||
111118 this . _coinByIds . has ( key ) ||
112119 this . _coinByAliases . has ( key ) ||
113- this . _coinByContractAddress . has ( key )
120+ this . _coinByContractAddress . has ( key ) ||
121+ this . _coinByNftCollectionID . has ( key )
114122 ) ;
115123 }
116124
0 commit comments