decred.org/dcrdex@v1.0.5/dex/bip-id.go (about)

     1  // This code is available on the terms of the project LICENSE.md file,
     2  // also available online at https://blueoakcouncil.org/license/1.0.0.
     3  
     4  package dex
     5  
     6  import (
     7  	"strings"
     8  )
     9  
    10  var symbolBipIDs map[string]uint32
    11  
    12  // BipSymbolID returns the asset ID associated with a given ticker symbol.
    13  // While there are a number of duplicate ticker symbols in the BIP ID list
    14  // (cpc, cmt, xrd, dst, one, ask, ...), those are disambiguated in the bipIDs
    15  // map here, so must be referenced with their bracketed suffix.
    16  func BipSymbolID(symbol string) (uint32, bool) {
    17  	if symbolBipIDs == nil {
    18  		symbolBipIDs = make(map[string]uint32)
    19  		for idx, sym := range bipIDs {
    20  			symbolBipIDs[sym] = idx
    21  		}
    22  	}
    23  
    24  	idx, found := symbolBipIDs[symbol]
    25  	return idx, found
    26  }
    27  
    28  // BipIDSymbol returns the BIP ID for a given symbol.
    29  func BipIDSymbol(id uint32) string {
    30  	return bipIDs[id]
    31  }
    32  
    33  // TokenSymbol returns the tokens raw symbol if this is compound symbol that
    34  // encodes the blockchain, or else the input is returned unaltered.
    35  // e.g. usdc.eth => usdc
    36  func TokenSymbol(symbol string) string {
    37  	parts := strings.Split(symbol, ".")
    38  	if len(parts) > 1 {
    39  		return parts[0]
    40  	}
    41  	return symbol
    42  }
    43  
    44  var bipIDs = map[uint32]string{
    45  	0:     "btc",
    46  	1:     "testnet",
    47  	2:     "ltc",
    48  	3:     "doge",
    49  	4:     "rdd",
    50  	5:     "dash",
    51  	6:     "ppc",
    52  	7:     "nmc",
    53  	8:     "ftc",
    54  	9:     "xcp",
    55  	10:    "blk",
    56  	11:    "nsr",
    57  	12:    "nbt",
    58  	13:    "mzc",
    59  	14:    "via",
    60  	15:    "xch",
    61  	16:    "rby",
    62  	17:    "grs",
    63  	18:    "dgc",
    64  	19:    "ccn",
    65  	20:    "dgb",
    66  	21:    "openassets",
    67  	22:    "mona",
    68  	23:    "clam",
    69  	24:    "xpm",
    70  	25:    "neos",
    71  	26:    "jbs",
    72  	27:    "zrc",
    73  	28:    "vtc",
    74  	29:    "nxt",
    75  	30:    "burst",
    76  	31:    "mue",
    77  	32:    "zoom",
    78  	33:    "vash",
    79  	34:    "cdn",
    80  	35:    "sdc",
    81  	36:    "pkb",
    82  	37:    "pnd",
    83  	38:    "start",
    84  	39:    "moin",
    85  	40:    "exp",
    86  	41:    "emc2",
    87  	42:    "dcr",
    88  	43:    "xem",
    89  	44:    "part",
    90  	45:    "arg",
    91  	46:    "libertas",
    92  	47:    "posw",
    93  	48:    "shr",
    94  	49:    "gcr",
    95  	50:    "nvc",
    96  	51:    "ac",
    97  	52:    "btcd",
    98  	53:    "dope",
    99  	54:    "tpc",
   100  	55:    "aib",
   101  	56:    "edrc",
   102  	57:    "sys",
   103  	58:    "slr",
   104  	59:    "smly",
   105  	60:    "eth",
   106  	61:    "etc",
   107  	62:    "psb",
   108  	63:    "ldcn",
   109  	64:    "openchain",
   110  	65:    "xbc",
   111  	66:    "iop",
   112  	67:    "nxs",
   113  	68:    "insn",
   114  	69:    "ok",
   115  	70:    "brit",
   116  	71:    "cmp",
   117  	72:    "crw",
   118  	73:    "bela",
   119  	74:    "icx",
   120  	75:    "fjc",
   121  	76:    "mix",
   122  	77:    "xvg",
   123  	78:    "efl",
   124  	79:    "club",
   125  	80:    "richx",
   126  	81:    "pot",
   127  	82:    "qrk",
   128  	83:    "trc",
   129  	84:    "grc",
   130  	85:    "aur",
   131  	86:    "ixc",
   132  	87:    "nlg",
   133  	88:    "bitb",
   134  	89:    "bta",
   135  	90:    "xmy",
   136  	91:    "bsd",
   137  	92:    "uno",
   138  	93:    "mtr",
   139  	94:    "gb",
   140  	95:    "shm",
   141  	96:    "crx",
   142  	97:    "biq",
   143  	98:    "evo",
   144  	99:    "sto",
   145  	100:   "bigup",
   146  	101:   "game",
   147  	102:   "dlc",
   148  	103:   "zyd",
   149  	104:   "dbic",
   150  	105:   "strat",
   151  	106:   "sh",
   152  	107:   "mars",
   153  	108:   "ubq",
   154  	109:   "ptc",
   155  	110:   "nro",
   156  	111:   "ark",
   157  	112:   "usc",
   158  	113:   "thc",
   159  	114:   "linx",
   160  	115:   "ecn",
   161  	116:   "dnr",
   162  	117:   "pink",
   163  	118:   "atom",
   164  	119:   "pivx",
   165  	120:   "flash",
   166  	121:   "zen",
   167  	122:   "put",
   168  	123:   "zny",
   169  	124:   "unify",
   170  	125:   "xst",
   171  	126:   "brk",
   172  	127:   "vc",
   173  	128:   "xmr",
   174  	129:   "vox",
   175  	130:   "nav",
   176  	131:   "fct",
   177  	132:   "ec",
   178  	133:   "zec",
   179  	134:   "lsk",
   180  	135:   "steem",
   181  	136:   "firo", // modified from xzc
   182  	137:   "rbtc",
   183  	138:   "giftblock",
   184  	139:   "rpt",
   185  	140:   "lbc",
   186  	141:   "kmd",
   187  	142:   "bsq",
   188  	143:   "ric",
   189  	144:   "xrp",
   190  	145:   "bch",
   191  	146:   "nebl",
   192  	147:   "zcl",
   193  	148:   "xlm",
   194  	149:   "nlc2",
   195  	150:   "whl",
   196  	151:   "erc",
   197  	152:   "dmd",
   198  	153:   "btm",
   199  	154:   "bio",
   200  	155:   "xwc",
   201  	156:   "btg",
   202  	157:   "btc2x",
   203  	158:   "ssn",
   204  	159:   "toa",
   205  	160:   "btx",
   206  	161:   "acc",
   207  	162:   "bco",
   208  	163:   "ella",
   209  	164:   "pirl",
   210  	165:   "xrb",
   211  	166:   "vivo",
   212  	167:   "frst",
   213  	168:   "hnc",
   214  	169:   "buzz",
   215  	170:   "mbrs",
   216  	171:   "hsr",
   217  	172:   "html",
   218  	173:   "odn",
   219  	174:   "onx",
   220  	175:   "rvn",
   221  	176:   "gbx",
   222  	177:   "btcz",
   223  	178:   "poa",
   224  	179:   "nyc",
   225  	180:   "mxt",
   226  	181:   "wc",
   227  	182:   "mnx",
   228  	183:   "btcp",
   229  	184:   "music",
   230  	185:   "bca",
   231  	186:   "crave",
   232  	187:   "stak",
   233  	188:   "wbtc",
   234  	189:   "lch",
   235  	190:   "excl",
   236  	191:   "lynx",
   237  	192:   "lcc",
   238  	193:   "xfe",
   239  	194:   "eos",
   240  	195:   "trx",
   241  	196:   "kobo",
   242  	197:   "hush",
   243  	198:   "banano",
   244  	199:   "etf",
   245  	200:   "omni",
   246  	201:   "bifi",
   247  	202:   "ufo",
   248  	203:   "cnmc",
   249  	204:   "bcn",
   250  	205:   "rin",
   251  	206:   "atp",
   252  	207:   "evt",
   253  	208:   "atn",
   254  	209:   "bis",
   255  	210:   "neet",
   256  	211:   "bopo",
   257  	212:   "oot",
   258  	213:   "xspec",
   259  	214:   "monk",
   260  	215:   "boxy",
   261  	216:   "flo",
   262  	217:   "mec",
   263  	218:   "btdx",
   264  	219:   "xax",
   265  	220:   "anon",
   266  	221:   "ltz",
   267  	222:   "bitg",
   268  	223:   "ask",
   269  	224:   "smart",
   270  	225:   "xuez",
   271  	226:   "hlm",
   272  	227:   "web",
   273  	228:   "acm",
   274  	229:   "nos",
   275  	230:   "bitc",
   276  	231:   "hth",
   277  	232:   "tzc",
   278  	233:   "var",
   279  	234:   "iov",
   280  	235:   "fio",
   281  	236:   "bsv",
   282  	237:   "dxn",
   283  	238:   "qrl",
   284  	239:   "pcx",
   285  	240:   "loki",
   286  	241:   "imagewallet",
   287  	242:   "nim",
   288  	243:   "sov",
   289  	244:   "jct",
   290  	245:   "slp",
   291  	246:   "ewt",
   292  	247:   "uc",
   293  	248:   "exos",
   294  	249:   "eca",
   295  	250:   "soom",
   296  	251:   "xrd",
   297  	252:   "free",
   298  	253:   "npw",
   299  	254:   "bst",
   300  	255:   "smartholdem",
   301  	256:   "nano",
   302  	257:   "btcc",
   303  	258:   "zenprotocol",
   304  	259:   "zest",
   305  	260:   "abt",
   306  	261:   "pion",
   307  	262:   "dt3",
   308  	263:   "zbux",
   309  	264:   "kpl",
   310  	265:   "tpay",
   311  	266:   "zilla",
   312  	267:   "ank",
   313  	268:   "bcc",
   314  	269:   "hpb",
   315  	270:   "one",
   316  	271:   "sbc",
   317  	272:   "ipc",
   318  	273:   "dmtc",
   319  	274:   "ogc",
   320  	275:   "shit",
   321  	276:   "andes",
   322  	277:   "arepa",
   323  	278:   "boli",
   324  	279:   "ril",
   325  	280:   "htr",
   326  	281:   "fctid",
   327  	282:   "bravo",
   328  	283:   "algo",
   329  	284:   "bzx",
   330  	285:   "gxx",
   331  	286:   "heat",
   332  	287:   "xdn",
   333  	288:   "fsn",
   334  	289:   "cpc[capricoin]",
   335  	290:   "bold",
   336  	291:   "iost",
   337  	292:   "tkey",
   338  	293:   "use",
   339  	294:   "bcz",
   340  	295:   "ioc",
   341  	296:   "asf",
   342  	297:   "mass",
   343  	298:   "fair",
   344  	299:   "nuko",
   345  	300:   "gnx",
   346  	301:   "divi",
   347  	302:   "cmt[community]",
   348  	303:   "euno",
   349  	304:   "iotx",
   350  	305:   "onion",
   351  	306:   "8bit",
   352  	307:   "atc",
   353  	308:   "bts",
   354  	309:   "ckb",
   355  	310:   "ugas",
   356  	311:   "ads",
   357  	312:   "ara",
   358  	313:   "zil",
   359  	314:   "moac",
   360  	315:   "swtc",
   361  	316:   "vnsc",
   362  	317:   "plug",
   363  	318:   "man",
   364  	319:   "ecc",
   365  	320:   "rpd",
   366  	321:   "rap",
   367  	322:   "gard",
   368  	323:   "zer",
   369  	324:   "ebst",
   370  	325:   "shard",
   371  	326:   "linda",
   372  	327:   "cmm",
   373  	328:   "block",
   374  	329:   "audax",
   375  	330:   "luna",
   376  	331:   "zpm",
   377  	332:   "kuva",
   378  	333:   "mem",
   379  	334:   "cs",
   380  	335:   "swift",
   381  	336:   "fix",
   382  	337:   "cpc[cpcchain]",
   383  	338:   "vgo",
   384  	339:   "dvt",
   385  	340:   "n8v",
   386  	341:   "mtns",
   387  	342:   "blast",
   388  	343:   "dct",
   389  	344:   "aux",
   390  	345:   "usdp",
   391  	346:   "htdf",
   392  	347:   "yec",
   393  	348:   "qlc",
   394  	349:   "tea",
   395  	350:   "arw",
   396  	351:   "mdm",
   397  	352:   "cyb",
   398  	353:   "lto",
   399  	354:   "dot",
   400  	355:   "aeon",
   401  	356:   "res",
   402  	357:   "aya",
   403  	358:   "daps",
   404  	359:   "csc",
   405  	360:   "vsys",
   406  	361:   "nollar",
   407  	362:   "xnos",
   408  	363:   "cpu",
   409  	364:   "lamb",
   410  	365:   "vct",
   411  	366:   "czr",
   412  	367:   "abbc",
   413  	368:   "het",
   414  	369:   "xas",
   415  	370:   "vdl",
   416  	371:   "med",
   417  	372:   "zvc",
   418  	373:   "vestx",
   419  	374:   "dbt",
   420  	375:   "seos",
   421  	376:   "mxw",
   422  	377:   "znz",
   423  	378:   "xcx",
   424  	379:   "sox",
   425  	380:   "nyzo",
   426  	381:   "ulc",
   427  	382:   "ryo",
   428  	383:   "kal",
   429  	384:   "xsn",
   430  	385:   "dogec",
   431  	386:   "bmv",
   432  	387:   "qbc",
   433  	388:   "img",
   434  	389:   "qos",
   435  	390:   "pkt",
   436  	391:   "lhd",
   437  	392:   "cennz",
   438  	393:   "hsn",
   439  	394:   "cro",
   440  	395:   "umbru",
   441  	396:   "ton",
   442  	397:   "near",
   443  	398:   "xpc",
   444  	399:   "zoc",
   445  	400:   "nix",
   446  	404:   "xbi",
   447  	412:   "ain",
   448  	416:   "slx",
   449  	420:   "node",
   450  	425:   "aion",
   451  	426:   "bc",
   452  	444:   "phr",
   453  	447:   "din",
   454  	457:   "ae",
   455  	464:   "eti",
   456  	488:   "veo",
   457  	500:   "theta",
   458  	501:   "sol",
   459  	510:   "koto",
   460  	512:   "xrd[radiant]",
   461  	516:   "vee",
   462  	518:   "let",
   463  	520:   "btcv",
   464  	526:   "bu",
   465  	528:   "yap",
   466  	533:   "prj",
   467  	555:   "bcs",
   468  	557:   "lkr",
   469  	561:   "nty",
   470  	600:   "ute",
   471  	618:   "ssp",
   472  	625:   "east",
   473  	663:   "sfrx",
   474  	666:   "act",
   475  	667:   "prkl",
   476  	668:   "ssc",
   477  	698:   "veil",
   478  	700:   "xdai",
   479  	713:   "xtl",
   480  	714:   "bnb",
   481  	715:   "sin",
   482  	768:   "ballz",
   483  	777:   "btw",
   484  	800:   "beet",
   485  	801:   "dst[dstra]",
   486  	808:   "qvt",
   487  	818:   "vet",
   488  	820:   "clo",
   489  	831:   "cruz",
   490  	852:   "desm",
   491  	886:   "adf",
   492  	888:   "neo",
   493  	889:   "tomo",
   494  	890:   "xsel",
   495  	900:   "lmo",
   496  	916:   "meta",
   497  	966:   "polygon", // changed from "matic"
   498  	970:   "twins",
   499  	996:   "okp",
   500  	997:   "sum",
   501  	998:   "lbtc",
   502  	999:   "bcd",
   503  	1000:  "btn",
   504  	1001:  "tt",
   505  	1002:  "bkt",
   506  	1023:  "one[harmony]",
   507  	1024:  "ont",
   508  	1026:  "kex",
   509  	1027:  "mcm",
   510  	1111:  "bbc",
   511  	1120:  "rise",
   512  	1122:  "cmt[cybermiles]",
   513  	1128:  "etsc",
   514  	1145:  "cdy",
   515  	1337:  "dfc",
   516  	1397:  "hyc",
   517  	1524:  "taler",
   518  	1533:  "beam",
   519  	1616:  "elf",
   520  	1620:  "ath",
   521  	1688:  "bcx",
   522  	1729:  "xtz",
   523  	1776:  "l-btc",
   524  	1815:  "ada",
   525  	1856:  "tes",
   526  	1901:  "clc",
   527  	1919:  "vips",
   528  	1926:  "city",
   529  	1977:  "xmx",
   530  	1984:  "trtl",
   531  	1987:  "egem",
   532  	1989:  "hodl",
   533  	1990:  "phl",
   534  	1997:  "polis",
   535  	1998:  "xmcc",
   536  	1999:  "colx",
   537  	2000:  "gin",
   538  	2001:  "mnp",
   539  	2017:  "kin",
   540  	2018:  "eosc",
   541  	2019:  "gbt",
   542  	2020:  "pkc",
   543  	2048:  "mcash",
   544  	2049:  "true",
   545  	2112:  "iote",
   546  	2221:  "ask[permission]",
   547  	2301:  "qtum",
   548  	2302:  "etp",
   549  	2303:  "gxc",
   550  	2304:  "crp",
   551  	2305:  "ela",
   552  	2338:  "snow",
   553  	2570:  "aoa",
   554  	2718:  "nas",
   555  	2894:  "reosc",
   556  	2941:  "bnd",
   557  	3003:  "lux",
   558  	3030:  "xhb",
   559  	3077:  "cos",
   560  	3276:  "ccc",
   561  	3377:  "roi",
   562  	3381:  "dyn",
   563  	3383:  "seq",
   564  	3552:  "deo",
   565  	3564:  "dst[destream]",
   566  	4218:  "iota",
   567  	4242:  "axe",
   568  	5248:  "fic",
   569  	5353:  "hns",
   570  	5757:  "stacks",
   571  	5920:  "slu",
   572  	6060:  "go",
   573  	6666:  "bpa",
   574  	6688:  "safe",
   575  	6969:  "roger",
   576  	7777:  "btv",
   577  	8339:  "btq",
   578  	8888:  "sbtc",
   579  	8964:  "nuls",
   580  	8999:  "btp",
   581  	9797:  "nrg",
   582  	9888:  "btf",
   583  	9999:  "god",
   584  	10000: "fo",
   585  	10291: "btr",
   586  	11111: "ess",
   587  	12345: "ipos",
   588  	13107: "bty",
   589  	13108: "ycc",
   590  	15845: "sdgo",
   591  	16754: "ardr",
   592  	19165: "safe[safecoin]",
   593  	19167: "zel",
   594  	19169: "rito",
   595  	20036: "xnd",
   596  	22504: "pwr",
   597  	25252: "bell",
   598  	25718: "chx",
   599  	31102: "esn",
   600  	31337: "thepowerio",
   601  	33416: "teo",
   602  	33878: "btcs",
   603  	34952: "btt",
   604  	37992: "fxtc",
   605  	39321: "ama",
   606  	49344: "stash",
   607  	// Ethereum reserved token range 60000-60999
   608  	60001: "usdc.eth",
   609  	60002: "usdt.eth",
   610  	60003: "matic.eth", // Old MATIC token on Ethereum, not POL token
   611  	// END Ethereum reserved token range
   612  	65536:  "keth",
   613  	88888:  "ryo[c0ban]",
   614  	99999:  "wicc",
   615  	200625: "aka",
   616  	200665: "genom",
   617  	246529: "ats",
   618  	424242: "x42",
   619  	666666: "vite",
   620  	// Polygon reserved token range 966000-966999
   621  	966001: "usdc.polygon",
   622  	966002: "weth.polygon",
   623  	966003: "wbtc.polygon",
   624  	966004: "usdt.polygon",
   625  	// END Polygon reserved token range
   626  	1171337:  "ilt",
   627  	1313114:  "etho",
   628  	1313500:  "xero",
   629  	1712144:  "lax",
   630  	5249353:  "bco[ore]",
   631  	5249354:  "bhd",
   632  	5264462:  "ptn",
   633  	5718350:  "wan",
   634  	5741564:  "waves",
   635  	7562605:  "sem",
   636  	7567736:  "ion",
   637  	7825266:  "wgr",
   638  	7825267:  "obsr",
   639  	61717561: "aqua",
   640  	91927009: "kusd",
   641  	99999998: "fluid",
   642  	99999999: "qkc",
   643  	// math.MaxInt32 is the highest ID we should gol for v1 non-mesh dcrdex cuz
   644  	// of db type used for asset ID.
   645  	// Reserved for pre-paid bonds.
   646  	2147483647: "reservedforprepaidbonds", // math.MaxInt32
   647  }
   648  
   649  // TokenChains is a map of token symbol to a list of [2]uint32, where the first
   650  // element is the token's BIP ID and the second element is the chain's BIP ID.
   651  var TokenChains = make(map[string][][2]uint32)
   652  
   653  func init() {
   654  	for id, symbol := range bipIDs {
   655  		parts := strings.Split(symbol, ".")
   656  		if len(parts) < 2 {
   657  			continue
   658  		}
   659  		tokenSymbol, chainSymbol := parts[0], parts[1]
   660  		chainID, found := BipSymbolID(chainSymbol)
   661  		if !found {
   662  			panic("unknown chain symbol: " + chainSymbol)
   663  		}
   664  		TokenChains[tokenSymbol] = append(TokenChains[tokenSymbol], [2]uint32{id, chainID})
   665  	}
   666  }