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 }