1- import type { Subtract } from "ts-arithmetic" ;
1+ import type { GtOrEq , Subtract } from "ts-arithmetic" ;
22import type * as formats from "./coins.js" ;
33import type {
44 coinNameToTypeMap ,
@@ -20,13 +20,15 @@ type NonEvmCoinTypeToFormat = {
2020} ;
2121export type CoinTypeToFormatMap = {
2222 [ key in CoinType ] : key extends EvmCoinType
23- ? Prettify < GetEvmCoin < CoinTypeToNameMap [ `${ key } ` ] [ 0 ] > >
23+ ? Prettify < GetEvmCoin < key > >
2424 : key extends keyof NonEvmCoinTypeToFormat
2525 ? NonEvmCoinTypeToFormat [ key ]
2626 : never ;
2727} ;
2828export type CoinNameToFormatMap = {
29- [ key in CoinName ] : CoinTypeToFormatMap [ CoinNameToTypeMap [ key ] ] ;
29+ [ key in CoinName ] : Prettify <
30+ Omit < CoinTypeToFormatMap [ CoinNameToTypeMap [ key ] ] , "isUnknownChain" >
31+ > ;
3032} ;
3133
3234export type EvmCoinMap = typeof evmCoinNameToTypeMap ;
@@ -35,12 +37,16 @@ export type EvmCoinType = EvmCoinMap[EvmCoinName];
3537export type EvmChainId = Subtract < EvmCoinType , typeof SLIP44_MSB > ;
3638
3739export type GetEvmCoin <
38- TEvmName extends EvmCoinName ,
39- TCoinType extends CoinNameToTypeMap [ TEvmName ] = CoinNameToTypeMap [ TEvmName ]
40+ TCoinType extends number ,
41+ TChainId extends number = Subtract < TCoinType , typeof SLIP44_MSB > ,
42+ TCoinName extends string = TCoinType extends EvmCoinType
43+ ? CoinTypeToNameMap [ `${TCoinType } `] [ 0 ]
44+ : `Unknown Chain (${TChainId } )`
4045> = {
41- name : TEvmName ;
46+ name : TCoinName ;
4247 coinType : TCoinType ;
43- evmChainId : Subtract < TCoinType , typeof SLIP44_MSB > ;
48+ evmChainId : TChainId ;
49+ isUnknownChain : TCoinType extends EvmCoinType ? false : true ;
4450 encode : EncoderFunction ;
4551 decode : DecoderFunction ;
4652} ;
@@ -52,6 +58,7 @@ export type CoinParameters = {
5258 name : string ;
5359 coinType : number ;
5460 evmChainId ?: number ;
61+ isUnknownChain ?: boolean ;
5562} ;
5663
5764export type CoinCoder = {
@@ -72,7 +79,11 @@ export type GetCoderByCoinName<TCoinName extends CoinName | string> =
7279 TCoinName extends CoinName ? CoinNameToFormatMap [ TCoinName ] : Coin ;
7380
7481export type GetCoderByCoinType < TCoinType extends CoinType | number > =
75- TCoinType extends CoinType ? CoinTypeToFormatMap [ TCoinType ] : Coin ;
82+ TCoinType extends CoinType
83+ ? CoinTypeToFormatMap [ TCoinType ]
84+ : GtOrEq < TCoinType , typeof SLIP44_MSB > extends 1
85+ ? Prettify < GetEvmCoin < TCoinType > >
86+ : Coin ;
7687
7788export type ParseInt < T > = T extends `${infer N extends number } ` ? N : never ;
7889
0 commit comments